diff --git a/source/fbi/action/installtitledb.c b/source/fbi/action/installtitledb.c index f8cff56..1497203 100644 --- a/source/fbi/action/installtitledb.c +++ b/source/fbi/action/installtitledb.c @@ -31,11 +31,11 @@ static void action_install_titledb_finished_url(void* data, u32 index) { titledb_cache_entry entry; if(installData->cia) { entry.id = info->cia.id; - strncpy(entry.updatedAt, info->cia.updatedAt, sizeof(entry.updatedAt)); + strncpy(entry.mtime, info->cia.mtime, sizeof(entry.mtime)); strncpy(entry.version, info->cia.version, sizeof(entry.version)); } else { entry.id = info->tdsx.id; - strncpy(entry.updatedAt, info->tdsx.updatedAt, sizeof(entry.updatedAt)); + strncpy(entry.mtime, info->tdsx.mtime, sizeof(entry.mtime)); strncpy(entry.version, info->tdsx.version, sizeof(entry.version)); } diff --git a/source/fbi/action/updatetitledb.c b/source/fbi/action/updatetitledb.c index 78580ed..05e01d9 100644 --- a/source/fbi/action/updatetitledb.c +++ b/source/fbi/action/updatetitledb.c @@ -36,11 +36,11 @@ static void action_update_titledb_finished_url(void* data, u32 index) { titledb_cache_entry entry; if(updateData->cia[index]) { entry.id = info->cia.id; - strncpy(entry.updatedAt, info->cia.updatedAt, sizeof(entry.updatedAt)); + strncpy(entry.mtime, info->cia.mtime, sizeof(entry.mtime)); strncpy(entry.version, info->cia.version, sizeof(entry.version)); } else { entry.id = info->tdsx.id; - strncpy(entry.updatedAt, info->tdsx.updatedAt, sizeof(entry.updatedAt)); + strncpy(entry.mtime, info->tdsx.mtime, sizeof(entry.mtime)); strncpy(entry.version, info->tdsx.version, sizeof(entry.version)); } diff --git a/source/fbi/task/listtitledb.c b/source/fbi/task/listtitledb.c index 3fb94cb..a9c569c 100644 --- a/source/fbi/task/listtitledb.c +++ b/source/fbi/task/listtitledb.c @@ -111,7 +111,7 @@ static bool task_populate_titledb_cache_get(u32 id, bool cia, titledb_cache_entr json_t* idJson = json_object_get(obj, "id"); if(json_is_integer(idJson)) { entry->id = (u32) json_integer_value(idJson); - strncpy(entry->updatedAt, json_object_get_string(obj, "updated_at", "Unknown"), sizeof(entry->updatedAt)); + strncpy(entry->mtime, json_object_get_string(obj, "mtime", "Unknown"), sizeof(entry->mtime)); strncpy(entry->version, json_object_get_string(obj, "version", "Unknown"), sizeof(entry->version)); return true; @@ -125,7 +125,7 @@ void task_populate_titledb_cache_set(u32 id, bool cia, titledb_cache_entry* entr json_t* obj = task_populate_titledb_cache_get_base(id, cia, true); if(json_is_object(obj)) { json_object_set(obj, "id", json_integer(entry->id)); - json_object_set(obj, "updated_at", json_string(entry->updatedAt)); + json_object_set(obj, "mtime", json_string(entry->mtime)); json_object_set(obj, "version", json_string(entry->version)); task_populate_titledb_cache_save(); @@ -195,9 +195,9 @@ static void task_populate_titledb_thread(void* arg) { json_t* root = NULL; if(R_SUCCEEDED(res = http_download_json("https://api.titledb.com/v1/entry?nested=true" - "&only=id&only=name&only=author&only=headline&only=category&only=updated_at" - "&only=cia.id&only=cia.updated_at&only=cia.version&only=cia.size&only=cia.titleid" - "&only=tdsx.id&only=tdsx.updated_at&only=tdsx.version&only=tdsx.size&only=tdsx.smdh.id", + "&only=id&only=name&only=author&only=headline&only=category" + "&only=cia.id&only=cia.mtime&only=cia.version&only=cia.size&only=cia.titleid" + "&only=tdsx.id&only=tdsx.mtime&only=tdsx.version&only=tdsx.size&only=tdsx.smdh.id", &root, 1024 * 1024))) { if(json_is_array(root)) { for(u32 i = 0; i < json_array_size(root) && R_SUCCEEDED(res); i++) { @@ -214,7 +214,6 @@ static void task_populate_titledb_thread(void* arg) { if(titledbInfo != NULL) { titledbInfo->id = (u32) json_object_get_integer(entry, "id", 0); strncpy(titledbInfo->category, json_object_get_string(entry, "category", "Unknown"), sizeof(titledbInfo->category)); - strncpy(titledbInfo->updatedAt, json_object_get_string(entry, "updated_at", "Unknown"), sizeof(titledbInfo->updatedAt)); strncpy(titledbInfo->meta.shortDescription, json_object_get_string(entry, "name", ""), sizeof(titledbInfo->meta.shortDescription)); strncpy(titledbInfo->meta.publisher, json_object_get_string(entry, "author", ""), sizeof(titledbInfo->meta.publisher)); @@ -236,12 +235,12 @@ static void task_populate_titledb_thread(void* arg) { for(u32 j = 0; j < json_array_size(cias); j++) { json_t* cia = json_array_get(cias, j); if(json_is_object(cia)) { - const char* updatedAt = json_object_get_string(cia, "updated_at", "Unknown"); - if(!titledbInfo->cia.exists || task_populate_titledb_compare_dates(updatedAt, titledbInfo->cia.updatedAt, sizeof(titledbInfo->cia.updatedAt)) >= 0) { + const char* mtime = json_object_get_string(cia, "mtime", "Unknown"); + if(!titledbInfo->cia.exists || task_populate_titledb_compare_dates(mtime, titledbInfo->cia.mtime, sizeof(titledbInfo->cia.mtime)) >= 0) { titledbInfo->cia.exists = true; titledbInfo->cia.id = (u32) json_object_get_integer(cia, "id", 0); - strncpy(titledbInfo->cia.updatedAt, updatedAt, sizeof(titledbInfo->cia.updatedAt)); + strncpy(titledbInfo->cia.mtime, mtime, sizeof(titledbInfo->cia.mtime)); strncpy(titledbInfo->cia.version, json_object_get_string(cia, "version", "Unknown"), sizeof(titledbInfo->cia.version)); titledbInfo->cia.size = (u32) json_object_get_integer(cia, "size", 0); titledbInfo->cia.titleId = strtoull(json_object_get_string(cia, "titleid", "0"), NULL, 16); @@ -255,12 +254,12 @@ static void task_populate_titledb_thread(void* arg) { for(u32 j = 0; j < json_array_size(tdsxs); j++) { json_t* tdsx = json_array_get(tdsxs, j); if(json_is_object(tdsx)) { - const char* updatedAt = json_object_get_string(tdsx, "updated_at", "Unknown"); - if(!titledbInfo->tdsx.exists || task_populate_titledb_compare_dates(updatedAt, titledbInfo->tdsx.updatedAt, sizeof(titledbInfo->tdsx.updatedAt)) >= 0) { + const char* mtime = json_object_get_string(tdsx, "mtime", "Unknown"); + if(!titledbInfo->tdsx.exists || task_populate_titledb_compare_dates(mtime, titledbInfo->tdsx.mtime, sizeof(titledbInfo->tdsx.mtime)) >= 0) { titledbInfo->tdsx.exists = true; titledbInfo->tdsx.id = (u32) json_object_get_integer(tdsx, "id", 0); - strncpy(titledbInfo->tdsx.updatedAt, updatedAt, sizeof(titledbInfo->tdsx.updatedAt)); + strncpy(titledbInfo->tdsx.mtime, mtime, sizeof(titledbInfo->tdsx.mtime)); strncpy(titledbInfo->tdsx.version, json_object_get_string(tdsx, "version", "Unknown"), sizeof(titledbInfo->tdsx.version)); titledbInfo->tdsx.size = (u32) json_object_get_integer(tdsx, "size", 0); @@ -275,6 +274,21 @@ static void task_populate_titledb_thread(void* arg) { } } + char* latestTime = "Unknown"; + if(titledbInfo->cia.exists && titledbInfo->tdsx.exists) { + if(task_populate_titledb_compare_dates(titledbInfo->cia.mtime, titledbInfo->tdsx.mtime, sizeof(titledbInfo->cia.mtime)) >= 0) { + latestTime = titledbInfo->cia.mtime; + } else { + latestTime = titledbInfo->tdsx.mtime; + } + } else if(titledbInfo->cia.exists) { + latestTime = titledbInfo->cia.mtime; + } else if(titledbInfo->tdsx.exists) { + latestTime = titledbInfo->tdsx.mtime; + } + + strncpy(titledbInfo->mtime, latestTime, sizeof(titledbInfo->mtime)); + if((titledbInfo->cia.exists || titledbInfo->tdsx.exists) && (data->filter == NULL || data->filter(data->userData, titledbInfo))) { strncpy(item->name, titledbInfo->meta.shortDescription, LIST_ITEM_NAME_MAX); item->data = titledbInfo; diff --git a/source/fbi/task/listtitledb.h b/source/fbi/task/listtitledb.h index e39d2ba..acd4f75 100644 --- a/source/fbi/task/listtitledb.h +++ b/source/fbi/task/listtitledb.h @@ -5,7 +5,7 @@ typedef struct list_item_s list_item; typedef struct titledb_cache_entry_s { u32 id; - char updatedAt[32]; + char mtime[32]; char version[32]; } titledb_cache_entry; @@ -13,7 +13,7 @@ typedef struct titledb_cia_info_s { bool exists; u32 id; - char updatedAt[32]; + char mtime[32]; char version[32]; u64 size; u64 titleId; @@ -32,7 +32,7 @@ typedef struct titledb_tdsx_info_s { bool exists; u32 id; - char updatedAt[32]; + char mtime[32]; char version[32]; u64 size; titledb_smdh_info smdh; @@ -45,7 +45,7 @@ typedef struct titledb_info_s { u32 id; char category[64]; char headline[512]; - char updatedAt[32]; + char mtime[32]; titledb_cia_info cia; titledb_tdsx_info tdsx; diff --git a/source/fbi/task/uitask.c b/source/fbi/task/uitask.c index a7cc568..798b62b 100644 --- a/source/fbi/task/uitask.c +++ b/source/fbi/task/uitask.c @@ -279,8 +279,8 @@ void task_draw_titledb_info(ui_view* view, void* data, float x1, float y1, float task_draw_meta_info(view, &info->meta, x1, y1, x2, y2); - char updatedAt[32]; - task_format_date(updatedAt, info->updatedAt, sizeof(updatedAt)); + char mtime[32]; + task_format_date(mtime, info->mtime, sizeof(mtime)); char infoText[1024]; @@ -292,7 +292,7 @@ void task_draw_titledb_info(ui_view* view, void* data, float x1, float y1, float "Update Available: %s", info->headline, info->category, - updatedAt, + mtime, (info->cia.installed && info->cia.installedInfo.id != info->cia.id) || (info->tdsx.installed && info->tdsx.installedInfo.id != info->tdsx.id) ? "Yes" : "No"); float infoWidth; @@ -308,11 +308,11 @@ void task_draw_titledb_info_cia(ui_view* view, void* data, float x1, float y1, f task_draw_meta_info(view, &info->meta, x1, y1, x2, y2); - char dbUpdatedAt[32]; - task_format_date(dbUpdatedAt, info->cia.updatedAt, sizeof(dbUpdatedAt)); + char dbMtime[32]; + task_format_date(dbMtime, info->cia.mtime, sizeof(dbMtime)); - char localUpdatedAt[32]; - task_format_date(localUpdatedAt, info->cia.installedInfo.updatedAt, sizeof(localUpdatedAt)); + char localMtime[32]; + task_format_date(localMtime, info->cia.installedInfo.mtime, sizeof(localMtime)); char infoText[512]; @@ -326,8 +326,8 @@ void task_draw_titledb_info_cia(ui_view* view, void* data, float x1, float y1, f "Update Available: %s", info->cia.titleId, ui_get_display_size(info->cia.size), ui_get_display_size_units(info->cia.size), - dbUpdatedAt, - info->cia.installed ? localUpdatedAt : "Not Installed", + dbMtime, + info->cia.installed ? localMtime : "Not Installed", info->cia.version, info->cia.installed ? info->cia.installedInfo.version : "Not Installed", info->cia.installed && info->cia.installedInfo.id != info->cia.id ? "Yes" : "No"); @@ -345,11 +345,11 @@ void task_draw_titledb_info_tdsx(ui_view* view, void* data, float x1, float y1, task_draw_meta_info(view, &info->meta, x1, y1, x2, y2); - char dbUpdatedAt[32]; - task_format_date(dbUpdatedAt, info->tdsx.updatedAt, sizeof(dbUpdatedAt)); + char dbMtime[32]; + task_format_date(dbMtime, info->tdsx.mtime, sizeof(dbMtime)); - char localUpdatedAt[32]; - task_format_date(localUpdatedAt, info->tdsx.installedInfo.updatedAt, sizeof(localUpdatedAt)); + char localMtime[32]; + task_format_date(localMtime, info->tdsx.installedInfo.mtime, sizeof(localMtime)); char infoText[512]; @@ -361,8 +361,8 @@ void task_draw_titledb_info_tdsx(ui_view* view, void* data, float x1, float y1, "Local Version: %s\n" "Update Available: %s", ui_get_display_size(info->tdsx.size), ui_get_display_size_units(info->tdsx.size), - dbUpdatedAt, - info->tdsx.installed ? localUpdatedAt : "Not Installed", + dbMtime, + info->tdsx.installed ? localMtime : "Not Installed", info->tdsx.version, info->tdsx.installed ? info->tdsx.installedInfo.version : "Not Installed", info->tdsx.installed && info->tdsx.installedInfo.id != info->tdsx.id ? "Yes" : "No"); diff --git a/source/fbi/titledb.c b/source/fbi/titledb.c index 44e6815..3352e75 100644 --- a/source/fbi/titledb.c +++ b/source/fbi/titledb.c @@ -196,7 +196,7 @@ static int titledb_compare(void* data, const void* p1, const void* p2) { if(listData->sortByName) { return strncasecmp(info1->name, info2->name, sizeof(info1->name)); } else if(listData->sortByUpdate) { - return strncasecmp(data2->updatedAt, data1->updatedAt, sizeof(data2->updatedAt)); + return strncasecmp(data2->mtime, data1->mtime, sizeof(data2->mtime)); } else { return 0; } diff --git a/source/fbi/update.c b/source/fbi/update.c index b044ff3..7dc2fc5 100644 --- a/source/fbi/update.c +++ b/source/fbi/update.c @@ -77,7 +77,7 @@ static void update_check_update(ui_view* view, void* data, float* progress, char || (major == latestMajor && minor > latestMinor) || (major == latestMajor && minor == latestMinor && micro > latestMicro)) { updateData->data.id = subId; - strncpy(updateData->data.updatedAt, updatedAt, sizeof(updateData->data.updatedAt)); + strncpy(updateData->data.mtime, updatedAt, sizeof(updateData->data.mtime)); strncpy(updateData->data.version, version, sizeof(updateData->data.version)); latestMajor = major;