Просмотр исходного кода

Merge pull request #28 from acegoal07/dev

Changes
acegoal07 1 год назад
Родитель
Сommit
5d211f4fab

+ 1 - 1
application.fam

@@ -8,7 +8,7 @@ App(
     fap_category="NFC",
     fap_category="NFC",
     fap_author="@acegoal07",
     fap_author="@acegoal07",
     fap_weburl="https://github.com/acegoal07/FlipperZero_NFC_Playlist/tree/main",
     fap_weburl="https://github.com/acegoal07/FlipperZero_NFC_Playlist/tree/main",
-    fap_version="2.0",
+    fap_version="2.1",
     fap_icon="assets/icon.png",
     fap_icon="assets/icon.png",
     fap_private_libs=[
     fap_private_libs=[
         Lib(
         Lib(

+ 2 - 2
nfc_playlist.c

@@ -22,7 +22,7 @@ static NfcPlaylist* nfc_playlist_alloc() {
    nfc_playlist->submenu = submenu_alloc();
    nfc_playlist->submenu = submenu_alloc();
    nfc_playlist->widget= widget_alloc();
    nfc_playlist->widget= widget_alloc();
 
 
-   nfc_playlist->settings.file_path = furi_string_alloc();
+   nfc_playlist->settings.playlist_path = furi_string_alloc();
    nfc_playlist->file_browser_output = furi_string_alloc();
    nfc_playlist->file_browser_output = furi_string_alloc();
    nfc_playlist->settings.playlist_selected = false;
    nfc_playlist->settings.playlist_selected = false;
    nfc_playlist->settings.emulate_timeout = default_emulate_timeout;
    nfc_playlist->settings.emulate_timeout = default_emulate_timeout;
@@ -77,7 +77,7 @@ static void nfc_playlist_free(NfcPlaylist* nfc_playlist) {
    text_input_free(nfc_playlist->text_input);
    text_input_free(nfc_playlist->text_input);
    popup_free(nfc_playlist->popup);
    popup_free(nfc_playlist->popup);
 
 
-   furi_string_free(nfc_playlist->settings.file_path);
+   furi_string_free(nfc_playlist->settings.playlist_path);
    furi_string_free(nfc_playlist->file_browser_output);
    furi_string_free(nfc_playlist->file_browser_output);
    free(nfc_playlist);
    free(nfc_playlist);
 }
 }

+ 1 - 1
nfc_playlist.h

@@ -38,7 +38,7 @@ typedef enum {
 } NfcPlaylistViews;
 } NfcPlaylistViews;
 
 
 typedef struct {
 typedef struct {
-   FuriString* file_path;
+   FuriString* playlist_path;
    uint8_t playlist_length;
    uint8_t playlist_length;
    bool playlist_selected;
    bool playlist_selected;
    uint8_t emulate_timeout;
    uint8_t emulate_timeout;

+ 3 - 3
scenes/nfc_playlist_scene_config.h

@@ -1,9 +1,9 @@
 ADD_SCENE(nfc_playlist, confirm_delete, ConfirmDelete)
 ADD_SCENE(nfc_playlist, confirm_delete, ConfirmDelete)
 ADD_SCENE(nfc_playlist, emulation, Emulation)
 ADD_SCENE(nfc_playlist, emulation, Emulation)
-ADD_SCENE(nfc_playlist, file_edit, FileEdit)
-ADD_SCENE(nfc_playlist, file_rename, FileRename)
+ADD_SCENE(nfc_playlist, playlist_edit, PlaylistEdit)
+ADD_SCENE(nfc_playlist, playlist_rename, PlaylistRename)
 ADD_SCENE(nfc_playlist, main_menu, MainMenu)
 ADD_SCENE(nfc_playlist, main_menu, MainMenu)
-ADD_SCENE(nfc_playlist, name_new_file, NameNewFile)
+ADD_SCENE(nfc_playlist, name_new_playlist, NameNewPlaylist)
 ADD_SCENE(nfc_playlist, nfc_select, NfcSelect)
 ADD_SCENE(nfc_playlist, nfc_select, NfcSelect)
 ADD_SCENE(nfc_playlist, nfc_remove, NfcRemove)
 ADD_SCENE(nfc_playlist, nfc_remove, NfcRemove)
 ADD_SCENE(nfc_playlist, playlist_select, PlaylistSelect)
 ADD_SCENE(nfc_playlist, playlist_select, PlaylistSelect)

+ 5 - 4
scenes/nfc_playlist_scene_confirm_delete.c

@@ -11,7 +11,7 @@ void nfc_playlist_confirm_delete_scene_on_enter(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
 
 
    FuriString* temp_str = furi_string_alloc();
    FuriString* temp_str = furi_string_alloc();
-   char* file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.file_path);
+   char* file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.playlist_path);
    furi_string_printf(temp_str, "\e#Delete %s?\e#", strchr(file_path, '/') != NULL ? &strrchr(file_path, '/')[1] : file_path);
    furi_string_printf(temp_str, "\e#Delete %s?\e#", strchr(file_path, '/') != NULL ? &strrchr(file_path, '/')[1] : file_path);
    furi_string_replace(temp_str, ".txt", "");
    furi_string_replace(temp_str, ".txt", "");
 
 
@@ -31,16 +31,17 @@ bool nfc_playlist_confirm_delete_scene_on_event(void* context, SceneManagerEvent
       switch(event.event) {
       switch(event.event) {
          case GuiButtonTypeRight:
          case GuiButtonTypeRight:
             Storage* storage = furi_record_open(RECORD_STORAGE);
             Storage* storage = furi_record_open(RECORD_STORAGE);
-            storage_simply_remove(storage, furi_string_get_cstr(nfc_playlist->settings.file_path));
+            storage_simply_remove(storage, furi_string_get_cstr(nfc_playlist->settings.playlist_path));
             nfc_playlist->settings.playlist_selected = false;
             nfc_playlist->settings.playlist_selected = false;
-            furi_string_reset(nfc_playlist->settings.file_path);
+            furi_string_reset(nfc_playlist->settings.playlist_path);
             furi_record_close(RECORD_STORAGE);
             furi_record_close(RECORD_STORAGE);
             consumed = true;
             consumed = true;
+            scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
             break;
             break;
          default:
          default:
+            scene_manager_previous_scene(nfc_playlist->scene_manager);
             break;
             break;
       }
       }
-      scene_manager_previous_scene(nfc_playlist->scene_manager);
    }
    }
    return consumed;
    return consumed;
 }
 }

+ 1 - 1
scenes/nfc_playlist_scene_emulation.c

@@ -20,7 +20,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
 
 
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Popup);
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Popup);
 
 
-   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.file_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.playlist_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
       EmulationState = NfcPlaylistEmulationState_Emulating;
       EmulationState = NfcPlaylistEmulationState_Emulating;
       int file_position = 0;
       int file_position = 0;
 
 

+ 2 - 2
scenes/nfc_playlist_scene_main_menu.c

@@ -38,7 +38,7 @@ void nfc_playlist_main_menu_scene_on_enter(void* context) {
       NfcPlaylistMenuSelection_Start,
       NfcPlaylistMenuSelection_Start,
       nfc_playlist_main_menu_menu_callback,
       nfc_playlist_main_menu_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    submenu_add_item(
    submenu_add_item(
@@ -79,7 +79,7 @@ bool nfc_playlist_main_menu_scene_on_event(void* context, SceneManagerEvent even
             consumed = true;
             consumed = true;
             break;
             break;
          case NfcPlaylistEvent_ShowFileEdit:
          case NfcPlaylistEvent_ShowFileEdit:
-            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_FileEdit);
+            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistEdit);
             consumed = true;
             consumed = true;
             break;
             break;
          case NfcPlaylistEvent_ShowSettings:
          case NfcPlaylistEvent_ShowSettings:

+ 8 - 8
scenes/nfc_playlist_scene_name_new_file.c → scenes/nfc_playlist_scene_name_new_playlist.c

@@ -1,6 +1,6 @@
 #include "../nfc_playlist.h"
 #include "../nfc_playlist.h"
 
 
-void nfc_playlist_name_new_file_menu_callback(void* context) {
+void nfc_playlist_name_new_playlist_menu_callback(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Storage* storage = furi_record_open(RECORD_STORAGE);
    FuriString* file_name = furi_string_alloc();
    FuriString* file_name = furi_string_alloc();
@@ -10,7 +10,7 @@ void nfc_playlist_name_new_file_menu_callback(void* context) {
    File* file = storage_file_alloc(storage);
    File* file = storage_file_alloc(storage);
    if (storage_file_open(file, furi_string_get_cstr(file_name), FSAM_READ_WRITE, FSOM_CREATE_NEW)) {
    if (storage_file_open(file, furi_string_get_cstr(file_name), FSAM_READ_WRITE, FSOM_CREATE_NEW)) {
       storage_file_close(file);
       storage_file_close(file);
-      furi_string_swap(nfc_playlist->settings.file_path, file_name);
+      furi_string_swap(nfc_playlist->settings.playlist_path, file_name);
    }
    }
 
 
    nfc_playlist->settings.playlist_length = 0;
    nfc_playlist->settings.playlist_length = 0;
@@ -21,24 +21,24 @@ void nfc_playlist_name_new_file_menu_callback(void* context) {
    scene_manager_previous_scene(nfc_playlist->scene_manager);
    scene_manager_previous_scene(nfc_playlist->scene_manager);
 }
 }
 
 
-void nfc_playlist_name_new_file_scene_on_enter(void* context) {
+void nfc_playlist_name_new_playlist_scene_on_enter(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
-   nfc_playlist->text_input_output = (char*)malloc(50*sizeof(char));
+   nfc_playlist->text_input_output = (char*)malloc(50);
    text_input_set_header_text(nfc_playlist->text_input, "Enter file name");
    text_input_set_header_text(nfc_playlist->text_input, "Enter file name");
    text_input_set_minimum_length(nfc_playlist->text_input, 1);
    text_input_set_minimum_length(nfc_playlist->text_input, 1);
-   text_input_set_result_callback(nfc_playlist->text_input, nfc_playlist_name_new_file_menu_callback, nfc_playlist, nfc_playlist->text_input_output, 50*sizeof(char), true);
+   text_input_set_result_callback(nfc_playlist->text_input, nfc_playlist_name_new_playlist_menu_callback, nfc_playlist, nfc_playlist->text_input_output, 50, true);
 
 
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_TextInput);
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_TextInput);
 }
 }
 
 
-bool nfc_playlist_name_new_file_scene_on_event(void* context, SceneManagerEvent event) {
+bool nfc_playlist_name_new_playlist_scene_on_event(void* context, SceneManagerEvent event) {
    UNUSED(context);
    UNUSED(context);
    UNUSED(event);
    UNUSED(event);
    return false;
    return false;
 }
 }
 
 
-void nfc_playlist_name_new_file_scene_on_exit(void* context) {
+void nfc_playlist_name_new_playlist_scene_on_exit(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
-   text_input_reset(nfc_playlist->text_input);
    free(nfc_playlist->text_input_output);
    free(nfc_playlist->text_input_output);
+   text_input_reset(nfc_playlist->text_input);
 }
 }

+ 1 - 1
scenes/nfc_playlist_scene_nfc_remove.c

@@ -67,7 +67,7 @@ bool nfc_playlist_nfc_remove_scene_on_event(void* context, SceneManagerEvent eve
             Storage* storage = furi_record_open(RECORD_STORAGE);
             Storage* storage = furi_record_open(RECORD_STORAGE);
             Stream* stream = file_stream_alloc(storage);
             Stream* stream = file_stream_alloc(storage);
 
 
-            if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.file_path), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
+            if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.playlist_path), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
                FuriString* line = furi_string_alloc();
                FuriString* line = furi_string_alloc();
                FuriString* tmp_str = furi_string_alloc();
                FuriString* tmp_str = furi_string_alloc();
                uint8_t current_line = 0;
                uint8_t current_line = 0;

+ 1 - 1
scenes/nfc_playlist_scene_nfc_select.c

@@ -6,7 +6,7 @@ void nfc_playlist_nfc_select_menu_callback(void* context) {
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Stream* stream = file_stream_alloc(storage);
    Stream* stream = file_stream_alloc(storage);
 
 
-   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.file_path), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
+   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.playlist_path), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
       FuriString* line = furi_string_alloc();
       FuriString* line = furi_string_alloc();
       FuriString* tmp_str = furi_string_alloc();
       FuriString* tmp_str = furi_string_alloc();
       while(stream_read_line(stream, line)) {
       while(stream_read_line(stream, line)) {

+ 17 - 17
scenes/nfc_playlist_scene_file_edit.c → scenes/nfc_playlist_scene_playlist_edit.c

@@ -9,12 +9,12 @@ typedef enum {
    NfcPlaylistMenuSelection_ViewPlaylistContent
    NfcPlaylistMenuSelection_ViewPlaylistContent
 } NfcPlaylistFileEditMenuSelection;
 } NfcPlaylistFileEditMenuSelection;
 
 
-void nfc_playlist_file_edit_menu_callback(void* context, uint32_t index) {
+void nfc_playlist_playlist_edit_menu_callback(void* context, uint32_t index) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
    scene_manager_handle_custom_event(nfc_playlist->scene_manager, index);
    scene_manager_handle_custom_event(nfc_playlist->scene_manager, index);
 }
 }
 
 
-void nfc_playlist_file_edit_scene_on_enter(void* context) {
+void nfc_playlist_playlist_edit_scene_on_enter(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
 
 
    submenu_set_header(nfc_playlist->submenu, "Edit Playlist");
    submenu_set_header(nfc_playlist->submenu, "Edit Playlist");
@@ -23,64 +23,64 @@ void nfc_playlist_file_edit_scene_on_enter(void* context) {
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "Create Playlist",
       "Create Playlist",
       NfcPlaylistMenuSelection_CreatePlaylist,
       NfcPlaylistMenuSelection_CreatePlaylist,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist);
       nfc_playlist);
 
 
    submenu_add_lockable_item(
    submenu_add_lockable_item(
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "Delete Playlist",
       "Delete Playlist",
       NfcPlaylistMenuSelection_DeletePlaylist,
       NfcPlaylistMenuSelection_DeletePlaylist,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    submenu_add_lockable_item(
    submenu_add_lockable_item(
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "Rename Playlist",
       "Rename Playlist",
       NfcPlaylistMenuSelection_RenamePlaylist,
       NfcPlaylistMenuSelection_RenamePlaylist,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    submenu_add_lockable_item(
    submenu_add_lockable_item(
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "Add NFC Item",
       "Add NFC Item",
       NfcPlaylistMenuSelection_AddNfcItem,
       NfcPlaylistMenuSelection_AddNfcItem,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    submenu_add_lockable_item(
    submenu_add_lockable_item(
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "Remove NFC Item",
       "Remove NFC Item",
       NfcPlaylistMenuSelection_RemoveNfcItem,
       NfcPlaylistMenuSelection_RemoveNfcItem,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    submenu_add_lockable_item(
    submenu_add_lockable_item(
       nfc_playlist->submenu,
       nfc_playlist->submenu,
       "View Playlist Content",
       "View Playlist Content",
       NfcPlaylistMenuSelection_ViewPlaylistContent,
       NfcPlaylistMenuSelection_ViewPlaylistContent,
-      nfc_playlist_file_edit_menu_callback,
+      nfc_playlist_playlist_edit_menu_callback,
       nfc_playlist,
       nfc_playlist,
-      furi_string_empty(nfc_playlist->settings.file_path),
+      furi_string_empty(nfc_playlist->settings.playlist_path),
       "No\nplaylist\nselected");
       "No\nplaylist\nselected");
 
 
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Submenu);
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Submenu);
 }
 }
 
 
-bool nfc_playlist_file_edit_scene_on_event(void* context, SceneManagerEvent event) {
+bool nfc_playlist_playlist_edit_scene_on_event(void* context, SceneManagerEvent event) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
    bool consumed = false;
    bool consumed = false;
    if(event.type == SceneManagerEventTypeCustom) {
    if(event.type == SceneManagerEventTypeCustom) {
       switch(event.event) {
       switch(event.event) {
          case NfcPlaylistMenuSelection_CreatePlaylist:
          case NfcPlaylistMenuSelection_CreatePlaylist:
-            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_NameNewFile);
+            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_NameNewPlaylist);
             consumed = true;
             consumed = true;
             break;
             break;
          case NfcPlaylistMenuSelection_DeletePlaylist:
          case NfcPlaylistMenuSelection_DeletePlaylist:
@@ -88,7 +88,7 @@ bool nfc_playlist_file_edit_scene_on_event(void* context, SceneManagerEvent even
             consumed = true;
             consumed = true;
             break;
             break;
          case NfcPlaylistMenuSelection_RenamePlaylist:
          case NfcPlaylistMenuSelection_RenamePlaylist:
-            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_FileRename);
+            scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistRename);
             consumed = true;
             consumed = true;
             break;
             break;
          case NfcPlaylistMenuSelection_AddNfcItem:
          case NfcPlaylistMenuSelection_AddNfcItem:
@@ -110,7 +110,7 @@ bool nfc_playlist_file_edit_scene_on_event(void* context, SceneManagerEvent even
    return consumed;
    return consumed;
 }
 }
 
 
-void nfc_playlist_file_edit_scene_on_exit(void* context) {
+void nfc_playlist_playlist_edit_scene_on_exit(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
    submenu_reset(nfc_playlist->submenu);
    submenu_reset(nfc_playlist->submenu);
 }
 }

+ 17 - 15
scenes/nfc_playlist_scene_file_rename.c → scenes/nfc_playlist_scene_playlist_rename.c

@@ -1,30 +1,31 @@
 #include "../nfc_playlist.h"
 #include "../nfc_playlist.h"
 
 
-void nfc_playlist_file_rename_menu_callback(void* context) {
+void nfc_playlist_playlist_rename_menu_callback(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Storage* storage = furi_record_open(RECORD_STORAGE);
 
 
-   char const* old_file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.file_path);
+   char const* old_file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.playlist_path);
    char const* old_file_name = strchr(old_file_path, '/') != NULL ? &strrchr(old_file_path, '/')[1] : old_file_path;
    char const* old_file_name = strchr(old_file_path, '/') != NULL ? &strrchr(old_file_path, '/')[1] : old_file_path;
 
 
-   FuriString* new_file_path = furi_string_alloc_set_str(old_file_path);
+   FuriString* new_file_path = furi_string_alloc_set(nfc_playlist->settings.playlist_path);
    furi_string_replace(new_file_path, old_file_name, nfc_playlist->text_input_output);
    furi_string_replace(new_file_path, old_file_name, nfc_playlist->text_input_output);
    furi_string_cat_str(new_file_path, ".txt");
    furi_string_cat_str(new_file_path, ".txt");
-
-   if(!storage_file_exists(storage, furi_string_get_cstr(new_file_path))) {
-      storage_common_rename(storage, furi_string_get_cstr(nfc_playlist->settings.file_path), furi_string_get_cstr(new_file_path));
-      nfc_playlist->settings.file_path = furi_string_alloc_set_str(furi_string_get_cstr(new_file_path));
+   
+   if (storage_common_rename_safe(storage, old_file_path, furi_string_get_cstr(new_file_path)) == 0) {
+      furi_string_move(nfc_playlist->settings.playlist_path, new_file_path);
+   } else {
+      furi_string_free(new_file_path);
    }
    }
+
    furi_record_close(RECORD_STORAGE);
    furi_record_close(RECORD_STORAGE);
-   furi_string_free(new_file_path);
 
 
-   scene_manager_previous_scene(nfc_playlist->scene_manager);
+   scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
 }
 }
 
 
-void nfc_playlist_file_rename_scene_on_enter(void* context) {
+void nfc_playlist_playlist_rename_scene_on_enter(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
 
 
-   char const* tmp_file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.file_path);
+   char const* tmp_file_path = furi_string_get_cstr(nfc_playlist->settings.playlist_path);
    char const* tmp_file_name = strchr(tmp_file_path, '/') != NULL ? &strrchr(tmp_file_path, '/')[1] : tmp_file_path;
    char const* tmp_file_name = strchr(tmp_file_path, '/') != NULL ? &strrchr(tmp_file_path, '/')[1] : tmp_file_path;
 
 
    FuriString* tmp_file_name_furi = furi_string_alloc_set_str(tmp_file_name);
    FuriString* tmp_file_name_furi = furi_string_alloc_set_str(tmp_file_name);
@@ -32,21 +33,22 @@ void nfc_playlist_file_rename_scene_on_enter(void* context) {
 
 
    nfc_playlist->text_input_output = strdup(furi_string_get_cstr(tmp_file_name_furi));
    nfc_playlist->text_input_output = strdup(furi_string_get_cstr(tmp_file_name_furi));
    furi_string_free(tmp_file_name_furi);
    furi_string_free(tmp_file_name_furi);
+
    text_input_set_header_text(nfc_playlist->text_input, "Enter new file name");
    text_input_set_header_text(nfc_playlist->text_input, "Enter new file name");
    text_input_set_minimum_length(nfc_playlist->text_input, 1);
    text_input_set_minimum_length(nfc_playlist->text_input, 1);
-   text_input_set_result_callback(nfc_playlist->text_input, nfc_playlist_file_rename_menu_callback, nfc_playlist, nfc_playlist->text_input_output, 25, false);
+   text_input_set_result_callback(nfc_playlist->text_input, nfc_playlist_playlist_rename_menu_callback, nfc_playlist, nfc_playlist->text_input_output, (50 + sizeof(nfc_playlist->text_input_output)), false);
 
 
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_TextInput);
    view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_TextInput);
 }
 }
 
 
-bool nfc_playlist_file_rename_scene_on_event(void* context, SceneManagerEvent event) {
+bool nfc_playlist_playlist_rename_scene_on_event(void* context, SceneManagerEvent event) {
    UNUSED(context);
    UNUSED(context);
    UNUSED(event);
    UNUSED(event);
    return false;
    return false;
 }
 }
 
 
-void nfc_playlist_file_rename_scene_on_exit(void* context) {
+void nfc_playlist_playlist_rename_scene_on_exit(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
-   text_input_reset(nfc_playlist->text_input);
    free(nfc_playlist->text_input_output);
    free(nfc_playlist->text_input_output);
+   text_input_reset(nfc_playlist->text_input);
 }
 }

+ 3 - 2
scenes/nfc_playlist_scene_playlist_select.c

@@ -2,13 +2,13 @@
 
 
 void nfc_playlist_playlist_select_menu_callback(void* context) {
 void nfc_playlist_playlist_select_menu_callback(void* context) {
    NfcPlaylist* nfc_playlist = context;
    NfcPlaylist* nfc_playlist = context;
-   furi_string_swap(nfc_playlist->settings.file_path, nfc_playlist->file_browser_output);
+   furi_string_swap(nfc_playlist->settings.playlist_path, nfc_playlist->file_browser_output);
    furi_string_reset(nfc_playlist->file_browser_output);
    furi_string_reset(nfc_playlist->file_browser_output);
 
 
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Stream* stream = file_stream_alloc(storage);
    Stream* stream = file_stream_alloc(storage);
 
 
-   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.file_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.playlist_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
       nfc_playlist->settings.playlist_length = 0;
       nfc_playlist->settings.playlist_length = 0;
       FuriString* line = furi_string_alloc();
       FuriString* line = furi_string_alloc();
       while(stream_read_line(stream, line)) {
       while(stream_read_line(stream, line)) {
@@ -17,6 +17,7 @@ void nfc_playlist_playlist_select_menu_callback(void* context) {
       furi_string_free(line);
       furi_string_free(line);
       file_stream_close(stream);
       file_stream_close(stream);
    }
    }
+   
    stream_free(stream);
    stream_free(stream);
    furi_record_close(RECORD_STORAGE);
    furi_record_close(RECORD_STORAGE);
 
 

+ 1 - 1
scenes/nfc_playlist_scene_view_playlist_content.c

@@ -6,7 +6,7 @@ void nfc_playlist_view_playlist_content_scene_on_enter(void* context) {
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Storage* storage = furi_record_open(RECORD_STORAGE);
    Stream* stream = file_stream_alloc(storage);
    Stream* stream = file_stream_alloc(storage);
 
 
-   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.file_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
+   if (file_stream_open(stream, furi_string_get_cstr(nfc_playlist->settings.playlist_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
       FuriString* line = furi_string_alloc();
       FuriString* line = furi_string_alloc();
       FuriString* tmp_str = furi_string_alloc();
       FuriString* tmp_str = furi_string_alloc();