This commit is contained in:
kervala 2010-11-08 23:28:09 +01:00
commit 3ad4c4449b
3 changed files with 28 additions and 19 deletions

View file

@ -18,6 +18,7 @@
#if defined(NL_OS_MAC) #if defined(NL_OS_MAC)
#include <CoreFoundation/CoreFoundation.h> #include <CoreFoundation/CoreFoundation.h>
#endif
std::string getAppBundlePath() std::string getAppBundlePath()
{ {
@ -26,6 +27,7 @@ std::string getAppBundlePath()
if(cachedPathToBundle.size()) if(cachedPathToBundle.size())
return cachedPathToBundle; return cachedPathToBundle;
#if defined(NL_OS_MAC)
// get the bundle // get the bundle
CFBundleRef bundle = CFBundleGetMainBundle(); CFBundleRef bundle = CFBundleGetMainBundle();
@ -47,8 +49,6 @@ std::string getAppBundlePath()
cachedPathToBundle = CFStringGetCStringPtr( cachedPathToBundle = CFStringGetCStringPtr(
str, CFStringGetSmallestEncoding(str)); str, CFStringGetSmallestEncoding(str));
CFRelease(str); CFRelease(str);
return cachedPathToBundle;
} }
else else
nlerror("CFStringGetCStringPtr"); nlerror("CFStringGetCStringPtr");
@ -58,8 +58,11 @@ std::string getAppBundlePath()
} }
else else
nlerror("CFBundleGetMainBundle"); nlerror("CFBundleGetMainBundle");
#elif defined(NL_OS_WINDOWS)
return std::string(); char buffer[MAX_PATH+1];
} if (GetModuleFileNameA(NULL, buffer, MAX_PATH))
cachedPathToBundle = NLMISC::CPath::standardizePath(NLMISC::CFile::getPath(buffer), false);
#endif // defined(NL_OS_MAC) #endif // defined(NL_OS_MAC)
return cachedPathToBundle;
}

View file

@ -19,7 +19,6 @@
#include "nel/misc/types_nl.h" #include "nel/misc/types_nl.h"
#if defined(NL_OS_MAC)
#include <string> #include <string>
/** /**
@ -28,5 +27,4 @@
*/ */
std::string getAppBundlePath(); std::string getAppBundlePath();
#endif // defined(NL_OS_MAC) #endif
#endif // CL_APP_BUNDLE_UTILS_H

View file

@ -103,9 +103,7 @@ extern HINSTANCE HInstance;
extern HWND SlashScreen; extern HWND SlashScreen;
#endif // NL_OS_WINDOWS #endif // NL_OS_WINDOWS
#ifdef NL_OS_MAC
#include "app_bundle_utils.h" #include "app_bundle_utils.h"
#endif // NL_OS_MAC
#include <new> #include <new>
@ -577,6 +575,20 @@ void checkDriverDepth ()
} }
} }
static std::string replaceApplicationDirToken(const std::string &dir)
{
static const std::string token = "<ApplicationDir>";
std::string::size_type pos = dir.find(token);
if (pos != std::string::npos)
return dir.substr(0, pos) + getAppBundlePath() + dir.substr(pos + token.length());
// preDataPath = getAppBundlePath() + "/Contents/Resources/" + preDataPath;
return dir;
}
void addSearchPaths(IProgressCallback &progress) void addSearchPaths(IProgressCallback &progress)
{ {
// Add search path of UI addon. Allow only a subset of files. // Add search path of UI addon. Allow only a subset of files.
@ -591,7 +603,7 @@ void addSearchPaths(IProgressCallback &progress)
progress.progress ((float)i/(float)ClientCfg.DataPath.size()); progress.progress ((float)i/(float)ClientCfg.DataPath.size());
progress.pushCropedValues ((float)i/(float)ClientCfg.DataPath.size(), (float)(i+1)/(float)ClientCfg.DataPath.size()); progress.pushCropedValues ((float)i/(float)ClientCfg.DataPath.size(), (float)(i+1)/(float)ClientCfg.DataPath.size());
CPath::addSearchPath(ClientCfg.DataPath[i], true, false, &progress); CPath::addSearchPath(replaceApplicationDirToken(ClientCfg.DataPath[i]), true, false, &progress);
progress.popCropedValues (); progress.popCropedValues ();
} }
@ -603,7 +615,7 @@ void addSearchPaths(IProgressCallback &progress)
progress.progress ((float)i/(float)ClientCfg.DataPathNoRecurse.size()); progress.progress ((float)i/(float)ClientCfg.DataPathNoRecurse.size());
progress.pushCropedValues ((float)i/(float)ClientCfg.DataPathNoRecurse.size(), (float)(i+1)/(float)ClientCfg.DataPathNoRecurse.size()); progress.pushCropedValues ((float)i/(float)ClientCfg.DataPathNoRecurse.size(), (float)(i+1)/(float)ClientCfg.DataPathNoRecurse.size());
CPath::addSearchPath(ClientCfg.DataPathNoRecurse[i], false, false, &progress); CPath::addSearchPath(replaceApplicationDirToken(ClientCfg.DataPathNoRecurse[i]), false, false, &progress);
progress.popCropedValues (); progress.popCropedValues ();
} }
@ -619,11 +631,7 @@ void addPreDataPaths(NLMISC::IProgressCallback &progress)
progress.progress ((float)i/(float)ClientCfg.PreDataPath.size()); progress.progress ((float)i/(float)ClientCfg.PreDataPath.size());
progress.pushCropedValues ((float)i/(float)ClientCfg.PreDataPath.size(), (float)(i+1)/(float)ClientCfg.PreDataPath.size()); progress.pushCropedValues ((float)i/(float)ClientCfg.PreDataPath.size(), (float)(i+1)/(float)ClientCfg.PreDataPath.size());
std::string preDataPath = ClientCfg.PreDataPath[i]; CPath::addSearchPath(replaceApplicationDirToken(ClientCfg.PreDataPath[i]), true, false, &progress);
#if defined(NL_OS_MAC)
preDataPath = getAppBundlePath() + "/Contents/Resources/" + preDataPath;
#endif // defined(NL_OS_MAC)
CPath::addSearchPath(preDataPath, true, false, &progress);
progress.popCropedValues (); progress.popCropedValues ();
} }
@ -636,7 +644,7 @@ static void addPackedSheetUpdatePaths(NLMISC::IProgressCallback &progress)
{ {
progress.progress((float)i/(float)ClientCfg.UpdatePackedSheetPath.size()); progress.progress((float)i/(float)ClientCfg.UpdatePackedSheetPath.size());
progress.pushCropedValues ((float)i/(float)ClientCfg.UpdatePackedSheetPath.size(), (float)(i+1)/(float)ClientCfg.UpdatePackedSheetPath.size()); progress.pushCropedValues ((float)i/(float)ClientCfg.UpdatePackedSheetPath.size(), (float)(i+1)/(float)ClientCfg.UpdatePackedSheetPath.size());
CPath::addSearchPath(ClientCfg.UpdatePackedSheetPath[i], true, false, &progress); CPath::addSearchPath(replaceApplicationDirToken(ClientCfg.UpdatePackedSheetPath[i]), true, false, &progress);
progress.popCropedValues(); progress.popCropedValues();
} }
} }