summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/bind/core_bind.cpp8
-rw-r--r--core/bind/core_bind.h1
-rw-r--r--core/io/file_access_buffered_fa.h6
-rw-r--r--core/io/file_access_compressed.cpp9
-rw-r--r--core/io/file_access_compressed.h1
-rw-r--r--core/io/file_access_encrypted.cpp6
-rw-r--r--core/io/file_access_encrypted.h1
-rw-r--r--core/io/file_access_memory.h1
-rw-r--r--core/io/file_access_network.cpp18
-rw-r--r--core/io/file_access_network.h1
-rw-r--r--core/io/file_access_pack.h1
-rw-r--r--core/io/file_access_zip.h1
-rw-r--r--core/io/resource_loader.cpp1
-rw-r--r--core/io/resource_saver.cpp1
-rw-r--r--core/os/file_access.cpp13
-rw-r--r--core/os/file_access.h2
16 files changed, 71 insertions, 0 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 3270b33f1c..fa0921ae95 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -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);
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index a363f5970f..4bf4fd9146 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -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();
diff --git a/core/io/file_access_buffered_fa.h b/core/io/file_access_buffered_fa.h
index 493fa1c243..f9b3b29b88 100644
--- a/core/io/file_access_buffered_fa.h
+++ b/core/io/file_access_buffered_fa.h
@@ -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(){
};
diff --git a/core/io/file_access_compressed.cpp b/core/io/file_access_compressed.cpp
index d6547ba19f..5f08c4fc7c 100644
--- a/core/io/file_access_compressed.cpp
+++ b/core/io/file_access_compressed.cpp
@@ -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;
diff --git a/core/io/file_access_compressed.h b/core/io/file_access_compressed.h
index 587f58a7c6..834e5b1830 100644
--- a/core/io/file_access_compressed.h
+++ b/core/io/file_access_compressed.h
@@ -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();
diff --git a/core/io/file_access_encrypted.cpp b/core/io/file_access_encrypted.cpp
index 221f457b78..84268c6698 100644
--- a/core/io/file_access_encrypted.cpp
+++ b/core/io/file_access_encrypted.cpp
@@ -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;
diff --git a/core/io/file_access_encrypted.h b/core/io/file_access_encrypted.h
index b9365a9fd0..7cc9ab6637 100644
--- a/core/io/file_access_encrypted.h
+++ b/core/io/file_access_encrypted.h
@@ -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();
diff --git a/core/io/file_access_memory.h b/core/io/file_access_memory.h
index 2136f4cc0c..3317c20e01 100644
--- a/core/io/file_access_memory.h
+++ b/core/io/file_access_memory.h
@@ -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();
};
diff --git a/core/io/file_access_network.cpp b/core/io/file_access_network.cpp
index 21e3a4172b..98403bf3f1 100644
--- a/core/io/file_access_network.cpp
+++ b/core/io/file_access_network.cpp
@@ -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);
diff --git a/core/io/file_access_network.h b/core/io/file_access_network.h
index be9bdb1af6..debd4386b8 100644
--- a/core/io/file_access_network.h
+++ b/core/io/file_access_network.h
@@ -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();
diff --git a/core/io/file_access_pack.h b/core/io/file_access_pack.h
index 8a40e6d78c..513e2896c3 100644
--- a/core/io/file_access_pack.h
+++ b/core/io/file_access_pack.h
@@ -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();
diff --git a/core/io/file_access_zip.h b/core/io/file_access_zip.h
index df83575f6a..11f9687e77 100644
--- a/core/io/file_access_zip.h
+++ b/core/io/file_access_zip.h
@@ -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();
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index 1351030d1e..86bf77318e 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -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);
}
diff --git a/core/io/resource_saver.cpp b/core/io/resource_saver.cpp
index 3dcd94880a..e4bfd5a321 100644
--- a/core/io/resource_saver.cpp
+++ b/core/io/resource_saver.cpp
@@ -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);
}
diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp
index 033b4b12b9..96ebb79da5 100644
--- a/core/os/file_access.cpp
+++ b/core/os/file_access.cpp
@@ -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) {
diff --git a/core/os/file_access.h b/core/os/file_access.h
index c4635fdfbb..2b9477a79c 100644
--- a/core/os/file_access.h
+++ b/core/os/file_access.h
@@ -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; };