Luu пре 11 месеци
родитељ
комит
dabeca9d10

+ 2 - 0
api/metroflip/metroflip_api.h

@@ -24,6 +24,7 @@ extern "C" {
 
 void metroflip_exit_widget_callback(GuiButtonType result, InputType type, void* context);
 void metroflip_save_widget_callback(GuiButtonType result, InputType type, void* context);
+void metroflip_delete_widget_callback(GuiButtonType result, InputType type, void* context);
 
 void metroflip_app_blink_start(Metroflip* metroflip);
 
@@ -138,6 +139,7 @@ extern const Icon I_RFIDDolphinReceive_97x61;
 extern const Icon I_icon;
 extern const Icon I_DolphinDone_80x58;
 extern const Icon I_WarningDolphinFlip_45x42;
+extern const Icon I_DolphinMafia_119x62;
 
 void render_section_header(
     FuriString* str,

+ 3 - 1
api/metroflip/metroflip_api_table_i.h

@@ -10,6 +10,7 @@ static constexpr auto metroflip_api_table = sort(create_array_t<sym_entry>(
     // metroflip stuff
     API_METHOD(metroflip_exit_widget_callback, void, (GuiButtonType, InputType, void*)),
     API_METHOD(metroflip_save_widget_callback, void, (GuiButtonType, InputType, void*)),
+    API_METHOD(metroflip_delete_widget_callback, void, (GuiButtonType, InputType, void*)),
     API_METHOD(metroflip_app_blink_start, void, (Metroflip*)),
     API_METHOD(metroflip_app_blink_stop, void, (Metroflip*)),
     API_METHOD(bit_slice_to_dec, int, (const char*, int, int)),
@@ -76,4 +77,5 @@ static constexpr auto metroflip_api_table = sort(create_array_t<sym_entry>(
     API_METHOD(render_section_header, void, (FuriString*, const char*, uint8_t, uint8_t)),
     API_METHOD(mosgortrans_parse_transport_block, bool, (const MfClassicBlock*, FuriString*)),
     API_VARIABLE(I_WarningDolphinFlip_45x42, Icon),
-    API_VARIABLE(I_DolphinDone_80x58, Icon)));
+    API_VARIABLE(I_DolphinDone_80x58, Icon),
+    API_VARIABLE(I_DolphinMafia_119x62, Icon)));

BIN
images/DolphinMafia_119x62.png


+ 9 - 0
metroflip.c

@@ -170,6 +170,15 @@ void metroflip_save_widget_callback(GuiButtonType result, InputType type, void*
     }
 }
 
+void metroflip_delete_widget_callback(GuiButtonType result, InputType type, void* context) {
+    Metroflip* app = context;
+    UNUSED(result);
+
+    if(type == InputTypeShort) {
+        scene_manager_next_scene(app->scene_manager, MetroflipSceneDelete);
+    }
+}
+
 // Calypso
 
 void byte_to_binary(uint8_t byte, char* bits) {

+ 1 - 0
metroflip_i.h

@@ -97,6 +97,7 @@ typedef struct {
     CardType mfc_card_type;
     NfcProtocol protocol;
     const char* file_path;
+    char delete_file_path[256];
 
     // Calypso specific context
     CalypsoContext* calypso_context;

+ 1 - 0
scenes/metroflip_scene_config.h

@@ -4,6 +4,7 @@ ADD_SCENE(metroflip, parse, Parse)
 ADD_SCENE(metroflip, ovc, OVC)
 ADD_SCENE(metroflip, save, Save)
 ADD_SCENE(metroflip, save_result, SaveResult)
+ADD_SCENE(metroflip, delete, Delete)
 ADD_SCENE(metroflip, supported, Supported)
 ADD_SCENE(metroflip, about, About)
 ADD_SCENE(metroflip, credits, Credits)

+ 62 - 0
scenes/metroflip_scene_delete.c

@@ -0,0 +1,62 @@
+#include "../metroflip_i.h"
+#include "../api/metroflip/metroflip_api.h"
+#include <stdio.h>
+enum PopupEvent {
+    PopupEventExit,
+};
+
+static void metroflip_scene_delete_popup_callback(void* context) {
+    Metroflip* app = context;
+
+    view_dispatcher_send_custom_event(app->view_dispatcher, PopupEventExit);
+}
+
+void metroflip_scene_delete_on_enter(void* context) {
+    Metroflip* app = context;
+    Popup* popup = app->popup;
+
+    Storage* storage = furi_record_open(RECORD_STORAGE);
+    FURI_LOG_I("PATH", "PATH: %s", app->delete_file_path);
+    bool success = storage_simply_remove(storage, app->delete_file_path);
+    furi_record_close(RECORD_STORAGE);
+    if(success) {
+        popup_set_icon(popup, 0, 2, &I_DolphinMafia_119x62);
+        popup_set_header(popup, "Deleted", 80, 19, AlignLeft, AlignBottom);
+        popup_enable_timeout(popup);
+    } else {
+        popup_set_icon(popup, 69, 15, &I_WarningDolphinFlip_45x42);
+        popup_set_header(popup, "Error!", 13, 22, AlignLeft, AlignBottom);
+        popup_disable_timeout(popup);
+    }
+    popup_set_timeout(popup, 1500);
+    popup_set_context(popup, app);
+    popup_set_callback(popup, metroflip_scene_delete_popup_callback);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewPopup);
+}
+
+bool metroflip_scene_delete_on_event(void* context, SceneManagerEvent event) {
+    Metroflip* app = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeCustom) {
+        consumed = true;
+        switch(event.event) {
+        case PopupEventExit:
+            scene_manager_search_and_switch_to_previous_scene(
+                app->scene_manager, MetroflipSceneStart);
+            break;
+        default:
+            break;
+        }
+    }
+
+    return consumed;
+}
+
+void metroflip_scene_delete_on_exit(void* context) {
+    Metroflip* app = context;
+    app->delete_file_path[0] = '\0';
+
+    popup_reset(app->popup);
+}

+ 6 - 0
scenes/metroflip_scene_load.c

@@ -101,6 +101,12 @@ void metroflip_scene_load_on_enter(void* context) {
                 has_card_type = false;
             }
             app->file_path = furi_string_get_cstr(file_path);
+            strncpy(
+                app->delete_file_path,
+                furi_string_get_cstr(file_path),
+                sizeof(app->delete_file_path) - 1);
+            app->delete_file_path[sizeof(app->delete_file_path) - 1] = '\0';
+
             app->data_loaded = true;
         } while(0);
         flipper_format_free(format);

+ 2 - 0
scenes/plugins/bip.c

@@ -359,6 +359,8 @@ static void bip_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_classic_free(mfc_data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/charliecard.c

@@ -1274,6 +1274,8 @@ static void charliecard_on_enter(Metroflip* app) {
                 widget, 0, 0, 128, 64, furi_string_get_cstr(parsed_data));
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
 
             mf_classic_free(mfc_data);
             furi_string_free(parsed_data);

+ 2 - 0
scenes/plugins/clipper.c

@@ -625,6 +625,8 @@ static void clipper_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_desfire_free(data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/itso.c

@@ -171,6 +171,8 @@ static void itso_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_desfire_free(data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/metromoney.c

@@ -164,6 +164,8 @@ static void metromoney_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_classic_free(mfc_data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/myki.c

@@ -154,6 +154,8 @@ static void myki_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_desfire_free(data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/opal.c

@@ -269,6 +269,8 @@ static void opal_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);
         }

+ 2 - 0
scenes/plugins/smartrider.c

@@ -357,6 +357,8 @@ static void smartrider_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_classic_free(mfc_data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);

+ 2 - 0
scenes/plugins/troika.c

@@ -261,6 +261,8 @@ static void troika_on_enter(Metroflip* app) {
 
             widget_add_button_element(
                 widget, GuiButtonTypeRight, "Exit", metroflip_exit_widget_callback, app);
+            widget_add_button_element(
+                widget, GuiButtonTypeCenter, "Delete", metroflip_delete_widget_callback, app);
             mf_classic_free(mfc_data);
             furi_string_free(parsed_data);
             view_dispatcher_switch_to_view(app->view_dispatcher, MetroflipViewWidget);