lfs_backup.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "lfs_backup.h"
  2. #include <toolbox/tar/tar_archive.h>
  3. #include <bt/bt_settings_filename.h>
  4. #include <bt/bt_service/bt_keys_filename.h>
  5. #include <dolphin/helpers/dolphin_state_filename.h>
  6. #include <desktop/helpers/slideshow_filename.h>
  7. #include <desktop/desktop_settings_filename.h>
  8. #include <notification/notification_settings_filename.h>
  9. #define LFS_BACKUP_DEFAULT_LOCATION EXT_PATH(LFS_BACKUP_DEFAULT_FILENAME)
  10. static void backup_name_converter(FuriString* filename) {
  11. if(furi_string_empty(filename) || (furi_string_get_char(filename, 0) == '.')) {
  12. return;
  13. }
  14. /* Filenames are already prefixed with '.' */
  15. const char* const names[] = {
  16. BT_SETTINGS_FILE_NAME,
  17. BT_KEYS_STORAGE_FILE_NAME,
  18. DESKTOP_SETTINGS_FILE_NAME,
  19. NOTIFICATION_SETTINGS_FILE_NAME,
  20. SLIDESHOW_FILE_NAME,
  21. DOLPHIN_STATE_FILE_NAME,
  22. };
  23. for(size_t i = 0; i < COUNT_OF(names); i++) {
  24. if(furi_string_equal(filename, &names[i][1])) {
  25. furi_string_set(filename, names[i]);
  26. return;
  27. }
  28. }
  29. }
  30. bool lfs_backup_create(Storage* storage, const char* destination) {
  31. const char* final_destination =
  32. destination && strlen(destination) ? destination : LFS_BACKUP_DEFAULT_LOCATION;
  33. return storage_int_backup(storage, final_destination) == FSE_OK;
  34. }
  35. bool lfs_backup_exists(Storage* storage, const char* source) {
  36. const char* final_source = source && strlen(source) ? source : LFS_BACKUP_DEFAULT_LOCATION;
  37. return storage_common_stat(storage, final_source, NULL) == FSE_OK;
  38. }
  39. bool lfs_backup_unpack(Storage* storage, const char* source) {
  40. const char* final_source = source && strlen(source) ? source : LFS_BACKUP_DEFAULT_LOCATION;
  41. return storage_int_restore(storage, final_source, backup_name_converter) == FSE_OK;
  42. }