diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp index 4c9c1c1..41cdaf1 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.cpp @@ -39,6 +39,10 @@ bit8 s_buffer1[400 * 1024]; size_t s_ProgramIdNum = 0; // ダウンロードするタイトルのProgramIdの配列 nn::ProgramId s_ProgramIdList[256]; +// SDカードに吸い出されたDSiWareのタイトルの個数 +size_t s_SdDSiWareProgramIdNum = 0; +// SDカードに吸い出されたDSiWareのProgramIdの配列 +nn::ProgramId s_SdDSiWareList[32]; // ダウンロード済みのタイトルの個数 size_t s_FinishedTitleNum = 0; @@ -133,13 +137,17 @@ void TwlTitleDownloaderThreadFunc() PreinstallImporter importer; s_Progress = 0; + + TitleDownloader::m_Result = ListUpTwlTitles(s_SdDSiWareList, &s_SdDSiWareProgramIdNum); + COMMON_LOGGER_RETURN_VOID_IF_FAILED(TitleDownloader::m_Result); + TitleDownloader::m_Result = nn::am::InitializeForNetworkImporter(); COMMON_LOGGER_RETURN_VOID_IF_FAILED(TitleDownloader::m_Result); TwlTitleDownloader.m_Result = importer.ListTitlesBasedOnTickets(s_ProgramIdList, &s_ProgramIdNum); COMMON_LOGGER_RETURN_VOID_IF_FAILED(TwlTitleDownloader.m_Result); - TwlTitleDownloader.SetupTitleListForTWL(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum); + TwlTitleDownloader.SetupTitleListForTWL(s_ProgramIdList, s_ProgramIdNum, s_FinishedTitleNum, s_SdDSiWareList, s_SdDSiWareProgramIdNum); TwlTitleDownloader.Start(); nn::am::FinalizeForNetworkImporter(); @@ -422,15 +430,24 @@ void TitleDownloader::SetupTitleList(nn::ProgramId* list, size_t num, u32 index) m_FinishedTitleNum = index; } -void TitleDownloader::SetupTitleListForTWL(nn::ProgramId* list, size_t num, u32 index) +void TitleDownloader::SetupTitleListForTWL(nn::ProgramId* eTicketList, size_t eTicketNum, u32 index, nn::ProgramId* sdDSiWareList, size_t sdDSiWareNum) { - const size_t listNum = nn::math::Min(num, IMPORTABLE_TITLE_MAX); + const size_t listNum = nn::math::Min(eTicketNum, IMPORTABLE_TITLE_MAX); u32 twlAppNum = 0; + + // 8thNUPからのショップアカウント削除後もセーブデータが削除されない仕様と、MSETでのSDカードへのDSiWareのバックアップ機能があるため、 + // eTicketが存在する、かつセーブデータが存在するタイトルのみダウンロードする for(u32 i = 0; i < listNum; i++) { - if(nn::CTR::IsTwlApp(list[i])) + if(nn::CTR::IsTwlApp(eTicketList[i])) { - m_ProgramIdList[twlAppNum++] = list[i]; + for(u32 j = 0; j < sdDSiWareNum; j++) + { + if(eTicketList[i] == sdDSiWareList[j]) + { + m_ProgramIdList[twlAppNum++] = eTicketList[i]; + } + } } } m_TiteNum = twlAppNum; diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h index bb32953..fd2e8ba 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/TitleDownloader.h @@ -70,7 +70,7 @@ public: void SetupTitleList(nn::ProgramId* list, size_t num, u32 index); //! @brief TWLタイトルリストを設定する - void SetupTitleListForTWL(nn::ProgramId* list, size_t num, u32 index); + void SetupTitleListForTWL(nn::ProgramId* eTicketList, size_t eTicketNum, u32 index, nn::ProgramId* sdDSiWareList, size_t sdDSiWareNum); //! @brief タイトルをダウンロードするのに必要なサイズを計算します void CalculateRequiredSize(s64* requiredSize);