diff options
author | Oystein Eftevaag | 2008-02-03 12:36:51 +0000 |
---|---|---|
committer | Oystein Eftevaag | 2008-02-03 12:36:51 +0000 |
commit | deb6baf0dbeb5e08dba6bf66d70cee07d7c22d4f (patch) | |
tree | 1690427b48159bf92fbebe392dee3c88c4f9c874 | |
parent | c098453ea199ff4476bd3ada90200e2b90f4de58 (diff) | |
download | scummvm-rg350-deb6baf0dbeb5e08dba6bf66d70cee07d7c22d4f.tar.gz scummvm-rg350-deb6baf0dbeb5e08dba6bf66d70cee07d7c22d4f.tar.bz2 scummvm-rg350-deb6baf0dbeb5e08dba6bf66d70cee07d7c22d4f.zip |
Migration code for users updating to the 1.1.3 iPhone firmware, which has a different directory structure and permission setup
svn-id: r30761
-rw-r--r-- | backends/platform/iphone/osys_iphone.cpp | 45 | ||||
-rw-r--r-- | backends/platform/iphone/osys_iphone.h | 15 | ||||
-rw-r--r-- | base/commandLine.cpp | 10 | ||||
-rw-r--r-- | common/config-manager.cpp | 6 |
4 files changed, 68 insertions, 8 deletions
diff --git a/backends/platform/iphone/osys_iphone.cpp b/backends/platform/iphone/osys_iphone.cpp index 5bbb1b4ca9..3365c2da9d 100644 --- a/backends/platform/iphone/osys_iphone.cpp +++ b/backends/platform/iphone/osys_iphone.cpp @@ -27,15 +27,14 @@ #include <CoreGraphics/CGDirectDisplay.h> #include <CoreSurface/CoreSurface.h> -#include <AudioToolbox/AudioQueue.h> #include <unistd.h> #include <pthread.h> -#include "common/system.h" #include "common/scummsys.h" #include "common/util.h" #include "common/rect.h" -#include "common/events.h" +#include "common/file.h" +#include "common/fs.h" #include "base/main.h" @@ -54,6 +53,7 @@ const OSystem::GraphicsMode OSystem_IPHONE::s_supportedGraphicsModes[] = { AQCallbackStruct OSystem_IPHONE::s_AudioQueue; SoundProc OSystem_IPHONE::s_soundCallback = NULL; void *OSystem_IPHONE::s_soundParam = NULL; +bool OSystem_IPHONE::s_is113OrHigher = false; OSystem_IPHONE::OSystem_IPHONE() : _savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL), @@ -1172,8 +1172,47 @@ OSystem *OSystem_IPHONE_create() { return new OSystem_IPHONE(); } +const char* OSystem_IPHONE::getConfigPath() { + if (s_is113OrHigher) + return SCUMMVM_PREFS_PATH; + else + return SCUMMVM_OLD_PREFS_PATH; +} + +const char* OSystem_IPHONE::getSavePath() { + if (s_is113OrHigher) + return SCUMMVM_SAVE_PATH; + else + return SCUMMVM_OLD_SAVE_PATH; +} + +void OSystem_IPHONE::migrateApp() { + // Migrate to the new 1.1.3 directory structure, if needed. + + FilesystemNode file("/var/mobile"); + if (file.exists() && file.isDirectory()) { + // We have 1.1.3 or above. + s_is113OrHigher = true; + file = FilesystemNode(SCUMMVM_ROOT_PATH); + if (!file.exists()) { + system("mkdir " SCUMMVM_ROOT_PATH); + system("mkdir " SCUMMVM_SAVE_PATH); + + // Copy over the prefs file + system("cp " SCUMMVM_OLD_PREFS_PATH " " SCUMMVM_PREFS_PATH); + + file = FilesystemNode(SCUMMVM_OLD_SAVE_PATH); + // Copy over old savegames to the new directory. + if (file.exists() && file.isDirectory()) + system("cp " SCUMMVM_OLD_SAVE_PATH "/* " SCUMMVM_SAVE_PATH "/"); + } + } +} + void iphone_main(int argc, char *argv[]) { + OSystem_IPHONE::migrateApp(); + // Redirect stdout and stderr if we're launching from the Springboard. if (argc == 2 && strcmp(argv[1], "--launchedFromSB") == 0) { FILE *newfp = fopen("/tmp/scummvm.log", "a"); diff --git a/backends/platform/iphone/osys_iphone.h b/backends/platform/iphone/osys_iphone.h index eeb8504680..71272b73fe 100644 --- a/backends/platform/iphone/osys_iphone.h +++ b/backends/platform/iphone/osys_iphone.h @@ -27,11 +27,21 @@ #include "graphics/surface.h" #include "iphone_common.h" +#include "common/system.h" +#include "common/events.h" + +#include <AudioToolbox/AudioQueue.h> #define AUDIO_BUFFERS 3 #define WAVE_BUFFER_SIZE 8192 #define AUDIO_SAMPLE_RATE 44100 +#define SCUMMVM_ROOT_PATH "/var/mobile/Library/ScummVM" +#define SCUMMVM_SAVE_PATH SCUMMVM_ROOT_PATH "/Savegames" +#define SCUMMVM_OLD_SAVE_PATH "/var/root/.scummvm" +#define SCUMMVM_PREFS_PATH SCUMMVM_ROOT_PATH "/Preferences" +#define SCUMMVM_OLD_PREFS_PATH "/var/root/.scummvmrc" + typedef void (*SoundProc)(void *param, byte *buf, int len); typedef int (*TimerProc)(int interval); @@ -49,6 +59,7 @@ protected: static AQCallbackStruct s_AudioQueue; static SoundProc s_soundCallback; static void *s_soundParam; + static bool s_is113OrHigher; Common::SaveFileManager *_savefile; Audio::Mixer *_mixer; @@ -154,6 +165,10 @@ public: virtual Audio::Mixer *getMixer(); virtual Common::TimerManager *getTimerManager(); + static void migrateApp(); + static const char* getConfigPath(); + static const char* getSavePath(); + protected: inline void addDirtyRect(int16 x1, int16 y1, int16 w, int16 h); void internUpdateScreen(); diff --git a/base/commandLine.cpp b/base/commandLine.cpp index da8356acff..856ac9e173 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -35,6 +35,10 @@ #include "sound/mididrv.h" #include "sound/mixer.h" +#ifdef IPHONE +#include "backends/platform/iphone/osys_iphone.h" +#endif + #ifdef UNIX #ifdef MACOSX #define DEFAULT_SAVE_PATH "Documents/ScummVM Savegames" @@ -224,10 +228,8 @@ void registerDefaults() { strcpy(savePath, Symbian::GetExecutablePath()); strcat(savePath, DEFAULT_SAVE_PATH); ConfMan.registerDefault("savepath", savePath); -#elif defined (IPHONE) // The iphone has / set as home dir when launching from the Springboard. - strcpy(savePath, "/var/root/"); - strcat(savePath, DEFAULT_SAVE_PATH); - ConfMan.registerDefault("savepath", savePath); +#elif defined (IPHONE) + ConfMan.registerDefault("savepath", OSystem_IPHONE::getSavePath()); #endif #endif // #ifdef DEFAULT_SAVE_PATH diff --git a/common/config-manager.cpp b/common/config-manager.cpp index ef2a01bba6..0f3bc51579 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -39,6 +39,10 @@ DECLARE_SINGLETON(Common::ConfigManager); #include "backends/platform/ps2/systemps2.h" #endif +#ifdef IPHONE +#include "backends/platform/iphone/osys_iphone.h" +#endif + #if defined(UNIX) #ifdef MACOSX #define DEFAULT_CONFIG_FILE "Library/Preferences/ScummVM Preferences" @@ -138,7 +142,7 @@ void ConfigManager::loadDefaultConfigFile() { #elif defined(PALMOS_MODE) strcpy(configFile,"/PALM/Programs/ScummVM/" DEFAULT_CONFIG_FILE); #elif defined(IPHONE) - strcpy(configFile,"/var/root/" DEFAULT_CONFIG_FILE); + strcpy(configFile, OSystem_IPHONE::getConfigPath()); #elif defined(__PLAYSTATION2__) ((OSystem_PS2*)g_system)->makeConfigPath(configFile); #elif defined(__PSP__) |