Skip to content

Commit

Permalink
Merge pull request #488 from ESurge/420
Browse files Browse the repository at this point in the history
NameChanger Update
  • Loading branch information
RogueMaster authored Jan 6, 2023
2 parents 5efb110 + b3ccfb5 commit 51de982
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 444 deletions.
242 changes: 62 additions & 180 deletions applications/plugins/namechanger/namechanger.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,172 +16,8 @@ bool namechanger_back_event_callback(void* context) {
return scene_manager_handle_back_event(namechanger->scene_manager);
}

bool namechanger_make_app_folder(NameChanger* namechanger) {
bool created = false;
FURI_LOG_I(TAG, "folder1");

FuriString* folderpath = furi_string_alloc();
furi_string_set(folderpath, "/ext/dolphin");
FURI_LOG_I(TAG, "folder2");

//Make dir if doesn't exist
if(!storage_simply_mkdir(namechanger->storage, furi_string_get_cstr(folderpath))) {
FURI_LOG_I(TAG, "folder3");
furi_string_set_str(namechanger->error, "Cannot create\napp folder.");
} else {
FURI_LOG_I(TAG, "folder4");
created = true;
}
FURI_LOG_I(TAG, "folder5");
furi_string_free(folderpath);
FURI_LOG_I(TAG, "folder6");
return created;
}

bool namechanger_name_read_write(NameChanger* namechanger, char* name, uint8_t mode) {
FuriString* file_path = furi_string_alloc();
furi_string_set(file_path, "/ext/dolphin/name.txt");
FURI_LOG_I(TAG, "name1");

bool result = false;

if(mode == 2) {
FURI_LOG_I(TAG, "name2");
UNUSED(name);
FlipperFormat* file = flipper_format_file_alloc(namechanger->storage);
//read
FuriString* data = furi_string_alloc();
FURI_LOG_I(TAG, "name3");

do {
FURI_LOG_I(TAG, "name4");
if(!flipper_format_file_open_existing(file, furi_string_get_cstr(file_path))) {
break;
}
FURI_LOG_I(TAG, "name4a");

// header
uint32_t version;

if(!flipper_format_read_header(file, data, &version)) {
break;
}
FURI_LOG_I(TAG, "name4b");

if(furi_string_cmp_str(data, NAMECHANGER_HEADER) != 0) {
break;
}
FURI_LOG_I(TAG, "name4c");

if(version != 1) {
break;
}
FURI_LOG_I(TAG, "name4d");

// get Name
if(!flipper_format_read_string(file, "Name", data)) {
break;
}
FURI_LOG_I(TAG, "name4e");

result = true;
FURI_LOG_I(TAG, "name5");
} while(false);

flipper_format_free(file);
FURI_LOG_I(TAG, "name6");

if(!result) {
FURI_LOG_I(TAG, "name7");
FURI_LOG_E(TAG, "Cannot load data from file.");
namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr());
} else {
FURI_LOG_I(TAG, "name8");
furi_string_trim(data);

if(!furi_string_size(data)) {
FURI_LOG_I(TAG, "name9");
namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr());
} else {
FURI_LOG_I(TAG, "name10");
char newname[8];
snprintf(newname, 8, "%s", furi_string_get_cstr(data));
namechanger_text_store_set(namechanger, "%s", newname);
}
}
FURI_LOG_I(TAG, "name11");

furi_string_free(data);
} else if(mode == 3) {
FURI_LOG_I(TAG, "name12");
//save
FlipperFormat* file = flipper_format_file_alloc(namechanger->storage);

do {
FURI_LOG_I(TAG, "name13");
// Open file for write
if(!flipper_format_file_open_always(file, furi_string_get_cstr(file_path))) {
break;
}

// Write header
if(!flipper_format_write_header_cstr(file, NAMECHANGER_HEADER, 1)) {
break;
}

// Write comments
if(!flipper_format_write_comment_cstr(
file, "Changing the value below will change your FlipperZero device name.")) {
break;
}

if(!flipper_format_write_comment_cstr(
file,
"Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) {
break;
}

if(!flipper_format_write_comment_cstr(
file, "It cannot contain any other characters.")) {
break;
}

//If name is eraseerase (set by Revert) - then don't write any name
//otherwise, write name as set in the variable
if(strcmp(name, "eraseerase") == 0) {
if(!flipper_format_write_string_cstr(file, "Name", "")) {
break;
}
} else {
if(!flipper_format_write_string_cstr(file, "Name", name)) {
break;
}
}

FURI_LOG_I(TAG, "name14");
result = true;
} while(false);

flipper_format_free(file);
FURI_LOG_I(TAG, "name15");

if(!result) {
FURI_LOG_I(TAG, "name16");
FURI_LOG_E(TAG, "Cannot save name file.");
furi_string_set_str(namechanger->error, "Cannot save\nname file.");
}
} else {
FURI_LOG_I(TAG, "name17");
FURI_LOG_E(TAG, "Something broke.");
furi_string_set_str(namechanger->error, "Something broke.");
}
FURI_LOG_I(TAG, "name18");

return result;
}

NameChanger* namechanger_alloc() {
NameChanger* namechanger = malloc(sizeof(namechanger));
NameChanger* namechanger = malloc(sizeof(NameChanger));

namechanger->scene_manager = scene_manager_alloc(&namechanger_scene_handlers, namechanger);

Expand Down Expand Up @@ -236,8 +72,6 @@ void namechanger_free(NameChanger* namechanger) {
view_dispatcher_free(namechanger->view_dispatcher);
scene_manager_free(namechanger->scene_manager);

furi_string_free(namechanger->error);

furi_record_close(RECORD_STORAGE);

furi_record_close(RECORD_GUI);
Expand All @@ -254,22 +88,70 @@ void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...)
va_end(args);
}

void namechanger_text_store_clear(NameChanger* namechanger) {
memset(namechanger->text_store, 0, NAMECHANGER_TEXT_STORE_SIZE);
}

int32_t namechanger_app() {
NameChanger* namechanger = namechanger_alloc();

view_dispatcher_attach_to_gui(namechanger->view_dispatcher, namechanger->gui, ViewDispatcherTypeFullscreen);
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneStart);

view_dispatcher_run(namechanger->view_dispatcher);

namechanger_free(namechanger);
return 0;
}

namechanger->error = furi_string_alloc();
furi_string_set(namechanger->error, "Default");

view_dispatcher_attach_to_gui(
namechanger->view_dispatcher, namechanger->gui, ViewDispatcherTypeFullscreen);
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneStart);
bool namechanger_name_write(NameChanger* namechanger, char* name) {
FuriString* file_path = furi_string_alloc();
furi_string_set(file_path, "/ext/dolphin/name.txt");

view_dispatcher_run(namechanger->view_dispatcher);
bool result = false;

//If name is not "eraseerase" (set by Revert) then write name to file
//otherwise, remove name.txt

if(strcmp(name, "eraseerase") != 0) {
//save
FlipperFormat* file = flipper_format_file_alloc(namechanger->storage);

do {
// Open file for write
if(!flipper_format_file_open_always(file, furi_string_get_cstr(file_path))) {
break;
}

// Write header
if(!flipper_format_write_header_cstr(file, NAMECHANGER_HEADER, 1)) {
break;
}

// Write comments
if(!flipper_format_write_comment_cstr(file, "Changing the value below will change your FlipperZero device name.")) {
break;
}

if(!flipper_format_write_comment_cstr(file, "Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) {
break;
}

if(!flipper_format_write_comment_cstr(file, "It cannot contain any other characters.")) {
break;
}

if(!flipper_format_write_string_cstr(file, "Name", name)) {
break;
}

result = true;
} while(false);

flipper_format_free(file);

if(!result) {
FURI_LOG_E(TAG, "Cannot save name file.");
}
} else {
result = storage_simply_remove(namechanger->storage, furi_string_get_cstr(file_path));
}

namechanger_free(namechanger);
return 0;
return result;
}
4 changes: 1 addition & 3 deletions applications/plugins/namechanger/namechanger.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ typedef struct {
Storage* storage;

char text_store[NAMECHANGER_TEXT_STORE_SIZE + 1];
FuriString* error;

Submenu* submenu;
TextInput* text_input;
Expand All @@ -46,6 +45,5 @@ typedef enum {
} NameChangerView;

bool namechanger_make_app_folder(NameChanger* namechanger);
bool namechanger_name_read_write(NameChanger* namechanger, char* name, uint8_t mode);
bool namechanger_name_write(NameChanger* namechanger, char* name);
void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...);
void namechanger_text_store_clear(NameChanger* namechanger);
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@
enum NameChangerCustomEvent {
NameChangerCustomEventBack,
NameChangerCustomEventTextEditResult,
NameChangerCustomEventError,
};
51 changes: 20 additions & 31 deletions applications/plugins/namechanger/scenes/namechanger_scene_change.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,19 @@ void namechanger_scene_change_on_enter(void* context) {
NameChanger* namechanger = context;
TextInput* text_input = namechanger->text_input;

if(namechanger_name_read_write(namechanger, NULL, 2)) {
text_input_set_header_text(text_input, "Set Flipper Name");

text_input_set_result_callback(
text_input,
namechanger_scene_change_text_input_callback,
namechanger,
namechanger->text_store,
NAMECHANGER_TEXT_STORE_SIZE,
true);

view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewTextInput);
} else {
view_dispatcher_send_custom_event(
namechanger->view_dispatcher, NameChangerCustomEventError);
}
namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr());

text_input_set_header_text(text_input, "Set Flipper Name");

text_input_set_result_callback(
text_input,
namechanger_scene_change_text_input_callback,
namechanger,
namechanger->text_store,
NAMECHANGER_TEXT_STORE_SIZE,
true);

view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewTextInput);
}

bool namechanger_scene_change_on_event(void* context, SceneManagerEvent event) {
Expand All @@ -36,21 +33,13 @@ bool namechanger_scene_change_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
consumed = true;
if(event.event == NameChangerCustomEventTextEditResult) {
if(namechanger_make_app_folder(namechanger)) {
if(namechanger_name_read_write(namechanger, namechanger->text_store, 3)) {
scene_manager_next_scene(
namechanger->scene_manager, NameChangerSceneChangeSuccess);
} else {
scene_manager_search_and_switch_to_previous_scene(
namechanger->scene_manager, NameChangerSceneError);
}
} else {
scene_manager_search_and_switch_to_previous_scene(
namechanger->scene_manager, NameChangerSceneError);
}
} else if(event.event == NameChangerCustomEventError) {
scene_manager_search_and_switch_to_previous_scene(
namechanger->scene_manager, NameChangerSceneError);
if(namechanger_name_write(namechanger, namechanger->text_store)) {
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneChangeSuccess);
} else {
scene_manager_search_and_switch_to_previous_scene(namechanger->scene_manager, NameChangerSceneStart);
}
} else {
scene_manager_search_and_switch_to_previous_scene(namechanger->scene_manager, NameChangerSceneStart);
}
}
return consumed;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ ADD_SCENE(namechanger, start, Start)
ADD_SCENE(namechanger, change, Change)
ADD_SCENE(namechanger, change_success, ChangeSuccess)
ADD_SCENE(namechanger, revert, Revert)
ADD_SCENE(namechanger, revert_success, RevertSuccess)
ADD_SCENE(namechanger, error, Error)
ADD_SCENE(namechanger, revert_success, RevertSuccess)
Loading

0 comments on commit 51de982

Please sign in to comment.