diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c index ccf8e2a34..1aa8ddb6d 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c @@ -36,6 +36,14 @@ static void xtreme_app_scene_protocols_subghz_extend_changed(VariableItem* item) app->save_subghz = true; } +static void xtreme_app_scene_protocols_file_naming_prefix_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "After" : "Before"); + xtreme_settings.file_naming_prefix_after = value; + app->save_settings = true; +} + void xtreme_app_scene_protocols_on_enter(void* context) { XtremeApp* app = context; VariableItemList* var_item_list = app->var_item_list; @@ -66,6 +74,16 @@ void xtreme_app_scene_protocols_on_enter(void* context) { item = variable_item_list_add(var_item_list, "GPIO Pins", 0, NULL, app); variable_item_set_current_value_text(item, ">"); + item = variable_item_list_add( + var_item_list, + "File Naming Prefix", + 2, + xtreme_app_scene_protocols_file_naming_prefix_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings.file_naming_prefix_after); + variable_item_set_current_value_text( + item, xtreme_settings.file_naming_prefix_after ? "After" : "Before"); + variable_item_list_set_enter_callback( var_item_list, xtreme_app_scene_protocols_var_item_list_callback, app); diff --git a/lib/toolbox/name_generator.c b/lib/toolbox/name_generator.c index c8080adde..94ec12ca5 100644 --- a/lib/toolbox/name_generator.c +++ b/lib/toolbox/name_generator.c @@ -6,6 +6,7 @@ #include #include #include +#include const char* const name_generator_left[] = { "super", @@ -59,14 +60,25 @@ void name_generator_make_random_prefixed(char* name, size_t max_name_size, const uint8_t name_generator_left_i = rand() % COUNT_OF(name_generator_left); uint8_t name_generator_right_i = rand() % COUNT_OF(name_generator_right); - snprintf( - name, - max_name_size, - "%s%s%s-%s", - prefix ? prefix : "", - prefix ? "_" : "", - name_generator_left[name_generator_left_i], - name_generator_right[name_generator_right_i]); + if(xtreme_settings.file_naming_prefix_after) { + snprintf( + name, + max_name_size, + "%s-%s%s%s", + name_generator_left[name_generator_left_i], + name_generator_right[name_generator_right_i], + prefix ? "_" : "", + prefix ? prefix : ""); + } else { + snprintf( + name, + max_name_size, + "%s%s%s-%s", + prefix ? prefix : "", + prefix ? "_" : "", + name_generator_left[name_generator_left_i], + name_generator_right[name_generator_right_i]); + } // Set first symbol to upper case if(islower((int)name[0])) name[0] = name[0] - 0x20; @@ -84,16 +96,29 @@ void name_generator_make_detailed(char* name, size_t max_name_size, const char* FuriHalRtcDateTime dateTime; furi_hal_rtc_get_datetime(&dateTime); - snprintf( - name, - max_name_size, - "%s_%.4d-%.2d-%.2d_%.2d,%.2d", - prefix, - dateTime.year, - dateTime.month, - dateTime.day, - dateTime.hour, - dateTime.minute); + if(xtreme_settings.file_naming_prefix_after) { + snprintf( + name, + max_name_size, + "%.4d-%.2d-%.2d_%.2d,%.2d_%s", + dateTime.year, + dateTime.month, + dateTime.day, + dateTime.hour, + dateTime.minute, + prefix); + } else { + snprintf( + name, + max_name_size, + "%s_%.4d-%.2d-%.2d_%.2d,%.2d", + prefix, + dateTime.year, + dateTime.month, + dateTime.day, + dateTime.hour, + dateTime.minute); + } // Set first symbol to upper case if(islower((int)name[0])) name[0] = name[0] - 0x20; diff --git a/lib/xtreme/settings.c b/lib/xtreme/settings.c index 38446c2b5..83167c726 100644 --- a/lib/xtreme/settings.c +++ b/lib/xtreme/settings.c @@ -42,6 +42,7 @@ XtremeSettings xtreme_settings = { .uart_esp_channel = FuriHalSerialIdUsart, // pin 13,14 .uart_nmea_channel = FuriHalSerialIdUsart, // pin 13,14 .uart_general_channel = FuriHalSerialIdUsart, // pin 13,14 + .file_naming_prefix_after = false, // Before }; void XTREME_SETTINGS_LOAD() { @@ -233,6 +234,11 @@ void XTREME_SETTINGS_LOAD() { } else { flipper_format_rewind(file); } + if(flipper_format_read_bool(file, "file_naming_prefix_after", &b, 1)) { + x->file_naming_prefix_after = b; + } else { + flipper_format_rewind(file); + } furi_string_free(s); } flipper_format_free(file); @@ -291,6 +297,8 @@ void XTREME_SETTINGS_SAVE() { flipper_format_write_uint32(file, "uart_nmea_channel", &e, 1); e = x->uart_general_channel; flipper_format_write_uint32(file, "uart_general_channel", &e, 1); + flipper_format_write_bool( + file, "file_naming_prefix_after", &x->file_naming_prefix_after, 1); } flipper_format_free(file); furi_record_close(RECORD_STORAGE); diff --git a/lib/xtreme/xtreme.h b/lib/xtreme/xtreme.h index e62164f73..54b21bae0 100644 --- a/lib/xtreme/xtreme.h +++ b/lib/xtreme/xtreme.h @@ -82,6 +82,7 @@ typedef struct { FuriHalSerialId uart_esp_channel; FuriHalSerialId uart_nmea_channel; FuriHalSerialId uart_general_channel; + bool file_naming_prefix_after; } XtremeSettings; typedef enum {