aboutsummaryrefslogtreecommitdiff
path: root/src/FileUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/FileUtil.cpp')
-rw-r--r--src/FileUtil.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/FileUtil.cpp b/src/FileUtil.cpp
index 2a0b290..b78e257 100644
--- a/src/FileUtil.cpp
+++ b/src/FileUtil.cpp
@@ -1,5 +1,7 @@
#include "../include/FileUtil.hpp"
#include <cstdio>
+#include <vector>
+#include <algorithm>
#if OS_FAMILY == OS_FAMILY_POSIX
#include <unistd.h>
@@ -249,6 +251,35 @@ namespace sibs
return true;
}
+ bool walkDirFilesRecursiveSortTimestamp(const _tinydir_char_t *directory, SortedFileWalkCallbackFunc callbackFunc)
+ {
+ std::vector<FileWithTimestamp> files;
+ walkDirFilesRecursive(directory, [&files](tinydir_file *file) {
+ FileWithTimestamp filedata;
+ filedata.filepath = file->path;
+ filedata.extension = file->extension;
+ filedata.last_modified = file->_s.st_mtim;
+ files.push_back(std::move(filedata));
+ return true;
+ });
+
+ std::sort(files.begin(), files.end(), [](const FileWithTimestamp &filedata_a, const FileWithTimestamp &filedata_b) {
+ if(filedata_a.last_modified.tv_sec < filedata_b.last_modified.tv_sec)
+ return true;
+ else if(filedata_a.last_modified.tv_sec == filedata_b.last_modified.tv_sec && filedata_a.last_modified.tv_nsec <= filedata_b.last_modified.tv_nsec)
+ return true;
+ else
+ return false;
+ });
+
+ for(const FileWithTimestamp &filedata : files) {
+ if(!callbackFunc(filedata))
+ return false;
+ }
+
+ return true;
+ }
+
Result<StringView> getFileContent(const _tinydir_char_t *filepath)
{
#if OS_FAMILY == OS_FAMILY_POSIX