From 91c6e3fc306dab6f42c468c895ddf0b97d4f2ac9 Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Sun, 30 Jul 2023 15:46:59 -0500 Subject: [PATCH] Display error message when trying to delete non-empty directory (#1321) * Non-empty directory check * Non-empty directory check * Display error when attempting to delete non-empty directory * Clang Delete white-space that the friggin editor added * is_empty_directory * is_empty_directory * is_empty_directory * Now need to check if it's a directory first --- firmware/application/apps/ui_fileman.cpp | 5 +++++ firmware/application/file.cpp | 11 +++++++++++ firmware/application/file.hpp | 1 + 3 files changed, 17 insertions(+) diff --git a/firmware/application/apps/ui_fileman.cpp b/firmware/application/apps/ui_fileman.cpp index 029fc895a..323110b6c 100644 --- a/firmware/application/apps/ui_fileman.cpp +++ b/firmware/application/apps/ui_fileman.cpp @@ -440,6 +440,11 @@ void FileManagerView::on_rename(std::string_view hint) { } void FileManagerView::on_delete() { + if (is_directory(get_selected_full_path()) && !is_empty_directory(get_selected_full_path())) { + nav_.display_modal("Delete", "Directory not empty!"); + return; + } + auto name = get_selected_entry().path.filename().string(); nav_.push( "Delete", "Delete " + name + "\nAre you sure?", YESNO, diff --git a/firmware/application/file.cpp b/firmware/application/file.cpp index edc818850..95f1966bb 100644 --- a/firmware/application/file.cpp +++ b/firmware/application/file.cpp @@ -568,6 +568,17 @@ bool is_directory(const path& file_path) { return fr == FR_OK && is_directory(static_cast(filinfo.fattrib)); } +bool is_empty_directory(const path& file_path) { + DIR dir; + FILINFO filinfo; + + if (!is_directory(file_path)) + return false; + + auto result = f_findfirst(&dir, &filinfo, reinterpret_cast(file_path.c_str()), (const TCHAR*)u"*"); + return !((result == FR_OK) && (filinfo.fname[0] != (TCHAR)'\0')); +} + space_info space(const path& p) { DWORD free_clusters{0}; FATFS* fs; diff --git a/firmware/application/file.hpp b/firmware/application/file.hpp index 6d321442a..afe6db1bf 100644 --- a/firmware/application/file.hpp +++ b/firmware/application/file.hpp @@ -248,6 +248,7 @@ bool is_directory(const file_status s); bool is_regular_file(const file_status s); bool file_exists(const path& file_path); bool is_directory(const path& file_path); +bool is_empty_directory(const path& file_path); space_info space(const path& p);