瀏覽代碼

Improved allocation

jblanked 1 年之前
父節點
當前提交
8f97654e8a

+ 1 - 39
alloc/flip_social_alloc.c

@@ -184,22 +184,7 @@ FlipSocialApp *flip_social_app_alloc()
     {
         return NULL;
     }
-    if (!easy_flipper_set_submenu(&app->submenu_compose, FlipSocialViewLoggedInCompose, "Create A Post", flip_social_callback_to_submenu_logged_in, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_submenu(&app->submenu_explore, FlipSocialViewLoggedInExploreSubmenu, "Explore", flip_social_callback_to_submenu_logged_in, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_submenu(&app->submenu_friends, FlipSocialViewLoggedInFriendsSubmenu, "Friends", flip_social_callback_to_profile_logged_in, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_submenu(&app->submenu_messages, FlipSocialViewLoggedInMessagesSubmenu, "Messages", flip_social_callback_to_submenu_logged_in, &app->view_dispatcher))
-    {
-        return NULL;
-    }
+
     if (!easy_flipper_set_submenu(&app->submenu_messages_user_choices, FlipSocialViewLoggedInMessagesUserChoices, "Users", flip_social_callback_to_messages_logged_in, &app->view_dispatcher))
     {
         return NULL;
@@ -217,9 +202,6 @@ FlipSocialApp *flip_social_app_alloc()
     submenu_add_item(app->submenu_logged_in, "Profile", FlipSocialSubmenuLoggedInIndexProfile, flip_social_callback_submenu_choices, app);
     submenu_add_item(app->submenu_logged_in, "Settings", FlipSocialSubmenuLoggedInIndexSettings, flip_social_callback_submenu_choices, app);
     submenu_add_item(app->submenu_logged_in, "Sign Out", FlipSocialSubmenuLoggedInSignOutButton, flip_social_callback_submenu_choices, app);
-    //
-    submenu_add_item(app->submenu_compose, "Add Pre-Save", FlipSocialSubmenuComposeIndexAddPreSave, flip_social_callback_submenu_choices, app);
-    //
 
     // Allocate View(s)
     if (!easy_flipper_set_view(&app->view_process_feed, FlipSocialViewLoggedInFeed, flip_social_callback_draw_feed, NULL, flip_social_callback_to_submenu_logged_in, &app->view_dispatcher, app))
@@ -347,26 +329,6 @@ FlipSocialApp *flip_social_app_alloc()
         return NULL;
     }
 
-    // Setup About(s)
-    if (!easy_flipper_set_widget(&app->widget_logged_out_about, FlipSocialViewLoggedOutAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_submenu_logged_out, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_widget(&app->widget_logged_in_about, FlipSocialViewLoggedInSettingsAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_settings_logged_in, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-
-    // load the playlist
-    if (load_playlist(&app->pre_saved_messages))
-    {
-        // Update the playlist submenu
-        for (uint32_t i = 0; i < app->pre_saved_messages.count; i++)
-        {
-            submenu_add_item(app->submenu_compose, app->pre_saved_messages.messages[i], FlipSocialSubemnuComposeIndexStartIndex + i, flip_social_callback_submenu_choices, app);
-        }
-    }
-
     // Load the settings
     if (!load_settings(app->wifi_ssid_logged_out,
                        app->wifi_ssid_logged_out_temp_buffer_size,

+ 138 - 7
callback/flip_social_callback.c

@@ -10,6 +10,102 @@
 #define DEV_CRASH()
 #endif
 
+static bool about_widget_alloc(bool is_logged_in)
+{
+    if (!is_logged_in)
+    {
+        if (!app_instance->widget_logged_out_about)
+        {
+            return easy_flipper_set_widget(&app_instance->widget_logged_out_about, FlipSocialViewLoggedOutAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_submenu_logged_out, &app_instance->view_dispatcher);
+        }
+    }
+    else
+    {
+        if (!app_instance->widget_logged_in_about)
+        {
+            return easy_flipper_set_widget(&app_instance->widget_logged_in_about, FlipSocialViewLoggedInSettingsAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_settings_logged_in, &app_instance->view_dispatcher);
+        }
+    }
+    return true;
+}
+static void free_about_widget(bool is_logged_in)
+{
+    if (is_logged_in && app_instance->widget_logged_in_about)
+    {
+        widget_free(app_instance->widget_logged_in_about);
+        app_instance->widget_logged_in_about = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
+    }
+    if (!is_logged_in && app_instance->widget_logged_out_about)
+    {
+        widget_free(app_instance->widget_logged_out_about);
+        app_instance->widget_logged_out_about = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedOutAbout);
+    }
+}
+static bool pre_saved_messages_alloc(void)
+{
+    if (!app_instance)
+    {
+        return false;
+    }
+    if (!app_instance->submenu_compose)
+    {
+        if (!easy_flipper_set_submenu(&app_instance->submenu_compose, FlipSocialViewLoggedInCompose, "Create A Post", flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher))
+        {
+            return false;
+        }
+        submenu_reset(app_instance->submenu_compose);
+        submenu_add_item(app_instance->submenu_compose, "Add Pre-Save", FlipSocialSubmenuComposeIndexAddPreSave, flip_social_callback_submenu_choices, app_instance);
+        // load the playlist
+        if (load_playlist(&app_instance->pre_saved_messages))
+        {
+            // Update the playlist submenu
+            for (uint32_t i = 0; i < app_instance->pre_saved_messages.count; i++)
+            {
+                if (app_instance->pre_saved_messages.messages[i])
+                {
+                    submenu_add_item(app_instance->submenu_compose, app_instance->pre_saved_messages.messages[i], FlipSocialSubemnuComposeIndexStartIndex + i, flip_social_callback_submenu_choices, app_instance);
+                }
+            }
+        }
+    }
+    return true;
+}
+static void free_pre_saved_messages(void)
+{
+    if (app_instance->submenu_compose)
+    {
+        submenu_free(app_instance->submenu_compose);
+        app_instance->submenu_compose = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInCompose);
+    }
+    for (uint32_t i = 0; i < app_instance->pre_saved_messages.count; i++)
+    {
+        if (app_instance->pre_saved_messages.messages[i])
+        {
+            free(app_instance->pre_saved_messages.messages[i]);
+            app_instance->pre_saved_messages.messages[i] = NULL;
+        }
+    }
+}
+
+static void flip_social_free_friends(void)
+{
+    if (!flip_social_friends)
+    {
+        return;
+    }
+    free(flip_social_friends);
+    flip_social_friends = NULL;
+    if (app_instance->submenu_friends)
+    {
+        submenu_free(app_instance->submenu_friends);
+        app_instance->submenu_friends = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInFriendsSubmenu);
+    }
+}
+
 void flip_social_request_error_draw(Canvas *canvas)
 {
     if (canvas == NULL)
@@ -229,16 +325,18 @@ uint32_t flip_social_callback_to_submenu_logged_out(void *context)
 uint32_t flip_social_callback_to_submenu_logged_in(void *context)
 {
     UNUSED(context);
-    flip_social_free_explore();
+    free_about_widget(false);
+    //
     flip_social_free_friends();
     flip_social_free_message_users();
-    flip_social_free_messages();
     flip_feed_info_free();
     if (flip_feed_item)
     {
         free(flip_feed_item);
         flip_feed_item = NULL;
     }
+    // free the about widget if it exists
+    free_about_widget(true);
     return FlipSocialViewLoggedInSubmenu;
 }
 
@@ -377,6 +475,12 @@ uint32_t flip_social_callback_to_messages_user_choices(void *context)
     return FlipSocialViewLoggedInMessagesUserChoices;
 }
 
+static void free_flip_social_group()
+{
+    flip_social_free_messages();
+    flip_social_free_explore();
+}
+
 /**
  * @brief Navigation callback for exiting the application
  * @param context The context - unused
@@ -385,12 +489,9 @@ uint32_t flip_social_callback_to_messages_user_choices(void *context)
 uint32_t flip_social_callback_exit_app(void *context)
 {
     // Exit the application
-    if (!context)
-    {
-        FURI_LOG_E(TAG, "Context is NULL");
-        return VIEW_NONE;
-    }
     UNUSED(context);
+    free_flip_social_group();
+    free_pre_saved_messages();
     return VIEW_NONE; // Return VIEW_NONE to exit the app
 }
 
@@ -421,6 +522,10 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegister);
         break;
     case FlipSocialSubmenuLoggedOutIndexAbout:
+        if (!about_widget_alloc(false))
+        {
+            return;
+        }
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutAbout);
         break;
     case FlipSocialSubmenuLoggedOutIndexWifiSettings:
@@ -430,6 +535,7 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInProfile);
         break;
     case FlipSocialSubmenuLoggedInIndexMessages:
+        free_flip_social_group();
         flipper_http_loading_task(
             flip_social_get_message_users,         // get the message users
             flip_social_parse_json_message_users,  // parse the message users
@@ -446,6 +552,8 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
             &app->view_dispatcher);                      // view dispatcher
         break;
     case FlipSocialSubmenuLoggedInIndexFeed:
+        free_flip_social_group();
+        // use derek's switch_to_view instead
         if (fhttp.state == INACTIVE)
         {
             FURI_LOG_E(TAG, "HTTP state is INACTIVE");
@@ -503,8 +611,10 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInFeed);
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoading);
         loading_free(app->loading);
+        free_pre_saved_messages();
         break;
     case FlipSocialSubmenuExploreIndex:
+        free_flip_social_group();
         flipper_http_loading_task(
             flip_social_get_explore,              // get the explore users
             flip_social_parse_json_explore,       // parse the explore users
@@ -513,12 +623,19 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
             &app->view_dispatcher);               // view dispatcher
         break;
     case FlipSocialSubmenuLoggedInIndexCompose:
+        free_pre_saved_messages();
+        if (!pre_saved_messages_alloc())
+        {
+            FURI_LOG_E(TAG, "Failed to allocate pre-saved messages");
+            return;
+        }
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInCompose);
         break;
     case FlipSocialSubmenuLoggedInIndexSettings:
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSettings);
         break;
     case FlipSocialSubmenuLoggedInSignOutButton:
+        free_flip_social_group();
         app->is_logged_in = "false";
 
         save_settings(app->wifi_ssid_logged_out, app->wifi_password_logged_out, app->login_username_logged_out, app->login_username_logged_in, app->login_password_logged_out, app->change_password_logged_in, app->is_logged_in);
@@ -1181,6 +1298,16 @@ void flip_social_text_input_logged_in_profile_item_selected(void *context, uint3
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInChangePasswordInput);
         break;
     case 2: // Friends
+        flip_social_free_friends();
+        free_flip_social_group();
+        if (!app->submenu_friends)
+        {
+            if (!easy_flipper_set_submenu(&app->submenu_friends, FlipSocialViewLoggedInFriendsSubmenu, "Friends", flip_social_callback_to_profile_logged_in, &app->view_dispatcher))
+            {
+                FURI_LOG_DEV(TAG, "Failed to set submenu for friends");
+                return;
+            }
+        }
         flipper_http_loading_task(flip_social_get_friends, flip_social_parse_json_friends, FlipSocialViewLoggedInFriendsSubmenu, FlipSocialViewLoggedInProfile, &app->view_dispatcher);
         break;
     default:
@@ -1206,6 +1333,10 @@ void flip_social_text_input_logged_in_settings_item_selected(void *context, uint
     switch (index)
     {
     case 0: // About
+        if (!about_widget_alloc(true))
+        {
+            return;
+        }
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
         break;
     case 1: // Wifi

+ 39 - 68
explore/flip_social_explore.c

@@ -1,7 +1,20 @@
 #include "flip_social_explore.h"
 
-FlipSocialModel *flip_social_explore_alloc()
+FlipSocialModel *flip_social_explore_alloc(void)
 {
+    if (!app_instance)
+    {
+        return NULL;
+    }
+
+    if (!app_instance->submenu_explore)
+    {
+        if (!easy_flipper_set_submenu(&app_instance->submenu_explore, FlipSocialViewLoggedInExploreSubmenu, "Explore", flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher))
+        {
+            return NULL;
+        }
+    }
+
     // Allocate memory for each username only if not already allocated
     FlipSocialModel *explore = malloc(sizeof(FlipSocialModel));
     if (explore == NULL)
@@ -24,18 +37,21 @@ FlipSocialModel *flip_social_explore_alloc()
     return explore;
 }
 
-void flip_social_free_explore()
+void flip_social_free_explore(void)
 {
-    if (!flip_social_explore)
+    if (!app_instance)
     {
         return;
     }
-    for (int i = 0; i < flip_social_explore->count; i++)
+    if (app_instance->submenu_explore)
     {
-        if (flip_social_explore->usernames[i])
-        {
-            free(flip_social_explore->usernames[i]);
-        }
+        submenu_free(app_instance->submenu_explore);
+        app_instance->submenu_explore = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInExploreSubmenu);
+    }
+    if (!flip_social_explore)
+    {
+        return;
     }
     free(flip_social_explore);
     flip_social_explore = NULL;
@@ -43,7 +59,7 @@ void flip_social_free_explore()
 
 // for now we're just listing the current users
 // as the feed is upgraded, then we can port more to the explore view
-bool flip_social_get_explore()
+bool flip_social_get_explore(void)
 {
     if (fhttp.state == INACTIVE)
     {
@@ -67,7 +83,7 @@ bool flip_social_get_explore()
     return true;
 }
 
-bool flip_social_parse_json_explore()
+bool flip_social_parse_json_explore(void)
 {
     // load the received data from the saved file
     FuriString *user_data = flipper_http_load_from_file(fhttp.file_path);
@@ -94,72 +110,27 @@ bool flip_social_parse_json_explore()
         return false;
     }
 
-    // Remove newlines
-    char *pos = data_cstr;
-    while ((pos = strchr(pos, '\n')) != NULL)
-    {
-        *pos = ' ';
-    }
-
     // Initialize explore count
     flip_social_explore->count = 0;
 
-    // Extract the users array from the JSON
-    char *json_users = get_json_value("users", data_cstr, MAX_TOKENS); // currently it's about 480 tokens
-    if (json_users == NULL)
-    {
-        FURI_LOG_E(TAG, "Failed to parse users array.");
-        furi_string_free(user_data);
-        free(data_cstr);
-        return false;
-    }
-
-    // Manual tokenization for comma-separated values
-    char *start = json_users + 1; // Skip the opening bracket
-    char *end;
-    while ((end = strchr(start, ',')) != NULL && flip_social_explore->count < MAX_EXPLORE_USERS)
-    {
-        *end = '\0'; // Null-terminate the current token
-
-        // Remove quotes
-        if (*start == '"')
-            start++;
-        if (*(end - 1) == '"')
-            *(end - 1) = '\0';
-
-        // Copy username to pre-allocated memory
-        snprintf(flip_social_explore->usernames[flip_social_explore->count], MAX_USER_LENGTH, "%s", start);
-        flip_social_explore->count++;
-        start = end + 1;
-    }
-
-    // Handle the last token
-    if (*start != '\0' && flip_social_explore->count < MAX_EXPLORE_USERS)
-    {
-        if (*start == '"')
-            start++;
-        if (*(start + strlen(start) - 1) == ']')
-            *(start + strlen(start) - 1) = '\0';
-        if (*(start + strlen(start) - 1) == '"')
-            *(start + strlen(start) - 1) = '\0';
-
-        snprintf(flip_social_explore->usernames[flip_social_explore->count], MAX_USER_LENGTH, "%s", start);
-        flip_social_explore->count++;
-    }
-
-    // Add submenu items for the users
+    // set submenu
     submenu_reset(app_instance->submenu_explore);
     submenu_set_header(app_instance->submenu_explore, "Explore");
-    for (int i = 0; i < flip_social_explore->count; i++)
+
+    // Parse the JSON array of usernames
+    for (size_t i = 0; i < MAX_EXPLORE_USERS; i++)
     {
+        char *username = get_json_array_value("users", i, data_cstr, MAX_TOKENS);
+        if (username == NULL)
+        {
+            break;
+        }
+        snprintf(flip_social_explore->usernames[i], MAX_USER_LENGTH, "%s", username);
         submenu_add_item(app_instance->submenu_explore, flip_social_explore->usernames[i], FlipSocialSubmenuExploreIndexStartIndex + i, flip_social_callback_submenu_choices, app_instance);
+        flip_social_explore->count++;
+        free(username);
     }
-
-    // Free the json_users
-    free(json_users);
-    free(start);
-    free(end);
-    furi_string_free(user_data);
     free(data_cstr);
+    furi_string_free(user_data);
     return flip_social_explore->count > 0;
 }

+ 2 - 31
flip_social.c

@@ -52,26 +52,7 @@ void flip_social_app_free(FlipSocialApp *app)
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInSubmenu);
         submenu_free(app->submenu_logged_in);
     }
-    if (app->submenu_compose)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInCompose);
-        submenu_free(app->submenu_compose);
-    }
-    if (app->submenu_explore)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInExploreSubmenu);
-        submenu_free(app->submenu_explore);
-    }
-    if (app->submenu_friends)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInFriendsSubmenu);
-        submenu_free(app->submenu_friends);
-    }
-    if (app->submenu_messages)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesSubmenu);
-        submenu_free(app->submenu_messages);
-    }
+    //
     if (app->submenu_messages_user_choices)
     {
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesUserChoices);
@@ -178,16 +159,6 @@ void flip_social_app_free(FlipSocialApp *app)
     }
 
     // Free Widget(s)
-    if (app->widget_logged_out_about)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutAbout);
-        widget_free(app->widget_logged_out_about);
-    }
-    if (app->widget_logged_in_about)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
-        widget_free(app->widget_logged_in_about);
-    }
     if (app->widget_result)
     {
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewWidgetResult);
@@ -348,4 +319,4 @@ void flip_feed_info_free(void)
     }
     free(flip_feed_info);
     flip_feed_info = NULL;
-}
+}

+ 6 - 30
friends/flip_social_friends.c

@@ -19,23 +19,6 @@ FlipSocialModel *flip_social_friends_alloc()
     return friends;
 }
 
-void flip_social_free_friends()
-{
-    if (!flip_social_friends)
-    {
-        return;
-    }
-    for (int i = 0; i < flip_social_friends->count; i++)
-    {
-        if (flip_social_friends->usernames[i])
-        {
-            free(flip_social_friends->usernames[i]);
-        }
-    }
-    free(flip_social_friends);
-    flip_social_friends = NULL;
-}
-
 // for now we're just listing the current users
 // as the feed is upgraded, then we can port more to the friends view
 bool flip_social_get_friends()
@@ -129,6 +112,10 @@ bool flip_social_parse_json_friends()
     // Initialize friends count
     flip_social_friends->count = 0;
 
+    // Reset the friends submenu
+    submenu_reset(app_instance->submenu_friends);
+    submenu_set_header(app_instance->submenu_friends, "Friends");
+
     // Extract the users array from the JSON
     char *json_users = get_json_value("friends", data_cstr, MAX_TOKENS);
     if (json_users == NULL)
@@ -136,7 +123,6 @@ bool flip_social_parse_json_friends()
         FURI_LOG_E(TAG, "Failed to parse friends array.");
         furi_string_free(friend_data);
         free(data_cstr);
-        flip_social_free_friends();
         return false;
     }
 
@@ -155,6 +141,7 @@ bool flip_social_parse_json_friends()
 
         // Copy username to pre-allocated memory
         snprintf(flip_social_friends->usernames[flip_social_friends->count], MAX_USER_LENGTH, "%s", start);
+        submenu_add_item(app_instance->submenu_friends, flip_social_friends->usernames[flip_social_friends->count], FlipSocialSubmenuLoggedInIndexFriendsStart + flip_social_friends->count, flip_social_callback_submenu_choices, app_instance);
         flip_social_friends->count++;
         start = end + 1;
     }
@@ -170,21 +157,10 @@ bool flip_social_parse_json_friends()
             *(start + strlen(start) - 1) = '\0';
 
         snprintf(flip_social_friends->usernames[flip_social_friends->count], MAX_USER_LENGTH, "%s", start);
+        submenu_add_item(app_instance->submenu_friends, flip_social_friends->usernames[flip_social_friends->count], FlipSocialSubmenuLoggedInIndexFriendsStart + flip_social_friends->count, flip_social_callback_submenu_choices, app_instance);
         flip_social_friends->count++;
     }
 
-    // Add submenu items for the friends
-    if (!flip_social_update_friends())
-    {
-        FURI_LOG_E(TAG, "Failed to update friends submenu");
-        furi_string_free(friend_data);
-        free(data_cstr);
-        free(json_users);
-        free(start);
-        free(end);
-        return false;
-    }
-
     furi_string_free(friend_data);
     free(data_cstr);
     free(json_users);

+ 0 - 1
friends/flip_social_friends.h

@@ -4,7 +4,6 @@
 #include <callback/flip_social_callback.h>
 
 FlipSocialModel *flip_social_friends_alloc();
-void flip_social_free_friends();
 bool flip_social_get_friends();
 bool flip_social_update_friends();
 bool flip_social_parse_json_friends();

+ 13 - 18
messages/flip_social_messages.c

@@ -2,6 +2,13 @@
 
 FlipSocialModel2 *flip_social_messages_alloc()
 {
+    if (!app_instance->submenu_messages)
+    {
+        if (!easy_flipper_set_submenu(&app_instance->submenu_messages, FlipSocialViewLoggedInMessagesSubmenu, "Messages", flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher))
+        {
+            return NULL;
+        }
+    }
     // Allocate memory for each username only if not already allocated
     FlipSocialModel2 *users = malloc(sizeof(FlipSocialModel2));
     if (users == NULL)
@@ -63,33 +70,21 @@ void flip_social_free_message_users()
     {
         return;
     }
-    for (int i = 0; i < flip_social_message_users->count; i++)
-    {
-        if (flip_social_message_users->usernames[i])
-        {
-            free(flip_social_message_users->usernames[i]);
-        }
-    }
     free(flip_social_message_users);
     flip_social_message_users = NULL;
 }
 
 void flip_social_free_messages()
 {
-    if (flip_social_messages == NULL)
+    if (app_instance->submenu_messages)
     {
-        return;
+        submenu_free(app_instance->submenu_messages);
+        app_instance->submenu_messages = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInMessagesSubmenu);
     }
-    for (int i = 0; i < flip_social_messages->count; i++)
+    if (flip_social_messages == NULL)
     {
-        if (flip_social_messages->usernames[i])
-        {
-            free(flip_social_messages->usernames[i]);
-        }
-        if (flip_social_messages->messages[i])
-        {
-            free(flip_social_messages->messages[i]);
-        }
+        return;
     }
     free(flip_social_messages);
     flip_social_messages = NULL;