mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-06 10:58:01 +00:00
Merge pull request #949 from csnover/advanceddetector-fullpaths
ENGINES: Allow detection entries to match on full paths
This commit is contained in:
commit
d6645f3fc9
@ -345,7 +345,7 @@ void AdvancedMetaEngine::reportUnknown(const Common::FSNode &path, const ADFileP
|
||||
g_system->logMessage(LogMessageType::kInfo, report.c_str());
|
||||
}
|
||||
|
||||
void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const {
|
||||
void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth, const Common::String &parentName) const {
|
||||
if (depth <= 0)
|
||||
return;
|
||||
|
||||
@ -353,6 +353,8 @@ void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSL
|
||||
return;
|
||||
|
||||
for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
|
||||
Common::String tstr = (_matchFullPaths && !parentName.empty() ? parentName + "/" : "") + file->getName();
|
||||
|
||||
if (file->isDirectory()) {
|
||||
Common::FSList files;
|
||||
|
||||
@ -372,11 +374,9 @@ void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSL
|
||||
if (!file->getChildren(files, Common::FSNode::kListAll))
|
||||
continue;
|
||||
|
||||
composeFileHashMap(allFiles, files, depth - 1);
|
||||
composeFileHashMap(allFiles, files, depth - 1, tstr);
|
||||
}
|
||||
|
||||
Common::String tstr = file->getName();
|
||||
|
||||
// Strip any trailing dot
|
||||
if (tstr.lastChar() == '.')
|
||||
tstr.deleteLastChar();
|
||||
@ -625,6 +625,7 @@ AdvancedMetaEngine::AdvancedMetaEngine(const void *descs, uint descItemSize, con
|
||||
_guiOptions = GUIO_NONE;
|
||||
_maxScanDepth = 1;
|
||||
_directoryGlobs = NULL;
|
||||
_matchFullPaths = false;
|
||||
}
|
||||
|
||||
void AdvancedMetaEngine::initSubSystems(const ADGameDescription *gameDesc) const {
|
||||
|
@ -251,6 +251,17 @@ protected:
|
||||
*/
|
||||
const char * const *_directoryGlobs;
|
||||
|
||||
/**
|
||||
* If true, filenames will be matched against the entire path, relative to
|
||||
* the root detection directory (e.g. "foo/bar.000" for a file at
|
||||
* "<root>/foo/bar.000"). Otherwise, filenames only match the basename
|
||||
* (e.g. "bar.000" for the same file).
|
||||
*
|
||||
* @note _maxScanDepth and _directoryGlobs must still be configured to allow
|
||||
* the detector to find files inside subdirectories.
|
||||
*/
|
||||
bool _matchFullPaths;
|
||||
|
||||
public:
|
||||
AdvancedMetaEngine(const void *descs, uint descItemSize, const PlainGameDescriptor *gameIds, const ADExtraGuiOptionsMap *extraGuiOptions = 0);
|
||||
|
||||
@ -326,7 +337,7 @@ protected:
|
||||
* Compose a hashmap of all files in fslist.
|
||||
* Includes nifty stuff like removing trailing dots and ignoring case.
|
||||
*/
|
||||
void composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const;
|
||||
void composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth, const Common::String &parentName = Common::String()) const;
|
||||
|
||||
/** Get the properties (size and MD5) of this file. */
|
||||
bool getFileProperties(const Common::FSNode &parent, const FileMap &allFiles, const ADGameDescription &game, const Common::String fname, ADFileProperties &fileProps) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user