flip_social_e.h 17 KB

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