Merge commit 'upstream/master'

pull/7/head
Marc Zinnschlag 15 years ago
commit 13409b546f

@ -104,17 +104,37 @@ namespace MWSound
root->addFrameListener(&updater);
}
std::string toMp3(const std::string &str)
{
std::string wav = str;
int i = str.size()-3;
wav[i++] = 'm';
wav[i++] = 'p';
wav[i++] = '3';
return wav;
}
bool hasFile(const std::string &str)
{
return files.has(str);
if(files.has(str)) return true;
// Not found? Try exchanging .wav with .mp3
return files.has(toMp3(str));
}
// Convert a Morrowind sound path (eg. Fx\funny.wav) to full path
// with proper slash conversion (eg. datadir/Sound/Fx/funny.wav)
std::string convertPath(const std::string &str)
{
if(hasFile(str))
// Search and return
if(files.has(str))
return files.lookup(str);
// Try mp3 if the wav wasn't found
std::string mp3 = toMp3(str);
if(files.has(mp3))
return files.lookup(mp3);
// Give up
return "";
}

@ -8,13 +8,14 @@
namespace FileFinder
{
class FileFinder
template <typename LESS>
class FileFinderT
{
std::map<std::string, std::string, path_less> table;
std::map<std::string, std::string, LESS> table;
struct Inserter : ReturnPath
{
FileFinder *owner;
FileFinderT<LESS> *owner;
int cut;
void add(const boost::filesystem::path &pth)
@ -28,7 +29,7 @@ class FileFinder
Inserter inserter;
public:
FileFinder(const boost::filesystem::path &path, bool recurse=true)
FileFinderT(const boost::filesystem::path &path, bool recurse=true)
{
inserter.owner = this;
@ -58,5 +59,8 @@ public:
return table.find(file)->second;
}
};
// The default is to use path_less for equality checks
typedef FileFinderT<path_less> FileFinder;
}
#endif

Loading…
Cancel
Save