Przeglądaj źródła

Adds file exists error

acegoal07 1 rok temu
rodzic
commit
c1b460d26b

+ 1 - 1
application.fam

@@ -8,7 +8,7 @@ App(
     fap_category="NFC",
     fap_author="@acegoal07",
     fap_weburl="https://github.com/acegoal07/FlipperZero_NFC_Playlist/tree/main",
-    fap_version="2.5",
+    fap_version="2.6",
     fap_icon_assets="assets",
     fap_icon="assets/Playlist_10px.png",
     fap_private_libs=[

+ 1 - 0
scenes/nfc_playlist_scene_config.h

@@ -1,5 +1,6 @@
 ADD_SCENE(nfc_playlist, confirm_delete, ConfirmDelete)
 ADD_SCENE(nfc_playlist, emulation, Emulation)
+ADD_SCENE(nfc_playlist, error_playlist_already_exists, ErrorPlaylistAlreadyExists)
 ADD_SCENE(nfc_playlist, main_menu, MainMenu)
 ADD_SCENE(nfc_playlist, name_new_playlist, NameNewPlaylist)
 ADD_SCENE(nfc_playlist, nfc_add, NfcAdd)

+ 42 - 0
scenes/nfc_playlist_scene_error_playlist_already_exists.c

@@ -0,0 +1,42 @@
+#include "../nfc_playlist.h"
+
+void nfc_playlist_error_playlist_already_exists_menu_callback(GuiButtonType result, InputType type, void* context) {
+   NfcPlaylist* nfc_playlist = context;
+   if(type == InputTypeShort) {
+      view_dispatcher_send_custom_event(nfc_playlist->view_dispatcher, result);
+   }
+}
+
+void nfc_playlist_error_playlist_already_exists_scene_on_enter(void* context) {
+   NfcPlaylist* nfc_playlist = context;
+
+   widget_add_text_box_element(nfc_playlist->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, "\e#A playlist with that name already exists\e#", false);
+   widget_add_button_element(nfc_playlist->widget, GuiButtonTypeLeft, "Try Again", nfc_playlist_error_playlist_already_exists_menu_callback, nfc_playlist);
+   widget_add_button_element(nfc_playlist->widget, GuiButtonTypeRight, "Main Menu", nfc_playlist_error_playlist_already_exists_menu_callback, nfc_playlist);
+
+   view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Widget);
+}
+
+bool nfc_playlist_error_playlist_already_exists_scene_on_event(void* context, SceneManagerEvent event) {
+   NfcPlaylist* nfc_playlist = context;
+   bool consumed = false;
+   if(event.type == SceneManagerEventTypeCustom) {
+      switch(event.event) {
+         case GuiButtonTypeRight:
+            scene_manager_search_and_switch_to_another_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
+            break;
+         case GuiButtonTypeLeft:
+            scene_manager_previous_scene(nfc_playlist->scene_manager);
+            consumed = true;
+            break;
+         default:
+            break;
+      }
+   }
+   return consumed;
+}
+
+void nfc_playlist_error_playlist_already_exists_scene_on_exit(void* context) {
+   NfcPlaylist* nfc_playlist = context;
+   widget_reset(nfc_playlist->widget);
+}

+ 12 - 1
scenes/nfc_playlist_scene_name_new_playlist.c

@@ -1,5 +1,7 @@
 #include "../nfc_playlist.h"
 
+bool playlist_exist_already_new = false;
+
 int32_t nfc_playlist_name_new_playlist_thread_task(void* context) {
    NfcPlaylist* nfc_playlist = context;
 
@@ -15,6 +17,8 @@ int32_t nfc_playlist_name_new_playlist_thread_task(void* context) {
          furi_string_swap(nfc_playlist->settings.playlist_path, file_name);
          nfc_playlist->settings.playlist_length = 0;
       }
+   } else {
+      playlist_exist_already_new = true;
    }
 
    furi_string_free(file_name);
@@ -29,12 +33,19 @@ void nfc_playlist_name_new_playlist_thread_state_callback(FuriThreadState state,
    if(state == FuriThreadStateStopped) {
       furi_thread_yield();
       nfc_playlist->thread = NULL;
-      scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
+      if (playlist_exist_already_new) {
+         scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_ErrorPlaylistAlreadyExists);
+      } else {
+         scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
+      }
    }
 }
 
 void nfc_playlist_name_new_playlist_menu_callback(void* context) {
    NfcPlaylist* nfc_playlist = context;
+
+   playlist_exist_already_new = false;
+
    nfc_playlist->thread = furi_thread_alloc_ex("NfcPlaylistCreator", 1024, nfc_playlist_name_new_playlist_thread_task, nfc_playlist);
    furi_thread_set_state_context(nfc_playlist->thread, nfc_playlist);
    furi_thread_set_state_callback(nfc_playlist->thread, nfc_playlist_name_new_playlist_thread_state_callback);

+ 11 - 1
scenes/nfc_playlist_scene_playlist_rename.c

@@ -1,5 +1,7 @@
 #include "../nfc_playlist.h"
 
+bool playlist_exist_already_rename = false;
+
 int32_t nfc_playlist_playlist_rename_thread_task(void* context) {
    NfcPlaylist* nfc_playlist = context;
 
@@ -16,6 +18,8 @@ int32_t nfc_playlist_playlist_rename_thread_task(void* context) {
       if (storage_common_rename(storage, furi_string_get_cstr(nfc_playlist->settings.playlist_path), furi_string_get_cstr(new_file_path)) == FSE_OK) {
          furi_string_swap(nfc_playlist->settings.playlist_path, new_file_path);
       }
+   } else {
+      playlist_exist_already_rename = true;
    }
 
    furi_string_free(new_file_path);
@@ -29,7 +33,11 @@ void nfc_playlist_playlist_rename_thread_state_callback(FuriThreadState state, v
    if(state == FuriThreadStateStopped) {
       furi_thread_yield();
       nfc_playlist->thread = NULL;
-      scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
+      if (playlist_exist_already_rename) {
+         scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_ErrorPlaylistAlreadyExists);
+      } else {
+         scene_manager_search_and_switch_to_previous_scene(nfc_playlist->scene_manager, NfcPlaylistScene_MainMenu);
+      }
    }
 }
 
@@ -44,6 +52,8 @@ void nfc_playlist_playlist_rename_menu_callback(void* context) {
 void nfc_playlist_playlist_rename_scene_on_enter(void* context) {
    NfcPlaylist* nfc_playlist = context;
 
+   playlist_exist_already_rename = false;
+
    FuriString* tmp_file_name = furi_string_alloc();
    path_extract_filename_no_ext(furi_string_get_cstr(nfc_playlist->settings.playlist_path), tmp_file_name);