jblanked 1 год назад
Родитель
Сommit
97c60ee38d

+ 0 - 6
alloc/flip_social_alloc.c

@@ -203,12 +203,6 @@ FlipSocialApp *flip_social_app_alloc()
     submenu_add_item(app->submenu_logged_in, "Settings", FlipSocialSubmenuLoggedInIndexSettings, 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_logged_in, "Sign Out", FlipSocialSubmenuLoggedInSignOutButton, 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))
-    {
-        return NULL;
-    }
-
     // Setup Variable Item List(s)
     // Setup Variable Item List(s)
     if (!easy_flipper_set_variable_item_list(&app->variable_item_list_logged_out_wifi_settings, FlipSocialViewLoggedOutWifiSettings, flip_social_text_input_logged_out_wifi_settings_item_selected, flip_social_callback_to_submenu_logged_out, &app->view_dispatcher, app))
     if (!easy_flipper_set_variable_item_list(&app->variable_item_list_logged_out_wifi_settings, FlipSocialViewLoggedOutWifiSettings, flip_social_text_input_logged_out_wifi_settings_item_selected, flip_social_callback_to_submenu_logged_out, &app->view_dispatcher, app))
     {
     {

+ 0 - 1
alloc/flip_social_alloc.h

@@ -3,7 +3,6 @@
 #include <flip_social.h>
 #include <flip_social.h>
 #include <callback/flip_social_callback.h>
 #include <callback/flip_social_callback.h>
 #include <flip_storage/flip_social_storage.h>
 #include <flip_storage/flip_social_storage.h>
-#include <draw/flip_social_draw.h>
 
 
 /**
 /**
  * @brief Function to allocate resources for the FlipSocialApp.
  * @brief Function to allocate resources for the FlipSocialApp.

+ 149 - 3
callback/flip_social_callback.c

@@ -354,6 +354,15 @@ static void flip_social_free_compose_dialog()
         view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewComposeDialog);
         view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewComposeDialog);
     }
     }
 }
 }
+static void flip_social_free_feed_dialog()
+{
+    if (app_instance->dialog_feed)
+    {
+        dialog_ex_free(app_instance->dialog_feed);
+        app_instance->dialog_feed = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewFeedDialog);
+    }
+}
 
 
 /**
 /**
  * @brief Navigation callback to go back to the submenu Logged in.
  * @brief Navigation callback to go back to the submenu Logged in.
@@ -478,7 +487,6 @@ uint32_t flip_social_callback_to_explore_logged_in(void *context)
     {
     {
         flip_social_explore->index = 0;
         flip_social_explore->index = 0;
     }
     }
-    action = ActionNone;
     return FlipSocialViewLoggedInExploreSubmenu;
     return FlipSocialViewLoggedInExploreSubmenu;
 }
 }
 
 
@@ -494,7 +502,6 @@ uint32_t flip_social_callback_to_friends_logged_in(void *context)
     last_explore_response = "";
     last_explore_response = "";
     flip_social_dialog_shown = false;
     flip_social_dialog_shown = false;
     flip_social_friends->index = 0;
     flip_social_friends->index = 0;
-    action = ActionNone;
     return FlipSocialViewLoggedInFriendsSubmenu;
     return FlipSocialViewLoggedInFriendsSubmenu;
 }
 }
 
 
@@ -524,6 +531,7 @@ static void free_flip_social_group()
 {
 {
     flip_social_free_messages();
     flip_social_free_messages();
     flip_social_free_explore();
     flip_social_free_explore();
+    flip_social_free_feed_dialog();
 }
 }
 
 
 /**
 /**
@@ -739,6 +747,145 @@ static void compose_dialog_callback(DialogExResult result, void *context)
         return;
         return;
     }
     }
 }
 }
+static void feed_dialog_callback(DialogExResult result, void *context)
+{
+    furi_assert(context);
+    FlipSocialApp *app = (FlipSocialApp *)context;
+    if (result == DialogExResultLeft) // Previous message
+    {
+        if (flip_feed_info->index > 0)
+        {
+            flip_feed_info->index--;
+        }
+        // switch view, free dialog, re-alloc dialog, switch back to dialog
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSubmenu);
+        // load feed item
+        if (!flip_social_load_feed_post(flip_feed_info->ids[flip_feed_info->index]))
+        {
+            FURI_LOG_E(TAG, "Failed to load nexy feed post");
+            fhttp.state = ISSUE;
+            return;
+        }
+        if (feed_dialog_alloc())
+        {
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewFeedDialog);
+        }
+        else
+        {
+            FURI_LOG_E(TAG, "Failed to allocate feed dialog");
+            fhttp.state = ISSUE;
+            return;
+        }
+    }
+    else if (result == DialogExResultRight) // Next message
+    {
+        if (flip_feed_info->index < flip_feed_info->count - 1)
+        {
+            flip_feed_info->index++;
+        }
+        // switch view, free dialog, re-alloc dialog, switch back to dialog
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSubmenu);
+        // load feed item
+        if (!flip_social_load_feed_post(flip_feed_info->ids[flip_feed_info->index]))
+        {
+            FURI_LOG_E(TAG, "Failed to load nexy feed post");
+            fhttp.state = ISSUE;
+            return;
+        }
+        if (feed_dialog_alloc())
+        {
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewFeedDialog);
+        }
+        else
+        {
+            FURI_LOG_E(TAG, "Failed to allocate feed dialog");
+            fhttp.state = ISSUE;
+            return;
+        }
+    }
+    else if (result == DialogExResultCenter) // Flip/Unflip
+    {
+        // Moved to above the is_flipped check
+        if (!flip_feed_item->is_flipped)
+        {
+            // increase the flip count
+            flip_feed_item->flips++;
+        }
+        else
+        {
+            // decrease the flip count
+            flip_feed_item->flips--;
+        }
+        // change the flip status
+        flip_feed_item->is_flipped = !flip_feed_item->is_flipped;
+        // send post request to flip the message
+        if (app_instance->login_username_logged_in == NULL)
+        {
+            FURI_LOG_E(TAG, "Username is NULL");
+            return;
+        }
+        char payload[256];
+        snprintf(payload, sizeof(payload), "{\"username\":\"%s\",\"post_id\":\"%u\"}", app_instance->login_username_logged_in, flip_feed_item->id);
+        if (flipper_http_post_request_with_headers("https://www.flipsocial.net/api/feed/flip/", auth_headers, payload))
+        {
+            // save feed item
+            char new_save[256];
+            snprintf(new_save, sizeof(new_save), "{\"id\":%u,\"username\":\"%s\",\"message\":\"%s\",\"flip_count\":%u,\"flipped\":%s}",
+                     flip_feed_item->id, flip_feed_item->username, flip_feed_item->message, flip_feed_item->flips, flip_feed_item->is_flipped ? "true" : "false");
+            if (!flip_social_save_post((char *)flip_feed_item->id, new_save))
+            {
+                FURI_LOG_E(TAG, "Failed to save the feed post");
+                fhttp.state = ISSUE;
+                return;
+            }
+        }
+        // switch view, free dialog, re-alloc dialog, switch back to dialog
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSubmenu);
+        if (feed_dialog_alloc())
+        {
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewFeedDialog);
+        }
+        else
+        {
+            FURI_LOG_E(TAG, "Failed to allocate feed dialog");
+            fhttp.state = ISSUE;
+            return;
+        }
+    }
+}
+bool feed_dialog_alloc()
+{
+    if (!flip_feed_item)
+    {
+        FURI_LOG_E(TAG, "Feed item is NULL");
+        return false;
+    }
+    flip_social_free_feed_dialog();
+    if (!app_instance->dialog_feed)
+    {
+        if (!easy_flipper_set_dialog_ex(
+                &app_instance->dialog_feed,
+                FlipSocialViewFeedDialog,
+                flip_feed_item->username,
+                0,
+                0,
+                flip_feed_item->message,
+                0,
+                10,
+                flip_feed_info->index != 0 ? "Prev" : NULL,
+                flip_feed_info->index != flip_feed_info->count - 1 ? "Next" : NULL,
+                flip_feed_item->is_flipped ? "Unflip" : "Flip",
+                feed_dialog_callback,
+                flip_social_callback_to_submenu_logged_in,
+                &app_instance->view_dispatcher,
+                app_instance))
+        {
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
 
 
 /**
 /**
  * @brief Handle ALL submenu item selections.
  * @brief Handle ALL submenu item selections.
@@ -838,7 +985,6 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInComposeAddPreSaveInput);
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInComposeAddPreSaveInput);
         break;
         break;
     default:
     default:
-        action = ActionNone;
         // Handle the pre-saved message selection (has a max of 25 items)
         // Handle the pre-saved message selection (has a max of 25 items)
         if (index >= FlipSocialSubemnuComposeIndexStartIndex && index < FlipSocialSubemnuComposeIndexStartIndex + MAX_PRE_SAVED_MESSAGES)
         if (index >= FlipSocialSubemnuComposeIndexStartIndex && index < FlipSocialSubemnuComposeIndexStartIndex + MAX_PRE_SAVED_MESSAGES)
         {
         {

+ 1 - 2
callback/flip_social_callback.h

@@ -6,7 +6,6 @@
 #include <friends/flip_social_friends.h>
 #include <friends/flip_social_friends.h>
 #include <explore/flip_social_explore.h>
 #include <explore/flip_social_explore.h>
 #include <feed/flip_social_feed.h>
 #include <feed/flip_social_feed.h>
-#include <draw/flip_social_draw.h>
 #include <flip_storage/flip_social_storage.h>
 #include <flip_storage/flip_social_storage.h>
 
 
 void flip_social_request_error_draw(Canvas *canvas);
 void flip_social_request_error_draw(Canvas *canvas);
@@ -300,5 +299,5 @@ void flip_social_loader_free_model(View *view);
 bool flip_social_custom_event_callback(void *context, uint32_t index);
 bool flip_social_custom_event_callback(void *context, uint32_t index);
 
 
 bool messages_dialog_alloc(bool free_first);
 bool messages_dialog_alloc(bool free_first);
-
+bool feed_dialog_alloc();
 #endif
 #endif

+ 10 - 1
feed/flip_social_feed.c

@@ -264,7 +264,16 @@ bool flip_social_load_initial_feed()
         loading_free(app_instance->loading);
         loading_free(app_instance->loading);
         return false;
         return false;
     }
     }
-    view_dispatcher_switch_to_view(app_instance->view_dispatcher, FlipSocialViewLoggedInFeed);
+    if (!feed_dialog_alloc())
+    {
+        FURI_LOG_E(TAG, "Failed to allocate feed dialog");
+        fhttp.state = ISSUE;
+        view_dispatcher_switch_to_view(app_instance->view_dispatcher, FlipSocialViewLoggedInSubmenu);
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoading);
+        loading_free(app_instance->loading);
+        return false;
+    }
+    view_dispatcher_switch_to_view(app_instance->view_dispatcher, FlipSocialViewFeedDialog);
     view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoading);
     view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoading);
     loading_free(app_instance->loading);
     loading_free(app_instance->loading);
 
 

+ 0 - 5
flip_social.c

@@ -172,11 +172,6 @@ void flip_social_app_free(FlipSocialApp *app)
         flip_social_loader_free_model(app->view_loader);
         flip_social_loader_free_model(app->view_loader);
         view_free(app->view_loader);
         view_free(app->view_loader);
     }
     }
-    if (app->view_process_feed)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInFeed);
-        view_free(app->view_process_feed);
-    }
 
 
     if (app->view_dispatcher)
     if (app->view_dispatcher)
         view_dispatcher_free(app->view_dispatcher);
         view_dispatcher_free(app->view_dispatcher);

+ 2 - 3
flip_social.h

@@ -152,6 +152,7 @@ typedef enum
     FlipSocialViewFriendsDialog,  // The dialog for the friends screen
     FlipSocialViewFriendsDialog,  // The dialog for the friends screen
     FlipSocialViewMessagesDialog, // The dialog for the messages screen
     FlipSocialViewMessagesDialog, // The dialog for the messages screen
     FlipSocialViewComposeDialog,  // The dialog for the compose screen
     FlipSocialViewComposeDialog,  // The dialog for the compose screen
+    FlipSocialViewFeedDialog,     // The dialog for the feed screen
 } FlipSocialView;
 } FlipSocialView;
 
 
 // Define the application structure
 // Define the application structure
@@ -171,9 +172,6 @@ typedef struct
     Widget *widget_logged_out_about;        // The about screen (logged out)
     Widget *widget_logged_out_about;        // The about screen (logged out)
     Widget *widget_logged_in_about;         // The about screen (logged in)
     Widget *widget_logged_in_about;         // The about screen (logged in)
 
 
-    View *view_process_feed;    // Dialog for the feed screen
-    View *view_process_compose; // Dialog for the compose screen (delete or send)
-
     VariableItemList *variable_item_list_logged_out_wifi_settings; // The wifi settings menu
     VariableItemList *variable_item_list_logged_out_wifi_settings; // The wifi settings menu
     VariableItemList *variable_item_list_logged_out_login;         // The login menu
     VariableItemList *variable_item_list_logged_out_login;         // The login menu
     VariableItemList *variable_item_list_logged_out_register;      // The register menu
     VariableItemList *variable_item_list_logged_out_register;      // The register menu
@@ -288,6 +286,7 @@ typedef struct
     DialogEx *dialog_friends;
     DialogEx *dialog_friends;
     DialogEx *dialog_messages;
     DialogEx *dialog_messages;
     DialogEx *dialog_compose;
     DialogEx *dialog_compose;
+    DialogEx *dialog_feed;
 } FlipSocialApp;
 } FlipSocialApp;
 
 
 void flip_social_app_free(FlipSocialApp *app);
 void flip_social_app_free(FlipSocialApp *app);