From 168362288c601af0277e4e0f57d5965516efb99e Mon Sep 17 00:00:00 2001 From: "sl1nk3.s" Date: Sat, 2 May 2009 18:06:42 +0000 Subject: [PATCH] Added Open Wii save folder menu item to GameListCtrl, fixed a few remaining path and casting problems git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3135 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp | 6 ++--- .../Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp | 21 ++++++++------- Source/Core/DolphinWX/Src/GameListCtrl.cpp | 12 +++++++++ Source/Core/DolphinWX/Src/GameListCtrl.h | 1 + Source/Core/DolphinWX/Src/Globals.h | 1 + Source/Core/DolphinWX/Src/ISOFile.cpp | 26 +++++++++++++++++++ Source/Core/DolphinWX/Src/ISOFile.h | 1 + 7 files changed, 56 insertions(+), 12 deletions(-) diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp index 5290e1991e..1802962a3a 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp @@ -73,7 +73,7 @@ CWII_IPC_HLE_Device_es::CWII_IPC_HLE_Device_es(u32 _DeviceID, const std::string& // blindly grab the titleID from the disc - it's unencrypted at: // offset 0x0F8001DC and 0x0F80044C VolumeHandler::RAWReadToPtr((u8*)&m_TitleID, (u64)0x0F8001DC, 8); - m_TitleID = Common::swap64(m_TitleID); + m_TitleID = Common::swap64(m_TitleID); } else { @@ -92,7 +92,7 @@ CWII_IPC_HLE_Device_es::CWII_IPC_HLE_Device_es(u32 _DeviceID, const std::string& //FindValidTitleIDs(); - INFO_LOG(WII_IPC_ES, "Set default title to %08x/%08x", m_TitleID>>32, m_TitleID); + INFO_LOG(WII_IPC_ES, "Set default title to %08x/%08x", (u32)(m_TitleID>>32), (u32)m_TitleID); } CWII_IPC_HLE_Device_es::~CWII_IPC_HLE_Device_es() @@ -574,7 +574,7 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress) } Memory::Write_U32(0, _CommandAddress + 0x4); - INFO_LOG(WII_IPC_ES, "IOCTL_ES_GETTMDVIEWS: title: %08x/%08x (buffer size: %i)", TitleID >> 32, TitleID, MaxCount); + INFO_LOG(WII_IPC_ES, "IOCTL_ES_GETTMDVIEWS: title: %08x/%08x (buffer size: %i)", (u32)(TitleID >> 32), (u32)TitleID, MaxCount); return true; } break; diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp index 062022f156..bd74d27159 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_fs.cpp @@ -57,16 +57,19 @@ bool CWII_IPC_HLE_Device_fs::Open(u32 _CommandAddress, u32 _Mode) // create home directory if (VolumeHandler::IsValid()) { - u32 TitleID = VolumeHandler::Read32(0); - _dbg_assert_(WII_IPC_FILEIO, TitleID != 0); - if (TitleID == 0) TitleID = 0xF00DBEEF; - - char* pTitleID = (char*)&TitleID; - char Path[260+1]; - sprintf(Path, FULL_WII_USER_DIR "title/00010000/%02x%02x%02x%02x/data/nocopy/", - (u8)pTitleID[3], (u8)pTitleID[2], (u8)pTitleID[1], (u8)pTitleID[0]); - + u32 TitleID, GameID; + VolumeHandler::RAWReadToPtr((u8*)&TitleID, 0x0F8001DC, 4); + + TitleID = Common::swap32(TitleID); + GameID = VolumeHandler::Read32(0); + + _dbg_assert_(WII_IPC_FILEIO, GameID != 0); + if (GameID == 0) GameID = 0xF00DBEEF; + if (TitleID == 0) TitleID = 0x00010000; + + sprintf(Path, FULL_WII_USER_DIR "title/%08x/%08x/data/nocopy/", TitleID, GameID); + File::CreateFullPath(Path); } diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp index 9daa85280f..4acc0b6e19 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp @@ -88,6 +88,7 @@ EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, CGameListCtrl::OnColBeginDrag) EVT_LIST_COL_CLICK(LIST_CTRL, CGameListCtrl::OnColumnClick) EVT_MENU(IDM_PROPERTIES, CGameListCtrl::OnProperties) EVT_MENU(IDM_OPENCONTAININGFOLDER, CGameListCtrl::OnOpenContainingFolder) +EVT_MENU(IDM_OPENSAVEFOLDER, CGameListCtrl::OnOpenSaveFolder) EVT_MENU(IDM_SETDEFAULTGCM, CGameListCtrl::OnSetDefaultGCM) EVT_MENU(IDM_COMPRESSGCM, CGameListCtrl::OnCompressGCM) EVT_MENU(IDM_MULTICOMPRESSGCM, CGameListCtrl::OnMultiCompressGCM) @@ -620,6 +621,8 @@ void CGameListCtrl::OnRightClick(wxMouseEvent& event) wxMenu popupMenu; popupMenu.Append(IDM_PROPERTIES, _("&Properties")); popupMenu.AppendSeparator(); + if (selected_iso->IsWii()) + popupMenu.Append(IDM_OPENSAVEFOLDER, _("Open Wii &save folder")); popupMenu.Append(IDM_OPENCONTAININGFOLDER, _("Open &containing folder")); popupMenu.AppendCheckItem(IDM_SETDEFAULTGCM, _("Set as &default ISO")); @@ -687,6 +690,15 @@ void CGameListCtrl::OnOpenContainingFolder(wxCommandEvent& WXUNUSED (event)) WxUtils::Explore(path.c_str()); } +void CGameListCtrl::OnOpenSaveFolder(wxCommandEvent& WXUNUSED (event)) +{ + const GameListItem *iso = GetSelectedISO(); + if (!iso) + return; + if (iso->GetWiiFSPath() != "NULL") + WxUtils::Explore(iso->GetWiiFSPath().c_str()); +} + // ======================================================= // Save this file as the default file diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.h b/Source/Core/DolphinWX/Src/GameListCtrl.h index f7ebb491e8..9b5d52e7c8 100644 --- a/Source/Core/DolphinWX/Src/GameListCtrl.h +++ b/Source/Core/DolphinWX/Src/GameListCtrl.h @@ -79,6 +79,7 @@ private: void OnSize(wxSizeEvent& event); void OnProperties(wxCommandEvent& event); void OnOpenContainingFolder(wxCommandEvent& event); + void OnOpenSaveFolder(wxCommandEvent& event); void OnSetDefaultGCM(wxCommandEvent& event); void OnDeleteGCM(wxCommandEvent& event); void OnCompressGCM(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 2e359524ac..89a8c67a5f 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -98,6 +98,7 @@ enum IDM_TOGGLE_CONSOLE, IDM_NOTIFYMAPLOADED, IDM_OPENCONTAININGFOLDER, + IDM_OPENSAVEFOLDER, IDM_SETDEFAULTGCM, IDM_DELETEGCM, IDM_COMPRESSGCM, diff --git a/Source/Core/DolphinWX/Src/ISOFile.cpp b/Source/Core/DolphinWX/Src/ISOFile.cpp index e928d46903..773b323a26 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.cpp +++ b/Source/Core/DolphinWX/Src/ISOFile.cpp @@ -206,3 +206,29 @@ const std::string& GameListItem::GetName(int index) const return m_Name[0]; } +const std::string GameListItem::GetWiiFSPath() const +{ + DiscIO::IVolume *Iso = DiscIO::CreateVolumeFromFilename(m_FileName); + + if (Iso != NULL) + { + if (DiscIO::IsVolumeWiiDisc(Iso)) + { + char Path[250]; + u64 Title; + + Iso->RAWRead((u64)0x0F8001DC, 8, (u8*)&Title); + Title = Common::swap64(Title); + + sprintf(Path, FULL_WII_USER_DIR "title/%08x/%08x/data/", (u32)(Title>>32), (u32)Title); + + if (!File::Exists(Path)) + File::CreateFullPath(Path); + + return std::string(wxGetCwd().mb_str()) + std::string(Path).substr(strlen(ROOT_DIR)); + } + } + + return "NULL"; +} + diff --git a/Source/Core/DolphinWX/Src/ISOFile.h b/Source/Core/DolphinWX/Src/ISOFile.h index 3819c42181..9b701011db 100644 --- a/Source/Core/DolphinWX/Src/ISOFile.h +++ b/Source/Core/DolphinWX/Src/ISOFile.h @@ -33,6 +33,7 @@ public: const std::string& GetCompany() const {return m_Company;} const std::string& GetDescription(int index) const; const std::string& GetUniqueID() const {return m_UniqueID;} + const std::string GetWiiFSPath() const; DiscIO::IVolume::ECountry GetCountry() const {return m_Country;} const std::string& GetIssues() const {return m_Issues;} bool IsCompressed() const {return m_BlobCompressed;}