mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
IVS取得モードでユーザのSDカードを調べるように
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@220 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
8a6fb97c54
commit
7c5b20eec6
@ -228,7 +228,7 @@ extern "C" void nnMain(void)
|
||||
// RenderSystemを作ってからログが出せる
|
||||
common::Logger::InitializeEjectThread();
|
||||
common::Logger::SetEjectHandler(OnSdEjected);
|
||||
common::Logger::SetInsertHandler(OnSdEjected);
|
||||
common::Logger::SetInsertHandler(OnSdInserted);
|
||||
COMMON_LOGGER("\n");
|
||||
COMMON_LOGGER("CTR Console Restore start\n");
|
||||
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "NtpClient.h"
|
||||
#include "TitleDownloader.h"
|
||||
#include "Shop.h"
|
||||
#include "Util.h"
|
||||
|
||||
namespace ConsoleRestore
|
||||
{
|
||||
@ -40,7 +41,7 @@ namespace ConsoleRestore
|
||||
namespace
|
||||
{
|
||||
|
||||
// インターネット設定を読んだかどうか
|
||||
// ネットワーク設定ファイルを読んだかどうか
|
||||
bool s_ReadSettingDone = false;
|
||||
// インターネット設定を読んだ結果
|
||||
bool s_ReadSettingIsSuccess = false;
|
||||
@ -110,7 +111,8 @@ typedef enum RestoreState
|
||||
DOWNLOAD_IVS_DONE, // インフラからIVSを取得完了
|
||||
CHECK_IVS, // IVSとSDカードのセーブデータディレクトリの一致を確認
|
||||
CHECK_SD_DIRECTORY, // SDカードのIVS依存ディレクトリを探す
|
||||
CHECK_SD_DIRECTORY_DONE, // SDカードのIVS依存ディレクトリチェック完了
|
||||
CHECK_SD_DIRECTORY_SUCCESS, // SDカードのIVS依存ディレクトリチェック完了
|
||||
CHECK_SD_DIRECTORY_FAIL, // SDカードのIVS依存ディレクトリが見つからなかった
|
||||
DELETE_ACCOUNT, // ショップアカウントを削除する
|
||||
DELETE_ACCOUNT_DONE, // ショップアカウント削除完了
|
||||
SYNC_TICKET, // eTicketを同期する
|
||||
@ -895,33 +897,45 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep)
|
||||
{
|
||||
if (nn::fs::IsSdmcInserted())
|
||||
{
|
||||
NN_LOG("Check User's SD Card\n");
|
||||
// ユーザのSDカードにはAP設定ファイルは無いはず
|
||||
if (ExistsAPSetting())
|
||||
{
|
||||
NN_LOG("AP Setting Exists. Retry\n");
|
||||
s_RestoreState = CHECK_IVS;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ExistsIvsDirectory())
|
||||
NN_LOG("Read User's SD Card\n");
|
||||
void* ivs;
|
||||
size_t size;
|
||||
GetIvs(&ivs, &size);
|
||||
std::string sysSaveRoot;
|
||||
|
||||
common::Util::GetSaveDataDirectoryRoot(sysSaveRoot, ivs, size);
|
||||
if (ExistsIvsDirectory(sysSaveRoot))
|
||||
{
|
||||
s_RestoreState = CHECK_SD_DIRECTORY_DONE;
|
||||
s_RestoreState = CHECK_SD_DIRECTORY_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_RestoreState = CHECK_SD_DIRECTORY_FAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case CHECK_SD_DIRECTORY_DONE:
|
||||
case CHECK_SD_DIRECTORY_SUCCESS:
|
||||
{
|
||||
static bool init = true;
|
||||
if(init)
|
||||
{
|
||||
DeleteAllCheckFiles();
|
||||
operationMessage.push_back(::std::string("Check User's SD Card Succeeded."));
|
||||
operationMessage.push_back(::std::string("Pull Out SD Card"));
|
||||
}
|
||||
break;
|
||||
|
||||
init = false;
|
||||
}
|
||||
|
||||
operationMessage.push_back(::std::string("Check User's SD Card Done."));
|
||||
case CHECK_SD_DIRECTORY_FAIL:
|
||||
{
|
||||
operationMessage.push_back(::std::string("Check User's SD Card Failed."));
|
||||
operationMessage.push_back(::std::string("Pull Out SD Card"));
|
||||
}
|
||||
break;
|
||||
@ -1343,18 +1357,22 @@ bool IsRestoreFailed()
|
||||
|
||||
void OnSdEjected()
|
||||
{
|
||||
if (s_RestoreState == WAIT_SD_EJECT || s_RestoreState == ALL_DONE || s_RestoreState == CHECK_SD_DIRECTORY_DONE)
|
||||
if (s_RestoreState == WAIT_SD_EJECT || s_RestoreState == ALL_DONE || s_RestoreState == CHECK_SD_DIRECTORY_SUCCESS)
|
||||
{
|
||||
s_RestoreState = ALL_DONE;
|
||||
}
|
||||
else if(s_RestoreState == NUP_ONLY_WAIT_SD_EJECT || s_RestoreState == NUP_ONLY_WAIT_NEXT)
|
||||
else if (s_RestoreState == NUP_ONLY_WAIT_SD_EJECT || s_RestoreState == NUP_ONLY_WAIT_NEXT)
|
||||
{
|
||||
s_RestoreState = NUP_ONLY_WAIT_NEXT;
|
||||
}
|
||||
// ユーザのSDが抜かれてからFAILにする
|
||||
else if (s_RestoreState == CHECK_SD_DIRECTORY_FAIL)
|
||||
{
|
||||
s_RestoreState = FAIL;
|
||||
}
|
||||
// FAILのときは一旦電源を切らないと動かないようにしておく
|
||||
// IVSチェック時はユーザのSDカードを挿入してもらうため
|
||||
else if(s_RestoreState != FAIL &&
|
||||
s_RestoreState != CHECK_IVS)
|
||||
else if (s_RestoreState != FAIL && s_RestoreState != CHECK_IVS)
|
||||
{
|
||||
InitializeState();
|
||||
ClearFileReadResult();
|
||||
@ -1365,6 +1383,8 @@ void OnSdInserted()
|
||||
{
|
||||
if(s_RestoreState == CHECK_IVS)
|
||||
{
|
||||
// SDカードが変わるのでファイルチェックは初期化する
|
||||
common::InitializeFileCheck();
|
||||
s_RestoreState = CHECK_SD_DIRECTORY;
|
||||
}
|
||||
}
|
||||
|
||||
@ -820,10 +820,56 @@ nn::Result ReadVersionData()
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ExistsIvsDirectory()
|
||||
bool ExistsIvsDirectory(std::string& ivsRoot)
|
||||
{
|
||||
// TODO: Nintendo 3DS ディレクトリを検索する
|
||||
return true;
|
||||
nn::Result result;
|
||||
nn::fs::Directory dir;
|
||||
|
||||
common::SdMountManager::Mount();
|
||||
|
||||
result = dir.TryInitialize(common::SD_NINTENDO_3DS_ROOT_PATH);
|
||||
if(result.IsFailure())
|
||||
{
|
||||
nn::dbg::PrintResult(result);
|
||||
common::SdMountManager::Unmount();
|
||||
return false;
|
||||
}
|
||||
|
||||
wchar_t ivs[34];
|
||||
std::mbstowcs(ivs, ivsRoot.c_str(), ivsRoot.size() + 1);
|
||||
|
||||
nn::fs::DirectoryEntry entry;
|
||||
s32 numEntry;
|
||||
for (;;)
|
||||
{
|
||||
result = dir.TryRead(&numEntry, &entry, 1);
|
||||
if (result.IsFailure())
|
||||
{
|
||||
dir.Finalize();
|
||||
common::SdMountManager::Unmount();
|
||||
return false;
|
||||
}
|
||||
if (numEntry == 0)
|
||||
{
|
||||
// ルートディレクトリを閉じる
|
||||
dir.Finalize();
|
||||
common::SdMountManager::Unmount();
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 比較する
|
||||
if (entry.attributes.isDirectory)
|
||||
{
|
||||
NN_LOG("%ls\n", entry.entryName);
|
||||
if(std::wcscmp(ivs, entry.entryName) == 0)
|
||||
{
|
||||
common::SdMountManager::Unmount();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Cleanup()
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include <nn.h>
|
||||
#include "FileName.h"
|
||||
#include <nn/ac/CTR/private/ac_NetworkSetting.h>
|
||||
#include <string>
|
||||
|
||||
namespace ConsoleRestore
|
||||
{
|
||||
@ -95,7 +96,7 @@ nn::Result InitializeHardwareDependentSetting();
|
||||
nn::Result ReadVersionData();
|
||||
|
||||
// SDカードのNintendo 3DS以下ににIVSと一致するディレクトリがあるかどうか
|
||||
bool ExistsIvsDirectory();
|
||||
bool ExistsIvsDirectory(std::string& ivsRoot);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -354,6 +354,7 @@ void ShopOperationSingleThreadFunc(ShopThreadParam param)
|
||||
|
||||
case SHOP_OPERATION_GET_IVS:
|
||||
{
|
||||
ShopOperationConnect();
|
||||
// IVSを取得する
|
||||
result = nn::nim::Shop::ImportIvsFromInfrastructure();
|
||||
NIM_SHOP_RESULT_CHECK(result);
|
||||
|
||||
@ -62,6 +62,7 @@ const wchar_t* const REGION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/Region.bi
|
||||
const wchar_t* const DEVICE_ID_PATHNAME = L"sdmc:/CTR_Console_Repair/deviceId.bin";
|
||||
const wchar_t* const FILE_LIST_PATHNAME = L"sdmc:/CTR_Console_Repair/FileList.txt";
|
||||
const wchar_t* const TWL_TITLELIST_PATHNAME = L"sdmc:/CTR_Console_Repair/TwlTitleList.txt";
|
||||
const wchar_t* const SD_NINTENDO_3DS_ROOT_PATH = L"sdmc:/Nintendo 3DS/";
|
||||
|
||||
enum TWL_PATH_INDEX
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user