[Scummvm-git-logs] scummvm master -> cd85aaef6251aed403f5a726d9d4b2507df05d4b
dreammaster
noreply at scummvm.org
Thu Apr 25 03:46:07 UTC 2024
This automated email contains information about 11 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
3902c07d74 COMMON: Use matchPathComponents param in FSDirectory::listMatchingMembers
9f6ed97a85 ULTIMA: Implement UltimaDataArchiveProxy::listMatchingMembers()
f171351ac4 ULTIMA: Implement UltimaDataArchiveProxy::listMembers()
472f322660 ULTIMA: Implement UltimaDataArchiveProxy::isPathDirectory()
078b882da0 ULTIMA: Fix UltimaDataArchiveMember::getFileName() infinite recursion
fc4cf9f573 ULTIMA: Implement UltimaDataArchive::isPathDirectory()
c28022ff41 ULTIMA: Implement UltimaDataArchiveMember::isDirectory()
f053d9c6ce ULTIMA: Rework UltimaDataArchive::listMatchingMembers
0963ca6ba6 ULTIMA: Simplify UltimaDataArchive::listMembers
05724bef55 ULTIMA: NUVIE: Make NuvieFileList::open() use SearchMan
cd85aaef62 ULTIMA: NUVIE: Do not ignore "search" parameter in NuvieFileList::open()
Commit: 3902c07d74ece770b759a40def22dc9684e7da37
https://github.com/scummvm/scummvm/commit/3902c07d74ece770b759a40def22dc9684e7da37
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
COMMON: Use matchPathComponents param in FSDirectory::listMatchingMembers
Changed paths:
common/fs.cpp
diff --git a/common/fs.cpp b/common/fs.cpp
index 87876adc429..147d7ae64db 100644
--- a/common/fs.cpp
+++ b/common/fs.cpp
@@ -479,20 +479,33 @@ int FSDirectory::listMatchingMembers(ArchiveMemberList &list, const Path &patter
ensureCached();
int matches = 0;
- for (NodeCache::const_iterator it = _fileCache.begin(); it != _fileCache.end(); ++it) {
- if (it->_key.matchPattern(pattern)) {
- list.push_back(ArchiveMemberPtr(new FSDirectoryFile(it->_key, it->_value)));
- matches++;
- }
- }
- if (_includeDirectories) {
- for (NodeCache::const_iterator it = _subDirCache.begin(); it != _subDirCache.end(); ++it) {
- if (it->_key.matchPattern(pattern)) {
+ const char pathSep = getPathSeparator();
+ const char pathSepStr[] = {pathSep, '\0'};
+ const char *wildCardExclusions = matchPathComponents ? nullptr : pathSepStr;
+ Common::String patternStr;
+ if (matchPathComponents)
+ patternStr = pattern.toString(pathSep);
+
+ auto addMatchingToList = [&](const NodeCache &nodeCache) {
+ for (NodeCache::const_iterator it = nodeCache.begin(); it != nodeCache.end(); ++it) {
+ bool isMatch;
+ if (matchPathComponents) {
+ Common::String keyStr = it->_key.toString(pathSep);
+ isMatch = keyStr.matchString(patternStr, true, wildCardExclusions);
+ } else
+ isMatch = it->_key.matchPattern(pattern);
+
+ if (isMatch) {
list.push_back(ArchiveMemberPtr(new FSDirectoryFile(it->_key, it->_value)));
- matches++;
+ ++matches;
}
}
- }
+ };
+
+ addMatchingToList(_fileCache);
+
+ if (_includeDirectories)
+ addMatchingToList(_subDirCache);
return matches;
}
Commit: 9f6ed97a85f7dfd4ad36d62bd4744158cc812419
https://github.com/scummvm/scummvm/commit/9f6ed97a85f7dfd4ad36d62bd4744158cc812419
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Implement UltimaDataArchiveProxy::listMatchingMembers()
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
engines/ultima/shared/engine/data_archive.h
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index 5cf72d03762..5b0684f84a8 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -219,6 +219,19 @@ Common::FSNode UltimaDataArchiveProxy::getNode(const Common::Path &name) const {
return node;
}
+int UltimaDataArchiveProxy::listMatchingMembers(Common::ArchiveMemberList &list,
+ const Common::Path &pattern, bool matchPathComponents) const {
+ // Let FSDirectory adjust the filenames for us by using its prefix feature.
+ // Note: dir is intentionally constructed again on each call to prevent stale entries due to caching:
+ // Since this proxy class is intended for use during development, picking up modifications while the
+ // game is running might be useful.
+ const int maxDepth = 255; // chosen arbitrarily
+ Common::FSDirectory dir(_publicFolder, _folder, maxDepth, false, false, true);
+ if (matchPathComponents && pattern == "*")
+ return dir.listMembers(list);
+ else
+ return dir.listMatchingMembers(list, pattern, matchPathComponents);
+}
#endif
} // End of namespace Shared
diff --git a/engines/ultima/shared/engine/data_archive.h b/engines/ultima/shared/engine/data_archive.h
index c607a54f53e..e0ae960f9eb 100644
--- a/engines/ultima/shared/engine/data_archive.h
+++ b/engines/ultima/shared/engine/data_archive.h
@@ -146,9 +146,7 @@ public:
* @return the number of members added to list
*/
int listMatchingMembers(Common::ArchiveMemberList &list,
- const Common::Path &pattern, bool matchPathComponents = false) const override {
- return 0;
- }
+ const Common::Path &pattern, bool matchPathComponents = false) const override;
/**
* Add all members of the Archive to list.
Commit: f171351ac4d32254215f210c00228887cbdedd64
https://github.com/scummvm/scummvm/commit/f171351ac4d32254215f210c00228887cbdedd64
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Implement UltimaDataArchiveProxy::listMembers()
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
engines/ultima/shared/engine/data_archive.h
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index 5b0684f84a8..79b46713567 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -219,6 +219,10 @@ Common::FSNode UltimaDataArchiveProxy::getNode(const Common::Path &name) const {
return node;
}
+int UltimaDataArchiveProxy::listMembers(Common::ArchiveMemberList &list) const {
+ return listMatchingMembers(list, "*", true);
+}
+
int UltimaDataArchiveProxy::listMatchingMembers(Common::ArchiveMemberList &list,
const Common::Path &pattern, bool matchPathComponents) const {
// Let FSDirectory adjust the filenames for us by using its prefix feature.
diff --git a/engines/ultima/shared/engine/data_archive.h b/engines/ultima/shared/engine/data_archive.h
index e0ae960f9eb..cd3f495e3a3 100644
--- a/engines/ultima/shared/engine/data_archive.h
+++ b/engines/ultima/shared/engine/data_archive.h
@@ -154,9 +154,7 @@ public:
*
* @return the number of names added to list
*/
- int listMembers(Common::ArchiveMemberList &list) const override {
- return 0;
- }
+ int listMembers(Common::ArchiveMemberList &list) const override;
/**
* Returns a ArchiveMember representation of the given file.
Commit: 472f3226607f7651cf3e582f06e55b19c972d801
https://github.com/scummvm/scummvm/commit/472f3226607f7651cf3e582f06e55b19c972d801
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Implement UltimaDataArchiveProxy::isPathDirectory()
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
engines/ultima/shared/engine/data_archive.h
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index 79b46713567..83fd3a1f3c9 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -236,6 +236,10 @@ int UltimaDataArchiveProxy::listMatchingMembers(Common::ArchiveMemberList &list,
else
return dir.listMatchingMembers(list, pattern, matchPathComponents);
}
+
+bool UltimaDataArchiveProxy::isPathDirectory(const Common::Path &path) const {
+ return getNode(path).isDirectory();
+}
#endif
} // End of namespace Shared
diff --git a/engines/ultima/shared/engine/data_archive.h b/engines/ultima/shared/engine/data_archive.h
index cd3f495e3a3..9ce2d5e0d36 100644
--- a/engines/ultima/shared/engine/data_archive.h
+++ b/engines/ultima/shared/engine/data_archive.h
@@ -169,6 +169,8 @@ public:
*/
Common::SeekableReadStream *createReadStreamForMember(
const Common::Path &path) const override;
+
+ bool isPathDirectory(const Common::Path &path) const override;
};
#endif
Commit: 078b882da0133c7f44575000ff993468f503a4d4
https://github.com/scummvm/scummvm/commit/078b882da0133c7f44575000ff993468f503a4d4
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Fix UltimaDataArchiveMember::getFileName() infinite recursion
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index 83fd3a1f3c9..e5843a7ebd0 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -56,7 +56,7 @@ public:
return _member->getDisplayName();
}
- Common::String getFileName() const override { return getFileName(); }
+ Common::String getFileName() const override { return _member->getFileName(); }
Common::String getName() const override { return getPathInArchive().toString('/'); }
};
Commit: fc4cf9f573301b09c4f5c2e340925c51e835cf08
https://github.com/scummvm/scummvm/commit/fc4cf9f573301b09c4f5c2e340925c51e835cf08
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Implement UltimaDataArchive::isPathDirectory()
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
engines/ultima/shared/engine/data_archive.h
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index e5843a7ebd0..d793a115951 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -180,6 +180,9 @@ Common::SeekableReadStream *UltimaDataArchive::createReadStreamForMember(const C
return nullptr;
}
+bool UltimaDataArchive::isPathDirectory(const Common::Path &path) const {
+ return _zip->isPathDirectory(innerToPublic(path));
+}
/*-------------------------------------------------------------------*/
#ifndef RELEASE_BUILD
diff --git a/engines/ultima/shared/engine/data_archive.h b/engines/ultima/shared/engine/data_archive.h
index 9ce2d5e0d36..7f99ca8cb04 100644
--- a/engines/ultima/shared/engine/data_archive.h
+++ b/engines/ultima/shared/engine/data_archive.h
@@ -103,6 +103,8 @@ public:
*/
Common::SeekableReadStream *createReadStreamForMember(
const Common::Path &path) const override;
+
+ bool isPathDirectory(const Common::Path &path) const override;
};
#ifndef RELEASE_BUILD
Commit: c28022ff41fbc72fc1b378d7d1a53239c4a917c6
https://github.com/scummvm/scummvm/commit/c28022ff41fbc72fc1b378d7d1a53239c4a917c6
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Implement UltimaDataArchiveMember::isDirectory()
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index d793a115951..f6b2dac64e1 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -58,6 +58,8 @@ public:
Common::String getFileName() const override { return _member->getFileName(); }
Common::String getName() const override { return getPathInArchive().toString('/'); }
+
+ bool isDirectory() const override { return _member->isDirectory(); }
};
/*-------------------------------------------------------------------*/
Commit: f053d9c6ce7d63d5a50dd582a50078d7df2d5064
https://github.com/scummvm/scummvm/commit/f053d9c6ce7d63d5a50dd582a50078d7df2d5064
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Rework UltimaDataArchive::listMatchingMembers
This makes sure patterns are correctly matched against the modified/
public path of each archive member.
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index f6b2dac64e1..289dd95e16c 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -132,23 +132,24 @@ bool UltimaDataArchive::hasFile(const Common::Path &path) const {
}
int UltimaDataArchive::listMatchingMembers(Common::ArchiveMemberList &list, const Common::Path &pattern, bool matchPathComponents) const {
- Common::Path patt(pattern);
- if (patt.isRelativeTo(_publicFolder))
- patt = innerToPublic(patt);
-
- // Get any matching files
Common::ArchiveMemberList innerList;
- int result = _zip->listMatchingMembers(innerList, patt);
+ int numMatches = 0;
+ // Test whether we can skip filtering.
+ bool matchAll = matchPathComponents && pattern == "*";
- // Modify the results to change the filename
- for (Common::ArchiveMemberList::iterator it = innerList.begin();
- it != innerList.end(); ++it) {
+ // First, get all zip members relevant to the current game
+ _zip->listMatchingMembers(innerList, _innerfolder.appendComponent("*"), true);
+
+ // Modify the results to change the filename, then filter with pattern
+ for (const auto &innerMember : innerList) {
Common::ArchiveMemberPtr member = Common::ArchiveMemberPtr(
- new UltimaDataArchiveMember(*it, _innerfolder));
- list.push_back(member);
+ new UltimaDataArchiveMember(innerMember, _innerfolder));
+ if (matchAll || member->getPathInArchive().toString().matchString(pattern.toString(), true, matchPathComponents ? nullptr : "/")) {
+ list.push_back(member);
+ ++numMatches;
+ }
}
-
- return result;
+ return numMatches;
}
int UltimaDataArchive::listMembers(Common::ArchiveMemberList &list) const {
Commit: 0963ca6ba63c3244b694a3551723b5e97adbe238
https://github.com/scummvm/scummvm/commit/0963ca6ba63c3244b694a3551723b5e97adbe238
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: Simplify UltimaDataArchive::listMembers
Changed paths:
engines/ultima/shared/engine/data_archive.cpp
diff --git a/engines/ultima/shared/engine/data_archive.cpp b/engines/ultima/shared/engine/data_archive.cpp
index 289dd95e16c..fb19907eb02 100644
--- a/engines/ultima/shared/engine/data_archive.cpp
+++ b/engines/ultima/shared/engine/data_archive.cpp
@@ -153,18 +153,7 @@ int UltimaDataArchive::listMatchingMembers(Common::ArchiveMemberList &list, cons
}
int UltimaDataArchive::listMembers(Common::ArchiveMemberList &list) const {
- Common::ArchiveMemberList innerList;
- int result = _zip->listMembers(innerList);
-
- // Modify the results to change the filename
- for (Common::ArchiveMemberList::iterator it = innerList.begin();
- it != innerList.end(); ++it) {
- Common::ArchiveMemberPtr member = Common::ArchiveMemberPtr(
- new UltimaDataArchiveMember(*it, _innerfolder));
- list.push_back(member);
- }
-
- return result;
+ return listMatchingMembers(list, "*", true);
}
const Common::ArchiveMemberPtr UltimaDataArchive::getMember(const Common::Path &path) const {
Commit: 05724bef5523d828358219ce9350bf165e3c4e10
https://github.com/scummvm/scummvm/commit/05724bef5523d828358219ce9350bf165e3c4e10
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: NUVIE: Make NuvieFileList::open() use SearchMan
Fixes #14960
"The nuvie feature 'Use Custom Actor Tiles' is non functional"
Changed paths:
engines/ultima/nuvie/files/nuvie_file_list.cpp
engines/ultima/nuvie/files/nuvie_file_list.h
diff --git a/engines/ultima/nuvie/files/nuvie_file_list.cpp b/engines/ultima/nuvie/files/nuvie_file_list.cpp
index 297a3b457c5..c645b7b7247 100644
--- a/engines/ultima/nuvie/files/nuvie_file_list.cpp
+++ b/engines/ultima/nuvie/files/nuvie_file_list.cpp
@@ -36,23 +36,27 @@ NuvieFileList::~NuvieFileList() {
}
bool NuvieFileList::open(const Common::Path &directory, const char *search, uint8 s_mode) {
- Common::FSNode dir(directory);
- Common::FSList list;
+ Common::ArchiveMemberPtr arcMember = SearchMan.getMember(directory);
- search_prefix.assign(search);
sort_mode = s_mode;
- if (!dir.isDirectory()) {
+ if (!arcMember || !arcMember->isDirectory()) {
ConsoleAddWarning(Std::string("Failed to open ") + directory.toString());
return false;
}
- if (!dir.getChildren(list, Common::FSNode::kListFilesOnly)) {
+ Common::ArchiveMemberList children;
+
+ arcMember->listChildren(children);
+ if (children.empty()) {
ConsoleAddWarning(Std::string("Failed to get children of ") + directory.toString());
return false;
};
- for (const Common::FSNode &node : list)
- add_filename(node);
+
+ for (const auto &child : children) {
+ if (!child->isDirectory())
+ add_filename(child->getFileName());
+ }
//sort list by time last modified in decending order.
Common::sort(file_list.begin(), file_list.end(), NuvieFileDesc());
@@ -60,10 +64,10 @@ bool NuvieFileList::open(const Common::Path &directory, const char *search, uint
return true;
}
-bool NuvieFileList::add_filename(const Common::FSNode &file) {
+bool NuvieFileList::add_filename(const Common::String &fileName) {
NuvieFileDesc filedesc;
filedesc.m_time = 0;
- filedesc.filename.assign(file.getFileName());
+ filedesc.filename = fileName;
file_list.push_front(filedesc);
diff --git a/engines/ultima/nuvie/files/nuvie_file_list.h b/engines/ultima/nuvie/files/nuvie_file_list.h
index 6fd6bf2a64d..3adbdfe1898 100644
--- a/engines/ultima/nuvie/files/nuvie_file_list.h
+++ b/engines/ultima/nuvie/files/nuvie_file_list.h
@@ -56,10 +56,9 @@ class NuvieFileList {
protected:
Std::list<NuvieFileDesc> file_list;
- Std::string search_prefix;
uint8 sort_mode;
protected:
- bool add_filename(const Common::FSNode &file);
+ bool add_filename(const Common::String &fileName);
public:
NuvieFileList();
Commit: cd85aaef6251aed403f5a726d9d4b2507df05d4b
https://github.com/scummvm/scummvm/commit/cd85aaef6251aed403f5a726d9d4b2507df05d4b
Author: PushmePullyu (127053144+PushmePullyu at users.noreply.github.com)
Date: 2024-04-24T20:46:00-07:00
Commit Message:
ULTIMA: NUVIE: Do not ignore "search" parameter in NuvieFileList::open()
Also correct search patterns at all call sites.
Changed paths:
engines/ultima/nuvie/actors/actor_manager.cpp
engines/ultima/nuvie/files/nuvie_file_list.cpp
diff --git a/engines/ultima/nuvie/actors/actor_manager.cpp b/engines/ultima/nuvie/actors/actor_manager.cpp
index d17d03231a5..063ae4c0fa0 100644
--- a/engines/ultima/nuvie/actors/actor_manager.cpp
+++ b/engines/ultima/nuvie/actors/actor_manager.cpp
@@ -1107,7 +1107,7 @@ void ActorManager::loadAvatarTiles(const Common::Path &datadir) {
uint8 avatar_portrait = Game::get_game()->get_portrait()->get_avatar_portrait_num();
- Std::set<Std::string> files = getCustomTileFilenames(datadir, "avatar_");
+ Std::set<Std::string> files = getCustomTileFilenames(datadir, "avatar_###_####.bmp");
for (const Std::string &filename : files) {
if (filename.length() != 19) { // avatar_nnn_nnnn.bmp
@@ -1135,7 +1135,7 @@ void ActorManager::loadAvatarTiles(const Common::Path &datadir) {
void ActorManager::loadNPCTiles(const Common::Path &datadir) {
Common::Path imagefile;
- Std::set<Std::string> files = getCustomTileFilenames(datadir, "actor_");
+ Std::set<Std::string> files = getCustomTileFilenames(datadir, "actor_###_####.bmp");
for (const Std::string &filename : files) {
if (filename.length() != 18) { // actor_nnn_nnnn.bmp
diff --git a/engines/ultima/nuvie/files/nuvie_file_list.cpp b/engines/ultima/nuvie/files/nuvie_file_list.cpp
index c645b7b7247..463221b2f58 100644
--- a/engines/ultima/nuvie/files/nuvie_file_list.cpp
+++ b/engines/ultima/nuvie/files/nuvie_file_list.cpp
@@ -47,7 +47,7 @@ bool NuvieFileList::open(const Common::Path &directory, const char *search, uint
Common::ArchiveMemberList children;
- arcMember->listChildren(children);
+ arcMember->listChildren(children, search);
if (children.empty()) {
ConsoleAddWarning(Std::string("Failed to get children of ") + directory.toString());
return false;
More information about the Scummvm-git-logs
mailing list