From 2e678252bdc6066c0a8a139b3c0432ad2c6026b8 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 20 Sep 2023 15:50:02 +0200 Subject: [PATCH] Implement first steps for sending file share links to files client Signed-off-by: Andy Scherzinger --- .../com/nextcloud/talk/chat/ChatActivity.kt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 75243e404..98fa652df 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2660,6 +2660,69 @@ class ChatActivity : ) } + fun isInstanceFileUrl(user: User, url: String): Boolean { + return url.startsWith(user.baseUrl!!) && + (isInstanceInternalFileShareUrl(user.baseUrl!!, url) || isInstanceInternalFileUrl(user.baseUrl!!, url)) + } + + fun isInstanceInternalFileShareUrl(baseUrl: String, url: String): Boolean { + // https://cloud.nextcloud.com/f/41 + return url.startsWith("$baseUrl/f/") || url.startsWith("$baseUrl/index.php/f/") + } + + fun extractInstanceInternalFileShareFileId(url: String): String { + // https://cloud.nextcloud.com/f/41 + return "41" + } + + fun isInstanceInternalFileUrl(baseUrl: String, url: String): Boolean { + //https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41 + return url.startsWith("$baseUrl/apps/files/") || url.startsWith("$baseUrl/index.php/apps/files/") + } + + fun extractInstanceInternalFileFileId(url: String): String { + // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41 + return "41" + } + + fun isInstanceInternalFileUrlNew(baseUrl: String, url: String): Boolean { + //https://cloud.nextcloud.com/apps/files/files/41?dir=/ + return url.startsWith("$baseUrl/apps/files/files/") || url.startsWith("$baseUrl/index.php/apps/files/files/") + } + + fun extractInstanceInternalFileFileIdNew(url: String): String { + // https://cloud.nextcloud.com/apps/files/files/41?dir=/ + return "41" + } + + override fun startActivity(intent: Intent) { + val user = currentUserProvider.currentUser.blockingGet() + if (intent.data != null && TextUtils.equals(intent.action, Intent.ACTION_VIEW)) { + val uri = intent.data.toString() + if (uri.startsWith(user.baseUrl!!)) { + if (isInstanceInternalFileShareUrl(user.baseUrl!!, uri)) { + // https://cloud.nextcloud.com/f/41 + val fileViewerUtils = FileViewerUtils(this, user) + fileViewerUtils.openFileInFilesApp(uri, extractInstanceInternalFileShareFileId(uri)) + } else if (isInstanceInternalFileUrl(user.baseUrl!!, uri)) { + // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41 + val fileViewerUtils = FileViewerUtils(this, user) + fileViewerUtils.openFileInFilesApp(uri, extractInstanceInternalFileFileId(uri)) + } else if (isInstanceInternalFileUrlNew(user.baseUrl!!, uri)) { + // https://cloud.nextcloud.com/apps/files/?dir=/Engineering&fileid=41 + val fileViewerUtils = FileViewerUtils(this, user) + fileViewerUtils.openFileInFilesApp(uri, extractInstanceInternalFileFileIdNew(uri)) + } else { + super.startActivity(intent) + } + } else { + super.startActivity(intent) + } + } else { + super.startActivity(intent) + } + } + fun sendSelectLocalFileIntent() { if (!permissionUtil.isFilesPermissionGranted()) { requestReadFilesPermissions()