diff --git a/applications/system/updater/util/update_task_worker_backup.c b/applications/system/updater/util/update_task_worker_backup.c index 72ffa22aa..2e8648eb3 100644 --- a/applications/system/updater/util/update_task_worker_backup.c +++ b/applications/system/updater/util/update_task_worker_backup.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include @@ -56,7 +58,7 @@ static void update_task_resource_progress_cb(size_t progress, size_t total, void (progress * UpdateTaskResourcesWeightsFileUnpack) / total); } -static void update_task_cleanup_resources(UpdateTask* update_task, const uint32_t n_tar_entries) { +static void update_task_cleanup_resources(UpdateTask* update_task) { ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(update_task->storage); do { FURI_LOG_D(TAG, "Cleaning up old manifest"); @@ -65,8 +67,7 @@ static void update_task_cleanup_resources(UpdateTask* update_task, const uint32_ break; } - const uint32_t n_approx_file_entries = - n_tar_entries * UPDATE_TASK_RESOURCES_FILE_TO_TOTAL_PERCENT / 100 + 1; + size_t manifest_size = stream_size(manifest_reader->stream); uint32_t n_dir_entries = 1; ResourceManifestEntry* entry_ptr = NULL; @@ -77,8 +78,9 @@ static void update_task_cleanup_resources(UpdateTask* update_task, const uint32_ update_task, UpdateTaskStageProgress, /* For this stage, first pass = old manifest's file cleanup */ - (n_processed_entries++ * UpdateTaskResourcesWeightsFileCleanup) / - n_approx_file_entries); + (stream_tell(manifest_reader->stream) * + UpdateTaskResourcesWeightsFileCleanup) / + manifest_size); FuriString* file_path = furi_string_alloc(); path_concat( @@ -178,7 +180,7 @@ static bool update_task_post_update(UpdateTask* update_task) { CHECK_RESULT( tar_archive_open(archive, furi_string_get_cstr(file_path), TAR_OPEN_MODE_READ)); - update_task_cleanup_resources(update_task, 1800); // FIXME: file count estimate + update_task_cleanup_resources(update_task); CHECK_RESULT(tar_archive_unpack_to(archive, STORAGE_EXT_PATH_PREFIX, NULL)); } diff --git a/lib/update_util/resources/manifest.c b/lib/update_util/resources/manifest.c index 5a818a0a4..bf6311ae8 100644 --- a/lib/update_util/resources/manifest.c +++ b/lib/update_util/resources/manifest.c @@ -3,12 +3,7 @@ #include #include -struct ResourceManifestReader { - Storage* storage; - Stream* stream; - FuriString* linebuf; - ResourceManifestEntry entry; -}; +#include "manifest_i.h" ResourceManifestReader* resource_manifest_reader_alloc(Storage* storage) { ResourceManifestReader* resource_manifest = diff --git a/lib/update_util/resources/manifest_i.h b/lib/update_util/resources/manifest_i.h new file mode 100644 index 000000000..39114d023 --- /dev/null +++ b/lib/update_util/resources/manifest_i.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +struct ResourceManifestReader { + Storage* storage; + Stream* stream; + FuriString* linebuf; + ResourceManifestEntry entry; +};