HYL_OK3568_LINUX/buildroot/package/mtp/0009-MtpServer-Support-creation-time.patch
2025-05-10 21:49:39 +08:00

158 lines
5.7 KiB
Diff

From 122d8d7e63f5c5c2bf81143ef655e964d3982cfd Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 27 May 2022 12:43:19 +0800
Subject: [PATCH] MtpServer: Support creation time
Only available on boost >= 1.75.0 and kernel >= 4.11.
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
CMakeLists.txt | 3 ++-
include/MtpDatabase.h | 3 ++-
server/UbuntuMtpDatabase.h | 9 ++++++++-
src/MtpServer.cpp | 9 +++++++--
tests/MockMtpDatabase.h | 3 ++-
5 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 707b7f8..a2d7bd5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,8 @@ set(MTP_VERSION_MAJOR 1)
set(MTP_VERSION_MINOR 0)
set(MTP_VERSION_PATCH 0)
-find_package(Boost REQUIRED COMPONENTS thread system filesystem unit_test_framework)
+# Request 1.75.0 for filesystem creation_time operation.
+find_package(Boost 1.75.0 REQUIRED COMPONENTS thread system filesystem unit_test_framework)
pkg_check_modules(DBUSCPP REQUIRED dbus-c++-1)
pkg_check_modules(GLOG REQUIRED libglog)
diff --git a/include/MtpDatabase.h b/include/MtpDatabase.h
index c72964c..203b33f 100644
--- a/include/MtpDatabase.h
+++ b/include/MtpDatabase.h
@@ -45,7 +45,8 @@ public:
MtpObjectHandle parent,
MtpStorageID storage,
uint64_t size,
- time_t modified) = 0;
+ time_t modified,
+ time_t created) = 0;
// called to report success or failure of the SendObject file transfer
// success should signal a notification of the new object's creation,
diff --git a/server/UbuntuMtpDatabase.h b/server/UbuntuMtpDatabase.h
index 73200de..6078c31 100644
--- a/server/UbuntuMtpDatabase.h
+++ b/server/UbuntuMtpDatabase.h
@@ -68,6 +68,7 @@ private:
std::string path;
int watch_fd;
std::time_t last_modified;
+ std::time_t creation;
};
MtpServer* local_server;
@@ -134,6 +135,7 @@ private:
entry.object_size = 0;
entry.watch_fd = setup_dir_inotify(p);
entry.last_modified = last_write_time(p);
+ entry.creation = creation_time(p);
db.insert( std::pair<MtpObjectHandle, DbEntry>(handle, entry) );
@@ -150,6 +152,7 @@ private:
entry.object_format = guess_object_format(p.extension().string());
entry.object_size = file_size(p);
entry.last_modified = last_write_time(p);
+ entry.creation = creation_time(p);
VLOG(1) << "Adding \"" << p.string() << "\"";
@@ -206,6 +209,7 @@ private:
entry.object_size = 0;
entry.watch_fd = setup_dir_inotify(p);
entry.last_modified = last_write_time(p);
+ entry.creation = creation_time(p);
db.insert( std::pair<MtpObjectHandle, DbEntry>(handle, entry) );
@@ -224,6 +228,7 @@ private:
entry.object_size = 0;
entry.watch_fd = setup_dir_inotify(p.parent_path());
entry.last_modified = 0;
+ entry.creation = 0;
}
}
}
@@ -399,7 +404,8 @@ public:
MtpObjectHandle parent,
MtpStorageID storage,
uint64_t size,
- time_t modified)
+ time_t modified,
+ time_t created)
{
DbEntry entry;
MtpObjectHandle handle = counter;
@@ -417,6 +423,7 @@ public:
entry.object_format = format;
entry.object_size = size;
entry.last_modified = modified;
+ entry.creation = created;
db.insert( std::pair<MtpObjectHandle, DbEntry>(handle, entry) );
diff --git a/src/MtpServer.cpp b/src/MtpServer.cpp
index fb73ac3..99897c4 100644
--- a/src/MtpServer.cpp
+++ b/src/MtpServer.cpp
@@ -786,7 +786,8 @@ MtpResponseCode MtpServer::doGetObjectInfo() {
mData.putUInt32(info.mAssociationDesc);
mData.putUInt32(info.mSequenceNumber);
mData.putString(info.mName);
- mData.putEmptyString(); // date created
+ formatDateTime(info.mDateCreated, date, sizeof(date));
+ mData.putString(date); // date created
formatDateTime(info.mDateModified, date, sizeof(date));
mData.putString(date); // date modified
mData.putEmptyString(); // keywords
@@ -969,6 +970,10 @@ MtpResponseCode MtpServer::doSendObjectInfo() {
if (!parseDateTime(modified, modifiedTime))
modifiedTime = 0;
+ time_t createdTime;
+ if (!parseDateTime(created, createdTime))
+ createdTime = 0;
+
if (path[path.size() - 1] != '/')
path += "/";
path += (const char *)name;
@@ -988,7 +993,7 @@ MtpResponseCode MtpServer::doSendObjectInfo() {
VLOG(2) << "path: " << path.c_str() << " parent: " << parent
<< " storageID: " << std::hex << storageID << std::dec;
MtpObjectHandle handle = mDatabase->beginSendObject(path.c_str(),
- format, parent, storageID, mSendObjectFileSize, modifiedTime);
+ format, parent, storageID, mSendObjectFileSize, modifiedTime, createdTime);
if (handle == kInvalidObjectHandle) {
return MTP_RESPONSE_GENERAL_ERROR;
}
diff --git a/tests/MockMtpDatabase.h b/tests/MockMtpDatabase.h
index 1a10857..61f6817 100644
--- a/tests/MockMtpDatabase.h
+++ b/tests/MockMtpDatabase.h
@@ -88,7 +88,8 @@ public:
MtpObjectHandle parent,
MtpStorageID storage,
uint64_t size,
- time_t modified)
+ time_t modified,
+ time_t created)
{
return 1;
}
--
2.20.1