mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-04-06 03:58:02 +08:00
Improve title destination detection.
This commit is contained in:
parent
b973ba2c69
commit
71e670edde
@ -317,6 +317,15 @@ u32 util_get_seed_response_code() {
|
||||
return import_response_code;
|
||||
}
|
||||
|
||||
FS_MediaType util_get_title_destination(u64 titleId) {
|
||||
u16 platform = (u16) ((titleId >> 48) & 0xFFFF);
|
||||
u16 category = (u16) ((titleId >> 32) & 0xFFFF);
|
||||
u8 variation = (u8) (titleId & 0xFF);
|
||||
|
||||
// DSiWare 3DS DSiWare, System, DLP Application System Title
|
||||
return platform == 0x0003 || (platform == 0x0004 && ((category & 0x8011) != 0 || (category == 0x0000 && variation == 0x02))) ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
}
|
||||
|
||||
static u32 sigSizes[6] = {0x240, 0x140, 0x80, 0x240, 0x140, 0x80};
|
||||
|
||||
u64 util_get_cia_title_id(u8* cia) {
|
||||
|
@ -54,6 +54,8 @@ void util_get_parent_path(char* out, const char* path, u32 size);
|
||||
Result util_import_seed(u64 titleId);
|
||||
u32 util_get_seed_response_code();
|
||||
|
||||
FS_MediaType util_get_title_destination(u64 titleId);
|
||||
|
||||
u64 util_get_cia_title_id(u8* cia);
|
||||
Result util_get_cia_file_smdh(SMDH* smdh, Handle handle);
|
||||
u64 util_get_ticket_title_id(u8* ticket);
|
||||
|
@ -133,7 +133,7 @@ static Result action_install_cdn_close_dst(void* data, u32 index, bool succeeded
|
||||
} else {
|
||||
Result res = 0;
|
||||
if(R_SUCCEEDED(res = AM_InstallContentFinish(handle)) && index == 1 && installData->contentCount > 1 && (installData->ticket->titleId >> 32) == 0x0004008C) {
|
||||
FS_MediaType dest = (installData->ticket->titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
FS_MediaType dest = util_get_title_destination(installData->ticket->titleId);
|
||||
if(R_SUCCEEDED(res = AM_InstallTitleFinish())
|
||||
&& R_SUCCEEDED(res = AM_CommitImportTitles(dest, 1, false, &installData->ticket->titleId))
|
||||
&& R_SUCCEEDED(res = AM_InstallTitleBegin(dest, installData->ticket->titleId, false))) {
|
||||
@ -181,7 +181,7 @@ static Result action_install_cdn_suspend(void* data, u32 index) {
|
||||
static Result action_install_cdn_restore(void* data, u32 index) {
|
||||
install_cdn_data* installData = (install_cdn_data*) data;
|
||||
|
||||
return AM_InstallTitleResume((installData->ticket->titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD, installData->ticket->titleId);
|
||||
return AM_InstallTitleResume(util_get_title_destination(installData->ticket->titleId), installData->ticket->titleId);
|
||||
}
|
||||
|
||||
bool action_install_cdn_error(void* data, u32 index, Result res) {
|
||||
@ -221,7 +221,7 @@ static void action_install_cdn_update(ui_view* view, void* data, float* progress
|
||||
|
||||
if(R_SUCCEEDED(installData->installInfo.result)) {
|
||||
if(R_SUCCEEDED(res = AM_InstallTitleFinish())
|
||||
&& R_SUCCEEDED(res = AM_CommitImportTitles((installData->ticket->titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD, 1, false, &installData->ticket->titleId))) {
|
||||
&& R_SUCCEEDED(res = AM_CommitImportTitles(util_get_title_destination(installData->ticket->titleId), 1, false, &installData->ticket->titleId))) {
|
||||
util_import_seed(installData->ticket->titleId);
|
||||
|
||||
if(installData->ticket->titleId == 0x0004013800000002 || installData->ticket->titleId == 0x0004013820000002) {
|
||||
@ -256,7 +256,7 @@ static void action_install_cdn_update(ui_view* view, void* data, float* progress
|
||||
}
|
||||
|
||||
static void action_install_cdn_start(install_cdn_data* data) {
|
||||
FS_MediaType dest = (data->ticket->titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
FS_MediaType dest = util_get_title_destination(data->ticket->titleId);
|
||||
|
||||
AM_DeleteTitle(dest, data->ticket->titleId);
|
||||
if(dest == MEDIATYPE_SD) {
|
||||
|
@ -122,7 +122,7 @@ static Result action_install_cias_open_dst(void* data, u32 index, void* initialR
|
||||
|
||||
u64 titleId = util_get_cia_title_id((u8*) initialReadBlock);
|
||||
|
||||
FS_MediaType dest = (titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
FS_MediaType dest = util_get_title_destination(titleId);
|
||||
|
||||
bool n3ds = false;
|
||||
if(R_SUCCEEDED(APT_CheckNew3DS(&n3ds)) && !n3ds && ((titleId >> 28) & 0xF) == 2) {
|
||||
|
@ -137,7 +137,7 @@ static Result action_url_install_open_dst(void* data, u32 index, void* initialRe
|
||||
} else if(*(u16*) initialReadBlock == 0x2020) {
|
||||
u64 titleId = util_get_cia_title_id((u8*) initialReadBlock);
|
||||
|
||||
FS_MediaType dest = (titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
FS_MediaType dest = util_get_title_destination(titleId);
|
||||
|
||||
bool n3ds = false;
|
||||
if(R_SUCCEEDED(APT_CheckNew3DS(&n3ds)) && !n3ds && ((titleId >> 28) & 0xF) == 2) {
|
||||
|
@ -142,7 +142,7 @@ static Result networkinstall_open_dst(void* data, u32 index, void* initialReadBl
|
||||
} else if(*(u16*) initialReadBlock == 0x2020) {
|
||||
u64 titleId = util_get_cia_title_id((u8*) initialReadBlock);
|
||||
|
||||
FS_MediaType dest = (titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD;
|
||||
FS_MediaType dest = util_get_title_destination(titleId);
|
||||
|
||||
bool n3ds = false;
|
||||
if(R_SUCCEEDED(APT_CheckNew3DS(&n3ds)) && !n3ds && ((titleId >> 28) & 0xF) == 2) {
|
||||
|
@ -68,7 +68,7 @@ Result task_create_file_item(list_item** out, FS_Archive archive, const char* pa
|
||||
fileInfo->ciaInfo.installedSize = titleEntry.size;
|
||||
fileInfo->ciaInfo.hasMeta = false;
|
||||
|
||||
if((titleEntry.titleID & 0x0000801000000002) != 0 && R_SUCCEEDED(AM_GetCiaFileInfo(MEDIATYPE_NAND, &titleEntry, fileHandle))) {
|
||||
if(util_get_title_destination(titleEntry.titleID) != MEDIATYPE_SD && R_SUCCEEDED(AM_GetCiaFileInfo(MEDIATYPE_NAND, &titleEntry, fileHandle))) {
|
||||
fileInfo->ciaInfo.installedSize = titleEntry.size;
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "../../error.h"
|
||||
#include "../../../core/linkedlist.h"
|
||||
#include "../../../core/screen.h"
|
||||
#include "../../../core/util.h"
|
||||
#include "../../../json/json.h"
|
||||
#include "../../../stb_image/stb_image.h"
|
||||
|
||||
@ -117,7 +118,7 @@ static void task_populate_titledb_thread(void* arg) {
|
||||
}
|
||||
|
||||
AM_TitleEntry entry;
|
||||
if(R_SUCCEEDED(AM_GetTitleInfo((titledbInfo->titleId & 0x0000801000000002) != 0 ? MEDIATYPE_NAND : MEDIATYPE_SD, 1, &titledbInfo->titleId, &entry))) {
|
||||
if(R_SUCCEEDED(AM_GetTitleInfo(util_get_title_destination(titledbInfo->titleId), 1, &titledbInfo->titleId, &entry))) {
|
||||
item->color = COLOR_INSTALLED;
|
||||
} else {
|
||||
item->color = COLOR_NOT_INSTALLED;
|
||||
|
Loading…
x
Reference in New Issue
Block a user