Просмотр исходного кода

improved memory allocation + updated image

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

+ 0 - 272
alloc/web_crawler_alloc.c

@@ -20,54 +20,7 @@ WebCrawlerApp *web_crawler_app_alloc()
     view_dispatcher_set_custom_event_callback(app->view_dispatcher, web_crawler_custom_event_callback);
 
     // Allocate and initialize temp_buffer and path
-    app->temp_buffer_size_path = 128;
-    app->temp_buffer_size_ssid = 64;
-    app->temp_buffer_size_password = 64;
-    app->temp_buffer_size_file_type = 16;
-    app->temp_buffer_size_file_rename = 128;
     app->temp_buffer_size_http_method = 16;
-    app->temp_buffer_size_headers = 256;
-    app->temp_buffer_size_payload = 256;
-    if (!easy_flipper_set_buffer(&app->temp_buffer_path, app->temp_buffer_size_path))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->path, app->temp_buffer_size_path))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_ssid, app->temp_buffer_size_ssid))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->ssid, app->temp_buffer_size_ssid))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_password, app->temp_buffer_size_password))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->password, app->temp_buffer_size_password))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_file_type, app->temp_buffer_size_file_type))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->file_type, app->temp_buffer_size_file_type))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_file_rename, app->temp_buffer_size_file_rename))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->file_rename, app->temp_buffer_size_file_rename))
-    {
-        return NULL;
-    }
     if (!easy_flipper_set_buffer(&app->temp_buffer_http_method, app->temp_buffer_size_http_method))
     {
         return NULL;
@@ -76,254 +29,29 @@ WebCrawlerApp *web_crawler_app_alloc()
     {
         return NULL;
     }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_headers, app->temp_buffer_size_headers))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->headers, app->temp_buffer_size_headers))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->temp_buffer_payload, app->temp_buffer_size_payload))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->payload, app->temp_buffer_size_payload))
-    {
-        return NULL;
-    }
-
-    // Allocate TextInput views
-    if (!easy_flipper_set_uart_text_input(&app->text_input_path, WebCrawlerViewTextInput, "Enter URL", app->temp_buffer_path, app->temp_buffer_size_path, NULL, web_crawler_back_to_request_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_ssid, WebCrawlerViewTextInputSSID, "Enter SSID", app->temp_buffer_ssid, app->temp_buffer_size_ssid, NULL, web_crawler_back_to_wifi_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_password, WebCrawlerViewTextInputPassword, "Enter Password", app->temp_buffer_password, app->temp_buffer_size_password, NULL, web_crawler_back_to_wifi_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_file_type, WebCrawlerViewTextInputFileType, "Enter File Type", app->temp_buffer_file_type, app->temp_buffer_size_file_type, NULL, web_crawler_back_to_file_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_file_rename, WebCrawlerViewTextInputFileRename, "Enter File Rename", app->temp_buffer_file_rename, app->temp_buffer_size_file_rename, NULL, web_crawler_back_to_file_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_headers, WebCrawlerViewTextInputHeaders, "Enter Headers", app->temp_buffer_headers, app->temp_buffer_size_headers, NULL, web_crawler_back_to_request_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_payload, WebCrawlerViewTextInputPayload, "Enter Payload", app->temp_buffer_payload, app->temp_buffer_size_payload, NULL, web_crawler_back_to_request_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-
-    // Allocate VariableItemList views
-    if (!easy_flipper_set_variable_item_list(&app->variable_item_list_wifi, WebCrawlerViewVariableItemListWifi, web_crawler_wifi_enter_callback, web_crawler_back_to_configure_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_variable_item_list(&app->variable_item_list_file, WebCrawlerViewVariableItemListFile, web_crawler_file_enter_callback, web_crawler_back_to_configure_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_variable_item_list(&app->variable_item_list_request, WebCrawlerViewVariableItemListRequest, web_crawler_request_enter_callback, web_crawler_back_to_configure_callback, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-
-    // set variable items
-    app->path_item = variable_item_list_add(app->variable_item_list_request, "Path", 0, NULL, NULL);
-    app->http_method_item = variable_item_list_add(app->variable_item_list_request, "HTTP Method", 5, web_crawler_http_method_change, app);
-    app->headers_item = variable_item_list_add(app->variable_item_list_request, "Headers", 0, NULL, NULL);
-    app->payload_item = variable_item_list_add(app->variable_item_list_request, "Payload", 0, NULL, NULL);
-    //
-    app->ssid_item = variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);         // index 0
-    app->password_item = variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL); // index 1
-    //
-    app->file_read_item = variable_item_list_add(app->variable_item_list_file, "Read File", 0, NULL, NULL);     // index 0
-    app->file_type_item = variable_item_list_add(app->variable_item_list_file, "Set File Type", 0, NULL, NULL); // index 1
-    app->file_rename_item = variable_item_list_add(app->variable_item_list_file, "Rename File", 0, NULL, NULL); // index 2
-    app->file_delete_item = variable_item_list_add(app->variable_item_list_file, "Delete File", 0, NULL, NULL); // index 3
-
-    if (!app->ssid_item || !app->password_item || !app->file_type_item || !app->file_rename_item || !app->path_item || !app->file_read_item || !app->file_delete_item || !app->http_method_item || !app->headers_item || !app->payload_item)
-    {
-        free_all(app, "Failed to add items to VariableItemList");
-        return NULL;
-    }
-
-    variable_item_set_current_value_text(app->path_item, "");        // Initialize
-    variable_item_set_current_value_text(app->http_method_item, ""); // Initialize
-    variable_item_set_current_value_text(app->headers_item, "");     // Initialize
-    variable_item_set_current_value_text(app->payload_item, "");     // Initialize
-    variable_item_set_current_value_text(app->ssid_item, "");        // Initialize
-    variable_item_set_current_value_text(app->password_item, "");    // Initialize
-    variable_item_set_current_value_text(app->file_type_item, "");   // Initialize
-    variable_item_set_current_value_text(app->file_rename_item, ""); // Initialize
-    variable_item_set_current_value_text(app->file_read_item, "");   // Initialize
-    variable_item_set_current_value_text(app->file_delete_item, ""); // Initialize
 
     // Allocate Submenu views
     if (!easy_flipper_set_submenu(&app->submenu_main, WebCrawlerViewSubmenuMain, VERSION_TAG, web_crawler_exit_app_callback, &app->view_dispatcher))
     {
         return NULL;
     }
-    if (!easy_flipper_set_submenu(&app->submenu_config, WebCrawlerViewSubmenuConfig, "Settings", web_crawler_back_to_main_callback, &app->view_dispatcher))
-    {
-        return NULL;
-    }
 
     // Add Submenu items
     submenu_add_item(app->submenu_main, "Run", WebCrawlerSubmenuIndexRun, web_crawler_submenu_callback, app);
     submenu_add_item(app->submenu_main, "About", WebCrawlerSubmenuIndexAbout, web_crawler_submenu_callback, app);
     submenu_add_item(app->submenu_main, "Settings", WebCrawlerSubmenuIndexConfig, web_crawler_submenu_callback, app);
 
-    submenu_add_item(app->submenu_config, "WiFi", WebCrawlerSubmenuIndexWifi, web_crawler_submenu_callback, app);
-    submenu_add_item(app->submenu_config, "File", WebCrawlerSubmenuIndexFile, web_crawler_submenu_callback, app);
-    submenu_add_item(app->submenu_config, "Request", WebCrawlerSubmenuIndexRequest, web_crawler_submenu_callback, app);
-
     // Main view
     if (!easy_flipper_set_view(&app->view_loader, WebCrawlerViewLoader, web_crawler_loader_draw_callback, NULL, web_crawler_back_to_main_callback, &app->view_dispatcher, app))
     {
         return NULL;
     }
     web_crawler_loader_init(app->view_loader);
-
-    //-- WIDGET ABOUT VIEW --
-    if (!easy_flipper_set_widget(&app->widget_about, WebCrawlerViewAbout, "Web Crawler App\n---\nBrowse the web, fetch API data, and more..\n---\nVisit github.com/jblanked for more details.\n---\nPress BACK to return.", web_crawler_back_to_main_callback, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_widget(&app->widget_file_read, WebCrawlerViewFileRead, "Data will be displayed here.", web_crawler_back_to_file_callback, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_widget(&app->widget_file_delete, WebCrawlerViewFileDelete, "File deleted.", web_crawler_back_to_file_callback, &app->view_dispatcher))
-    {
-        return NULL;
-    }
     if (!easy_flipper_set_widget(&app->widget_result, WebCrawlerViewWidgetResult, "Error, try again.", web_crawler_back_to_main_callback, &app->view_dispatcher))
     {
         return NULL;
     }
 
-    // Load Settings and Update Views
-    if (!load_settings(
-            app->path,
-            app->temp_buffer_size_path,
-            app->ssid,
-            app->temp_buffer_size_ssid,
-            app->password,
-            app->temp_buffer_size_password,
-            app->file_rename,
-            app->temp_buffer_size_file_rename,
-            app->file_type,
-            app->temp_buffer_size_file_type,
-            app->http_method,
-            app->temp_buffer_size_http_method,
-            app->headers,
-            app->temp_buffer_size_headers,
-            app->payload,
-            app->temp_buffer_size_payload,
-            app))
-    {
-        FURI_LOG_E(TAG, "Failed to load settings");
-    }
-    else
-    {
-        // Update the configuration items based on loaded settings
-        if (app->path_item)
-        {
-            variable_item_set_current_value_text(app->path_item, app->path);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->path_item, "https://httpbin.org/get"); // Initialize
-        }
-
-        if (app->ssid_item)
-        {
-            variable_item_set_current_value_text(app->ssid_item, app->ssid);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->ssid_item, ""); // Initialize
-        }
-
-        if (app->file_type_item)
-        {
-            variable_item_set_current_value_text(app->file_type_item, app->file_type);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->file_type_item, ".txt"); // Initialize
-        }
-
-        if (app->file_rename_item)
-        {
-            variable_item_set_current_value_text(app->file_rename_item, app->file_rename);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->file_rename_item, "received_data"); // Initialize
-        }
-
-        if (app->http_method_item)
-        {
-            variable_item_set_current_value_text(app->http_method_item, app->http_method);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->http_method_item, "GET"); // Initialize
-        }
-
-        if (app->headers_item)
-        {
-            variable_item_set_current_value_text(app->headers_item, app->headers);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->headers_item, "{\n\t\"Content-Type\": \"application/json\"\n}"); // Initialize
-        }
-
-        if (app->payload_item)
-        {
-            variable_item_set_current_value_text(app->payload_item, app->payload);
-        }
-        else
-        {
-            variable_item_set_current_value_text(app->payload_item, "{\n\t\"key\": \"value\"\n}"); // Initialize
-        }
-
-        // set the file path for fhttp.file_path
-        // char file_path[128];
-        // snprintf(file_path, sizeof(file_path), "%s%s%s", RECEIVED_DATA_PATH, app->file_rename, app->file_type);
-        // snprintf(fhttp.file_path, sizeof(fhttp.file_path), "%s", file_path);
-
-        // update temp buffers
-        strncpy(app->temp_buffer_path, app->path, app->temp_buffer_size_path - 1);
-        app->temp_buffer_path[app->temp_buffer_size_path - 1] = '\0';
-        strncpy(app->temp_buffer_ssid, app->ssid, app->temp_buffer_size_ssid - 1);
-        app->temp_buffer_ssid[app->temp_buffer_size_ssid - 1] = '\0';
-        strncpy(app->temp_buffer_file_type, app->file_type, app->temp_buffer_size_file_type - 1);
-        app->temp_buffer_file_type[app->temp_buffer_size_file_type - 1] = '\0';
-        strncpy(app->temp_buffer_file_rename, app->file_rename, app->temp_buffer_size_file_rename - 1);
-        app->temp_buffer_file_rename[app->temp_buffer_size_file_rename - 1] = '\0';
-        strncpy(app->temp_buffer_http_method, app->http_method, app->temp_buffer_size_http_method - 1);
-        app->temp_buffer_http_method[app->temp_buffer_size_http_method - 1] = '\0';
-        strncpy(app->temp_buffer_headers, app->headers, app->temp_buffer_size_headers - 1);
-        app->temp_buffer_headers[app->temp_buffer_size_headers - 1] = '\0';
-        strncpy(app->temp_buffer_payload, app->payload, app->temp_buffer_size_payload - 1);
-        app->temp_buffer_payload[app->temp_buffer_size_payload - 1] = '\0';
-
-        // Password handling can be omitted for security or handled securely
-    }
-
     // Start with the Submenu view
     view_dispatcher_switch_to_view(app->view_dispatcher, WebCrawlerViewSubmenuMain);
 

BIN
assets/02-main.png


Разница между файлами не показана из-за своего большого размера
+ 682 - 98
callback/web_crawler_callback.c


+ 2 - 8
callback/web_crawler_callback.h

@@ -4,6 +4,8 @@
 #include <flip_storage/web_crawler_storage.h>
 
 void web_crawler_http_method_change(VariableItem *item);
+uint32_t web_crawler_back_to_main_callback(void *context);
+void free_all(WebCrawlerApp *app);
 
 /**
  * @brief      Navigation callback to handle exiting from other views to the submenu.
@@ -12,14 +14,6 @@ void web_crawler_http_method_change(VariableItem *item);
  */
 uint32_t web_crawler_back_to_configure_callback(void *context);
 
-/**
- * @brief      Navigation callback to handle returning to the Wifi Settings screen.
- * @param      context   The context - WebCrawlerApp object.
- * @return     WebCrawlerViewSubmenu
- */
-uint32_t web_crawler_back_to_main_callback(void *context);
-uint32_t web_crawler_back_to_file_callback(void *context);
-
 uint32_t web_crawler_back_to_wifi_callback(void *context);
 
 uint32_t web_crawler_back_to_request_callback(void *context);

+ 11 - 24
flip_storage/web_crawler_storage.c

@@ -239,36 +239,17 @@ bool load_settings(
         return false;
     }
 
-    // set the path, ssid, and password
-    strncpy(app->path, path, path_size);
-    strncpy(app->ssid, ssid, ssid_size);
-    strncpy(app->password, password, password_size);
-    strncpy(app->file_rename, file_rename, file_rename_size);
-    strncpy(app->file_type, file_type, file_type_size);
-    strncpy(app->http_method, http_method, http_method_size);
-    strncpy(app->headers, headers, headers_size);
-    strncpy(app->payload, payload, payload_size);
-
     storage_file_close(file);
     storage_file_free(file);
     furi_record_close(RECORD_STORAGE);
     return true;
 }
 
-bool delete_received_data(WebCrawlerApp *app)
+bool delete_received_data()
 {
-    if (app == NULL)
-    {
-        FURI_LOG_E(TAG, "WebCrawlerApp is NULL");
-        return false;
-    }
     // Open the storage record
     Storage *storage = furi_record_open(RECORD_STORAGE);
-    if (!storage)
-    {
-        FURI_LOG_E(TAG, "Failed to open storage record");
-        return false;
-    }
+    furi_check(storage, "Failed to open storage record");
 
     if (!storage_simply_remove_recursive(storage, RECEIVED_DATA_PATH "received_data.txt"))
     {
@@ -286,13 +267,19 @@ bool delete_received_data(WebCrawlerApp *app)
         return false;
     }
 
-    if (app->file_type == NULL || strlen(app->file_type) == 0)
+    char file_type[16];
+    if (!load_char("file_type", file_type, sizeof(file_type)))
+    {
+        snprintf(file_type, sizeof(file_type), ".txt");
+    }
+    char file_rename[128];
+    if (!load_char("file_rename", file_rename, sizeof(file_rename)))
     {
-        app->file_type = ".txt";
+        snprintf(file_rename, sizeof(file_rename), "received_data");
     }
 
     // Format the new_path
-    int ret_new = snprintf(new_path, 256, "%s%s%s", RECEIVED_DATA_PATH, app->file_rename, app->file_type);
+    int ret_new = snprintf(new_path, 256, "%s%s%s", RECEIVED_DATA_PATH, file_rename, file_type);
     if (ret_new < 0 || (size_t)ret_new >= 256)
     {
         FURI_LOG_E(TAG, "Failed to create new_path");

+ 1 - 1
flip_storage/web_crawler_storage.h

@@ -37,7 +37,7 @@ bool load_settings(
     size_t payload_size,
     WebCrawlerApp *app);
 
-bool delete_received_data(WebCrawlerApp *app);
+bool delete_received_data();
 bool rename_received_data(const char *old_name, const char *new_name, const char *file_type, const char *old_file_type);
 
 bool save_char(

+ 16 - 244
web_crawler.c

@@ -1,189 +1,13 @@
 #include <web_crawler.h>
+#include <callback/web_crawler_callback.h>
 
-void web_crawler_loader_free_model(View *view);
-
-void free_buffers(WebCrawlerApp *app)
-{
-    if (!app)
-    {
-        FURI_LOG_E(TAG, "Invalid app context");
-        return;
-    }
-    if (app->path)
-    {
-        free(app->path);
-        app->path = NULL;
-    }
-
-    if (app->temp_buffer_path)
-    {
-        free(app->temp_buffer_path);
-        app->temp_buffer_path = NULL;
-    }
-
-    if (app->ssid)
-    {
-        free(app->ssid);
-        app->ssid = NULL;
-    }
-
-    if (app->temp_buffer_ssid)
-    {
-        free(app->temp_buffer_ssid);
-        app->temp_buffer_ssid = NULL;
-    }
-
-    if (app->password)
-    {
-        free(app->password);
-        app->password = NULL;
-    }
-
-    if (app->temp_buffer_password)
-    {
-        free(app->temp_buffer_password);
-        app->temp_buffer_password = NULL;
-    }
-
-    if (app->file_type)
-    {
-        free(app->file_type);
-        app->file_type = NULL;
-    }
-
-    if (app->temp_buffer_file_type)
-    {
-        free(app->temp_buffer_file_type);
-        app->temp_buffer_file_type = NULL;
-    }
-
-    if (app->file_rename)
-    {
-        free(app->file_rename);
-        app->file_rename = NULL;
-    }
-
-    if (app->temp_buffer_file_rename)
-    {
-        free(app->temp_buffer_file_rename);
-        app->temp_buffer_file_rename = NULL;
-    }
-
-    if (app->temp_buffer_http_method)
-    {
-        free(app->temp_buffer_http_method);
-        app->temp_buffer_http_method = NULL;
-    }
-
-    if (app->temp_buffer_headers)
-    {
-        free(app->temp_buffer_headers);
-        app->temp_buffer_headers = NULL;
-    }
-
-    if (app->temp_buffer_payload)
-    {
-        free(app->temp_buffer_payload);
-        app->temp_buffer_payload = NULL;
-    }
-
-    if (app->http_method)
-    {
-        free(app->http_method);
-        app->http_method = NULL;
-    }
-
-    if (app->headers)
-    {
-        free(app->headers);
-        app->headers = NULL;
-    }
-
-    if (app->payload)
-    {
-        free(app->payload);
-        app->payload = NULL;
-    }
-}
-
-void free_resources(WebCrawlerApp *app)
-{
-    if (!app)
-    {
-        FURI_LOG_E(TAG, "Invalid app context");
-        return;
-    }
-
-    free_buffers(app);
-}
-
-void free_all(WebCrawlerApp *app, char *reason)
-{
-    if (!app)
-    {
-        FURI_LOG_E(TAG, "Invalid app context");
-        return;
-    }
-    if (reason)
-    {
-        FURI_LOG_I(TAG, reason);
-    }
-
-    if (app->view_loader)
-        view_free(app->view_loader);
-    if (app->submenu_main)
-        submenu_free(app->submenu_main);
-    if (app->submenu_config)
-        submenu_free(app->submenu_config);
-    if (app->variable_item_list_wifi)
-        variable_item_list_free(app->variable_item_list_wifi);
-    if (app->variable_item_list_file)
-        variable_item_list_free(app->variable_item_list_file);
-    if (app->variable_item_list_request)
-        variable_item_list_free(app->variable_item_list_request);
-    if (app->view_dispatcher)
-        view_dispatcher_free(app->view_dispatcher);
-    if (app->widget_about)
-        widget_free(app->widget_about);
-    if (app->widget_file_read)
-        widget_free(app->widget_file_read);
-    if (app->widget_file_delete)
-        widget_free(app->widget_file_delete);
-    if (app->text_input_path)
-        uart_text_input_free(app->text_input_path);
-    if (app->text_input_ssid)
-        uart_text_input_free(app->text_input_ssid);
-    if (app->text_input_password)
-        uart_text_input_free(app->text_input_password);
-    if (app->text_input_file_type)
-        uart_text_input_free(app->text_input_file_type);
-    if (app->text_input_file_rename)
-        uart_text_input_free(app->text_input_file_rename);
-    if (app->text_input_headers)
-        uart_text_input_free(app->text_input_headers);
-    if (app->text_input_payload)
-        uart_text_input_free(app->text_input_payload);
-
-    furi_record_close(RECORD_GUI);
-    free_resources(app);
-}
 /**
  * @brief      Function to free the resources used by WebCrawlerApp.
  * @param      app  The WebCrawlerApp object to free.
  */
 void web_crawler_app_free(WebCrawlerApp *app)
 {
-    if (!app)
-    {
-        FURI_LOG_E(TAG, "Invalid app context");
-        return;
-    }
-
-    if (!app->view_dispatcher)
-    {
-        FURI_LOG_E(TAG, "Invalid view dispatcher");
-        return;
-    }
+    furi_check(app, "web_crawler_app_free: App is NULL");
 
     // Free View(s)
     if (app->view_loader)
@@ -199,81 +23,29 @@ void web_crawler_app_free(WebCrawlerApp *app)
         view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewSubmenuMain);
         submenu_free(app->submenu_main);
     }
-    if (app->submenu_config)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewSubmenuConfig);
-        submenu_free(app->submenu_config);
-    }
-    // Remove and free Variable Item Lists
-    if (app->variable_item_list_wifi)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListWifi);
-        variable_item_list_free(app->variable_item_list_wifi);
-    }
-    if (app->variable_item_list_file)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListFile);
-        variable_item_list_free(app->variable_item_list_file);
-    }
-    if (app->variable_item_list_request)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewVariableItemListRequest);
-        variable_item_list_free(app->variable_item_list_request);
-    }
-
-    // Remove and free Text Input views
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInput);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputSSID);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputPassword);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputFileType);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputFileRename);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputHeaders);
-    view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputPayload);
-    if (app->text_input_path)
-        uart_text_input_free(app->text_input_path);
-    if (app->text_input_ssid)
-        uart_text_input_free(app->text_input_ssid);
-    if (app->text_input_password)
-        uart_text_input_free(app->text_input_password);
-    if (app->text_input_file_type)
-        uart_text_input_free(app->text_input_file_type);
-    if (app->text_input_file_rename)
-        uart_text_input_free(app->text_input_file_rename);
-    if (app->text_input_headers)
-        uart_text_input_free(app->text_input_headers);
-    if (app->text_input_payload)
-        uart_text_input_free(app->text_input_payload);
 
     // Remove and free Widgets
-    if (app->widget_about)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewAbout);
-        widget_free(app->widget_about);
-    }
-    if (app->widget_file_read)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewFileRead);
-        widget_free(app->widget_file_read);
-    }
-    if (app->widget_file_delete)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewFileDelete);
-        widget_free(app->widget_file_delete);
-    }
     if (app->widget_result)
     {
         view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewWidgetResult);
         widget_free(app->widget_result);
     }
 
-    // Free the ViewDispatcher and close GUI
-    if (app->view_dispatcher)
-        view_dispatcher_free(app->view_dispatcher);
-
-    // Free the application structure
-    if (app)
+    // check and free http method
+    if (app->temp_buffer_http_method)
     {
-        free(app);
+        free(app->temp_buffer_http_method);
+        app->temp_buffer_http_method = NULL;
     }
+    if (app->http_method)
+    {
+        free(app->http_method);
+        app->http_method = NULL;
+    }
+
+    free_all(app);
+    furi_record_close(RECORD_STORAGE);
+    view_dispatcher_free(app->view_dispatcher);
+    free(app);
 }
 char *http_method_names[] = {"GET", "POST", "PUT", "DELETE", "DOWNLOAD"};

+ 8 - 28
web_crawler.h

@@ -4,10 +4,8 @@
 
 #include <easy_flipper/easy_flipper.h>
 #include <flipper_http/flipper_http.h>
-#include <jsmn/jsmn.h>
 #include <text_input/uart_text_input.h>
 #include "web_crawler_icons.h"
-#include <storage/storage.h>
 
 #define TAG "Web Crawler"
 #define VERSION_TAG TAG " v1.0"
@@ -44,35 +42,23 @@ typedef enum
     //
     WebCrawlerViewWidgetResult, // The text box that displays the random fact
     WebCrawlerViewLoader,       // The loader screen retrieves data from the internet
+    //
+    WebCrawlerViewWidget,           // Generic widget view
+    WebCrawlerViewVariableItemList, // Generic variable item list view
+    WebCrawlerViewInput,            // Generic text input view
 } WebCrawlerViewIndex;
 
 // Define the application structure
 typedef struct
 {
     ViewDispatcher *view_dispatcher;
-    View *view_main;
-    View *view_run;
     View *view_loader;
+    Widget *widget_result; // The widget that displays the result
     Submenu *submenu_main;
     Submenu *submenu_config;
-    Widget *widget_about;
-    Widget *widget_result; // The widget that displays the result
-
-    UART_TextInput *text_input_path;
-    UART_TextInput *text_input_ssid;
-    UART_TextInput *text_input_password;
-    UART_TextInput *text_input_file_type;
-    UART_TextInput *text_input_file_rename;
-    //
-    UART_TextInput *text_input_headers;
-    UART_TextInput *text_input_payload;
-
-    Widget *widget_file_read;
-    Widget *widget_file_delete;
-
-    VariableItemList *variable_item_list_wifi;
-    VariableItemList *variable_item_list_file;
-    VariableItemList *variable_item_list_request;
+    Widget *widget;
+    VariableItemList *variable_item_list;
+    UART_TextInput *uart_text_input;
 
     VariableItem *path_item;
     VariableItem *ssid_item;
@@ -120,12 +106,6 @@ typedef struct
     uint32_t temp_buffer_size_payload;
 } WebCrawlerApp;
 
-void free_buffers(WebCrawlerApp *app);
-
-void free_resources(WebCrawlerApp *app);
-
-void free_all(WebCrawlerApp *app, char *reason);
-
 /**
  * @brief      Function to free the resources used by WebCrawlerApp.
  * @param      app  The WebCrawlerApp object to free.

Некоторые файлы не были показаны из-за большого количества измененных файлов