meal_pager_storage.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "meal_pager_storage.h"
  2. static Storage* meal_pager_open_storage() {
  3. return furi_record_open(RECORD_STORAGE);
  4. }
  5. static void meal_pager_close_storage() {
  6. furi_record_close(RECORD_STORAGE);
  7. }
  8. static void meal_pager_close_config_file(FlipperFormat* file) {
  9. if (file == NULL) return;
  10. flipper_format_file_close(file);
  11. flipper_format_free(file);
  12. }
  13. void meal_pager_save_settings(void* context) {
  14. Meal_Pager* app = context;
  15. if (app->save_settings == 0) {
  16. FURI_LOG_D(TAG, "Skipping Save because Disabled");
  17. return;
  18. }
  19. FURI_LOG_D(TAG, "Saving Settings to File");
  20. Storage* storage = meal_pager_open_storage();
  21. FlipperFormat* fff_file = flipper_format_file_alloc(storage);
  22. // Overwrite wont work, so delete first
  23. if(storage_file_exists(storage, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
  24. storage_simply_remove(storage, MEAL_PAGER_SETTINGS_SAVE_PATH);
  25. }
  26. // Open File, create if not exists
  27. if(!storage_common_stat(storage, MEAL_PAGER_SETTINGS_SAVE_PATH, NULL) == FSE_OK) {
  28. FURI_LOG_D(TAG, "Config file %s is not found. Will create new.", MEAL_PAGER_SETTINGS_SAVE_PATH);
  29. if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
  30. FURI_LOG_D(
  31. TAG,
  32. "Directory %s doesn't exist. Will create new.",
  33. CONFIG_FILE_DIRECTORY_PATH);
  34. if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
  35. FURI_LOG_E(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
  36. }
  37. }
  38. }
  39. if(!flipper_format_file_open_new(fff_file, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
  40. //totp_close_config_file(fff_file);
  41. FURI_LOG_E(TAG, "Error creating new file %s", MEAL_PAGER_SETTINGS_SAVE_PATH);
  42. meal_pager_close_storage();
  43. return;
  44. }
  45. // Store Settings
  46. flipper_format_write_header_cstr(
  47. fff_file, MEAL_PAGER_SETTINGS_HEADER, MEAL_PAGER_SETTINGS_FILE_VERSION);
  48. flipper_format_write_uint32(
  49. fff_file, MEAL_PAGER_SETTINGS_KEY_PAGER_TYPE, &app->pager_type, 1);
  50. flipper_format_write_uint32(
  51. fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_STATION, &app->first_station, 1);
  52. flipper_format_write_uint32(
  53. fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_STATION, &app->last_station, 1);
  54. flipper_format_write_uint32(
  55. fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_PAGER, &app->first_pager, 1);
  56. flipper_format_write_uint32(
  57. fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_PAGER, &app->last_pager, 1);
  58. flipper_format_write_uint32(
  59. fff_file, MEAL_PAGER_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
  60. flipper_format_write_uint32(
  61. fff_file, MEAL_PAGER_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
  62. flipper_format_write_uint32(
  63. fff_file, MEAL_PAGER_SETTINGS_KEY_LED, &app->led, 1);
  64. flipper_format_write_uint32(
  65. fff_file, MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS, &app->save_settings, 1);
  66. if(!flipper_format_rewind(fff_file)) {
  67. meal_pager_close_config_file(fff_file);
  68. FURI_LOG_E(TAG, "Rewind error");
  69. meal_pager_close_storage();
  70. return;
  71. }
  72. meal_pager_close_config_file(fff_file);
  73. meal_pager_close_storage();
  74. }
  75. void meal_pager_read_settings(void* context) {
  76. Meal_Pager* app = context;
  77. Storage* storage = meal_pager_open_storage();
  78. FlipperFormat* fff_file = flipper_format_file_alloc(storage);
  79. if(storage_common_stat(storage, MEAL_PAGER_SETTINGS_SAVE_PATH, NULL) != FSE_OK) {
  80. meal_pager_close_config_file(fff_file);
  81. meal_pager_close_storage();
  82. return;
  83. }
  84. uint32_t file_version;
  85. FuriString* temp_str = furi_string_alloc();
  86. if (!flipper_format_file_open_existing(fff_file, MEAL_PAGER_SETTINGS_SAVE_PATH)) {
  87. FURI_LOG_E(TAG, "Cannot open file %s", MEAL_PAGER_SETTINGS_SAVE_PATH);
  88. meal_pager_close_config_file(fff_file);
  89. meal_pager_close_storage();
  90. return;
  91. }
  92. if(!flipper_format_read_header(fff_file, temp_str, &file_version)) {
  93. FURI_LOG_E(TAG, "Missing Header Data");
  94. meal_pager_close_config_file(fff_file);
  95. meal_pager_close_storage();
  96. return;
  97. }
  98. if(file_version < MEAL_PAGER_SETTINGS_FILE_VERSION) {
  99. FURI_LOG_I(TAG, "old config version, will be removed.");
  100. meal_pager_close_config_file(fff_file);
  101. meal_pager_close_storage();
  102. return;
  103. }
  104. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_PAGER_TYPE, &app->pager_type, 1);
  105. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_STATION, &app->first_station, 1);
  106. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_STATION, &app->last_station, 1);
  107. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_FIRST_PAGER, &app->first_pager, 1);
  108. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LAST_PAGER, &app->last_pager, 1);
  109. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
  110. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
  111. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_LED, &app->led, 1);
  112. flipper_format_read_uint32(fff_file, MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS, &app->save_settings, 1);
  113. flipper_format_rewind(fff_file);
  114. meal_pager_close_config_file(fff_file);
  115. meal_pager_close_storage();
  116. }