diff --git a/native/android/app/src/cpp/PlatformSpecificTools.cpp b/native/android/app/src/cpp/PlatformSpecificTools.cpp --- a/native/android/app/src/cpp/PlatformSpecificTools.cpp +++ b/native/android/app/src/cpp/PlatformSpecificTools.cpp @@ -47,6 +47,24 @@ return method(cls, backupID, isAttachments)->toStdString(); } + static std::string getBackupLogFilePath( + std::string backupID, + std::string logID, + bool isAttachments) { + static const auto cls = javaClassStatic(); + static auto method = + cls->getStaticMethod<JString(std::string, std::string, bool)>( + "getBackupLogFilePath"); + return method(cls, backupID, logID, isAttachments)->toStdString(); + } + + static std::string getBackupUserKeysFilePath(std::string backupID) { + static const auto cls = javaClassStatic(); + static auto method = + cls->getStaticMethod<JString(std::string)>("getBackupUserKeysFilePath"); + return method(cls, backupID)->toStdString(); + } + static void removeBackupDirectory() { static const auto cls = javaClassStatic(); static auto method = cls->getStaticMethod<void()>("removeBackupDirectory"); @@ -95,6 +113,28 @@ return path; } +std::string PlatformSpecificTools::getBackupLogFilePath( + std::string backupID, + std::string logID, + bool isAttachments) { + std::string path; + NativeAndroidAccessProvider::runTask( + [&path, backupID, logID, isAttachments]() { + path = PlatformSpecificToolsJavaClass::getBackupLogFilePath( + backupID, logID, isAttachments); + }); + return path; +} + +std::string +PlatformSpecificTools::getBackupUserKeysFilePath(std::string backupID) { + std::string path; + NativeAndroidAccessProvider::runTask([&path, backupID]() { + path = PlatformSpecificToolsJavaClass::getBackupUserKeysFilePath(backupID); + }); + return path; +} + void PlatformSpecificTools::removeBackupDirectory() { NativeAndroidAccessProvider::runTask( []() { PlatformSpecificToolsJavaClass::removeBackupDirectory(); }); diff --git a/native/android/app/src/main/java/app/comm/android/fbjni/PlatformSpecificTools.java b/native/android/app/src/main/java/app/comm/android/fbjni/PlatformSpecificTools.java --- a/native/android/app/src/main/java/app/comm/android/fbjni/PlatformSpecificTools.java +++ b/native/android/app/src/main/java/app/comm/android/fbjni/PlatformSpecificTools.java @@ -67,6 +67,26 @@ return String.join(File.separator, backupDirPath, filename); } + public static String + getBackupLogFilePath(String backupID, String logID, boolean isAttachments) { + String backupDirPath = PlatformSpecificTools.getBackupDirectoryPath(); + + String filename; + if (isAttachments) { + filename = + String.join("-", "backup", backupID, "log", logID, "attachments"); + } else { + filename = String.join("-", "backup", backupID, "log", logID); + } + return String.join(File.separator, backupDirPath, filename); + } + + public static String getBackupUserKeysFilePath(String backupID) { + String backupDirPath = PlatformSpecificTools.getBackupDirectoryPath(); + String filename = String.join("-", "backup", backupID, "userkeys"); + return String.join(File.separator, backupDirPath, filename); + } + public static void removeBackupDirectory() { String backupDirPath = PlatformSpecificTools.getBackupDirectoryPath(); try { diff --git a/native/cpp/CommonCpp/Tools/PlatformSpecificTools.h b/native/cpp/CommonCpp/Tools/PlatformSpecificTools.h --- a/native/cpp/CommonCpp/Tools/PlatformSpecificTools.h +++ b/native/cpp/CommonCpp/Tools/PlatformSpecificTools.h @@ -12,6 +12,11 @@ static std::string getBackupDirectoryPath(); static std::string getBackupFilePath(std::string backupID, bool isAttachments); + static std::string getBackupLogFilePath( + std::string backupID, + std::string logID, + bool isAttachments); + static std::string getBackupUserKeysFilePath(std::string backupID); static void removeBackupDirectory(); }; diff --git a/native/ios/Comm/PlatformSpecificTools.mm b/native/ios/Comm/PlatformSpecificTools.mm --- a/native/ios/Comm/PlatformSpecificTools.mm +++ b/native/ios/Comm/PlatformSpecificTools.mm @@ -90,6 +90,38 @@ return [[backupDir URLByAppendingPathComponent:filename].path UTF8String]; } +std::string PlatformSpecificTools::getBackupLogFilePath( + std::string backupID, + std::string logID, + bool isAttachments) { + + NSURL *backupDir = getBackupDirAsURL(); + NSString *backupIDObjC = [NSString stringWithCString:backupID.c_str() + encoding:NSUTF8StringEncoding]; + NSString *logIDObjC = [NSString stringWithCString:logID.c_str() + encoding:NSUTF8StringEncoding]; + NSString *filename; + if (isAttachments) { + filename = [@[ @"backup", backupIDObjC, @"log", logIDObjC, @"attachments" ] + componentsJoinedByString:@"-"]; + } else { + filename = [@[ @"backup", backupIDObjC, @"log", logIDObjC ] + componentsJoinedByString:@"-"]; + } + return [[backupDir URLByAppendingPathComponent:filename].path UTF8String]; +} + +std::string +PlatformSpecificTools::getBackupUserKeysFilePath(std::string backupID) { + + NSURL *backupDir = getBackupDirAsURL(); + NSString *backupIDObjC = [NSString stringWithCString:backupID.c_str() + encoding:NSUTF8StringEncoding]; + NSString *filename = + [@[ @"backup", backupIDObjC, @"userkeys" ] componentsJoinedByString:@"-"]; + return [[backupDir URLByAppendingPathComponent:filename].path UTF8String]; +} + void PlatformSpecificTools::removeBackupDirectory() { NSURL *backupDir = getBackupDirAsURL(); if (![NSFileManager.defaultManager fileExistsAtPath:backupDir.path]) { diff --git a/native/native_rust_library/RustBackupExecutor.h b/native/native_rust_library/RustBackupExecutor.h --- a/native/native_rust_library/RustBackupExecutor.h +++ b/native/native_rust_library/RustBackupExecutor.h @@ -5,6 +5,9 @@ namespace comm { rust::String getBackupDirectoryPath(); -rust::String getBackupFilePath(rust::String backupID, bool isAttachments); +rust::String getBackupFilePath(rust::Str backupID, bool isAttachments); +rust::String +getBackupLogFilePath(rust::Str backupID, rust::Str logID, bool isAttachments); +rust::String getBackupUserKeysFilePath(rust::Str backupID); } // namespace comm diff --git a/native/native_rust_library/RustBackupExecutor.cpp b/native/native_rust_library/RustBackupExecutor.cpp --- a/native/native_rust_library/RustBackupExecutor.cpp +++ b/native/native_rust_library/RustBackupExecutor.cpp @@ -9,8 +9,19 @@ return rust::String(PlatformSpecificTools::getBackupDirectoryPath()); } -rust::String getBackupFilePath(rust::String backupID, bool isAttachments) { +rust::String getBackupFilePath(rust::Str backupID, bool isAttachments) { return rust::String(PlatformSpecificTools::getBackupFilePath( std::string(backupID), isAttachments)); } + +rust::String +getBackupLogFilePath(rust::Str backupID, rust::Str logID, bool isAttachments) { + return rust::String(PlatformSpecificTools::getBackupLogFilePath( + std::string(backupID), std::string(logID), isAttachments)); +} + +rust::String getBackupUserKeysFilePath(rust::Str backupID) { + return rust::String( + PlatformSpecificTools::getBackupUserKeysFilePath(std::string(backupID))); +} } // namespace comm diff --git a/native/native_rust_library/src/lib.rs b/native/native_rust_library/src/lib.rs --- a/native/native_rust_library/src/lib.rs +++ b/native/native_rust_library/src/lib.rs @@ -279,9 +279,21 @@ #[allow(unused)] #[cxx_name = "getBackupFilePath"] fn get_backup_file_path( - backup_id: String, + backup_id: &str, is_attachments: bool, ) -> Result<String>; + + #[allow(unused)] + #[cxx_name = "getBackupLogFilePath"] + fn get_backup_log_file_path( + backup_id: &str, + log_id: &str, + is_attachments: bool, + ) -> Result<String>; + + #[allow(unused)] + #[cxx_name = "getBackupUserKeysFilePath"] + fn get_backup_user_keys_file_path(backup_id: &str) -> Result<String>; } }