summaryrefslogtreecommitdiff
path: root/src/yuzu/main.cpp
diff options
context:
space:
mode:
authortech4me <guiwanglong@gmail.com>2018-08-20 21:46:40 -0700
committertech4me <guiwanglong@gmail.com>2018-08-21 02:04:33 -0700
commitcc71832b19ed9d3579160ddb8fe6e4f9a8269553 (patch)
treeb92c24231393ccc10544b2fddef8017f8d7023e1 /src/yuzu/main.cpp
parentbf89a99839abb30e33872b8401eae30cd95e7585 (diff)
qt/main: Port part of citra(#3411), open savedata works
Diffstat (limited to 'src/yuzu/main.cpp')
-rw-r--r--src/yuzu/main.cpp37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 3db3f9d98..e4cac5984 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -30,6 +30,7 @@
#include "core/file_sys/bis_factory.h"
#include "core/file_sys/card_image.h"
#include "core/file_sys/registered_cache.h"
+#include "core/file_sys/savedata_factory.h"
#include "core/file_sys/vfs_real.h"
#include "core/gdbstub/gdbstub.h"
#include "core/loader/loader.h"
@@ -303,8 +304,7 @@ void GMainWindow::RestoreUIState() {
void GMainWindow::ConnectWidgetEvents() {
connect(game_list, &GameList::GameChosen, this, &GMainWindow::OnGameListLoadFile);
- connect(game_list, &GameList::OpenSaveFolderRequested, this,
- &GMainWindow::OnGameListOpenSaveFolder);
+ connect(game_list, &GameList::OpenFolderRequested, this, &GMainWindow::OnGameListOpenFolder);
connect(this, &GMainWindow::EmulationStarting, render_window,
&GRenderWindow::OnEmulationStarting);
@@ -584,8 +584,37 @@ void GMainWindow::OnGameListLoadFile(QString game_path) {
BootGame(game_path);
}
-void GMainWindow::OnGameListOpenSaveFolder(u64 program_id) {
- UNIMPLEMENTED();
+void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target) {
+ std::string path;
+ std::string open_target;
+ switch (target) {
+ case GameListOpenTarget::SaveData: {
+ open_target = "Save Data";
+ const std::string nand_dir = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir);
+ ASSERT(program_id != 0);
+ // TODO(tech4me): Update this to work with arbitrary user profile
+ // Refer to core/hle/service/acc/profile_manager.cpp ProfileManager constructor
+ constexpr u128 user_id = {1, 0};
+ path = nand_dir + FileSys::SaveDataFactory::GetFullPath(FileSys::SaveDataSpaceId::NandUser,
+ FileSys::SaveDataType::SaveData,
+ program_id, user_id, 0);
+ break;
+ }
+ default:
+ UNIMPLEMENTED();
+ }
+
+ const QString qpath = QString::fromStdString(path);
+
+ const QDir dir(qpath);
+ if (!dir.exists()) {
+ QMessageBox::warning(this,
+ tr("Error Opening %1 Folder").arg(QString::fromStdString(open_target)),
+ tr("Folder does not exist!"));
+ return;
+ }
+ LOG_INFO(Frontend, "Opening {} path for program_id={:016x}", open_target, program_id);
+ QDesktopServices::openUrl(QUrl::fromLocalFile(qpath));
}
void GMainWindow::OnMenuLoadFile() {