web_crawler_free.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. static void free_buffers(WebCrawlerApp *app)
  2. {
  3. if (!app)
  4. {
  5. FURI_LOG_E(TAG, "Invalid app context");
  6. return;
  7. }
  8. if (app->path)
  9. {
  10. free(app->path);
  11. app->path = NULL;
  12. }
  13. if (app->temp_buffer_path)
  14. {
  15. free(app->temp_buffer_path);
  16. app->temp_buffer_path = NULL;
  17. }
  18. if (app->ssid)
  19. {
  20. free(app->ssid);
  21. app->ssid = NULL;
  22. }
  23. if (app->temp_buffer_ssid)
  24. {
  25. free(app->temp_buffer_ssid);
  26. app->temp_buffer_ssid = NULL;
  27. }
  28. if (app->password)
  29. {
  30. free(app->password);
  31. app->password = NULL;
  32. }
  33. if (app->temp_buffer_password)
  34. {
  35. free(app->temp_buffer_password);
  36. app->temp_buffer_password = NULL;
  37. }
  38. }
  39. static void free_resources(WebCrawlerApp *app)
  40. {
  41. if (!app)
  42. {
  43. FURI_LOG_E(TAG, "Invalid app context");
  44. return;
  45. }
  46. free_buffers(app);
  47. free(app);
  48. }
  49. static void free_all(WebCrawlerApp *app, char *reason)
  50. {
  51. FURI_LOG_E(TAG, reason);
  52. if (app->view_main)
  53. view_free(app->view_main);
  54. if (app->submenu)
  55. submenu_free(app->submenu);
  56. if (app->variable_item_list_config)
  57. variable_item_list_free(app->variable_item_list_config);
  58. if (app->view_dispatcher)
  59. view_dispatcher_free(app->view_dispatcher);
  60. if (app->widget_about)
  61. widget_free(app->widget_about);
  62. if (app->textbox)
  63. widget_free(app->textbox);
  64. furi_record_close(RECORD_GUI);
  65. free_resources(app);
  66. }
  67. /**
  68. * @brief Function to free the resources used by WebCrawlerApp.
  69. * @param app The WebCrawlerApp object to free.
  70. */
  71. static void web_crawler_app_free(WebCrawlerApp *app)
  72. {
  73. if (!app)
  74. {
  75. FURI_LOG_E(TAG, "Invalid app context");
  76. return;
  77. }
  78. // Remove and free Main view
  79. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewRun);
  80. view_free(app->view_main);
  81. // diconnect wifi
  82. if (!flipper_http_disconnect_wifi())
  83. {
  84. FURI_LOG_E(TAG, "Failed to disconnect from WiFi");
  85. }
  86. // Deinitialize UART
  87. flipper_http_deinit();
  88. // Remove and free Submenu
  89. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewSubmenu);
  90. submenu_free(app->submenu);
  91. // Remove and free Configuration screen
  92. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewConfigure);
  93. variable_item_list_free(app->variable_item_list_config);
  94. // Remove and free Text Input views
  95. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInput);
  96. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputSSID);
  97. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewTextInputPassword);
  98. // Remove and free About view
  99. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewAbout);
  100. widget_free(app->widget_about);
  101. // Remove and free Textbox view
  102. view_dispatcher_remove_view(app->view_dispatcher, WebCrawlerViewData);
  103. widget_free(app->textbox);
  104. // Free the ViewDispatcher and close GUI
  105. view_dispatcher_free(app->view_dispatcher);
  106. // Free the application structure
  107. free_buffers(app);
  108. free(app);
  109. }