[FL-1537] NFC launch from archive (#580)

* archive: pass full file path as App argument
* nfc: add starting emulation from Archive
* nfc, ibutton: rework setting key name with path lib
* archive: revert launching app with full file path

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
gornekich 2021-07-16 00:39:21 +03:00 committed by GitHub
parent 851a44dc59
commit a837bc5d00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 14 deletions

View File

@ -3,6 +3,7 @@
#include <callback-connector.h>
#include <m-string.h>
#include <file-worker-cpp.h>
#include <path.h>
const char* iButtonApp::app_folder = "ibutton";
const char* iButtonApp::app_extension = ".ibtn";
@ -325,17 +326,10 @@ bool iButtonApp::load_key(const char* key_name) {
string_t key_path;
string_init_set_str(key_path, key_name);
if(!string_start_with_str_p(key_path, app_folder) ||
!string_end_with_str_p(key_path, app_extension)) {
string_clear(key_path);
return false;
}
result = load_key_data(key_path);
if(result) {
uint8_t folder_end = strlen(app_folder) + 1;
uint8_t extension_start = string_size(key_path) - strlen(app_extension);
string_mid(key_path, folder_end, extension_start - folder_end);
path_extract_filename_no_ext(key_name, key_path);
get_key()->set_name(string_get_cstr(key_path));
}
string_clear(key_path);

View File

@ -95,9 +95,6 @@ Nfc* nfc_alloc() {
NfcViewMifareUl,
nfc_mifare_ul_get_view(nfc->nfc_mifare_ul));
// Run first scene
scene_manager_next_scene(nfc->scene_manager, NfcSceneStart);
return nfc;
}
@ -169,6 +166,13 @@ void nfc_free(Nfc* nfc) {
int32_t nfc_task(void* p) {
Nfc* nfc = nfc_alloc();
// Check argument and run corresponding scene
if(p && nfc_device_load(&nfc->device, p)) {
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
} else {
scene_manager_next_scene(nfc->scene_manager, NfcSceneStart);
}
view_dispatcher_run(nfc->nfc_common.view_dispatcher);
nfc_free(nfc);

View File

@ -1,6 +1,7 @@
#include "nfc_device.h"
#include <file-worker.h>
#include <path.h>
#define NFC_DEVICE_MAX_DATA_LEN 14
@ -86,10 +87,25 @@ static bool nfc_device_load_data(FileWorker* file_worker, string_t path, NfcDevi
return true;
}
bool nfc_device_load(NfcDevice* dev, const char* dev_name) {
bool nfc_device_load(NfcDevice* dev, const char* file_path) {
furi_assert(dev);
furi_assert(file_path);
return true;
FileWorker* file_worker = file_worker_alloc(false);
// Load device data
string_t path;
string_init_set_str(path, file_path);
bool dev_load = nfc_device_load_data(file_worker, path, dev);
if(dev_load) {
// Set device name
path_extract_filename_no_ext(file_path, path);
nfc_device_set_name(dev, string_get_cstr(path));
}
string_clear(path);
file_worker_close(file_worker);
file_worker_free(file_worker);
return dev_load;
}
bool nfc_file_select(NfcDevice* dev) {

View File

@ -55,6 +55,6 @@ void nfc_device_set_name(NfcDevice* dev, const char* name);
bool nfc_device_save(NfcDevice* dev, const char* dev_name);
bool nfc_device_load(NfcDevice* dev, const char* dev_name);
bool nfc_device_load(NfcDevice* dev, const char* file_path);
bool nfc_file_select(NfcDevice* dev);