diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp index a5419a0..d651b4f 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp @@ -39,6 +39,8 @@ bit8 s_buffer1[400 * 1024]; size_t s_ProgramIdNum = 0; // ダウンロードするタイトルのProgramIdの配列 nn::ProgramId s_ProgramIdList[256]; +// ダウンロード済みのタイトルの個数 +size_t s_FinishedTitleNum = 0; const size_t TITLE_DOWNLOADER_STACK_SIZE = 0x2000; nn::os::Thread s_TitleDownloaderThread; @@ -132,17 +134,19 @@ void TwlTitleDownloaderThreadFunc() s_Progress = 0; TitleDownloader::m_Result = ListUpTwlTitles(s_ProgramIdList, &s_ProgramIdNum); 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(); + s_FinishedTitleNum = TwlTitleDownloader.GetFinishedTitleNum(); } void PreinstallTitleDownloaderThreadFunc() { TitleDownloader PreinstallTitleDownloader; - PreinstallImporter importer; s_Progress = 0; + PreinstallTitleDownloader.SetupTitleList(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum); PreinstallTitleDownloader.Start(); + s_FinishedTitleNum = PreinstallTitleDownloader.GetFinishedTitleNum(); } void StartTwlTitleDownload() @@ -159,7 +163,7 @@ void PreparePreinstallTitleDownloadThreadFunc(PreinstallListupParam param) preinstallTitleDownloader.m_Result = importer.ListTitles(s_ProgramIdList, &s_ProgramIdNum, param.deviceId, param.serialNo); 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; 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++) { @@ -338,7 +342,7 @@ void StartShopOperationSingleRetry(ShopOperation op, u32 retryCount) 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; StartShopOperationSingle(SHOP_OPERATION_CONNECT_WITHOUT_CLOSE); @@ -355,10 +359,11 @@ void TitleDownloader::Start() WaitShopOperationAndFinalize(); m_Result = GetShopOperationSingleResult(); 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); 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_TiteNum = listNum; + m_FinishedTitleNum = index; } void TitleDownloader::CalculateRequiredSize(s64* requiredSize) @@ -394,4 +400,9 @@ void TitleDownloader::CalculateRequiredSize(s64* requiredSize) } } +u32 TitleDownloader::GetFinishedTitleNum() +{ + return m_FinishedTitleNum; +} + } diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h index 2a2b092..ea4fb00 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h @@ -69,11 +69,14 @@ public: virtual ~TitleDownloader(); //! @brief タイトルリストを設定する - void SetupTitleList(nn::ProgramId* list, size_t num); + void SetupTitleList(nn::ProgramId* list, size_t num, u32 index); //! @brief タイトルをダウンロードするのに必要なサイズを計算します void CalculateRequiredSize(s64* requiredSize); + //! @brief ダウンロードが完了したタイトルの数を取得します + u32 GetFinishedTitleNum(); + // タイトルのダウンロードを開始する void Start(); @@ -86,6 +89,7 @@ private: nn::ProgramID m_ProgramIdList[IMPORTABLE_TITLE_MAX]; u32 m_TiteNum; + u32 m_FinishedTitleNum; }; diff --git a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/TitleDownloader/test_TitleDownloader.cpp b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/TitleDownloader/test_TitleDownloader.cpp index ced457c..93cfe95 100644 --- a/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/TitleDownloader/test_TitleDownloader.cpp +++ b/trunk/ConsoleDataMigration/sources/tests/ConsoleRestore/TitleDownloader/test_TitleDownloader.cpp @@ -111,7 +111,7 @@ void TitleDownloaderTest::ListUp() nn::ProgramId list[256]; ConsoleRestore::ListUpTwlTitles(list, &num); - dl.SetupTitleList(list, num); + dl.SetupTitleList(list, num, 0); } void TitleDownloaderTest::DownloadPreinstall() @@ -157,7 +157,7 @@ void TitleDownloaderTest::CalculateRequiredSize() do { - dl.SetupTitleList(id, sizeof(id) / sizeof(id[0])); + dl.SetupTitleList(id, sizeof(id) / sizeof(id[0]), 0); dl.CalculateRequiredSize(&requiredSize); }while(dl.m_Result.IsFailure()); NN_LOG("size = %llu\n", requiredSize);