nfc_playlist_scene_nfc_add.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "../nfc_playlist.h"
  2. void nfc_playlist_nfc_add_menu_callback(void* context) {
  3. NfcPlaylist* nfc_playlist = context;
  4. Storage* storage = furi_record_open(RECORD_STORAGE);
  5. Stream* stream = file_stream_alloc(storage);
  6. bool item_already_in_playlist = false;
  7. if(file_stream_open(
  8. stream,
  9. furi_string_get_cstr(nfc_playlist->settings.playlist_path),
  10. FSAM_READ_WRITE,
  11. FSOM_OPEN_EXISTING)) {
  12. FuriString* line = furi_string_alloc();
  13. FuriString* tmp_str = furi_string_alloc();
  14. while(stream_read_line(stream, line)) {
  15. if(furi_string_cmp(line, nfc_playlist->file_browser_output) == 0) {
  16. item_already_in_playlist = true;
  17. break;
  18. }
  19. furi_string_cat_printf(tmp_str, "%s", furi_string_get_cstr(line));
  20. }
  21. furi_string_free(line);
  22. if(!item_already_in_playlist) {
  23. if(!furi_string_empty(tmp_str)) {
  24. furi_string_cat(tmp_str, "\n");
  25. }
  26. furi_string_cat(tmp_str, furi_string_get_cstr(nfc_playlist->file_browser_output));
  27. stream_clean(stream);
  28. stream_write_string(stream, tmp_str);
  29. nfc_playlist->settings.playlist_length++;
  30. furi_string_reset(nfc_playlist->file_browser_output);
  31. }
  32. file_stream_close(stream);
  33. furi_string_free(tmp_str);
  34. }
  35. stream_free(stream);
  36. furi_record_close(RECORD_STORAGE);
  37. if(!item_already_in_playlist) {
  38. scene_manager_previous_scene(nfc_playlist->scene_manager);
  39. } else {
  40. scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_NfcDuplicate);
  41. }
  42. }
  43. void nfc_playlist_nfc_add_scene_on_enter(void* context) {
  44. NfcPlaylist* nfc_playlist = context;
  45. file_browser_configure(
  46. nfc_playlist->file_browser, ".nfc", NFC_ITEM_LOCATION, true, true, &I_Nfc_10px, true);
  47. file_browser_set_callback(
  48. nfc_playlist->file_browser, nfc_playlist_nfc_add_menu_callback, nfc_playlist);
  49. FuriString* tmp_str = furi_string_alloc_set_str(NFC_ITEM_LOCATION);
  50. file_browser_start(nfc_playlist->file_browser, tmp_str);
  51. furi_string_free(tmp_str);
  52. view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_FileBrowser);
  53. }
  54. bool nfc_playlist_nfc_add_scene_on_event(void* context, SceneManagerEvent event) {
  55. UNUSED(event);
  56. UNUSED(context);
  57. return false;
  58. }
  59. void nfc_playlist_nfc_add_scene_on_exit(void* context) {
  60. NfcPlaylist* nfc_playlist = context;
  61. file_browser_stop(nfc_playlist->file_browser);
  62. }