aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/FileManager.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-09-23 00:56:54 +0200
committerdec05eba <dec05eba@protonmail.com>2020-09-23 01:00:37 +0200
commit6b347e7310c501b826785e9639d962ba1d448b4b (patch)
tree6d84b547078d009565a75ac2df42423c06c578b7 /src/plugins/FileManager.cpp
parenta8e0846a7c111a8d5b5cf8592ecb9b9bbd15ce26 (diff)
Add matrix image upload
Diffstat (limited to 'src/plugins/FileManager.cpp')
-rw-r--r--src/plugins/FileManager.cpp35
1 files changed, 26 insertions, 9 deletions
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<std::filesystem::directory_entry> paths;
try {
for(auto &p : std::filesystem::directory_iterator(current_dir)) {
- auto body_item = std::make_unique<BodyItem>(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<BodyItem>(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) {