View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002490 | DarkRadiant | General | public | 20.12.2010 10:32 | 31.07.2011 04:44 |
Reporter | dersaidin | Assigned To | greebo | ||
Priority | normal | Severity | normal | Reproducibility | N/A |
Status | closed | Resolution | fixed | ||
Product Version | 1.5.0 | ||||
Target Version | 1.5.0 | Fixed in Version | 1.5.0 | ||
Summary | 0002490: Xreal: Configurable archive extension | ||||
Description | Xreal uses pk3 files for content. This patch makes use of the configurable archive extension in the game.xml; game node archivetypes property. | ||||
Additional Information | This patch currently assumes any listed extensions use the ArchivePK4API class. You may prefer ArchivePK3 as a separate library, but in that case I think its still desirable to make use of the archivetypes property. A PK3 loading class could be added after. | ||||
Tags | No tags attached. | ||||
Attached Files | darkradiant6246_archiveext.patch (4,445 bytes)
Index: plugins/archivezip/plugin.cpp =================================================================== --- plugins/archivezip/plugin.cpp (revision 6246) +++ plugins/archivezip/plugin.cpp (working copy) @@ -39,7 +39,7 @@ } virtual const std::string& getExtension() { - static std::string _ext("PK4"); + static std::string _ext("pk4"); return _ext; } Index: plugins/vfspk3/Doom3FileSystem.cpp =================================================================== --- plugins/vfspk3/Doom3FileSystem.cpp (revision 6246) +++ plugins/vfspk3/Doom3FileSystem.cpp (working copy) @@ -52,6 +52,7 @@ #include "iradiant.h" #include "idatastream.h" #include "ifilesystem.h" +#include "iregistry.h" #include "igame.h" #include "string/string.h" @@ -61,6 +62,8 @@ #include <boost/algorithm/string/case_conv.hpp> #include <boost/algorithm/string/predicate.hpp> +#include <boost/algorithm/string/split.hpp> +#include <boost/algorithm/string/classification.hpp> #include "DirectoryArchive.h" #include "SortedFilenames.h" @@ -123,6 +126,9 @@ { globalOutputStream() << "filesystem initialised" << std::endl; + std::string extensions = GlobalRegistry().getAttribute("game", "archivetypes"); + boost::algorithm::split(_allowedExtensions, extensions, boost::algorithm::is_any_of(" ")); + // Get the VFS search paths from the game manager const game::IGameManager::PathList& paths = GlobalGameManager().getVFSSearchPaths(); @@ -276,10 +282,10 @@ void Doom3FileSystem::initPakFile(ArchiveLoader& archiveModule, const std::string& filename) { std::string fileExt(os::getExtension(filename)); - boost::to_upper(fileExt); + boost::to_lower(fileExt); // matching extension? - if (fileExt == archiveModule.getExtension()) { + if (_allowedExtensions.find(fileExt) != _allowedExtensions.end()) { ArchiveDescriptor entry; entry.name = filename; @@ -302,6 +308,7 @@ if (_dependencies.empty()) { _dependencies.insert("ArchivePK4"); + _dependencies.insert(MODULE_XMLREGISTRY); _dependencies.insert(MODULE_GAMEMANAGER); } Index: plugins/vfspk3/Doom3FileSystem.h =================================================================== --- plugins/vfspk3/Doom3FileSystem.h (revision 6246) +++ plugins/vfspk3/Doom3FileSystem.h (working copy) @@ -42,6 +42,7 @@ { std::string _directories[VFS_MAXDIRS]; int _numDirectories; + std::set<std::string> _allowedExtensions; struct ArchiveDescriptor { std::string name; Index: tools/vcprojects/vfspk3.vcproj =================================================================== --- tools/vcprojects/vfspk3.vcproj (revision 6246) +++ tools/vcprojects/vfspk3.vcproj (working copy) @@ -241,7 +241,7 @@ InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" - AdditionalIncludeDirectories=""$(SolutionDir)/../../include";"$(SolutionDir)/../../libs";"$(SolutionDir)/../../w32deps/boost/include";"$(SolutionDir)/../../w32deps/libxml2/include";"$(SolutionDir)/../../w32deps/gtk2/include/gtk-2.0";"$(SolutionDir)/../../w32deps/gtk2/include/atk-1.0";"$(SolutionDir)/../../w32deps/gtk2/include/glib-2.0";"$(SolutionDir)/../../w32deps/gtk2/include/cairo";"$(SolutionDir)/../../w32deps/gtk2/include/pango-1.0";"$(SolutionDir)/../../w32deps/gtk2/lib/glib-2.0/include";"$(SolutionDir)/../../w32deps/gtk2/lib/gtk-2.0/include";"$(SolutionDir)/../../w32deps/win_iconv/include"" + AdditionalIncludeDirectories=""$(SolutionDir)/../../include";"$(SolutionDir)/../../libs";"$(SolutionDir)/../../w32deps/boost/include";"$(SolutionDir)/../../w32deps/libxml2/include";"$(SolutionDir)/../../w32deps/gtk2/include/gtk-2.0";"$(SolutionDir)/../../w32deps/gtk2/include/atk-1.0";"$(SolutionDir)/../../w32deps/gtk2/include/glib-2.0";"$(SolutionDir)/../../w32deps/gtk2/include/cairo";"$(SolutionDir)/../../w32deps/gtk2/include/pango-1.0";"$(SolutionDir)/../../w32deps/gtk2/lib/glib-2.0/include";"$(SolutionDir)/../../w32deps/gtk2/lib/gtk-2.0/include";"$(SolutionDir)/../../w32deps/win_iconv/include";"$(SolutionDir)/../../w32deps/gtkmm/include"" PreprocessorDefinitions="NDEBUG;_CRT_SECURE_NO_DEPRECATE;WIN32;" StringPooling="true" ExceptionHandling="0" | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
20.12.2010 10:32 | dersaidin | New Issue | |
20.12.2010 10:32 | dersaidin | File Added: darkradiant6246_archiveext.patch | |
20.12.2010 11:57 | greebo | Status | new => acknowledged |
21.12.2010 09:59 | greebo | Priority | high => normal |
21.12.2010 09:59 | greebo | Assigned To | => greebo |
21.12.2010 09:59 | greebo | Status | acknowledged => assigned |
21.12.2010 09:59 | greebo | Product Version | => 1.5.0 |
21.12.2010 09:59 | greebo | Target Version | => 1.5.0 |
21.12.2010 10:00 | greebo | Note Added: 0003396 | |
21.12.2010 10:00 | greebo | Status | assigned => resolved |
21.12.2010 10:00 | greebo | Fixed in Version | => 1.5.0 |
21.12.2010 10:00 | greebo | Resolution | open => fixed |
31.07.2011 04:44 | greebo | Status | resolved => closed |