spi_mem_files.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "spi_mem_app_i.h"
  2. void spi_mem_file_create_folder(SPIMemApp* app) {
  3. if(!storage_simply_mkdir(app->storage, SPI_MEM_FILE_FOLDER)) {
  4. dialog_message_show_storage_error(app->dialogs, "Cannot create\napp folder");
  5. }
  6. }
  7. bool spi_mem_file_delete(SPIMemApp* app) {
  8. return (storage_simply_remove(app->storage, furi_string_get_cstr(app->file_path)));
  9. }
  10. bool spi_mem_file_select(SPIMemApp* app) {
  11. DialogsFileBrowserOptions browser_options;
  12. dialog_file_browser_set_basic_options(&browser_options, SPI_MEM_FILE_EXTENSION, &I_Dip8_10px);
  13. browser_options.base_path = SPI_MEM_FILE_FOLDER;
  14. bool success =
  15. dialog_file_browser_show(app->dialogs, app->file_path, app->file_path, &browser_options);
  16. return success;
  17. }
  18. bool spi_mem_file_create_open(SPIMemApp* app) {
  19. bool success = false;
  20. app->file = storage_file_alloc(app->storage);
  21. do {
  22. if(furi_string_end_with(app->file_path, SPI_MEM_FILE_EXTENSION)) {
  23. if(!spi_mem_file_delete(app)) break;
  24. size_t filename_start = furi_string_search_rchar(app->file_path, '/');
  25. furi_string_left(app->file_path, filename_start);
  26. }
  27. furi_string_cat_printf(app->file_path, "/%s%s", app->text_buffer, SPI_MEM_FILE_EXTENSION);
  28. if(!storage_file_open(
  29. app->file, furi_string_get_cstr(app->file_path), FSAM_WRITE, FSOM_CREATE_NEW))
  30. break;
  31. success = true;
  32. } while(0);
  33. if(!success) { //-V547
  34. dialog_message_show_storage_error(app->dialogs, "Cannot save\nfile");
  35. }
  36. return success;
  37. }
  38. bool spi_mem_file_open(SPIMemApp* app) {
  39. app->file = storage_file_alloc(app->storage);
  40. if(!storage_file_open(
  41. app->file, furi_string_get_cstr(app->file_path), FSAM_READ_WRITE, FSOM_OPEN_EXISTING)) {
  42. dialog_message_show_storage_error(app->dialogs, "Cannot save\nfile");
  43. return false;
  44. }
  45. return true;
  46. }
  47. bool spi_mem_file_write_block(SPIMemApp* app, uint8_t* data, size_t size) {
  48. if(storage_file_write(app->file, data, size) != size) return false;
  49. return true;
  50. }
  51. bool spi_mem_file_read_block(SPIMemApp* app, uint8_t* data, size_t size) {
  52. if(storage_file_read(app->file, data, size) != size) return false;
  53. return true;
  54. }
  55. void spi_mem_file_close(SPIMemApp* app) {
  56. storage_file_close(app->file);
  57. storage_file_free(app->file);
  58. }
  59. size_t spi_mem_file_get_size(SPIMemApp* app) {
  60. FileInfo file_info;
  61. if(storage_common_stat(app->storage, furi_string_get_cstr(app->file_path), &file_info) !=
  62. FSE_OK)
  63. return 0;
  64. return file_info.size;
  65. }