util.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include <storage/storage.h>
  2. #include "util.h"
  3. const char* CONFIG_FILE_PATH = APP_DATA_PATH("blackjack.settings");
  4. void save_settings(Settings settings) {
  5. Storage* storage = furi_record_open(RECORD_STORAGE);
  6. FlipperFormat* file = flipper_format_file_alloc(storage);
  7. FURI_LOG_D(APP_NAME, "Saving config");
  8. if(flipper_format_file_open_existing(file, CONFIG_FILE_PATH)) {
  9. FURI_LOG_D(
  10. APP_NAME, "Saving %s: %ld", CONF_ANIMATION_DURATION, settings.animation_duration);
  11. flipper_format_update_uint32(
  12. file, CONF_ANIMATION_DURATION, &(settings.animation_duration), 1);
  13. FURI_LOG_D(APP_NAME, "Saving %s: %ld", CONF_MESSAGE_DURATION, settings.message_duration);
  14. flipper_format_update_uint32(file, CONF_MESSAGE_DURATION, &(settings.message_duration), 1);
  15. FURI_LOG_D(APP_NAME, "Saving %s: %ld", CONF_STARTING_MONEY, settings.starting_money);
  16. flipper_format_update_uint32(file, CONF_STARTING_MONEY, &(settings.starting_money), 1);
  17. FURI_LOG_D(APP_NAME, "Saving %s: %ld", CONF_ROUND_PRICE, settings.round_price);
  18. flipper_format_update_uint32(file, CONF_ROUND_PRICE, &(settings.round_price), 1);
  19. FURI_LOG_D(APP_NAME, "Saving %s: %i", CONF_SOUND_EFFECTS, settings.sound_effects ? 1 : 0);
  20. flipper_format_update_bool(file, CONF_SOUND_EFFECTS, &(settings.sound_effects), 1);
  21. FURI_LOG_D(APP_NAME, "Config saved");
  22. } else {
  23. FURI_LOG_E(APP_NAME, "Save error");
  24. }
  25. flipper_format_file_close(file);
  26. flipper_format_free(file);
  27. furi_record_close(RECORD_STORAGE);
  28. }
  29. void save_settings_file(FlipperFormat* file, Settings* settings) {
  30. flipper_format_write_header_cstr(file, CONFIG_FILE_HEADER, CONFIG_FILE_VERSION);
  31. flipper_format_write_comment_cstr(file, "Card animation duration in ms");
  32. flipper_format_write_uint32(file, CONF_ANIMATION_DURATION, &(settings->animation_duration), 1);
  33. flipper_format_write_comment_cstr(file, "Popup message duration in ms");
  34. flipper_format_write_uint32(file, CONF_MESSAGE_DURATION, &(settings->message_duration), 1);
  35. flipper_format_write_comment_cstr(file, "Player's starting money");
  36. flipper_format_write_uint32(file, CONF_STARTING_MONEY, &(settings->starting_money), 1);
  37. flipper_format_write_comment_cstr(file, "Round price");
  38. flipper_format_write_uint32(file, CONF_ROUND_PRICE, &(settings->round_price), 1);
  39. flipper_format_write_comment_cstr(file, "Enable sound effects");
  40. flipper_format_write_bool(file, CONF_SOUND_EFFECTS, &(settings->sound_effects), 1);
  41. }
  42. Settings load_settings() {
  43. Settings settings;
  44. FURI_LOG_D(APP_NAME, "Loading default settings");
  45. settings.animation_duration = 800;
  46. settings.message_duration = 1500;
  47. settings.starting_money = 200;
  48. settings.round_price = 10;
  49. settings.sound_effects = true;
  50. FURI_LOG_D(APP_NAME, "Opening storage");
  51. Storage* storage = furi_record_open(RECORD_STORAGE);
  52. storage_common_migrate(storage, EXT_PATH(".blackjack.settings"), CONFIG_FILE_PATH);
  53. FURI_LOG_D(APP_NAME, "Allocating file");
  54. FlipperFormat* file = flipper_format_file_alloc(storage);
  55. FURI_LOG_D(APP_NAME, "Allocating string");
  56. FuriString* string_value;
  57. string_value = furi_string_alloc();
  58. if(storage_common_stat(storage, CONFIG_FILE_PATH, NULL) != FSE_OK) {
  59. FURI_LOG_D(APP_NAME, "Config file %s not found, creating new one...", CONFIG_FILE_PATH);
  60. if(!flipper_format_file_open_new(file, CONFIG_FILE_PATH)) {
  61. FURI_LOG_E(APP_NAME, "Error creating new file %s", CONFIG_FILE_PATH);
  62. flipper_format_file_close(file);
  63. } else {
  64. save_settings_file(file, &settings);
  65. }
  66. } else {
  67. if(!flipper_format_file_open_existing(file, CONFIG_FILE_PATH)) {
  68. FURI_LOG_E(APP_NAME, "Error opening existing file %s", CONFIG_FILE_PATH);
  69. flipper_format_file_close(file);
  70. } else {
  71. uint32_t value;
  72. bool valueBool;
  73. FURI_LOG_D(APP_NAME, "Checking version");
  74. if(!flipper_format_read_header(file, string_value, &value)) {
  75. FURI_LOG_E(APP_NAME, "Config file mismatch");
  76. } else {
  77. FURI_LOG_D(APP_NAME, "Loading %s", CONF_ANIMATION_DURATION);
  78. if(flipper_format_read_uint32(file, CONF_ANIMATION_DURATION, &value, 1)) {
  79. settings.animation_duration = value;
  80. FURI_LOG_D(APP_NAME, "Loaded %s: %ld", CONF_ANIMATION_DURATION, value);
  81. }
  82. FURI_LOG_D(APP_NAME, "Loading %s", CONF_MESSAGE_DURATION);
  83. if(flipper_format_read_uint32(file, CONF_MESSAGE_DURATION, &value, 1)) {
  84. settings.message_duration = value;
  85. FURI_LOG_D(APP_NAME, "Loaded %s: %ld", CONF_MESSAGE_DURATION, value);
  86. }
  87. FURI_LOG_D(APP_NAME, "Loading %s", CONF_STARTING_MONEY);
  88. if(flipper_format_read_uint32(file, CONF_STARTING_MONEY, &value, 1)) {
  89. settings.starting_money = value;
  90. FURI_LOG_D(APP_NAME, "Loaded %s: %ld", CONF_STARTING_MONEY, value);
  91. }
  92. FURI_LOG_D(APP_NAME, "Loading %s", CONF_ROUND_PRICE);
  93. if(flipper_format_read_uint32(file, CONF_ROUND_PRICE, &value, 1)) {
  94. settings.round_price = value;
  95. FURI_LOG_D(APP_NAME, "Loaded %s: %ld", CONF_ROUND_PRICE, value);
  96. }
  97. FURI_LOG_D(APP_NAME, "Loading %s", CONF_SOUND_EFFECTS);
  98. if(flipper_format_read_bool(file, CONF_SOUND_EFFECTS, &valueBool, 1)) {
  99. settings.sound_effects = valueBool;
  100. FURI_LOG_D(APP_NAME, "Loaded %s: %i", CONF_ROUND_PRICE, valueBool ? 1 : 0);
  101. }
  102. }
  103. flipper_format_file_close(file);
  104. }
  105. }
  106. furi_string_free(string_value);
  107. // flipper_format_file_close(file);
  108. flipper_format_free(file);
  109. furi_record_close(RECORD_STORAGE);
  110. return settings;
  111. }