[Scummvm-cvs-logs] SF.net SVN: scummvm:[53249] scummvm/trunk/engines/sword25/package/ scummvmpackagemanager.cpp
sev at users.sourceforge.net
sev at users.sourceforge.net
Wed Oct 13 00:47:57 CEST 2010
Revision: 53249
http://scummvm.svn.sourceforge.net/scummvm/?rev=53249&view=rev
Author: sev
Date: 2010-10-12 22:47:57 +0000 (Tue, 12 Oct 2010)
Log Message:
-----------
SWORD25: Implement BS_ScummVMPackageManager::doSearch.
Now all scripts run.
Modified Paths:
--------------
scummvm/trunk/engines/sword25/package/scummvmpackagemanager.cpp
Modified: scummvm/trunk/engines/sword25/package/scummvmpackagemanager.cpp
===================================================================
--- scummvm/trunk/engines/sword25/package/scummvmpackagemanager.cpp 2010-10-12 22:47:38 UTC (rev 53248)
+++ scummvm/trunk/engines/sword25/package/scummvmpackagemanager.cpp 2010-10-12 22:47:57 UTC (rev 53249)
@@ -58,19 +58,13 @@
_rootFolder(ConfMan.get("path")) {
}
-// -----------------------------------------------------------------------------
-
BS_ScummVMPackageManager::~BS_ScummVMPackageManager() {
}
-// -----------------------------------------------------------------------------
-
BS_Service *BS_ScummVMPackageManager_CreateObject(BS_Kernel *kernelPtr) {
return new BS_ScummVMPackageManager(kernelPtr);
}
-// -----------------------------------------------------------------------------
-
/**
* Scans through the archive list for a specified file
*/
@@ -79,7 +73,7 @@
Common::List<ArchiveEntry *>::iterator i;
for (i = _archiveList.begin(); i != _archiveList.end(); ++i) {
if (!fileName.hasPrefix((*i)->_mountPath)) {
- // The mount path has more subfolder depth than the search entry, so skip it
+ // The mount path is in different subtree. Skipping
continue;
}
@@ -97,8 +91,6 @@
return Common::ArchiveMemberPtr();
}
-// -----------------------------------------------------------------------------
-
bool BS_ScummVMPackageManager::LoadPackage(const Common::String &fileName, const Common::String &mountPosition) {
Common::Archive *zipFile = Common::makeZipArchive(fileName);
if (zipFile == NULL) {
@@ -119,8 +111,6 @@
}
}
-// -----------------------------------------------------------------------------
-
bool BS_ScummVMPackageManager::LoadDirectoryAsPackage(const Common::String &directoryName, const Common::String &mountPosition) {
Common::FSNode directory(directoryName);
Common::Archive *folderArchive = new Common::FSDirectory(directory);
@@ -134,8 +124,6 @@
}
}
-// -----------------------------------------------------------------------------
-
void *BS_ScummVMPackageManager::GetFile(const Common::String &fileName, unsigned int *fileSizePtr) {
Common::SeekableReadStream *in;
Common::ArchiveMemberPtr fileNode = GetArchiveMember(normalizePath(fileName, _currentDirectory));
@@ -158,28 +146,20 @@
return buffer;
}
-// -----------------------------------------------------------------------------
-
Common::String BS_ScummVMPackageManager::GetCurrentDirectory() {
return _currentDirectory;
}
-// -----------------------------------------------------------------------------
-
bool BS_ScummVMPackageManager::ChangeDirectory(const Common::String &directory) {
// Get the path elements for the file
_currentDirectory = normalizePath(directory, _currentDirectory);
return true;
}
-// -----------------------------------------------------------------------------
-
Common::String BS_ScummVMPackageManager::GetAbsolutePath(const Common::String &fileName) {
return normalizePath(fileName, _currentDirectory);
}
-// -----------------------------------------------------------------------------
-
unsigned int BS_ScummVMPackageManager::GetFileSize(const Common::String &fileName) {
Common::SeekableReadStream *in;
Common::ArchiveMemberPtr fileNode = GetArchiveMember(normalizePath(fileName, _currentDirectory));
@@ -193,8 +173,6 @@
return fileSize;
}
-// -----------------------------------------------------------------------------
-
unsigned int BS_ScummVMPackageManager::GetFileType(const Common::String &fileName) {
warning("STUB: BS_ScummVMPackageManager::GetFileType(%s)", fileName.c_str());
@@ -202,38 +180,45 @@
return BS_PackageManager::FT_FILE;
}
-// -----------------------------------------------------------------------------
-
bool BS_ScummVMPackageManager::FileExists(const Common::String &fileName) {
Common::ArchiveMemberPtr fileNode = GetArchiveMember(normalizePath(fileName, _currentDirectory));
return fileNode;
}
int BS_ScummVMPackageManager::doSearch(Common::ArchiveMemberList &list, const Common::String &filter, const Common::String &path, unsigned int typeFilter) {
-#if 0
- Common::String normalizedPath = normalizePath(path, _currentDirectory);
+ Common::String normalizedFilter = normalizePath(filter, _currentDirectory);
+ int num = 0;
- Common::FSNode folderNode = GetFSNode(path);
- if (!folderNode.exists() || !folderNode.isDirectory()) return NULL;
+ if (path.size() > 0)
+ warning("STUB: BS_ScummVMPackageManager::doSearch(<%s>, <%s>, %d)", filter.c_str(), path.c_str(), typeFilter);
- Common::Archive *folder = new Common::FSDirectory(folderNode);
- Common::ArchiveMemberList memberList;
+ // Loop through checking each archive
+ Common::List<ArchiveEntry *>::iterator i;
+ for (i = _archiveList.begin(); i != _archiveList.end(); ++i) {
+ Common::ArchiveMemberList memberList;
- if (folder->listMatchingMembers(memberList, Filter) == 0)
- return NULL;
+ if (!normalizedFilter.hasPrefix((*i)->_mountPath)) {
+ // The mount path is in different subtree. Skipping
+ continue;
+ }
- // Create a list of the matching names
- Common::StringArray nameList;
- for (Common::ArchiveMemberList::iterator i = memberList.begin(); i != memberList.end(); ++i) {
- nameList.push_back((*i)->getName());
+ // Construct relative path
+ Common::String resFilter(&normalizedFilter.c_str()[(*i)->_mountPath.size()]);
+
+ if ((*i)->archive->listMatchingMembers(memberList, resFilter) == 0)
+ continue;
+
+ // Create a list of the matching names
+ for (Common::ArchiveMemberList::iterator it = memberList.begin(); it != memberList.end(); ++it) {
+ if (((typeFilter & BS_PackageManager::FT_DIRECTORY) && (*it)->getName().hasSuffix("/")) ||
+ ((typeFilter & BS_PackageManager::FT_FILE) && !(*it)->getName().hasSuffix("/"))) {
+ list.push_back(*it);
+ num++;
+ }
+ }
}
- // Return a ArchiveFileSearch object that encapsulates the name list
- return new ArchiveFileSearch(*this, nameList);
-#else
- warning("STUB: BS_ScummVMPackageManager::CreateSearch(%s, %s, %d)", filter.c_str(), path.c_str(), typeFilter);
- return 0;
-#endif
+ return num;
}
} // End of namespace Sword25
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list