|
7 | 7 | #include "nrf_log.h"
|
8 | 8 | #include "settings.h"
|
9 | 9 | #include "vfs.h"
|
| 10 | +#include "vfs_meta.h" |
10 | 11 |
|
11 | 12 | #include "ntag_emu.h"
|
12 | 13 | #include "ntag_store.h"
|
|
19 | 20 | enum amiibo_detail_menu_t {
|
20 | 21 | AMIIBO_DETAIL_MENU_RAND_UID,
|
21 | 22 | AMIIBO_DETAIL_MENU_AUTO_RAND_UID,
|
| 23 | + AMIIBO_DETAIL_MENU_READ_ONLY, |
22 | 24 | AMIIBO_DETAIL_MENU_REMOVE_AMIIBO,
|
23 | 25 | AMIIBO_DETAIL_MENU_BACK_AMIIBO_DETAIL,
|
24 | 26 | AMIIBO_DETAIL_MENU_BACK_FILE_BROWSER,
|
25 | 27 | AMIIBO_DETAIL_MENU_BACK_MAIN_MENU,
|
26 | 28 | };
|
27 | 29 |
|
| 30 | +static ret_code_t amiibo_scene_amiibo_detail_set_readonly(app_amiibo_t *app, bool readonly) { |
| 31 | + char path[VFS_MAX_PATH_LEN]; |
| 32 | + vfs_meta_t meta; |
| 33 | + vfs_obj_t obj; |
| 34 | + |
| 35 | + cwalk_append_segment(path, string_get_cstr(app->current_folder), string_get_cstr(app->current_file)); |
| 36 | + |
| 37 | + vfs_driver_t *p_vfs_driver = vfs_get_driver(VFS_DRIVE_EXT); |
| 38 | + int32_t res = p_vfs_driver->stat_file(path, &obj); |
| 39 | + if (res < 0) { |
| 40 | + return -1; |
| 41 | + } |
| 42 | + |
| 43 | + memset(&meta, 0, sizeof(vfs_meta_t)); |
| 44 | + vfs_meta_decode(obj.meta, sizeof(obj.meta), &meta); |
| 45 | + |
| 46 | + meta.has_flags = true; |
| 47 | + if (readonly) { |
| 48 | + meta.flags |= VFS_OBJ_FLAG_READONLY; |
| 49 | + } else { |
| 50 | + meta.flags &= ~VFS_OBJ_FLAG_READONLY; |
| 51 | + } |
| 52 | + |
| 53 | + if (p_vfs_driver->update_file_meta(path, obj.meta, sizeof(obj.meta)) == VFS_OK) { |
| 54 | + return NRF_SUCCESS; |
| 55 | + } else { |
| 56 | + return -1; |
| 57 | + } |
| 58 | +} |
| 59 | + |
28 | 60 | static void amiibo_scene_amiibo_detail_menu_msg_box_no_key_cb(mui_msg_box_event_t event, mui_msg_box_t *p_msg_box) {
|
29 | 61 | app_amiibo_t *app = p_msg_box->user_data;
|
30 | 62 | if (event == MUI_MSG_BOX_EVENT_SELECT_CENTER) {
|
@@ -129,7 +161,17 @@ static void amiibo_scene_amiibo_detail_menu_on_selected(mui_list_view_event_t ev
|
129 | 161 | p_settings->auto_gen_amiibo = !p_settings->auto_gen_amiibo;
|
130 | 162 | settings_save();
|
131 | 163 |
|
132 |
| - mui_list_view_item_set_sub_text(p_item, (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F))); |
| 164 | + mui_list_view_item_set_sub_text( |
| 165 | + p_item, (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F))); |
| 166 | + } break; |
| 167 | + |
| 168 | + case AMIIBO_DETAIL_MENU_READ_ONLY: { |
| 169 | + ret_code_t err_code = amiibo_scene_amiibo_detail_set_readonly(app, !app->ntag.read_only); |
| 170 | + if (err_code == NRF_SUCCESS) { |
| 171 | + app->ntag.read_only = !app->ntag.read_only; |
| 172 | + mui_list_view_item_set_sub_text(p_item, |
| 173 | + app->ntag.read_only ? getLangString(_L_ON_F) : getLangString(_L_OFF_F)); |
| 174 | + } |
133 | 175 | } break;
|
134 | 176 |
|
135 | 177 | case AMIIBO_DETAIL_MENU_REMOVE_AMIIBO: {
|
@@ -157,9 +199,14 @@ void amiibo_scene_amiibo_detail_menu_on_enter(void *user_data) {
|
157 | 199 | (void *)AMIIBO_DETAIL_MENU_RAND_UID);
|
158 | 200 | settings_data_t *p_settings = settings_get_data();
|
159 | 201 |
|
160 |
| - mui_list_view_add_item_ext(app->p_list_view, 0xe1c6, getLangString(_L_AUTO_RANDOM_GENERATION), |
161 |
| - (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F)), |
162 |
| - (void *)AMIIBO_DETAIL_MENU_AUTO_RAND_UID); |
| 202 | + mui_list_view_add_item_ext(app->p_list_view, 0xe1c6, getLangString(_L_AUTO_RANDOM_GENERATION), |
| 203 | + (p_settings->auto_gen_amiibo ? getLangString(_L_ON_F) : getLangString(_L_OFF_F)), |
| 204 | + (void *)AMIIBO_DETAIL_MENU_AUTO_RAND_UID); |
| 205 | + |
| 206 | + mui_list_view_add_item_ext(app->p_list_view, 0xe007, getLangString(_L_READ_ONLY), |
| 207 | + app->ntag.read_only ? getLangString(_L_ON_F) : getLangString(_L_OFF_F), |
| 208 | + (void *)AMIIBO_DETAIL_MENU_READ_ONLY); |
| 209 | + |
163 | 210 | mui_list_view_add_item(app->p_list_view, 0xe1c7, getLangString(_L_DELETE_TAG),
|
164 | 211 | (void *)AMIIBO_DETAIL_MENU_REMOVE_AMIIBO);
|
165 | 212 | mui_list_view_add_item(app->p_list_view, 0xe068, getLangString(_L_BACK_TO_DETAILS),
|
|
0 commit comments