archive_favorites.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "archive_favorites.h"
  2. #include "archive_files.h"
  3. #include "../views/archive_main_view.h"
  4. bool archive_favorites_read(void* context) {
  5. furi_assert(context);
  6. ArchiveMainView* archive_view = context;
  7. FileWorker* file_worker = file_worker_alloc(true);
  8. string_t buffer;
  9. FileInfo file_info;
  10. string_init(buffer);
  11. bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_ALWAYS);
  12. if(result) {
  13. while(1) {
  14. if(!file_worker_read_until(file_worker, buffer, '\n')) {
  15. break;
  16. }
  17. if(!string_size(buffer)) {
  18. break;
  19. }
  20. archive_view_add_item(archive_view, &file_info, string_get_cstr(buffer));
  21. string_clean(buffer);
  22. }
  23. }
  24. string_clear(buffer);
  25. file_worker_close(file_worker);
  26. file_worker_free(file_worker);
  27. return result;
  28. }
  29. bool archive_favorites_delete(const char* file_path, const char* name) {
  30. furi_assert(file_path);
  31. furi_assert(name);
  32. FileWorker* file_worker = file_worker_alloc(true);
  33. string_t path;
  34. string_t buffer;
  35. string_init(buffer);
  36. string_init_printf(path, "%s/%s", file_path, name);
  37. bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
  38. if(result) {
  39. while(1) {
  40. if(!file_worker_read_until(file_worker, buffer, '\n')) {
  41. break;
  42. }
  43. if(!string_size(buffer)) {
  44. break;
  45. }
  46. if(string_search(buffer, path)) {
  47. string_t temp;
  48. string_init_printf(temp, "%s\r\n", string_get_cstr(buffer));
  49. archive_file_append(ARCHIVE_FAV_TEMP_PATH, temp);
  50. string_clear(temp);
  51. }
  52. }
  53. }
  54. string_clear(buffer);
  55. string_clear(path);
  56. file_worker_close(file_worker);
  57. file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
  58. file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
  59. file_worker_free(file_worker);
  60. return result;
  61. }
  62. bool archive_is_favorite(const char* file_path, const char* name) {
  63. furi_assert(file_path);
  64. furi_assert(name);
  65. FileWorker* file_worker = file_worker_alloc(true);
  66. string_t path;
  67. string_t buffer;
  68. string_init(buffer);
  69. bool found = false;
  70. string_init_printf(path, "%s/%s", file_path, name);
  71. bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_ALWAYS);
  72. if(result) {
  73. while(1) {
  74. if(!file_worker_read_until(file_worker, buffer, '\n')) {
  75. break;
  76. }
  77. if(!string_size(buffer)) {
  78. break;
  79. }
  80. if(!string_search(buffer, path)) {
  81. found = true;
  82. break;
  83. }
  84. }
  85. }
  86. string_clear(buffer);
  87. string_clear(path);
  88. file_worker_close(file_worker);
  89. file_worker_free(file_worker);
  90. return found;
  91. }
  92. bool archive_favorites_rename(const char* file_path, const char* src, const char* dst) {
  93. furi_assert(file_path);
  94. furi_assert(src);
  95. furi_assert(dst);
  96. FileWorker* file_worker = file_worker_alloc(true);
  97. string_t path;
  98. string_t buffer;
  99. string_t temp;
  100. string_init(buffer);
  101. string_init(temp);
  102. string_init(path);
  103. string_printf(path, "%s/%s", file_path, src);
  104. bool result = file_worker_open(file_worker, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
  105. if(result) {
  106. while(1) {
  107. if(!file_worker_read_until(file_worker, buffer, '\n')) {
  108. break;
  109. }
  110. if(!string_size(buffer)) {
  111. break;
  112. }
  113. string_printf(
  114. temp, "%s\r\n", string_search(buffer, path) ? string_get_cstr(buffer) : dst);
  115. archive_file_append(ARCHIVE_FAV_TEMP_PATH, temp);
  116. string_clean(temp);
  117. }
  118. }
  119. string_clear(temp);
  120. string_clear(buffer);
  121. string_clear(path);
  122. file_worker_close(file_worker);
  123. file_worker_remove(file_worker, ARCHIVE_FAV_PATH);
  124. file_worker_rename(file_worker, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
  125. file_worker_free(file_worker);
  126. return result;
  127. }
  128. void archive_add_to_favorites(const char* file_path, const char* name) {
  129. furi_assert(file_path);
  130. furi_assert(name);
  131. string_t buffer_src;
  132. string_init_printf(buffer_src, "%s/%s\r\n", file_path, name);
  133. archive_file_append(ARCHIVE_FAV_PATH, buffer_src);
  134. string_clear(buffer_src);
  135. }