OpenTTD Source 20250426-master-gbb1d561369
fios.cpp File Reference

This file contains functions for building file lists for the save/load dialogs. More...

#include "stdafx.h"
#include "3rdparty/md5/md5.h"
#include "fileio_func.h"
#include "fios.h"
#include "network/network_content.h"
#include "screenshot.h"
#include "string_func.h"
#include "strings_func.h"
#include "tar_type.h"
#include <sys/stat.h>
#include <charconv>
#include <filesystem>
#include "table/strings.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

class  FiosFileScanner
 Scanner to scan for a particular type of FIOS file. More...
 
struct  ScenarioIdentifier
 Basic data to distinguish a scenario. More...
 
class  ScenarioScanner
 Scanner to find the unique IDs of scenarios. More...
 

Typedefs

typedef std::tuple< FiosType, std::string > FiosGetTypeAndNameProc(SaveLoadOperation fop, const std::string &filename, const std::string_view ext)
 

Functions

bool FiosIsRoot (const std::string &path)
 
bool FiosIsHiddenFile (const std::filesystem::path &path)
 
void FiosGetDrives (FileList &file_list)
 
std::string GetOldSaveGameName (const std::string &file)
 
std::string FiosGetCurrentPath ()
 Get the current path/working directory.
 
bool FiosBrowseTo (const FiosItem *item)
 Browse to a new path based on the passed item, starting at _fios_path.
 
static std::string FiosMakeFilename (const std::string *path, const char *name, const char *ext)
 Construct a filename from its components in destination buffer buf.
 
std::string FiosMakeSavegameName (const char *name)
 Make a save game or scenario filename from a name.
 
std::string FiosMakeHeightmapName (const char *name)
 Construct a filename for a height map.
 
bool FiosDelete (const char *name)
 Delete a file.
 
static void FiosGetFileList (SaveLoadOperation fop, bool show_dirs, FiosGetTypeAndNameProc *callback_proc, Subdirectory subdir, FileList &file_list)
 Fill the list of the files in a directory, according to some arbitrary rule.
 
static std::string GetFileTitle (const std::string &file, Subdirectory subdir)
 Get the title of a file, which (if exists) is stored in a file named the same as the data file but with '.title' added to it.
 
std::tuple< FiosType, std::string > FiosGetSavegameListCallback (SaveLoadOperation fop, const std::string &file, const std::string_view ext)
 Callback for FiosGetFileList.
 
void FiosGetSavegameList (SaveLoadOperation fop, bool show_dirs, FileList &file_list)
 Get a list of savegames.
 
std::tuple< FiosType, std::string > FiosGetScenarioListCallback (SaveLoadOperation fop, const std::string &file, const std::string_view ext)
 Callback for FiosGetFileList.
 
void FiosGetScenarioList (SaveLoadOperation fop, bool show_dirs, FileList &file_list)
 Get a list of scenarios.
 
std::tuple< FiosType, std::string > FiosGetHeightmapListCallback (SaveLoadOperation, const std::string &file, const std::string_view ext)
 
void FiosGetHeightmapList (SaveLoadOperation fop, bool show_dirs, FileList &file_list)
 Get a list of heightmaps.
 
static std::tuple< FiosType, std::string > FiosGetTownDataListCallback (SaveLoadOperation fop, const std::string &file, const std::string_view ext)
 Callback for FiosGetTownDataList.
 
void FiosGetTownDataList (SaveLoadOperation fop, bool show_dirs, FileList &file_list)
 Get a list of town data files.
 
const char * FiosGetScreenshotDir ()
 Get the directory for screenshots.
 
const char * FindScenario (const ContentInfo &ci, bool md5sum)
 Find a given scenario based on its unique ID.
 
bool HasScenario (const ContentInfo &ci, bool md5sum)
 Check whether we've got a given scenario based on its unique ID.
 
void ScanScenarios ()
 Force a (re)scan of the scenarios.
 

Variables

static std::string * _fios_path = nullptr
 
SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING
 
static ScenarioScanner _scanner
 Scanner for scenarios.
 

Detailed Description

This file contains functions for building file lists for the save/load dialogs.

Definition in file fios.cpp.

Typedef Documentation

◆ FiosGetTypeAndNameProc

typedef std::tuple< FiosType, std::string > FiosGetTypeAndNameProc(SaveLoadOperation fop, const std::string &filename, const std::string_view ext)

Definition at line 247 of file fios.cpp.

Function Documentation

◆ FindScenario()

const char * FindScenario ( const ContentInfo ci,
bool  md5sum 
)

Find a given scenario based on its unique ID.

Parameters
ciThe content info to compare it to.
md5sumWhether to look at the md5sum or the id.
Returns
The filename of the file, else nullptr.

Definition at line 677 of file fios.cpp.

References _scanner, ContentInfo::md5sum, ScenarioScanner::Scan(), and ContentInfo::unique_id.

Referenced by ContentInfo::GetTextfile(), and HasScenario().

◆ FiosBrowseTo()

bool FiosBrowseTo ( const FiosItem item)

Browse to a new path based on the passed item, starting at _fios_path.

Parameters
*itemItem telling us what to do.
Returns
true when the path got changed.

Definition at line 143 of file fios.cpp.

References FiosType::detailed, DFT_FIOS_DIR, DFT_FIOS_DIRECT, DFT_FIOS_DRIVE, DFT_FIOS_PARENT, and DFT_INVALID.

Referenced by SaveLoadWindow::OnClick().

◆ FiosDelete()

bool FiosDelete ( const char *  name)

Delete a file.

Parameters
nameFilename to delete.
Returns
Whether the file deletion was successful.

Definition at line 242 of file fios.cpp.

References FioRemove(), and FiosMakeSavegameName().

Referenced by SaveLoadWindow::OnTimeout().

◆ FiosGetCurrentPath()

std::string FiosGetCurrentPath ( )

Get the current path/working directory.

Definition at line 133 of file fios.cpp.

Referenced by SaveLoadWindow::DrawWidget().

◆ FiosGetDrives()

void FiosGetDrives ( FileList file_list)
extern

Definition at line 62 of file unix.cpp.

◆ FiosGetFileList()

static void FiosGetFileList ( SaveLoadOperation  fop,
bool  show_dirs,
FiosGetTypeAndNameProc *  callback_proc,
Subdirectory  subdir,
FileList file_list 
)
static

Fill the list of the files in a directory, according to some arbitrary rule.

Parameters
fopPurpose of collecting the list.
show_dirsWhether to list directories.
callback_procThe function that is called where you need to do the filtering.
subdirThe directory from where to start (global) searching.
file_listDestination of the found files.

Definition at line 321 of file fios.cpp.

References FS2OTTD(), GetString(), NO_DIRECTORY, OTTD2FS(), and FileScanner::Scan().

Referenced by FiosGetHeightmapList(), FiosGetSavegameList(), FiosGetScenarioList(), and FiosGetTownDataList().

◆ FiosGetHeightmapList()

void FiosGetHeightmapList ( SaveLoadOperation  fop,
bool  show_dirs,
FileList file_list 
)

Get a list of heightmaps.

Parameters
fopPurpose of collecting the list.
show_dirsWhether to show directories.
file_listDestination of the found files.

Definition at line 541 of file fios.cpp.

References FiosGetFileList(), HEIGHTMAP_DIR, and NO_DIRECTORY.

Referenced by FileList::BuildFileList().

◆ FiosGetHeightmapListCallback()

std::tuple< FiosType, std::string > FiosGetHeightmapListCallback ( SaveLoadOperation  fop,
const std::string &  file,
const std::string_view  ext 
)

Definition at line 495 of file fios.cpp.

◆ FiosGetSavegameList()

void FiosGetSavegameList ( SaveLoadOperation  fop,
bool  show_dirs,
FileList file_list 
)

Get a list of savegames.

Parameters
fopPurpose of collecting the list.
show_dirsWhether to show directories.
file_listDestination of the found files.
See also
FiosGetFileList

Definition at line 434 of file fios.cpp.

References FiosGetFileList(), FiosGetSavegameListCallback(), NO_DIRECTORY, and SAVE_DIR.

Referenced by FileList::BuildFileList().

◆ FiosGetSavegameListCallback()

std::tuple< FiosType, std::string > FiosGetSavegameListCallback ( SaveLoadOperation  fop,
const std::string &  file,
const std::string_view  ext 
)

Callback for FiosGetFileList.

It tells if a file is a savegame or not.

Parameters
fopPurpose of collecting the list.
fileName of the file to check.
extA pointer to the extension identifier inside file
Returns
a FIOS_TYPE_* type of the found file, FIOS_TYPE_INVALID if not a savegame, and the title of the file (if any).
See also
FiosGetFileList
FiosGetSavegameList

Definition at line 405 of file fios.cpp.

References GetFileTitle(), SAVE_DIR, SLO_LOAD, and StrEqualsIgnoreCase().

Referenced by FiosGetSavegameList(), and openttd_main().

◆ FiosGetScenarioList()

void FiosGetScenarioList ( SaveLoadOperation  fop,
bool  show_dirs,
FileList file_list 
)

Get a list of scenarios.

Parameters
fopPurpose of collecting the list.
show_dirsWhether to show directories.
file_listDestination of the found files.
See also
FiosGetFileList

Definition at line 481 of file fios.cpp.

References FiosGetFileList(), FiosGetScenarioListCallback(), NO_DIRECTORY, SCENARIO_DIR, and SLO_LOAD.

Referenced by FileList::BuildFileList().

◆ FiosGetScenarioListCallback()

std::tuple< FiosType, std::string > FiosGetScenarioListCallback ( SaveLoadOperation  fop,
const std::string &  file,
const std::string_view  ext 
)

Callback for FiosGetFileList.

It tells if a file is a scenario or not.

Parameters
fopPurpose of collecting the list.
fileName of the file to check.
extA pointer to the extension identifier inside file
Returns
a FIOS_TYPE_* type of the found file, FIOS_TYPE_INVALID if not a scenario and the title of the file (if any).
See also
FiosGetFileList
FiosGetScenarioList

Definition at line 454 of file fios.cpp.

References GetFileTitle(), SCENARIO_DIR, SLO_LOAD, and StrEqualsIgnoreCase().

Referenced by FiosGetScenarioList(), and openttd_main().

◆ FiosGetScreenshotDir()

const char * FiosGetScreenshotDir ( )

Get the directory for screenshots.

Returns
path to screenshots

Definition at line 594 of file fios.cpp.

References SCREENSHOT_DIR.

Referenced by NewGRFProfiler::GetOutputFilename(), and MakeScreenshotName().

◆ FiosGetTownDataList()

void FiosGetTownDataList ( SaveLoadOperation  fop,
bool  show_dirs,
FileList file_list 
)

Get a list of town data files.

Parameters
fopPurpose of collecting the list.
show_dirsWhether to show directories.
file_listDestination of the found files.

Definition at line 577 of file fios.cpp.

References FiosGetFileList(), FiosGetTownDataListCallback(), HEIGHTMAP_DIR, and NO_DIRECTORY.

Referenced by FileList::BuildFileList().

◆ FiosGetTownDataListCallback()

static std::tuple< FiosType, std::string > FiosGetTownDataListCallback ( SaveLoadOperation  fop,
const std::string &  file,
const std::string_view  ext 
)
static

Callback for FiosGetTownDataList.

Parameters
fopPurpose of collecting the list.
fileName of the file to check.
Returns
a FIOS_TYPE_JSON type of the found file, FIOS_TYPE_INVALID if not a valid JSON file, and the title of the file (if any).

Definition at line 560 of file fios.cpp.

References GetFileTitle(), SAVE_DIR, SLO_LOAD, and StrEqualsIgnoreCase().

Referenced by FiosGetTownDataList().

◆ FiosIsHiddenFile()

bool FiosIsHiddenFile ( const std::filesystem::path &  path)
extern

Definition at line 81 of file unix.cpp.

◆ FiosIsRoot()

bool FiosIsRoot ( const std::string &  path)
extern

Definition at line 57 of file unix.cpp.

◆ FiosMakeFilename()

static std::string FiosMakeFilename ( const std::string *  path,
const char *  name,
const char *  ext 
)
static

Construct a filename from its components in destination buffer buf.

Parameters
pathDirectory path, may be nullptr.
nameFilename.
extFilename extension (use "" for no extension).
Returns
The completed filename.

Definition at line 195 of file fios.cpp.

References StrEqualsIgnoreCase().

Referenced by FiosMakeHeightmapName(), and FiosMakeSavegameName().

◆ FiosMakeHeightmapName()

std::string FiosMakeHeightmapName ( const char *  name)

Construct a filename for a height map.

Parameters
nameFilename.
Returns
The completed filename.

Definition at line 229 of file fios.cpp.

References FiosMakeFilename(), and GetCurrentScreenshotExtension().

Referenced by SaveLoadWindow::OnTimeout().

◆ FiosMakeSavegameName()

std::string FiosMakeSavegameName ( const char *  name)

Make a save game or scenario filename from a name.

Parameters
nameName of the file.
Returns
The completed filename.

Definition at line 217 of file fios.cpp.

References FiosMakeFilename().

Referenced by FiosDelete(), and SaveLoadWindow::OnTimeout().

◆ GetFileTitle()

static std::string GetFileTitle ( const std::string &  file,
Subdirectory  subdir 
)
static

Get the title of a file, which (if exists) is stored in a file named the same as the data file but with '.title' added to it.

Parameters
filefilename to get the title for
subdirthe sub directory to search in
Returns
The file title.

Definition at line 384 of file fios.cpp.

References FioFOpenFile(), lengthof, and StrMakeValid().

Referenced by FiosGetSavegameListCallback(), FiosGetScenarioListCallback(), and FiosGetTownDataListCallback().

◆ GetOldSaveGameName()

std::string GetOldSaveGameName ( const std::string &  file)
extern

Definition at line 285 of file oldloader.cpp.

◆ HasScenario()

bool HasScenario ( const ContentInfo ci,
bool  md5sum 
)

Check whether we've got a given scenario based on its unique ID.

Parameters
ciThe content info to compare it to.
md5sumWhether to look at the md5sum or the id.
Returns
True iff we've got the scenario.

Definition at line 697 of file fios.cpp.

References FindScenario().

Referenced by GetHasContentProcforContentType().

◆ ScanScenarios()

void ScanScenarios ( )

Force a (re)scan of the scenarios.

Definition at line 705 of file fios.cpp.

References _scanner, and ScenarioScanner::Scan().

Referenced by NetworkContentDownloadStatusWindow::Close().

Variable Documentation

◆ _fios_path

std::string* _fios_path = nullptr
static

Definition at line 31 of file fios.cpp.

◆ _savegame_sort_order

SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING

Definition at line 32 of file fios.cpp.

◆ _scanner

ScenarioScanner _scanner
static

Scanner for scenarios.

Definition at line 669 of file fios.cpp.

Referenced by FindScenario(), and ScanScenarios().