mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #6014 from SachinVin/custom
FileUtil, Frontends: Fix updating custom NAND/SDMC path
This commit is contained in:
		
						commit
						856b3d6c95
					
				
					 8 changed files with 63 additions and 39 deletions
				
			
		|  | @ -201,10 +201,15 @@ void Config::ReadValues() { | |||
|     // Data Storage
 | ||||
|     Settings::values.use_virtual_sd = | ||||
|         sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true); | ||||
|     Settings::values.nand_dir = sdl2_config->GetString( | ||||
|         "Data Storage", "nand_directory", FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)); | ||||
|     Settings::values.sdmc_dir = sdl2_config->GetString( | ||||
|         "Data Storage", "sdmc_directory", FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)); | ||||
| 
 | ||||
|     const std::string default_nand_dir = FileUtil::GetDefaultUserPath(FileUtil::UserPath::NANDDir); | ||||
|     FileUtil::UpdateUserPath( | ||||
|         FileUtil::UserPath::NANDDir, | ||||
|         sdl2_config->GetString("Data Storage", "nand_directory", default_nand_dir)); | ||||
|     const std::string default_sdmc_dir = FileUtil::GetDefaultUserPath(FileUtil::UserPath::SDMCDir); | ||||
|     FileUtil::UpdateUserPath( | ||||
|         FileUtil::UserPath::SDMCDir, | ||||
|         sdl2_config->GetString("Data Storage", "sdmc_directory", default_sdmc_dir)); | ||||
| 
 | ||||
|     // System
 | ||||
|     Settings::values.is_new_3ds = sdl2_config->GetBoolean("System", "is_new_3ds", true); | ||||
|  |  | |||
|  | @ -302,17 +302,23 @@ void Config::ReadDataStorageValues() { | |||
|     qt_config->beginGroup(QStringLiteral("Data Storage")); | ||||
| 
 | ||||
|     Settings::values.use_virtual_sd = ReadSetting(QStringLiteral("use_virtual_sd"), true).toBool(); | ||||
|     std::string nand_dir = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir); | ||||
|     Settings::values.nand_dir = | ||||
|         ReadSetting(QStringLiteral("nand_directory"), QString::fromStdString(nand_dir)) | ||||
| 
 | ||||
|     const std::string nand_dir = | ||||
|         ReadSetting( | ||||
|             QStringLiteral("nand_directory"), | ||||
|             QString::fromStdString(FileUtil::GetDefaultUserPath(FileUtil::UserPath::NANDDir))) | ||||
|             .toString() | ||||
|             .toStdString(); | ||||
|     std::string sdmc_dir = FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir); | ||||
|     Settings::values.sdmc_dir = | ||||
|         ReadSetting(QStringLiteral("sdmc_directory"), QString::fromStdString(sdmc_dir)) | ||||
|     const std::string sdmc_dir = | ||||
|         ReadSetting( | ||||
|             QStringLiteral("sdmc_directory"), | ||||
|             QString::fromStdString(FileUtil::GetDefaultUserPath(FileUtil::UserPath::SDMCDir))) | ||||
|             .toString() | ||||
|             .toStdString(); | ||||
| 
 | ||||
|     FileUtil::UpdateUserPath(FileUtil::UserPath::NANDDir, nand_dir); | ||||
|     FileUtil::UpdateUserPath(FileUtil::UserPath::SDMCDir, sdmc_dir); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
|  | @ -863,11 +869,11 @@ void Config::SaveDataStorageValues() { | |||
| 
 | ||||
|     WriteSetting(QStringLiteral("use_virtual_sd"), Settings::values.use_virtual_sd, true); | ||||
|     WriteSetting(QStringLiteral("nand_directory"), | ||||
|                  QString::fromStdString(Settings::values.nand_dir), | ||||
|                  QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); | ||||
|                  QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)), | ||||
|                  QString::fromStdString(FileUtil::GetDefaultUserPath(FileUtil::UserPath::NANDDir))); | ||||
|     WriteSetting(QStringLiteral("sdmc_directory"), | ||||
|                  QString::fromStdString(Settings::values.sdmc_dir), | ||||
|                  QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); | ||||
|                  QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)), | ||||
|                  QString::fromStdString(FileUtil::GetDefaultUserPath(FileUtil::UserPath::SDMCDir))); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
|  |  | |||
|  | @ -16,31 +16,33 @@ ConfigureStorage::ConfigureStorage(QWidget* parent) | |||
|     SetConfiguration(); | ||||
| 
 | ||||
|     connect(ui->open_nand_dir, &QPushButton::clicked, []() { | ||||
|         QString path = QString::fromStdString(Settings::values.nand_dir); | ||||
|         QString path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)); | ||||
|         QDesktopServices::openUrl(QUrl::fromLocalFile(path)); | ||||
|     }); | ||||
| 
 | ||||
|     connect(ui->change_nand_dir, &QPushButton::clicked, this, [this]() { | ||||
|         const QString dir_path = QFileDialog::getExistingDirectory( | ||||
|             this, tr("Select NAND Directory"), QString::fromStdString(Settings::values.nand_dir), | ||||
|             this, tr("Select NAND Directory"), | ||||
|             QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)), | ||||
|             QFileDialog::ShowDirsOnly); | ||||
|         if (!dir_path.isEmpty()) { | ||||
|             Settings::values.nand_dir = dir_path.toStdString(); | ||||
|             FileUtil::UpdateUserPath(FileUtil::UserPath::NANDDir, dir_path.toStdString()); | ||||
|             SetConfiguration(); | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|     connect(ui->open_sdmc_dir, &QPushButton::clicked, []() { | ||||
|         QString path = QString::fromStdString(Settings::values.sdmc_dir); | ||||
|         QString path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)); | ||||
|         QDesktopServices::openUrl(QUrl::fromLocalFile(path)); | ||||
|     }); | ||||
| 
 | ||||
|     connect(ui->change_sdmc_dir, &QPushButton::clicked, this, [this]() { | ||||
|         const QString dir_path = QFileDialog::getExistingDirectory( | ||||
|             this, tr("Select SDMC Directory"), QString::fromStdString(Settings::values.sdmc_dir), | ||||
|             this, tr("Select SDMC Directory"), | ||||
|             QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)), | ||||
|             QFileDialog::ShowDirsOnly); | ||||
|         if (!dir_path.isEmpty()) { | ||||
|             Settings::values.sdmc_dir = dir_path.toStdString(); | ||||
|             FileUtil::UpdateUserPath(FileUtil::UserPath::SDMCDir, dir_path.toStdString()); | ||||
|             SetConfiguration(); | ||||
|         } | ||||
|     }); | ||||
|  | @ -55,14 +57,14 @@ ConfigureStorage::~ConfigureStorage() = default; | |||
| 
 | ||||
| void ConfigureStorage::SetConfiguration() { | ||||
|     ui->nand_group->setVisible(Settings::values.use_virtual_sd); | ||||
|     QString nand_path = QString::fromStdString(Settings::values.nand_dir); | ||||
|     QString nand_path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)); | ||||
|     ui->nand_dir_path->setText(nand_path); | ||||
|     ui->open_nand_dir->setEnabled(!Settings::values.nand_dir.empty()); | ||||
|     ui->open_nand_dir->setEnabled(!nand_path.isEmpty()); | ||||
| 
 | ||||
|     ui->sdmc_group->setVisible(Settings::values.use_virtual_sd); | ||||
|     QString sdmc_path = QString::fromStdString(Settings::values.sdmc_dir); | ||||
|     QString sdmc_path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)); | ||||
|     ui->sdmc_dir_path->setText(sdmc_path); | ||||
|     ui->open_sdmc_dir->setEnabled(!Settings::values.sdmc_dir.empty()); | ||||
|     ui->open_sdmc_dir->setEnabled(!sdmc_path.isEmpty()); | ||||
| 
 | ||||
|     ui->toggle_virtual_sd->setChecked(Settings::values.use_virtual_sd); | ||||
| 
 | ||||
|  |  | |||
|  | @ -69,7 +69,7 @@ | |||
|              <item> | ||||
|               <widget class="QLabel" name="label_4"> | ||||
|                <property name="text"> | ||||
|                 <string>NOTE: this does not move the contents of the previous directory to the new one</string> | ||||
|                 <string>NOTE: This does not move the contents of the previous directory to the new one.</string> | ||||
|                </property> | ||||
|               </widget> | ||||
|              </item> | ||||
|  | @ -134,7 +134,7 @@ | |||
|              <item> | ||||
|               <widget class="QLabel" name="label_3"> | ||||
|                <property name="text"> | ||||
|                 <string>NOTE: this does not move the contents of the previous directory to the new one</string> | ||||
|                 <string>NOTE: This does not move the contents of the previous directory to the new one.</string> | ||||
|                </property> | ||||
|               </widget> | ||||
|              </item> | ||||
|  |  | |||
|  | @ -12,7 +12,6 @@ | |||
| #include "common/common_paths.h" | ||||
| #include "common/file_util.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/settings.h" | ||||
| 
 | ||||
| #ifdef _WIN32 | ||||
| #include <windows.h> | ||||
|  | @ -674,7 +673,8 @@ std::string GetSysDirectory() { | |||
| 
 | ||||
| namespace { | ||||
| std::unordered_map<UserPath, std::string> g_paths; | ||||
| } | ||||
| std::unordered_map<UserPath, std::string> g_default_paths; | ||||
| } // namespace
 | ||||
| 
 | ||||
| void SetUserPath(const std::string& path) { | ||||
|     std::string& user_path = g_paths[UserPath::UserDir]; | ||||
|  | @ -718,12 +718,8 @@ void SetUserPath(const std::string& path) { | |||
| #endif | ||||
|     } | ||||
| 
 | ||||
|     g_paths.emplace(UserPath::SDMCDir, !Settings::values.sdmc_dir.empty() | ||||
|                                            ? Settings::values.sdmc_dir | ||||
|                                            : user_path + SDMC_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::NANDDir, !Settings::values.nand_dir.empty() | ||||
|                                            ? Settings::values.nand_dir | ||||
|                                            : user_path + NAND_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::SDMCDir, user_path + SDMC_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::NANDDir, user_path + NAND_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::SysDataDir, user_path + SYSDATA_DIR DIR_SEP); | ||||
|     // TODO: Put the logs in a better location for each OS
 | ||||
|     g_paths.emplace(UserPath::LogDir, user_path + LOG_DIR DIR_SEP); | ||||
|  | @ -733,6 +729,7 @@ void SetUserPath(const std::string& path) { | |||
|     g_paths.emplace(UserPath::DumpDir, user_path + DUMP_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::LoadDir, user_path + LOAD_DIR DIR_SEP); | ||||
|     g_paths.emplace(UserPath::StatesDir, user_path + STATES_DIR DIR_SEP); | ||||
|     g_default_paths = g_paths; | ||||
| } | ||||
| 
 | ||||
| std::string g_currentRomPath{}; | ||||
|  | @ -769,8 +766,20 @@ const std::string& GetUserPath(UserPath path) { | |||
|     return g_paths[path]; | ||||
| } | ||||
| 
 | ||||
| const std::string& GetDefaultUserPath(UserPath path) { | ||||
|     // Set up all paths and files on the first run
 | ||||
|     if (g_default_paths.empty()) | ||||
|         SetUserPath(); | ||||
|     return g_default_paths[path]; | ||||
| } | ||||
| 
 | ||||
| const void UpdateUserPath(UserPath path, const std::string& filename) { | ||||
|     g_paths[path] = filename + DIR_SEP; | ||||
|     if (!FileUtil::IsDirectory(filename)) { | ||||
|         LOG_ERROR(Common_Filesystem, "Path is not a directory. UserPath: {}  filename: {}", path, | ||||
|                   filename); | ||||
|         return; | ||||
|     } | ||||
|     g_paths[path] = SanitizePath(filename) + DIR_SEP; | ||||
| } | ||||
| 
 | ||||
| std::size_t WriteStringToFile(bool text_file, const std::string& filename, std::string_view str) { | ||||
|  |  | |||
|  | @ -186,6 +186,10 @@ void SetCurrentRomPath(const std::string& path); | |||
| // directory. To be used in "multi-user" mode (that is, installed).
 | ||||
| [[nodiscard]] const std::string& GetUserPath(UserPath path); | ||||
| 
 | ||||
| // Returns a pointer to a string with the default Citra data dir in the user's home
 | ||||
| // directory.
 | ||||
| [[nodiscard]] const std::string& GetDefaultUserPath(UserPath path); | ||||
| 
 | ||||
| // Update the Global Path with the new value
 | ||||
| const void UpdateUserPath(UserPath path, const std::string& filename); | ||||
| 
 | ||||
|  |  | |||
|  | @ -120,8 +120,8 @@ void LogSettings() { | |||
|     log_setting("Camera_OuterLeftConfig", values.camera_config[OuterLeftCamera]); | ||||
|     log_setting("Camera_OuterLeftFlip", values.camera_flip[OuterLeftCamera]); | ||||
|     log_setting("DataStorage_UseVirtualSd", values.use_virtual_sd); | ||||
|     log_setting("DataStorage_SdmcDir", values.sdmc_dir); | ||||
|     log_setting("DataStorage_NandDir", values.nand_dir); | ||||
|     log_setting("DataStorage_SdmcDir", FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)); | ||||
|     log_setting("DataStorage_NandDir", FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)); | ||||
|     log_setting("System_IsNew3ds", values.is_new_3ds); | ||||
|     log_setting("System_RegionValue", values.region_value); | ||||
|     log_setting("Debugging_UseGdbstub", values.use_gdbstub); | ||||
|  |  | |||
|  | @ -155,8 +155,6 @@ struct Values { | |||
| 
 | ||||
|     // Data Storage
 | ||||
|     bool use_virtual_sd; | ||||
|     std::string nand_dir; | ||||
|     std::string sdmc_dir; | ||||
| 
 | ||||
|     // System
 | ||||
|     int region_value; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue