From d91f70b8378be56e0a3e91a0aa4e6b84068bd34b Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Wed, 10 May 2023 23:36:03 +0100 Subject: [PATCH] Move config file migration to flipper init --- .../main/archive/helpers/archive_favorites.c | 7 --- applications/main/u2f/u2f_app.c | 5 --- applications/services/bt/bt_service/bt.c | 4 -- applications/services/bt/bt_settings.c | 19 +------- applications/services/bt/bt_settings.h | 3 ++ .../services/desktop/desktop_settings.c | 17 +------ .../services/dolphin/helpers/dolphin_state.c | 15 ------- .../services/dolphin/helpers/dolphin_state.h | 3 ++ .../services/notification/notification_app.c | 17 +------ applications/services/power/power_settings.c | 13 +----- furi/flipper.c | 44 +++++++++++++++++++ 11 files changed, 54 insertions(+), 93 deletions(-) diff --git a/applications/main/archive/helpers/archive_favorites.c b/applications/main/archive/helpers/archive_favorites.c index 9d4b963f5..9f3039041 100644 --- a/applications/main/archive/helpers/archive_favorites.c +++ b/applications/main/archive/helpers/archive_favorites.c @@ -140,13 +140,6 @@ bool archive_favorites_read(void* context) { bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING); - if(!result) { - storage_file_close(file); - storage_common_copy(storage, ARCHIVE_FAV_OLD_PATH, ARCHIVE_FAV_PATH); - storage_common_remove(storage, ARCHIVE_FAV_OLD_PATH); - result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING); - } - if(result) { while(1) { if(!archive_favorites_read_line(file, buffer)) { diff --git a/applications/main/u2f/u2f_app.c b/applications/main/u2f/u2f_app.c index fb9b4241c..db94a398c 100644 --- a/applications/main/u2f/u2f_app.c +++ b/applications/main/u2f/u2f_app.c @@ -28,11 +28,6 @@ U2fApp* u2f_app_alloc() { app->gui = furi_record_open(RECORD_GUI); app->notifications = furi_record_open(RECORD_NOTIFICATION); - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_rename(storage, U2F_CNT_OLD_FILE, U2F_CNT_FILE); - storage_common_copy(storage, U2F_KEY_OLD_FILE, U2F_KEY_FILE); - furi_record_close(RECORD_STORAGE); - app->view_dispatcher = view_dispatcher_alloc(); app->scene_manager = scene_manager_alloc(&u2f_scene_handlers, app); view_dispatcher_enable_queue(app->view_dispatcher); diff --git a/applications/services/bt/bt_service/bt.c b/applications/services/bt/bt_service/bt.c index b4a6b25a4..1781d03d7 100644 --- a/applications/services/bt/bt_service/bt.c +++ b/applications/services/bt/bt_service/bt.c @@ -126,10 +126,6 @@ Bt* bt_alloc() { bt_settings_save(&bt->bt_settings); } // Keys storage - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, BT_KEYS_STORAGE_OLD_PATH, BT_KEYS_STORAGE_PATH); - storage_common_remove(storage, BT_KEYS_STORAGE_OLD_PATH); - furi_record_close(RECORD_STORAGE); bt->keys_storage = bt_keys_storage_alloc(BT_KEYS_STORAGE_PATH); // Alloc queue bt->message_queue = furi_message_queue_alloc(8, sizeof(BtMessage)); diff --git a/applications/services/bt/bt_settings.c b/applications/services/bt/bt_settings.c index 92e6c7d5d..6a6c5f562 100644 --- a/applications/services/bt/bt_settings.c +++ b/applications/services/bt/bt_settings.c @@ -4,31 +4,14 @@ #include #include -#define BT_SETTINGS_OLD_PATH INT_PATH(".bt.settings") -#define BT_SETTINGS_PATH CFG_PATH("bt.settings") #define BT_SETTINGS_VERSION (0) #define BT_SETTINGS_MAGIC (0x19) bool bt_settings_load(BtSettings* bt_settings) { furi_assert(bt_settings); - bool ret = saved_struct_load( + return saved_struct_load( BT_SETTINGS_PATH, bt_settings, sizeof(BtSettings), BT_SETTINGS_MAGIC, BT_SETTINGS_VERSION); - - if(!ret) { - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, BT_SETTINGS_OLD_PATH, BT_SETTINGS_PATH); - storage_common_remove(storage, BT_SETTINGS_OLD_PATH); - furi_record_close(RECORD_STORAGE); - ret = saved_struct_load( - BT_SETTINGS_PATH, - bt_settings, - sizeof(BtSettings), - BT_SETTINGS_MAGIC, - BT_SETTINGS_VERSION); - } - - return ret; } bool bt_settings_save(BtSettings* bt_settings) { diff --git a/applications/services/bt/bt_settings.h b/applications/services/bt/bt_settings.h index 620a3f5a6..cd6be60c4 100644 --- a/applications/services/bt/bt_settings.h +++ b/applications/services/bt/bt_settings.h @@ -7,6 +7,9 @@ extern "C" { #endif +#define BT_SETTINGS_OLD_PATH INT_PATH(".bt.settings") +#define BT_SETTINGS_PATH CFG_PATH("bt.settings") + typedef struct { bool enabled; } BtSettings; diff --git a/applications/services/desktop/desktop_settings.c b/applications/services/desktop/desktop_settings.c index 9c95e950f..d1df4a9a6 100644 --- a/applications/services/desktop/desktop_settings.c +++ b/applications/services/desktop/desktop_settings.c @@ -10,25 +10,10 @@ bool DESKTOP_SETTINGS_SAVE(DesktopSettings* x) { } bool DESKTOP_SETTINGS_LOAD(DesktopSettings* x) { - bool ret = saved_struct_load( + return saved_struct_load( DESKTOP_SETTINGS_PATH, x, sizeof(DesktopSettings), DESKTOP_SETTINGS_MAGIC, DESKTOP_SETTINGS_VER); - - if(!ret) { - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, DESKTOP_SETTINGS_OLD_PATH, DESKTOP_SETTINGS_PATH); - storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); - furi_record_close(RECORD_STORAGE); - ret = saved_struct_load( - DESKTOP_SETTINGS_PATH, - x, - sizeof(DesktopSettings), - DESKTOP_SETTINGS_MAGIC, - DESKTOP_SETTINGS_VER); - } - - return ret; } diff --git a/applications/services/dolphin/helpers/dolphin_state.c b/applications/services/dolphin/helpers/dolphin_state.c index fba3c5a90..1a418ead2 100644 --- a/applications/services/dolphin/helpers/dolphin_state.c +++ b/applications/services/dolphin/helpers/dolphin_state.c @@ -10,8 +10,6 @@ #define TAG "DolphinState" -#define DOLPHIN_STATE_OLD_PATH INT_PATH(".dolphin.state") -#define DOLPHIN_STATE_PATH CFG_PATH("dolphin.state") #define DOLPHIN_STATE_HEADER_MAGIC 0xD0 #define DOLPHIN_STATE_HEADER_VERSION 0x01 @@ -61,19 +59,6 @@ bool dolphin_state_load(DolphinState* dolphin_state) { DOLPHIN_STATE_HEADER_MAGIC, DOLPHIN_STATE_HEADER_VERSION); - if(!success) { - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, DOLPHIN_STATE_OLD_PATH, DOLPHIN_STATE_PATH); - storage_common_remove(storage, DOLPHIN_STATE_OLD_PATH); - furi_record_close(RECORD_STORAGE); - success = saved_struct_load( - DOLPHIN_STATE_PATH, - &dolphin_state->data, - sizeof(DolphinStoreData), - DOLPHIN_STATE_HEADER_MAGIC, - DOLPHIN_STATE_HEADER_VERSION); - } - if(success) { if((dolphin_state->data.butthurt > BUTTHURT_MAX) || (dolphin_state->data.butthurt < BUTTHURT_MIN)) { diff --git a/applications/services/dolphin/helpers/dolphin_state.h b/applications/services/dolphin/helpers/dolphin_state.h index 65cea35ac..e869775f7 100644 --- a/applications/services/dolphin/helpers/dolphin_state.h +++ b/applications/services/dolphin/helpers/dolphin_state.h @@ -9,6 +9,9 @@ extern "C" { #endif +#define DOLPHIN_STATE_OLD_PATH INT_PATH(".dolphin.state") +#define DOLPHIN_STATE_PATH CFG_PATH("dolphin.state") + #define DOLPHIN_LEVEL_COUNT 29 typedef struct DolphinState DolphinState; diff --git a/applications/services/notification/notification_app.c b/applications/services/notification/notification_app.c index 61be402bd..409c51957 100644 --- a/applications/services/notification/notification_app.c +++ b/applications/services/notification/notification_app.c @@ -421,27 +421,12 @@ static bool notification_save_settings(NotificationApp* app) { } static bool notification_load_settings(NotificationApp* app) { - bool ret = saved_struct_load( + return saved_struct_load( NOTIFICATION_SETTINGS_PATH, &app->settings, sizeof(NotificationSettings), NOTIFICATION_SETTINGS_MAGIC, NOTIFICATION_SETTINGS_VERSION); - - if(!ret) { - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, NOTIFICATION_SETTINGS_OLD_PATH, NOTIFICATION_SETTINGS_PATH); - storage_common_remove(storage, NOTIFICATION_SETTINGS_OLD_PATH); - furi_record_close(RECORD_STORAGE); - ret = saved_struct_load( - NOTIFICATION_SETTINGS_PATH, - &app->settings, - sizeof(NotificationSettings), - NOTIFICATION_SETTINGS_MAGIC, - NOTIFICATION_SETTINGS_VERSION); - } - - return ret; } static void input_event_callback(const void* value, void* context) { diff --git a/applications/services/power/power_settings.c b/applications/services/power/power_settings.c index cd456a5a8..b98c382c0 100644 --- a/applications/services/power/power_settings.c +++ b/applications/services/power/power_settings.c @@ -6,17 +6,6 @@ bool SAVE_POWER_SETTINGS(uint32_t* x) { } bool LOAD_POWER_SETTINGS(uint32_t* x) { - bool ret = saved_struct_load( + return saved_struct_load( POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); - - if(!ret) { - Storage* storage = furi_record_open(RECORD_STORAGE); - storage_common_copy(storage, POWER_SETTINGS_OLD_PATH, POWER_SETTINGS_PATH); - storage_common_remove(storage, POWER_SETTINGS_OLD_PATH); - furi_record_close(RECORD_STORAGE); - ret = saved_struct_load( - POWER_SETTINGS_PATH, x, sizeof(uint32_t), POWER_SETTINGS_MAGIC, POWER_SETTINGS_VER); - } - - return ret; } diff --git a/furi/flipper.c b/furi/flipper.c index d2b4f9047..a788dfc74 100644 --- a/furi/flipper.c +++ b/furi/flipper.c @@ -4,6 +4,15 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #define TAG "Flipper" @@ -28,6 +37,39 @@ static void flipper_print_version(const char* target, const Version* version) { } } +void flipper_migrate_files() { + if(!furi_hal_is_normal_boot()) return; + Storage* storage = furi_record_open(RECORD_STORAGE); + + // Revert cringe + storage_common_remove(storage, INT_PATH(".passport.settings")); + + // Migrate files + storage_common_copy(storage, ARCHIVE_FAV_OLD_PATH, ARCHIVE_FAV_PATH); + storage_common_remove(storage, ARCHIVE_FAV_OLD_PATH); + storage_common_copy(storage, BT_SETTINGS_OLD_PATH, BT_SETTINGS_PATH); + storage_common_remove(storage, BT_SETTINGS_OLD_PATH); + storage_common_copy(storage, DOLPHIN_STATE_OLD_PATH, DOLPHIN_STATE_PATH); + storage_common_remove(storage, DOLPHIN_STATE_OLD_PATH); + storage_common_copy(storage, POWER_SETTINGS_OLD_PATH, POWER_SETTINGS_PATH); + storage_common_remove(storage, POWER_SETTINGS_OLD_PATH); + storage_common_copy(storage, BT_KEYS_STORAGE_OLD_PATH, BT_KEYS_STORAGE_PATH); + storage_common_remove(storage, BT_KEYS_STORAGE_OLD_PATH); + storage_common_copy(storage, DESKTOP_SETTINGS_OLD_PATH, DESKTOP_SETTINGS_PATH); + storage_common_remove(storage, DESKTOP_SETTINGS_OLD_PATH); + storage_common_copy(storage, NOTIFICATION_SETTINGS_OLD_PATH, NOTIFICATION_SETTINGS_PATH); + storage_common_remove(storage, NOTIFICATION_SETTINGS_OLD_PATH); + + // Special care for U2F + if(storage_common_exists(storage, U2F_CNT_OLD_FILE)) { // Is on Int + storage_common_remove(storage, U2F_CNT_FILE); // Remove outdated on Ext + storage_common_rename(storage, U2F_CNT_OLD_FILE, U2F_CNT_FILE); // Int -> Ext + } + storage_common_copy(storage, U2F_KEY_OLD_FILE, U2F_KEY_FILE); // Ext -> Int + + furi_record_close(RECORD_STORAGE); +} + void flipper_start_service(const FlipperApplication* service) { FURI_LOG_D(TAG, "Starting service %s", service->name); @@ -47,6 +89,8 @@ void flipper_init() { // Start storage service first, thanks OFW :/ flipper_start_service(&FLIPPER_SERVICES[0]); + flipper_migrate_files(); + NAMESPOOF_INIT(); XTREME_SETTINGS_LOAD(); XTREME_ASSETS_LOAD();