mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-05-29 11:19:16 +08:00
Fix TitleDB 3DSX listing and install status.
This commit is contained in:
parent
598b56906b
commit
42f2afaab9
@ -8,6 +8,7 @@
|
||||
#include "../../list.h"
|
||||
#include "../../ui.h"
|
||||
#include "../../../core/linkedlist.h"
|
||||
#include "../../../core/util.h"
|
||||
|
||||
static void action_install_titledb_draw_top(ui_view* view, void* data, float x1, float y1, float x2, float y2, u32 index) {
|
||||
ui_draw_titledb_info(view, ((list_item*) data)->data, x1, y1, x2, y2);
|
||||
@ -18,8 +19,16 @@ static void action_update_titledb_finished(void* data) {
|
||||
}
|
||||
|
||||
void action_install_titledb(linked_list* items, list_item* selected) {
|
||||
char url[64];
|
||||
snprintf(url, INSTALL_URL_MAX, "https://3ds.titledb.com/v1/%s/%lu/download", ((titledb_info*) selected->data)->type == TITLEDB_TYPE_CIA ? "cia" : "tdsx", ((titledb_info*) selected->data)->id);
|
||||
titledb_info* info = (titledb_info*) selected->data;
|
||||
|
||||
action_install_url("Install the selected title from TitleDB?", url, NULL, selected, action_update_titledb_finished, action_install_titledb_draw_top);
|
||||
char url[64];
|
||||
snprintf(url, INSTALL_URL_MAX, "https://3ds.titledb.com/v1/%s/%lu/download", info->type == TITLEDB_TYPE_CIA ? "cia" : "tdsx", info->id);
|
||||
|
||||
char name[FILE_NAME_MAX];
|
||||
util_escape_file_name(name, info->meta.shortDescription, sizeof(name));
|
||||
|
||||
char path3dsx[FILE_PATH_MAX];
|
||||
snprintf(path3dsx, sizeof(path3dsx), "/3ds/%s/%s.3dsx", name, name);
|
||||
|
||||
action_install_url("Install the selected title from TitleDB?", url, path3dsx, selected, action_update_titledb_finished, action_install_titledb_draw_top);
|
||||
}
|
@ -231,7 +231,7 @@ static Result action_install_url_open_dst(void* data, u32 index, void* initialRe
|
||||
snprintf(installData->curr3dsxPath, FILE_PATH_MAX, "/3ds/%s/%s.3dsx", name, name);
|
||||
}
|
||||
|
||||
if(R_SUCCEEDED(res = util_ensure_dir(sdmcArchive, dir))) {
|
||||
if(R_SUCCEEDED(res = util_ensure_dir(sdmcArchive, "/3ds/")) && R_SUCCEEDED(res = util_ensure_dir(sdmcArchive, dir))) {
|
||||
FS_Path* path = util_make_path_utf8(installData->curr3dsxPath);
|
||||
if(path != NULL) {
|
||||
res = FSUSER_OpenFileDirectly(handle, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""), *path, FS_OPEN_WRITE | FS_OPEN_CREATE, 0);
|
||||
|
@ -17,9 +17,32 @@
|
||||
void task_populate_titledb_update_status(list_item* item) {
|
||||
titledb_info* info = (titledb_info*) item->data;
|
||||
|
||||
AM_TitleEntry entry;
|
||||
info->installed = R_SUCCEEDED(AM_GetTitleInfo(util_get_title_destination(info->titleId), 1, &info->titleId, &entry));
|
||||
info->installedVersion = info->installed ? entry.version : (u16) 0;
|
||||
if(info->type == TITLEDB_TYPE_CIA) {
|
||||
AM_TitleEntry entry;
|
||||
info->installed = R_SUCCEEDED(AM_GetTitleInfo(util_get_title_destination(info->titleId), 1, &info->titleId, &entry));
|
||||
info->installedVersion = info->installed ? entry.version : (u16) 0;
|
||||
} else if(info->type == TITLEDB_TYPE_3DSX) {
|
||||
info->installed = false;
|
||||
info->installedVersion = 0;
|
||||
|
||||
char name[FILE_NAME_MAX];
|
||||
util_escape_file_name(name, info->meta.shortDescription, sizeof(name));
|
||||
|
||||
char path3dsx[FILE_PATH_MAX];
|
||||
snprintf(path3dsx, sizeof(path3dsx), "/3ds/%s/%s.3dsx", name, name);
|
||||
|
||||
FS_Path* fsPath = util_make_path_utf8(path3dsx);
|
||||
if(fsPath != NULL) {
|
||||
Handle handle = 0;
|
||||
if(R_SUCCEEDED(FSUSER_OpenFileDirectly(&handle, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""), *fsPath, FS_OPEN_READ, 0))) {
|
||||
info->installed = true;
|
||||
|
||||
FSFILE_Close(handle);
|
||||
}
|
||||
|
||||
util_free_path_utf8(fsPath);
|
||||
}
|
||||
}
|
||||
|
||||
if(info->installed) {
|
||||
item->color = COLOR_TITLEDB_INSTALLED;
|
||||
@ -127,7 +150,7 @@ static void task_populate_titledb_thread(void* arg) {
|
||||
list_item* currItem = (list_item*) linked_list_iter_next(&iter);
|
||||
titledb_info* currTitledbInfo = (titledb_info*) currItem->data;
|
||||
|
||||
if(titledbInfo->titleId == currTitledbInfo->titleId) {
|
||||
if(titledbInfo->titleId == currTitledbInfo->titleId && (titledbInfo->type == TITLEDB_TYPE_CIA || strncmp(titledbInfo->meta.shortDescription, currTitledbInfo->meta.shortDescription, sizeof(titledbInfo->meta.shortDescription)) == 0)) {
|
||||
if(strncmp(titledbInfo->updatedAt, currTitledbInfo->updatedAt, sizeof(titledbInfo->updatedAt)) >= 0) {
|
||||
linked_list_iter_remove(&iter);
|
||||
task_free_titledb(currItem);
|
||||
|
@ -618,15 +618,23 @@ void ui_draw_titledb_info(ui_view* view, void* data, float x1, float y1, float x
|
||||
|
||||
char infoText[512];
|
||||
|
||||
snprintf(infoText, sizeof(infoText),
|
||||
"Title ID: %016llX\n"
|
||||
"Installed Version: %hu (%d.%d.%d)\n"
|
||||
"Size: %.2f %s\n"
|
||||
"Updated At: %s %s",
|
||||
info->titleId,
|
||||
info->installedVersion, (info->installedVersion >> 10) & 0x3F, (info->installedVersion >> 4) & 0x3F, info->installedVersion & 0xF,
|
||||
util_get_display_size(info->size), util_get_display_size_units(info->size),
|
||||
updatedDate, updatedTime);
|
||||
if(info->type == TITLEDB_TYPE_CIA) {
|
||||
snprintf(infoText, sizeof(infoText),
|
||||
"Title ID: %016llX\n"
|
||||
"Installed Version: %hu (%d.%d.%d)\n"
|
||||
"Size: %.2f %s\n"
|
||||
"Updated At: %s %s",
|
||||
info->titleId,
|
||||
info->installedVersion, (info->installedVersion >> 10) & 0x3F, (info->installedVersion >> 4) & 0x3F, info->installedVersion & 0xF,
|
||||
util_get_display_size(info->size), util_get_display_size_units(info->size),
|
||||
updatedDate, updatedTime);
|
||||
} else {
|
||||
snprintf(infoText, sizeof(infoText),
|
||||
"Size: %.2f %s\n"
|
||||
"Updated At: %s %s",
|
||||
util_get_display_size(info->size), util_get_display_size_units(info->size),
|
||||
updatedDate, updatedTime);
|
||||
}
|
||||
|
||||
float infoWidth;
|
||||
screen_get_string_size(&infoWidth, NULL, infoText, 0.5f, 0.5f);
|
||||
|
Loading…
x
Reference in New Issue
Block a user