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

Merge seader from https://github.com/bettse/seader

Willy-JL 1 год назад
Родитель
Сommit
43ff28abf2

+ 1 - 19
seader/scenes/seader_scene_card_menu.c

@@ -1,7 +1,6 @@
 #include "../seader_i.h"
 
 enum SubmenuIndex {
-    SubmenuIndexParse,
     SubmenuIndexSave,
     SubmenuIndexSavePicopass,
     SubmenuIndexSaveRFID,
@@ -18,21 +17,8 @@ void seader_scene_card_menu_submenu_callback(void* context, uint32_t index) {
 void seader_scene_card_menu_on_enter(void* context) {
     Seader* seader = context;
     SeaderCredential* credential = seader->credential;
-    PluginWiegand* plugin = seader->plugin_wiegand;
     Submenu* submenu = seader->submenu;
 
-    if(plugin) {
-        size_t format_count = plugin->count(credential->bit_length, credential->credential);
-        if(format_count > 0) {
-            submenu_add_item(
-                submenu,
-                "Parse",
-                SubmenuIndexParse,
-                seader_scene_card_menu_submenu_callback,
-                seader);
-        }
-    }
-
     submenu_add_item(
         submenu, "Save", SubmenuIndexSave, seader_scene_card_menu_submenu_callback, seader);
     submenu_add_item(
@@ -73,6 +59,7 @@ bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) {
         if(event.event == SubmenuIndexSave) {
             scene_manager_set_scene_state(
                 seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSave);
+            seader->credential->save_format = SeaderCredentialSaveFormatAgnostic;
             scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
             consumed = true;
         } else if(event.event == SubmenuIndexSavePicopass) {
@@ -99,11 +86,6 @@ bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) {
             seader->credential->save_format = SeaderCredentialSaveFormatMFC;
             scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
             consumed = true;
-        } else if(event.event == SubmenuIndexParse) {
-            scene_manager_set_scene_state(
-                seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexParse);
-            scene_manager_next_scene(seader->scene_manager, SeaderSceneFormats);
-            consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeBack) {
         consumed = scene_manager_search_and_switch_to_previous_scene(

+ 16 - 0
seader/scenes/seader_scene_read_card_success.c

@@ -16,6 +16,7 @@ void seader_scene_read_card_success_widget_callback(
 void seader_scene_read_card_success_on_enter(void* context) {
     Seader* seader = context;
     SeaderCredential* credential = seader->credential;
+    PluginWiegand* plugin = seader->plugin_wiegand;
     Widget* widget = seader->widget;
 
     FuriString* type_str = furi_string_alloc();
@@ -58,6 +59,18 @@ void seader_scene_read_card_success_on_enter(void* context) {
     widget_add_button_element(
         widget, GuiButtonTypeRight, "More", seader_scene_read_card_success_widget_callback, seader);
 
+    if(plugin) {
+        size_t format_count = plugin->count(credential->bit_length, credential->credential);
+        if(format_count > 0) {
+            widget_add_button_element(
+                seader->widget,
+                GuiButtonTypeCenter,
+                "Parse",
+                seader_scene_read_card_success_widget_callback,
+                seader);
+        }
+    }
+
     widget_add_string_element(
         widget, 64, 5, AlignCenter, AlignCenter, FontPrimary, furi_string_get_cstr(type_str));
     widget_add_string_element(
@@ -100,6 +113,9 @@ bool seader_scene_read_card_success_on_event(void* context, SceneManagerEvent ev
         } else if(event.event == GuiButtonTypeRight) {
             scene_manager_next_scene(seader->scene_manager, SeaderSceneCardMenu);
             consumed = true;
+        } else if(event.event == GuiButtonTypeCenter) {
+            scene_manager_next_scene(seader->scene_manager, SeaderSceneFormats);
+            consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeBack) {
         scene_manager_search_and_switch_to_previous_scene(

+ 7 - 20
seader/seader_credential.c

@@ -200,7 +200,6 @@ bool seader_credential_save_mfc(SeaderCredential* cred, const char* name) {
     uint8_t empty_block[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
     uint8_t pacs_block[16] = {0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
-    bool use_load_path = true;
     bool saved = false;
     FlipperFormat* file = flipper_format_file_alloc(cred->storage);
     FuriString* temp_str;
@@ -211,15 +210,8 @@ bool seader_credential_save_mfc(SeaderCredential* cred, const char* name) {
     memcpy(pacs_block + 8, &swapped, sizeof(swapped));
 
     do {
-        if(use_load_path && !furi_string_empty(cred->load_path)) {
-            // Get directory name
-            path_extract_dirname(furi_string_get_cstr(cred->load_path), temp_str);
-            // Make path to file to save
-            furi_string_cat_printf(temp_str, "/%s%s", name, SEADER_APP_MFC_EXTENSION);
-        } else {
-            furi_string_printf(
-                temp_str, "%s/%s%s", SEADER_APP_MFC_FOLDER, name, SEADER_APP_MFC_EXTENSION);
-        }
+        furi_string_printf(
+            temp_str, "%s/%s%s", SEADER_APP_MFC_FOLDER, name, SEADER_APP_MFC_EXTENSION);
 
         FURI_LOG_D(TAG, "Save as MFC [%s]", furi_string_get_cstr(temp_str));
 
@@ -357,6 +349,9 @@ bool seader_credential_save_agnostic(SeaderCredential* cred, const char* name) {
             furi_string_printf(
                 temp_str, "%s/%s%s", STORAGE_APP_DATA_PATH_PREFIX, name, SEADER_APP_EXTENSION);
         }
+
+        FURI_LOG_D(TAG, "Save as Seader [%s]", furi_string_get_cstr(temp_str));
+
         // Open file
         if(!flipper_format_file_open_always(file, furi_string_get_cstr(temp_str))) break;
 
@@ -394,7 +389,6 @@ bool seader_credential_save_picopass(SeaderCredential* cred, const char* name) {
     uint8_t aia[PICOPASS_BLOCK_LEN] = {0xFF, 0xff, 0xff, 0xff, 0xFF, 0xFf, 0xff, 0xFF};
     uint8_t pacs_cfg[PICOPASS_BLOCK_LEN] = {0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0xe0, 0x14};
 
-    bool use_load_path = true;
     bool saved = false;
     bool withSIO = cred->save_format == SeaderCredentialSaveFormatSR;
     if(withSIO) {
@@ -405,14 +399,7 @@ bool seader_credential_save_picopass(SeaderCredential* cred, const char* name) {
     FuriString* temp_str = furi_string_alloc();
 
     storage_simply_mkdir(cred->storage, EXT_PATH("apps_data/picopass"));
-    if(use_load_path && !furi_string_empty(cred->load_path)) {
-        // Get directory name
-        path_extract_dirname(furi_string_get_cstr(cred->load_path), temp_str);
-        // Make path to file to save
-        furi_string_cat_printf(temp_str, "/%s%s", name, ".picopass");
-    } else {
-        furi_string_printf(temp_str, "%s/%s%s", EXT_PATH("apps_data/picopass"), name, ".picopass");
-    }
+    furi_string_printf(temp_str, "%s/%s%s", EXT_PATH("apps_data/picopass"), name, ".picopass");
 
     FURI_LOG_D(TAG, "Save as Picopass [%s]", furi_string_get_cstr(temp_str));
     uint64_t sentinel = 1ULL << cred->bit_length;
@@ -536,7 +523,7 @@ bool seader_credential_save_picopass(SeaderCredential* cred, const char* name) {
 bool seader_credential_save_rfid(SeaderCredential* cred, const char* name) {
     bool result = false;
     FuriString* file_path = furi_string_alloc();
-    furi_string_printf(file_path, "%s/%s%s", ANY_PATH("lfrfid"), name, ".rfid");
+    furi_string_printf(file_path, "%s/%s%s", EXT_PATH("lfrfid"), name, ".rfid");
     ProtocolDict* dict = protocol_dict_alloc(lfrfid_protocols, LFRFIDProtocolMax);
     ProtocolId protocol = LFRFIDProtocolHidGeneric;
 

+ 1 - 1
seader/seader_credential.h

@@ -11,7 +11,7 @@
 #define SEADER_CRED_NAME_MAX_LEN 22
 #define SEADER_APP_EXTENSION     ".credential"
 #define SEADER_APP_MFC_EXTENSION ".nfc"
-#define SEADER_APP_MFC_FOLDER    ANY_PATH("nfc")
+#define SEADER_APP_MFC_FOLDER    EXT_PATH("nfc")
 
 typedef void (*SeaderLoadingCallback)(void* context, bool state);