From 6b347e7310c501b826785e9639d962ba1d448b4b Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 23 Sep 2020 00:56:54 +0200 Subject: Add matrix image upload --- src/plugins/FileManager.cpp | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/plugins/FileManager.cpp') diff --git a/src/plugins/FileManager.cpp b/src/plugins/FileManager.cpp index fc6205c..c68bb94 100644 --- a/src/plugins/FileManager.cpp +++ b/src/plugins/FileManager.cpp @@ -18,23 +18,40 @@ namespace QuickMedia { return ""; } + static std::filesystem::file_time_type file_get_filetime_or(const std::filesystem::directory_entry &path, std::filesystem::file_time_type default_value) { + try { + return path.last_write_time(); + } catch(const std::filesystem::filesystem_error &err) { + return default_value; + } + } + PluginResult FileManager::get_files_in_directory(BodyItems &result_items) { + std::vector paths; try { for(auto &p : std::filesystem::directory_iterator(current_dir)) { - auto body_item = std::make_unique(p.path().filename().string()); - if(p.is_regular_file()) { - if(is_image_ext(get_ext(p.path()))) { - body_item->thumbnail_is_local = true; - body_item->thumbnail_url = p.path().string(); - } - } - result_items.push_back(std::move(body_item)); + paths.push_back(p); } - return PluginResult::OK; } catch(const std::filesystem::filesystem_error &err) { fprintf(stderr, "Failed to list files in directory %s, error: %s\n", current_dir.c_str(), err.what()); return PluginResult::ERR; } + + std::sort(paths.begin(), paths.end(), [](const std::filesystem::directory_entry &path1, std::filesystem::directory_entry &path2) { + return file_get_filetime_or(path1, std::filesystem::file_time_type::min()) > file_get_filetime_or(path2, std::filesystem::file_time_type::min()); + }); + + for(auto &p : paths) { + auto body_item = std::make_unique(p.path().filename().string()); + // TODO: Check file magic number instead of extension? + if(p.is_regular_file() && is_image_ext(get_ext(p.path()))) { + body_item->thumbnail_is_local = true; + body_item->thumbnail_url = p.path().string(); + } + result_items.push_back(std::move(body_item)); + } + + return PluginResult::OK; } bool FileManager::set_current_directory(const std::string &path) { -- cgit v1.2.3