Commit dbaee9f9 authored by twanvl's avatar twanvl

added 'file_modified_time' function, which should be faster than using wxFileName

parent 41ff4fb6
......@@ -10,6 +10,8 @@
#include <util/file_utils.hpp>
#include <wx/filename.h>
#include <wx/dir.h>
#include <errno.h>
#include <sys/stat.h>
DECLARE_TYPEOF_COLLECTION(String);
......@@ -88,6 +90,21 @@ bool resolve_filename_conflicts(wxFileName& fn, FilenameConflicts conflicts, set
}
}
// ----------------------------------------------------------------------------- : File info
time_t file_modified_time(const String& path) {
// Note: wxFileName also provides a function for this, but that is very slow.
struct stat statbuf;
if (stat(path.mb_str(), &statbuf) != 0) {
if (errno == ENOENT) {
return 0;
} else {
throw InternalError(_("could not stat ") + path);
}
}
return statbuf.st_mtime;
}
// ----------------------------------------------------------------------------- : Directories
bool create_parent_dirs(const String& file) {
......
......@@ -4,8 +4,8 @@
//| License: GNU General Public License 2 or later (see file COPYING) |
//+----------------------------------------------------------------------------+
#ifndef HEADER_UTIL_FILE_UTILS
#define HEADER_UTIL_FILE_UTILS
#ifndef HEADER_UTIL_FILE_UTILS
#define HEADER_UTIL_FILE_UTILS
// ----------------------------------------------------------------------------- : Includes
......@@ -32,6 +32,11 @@ String clean_filename(const String& name);
/** Returns true if the filename should be used, false if failed. */
bool resolve_filename_conflicts(wxFileName& fn, FilenameConflicts conflicts, set<String>& used);
// ----------------------------------------------------------------------------- : File info
/// Get the last modified time of a file
time_t file_modified_time(const String& name);
// ----------------------------------------------------------------------------- : Removing and renaming
/// Ensure that the parent directories of the given filename exist
......
......@@ -349,12 +349,11 @@ void Package::openSubdir(const String& name) {
String f; // filename
for(bool ok = d.GetFirst(&f, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN) ; ok ; ok = d.GetNext(&f)) {
if (ignore_file(f)) continue;
// add file
// add file to list of known files
addFile(name + f);
// get modified time
wxFileName fn(filename + _("/") + name + f);
wxDateTime mod;
if (fn.GetTimes(0, &mod, 0) && mod > modified) modified = mod;
wxDateTime file_time = file_modified_time(filename + _("/") + name + f);
modified = max(modified,file_time);
}
// find subdirs
for(bool ok = d.GetFirst(&f, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN) ; ok ; ok = d.GetNext(&f)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment