From 3c83fb86269578682ffe87cc3b469dc3a57388e3 Mon Sep 17 00:00:00 2001 From: BobbyJones Date: Thu, 31 Dec 2015 01:28:00 -0500 Subject: [PATCH] Added a flag that changes android storage from internal to external. --- src/modules/filesystem/Filesystem.h | 2 +- src/modules/filesystem/physfs/Filesystem.cpp | 15 ++++++++++----- src/modules/filesystem/physfs/Filesystem.h | 2 +- src/modules/filesystem/wrap_Filesystem.cpp | 4 +++- src/scripts/boot.lua | 3 ++- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/modules/filesystem/Filesystem.h b/src/modules/filesystem/Filesystem.h index f21141579..837496f32 100644 --- a/src/modules/filesystem/Filesystem.h +++ b/src/modules/filesystem/Filesystem.h @@ -84,7 +84,7 @@ public: * @param ident The name of the game. Will be used to * to create the folder in the LOVE data folder. **/ - virtual bool setIdentity(const char *ident, bool appendToPath = false) = 0; + virtual bool setIdentity(const char *ident, bool appendToPath = false, bool internalStorage = false) = 0; virtual const char *getIdentity() const = 0; /** diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index ff9ee7b59..c9b68ed64 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -144,7 +144,7 @@ bool Filesystem::isFused() const return fused; } -bool Filesystem::setIdentity(const char *ident, bool appendToPath) +bool Filesystem::setIdentity(const char *ident, bool appendToPath, bool internalStorage) { if (!PHYSFS_isInit()) return false; @@ -169,11 +169,16 @@ bool Filesystem::setIdentity(const char *ident, bool appendToPath) #ifdef LOVE_ANDROID if (save_identity == "") save_identity = "unnamed"; - - std::string internal_storage_path = SDL_AndroidGetInternalStoragePath(); - std::string save_directory = internal_storage_path + "/save"; - save_path_full = std::string(SDL_AndroidGetInternalStoragePath()) + std::string("/save/") + save_identity; + std::string storage_path; + if (internalStorage) + storage_path = SDL_AndroidGetInternalStoragePath(); + else + storage_path = SDL_AndroidGetExternalStoragePath(); + + std::string save_directory = storage_path + "/save"; + + save_path_full = storage_path + std::string("/save/") + save_identity; if (!love::android::directoryExists(save_path_full.c_str()) && !love::android::mkdir(save_path_full.c_str())) diff --git a/src/modules/filesystem/physfs/Filesystem.h b/src/modules/filesystem/physfs/Filesystem.h index fc6941e48..a5b369f28 100644 --- a/src/modules/filesystem/physfs/Filesystem.h +++ b/src/modules/filesystem/physfs/Filesystem.h @@ -52,7 +52,7 @@ public: bool setupWriteDirectory(); - bool setIdentity(const char *ident, bool appendToPath = false); + bool setIdentity(const char *ident, bool appendToPath = false, bool internalStorage = false); const char *getIdentity() const; bool setSource(const char *source); diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 9c7e26d5f..175c0fc3b 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -73,8 +73,10 @@ int w_setIdentity(lua_State *L) { const char *arg = luaL_checkstring(L, 1); bool append = luax_optboolean(L, 2, false); + bool internalStorage = luax_optboolean(L, 3, false); - if (!instance()->setIdentity(arg, append)) + + if (!instance()->setIdentity(arg, append, internalStorage)) return luaL_error(L, "Could not set write directory."); return 0; diff --git a/src/scripts/boot.lua b/src/scripts/boot.lua index 5430018d9..f9a4cc5a1 100644 --- a/src/scripts/boot.lua +++ b/src/scripts/boot.lua @@ -374,6 +374,7 @@ function love.init() console = false, -- Only relevant for windows. identity = false, appendidentity = false, + internalStorage = false, -- Only relevant for Android. accelerometerjoystick = true, -- Only relevant for Android / iOS. gammacorrect = false, } @@ -493,7 +494,7 @@ function love.init() end if love.filesystem then - love.filesystem.setIdentity(c.identity or love.filesystem.getIdentity(), c.appendidentity) + love.filesystem.setIdentity(c.identity or love.filesystem.getIdentity(), c.appendidentity, c.internalStorage) if love.filesystem.isFile("main.lua") then require("main") end