OpenTTD Source: src/fios.cpp File Reference

OpenTTD Source 15.0-RC2

Data Structures | Typedefs | Functions | Variables
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 "core/string_consumer.hpp"`
`#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, std::string_view filename, 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 (std::string_view 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, std::string_view name, std::string_view ext)
| Construct a filename from its components in destination buffer buf.
std::string | FiosMakeSavegameName (std::string_view name)
| Make a save game or scenario filename from a name.
std::string | FiosMakeHeightmapName (std::string_view name)
| Construct a filename for a height map.
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 (std::string_view 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, std::string_view file, 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, std::string_view file, 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, std::string_view file, 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, std::string_view file, std::string_view ext)
| Callback for FiosGetTownDataList.
void | FiosGetTownDataList (SaveLoadOperation fop, bool show_dirs, FileList &file_list)
| Get a list of town data files.
std::string_view | FiosGetScreenshotDir ()
| Get the directory for screenshots.
std::optional< std::string_view > | 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, std::string_view filename, std::string_view ext)

Definition at line 233 of file fios.cpp.

## Function Documentation

## ◆ FindScenario()

std::optional< std::string_view > FindScenario | ( | const ContentInfo & | ci,
|  | bool | md5sum
| ) |  |

Find a given scenario based on its unique ID.

Parameters

  ci | The content info to compare it to.
  md5sum | Whether to look at the md5sum or the id.

Returns
  The filename of the file, else `std::nullopt`.

Definition at line 664 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

  *item | Item telling us what to do.

Returns
  `true` when the path got changed.

Definition at line 142 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().

## ◆ FiosGetCurrentPath()

std::string FiosGetCurrentPath | ( |  | ) |

Get the current path/working directory.

Definition at line 132 of file fios.cpp.

Referenced by SaveLoadWindow::DrawWidget().

## ◆ FiosGetDrives()

void FiosGetDrives | ( | FileList & | file_list | ) |
| extern

Definition at line 65 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

  fop | Purpose of collecting the list.
  show_dirs | Whether to list directories.
  callback_proc | The function that is called where you need to do the filtering.
  subdir | The directory from where to start (global) searching.
  file_list | Destination of the found files.

Definition at line 307 of file fios.cpp.

References FS2OTTD(), GetEncodedString(), 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

  fop | Purpose of collecting the list.
  show_dirs | Whether to show directories.
  file_list | Destination of the found files.

Definition at line 528 of file fios.cpp.

References FiosGetFileList(), HEIGHTMAP_DIR, and NO_DIRECTORY.

Referenced by FileList::BuildFileList().

## ◆ FiosGetHeightmapListCallback()

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

Definition at line 482 of file fios.cpp.

## ◆ FiosGetSavegameList()

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

Get a list of savegames.

Parameters

  fop | Purpose of collecting the list.
  show_dirs | Whether to show directories.
  file_list | Destination of the found files.

See also
  FiosGetFileList

Definition at line 421 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,
|  | std::string_view | file,
|  | std::string_view | ext
| ) |  |

Callback for FiosGetFileList.

It tells if a file is a savegame or not.

Parameters

  fop | Purpose of collecting the list.
  file | Name of the file to check.
  ext | A 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 392 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

  fop | Purpose of collecting the list.
  show_dirs | Whether to show directories.
  file_list | Destination of the found files.

See also
  FiosGetFileList

Definition at line 468 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,
|  | std::string_view | file,
|  | std::string_view | ext
| ) |  |

Callback for FiosGetFileList.

It tells if a file is a scenario or not.

Parameters

  fop | Purpose of collecting the list.
  file | Name of the file to check.
  ext | A 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 441 of file fios.cpp.

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

Referenced by FiosGetScenarioList(), and openttd_main().

## ◆ FiosGetScreenshotDir()

std::string_view FiosGetScreenshotDir | ( |  | ) |

Get the directory for screenshots.

Returns
  path to screenshots

Definition at line 581 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

  fop | Purpose of collecting the list.
  show_dirs | Whether to show directories.
  file_list | Destination of the found files.

Definition at line 564 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,
|  | std::string_view | file,
|  | std::string_view | ext
| ) |  |
| static

Callback for FiosGetTownDataList.

Parameters

  fop | Purpose of collecting the list.
  file | Name 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 547 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 84 of file unix.cpp.

## ◆ FiosIsRoot()

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

Definition at line 60 of file unix.cpp.

## ◆ FiosMakeFilename()

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

Construct a filename from its components in destination buffer buf.

Parameters

  path | Directory path, may be `nullptr`.
  name | Filename.
  ext | Filename extension (use `""` for no extension).

Returns
  The completed filename.

Definition at line 194 of file fios.cpp.

References StrEqualsIgnoreCase().

Referenced by FiosMakeHeightmapName(), and FiosMakeSavegameName().

## ◆ FiosMakeHeightmapName()

std::string FiosMakeHeightmapName | ( | std::string_view | name | ) |

Construct a filename for a height map.

Parameters

  name | Filename.

Returns
  The completed filename.

Definition at line 228 of file fios.cpp.

References FiosMakeFilename(), and GetCurrentScreenshotExtension().

Referenced by SaveLoadWindow::OnTimeout().

## ◆ FiosMakeSavegameName()

std::string FiosMakeSavegameName | ( | std::string_view | name | ) |

Make a save game or scenario filename from a name.

Parameters

  name | Name of the file.

Returns
  The completed filename.

Definition at line 216 of file fios.cpp.

References FiosMakeFilename().

Referenced by SaveLoadWindow::OnTimeout().

## ◆ GetFileTitle()

static std::string GetFileTitle | ( | std::string_view | 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

  file | filename to get the title for
  subdir | the sub directory to search in

Returns
  The file title.

Definition at line 370 of file fios.cpp.

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

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

## ◆ GetOldSaveGameName()

std::string GetOldSaveGameName | ( | std::string_view | 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

  ci | The content info to compare it to.
  md5sum | Whether to look at the md5sum or the id.

Returns
  True iff we've got the scenario.

Definition at line 684 of file fios.cpp.

References FindScenario().

Referenced by GetHasContentProcforContentType().

## ◆ ScanScenarios()

void ScanScenarios | ( |  | ) |

Force a (re)scan of the scenarios.

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

## ◆ _savegame_sort_order

SortingBits _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING

Definition at line 33 of file fios.cpp.

## ◆ _scanner

ScenarioScanner _scanner
| static

Scanner for scenarios.

Definition at line 656 of file fios.cpp.

Referenced by FindScenario(), and ScanScenarios().