OpenTTD Source 20241224-master-gf74b0cf984
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 253 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 690 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.

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 248 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 327 of file fios.cpp.

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

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 549 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 503 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 442 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 413 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 489 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 462 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 602 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 585 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 568 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 201 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 235 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 223 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 392 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 309 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 710 of file fios.cpp.

References FindScenario().

Referenced by ClientNetworkContentSocketHandler::Receive_SERVER_INFO().

◆ ScanScenarios()

void ScanScenarios ( )

Force a (re)scan of the scenarios.

Definition at line 718 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 682 of file fios.cpp.

Referenced by FindScenario(), and ScanScenarios().