nfc_playlist_scene_nfc_duplicate.c 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "../nfc_playlist.h"
  2. void nfc_playlist_nfc_duplicate_menu_callback(GuiButtonType result, InputType type, void* context) {
  3. NfcPlaylist* nfc_playlist = context;
  4. if(type == InputTypeShort) {
  5. view_dispatcher_send_custom_event(nfc_playlist->view_dispatcher, result);
  6. }
  7. }
  8. void nfc_playlist_nfc_duplicate_scene_on_enter(void* context) {
  9. NfcPlaylist* nfc_playlist = context;
  10. widget_add_text_box_element(
  11. nfc_playlist->widget,
  12. 0,
  13. 0,
  14. 128,
  15. 23,
  16. AlignCenter,
  17. AlignCenter,
  18. "\e#This item is already\nin the playlist\e#",
  19. false);
  20. widget_add_button_element(
  21. nfc_playlist->widget,
  22. GuiButtonTypeLeft,
  23. "Try Again",
  24. nfc_playlist_nfc_duplicate_menu_callback,
  25. nfc_playlist);
  26. widget_add_button_element(
  27. nfc_playlist->widget,
  28. GuiButtonTypeRight,
  29. "Continue",
  30. nfc_playlist_nfc_duplicate_menu_callback,
  31. nfc_playlist);
  32. view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_Widget);
  33. }
  34. bool nfc_playlist_nfc_duplicate_scene_on_event(void* context, SceneManagerEvent event) {
  35. NfcPlaylist* nfc_playlist = context;
  36. bool consumed = false;
  37. if(event.type == SceneManagerEventTypeCustom) {
  38. switch(event.event) {
  39. case GuiButtonTypeRight: {
  40. Storage* storage = furi_record_open(RECORD_STORAGE);
  41. Stream* stream = file_stream_alloc(storage);
  42. if(file_stream_open(
  43. stream,
  44. furi_string_get_cstr(nfc_playlist->settings.playlist_path),
  45. FSAM_READ_WRITE,
  46. FSOM_OPEN_EXISTING)) {
  47. FuriString* line = furi_string_alloc();
  48. FuriString* tmp_str = furi_string_alloc();
  49. while(stream_read_line(stream, line)) {
  50. furi_string_cat_printf(tmp_str, "%s", furi_string_get_cstr(line));
  51. }
  52. furi_string_free(line);
  53. if(!furi_string_empty(tmp_str)) {
  54. furi_string_cat(tmp_str, "\n");
  55. }
  56. furi_string_cat(tmp_str, furi_string_get_cstr(nfc_playlist->file_browser_output));
  57. stream_clean(stream);
  58. stream_write_string(stream, tmp_str);
  59. nfc_playlist->settings.playlist_length++;
  60. furi_string_reset(nfc_playlist->file_browser_output);
  61. file_stream_close(stream);
  62. furi_string_free(tmp_str);
  63. }
  64. stream_free(stream);
  65. furi_record_close(RECORD_STORAGE);
  66. furi_string_reset(nfc_playlist->file_browser_output);
  67. scene_manager_search_and_switch_to_previous_scene(
  68. nfc_playlist->scene_manager, NfcPlaylistScene_PlaylistEdit);
  69. consumed = true;
  70. break;
  71. }
  72. case GuiButtonTypeLeft:
  73. furi_string_reset(nfc_playlist->file_browser_output);
  74. scene_manager_previous_scene(nfc_playlist->scene_manager);
  75. consumed = true;
  76. break;
  77. default:
  78. break;
  79. }
  80. }
  81. return consumed;
  82. }
  83. void nfc_playlist_nfc_duplicate_scene_on_exit(void* context) {
  84. NfcPlaylist* nfc_playlist = context;
  85. widget_reset(nfc_playlist->widget);
  86. }