added get_creation_time function for gdscript

This commit is contained in:
Daniele Giuliani 2018-05-16 00:50:57 +02:00
parent 005b69cf6e
commit d315b0fb8a
24 changed files with 133 additions and 0 deletions

View file

@ -1855,6 +1855,12 @@ uint64_t _File::get_modified_time(const String &p_file) const {
return FileAccess::get_modified_time(p_file);
}
// NEW FUNCTION
uint64_t _File::get_creation_time(const String &p_file) const {
return FileAccess::get_creation_time(p_file);
}
void _File::_bind_methods() {
ClassDB::bind_method(D_METHOD("open_encrypted", "path", "mode_flags", "key"), &_File::open_encrypted);
@ -1906,6 +1912,7 @@ void _File::_bind_methods() {
ClassDB::bind_method(D_METHOD("file_exists", "path"), &_File::file_exists);
ClassDB::bind_method(D_METHOD("get_modified_time", "file"), &_File::get_modified_time);
ClassDB::bind_method(D_METHOD("get_creation_time", "file"), &_File::get_creation_time); // NEW FUNCTION
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "endian_swap"), "set_endian_swap", "get_endian_swap");
@ -2106,6 +2113,7 @@ void _Directory::_bind_methods() {
ClassDB::bind_method(D_METHOD("file_exists", "path"), &_Directory::file_exists);
ClassDB::bind_method(D_METHOD("dir_exists", "path"), &_Directory::dir_exists);
//ClassDB::bind_method(D_METHOD("get_modified_time","file"),&_Directory::get_modified_time);
//ClassDB::bind_method(D_METHOD("get_creation_time","file"),&_Directory::get_creation_time); // NEW FUNCTION
ClassDB::bind_method(D_METHOD("get_space_left"), &_Directory::get_space_left);
ClassDB::bind_method(D_METHOD("copy", "from", "to"), &_Directory::copy);
ClassDB::bind_method(D_METHOD("rename", "from", "to"), &_Directory::rename);

View file

@ -481,6 +481,7 @@ public:
bool file_exists(const String &p_name) const; ///< return true if a file exists
uint64_t get_modified_time(const String &p_file) const;
uint64_t get_creation_time(const String &p_file) const; // NEW FUNCTION
_File();
virtual ~_File();

View file

@ -143,6 +143,12 @@ public:
return f._get_modified_time(p_file);
}
// NEW FUNCTION
virtual uint64_t _get_creation_time(const String &p_file) {
return f._get_creation_time(p_file);
}
FileAccessBufferedFA(){
};

View file

@ -372,6 +372,15 @@ uint64_t FileAccessCompressed::_get_modified_time(const String &p_file) {
return 0;
}
// NEW FUNCTION
uint64_t FileAccessCompressed::_get_creation_time(const String &p_file) {
if (f)
return f->get_creation_time(p_file);
else
return 0;
}
FileAccessCompressed::FileAccessCompressed() {
f = NULL;

View file

@ -91,6 +91,7 @@ public:
virtual bool file_exists(const String &p_name); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file);
virtual uint64_t _get_creation_time(const String &p_file);// NEW FUNCTION
FileAccessCompressed();
virtual ~FileAccessCompressed();

View file

@ -302,6 +302,12 @@ uint64_t FileAccessEncrypted::_get_modified_time(const String &p_file) {
return 0;
}
// NEW FUNCTION
uint64_t FileAccessEncrypted::_get_creation_time(const String &p_file) {
return 0;
}
FileAccessEncrypted::FileAccessEncrypted() {
file = NULL;

View file

@ -79,6 +79,7 @@ public:
virtual bool file_exists(const String &p_name); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file);
virtual uint64_t _get_creation_time(const String &p_file); // NEW FUNCTION
FileAccessEncrypted();
~FileAccessEncrypted();

View file

@ -70,6 +70,7 @@ public:
virtual bool file_exists(const String &p_name); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file) { return 0; }
virtual uint64_t _get_creation_time(const String &p_file) { return 0; } // NEW FUNCTION
FileAccessMemory();
};

View file

@ -498,6 +498,24 @@ uint64_t FileAccessNetwork::_get_modified_time(const String &p_file) {
return exists_modtime;
}
// NEW FUNCTION
uint64_t FileAccessNetwork::_get_creation_time(const String &p_file) {
FileAccessNetworkClient *nc = FileAccessNetworkClient::singleton;
nc->lock_mutex();
nc->put_32(id);
nc->put_32(COMMAND_GET_MODTIME);
CharString cs = p_file.utf8();
nc->put_32(cs.length());
nc->client->put_data((const uint8_t *)cs.ptr(), cs.length());
nc->unlock_mutex();
DEBUG_PRINT("MODTIME POST");
nc->sem->post();
sem->wait();
return exists_modtime;
}
void FileAccessNetwork::configure() {
GLOBAL_DEF("network/remote_fs/page_size", 65536);

View file

@ -162,6 +162,7 @@ public:
virtual bool file_exists(const String &p_path); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file);
virtual uint64_t _get_creation_time(const String &p_file); // NEW FUNCTION
static void configure();

View file

@ -142,6 +142,7 @@ class FileAccessPack : public FileAccess {
FileAccess *f;
virtual Error _open(const String &p_path, int p_mode_flags);
virtual uint64_t _get_modified_time(const String &p_file) { return 0; }
virtual uint64_t _get_creation_time(const String &p_file) { return 0; } // NEW FUNCTION
public:
virtual void close();

View file

@ -114,6 +114,7 @@ public:
virtual bool file_exists(const String &p_name); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file) { return 0; } // todo
virtual uint64_t _get_creation_time(const String &p_file) { return 0; } // NEW FUNCTION
FileAccessZip(const String &p_path, const PackedData::PackedFile &p_file);
~FileAccessZip();

View file

@ -231,6 +231,7 @@ RES ResourceLoader::load(const String &p_path, const String &p_type_hint, bool p
res->set_edited(false);
if (timestamp_on_load) {
uint64_t mt = FileAccess::get_modified_time(path);
uint64_t ct = FileAccess::get_creation_time(path); // NEW FUNCTION
//printf("mt %s: %lli\n",remapped_path.utf8().get_data(),mt);
res->set_last_modified_time(mt);
}

View file

@ -80,6 +80,7 @@ Error ResourceSaver::save(const String &p_path, const RES &p_resource, uint32_t
((Resource *)p_resource.ptr())->set_edited(false);
if (timestamp_on_save) {
uint64_t mt = FileAccess::get_modified_time(p_path);
uint64_t ct = FileAccess::get_creation_time(p_path); // NEW FUNCTION
((Resource *)p_resource.ptr())->set_last_modified_time(mt);
}

View file

@ -489,6 +489,19 @@ uint64_t FileAccess::get_modified_time(const String &p_file) {
memdelete(fa);
return mt;
}
// NEW FUNCTION
uint64_t FileAccess::get_creation_time(const String &p_file) {
if (PackedData::get_singleton() && !PackedData::get_singleton()->is_disabled() && PackedData::get_singleton()->has_path(p_file))
return 0;
FileAccess *fa = create_for_path(p_file);
ERR_FAIL_COND_V(!fa, 0);
uint64_t ct = fa->_get_creation_time(p_file);
memdelete(fa);
return ct;
}
void FileAccess::store_string(const String &p_string) {

View file

@ -59,6 +59,7 @@ protected:
String fix_path(const String &p_path) const;
virtual Error _open(const String &p_path, int p_mode_flags) = 0; ///< open a file
virtual uint64_t _get_modified_time(const String &p_file) = 0;
virtual uint64_t _get_creation_time(const String &p_file) = 0; // NEW FUNCTION
static FileCloseFailNotify close_fail_notify;
@ -153,6 +154,7 @@ public:
static CreateFunc get_create_func(AccessType p_access);
static bool exists(const String &p_name); ///< return true if a file exists
static uint64_t get_modified_time(const String &p_file);
static uint64_t get_creation_time(const String &p_file); // NEW FUNCTION
static void set_backup_save(bool p_enable) { backup_save = p_enable; };
static bool is_backup_save_enabled() { return backup_save; };

View file

@ -124,6 +124,26 @@ uint64_t DirAccessUnix::get_modified_time(String p_file) {
return 0;
};
// NEW FUNCTION
uint64_t DirAccessUnix::get_creation_time(String p_file) {
if (p_file.is_rel_path())
p_file = current_dir.plus_file(p_file);
p_file = fix_path(p_file);
struct stat flags;
bool success = (stat(p_file.utf8().get_data(), &flags) == 0);
if (success) {
return flags.st_ctime;
} else {
ERR_FAIL_V(0);
};
return 0;
};
String DirAccessUnix::get_next() {
if (!dir_stream)

View file

@ -75,6 +75,7 @@ public:
virtual bool dir_exists(String p_dir);
virtual uint64_t get_modified_time(String p_file);
virtual uint64_t get_creation_time(String p_file); // NEW FUNCTION
virtual Error rename(String p_path, String p_new_path);
virtual Error remove(String p_path);

View file

@ -297,6 +297,22 @@ uint64_t FileAccessUnix::_get_modified_time(const String &p_file) {
};
}
// NEW FUNCTION
uint64_t FileAccessUnix::_get_creation_time(const String &p_file) {
String file = fix_path(p_file);
struct stat flags;
int err = stat(file.utf8().get_data(), &flags);
if (!err) {
return flags.st_ctime;
} else {
print_line("ERROR IN: " + p_file);
ERR_FAIL_V(0);
};
}
Error FileAccessUnix::_chmod(const String &p_path, int p_mod) {
int err = chmod(p_path.utf8().get_data(), p_mod);
if (!err) {

View file

@ -84,6 +84,7 @@ public:
virtual bool file_exists(const String &p_path); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file);
virtual uint64_t _get_creation_time(const String &p_file); // NEW FUNCTION
virtual Error _chmod(const String &p_path, int p_mod);

View file

@ -311,6 +311,26 @@ uint64_t FileAccessWindows::_get_modified_time(const String &p_file) {
ERR_FAIL_V(0);
};
// NEW FUNCTION
uint64_t FileAccessWindows::_get_creation_time(const String &p_file) {
String file = fix_path(p_file);
if (file.ends_with("/") && file != "/")
file = file.substr(0, file.length() - 1);
struct _stat st;
int rv = _wstat(file.c_str(), &st);
if (rv == 0) {
return st.st_ctime;
} else {
print_line("no access to " + file);
}
ERR_FAIL_V(0);
};
FileAccessWindows::FileAccessWindows() {
f = NULL;

View file

@ -77,6 +77,7 @@ public:
virtual bool file_exists(const String &p_name); ///< return true if a file exists
uint64_t _get_modified_time(const String &p_file);
uint64_t _get_creation_time(const String &p_file); // NEW FUNCTION
FileAccessWindows();
virtual ~FileAccessWindows();

View file

@ -77,6 +77,7 @@ class GDMonoAssembly {
String name;
String path;
uint64_t modified_time;
uint64_t creation_time; // NEW FUNCTION
HashMap<ClassKey, GDMonoClass *, ClassKey::Hasher> cached_classes;
Map<MonoClass *, GDMonoClass *> cached_raw;
@ -116,6 +117,7 @@ public:
_FORCE_INLINE_ String get_name() const { return name; }
_FORCE_INLINE_ String get_path() const { return path; }
_FORCE_INLINE_ uint64_t get_modified_time() const { return modified_time; }
_FORCE_INLINE_ uint64_t get_creation_time() const { return creation_time; } // NEW FUNCTION
GDMonoClass *get_class(const StringName &p_namespace, const StringName &p_name);
GDMonoClass *get_class(MonoClass *p_mono_class);

View file

@ -70,6 +70,7 @@ public:
virtual bool file_exists(const String &p_path); ///< return true if a file exists
virtual uint64_t _get_modified_time(const String &p_file) { return 0; }
virtual uint64_t _get_creation_time(const String &p_file) { return 0; } // NEW FUNCTION
//static void make_default();