mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
タイトルダウンロードが失敗した時に途中からやり直すように
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@609 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
14d6ed5209
commit
9b53c578c8
@ -39,6 +39,8 @@ bit8 s_buffer1[400 * 1024];
|
|||||||
size_t s_ProgramIdNum = 0;
|
size_t s_ProgramIdNum = 0;
|
||||||
// ダウンロードするタイトルのProgramIdの配列
|
// ダウンロードするタイトルのProgramIdの配列
|
||||||
nn::ProgramId s_ProgramIdList[256];
|
nn::ProgramId s_ProgramIdList[256];
|
||||||
|
// ダウンロード済みのタイトルの個数
|
||||||
|
size_t s_FinishedTitleNum = 0;
|
||||||
|
|
||||||
const size_t TITLE_DOWNLOADER_STACK_SIZE = 0x2000;
|
const size_t TITLE_DOWNLOADER_STACK_SIZE = 0x2000;
|
||||||
nn::os::Thread s_TitleDownloaderThread;
|
nn::os::Thread s_TitleDownloaderThread;
|
||||||
@ -132,17 +134,19 @@ void TwlTitleDownloaderThreadFunc()
|
|||||||
s_Progress = 0;
|
s_Progress = 0;
|
||||||
TitleDownloader::m_Result = ListUpTwlTitles(s_ProgramIdList, &s_ProgramIdNum);
|
TitleDownloader::m_Result = ListUpTwlTitles(s_ProgramIdList, &s_ProgramIdNum);
|
||||||
COMMON_LOGGER_RETURN_VOID_IF_FAILED(TitleDownloader::m_Result);
|
COMMON_LOGGER_RETURN_VOID_IF_FAILED(TitleDownloader::m_Result);
|
||||||
TwlTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum);
|
TwlTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum);
|
||||||
TwlTitleDownloader.Start();
|
TwlTitleDownloader.Start();
|
||||||
|
s_FinishedTitleNum = TwlTitleDownloader.GetFinishedTitleNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreinstallTitleDownloaderThreadFunc()
|
void PreinstallTitleDownloaderThreadFunc()
|
||||||
{
|
{
|
||||||
TitleDownloader PreinstallTitleDownloader;
|
TitleDownloader PreinstallTitleDownloader;
|
||||||
PreinstallImporter importer;
|
|
||||||
|
|
||||||
s_Progress = 0;
|
s_Progress = 0;
|
||||||
|
PreinstallTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum);
|
||||||
PreinstallTitleDownloader.Start();
|
PreinstallTitleDownloader.Start();
|
||||||
|
s_FinishedTitleNum = PreinstallTitleDownloader.GetFinishedTitleNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartTwlTitleDownload()
|
void StartTwlTitleDownload()
|
||||||
@ -159,7 +163,7 @@ void PreparePreinstallTitleDownloadThreadFunc(PreinstallListupParam param)
|
|||||||
preinstallTitleDownloader.m_Result = importer.ListTitles(s_ProgramIdList, &s_ProgramIdNum, param.deviceId, param.serialNo);
|
preinstallTitleDownloader.m_Result = importer.ListTitles(s_ProgramIdList, &s_ProgramIdNum, param.deviceId, param.serialNo);
|
||||||
COMMON_LOGGER_RETURN_VOID_IF_FAILED(preinstallTitleDownloader.m_Result);
|
COMMON_LOGGER_RETURN_VOID_IF_FAILED(preinstallTitleDownloader.m_Result);
|
||||||
|
|
||||||
preinstallTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum);
|
preinstallTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum);
|
||||||
|
|
||||||
s64 requiredSize;
|
s64 requiredSize;
|
||||||
preinstallTitleDownloader.CalculateRequiredSize(&requiredSize);
|
preinstallTitleDownloader.CalculateRequiredSize(&requiredSize);
|
||||||
@ -234,7 +238,7 @@ u32 GetTitleDownloadProgress()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TitleDownloader::TitleDownloader() : m_TiteNum(0)
|
TitleDownloader::TitleDownloader() : m_TiteNum(0), m_FinishedTitleNum(0)
|
||||||
{
|
{
|
||||||
for(u32 i = 0; i < IMPORTABLE_TITLE_MAX; i++)
|
for(u32 i = 0; i < IMPORTABLE_TITLE_MAX; i++)
|
||||||
{
|
{
|
||||||
@ -338,7 +342,7 @@ void StartShopOperationSingleRetry(ShopOperation op, u32 retryCount)
|
|||||||
|
|
||||||
void TitleDownloader::Start()
|
void TitleDownloader::Start()
|
||||||
{
|
{
|
||||||
for(u8 i = 0; i < m_TiteNum; i++)
|
for(u8 i = m_FinishedTitleNum; i < m_TiteNum; i++)
|
||||||
{
|
{
|
||||||
s_Progress = i * 100 / m_TiteNum;
|
s_Progress = i * 100 / m_TiteNum;
|
||||||
StartShopOperationSingle(SHOP_OPERATION_CONNECT_WITHOUT_CLOSE);
|
StartShopOperationSingle(SHOP_OPERATION_CONNECT_WITHOUT_CLOSE);
|
||||||
@ -355,10 +359,11 @@ void TitleDownloader::Start()
|
|||||||
WaitShopOperationAndFinalize();
|
WaitShopOperationAndFinalize();
|
||||||
m_Result = GetShopOperationSingleResult();
|
m_Result = GetShopOperationSingleResult();
|
||||||
COMMON_LOGGER_RETURN_VOID_IF_FAILED(m_Result);
|
COMMON_LOGGER_RETURN_VOID_IF_FAILED(m_Result);
|
||||||
|
m_FinishedTitleNum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TitleDownloader::SetupTitleList(nn::ProgramId* list, size_t num)
|
void TitleDownloader::SetupTitleList(nn::ProgramId* list, size_t num, u32 index)
|
||||||
{
|
{
|
||||||
const size_t listNum = nn::math::Min(num, IMPORTABLE_TITLE_MAX);
|
const size_t listNum = nn::math::Min(num, IMPORTABLE_TITLE_MAX);
|
||||||
for(u32 i = 0; i < listNum; i++)
|
for(u32 i = 0; i < listNum; i++)
|
||||||
@ -366,6 +371,7 @@ void TitleDownloader::SetupTitleList(nn::ProgramId* list, size_t num)
|
|||||||
m_ProgramIdList[i] = list[i];
|
m_ProgramIdList[i] = list[i];
|
||||||
}
|
}
|
||||||
m_TiteNum = listNum;
|
m_TiteNum = listNum;
|
||||||
|
m_FinishedTitleNum = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TitleDownloader::CalculateRequiredSize(s64* requiredSize)
|
void TitleDownloader::CalculateRequiredSize(s64* requiredSize)
|
||||||
@ -394,4 +400,9 @@ void TitleDownloader::CalculateRequiredSize(s64* requiredSize)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 TitleDownloader::GetFinishedTitleNum()
|
||||||
|
{
|
||||||
|
return m_FinishedTitleNum;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,11 +69,14 @@ public:
|
|||||||
virtual ~TitleDownloader();
|
virtual ~TitleDownloader();
|
||||||
|
|
||||||
//! @brief タイトルリストを設定する
|
//! @brief タイトルリストを設定する
|
||||||
void SetupTitleList(nn::ProgramId* list, size_t num);
|
void SetupTitleList(nn::ProgramId* list, size_t num, u32 index);
|
||||||
|
|
||||||
//! @brief タイトルをダウンロードするのに必要なサイズを計算します
|
//! @brief タイトルをダウンロードするのに必要なサイズを計算します
|
||||||
void CalculateRequiredSize(s64* requiredSize);
|
void CalculateRequiredSize(s64* requiredSize);
|
||||||
|
|
||||||
|
//! @brief ダウンロードが完了したタイトルの数を取得します
|
||||||
|
u32 GetFinishedTitleNum();
|
||||||
|
|
||||||
// タイトルのダウンロードを開始する
|
// タイトルのダウンロードを開始する
|
||||||
void Start();
|
void Start();
|
||||||
|
|
||||||
@ -86,6 +89,7 @@ private:
|
|||||||
|
|
||||||
nn::ProgramID m_ProgramIdList[IMPORTABLE_TITLE_MAX];
|
nn::ProgramID m_ProgramIdList[IMPORTABLE_TITLE_MAX];
|
||||||
u32 m_TiteNum;
|
u32 m_TiteNum;
|
||||||
|
u32 m_FinishedTitleNum;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -111,7 +111,7 @@ void TitleDownloaderTest::ListUp()
|
|||||||
nn::ProgramId list[256];
|
nn::ProgramId list[256];
|
||||||
|
|
||||||
ConsoleRestore::ListUpTwlTitles(list, &num);
|
ConsoleRestore::ListUpTwlTitles(list, &num);
|
||||||
dl.SetupTitleList(list, num);
|
dl.SetupTitleList(list, num, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TitleDownloaderTest::DownloadPreinstall()
|
void TitleDownloaderTest::DownloadPreinstall()
|
||||||
@ -157,7 +157,7 @@ void TitleDownloaderTest::CalculateRequiredSize()
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
dl.SetupTitleList(id, sizeof(id) / sizeof(id[0]));
|
dl.SetupTitleList(id, sizeof(id) / sizeof(id[0]), 0);
|
||||||
dl.CalculateRequiredSize(&requiredSize);
|
dl.CalculateRequiredSize(&requiredSize);
|
||||||
}while(dl.m_Result.IsFailure());
|
}while(dl.m_Result.IsFailure());
|
||||||
NN_LOG("size = %llu\n", requiredSize);
|
NN_LOG("size = %llu\n", requiredSize);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user