Просмотр исходного кода

Merge pull request #133 from archshift/sdmc-enabled

Use config files to store whether SDMC is enabled or not, auto-create SDMC dir.
bunnei 11 лет назад
Родитель
Сommit
ce8390ac03

+ 5 - 0
src/citra/config.cpp

@@ -55,9 +55,14 @@ void Config::ReadControls() {
     Settings::values.pad_sright_key = glfw_config->GetInteger("Controls", "pad_sright", GLFW_KEY_RIGHT);
 }
 
+void Config::ReadData() {
+    Settings::values.use_virtual_sd = glfw_config->GetBoolean("Data Storage", "use_virtual_sd", true);
+}
+
 void Config::Reload() {
     LoadINI(glfw_config, glfw_config_loc.c_str(), DefaultINI::glfw_config_file);
     ReadControls();
+    ReadData();
 }
 
 Config::~Config() {

+ 1 - 0
src/citra/config.h

@@ -16,6 +16,7 @@ class Config {
 
     bool LoadINI(INIReader* config, const char* location, const std::string& default_contents="", bool retry=true);
     void ReadControls();
+    void ReadData();
 public:
     Config();
     ~Config();

+ 3 - 0
src/citra/default_ini.h

@@ -25,6 +25,9 @@ pad_sup =
 pad_sdown =
 pad_sleft =
 pad_sright =
+
+[Data Storage]
+use_virtual_sd =
 )";
 
 }

+ 14 - 0
src/citra_qt/config.cpp

@@ -64,12 +64,26 @@ void Config::SaveControls() {
     qt_config->endGroup();
 }
 
+void Config::ReadData() {
+    qt_config->beginGroup("Data Storage");
+    Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
+    qt_config->endGroup();
+}
+
+void Config::SaveData() {
+    qt_config->beginGroup("Data Storage");
+    qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
+    qt_config->endGroup();
+}
+
 void Config::Reload() {
     ReadControls();
+    ReadData();
 }
 
 void Config::Save() {
     SaveControls();
+    SaveData();
 }
 
 Config::~Config() {

+ 3 - 0
src/citra_qt/config.h

@@ -14,6 +14,9 @@ class Config {
 
     void ReadControls();
     void SaveControls();
+
+    void ReadData();
+    void SaveData();
 public:
     Config();
     ~Config();

+ 4 - 2
src/common/file_util.cpp

@@ -191,8 +191,10 @@ bool CreateFullPath(const std::string &fullPath)
 
         // Include the '/' so the first call is CreateDir("/") rather than CreateDir("")
         std::string const subPath(fullPath.substr(0, position + 1));
-        if (!FileUtil::IsDirectory(subPath))
-            FileUtil::CreateDir(subPath);
+        if (!FileUtil::IsDirectory(subPath) && !FileUtil::CreateDir(subPath)) {
+            ERROR_LOG(COMMON, "CreateFullPath: directory creation failed");
+            return false;
+        }
 
         // A safety check
         panicCounter--;

+ 8 - 2
src/core/file_sys/archive_sdmc.cpp

@@ -10,6 +10,7 @@
 #include "core/file_sys/archive_sdmc.h"
 #include "core/file_sys/directory_sdmc.h"
 #include "core/file_sys/file_sdmc.h"
+#include "core/settings.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 // FileSys namespace
@@ -29,8 +30,13 @@ Archive_SDMC::~Archive_SDMC() {
  * @return true if it initialized successfully
  */
 bool Archive_SDMC::Initialize() {
-    if (!FileUtil::IsDirectory(mount_point)) {
-        WARN_LOG(FILESYS, "Directory %s not found, disabling SDMC.", mount_point.c_str());
+    if (!Settings::values.use_virtual_sd) {
+        WARN_LOG(FILESYS, "SDMC disabled by config.");
+        return false;
+    }
+
+    if (!FileUtil::CreateFullPath(mount_point)) {
+        WARN_LOG(FILESYS, "Unable to create SDMC path.");
         return false;
     }
 

+ 2 - 0
src/core/settings.h

@@ -24,6 +24,8 @@ struct Values {
     int pad_sdown_key;
     int pad_sleft_key;
     int pad_sright_key;
+
+    bool use_virtual_sd;
 } extern values;
 
 }