flip_social.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  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. #include <font/font.h>
  10. #define TAG "FlipSocial"
  11. #define VERSION_TAG TAG " v1.0.2"
  12. #define MAX_PRE_SAVED_MESSAGES 20 // Maximum number of pre-saved messages
  13. #define MAX_MESSAGE_LENGTH 100 // Maximum length of a message in the feed
  14. #define MAX_EXPLORE_USERS 50 // Maximum number of users to explore
  15. #define MAX_USER_LENGTH 32 // Maximum length of a username
  16. #define MAX_FRIENDS 50 // Maximum number of friends
  17. #define MAX_FEED_ITEMS 20 // Maximum number of feed items
  18. #define MAX_LINE_LENGTH 27
  19. #define MAX_MESSAGE_USERS 40 // Maximum number of users to display in the submenu
  20. #define MAX_MESSAGES 20 // Maximum number of meesages between each user
  21. #define SETTINGS_PATH STORAGE_EXT_PATH_PREFIX "/apps_data/flip_social/settings.bin"
  22. #define PRE_SAVED_MESSAGES_PATH \
  23. STORAGE_EXT_PATH_PREFIX "/apps_data/flip_social/pre_saved_messages.txt"
  24. // Define the submenu items for our Hello World application
  25. typedef enum {
  26. FlipSocialSubmenuLoggedOutIndexLogin, // click to go to the login screen
  27. FlipSocialSubmenuLoggedOutIndexRegister, // click to go to the register screen
  28. //
  29. FlipSocialSubmenuLoggedOutIndexAbout, // click to go to the about screen
  30. FlipSocialSubmenuLoggedOutIndexWifiSettings, // click to go to the wifi settings screen
  31. FlipSocialSubmenuLoggedInIndexUserSettings, // click to go to the user settings screen
  32. //
  33. FlipSocialSubmenuLoggedInIndexAbout, // click to go to the about screen
  34. FlipSocialSubmenuLoggedInIndexWifiSettings, // click to go to the wifi settings screen
  35. //
  36. FlipSocialSubmenuLoggedInIndexProfile, // click to go to the profile screen
  37. FlipSocialSubmenuExploreIndex, // click to go to the explore
  38. FlipSocialSubmenuLoggedInIndexFeed, // click to go to the feed screen
  39. FlipSocialSubmenuLoggedInIndexMessages, // click to go to the messages screen
  40. FlipSocialSubmenuLoggedInIndexCompose, // click to go to the compose screen
  41. FlipSocialSubmenuLoggedInIndexSettings, // click to go to the settings screen
  42. FlipSocialSubmenuLoggedInSignOutButton, // click to sign out
  43. //
  44. FlipSocialSubmenuLoggedInIndexMessagesNewMessage, // click to add a new message
  45. //
  46. FlipSocialSubmenuComposeIndexAddPreSave, // click to add a pre-saved message
  47. FlipSocialSubemnuComposeIndexStartIndex =
  48. 100, // starting index for the first pre saved message
  49. //
  50. FlipSocialSubmenuExploreIndexStartIndex = 200, // starting index for the users to explore
  51. //
  52. FlipSocialSubmenuLoggedInIndexFriendsStart = 400, // starting index for the friends
  53. //
  54. FlipSocialSubmenuLoggedInIndexMessagesUsersStart = 600, // starting index for the messages
  55. //
  56. FlipSocialSubmenuLoggedInIndexMessagesUserChoicesIndexStart =
  57. 800, // click to select a user to message
  58. } FlipSocialSubmenuIndex;
  59. // Define the ScriptPlaylist structure
  60. typedef struct {
  61. char messages[MAX_PRE_SAVED_MESSAGES][MAX_MESSAGE_LENGTH];
  62. size_t count;
  63. size_t index;
  64. } PreSavedPlaylist;
  65. // Define a FlipSocialFeed individual item
  66. typedef struct {
  67. char username[MAX_USER_LENGTH];
  68. char message[MAX_MESSAGE_LENGTH];
  69. char date_created[MAX_LINE_LENGTH];
  70. bool is_flipped;
  71. int id;
  72. int flips;
  73. } FlipSocialFeedItem;
  74. typedef struct {
  75. int ids[MAX_FEED_ITEMS];
  76. size_t count;
  77. size_t index;
  78. int series_index;
  79. } FlipSocialFeedMini;
  80. typedef struct {
  81. char usernames[MAX_EXPLORE_USERS][MAX_USER_LENGTH];
  82. int count;
  83. int index;
  84. } FlipSocialModel;
  85. typedef struct {
  86. char usernames[MAX_MESSAGE_USERS][MAX_USER_LENGTH];
  87. int count;
  88. int index;
  89. } FlipSocialModel2;
  90. typedef struct {
  91. char usernames[MAX_MESSAGES][MAX_USER_LENGTH];
  92. char messages[MAX_MESSAGES][MAX_MESSAGE_LENGTH];
  93. int count;
  94. int index;
  95. } FlipSocialMessage;
  96. // Define views for our Hello World application
  97. typedef enum {
  98. FlipSocialViewLoggedOutSubmenu, // The menu if the user is not logged in
  99. FlipSocialViewLoggedOutLogin, // The login screen
  100. FlipSocialViewLoggedOutRegister, // The register screen
  101. FlipSocialViewLoggedOutAbout, // The about screen
  102. FlipSocialViewLoggedOutWifiSettings, // The wifi settings screen
  103. //
  104. FlipSocialViewLoggedOutLoginUsernameInput, // Text input screen for username input on login screen
  105. FlipSocialViewLoggedOutLoginPasswordInput, // Text input screen for password input on login screen
  106. FlipSocialViewLoggedOutRegisterUsernameInput, // Text input screen for username input on register screen
  107. FlipSocialViewLoggedOutRegisterPasswordInput, // Text input screen for password input on register screen
  108. FlipSocialViewLoggedOutRegisterPassword2Input, // Text input screen for password 2 input on register screen
  109. FlipSocialViewLoggedOutWifiSettingsSSIDInput, // Text input screen for SSID input on wifi screen
  110. FlipSocialViewLoggedOutWifiSettingsPasswordInput, // Text input screen for Password input on wifi screen
  111. FlipSocialViewLoggedOutProcessLogin, // The screen displayed after clicking login
  112. FlipSocialViewLoggedOutProcessRegister, // The screen displayed after clicking register
  113. //
  114. FlipSocialViewLoggedInSubmenu, // The menu if the user is logged in
  115. FlipSocialViewLoggedInProfile, // The profile screen
  116. FlipSocialViewLoggedInFeed, // The feed screen
  117. FlipSocialViewLoggedInCompose, // The compose screen
  118. FlipSocialViewLoggedInSettings, // The settings screen
  119. //
  120. FlipSocialViewLoggedInChangeBioInput, // Text input screen for bio input on profile screen
  121. FlipSocialViewLoggedInChangePasswordInput, // Text input screen for password input on change password screen
  122. FlipSocialViewLoggedInComposeAddPreSaveInput, // Text input screen for add text input on compose screen
  123. //
  124. FlipSocialViewLoggedInMessagesNewMessageInput, // Text input screen for new message input on messages screen
  125. FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput, // Text input screen for new message input on messages screen
  126. FlipSocialViewLoggedInMessagesUserChoices, // the view after clicking [New Message] - select a user to message, then direct to input view
  127. FlipSocialViewLoggedInExploreInput, // Text input screen for explore input on explore screen
  128. FlipSocialViewLoggedInMessageUsersInput,
  129. //
  130. FlipSocialViewLoggedInSettingsAbout, // The about screen
  131. FlipSocialViewLoggedInSettingsWifi, // The wifi settings screen
  132. FlipSocialViewLoggedInSettingsUser, // The user settings screen
  133. FlipSocialViewLoggedInWifiSettingsSSIDInput, // Text input screen for SSID input on wifi screen
  134. FlipSocialViewLoggedInWifiSettingsPasswordInput, // Text input screen for Password input on wifi screen
  135. //
  136. FlipSocialViewLoggedInSignOut, // The view after clicking the sign out button
  137. //
  138. FlipSocialViewLoggedInExploreSubmenu, // The view after clicking the explore button
  139. FlipSocialViewLoggedInFriendsSubmenu, // The view after clicking the friends button on the profile screen
  140. FlipSocialViewLoggedInMessagesSubmenu, // The view after clicking the messages button on the profile screen
  141. //
  142. FlipSocialViewLoading, // The loading screen
  143. //
  144. FlipSocialViewWidgetResult, // The text box that displays the random fact
  145. FlipSocialViewLoader, // The loader screen retrieves data from the internet
  146. //
  147. FlipSocialViewExploreDialog, // The dialog for the explore screen
  148. FlipSocialViewFriendsDialog, // The dialog for the friends screen
  149. FlipSocialViewMessagesDialog, // The dialog for the messages screen
  150. FlipSocialViewComposeDialog, // The dialog for the compose screen
  151. //
  152. FlipSocialViewTextInput, // The text input screen
  153. FlipSocialViewVariableItemList,
  154. //
  155. FlipSocialViewSubmenu,
  156. } FlipSocialView;
  157. // Define the application structure
  158. typedef struct {
  159. View* view_loader;
  160. Widget* widget_result;
  161. //
  162. ViewDispatcher* view_dispatcher; // Switches between our views
  163. Submenu* submenu_logged_out; // The application submenu (logged out)
  164. Submenu* submenu_logged_in; // The application submenu (logged in)
  165. //
  166. Submenu* submenu;
  167. //
  168. Widget* widget_logged_out_about; // The about screen (logged out)
  169. Widget* widget_logged_in_about; // The about screen (logged in)
  170. VariableItemList* variable_item_list; // The main menu
  171. TextInput* text_input; // The text input
  172. VariableItem*
  173. variable_item_logged_out_wifi_settings_ssid; // Reference to the ssid configuration item
  174. VariableItem*
  175. variable_item_logged_out_wifi_settings_password; // Reference to the password configuration item
  176. VariableItem*
  177. variable_item_logged_out_login_username; // Reference to the username configuration item
  178. VariableItem*
  179. variable_item_logged_out_login_password; // Reference to the password configuration item
  180. VariableItem*
  181. variable_item_logged_out_login_button; // Reference to the login button configuration item
  182. VariableItem*
  183. variable_item_logged_out_register_username; // Reference to the username configuration item
  184. VariableItem*
  185. variable_item_logged_out_register_password; // Reference to the password configuration item
  186. VariableItem*
  187. variable_item_logged_out_register_password_2; // Reference to the password 2 configuration item
  188. VariableItem*
  189. variable_item_logged_out_register_button; // Reference to the register button configuration item
  190. //
  191. VariableItem*
  192. variable_item_logged_in_profile_username; // Reference to the username configuration item
  193. VariableItem*
  194. variable_item_logged_in_profile_change_password; // Reference to the change password configuration item
  195. VariableItem*
  196. variable_item_logged_in_profile_change_bio; // Reference to the change bio configuration item
  197. //
  198. VariableItem*
  199. variable_item_logged_in_settings_about; // Reference to the about configuration item
  200. VariableItem*
  201. variable_item_logged_in_settings_wifi; // Reference to the wifi settings configuration item
  202. VariableItem*
  203. variable_item_logged_in_settings_user; // Reference to the user settings configuration item
  204. VariableItem*
  205. variable_item_logged_in_user_settings_feed_type; // Reference to the feed type configuration item
  206. VariableItem*
  207. variable_item_logged_in_user_settings_notifications; // Reference to the notifications configuration item
  208. VariableItem*
  209. variable_item_logged_in_wifi_settings_ssid; // Reference to the ssid configuration item
  210. VariableItem*
  211. variable_item_logged_in_wifi_settings_password; // Reference to the password configuration item
  212. //
  213. VariableItem*
  214. variable_item_logged_in_profile_friends; // Reference to the friends configuration item
  215. //
  216. PreSavedPlaylist pre_saved_messages; // Pre-saved messages for the feed screen
  217. char* is_logged_in; // Store the login status
  218. uint32_t is_logged_in_size; // Size of the login status buffer
  219. char* login_username_logged_in; // Store the entered login username
  220. char* login_username_logged_in_temp_buffer; // Temporary buffer for login username text input
  221. uint32_t
  222. login_username_logged_in_temp_buffer_size; // Size of the login username temporary buffer
  223. char* change_bio_logged_in; // Store the entered bio
  224. char* change_bio_logged_in_temp_buffer; // Temporary buffer for bio text input
  225. uint32_t change_bio_logged_in_temp_buffer_size; // Size of the bio temporary buffer
  226. //
  227. char* wifi_ssid_logged_out; // Store the entered wifi ssid
  228. char* wifi_ssid_logged_out_temp_buffer; // Temporary buffer for wifi ssid text input
  229. uint32_t wifi_ssid_logged_out_temp_buffer_size; // Size of the wifi ssid temporary buffer
  230. char* wifi_password_logged_out; // Store the entered wifi password
  231. char* wifi_password_logged_out_temp_buffer; // Temporary buffer for wifi_password text input
  232. uint32_t wifi_password_logged_out_temp_buffer_size; // Size of the wifi_password temporary buffer
  233. char* login_username_logged_out; // Store the entered login username
  234. char* login_username_logged_out_temp_buffer; // Temporary buffer for login username text input
  235. uint32_t
  236. login_username_logged_out_temp_buffer_size; // Size of the login username temporary buffer
  237. char* login_password_logged_out; // Store the entered login password
  238. char* login_password_logged_out_temp_buffer; // Temporary buffer for login password text input
  239. uint32_t
  240. login_password_logged_out_temp_buffer_size; // Size of the login password temporary buffer
  241. char* register_username_logged_out; // Store the entered register username
  242. char* register_username_logged_out_temp_buffer; // Temporary buffer for register username text input
  243. uint32_t
  244. register_username_logged_out_temp_buffer_size; // Size of the register username temporary buffer
  245. char* register_password_logged_out; // Store the entered register password
  246. char* register_password_logged_out_temp_buffer; // Temporary buffer for register password text input
  247. uint32_t
  248. register_password_logged_out_temp_buffer_size; // Size of the register password temporary buffer
  249. char* register_password_2_logged_out; // Store the entered register password 2
  250. char* register_password_2_logged_out_temp_buffer; // Temporary buffer for register password 2 text input
  251. uint32_t
  252. register_password_2_logged_out_temp_buffer_size; // Size of the register password 2 temporary buffer
  253. //
  254. char* change_password_logged_in; // Store the entered change password
  255. char* change_password_logged_in_temp_buffer; // Temporary buffer for change password text input
  256. uint32_t
  257. change_password_logged_in_temp_buffer_size; // Size of the change password temporary buffer
  258. char* compose_pre_save_logged_in; // Store the entered add text
  259. char* compose_pre_save_logged_in_temp_buffer; // Temporary buffer for add text text input
  260. uint32_t compose_pre_save_logged_in_temp_buffer_size; // Size of the add text temporary buffer
  261. char* wifi_ssid_logged_in; // Store the entered wifi ssid
  262. char* wifi_ssid_logged_in_temp_buffer; // Temporary buffer for wifi ssid text input
  263. uint32_t wifi_ssid_logged_in_temp_buffer_size; // Size of the wifi ssid temporary buffer
  264. char* wifi_password_logged_in; // Store the entered wifi password
  265. char* wifi_password_logged_in_temp_buffer; // Temporary buffer for wifi_password text input
  266. uint32_t wifi_password_logged_in_temp_buffer_size; // Size of the wifi_password temporary buffer
  267. //
  268. char* messages_new_message_logged_in; // Store the entered new message
  269. char* messages_new_message_logged_in_temp_buffer; // Temporary buffer for new message text input
  270. uint32_t
  271. messages_new_message_logged_in_temp_buffer_size; // Size of the new message temporary buffer
  272. char* message_user_choice_logged_in; // Store the entered message to send to the selected user
  273. char* message_user_choice_logged_in_temp_buffer; // Temporary buffer for message to send to the selected user
  274. uint32_t
  275. message_user_choice_logged_in_temp_buffer_size; // Size of the message to send to the selected user temporary buffer
  276. //
  277. char* explore_logged_in; // Store the entered explore
  278. char* explore_logged_in_temp_buffer; // Temporary buffer for explore text input
  279. uint32_t explore_logged_in_temp_buffer_size; // Size of the explore temporary buffer
  280. char* message_users_logged_in; // Store the entered message users
  281. char* message_users_logged_in_temp_buffer; // Temporary buffer for message users text input
  282. uint32_t message_users_logged_in_temp_buffer_size; // Size of the message users temporary buffer
  283. DialogEx* dialog_explore;
  284. DialogEx* dialog_friends;
  285. DialogEx* dialog_messages;
  286. DialogEx* dialog_compose;
  287. View* view_feed;
  288. char* explore_user_bio; // Store the bio of the selected user
  289. } FlipSocialApp;
  290. void flip_social_app_free(FlipSocialApp* app);
  291. extern FlipSocialModel* flip_social_friends; // Store the friends
  292. extern FlipSocialModel2*
  293. flip_social_message_users; // Store the users that have sent messages to the logged in user
  294. extern FlipSocialModel* flip_social_explore; // Store the users to explore
  295. extern FlipSocialMessage*
  296. flip_social_messages; // Store the messages between the logged in user and the selected user
  297. extern FlipSocialFeedMini* flip_feed_info; // Store the feed info
  298. extern FlipSocialFeedItem* flip_feed_item; // Store a feed item
  299. extern FlipSocialApp* app_instance;
  300. extern bool flip_social_sent_login_request;
  301. extern bool flip_social_sent_register_request;
  302. extern bool flip_social_login_success;
  303. extern bool flip_social_register_success;
  304. extern bool flip_social_dialog_shown;
  305. extern bool flip_social_dialog_stop;
  306. extern bool flip_social_send_message;
  307. extern char* selected_message;
  308. extern char auth_headers[256];
  309. //
  310. extern char* flip_social_feed_type[];
  311. extern uint8_t flip_social_feed_type_index;
  312. //
  313. extern char* flip_social_notification_type[];
  314. extern uint8_t flip_social_notification_type_index;
  315. #endif