Skip to content

Commit 93cb03f

Browse files
committed
Quality of life
- Improves how the renaming process is done making it more accurate and less likely to go wrong - Improves confirm delete page removing the .txt at the end of the name - Makes it so the whole app runs smoother
1 parent 7fd5152 commit 93cb03f

File tree

11 files changed

+170
-179
lines changed

11 files changed

+170
-179
lines changed

nfc_playlist.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ static void nfc_playlist_free(NfcPlaylist* nfc_playlist) {
117117

118118
furi_string_free(nfc_playlist->settings.base_file_path);
119119
furi_string_free(nfc_playlist->settings.file_path);
120-
free(nfc_playlist->playlist_name);
121120
free(nfc_playlist);
122121
}
123122

scences/confirm_delete.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ void nfc_playlist_confirm_delete_scene_on_enter(void* context) {
1414
FuriString* temp_str = furi_string_alloc();
1515
char* file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.file_path);
1616
furi_string_printf(temp_str, "\e#Delete %s?\e#", strchr(file_path, '/') != NULL ? &strrchr(file_path, '/')[1] : file_path);
17+
furi_string_replace(temp_str, ".txt", "");
1718

1819
widget_add_text_box_element(nfc_playlist->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, furi_string_get_cstr(temp_str), false);
1920
widget_add_button_element(nfc_playlist->widget, GuiButtonTypeLeft, "Cancel", nfc_playlist_confirm_delete_menu_callback, nfc_playlist);
@@ -27,16 +28,17 @@ void nfc_playlist_confirm_delete_scene_on_enter(void* context) {
2728
bool nfc_playlist_confirm_delete_scene_on_event(void* context, SceneManagerEvent event) {
2829
NfcPlaylist* nfc_playlist = context;
2930
bool consumed = false;
30-
Storage* storage = furi_record_open(RECORD_STORAGE);
3131
if(event.type == SceneManagerEventTypeCustom) {
3232
switch(event.event) {
33-
case GuiButtonTypeRight: {
33+
case GuiButtonTypeRight:
34+
Storage* storage = furi_record_open(RECORD_STORAGE);
3435
storage_simply_remove(storage, furi_string_get_cstr(nfc_playlist->settings.file_path));
3536
nfc_playlist->settings.file_selected = false;
3637
nfc_playlist->settings.file_selected_check = false;
3738
nfc_playlist->settings.file_path = nfc_playlist->settings.base_file_path;
39+
furi_record_close(RECORD_STORAGE);
40+
consumed = true;
3841
break;
39-
}
4042
default:
4143
break;
4244
}

scences/emulation.c

Lines changed: 70 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -3,61 +3,14 @@
33

44
NfcPlaylistEmulationState EmulationState = NfcPlaylistEmulationState_Stopped;
55

6-
void nfc_playlist_emulation_scene_on_enter(void* context) {
7-
NfcPlaylist* nfc_playlist = context;
8-
nfc_playlist_emulation_setup(nfc_playlist);
9-
nfc_playlist_emulation_start(nfc_playlist);
10-
}
11-
12-
bool nfc_playlist_emulation_scene_on_event(void* context, SceneManagerEvent event) {
13-
UNUSED(context);
14-
if (event.event == 0 && EmulationState == NfcPlaylistEmulationState_Emulating) {
15-
EmulationState = NfcPlaylistEmulationState_Canceled;
16-
return true;
17-
}
18-
return false;
19-
}
20-
21-
void nfc_playlist_emulation_scene_on_exit(void* context) {
22-
NfcPlaylist* nfc_playlist = context;
23-
EmulationState = NfcPlaylistEmulationState_Stopped;
24-
nfc_playlist_emulation_stop(nfc_playlist);
25-
nfc_playlist_emulation_free(nfc_playlist);
26-
popup_reset(nfc_playlist->popup);
27-
}
28-
29-
void nfc_playlist_emulation_setup(void* context) {
30-
NfcPlaylist* nfc_playlist = context;
31-
nfc_playlist->thread = furi_thread_alloc_ex("NfcPlaylistEmulationWorker", 8192, nfc_playlist_emulation_task, nfc_playlist);
32-
nfc_playlist->nfc_playlist_worker = nfc_playlist_worker_alloc();
33-
}
34-
35-
void nfc_playlist_emulation_free(NfcPlaylist* nfc_playlist) {
36-
furi_assert(nfc_playlist);
37-
furi_thread_free(nfc_playlist->thread);
38-
nfc_playlist_worker_free(nfc_playlist->nfc_playlist_worker);
39-
nfc_playlist->thread = NULL;
40-
nfc_playlist->nfc_playlist_worker = NULL;
41-
}
42-
43-
void nfc_playlist_emulation_start(NfcPlaylist* nfc_playlist) {
44-
furi_assert(nfc_playlist);
45-
furi_thread_start(nfc_playlist->thread);
46-
}
47-
48-
void nfc_playlist_emulation_stop(NfcPlaylist* nfc_playlist) {
49-
furi_assert(nfc_playlist);
50-
furi_thread_join(nfc_playlist->thread);
51-
}
52-
536
int32_t nfc_playlist_emulation_task(void* context) {
547
NfcPlaylist* nfc_playlist = context;
558

569
Storage* storage = furi_record_open(RECORD_STORAGE);
5710
Stream* stream = file_stream_alloc(storage);
5811
FuriString* line = furi_string_alloc();
59-
FuriString* temp_header_str = furi_string_alloc();
60-
FuriString* temp_counter_str = furi_string_alloc();
12+
FuriString* tmp_header_str = furi_string_alloc();
13+
FuriString* tmp_counter_str = furi_string_alloc();
6114

6215
popup_reset(nfc_playlist->popup);
6316
popup_set_context(nfc_playlist->popup, nfc_playlist);
@@ -70,57 +23,57 @@ int32_t nfc_playlist_emulation_task(void* context) {
7023

7124
char* file_path = (char*)furi_string_get_cstr(line);
7225

73-
if (strlen(file_path) <= 1) {continue;}
26+
if(strlen(file_path) <= 1) {continue;}
7427

75-
if (nfc_playlist->settings.emulate_delay > 0 && file_position != 0) {
28+
if(nfc_playlist->settings.emulate_delay > 0 && file_position != 0) {
7629
popup_set_header(nfc_playlist->popup, "Delaying", 64, 10, AlignCenter, AlignTop);
7730
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
7831
int time_counter_delay_ms = (options_emulate_delay[nfc_playlist->settings.emulate_delay]*1000);
7932
do {
80-
furi_string_printf(temp_counter_str, "%ds", (time_counter_delay_ms/1000));
81-
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(temp_counter_str), 64, 50, AlignCenter, AlignTop);
33+
furi_string_printf(tmp_counter_str, "%ds", (time_counter_delay_ms/1000));
34+
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(tmp_counter_str), 64, 50, AlignCenter, AlignTop);
8235
furi_delay_ms(50);
8336
time_counter_delay_ms -= 50;
8437
} while(time_counter_delay_ms > 0 && EmulationState == NfcPlaylistEmulationState_Emulating);
8538
} else if (nfc_playlist->settings.emulate_delay > 0) {
8639
file_position++;
8740
}
8841

89-
if (EmulationState != NfcPlaylistEmulationState_Emulating) {break;}
42+
if(EmulationState != NfcPlaylistEmulationState_Emulating) {break;}
9043

9144
char* file_name = strchr(file_path, '/') != NULL ? &strrchr(file_path, '/')[1] : file_path;
9245
char const* file_ext = &strrchr(file_path, '.')[1];
9346
int time_counter_ms = (options_emulate_timeout[nfc_playlist->settings.emulate_timeout]*1000);
9447

95-
if (storage_file_exists(storage, file_path) == false) {
96-
furi_string_printf(temp_header_str, "ERROR not found:\n %s", file_name);
97-
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(temp_header_str), 64, 10, AlignCenter, AlignTop);
48+
if(storage_file_exists(storage, file_path) == false) {
49+
furi_string_printf(tmp_header_str, "ERROR not found:\n%s", file_name);
50+
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(tmp_header_str), 64, 10, AlignCenter, AlignTop);
9851
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
9952
do {
100-
furi_string_printf(temp_counter_str, "%ds", (time_counter_ms/1000));
101-
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(temp_counter_str), 64, 50, AlignCenter, AlignTop);
53+
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms/1000));
54+
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(tmp_counter_str), 64, 50, AlignCenter, AlignTop);
10255
furi_delay_ms(50);
10356
time_counter_ms -= 50;
10457
} while(time_counter_ms > 0 && EmulationState == NfcPlaylistEmulationState_Emulating);
10558
} else if (strcasestr(file_ext, "nfc") == NULL) {
106-
furi_string_printf(temp_header_str, "ERROR invalid file:\n %s", file_name);
107-
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(temp_header_str), 64, 10, AlignCenter, AlignTop);
59+
furi_string_printf(tmp_header_str, "ERROR invalid file:\n%s", file_name);
60+
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(tmp_header_str), 64, 10, AlignCenter, AlignTop);
10861
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
10962
do {
110-
furi_string_printf(temp_counter_str, "%ds", (time_counter_ms/1000));
111-
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(temp_counter_str), 64, 50, AlignCenter, AlignTop);
63+
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms/1000));
64+
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(tmp_counter_str), 64, 50, AlignCenter, AlignTop);
11265
furi_delay_ms(50);
11366
time_counter_ms -= 50;
11467
} while(time_counter_ms > 0 && EmulationState == NfcPlaylistEmulationState_Emulating);
11568
} else {
116-
furi_string_printf(temp_header_str, "Emulating:\n %s", file_name);
117-
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(temp_header_str), 64, 10, AlignCenter, AlignTop);
69+
furi_string_printf(tmp_header_str, "Emulating:\n%s", file_name);
70+
popup_set_header(nfc_playlist->popup, furi_string_get_cstr(tmp_header_str), 64, 10, AlignCenter, AlignTop);
11871
nfc_playlist_worker_set_nfc_data(nfc_playlist->nfc_playlist_worker, file_path);
11972
nfc_playlist_worker_start(nfc_playlist->nfc_playlist_worker);
12073
start_blink(nfc_playlist, NfcPlaylistLedState_Normal);
12174
do {
122-
furi_string_printf(temp_counter_str, "%ds", (time_counter_ms/1000));
123-
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(temp_counter_str), 64, 50, AlignCenter, AlignTop);
75+
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms/1000));
76+
popup_set_text(nfc_playlist->popup, furi_string_get_cstr(tmp_counter_str), 64, 50, AlignCenter, AlignTop);
12477
furi_delay_ms(50);
12578
time_counter_ms -= 50;
12679
} while(nfc_playlist_worker_is_emulating(nfc_playlist->nfc_playlist_worker) && time_counter_ms > 0 && EmulationState == NfcPlaylistEmulationState_Emulating);
@@ -140,11 +93,59 @@ int32_t nfc_playlist_emulation_task(void* context) {
14093
}
14194

14295
furi_string_free(line);
143-
furi_string_free(temp_header_str);
144-
furi_string_free(temp_counter_str);
96+
furi_string_free(tmp_header_str);
97+
furi_string_free(tmp_counter_str);
14598
file_stream_close(stream);
14699
furi_record_close(RECORD_STORAGE);
147100
stream_free(stream);
148101

149102
return 0;
103+
}
104+
105+
void nfc_playlist_emulation_setup(void* context) {
106+
NfcPlaylist* nfc_playlist = context;
107+
nfc_playlist->thread = furi_thread_alloc_ex("NfcPlaylistEmulationWorker", 8192, nfc_playlist_emulation_task, nfc_playlist);
108+
nfc_playlist->nfc_playlist_worker = nfc_playlist_worker_alloc();
109+
}
110+
111+
void nfc_playlist_emulation_free(NfcPlaylist* nfc_playlist) {
112+
furi_assert(nfc_playlist);
113+
furi_thread_free(nfc_playlist->thread);
114+
nfc_playlist_worker_free(nfc_playlist->nfc_playlist_worker);
115+
nfc_playlist->thread = NULL;
116+
nfc_playlist->nfc_playlist_worker = NULL;
117+
}
118+
119+
void nfc_playlist_emulation_start(NfcPlaylist* nfc_playlist) {
120+
furi_assert(nfc_playlist);
121+
furi_thread_start(nfc_playlist->thread);
122+
}
123+
124+
void nfc_playlist_emulation_stop(NfcPlaylist* nfc_playlist) {
125+
furi_assert(nfc_playlist);
126+
furi_thread_join(nfc_playlist->thread);
127+
}
128+
129+
void nfc_playlist_emulation_scene_on_enter(void* context) {
130+
NfcPlaylist* nfc_playlist = context;
131+
nfc_playlist_emulation_setup(nfc_playlist);
132+
nfc_playlist_emulation_start(nfc_playlist);
133+
}
134+
135+
bool nfc_playlist_emulation_scene_on_event(void* context, SceneManagerEvent event) {
136+
UNUSED(context);
137+
bool consumed = false;
138+
if(event.event == 0 && EmulationState == NfcPlaylistEmulationState_Emulating) {
139+
EmulationState = NfcPlaylistEmulationState_Canceled;
140+
consumed = true;
141+
}
142+
return consumed;
143+
}
144+
145+
void nfc_playlist_emulation_scene_on_exit(void* context) {
146+
NfcPlaylist* nfc_playlist = context;
147+
EmulationState = NfcPlaylistEmulationState_Stopped;
148+
nfc_playlist_emulation_stop(nfc_playlist);
149+
nfc_playlist_emulation_free(nfc_playlist);
150+
popup_reset(nfc_playlist->popup);
150151
}

scences/emulation.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ void nfc_playlist_emulation_scene_on_enter(void* context);
1313
bool nfc_playlist_emulation_scene_on_event(void* context, SceneManagerEvent event);
1414
void nfc_playlist_emulation_scene_on_exit(void* context);
1515

16-
void nfc_playlist_emulation_setup(void* context);
17-
void nfc_playlist_emulation_free(NfcPlaylist* nfc_playlist);
18-
void nfc_playlist_emulation_start(NfcPlaylist* nfc_playlist);
19-
void nfc_playlist_emulation_stop(NfcPlaylist* nfc_playlist);
20-
int32_t nfc_playlist_emulation_task(void* context);
21-
2216
typedef enum NfcPlaylistEmulationState {
2317
NfcPlaylistEmulationState_Emulating,
2418
NfcPlaylistEmulationState_Stopped,

scences/file_edit.c

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
#include "nfc_playlist.h"
22
#include "scences/file_edit.h"
33

4-
typedef enum {
5-
NfcPlaylistMenuSelection_DeletePlaylist,
6-
NfcPlaylistMenuSelection_RenamePlaylist
7-
} NfcPlaylistMenuSelection;
8-
94
void nfc_playlist_file_edit_menu_callback(void* context, uint32_t index) {
105
NfcPlaylist* nfc_playlist = context;
11-
switch(index) {
12-
case NfcPlaylistMenuSelection_DeletePlaylist: {
13-
scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_ConfirmDelete);
14-
break;
15-
}
16-
case NfcPlaylistMenuSelection_RenamePlaylist: {
17-
scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_FileRename);
18-
break;
19-
}
20-
default:
21-
break;
22-
}
6+
scene_manager_handle_custom_event(nfc_playlist->scene_manager, index);
237
}
248

259
void nfc_playlist_file_edit_scene_on_enter(void* context) {
@@ -49,9 +33,23 @@ void nfc_playlist_file_edit_scene_on_enter(void* context) {
4933
}
5034

5135
bool nfc_playlist_file_edit_scene_on_event(void* context, SceneManagerEvent event) {
52-
UNUSED(event);
53-
UNUSED(context);
54-
return false;
36+
NfcPlaylist* nfc_playlist = context;
37+
bool consumed = false;
38+
if(event.type == SceneManagerEventTypeCustom) {
39+
switch(event.event) {
40+
case NfcPlaylistMenuSelection_DeletePlaylist:
41+
scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_ConfirmDelete);
42+
consumed = true;
43+
break;
44+
case NfcPlaylistMenuSelection_RenamePlaylist:
45+
scene_manager_next_scene(nfc_playlist->scene_manager, NfcPlaylistScene_FileRename);
46+
consumed = true;
47+
break;
48+
default:
49+
break;
50+
}
51+
}
52+
return consumed;
5553
}
5654

5755
void nfc_playlist_file_edit_scene_on_exit(void* context) {

scences/file_edit.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@
66

77
void nfc_playlist_file_edit_scene_on_enter(void* context);
88
bool nfc_playlist_file_edit_scene_on_event(void* context, SceneManagerEvent event);
9-
void nfc_playlist_file_edit_scene_on_exit(void* context);
9+
void nfc_playlist_file_edit_scene_on_exit(void* context);
10+
11+
typedef enum {
12+
NfcPlaylistMenuSelection_DeletePlaylist,
13+
NfcPlaylistMenuSelection_RenamePlaylist
14+
} NfcPlaylistFileEditMenuSelection;

scences/file_rename.c

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,24 @@
44
void nfc_playlist_file_rename_menu_callback(void* context) {
55
NfcPlaylist* nfc_playlist = context;
66
Storage* storage = furi_record_open(RECORD_STORAGE);
7-
FuriString* new_file_path = furi_string_alloc();
7+
FuriString* tmp_old_file_path = furi_string_alloc();
8+
FuriString* tmp_new_file_path = furi_string_alloc();
89

910
char const* old_file_path = (char*)furi_string_get_cstr(nfc_playlist->settings.file_path);
1011
char const* old_file_name = strchr(old_file_path, '/') != NULL ? &strrchr(old_file_path, '/')[1] : old_file_path;
1112

12-
int file_path_size = (strlen(old_file_path) - strlen(old_file_name) + 1);
13+
furi_string_printf(tmp_old_file_path, "%s", old_file_path);
14+
furi_string_replace(tmp_old_file_path, old_file_name, "");
1315

14-
char* file_path = (char*)malloc(file_path_size);
15-
snprintf(file_path, file_path_size, "%s", old_file_path);
16+
furi_string_printf(tmp_new_file_path, "%s%s.txt", furi_string_get_cstr(tmp_old_file_path), nfc_playlist->playlist_name);
1617

17-
furi_string_printf(new_file_path, "%s%s.txt", file_path, nfc_playlist->playlist_name);
18-
19-
if (!storage_file_exists(storage, furi_string_get_cstr(new_file_path))) {
20-
storage_common_rename_safe(storage, furi_string_get_cstr(nfc_playlist->settings.file_path), furi_string_get_cstr(new_file_path));
21-
nfc_playlist->settings.file_path = new_file_path;
18+
if(!storage_file_exists(storage, furi_string_get_cstr(tmp_new_file_path))) {
19+
storage_common_rename_safe(storage, furi_string_get_cstr(nfc_playlist->settings.file_path), furi_string_get_cstr(tmp_new_file_path));
20+
nfc_playlist->settings.file_path = furi_string_alloc_set_str(furi_string_get_cstr(tmp_new_file_path));
2221
}
23-
free(file_path);
24-
free(nfc_playlist->playlist_name);
2522
furi_record_close(RECORD_STORAGE);
26-
furi_string_free(new_file_path);
23+
furi_string_free(tmp_new_file_path);
24+
furi_string_free(tmp_old_file_path);
2725

2826
scene_manager_previous_scene(nfc_playlist->scene_manager);
2927
}
@@ -34,7 +32,7 @@ void nfc_playlist_file_rename_scene_on_enter(void* context) {
3432
text_input_set_header_text(nfc_playlist->text_input, "Enter new file name");
3533
text_input_set_minimum_length(nfc_playlist->text_input, 1);
3634
text_input_set_result_callback(nfc_playlist->text_input, nfc_playlist_file_rename_menu_callback, nfc_playlist, nfc_playlist->playlist_name, 50, true);
37-
view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_FileRename);
35+
view_dispatcher_switch_to_view(nfc_playlist->view_dispatcher, NfcPlaylistView_FileRename);
3836
}
3937

4038
bool nfc_playlist_file_rename_scene_on_event(void* context, SceneManagerEvent event) {
@@ -46,4 +44,5 @@ bool nfc_playlist_file_rename_scene_on_event(void* context, SceneManagerEvent ev
4644
void nfc_playlist_file_rename_scene_on_exit(void* context) {
4745
NfcPlaylist* nfc_playlist = context;
4846
text_input_reset(nfc_playlist->text_input);
47+
free(nfc_playlist->playlist_name);
4948
}

0 commit comments

Comments
 (0)