From 344a8dc0a0f83c0de690eddc3b8324e8f1c13ff7 Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Wed, 7 Jun 2023 22:46:07 -0500 Subject: [PATCH] Fix crash when empty FreqMan files (#1113) and Fix missing Comma when editing text (#1125) (#1131) * Fix crash issues with empty FreqMan files * Added ability to delete empty files * Fix missing Comma character when editing text #1125 --- firmware/application/apps/ui_freqman.cpp | 15 +++++++++++++-- firmware/application/freqman.cpp | 7 +++++++ firmware/application/freqman.hpp | 1 + firmware/application/ui/ui_alphanum.hpp | 4 ++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/firmware/application/apps/ui_freqman.cpp b/firmware/application/apps/ui_freqman.cpp index 193b37524..07a19fdba 100644 --- a/firmware/application/apps/ui_freqman.cpp +++ b/firmware/application/apps/ui_freqman.cpp @@ -226,8 +226,13 @@ void FrequencyManagerView::on_new_category(NavigationView& nav) { } void FrequencyManagerView::on_delete() { - database.erase(database.begin() + menu_view.get_index()); - save_freqman_file(file_list[categories[current_category_id].second], database); + if (database.empty()) { + delete_freqman_file(file_list[categories[current_category_id].second]); + refresh_list(); + } else { + database.erase(database.begin() + menu_view.get_index()); + save_freqman_file(file_list[categories[current_category_id].second], database); + } change_category(current_category_id); } @@ -272,6 +277,9 @@ FrequencyManagerView::FrequencyManagerView( }; button_edit_freq.on_select = [this, &nav](Button&) { + if (database.empty()) { + database.push_back({0, 0, "", SINGLE}); + } auto new_view = nav.push(database[menu_view.get_index()].frequency_a); new_view->on_changed = [this](rf::Frequency f) { on_edit_freq(f); @@ -279,6 +287,9 @@ FrequencyManagerView::FrequencyManagerView( }; button_edit_desc.on_select = [this, &nav](Button&) { + if (database.empty()) { + database.push_back({0, 0, "", SINGLE}); + } desc_buffer = database[menu_view.get_index()].description; on_edit_desc(nav); }; diff --git a/firmware/application/freqman.cpp b/firmware/application/freqman.cpp index 9dbf264ef..d70719a51 100644 --- a/firmware/application/freqman.cpp +++ b/firmware/application/freqman.cpp @@ -281,6 +281,13 @@ bool get_freq_string(freqman_entry& entry, std::string& item_string) { return true; } +bool delete_freqman_file(std::string& file_stem) { + File freqman_file; + std::string freq_file_path = "/FREQMAN/" + file_stem + ".TXT"; + delete_file(freq_file_path); + return false; +} + bool save_freqman_file(std::string& file_stem, freqman_db& db) { File freqman_file; std::string freq_file_path = "/FREQMAN/" + file_stem + ".TXT"; diff --git a/firmware/application/freqman.hpp b/firmware/application/freqman.hpp index 8d2bcb7c6..20aceeb34 100644 --- a/firmware/application/freqman.hpp +++ b/firmware/application/freqman.hpp @@ -98,6 +98,7 @@ using freqman_db = std::vector; bool load_freqman_file(std::string& file_stem, freqman_db& db); bool load_freqman_file_ex(std::string& file_stem, freqman_db& db, bool load_freqs, bool load_ranges, bool load_hamradios, uint8_t limit); bool get_freq_string(freqman_entry& entry, std::string& item_string); +bool delete_freqman_file(std::string& file_stem); bool save_freqman_file(std::string& file_stem, freqman_db& db); bool create_freqman_file(std::string& file_stem, File& freqman_file); diff --git a/firmware/application/ui/ui_alphanum.hpp b/firmware/application/ui/ui_alphanum.hpp index debde5205..e415ff9ea 100644 --- a/firmware/application/ui/ui_alphanum.hpp +++ b/firmware/application/ui/ui_alphanum.hpp @@ -43,8 +43,8 @@ class AlphanumView : public TextEntryView { bool on_encoder(const EncoderEvent delta) override; private: - const char* const keys_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ' .<"; - const char* const keys_lower = "abcdefghijklmnopqrstuvwxyz' .<"; + const char* const keys_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ, .<"; + const char* const keys_lower = "abcdefghijklmnopqrstuvwxyz, .<"; const char* const keys_digit = "0123456789!\"#'()*+-/:;=>?@[\\]<"; const std::pair key_sets[3] = {