archive_i.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #pragma once
  2. #include "archive.h"
  3. #include <stdint.h>
  4. #include <furi.h>
  5. #include <gui/gui_i.h>
  6. #include <gui/view_dispatcher.h>
  7. #include <gui/modules/text_input.h>
  8. #include <loader/loader.h>
  9. #include <m-string.h>
  10. #include <m-array.h>
  11. #include <filesystem-api.h>
  12. #include "archive_views.h"
  13. #include "applications.h"
  14. #define MAX_DEPTH 32
  15. #define MAX_FILES 100 //temp
  16. #define MAX_FILE_SIZE 128
  17. typedef enum {
  18. ArchiveViewMain,
  19. ArchiveViewTextInput,
  20. ArchiveViewTotal,
  21. } ArchiveViewEnum;
  22. static const char* flipper_app_name[] = {
  23. [ArchiveFileTypeIButton] = "iButton",
  24. [ArchiveFileTypeNFC] = "NFC",
  25. [ArchiveFileTypeSubOne] = "Sub-1 GHz",
  26. [ArchiveFileTypeLFRFID] = "125 kHz RFID",
  27. [ArchiveFileTypeIrda] = "Infrared",
  28. };
  29. static const char* known_ext[] = {
  30. [ArchiveFileTypeIButton] = ".ibtn",
  31. [ArchiveFileTypeNFC] = ".nfc",
  32. [ArchiveFileTypeSubOne] = ".sub1",
  33. [ArchiveFileTypeLFRFID] = ".rfid",
  34. [ArchiveFileTypeIrda] = ".ir",
  35. };
  36. static const char* tab_default_paths[] = {
  37. [ArchiveTabFavorites] = "favorites",
  38. [ArchiveTabIButton] = "ibutton",
  39. [ArchiveTabNFC] = "nfc",
  40. [ArchiveTabSubOne] = "subone",
  41. [ArchiveTabLFRFID] = "lfrfid",
  42. [ArchiveTabIrda] = "irda",
  43. [ArchiveTabBrowser] = "/",
  44. };
  45. static inline const char* get_tab_ext(ArchiveTabEnum tab) {
  46. switch(tab) {
  47. case ArchiveTabIButton:
  48. return known_ext[ArchiveFileTypeIButton];
  49. case ArchiveTabNFC:
  50. return known_ext[ArchiveFileTypeNFC];
  51. case ArchiveTabSubOne:
  52. return known_ext[ArchiveFileTypeSubOne];
  53. case ArchiveTabLFRFID:
  54. return known_ext[ArchiveFileTypeLFRFID];
  55. case ArchiveTabIrda:
  56. return known_ext[ArchiveFileTypeIrda];
  57. default:
  58. return "*";
  59. }
  60. }
  61. static inline const char* get_default_path(ArchiveFileTypeEnum type) {
  62. switch(type) {
  63. case ArchiveFileTypeIButton:
  64. return tab_default_paths[ArchiveTabIButton];
  65. case ArchiveFileTypeNFC:
  66. return tab_default_paths[ArchiveTabNFC];
  67. case ArchiveFileTypeSubOne:
  68. return tab_default_paths[ArchiveTabSubOne];
  69. case ArchiveFileTypeLFRFID:
  70. return tab_default_paths[ArchiveTabLFRFID];
  71. case ArchiveFileTypeIrda:
  72. return tab_default_paths[ArchiveTabIrda];
  73. default:
  74. return false;
  75. }
  76. }
  77. typedef enum {
  78. EventTypeTick,
  79. EventTypeKey,
  80. EventTypeExit,
  81. } EventType;
  82. typedef struct {
  83. union {
  84. InputEvent input;
  85. } value;
  86. EventType type;
  87. } AppEvent;
  88. typedef struct {
  89. ArchiveTabEnum tab_id;
  90. string_t name;
  91. string_t path;
  92. char text_input_buffer[MAX_NAME_LEN];
  93. uint8_t depth;
  94. uint16_t last_idx[MAX_DEPTH];
  95. bool menu;
  96. } ArchiveBrowser;
  97. struct ArchiveApp {
  98. osMessageQueueId_t event_queue;
  99. FuriThread* app_thread;
  100. Loader* loader;
  101. Gui* gui;
  102. ViewDispatcher* view_dispatcher;
  103. View* view_archive_main;
  104. TextInput* text_input;
  105. FS_Api* fs_api;
  106. ArchiveBrowser browser;
  107. };