Mercurial > audlegacy-plugins
diff src/modplug/archive/open.cxx @ 2456:e67bce91d70c
revive support for zip and other archive formats. T.M aka teknocat pointed out this problem and provided preliminary patch.
| author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
|---|---|
| date | Thu, 20 Mar 2008 01:37:46 +0900 |
| parents | 3da1b8942b8b |
| children | b24eda79942b |
line wrap: on
line diff
--- a/src/modplug/archive/open.cxx Mon Mar 17 21:38:04 2008 +0100 +++ b/src/modplug/archive/open.cxx Thu Mar 20 01:37:46 2008 +0900 @@ -11,102 +11,114 @@ #include "arch_rar.h" #include "arch_bz2.h" -Archive* OpenArchive(const string& aFileName) +Archive* OpenArchive(const string& aFileName) //aFilename is url --yaz { string lExt; uint32 lPos; - lPos = aFileName.find_last_of('.'); - if(lPos > aFileName.length()) + // convert from uri to fs based filepath + gchar *filename; + filename = g_filename_from_uri(aFileName.c_str(), NULL, NULL); + string lRealFileName(filename); + g_free(filename); + + lPos = lRealFileName.find_last_of('.'); + if(lPos > lRealFileName.length()) return NULL; - lExt = aFileName.substr(lPos); + lExt = lRealFileName.substr(lPos); for(uint32 i = 0; i < lExt.length(); i++) lExt[i] = tolower(lExt[i]); if (lExt == ".mdz") - return new arch_Zip(aFileName); + return new arch_Zip(lRealFileName); if (lExt == ".mdr") - return new arch_Rar(aFileName); + return new arch_Rar(lRealFileName); if (lExt == ".mdgz") - return new arch_Gzip(aFileName); + return new arch_Gzip(lRealFileName); if (lExt == ".mdbz") - return new arch_Bzip2(aFileName); + return new arch_Bzip2(lRealFileName); if (lExt == ".s3z") - return new arch_Zip(aFileName); + return new arch_Zip(lRealFileName); if (lExt == ".s3r") - return new arch_Rar(aFileName); + return new arch_Rar(lRealFileName); if (lExt == ".s3gz") - return new arch_Gzip(aFileName); + return new arch_Gzip(lRealFileName); if (lExt == ".xmz") - return new arch_Zip(aFileName); + return new arch_Zip(lRealFileName); if (lExt == ".xmr") - return new arch_Rar(aFileName); + return new arch_Rar(lRealFileName); if (lExt == ".xmgz") - return new arch_Gzip(aFileName); + return new arch_Gzip(lRealFileName); if (lExt == ".itz") - return new arch_Zip(aFileName); + return new arch_Zip(lRealFileName); if (lExt == ".itr") - return new arch_Rar(aFileName); + return new arch_Rar(lRealFileName); if (lExt == ".itgz") - return new arch_Gzip(aFileName); + return new arch_Gzip(lRealFileName); if (lExt == ".zip") - return new arch_Zip(aFileName); + return new arch_Zip(lRealFileName); if (lExt == ".rar") - return new arch_Rar(aFileName); + return new arch_Rar(lRealFileName); if (lExt == ".gz") - return new arch_Gzip(aFileName); + return new arch_Gzip(lRealFileName); if (lExt == ".bz2") - return new arch_Bzip2(aFileName); + return new arch_Bzip2(lRealFileName); - return new arch_Raw(aFileName); + return new arch_Raw(lRealFileName); } -bool ContainsMod(const string& aFileName) +bool ContainsMod(const string& aFileName) //aFilename is url --yaz { string lExt; uint32 lPos; - lPos = aFileName.find_last_of('.'); - if(lPos > aFileName.length()) + // convert from uri to fs based filepath + gchar *filename; + filename = g_filename_from_uri(aFileName.c_str(), NULL, NULL); + string lRealFileName(filename); + g_free(filename); + + lPos = lRealFileName.find_last_of('.'); + if(lPos > lRealFileName.length()) return false; - lExt = aFileName.substr(lPos); + lExt = lRealFileName.substr(lPos); for(uint32 i = 0; i < lExt.length(); i++) lExt[i] = tolower(lExt[i]); if (lExt == ".mdz") - return arch_Zip::ContainsMod(aFileName); + return arch_Zip::ContainsMod(lRealFileName); if (lExt == ".mdr") - return arch_Rar::ContainsMod(aFileName); + return arch_Rar::ContainsMod(lRealFileName); if (lExt == ".mdgz") - return arch_Gzip::ContainsMod(aFileName); + return arch_Gzip::ContainsMod(lRealFileName); if (lExt == ".mdbz") - return arch_Bzip2::ContainsMod(aFileName); + return arch_Bzip2::ContainsMod(lRealFileName); if (lExt == ".s3z") - return arch_Zip::ContainsMod(aFileName); + return arch_Zip::ContainsMod(lRealFileName); if (lExt == ".s3r") - return arch_Rar::ContainsMod(aFileName); + return arch_Rar::ContainsMod(lRealFileName); if (lExt == ".s3gz") - return arch_Gzip::ContainsMod(aFileName); + return arch_Gzip::ContainsMod(lRealFileName); if (lExt == ".xmz") - return arch_Zip::ContainsMod(aFileName); + return arch_Zip::ContainsMod(lRealFileName); if (lExt == ".xmr") - return arch_Rar::ContainsMod(aFileName); + return arch_Rar::ContainsMod(lRealFileName); if (lExt == ".xmgz") - return arch_Gzip::ContainsMod(aFileName); + return arch_Gzip::ContainsMod(lRealFileName); if (lExt == ".itz") - return arch_Zip::ContainsMod(aFileName); + return arch_Zip::ContainsMod(lRealFileName); if (lExt == ".itr") - return arch_Rar::ContainsMod(aFileName); + return arch_Rar::ContainsMod(lRealFileName); if (lExt == ".itgz") - return arch_Gzip::ContainsMod(aFileName); + return arch_Gzip::ContainsMod(lRealFileName); if (lExt == ".zip") - return arch_Zip::ContainsMod(aFileName); + return arch_Zip::ContainsMod(lRealFileName); if (lExt == ".rar") - return arch_Rar::ContainsMod(aFileName); + return arch_Rar::ContainsMod(lRealFileName); if (lExt == ".gz") - return arch_Gzip::ContainsMod(aFileName); + return arch_Gzip::ContainsMod(lRealFileName); if (lExt == ".bz2") - return arch_Bzip2::ContainsMod(aFileName); + return arch_Bzip2::ContainsMod(lRealFileName); - return arch_Raw::ContainsMod(aFileName); + return arch_Raw::ContainsMod(lRealFileName); }
