flip_social.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. #ifndef FLIP_SOCIAL_H
  2. #define FLIP_SOCIAL_H
  3. #include <easy_flipper/easy_flipper.h>
  4. #include <dialogs/dialogs.h>
  5. #include <storage/storage.h>
  6. #include <flipper_http/flipper_http.h>
  7. #include <input/input.h>
  8. #include <flip_social_icons.h>
  9. #define TAG "FlipSocial"
  10. #define MAX_PRE_SAVED_MESSAGES 25 // Maximum number of pre-saved messages
  11. #define MAX_MESSAGE_LENGTH 100 // Maximum length of a message in the feed
  12. #define MAX_EXPLORE_USERS 100 // Maximum number of users to explore
  13. #define MAX_USER_LENGTH 32 // Maximum length of a username
  14. #define MAX_FRIENDS 50 // Maximum number of friends
  15. #define MAX_TOKENS 640 // Adjust based on expected JSON tokens
  16. #define MAX_FEED_ITEMS 50 // Maximum number of feed items
  17. #define MAX_LINE_LENGTH 30
  18. #define MAX_MESSAGE_USERS 20 // Maximum number of users to display in the submenu
  19. #define MAX_MESSAGES 20 // Maximum number of meesages between each user
  20. #define SETTINGS_PATH STORAGE_EXT_PATH_PREFIX "/apps_data/flip_social/settings.bin"
  21. #define PRE_SAVED_MESSAGES_PATH STORAGE_EXT_PATH_PREFIX "/apps_data/flip_social/pre_saved_messages.txt"
  22. // Define the submenu items for our Hello World application
  23. typedef enum
  24. {
  25. FlipSocialSubmenuLoggedOutIndexLogin, // click to go to the login screen
  26. FlipSocialSubmenuLoggedOutIndexRegister, // click to go to the register screen
  27. FlipSocialSubmenuLoggedOutIndexAbout, // click to go to the about screen
  28. FlipSocialSubmenuLoggedOutIndexWifiSettings, // click to go to the wifi settings screen
  29. //
  30. FlipSocialSubmenuLoggedInIndexProfile, // click to go to the profile screen
  31. FlipSocialSubmenuExploreIndex, // click to go to the explore
  32. FlipSocialSubmenuLoggedInIndexFeed, // click to go to the feed screen
  33. FlipSocialSubmenuLoggedInIndexMessages, // click to go to the messages screen
  34. FlipSocialSubmenuLoggedInIndexCompose, // click to go to the compose screen
  35. FlipSocialSubmenuLoggedInIndexSettings, // click to go to the settings screen
  36. FlipSocialSubmenuLoggedInSignOutButton, // click to sign out
  37. //
  38. FlipSocialSubmenuLoggedInIndexMessagesNewMessage, // click to add a new message
  39. //
  40. FlipSocialSubmenuComposeIndexAddPreSave, // click to add a pre-saved message
  41. FlipSocialSubemnuComposeIndexStartIndex = 100, // starting index for the first pre saved message
  42. //
  43. FlipSocialSubmenuExploreIndexStartIndex = 200, // starting index for the users to explore
  44. //
  45. FlipSocialSubmenuLoggedInIndexFriendsStart = 400, // starting index for the friends
  46. //
  47. FlipSocialSubmenuLoggedInIndexMessagesUsersStart = 600, // starting index for the messages
  48. //
  49. FlipSocialSubmenuLoggedInIndexMessagesUserChoicesIndexStart = 800, // click to select a user to message
  50. } FlipSocialSubmenuIndex;
  51. // Define the ScriptPlaylist structure
  52. typedef struct
  53. {
  54. char *messages[MAX_PRE_SAVED_MESSAGES];
  55. size_t count;
  56. size_t index;
  57. } PreSavedPlaylist;
  58. // Define a FlipSocialFeed individual item
  59. typedef struct
  60. {
  61. char *username;
  62. char *message;
  63. bool is_flipped;
  64. int id;
  65. int flips;
  66. } FlipSocialFeedItem;
  67. typedef struct
  68. {
  69. int ids[MAX_FEED_ITEMS];
  70. size_t count;
  71. size_t index;
  72. } FlipSocialFeedMini;
  73. typedef struct
  74. {
  75. char *usernames[MAX_EXPLORE_USERS];
  76. int count;
  77. int index;
  78. } FlipSocialModel;
  79. typedef struct
  80. {
  81. char *usernames[MAX_MESSAGE_USERS];
  82. int count;
  83. int index;
  84. } FlipSocialModel2;
  85. typedef struct
  86. {
  87. char *usernames[MAX_MESSAGES];
  88. char *messages[MAX_MESSAGES];
  89. int count;
  90. int index;
  91. } FlipSocialMessage;
  92. // Define views for our Hello World application
  93. typedef enum
  94. {
  95. FlipSocialViewLoggedOutSubmenu, // The menu if the user is not logged in
  96. FlipSocialViewLoggedOutLogin, // The login screen
  97. FlipSocialViewLoggedOutRegister, // The register screen
  98. FlipSocialViewLoggedOutAbout, // The about screen
  99. FlipSocialViewLoggedOutWifiSettings, // The wifi settings screen
  100. //
  101. FlipSocialViewLoggedOutLoginUsernameInput, // Text input screen for username input on login screen
  102. FlipSocialViewLoggedOutLoginPasswordInput, // Text input screen for password input on login screen
  103. FlipSocialViewLoggedOutRegisterUsernameInput, // Text input screen for username input on register screen
  104. FlipSocialViewLoggedOutRegisterPasswordInput, // Text input screen for password input on register screen
  105. FlipSocialViewLoggedOutRegisterPassword2Input, // Text input screen for password 2 input on register screen
  106. FlipSocialViewLoggedOutWifiSettingsSSIDInput, // Text input screen for SSID input on wifi screen
  107. FlipSocialViewLoggedOutWifiSettingsPasswordInput, // Text input screen for Password input on wifi screen
  108. FlipSocialViewLoggedOutProcessLogin, // The screen displayed after clicking login
  109. FlipSocialViewLoggedOutProcessRegister, // The screen displayed after clicking register
  110. //
  111. FlipSocialViewLoggedInSubmenu, // The menu if the user is logged in
  112. FlipSocialViewLoggedInProfile, // The profile screen
  113. FlipSocialViewLoggedInFeed, // The feed screen
  114. FlipSocialViewLoggedInCompose, // The compose screen
  115. FlipSocialViewLoggedInSettings, // The settings screen
  116. //
  117. FlipSocialViewLoggedInChangePasswordInput, // Text input screen for password input on change password screen
  118. FlipSocialViewLoggedInComposeAddPreSaveInput, // Text input screen for add text input on compose screen
  119. //
  120. FlipSocialViewLoggedInMessagesNewMessageInput, // Text input screen for new message input on messages screen
  121. FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput, // Text input screen for new message input on messages screen
  122. FlipSocialViewLoggedInMessagesUserChoices, // the view after clicking [New Message] - select a user to message, then direct to input view
  123. //
  124. FlipSocialViewLoggedInSettingsAbout, // The about screen
  125. FlipSocialViewLoggedInSettingsWifi, // The wifi settings screen
  126. FlipSocialViewLoggedInWifiSettingsSSIDInput, // Text input screen for SSID input on wifi screen
  127. FlipSocialViewLoggedInWifiSettingsPasswordInput, // Text input screen for Password input on wifi screen
  128. FlipSocialViewLoggedInProcessCompose, // The dialog view to delete or send the clicked pre-saved text
  129. //
  130. FlipSocialViewLoggedInSignOut, // The view after clicking the sign out button
  131. //
  132. FlipSocialViewLoggedInExploreSubmenu, // The view after clicking the explore button
  133. FlipSocialViewLoggedInExploreProccess, // The view after clicking on a user in the explore screen
  134. FlipSocialViewLoggedInFriendsSubmenu, // The view after clicking the friends button on the profile screen
  135. FlipSocialViewLoggedInFriendsProcess, // The view after clicking on a friend in the friends screen
  136. FlipSocialViewLoggedInMessagesSubmenu, // The view after clicking the messages button on the profile screen
  137. FlipSocialViewLoggedInMessagesProcess, // The view after clicking on a user in the messages screen
  138. //
  139. FlipSocialViewLoading, // The loading screen
  140. //
  141. FlipSocialViewWidgetResult, // The text box that displays the random fact
  142. FlipSocialViewLoader, // The loader screen retrieves data from the internet
  143. } FlipSocialView;
  144. // Define the application structure
  145. typedef struct
  146. {
  147. View *view_loader;
  148. Widget *widget_result;
  149. //
  150. ViewDispatcher *view_dispatcher; // Switches between our views
  151. Submenu *submenu_logged_out; // The application submenu (logged out)
  152. Submenu *submenu_logged_in; // The application submenu (logged in)
  153. Submenu *submenu_compose; // The application submenu (compose)
  154. Submenu *submenu_explore; // The application submenu (explore)
  155. Submenu *submenu_friends; // The application submenu (friends)
  156. Submenu *submenu_messages; // The application submenu (messages)
  157. Submenu *submenu_messages_user_choices; // The application submenu (messages user choices)
  158. Widget *widget_logged_out_about; // The about screen (logged out)
  159. Widget *widget_logged_in_about; // The about screen (logged in)
  160. View *view_process_login; // The screen displayed after clicking login
  161. View *view_process_register; // The screen displayed after clicking register
  162. View *view_process_feed; // Dialog for the feed screen
  163. View *view_process_compose; // Dialog for the compose screen (delete or send)
  164. View *view_process_explore; // Dialog for the explore screen (view user profile - add or delete friend)
  165. View *view_process_friends; // Dialog for the friends screen (view user profile - add or delete friend)
  166. View *view_process_messages; // Dialog for the messages screen (next, previous, send message)
  167. VariableItemList *variable_item_list_logged_out_wifi_settings; // The wifi settings menu
  168. VariableItemList *variable_item_list_logged_out_login; // The login menu
  169. VariableItemList *variable_item_list_logged_out_register; // The register menu
  170. //
  171. VariableItemList *variable_item_list_logged_in_profile; // The profile menu
  172. VariableItemList *variable_item_list_logged_in_settings; // The settings menu
  173. VariableItemList *variable_item_list_logged_in_settings_wifi; // The wifi settings menu
  174. UART_TextInput *text_input_logged_out_wifi_settings_ssid; // Text input for ssid input on wifi settings screen
  175. UART_TextInput *text_input_logged_out_wifi_settings_password; // Text input for password input on wifi settings screen
  176. UART_TextInput *text_input_logged_out_login_username; // Text input for username input on login screen
  177. UART_TextInput *text_input_logged_out_login_password; // Text input for password input on login screen
  178. UART_TextInput *text_input_logged_out_register_username; // Text input for username input on register screen
  179. UART_TextInput *text_input_logged_out_register_password; // Text input for password input on register screen
  180. UART_TextInput *text_input_logged_out_register_password_2; // Text input for password 2 input on register screen
  181. //
  182. UART_TextInput *text_input_logged_in_change_password; // Text input for password input on change password screen
  183. UART_TextInput *text_input_logged_in_compose_pre_save_input; // Text input for pre save input on compose screen
  184. UART_TextInput *text_input_logged_in_wifi_settings_ssid; // Text input for ssid input on wifi settings screen
  185. UART_TextInput *text_input_logged_in_wifi_settings_password; // Text input for password input on wifi settings screen
  186. //
  187. UART_TextInput *text_input_logged_in_messages_new_message; // Text input for new message input on messages screen
  188. UART_TextInput *text_input_logged_in_messages_new_message_user_choices; //
  189. VariableItem *variable_item_logged_out_wifi_settings_ssid; // Reference to the ssid configuration item
  190. VariableItem *variable_item_logged_out_wifi_settings_password; // Reference to the password configuration item
  191. VariableItem *variable_item_logged_out_login_username; // Reference to the username configuration item
  192. VariableItem *variable_item_logged_out_login_password; // Reference to the password configuration item
  193. VariableItem *variable_item_logged_out_login_button; // Reference to the login button configuration item
  194. VariableItem *variable_item_logged_out_register_username; // Reference to the username configuration item
  195. VariableItem *variable_item_logged_out_register_password; // Reference to the password configuration item
  196. VariableItem *variable_item_logged_out_register_password_2; // Reference to the password 2 configuration item
  197. VariableItem *variable_item_logged_out_register_button; // Reference to the register button configuration item
  198. //
  199. VariableItem *variable_item_logged_in_profile_username; // Reference to the username configuration item
  200. VariableItem *variable_item_logged_in_profile_change_password; // Reference to the change password configuration item
  201. VariableItem *variable_item_logged_in_settings_about; // Reference to the about configuration item
  202. VariableItem *variable_item_logged_in_settings_wifi; // Reference to the wifi settings configuration item
  203. VariableItem *variable_item_logged_in_wifi_settings_ssid; // Reference to the ssid configuration item
  204. VariableItem *variable_item_logged_in_wifi_settings_password; // Reference to the password configuration item
  205. //
  206. VariableItem *variable_item_logged_in_profile_friends; // Reference to the friends configuration item
  207. //
  208. FuriPubSub *input_event_queue;
  209. FuriPubSubSubscription *input_event;
  210. PreSavedPlaylist pre_saved_messages; // Pre-saved messages for the feed screen
  211. char *is_logged_in; // Store the login status
  212. uint32_t is_logged_in_size; // Size of the login status buffer
  213. char *login_username_logged_in; // Store the entered login username
  214. char *login_username_logged_in_temp_buffer; // Temporary buffer for login username text input
  215. uint32_t login_username_logged_in_temp_buffer_size; // Size of the login username temporary buffer
  216. char *wifi_ssid_logged_out; // Store the entered wifi ssid
  217. char *wifi_ssid_logged_out_temp_buffer; // Temporary buffer for wifi ssid text input
  218. uint32_t wifi_ssid_logged_out_temp_buffer_size; // Size of the wifi ssid temporary buffer
  219. char *wifi_password_logged_out; // Store the entered wifi password
  220. char *wifi_password_logged_out_temp_buffer; // Temporary buffer for wifi_password text input
  221. uint32_t wifi_password_logged_out_temp_buffer_size; // Size of the wifi_password temporary buffer
  222. char *login_username_logged_out; // Store the entered login username
  223. char *login_username_logged_out_temp_buffer; // Temporary buffer for login username text input
  224. uint32_t login_username_logged_out_temp_buffer_size; // Size of the login username temporary buffer
  225. char *login_password_logged_out; // Store the entered login password
  226. char *login_password_logged_out_temp_buffer; // Temporary buffer for login password text input
  227. uint32_t login_password_logged_out_temp_buffer_size; // Size of the login password temporary buffer
  228. char *register_username_logged_out; // Store the entered register username
  229. char *register_username_logged_out_temp_buffer; // Temporary buffer for register username text input
  230. uint32_t register_username_logged_out_temp_buffer_size; // Size of the register username temporary buffer
  231. char *register_password_logged_out; // Store the entered register password
  232. char *register_password_logged_out_temp_buffer; // Temporary buffer for register password text input
  233. uint32_t register_password_logged_out_temp_buffer_size; // Size of the register password temporary buffer
  234. char *register_password_2_logged_out; // Store the entered register password 2
  235. char *register_password_2_logged_out_temp_buffer; // Temporary buffer for register password 2 text input
  236. uint32_t register_password_2_logged_out_temp_buffer_size; // Size of the register password 2 temporary buffer
  237. //
  238. char *change_password_logged_in; // Store the entered change password
  239. char *change_password_logged_in_temp_buffer; // Temporary buffer for change password text input
  240. uint32_t change_password_logged_in_temp_buffer_size; // Size of the change password temporary buffer
  241. char *compose_pre_save_logged_in; // Store the entered add text
  242. char *compose_pre_save_logged_in_temp_buffer; // Temporary buffer for add text text input
  243. uint32_t compose_pre_save_logged_in_temp_buffer_size; // Size of the add text temporary buffer
  244. char *wifi_ssid_logged_in; // Store the entered wifi ssid
  245. char *wifi_ssid_logged_in_temp_buffer; // Temporary buffer for wifi ssid text input
  246. uint32_t wifi_ssid_logged_in_temp_buffer_size; // Size of the wifi ssid temporary buffer
  247. char *wifi_password_logged_in; // Store the entered wifi password
  248. char *wifi_password_logged_in_temp_buffer; // Temporary buffer for wifi_password text input
  249. uint32_t wifi_password_logged_in_temp_buffer_size; // Size of the wifi_password temporary buffer
  250. //
  251. char *messages_new_message_logged_in; // Store the entered new message
  252. char *messages_new_message_logged_in_temp_buffer; // Temporary buffer for new message text input
  253. uint32_t messages_new_message_logged_in_temp_buffer_size; // Size of the new message temporary buffer
  254. char *message_user_choice_logged_in; // Store the entered message to send to the selected user
  255. char *message_user_choice_logged_in_temp_buffer; // Temporary buffer for message to send to the selected user
  256. uint32_t message_user_choice_logged_in_temp_buffer_size; // Size of the message to send to the selected user temporary buffer
  257. Loading *loading; // The loading screen
  258. } FlipSocialApp;
  259. void flip_social_app_free(FlipSocialApp *app);
  260. extern FlipSocialModel *flip_social_friends; // Store the friends
  261. extern FlipSocialModel2 *flip_social_message_users; // Store the users that have sent messages to the logged in user
  262. extern FlipSocialModel *flip_social_explore; // Store the users to explore
  263. extern FlipSocialMessage *flip_social_messages; // Store the messages between the logged in user and the selected user
  264. extern FlipSocialFeedMini *flip_feed_info; // Store the feed info
  265. extern FlipSocialFeedItem *flip_feed_item; // Store a feed item
  266. extern FlipSocialApp *app_instance;
  267. extern bool flip_social_sent_login_request;
  268. extern bool flip_social_sent_register_request;
  269. extern bool flip_social_login_success;
  270. extern bool flip_social_register_success;
  271. extern bool flip_social_dialog_shown;
  272. extern bool flip_social_dialog_stop;
  273. extern bool flip_social_send_message;
  274. extern char *last_explore_response;
  275. extern char *selected_message;
  276. extern char auth_headers[256];
  277. void auth_headers_alloc(void);
  278. FlipSocialFeedMini *flip_feed_info_alloc(void);
  279. void flip_feed_info_free(void);
  280. #endif