From 2b46c88bf3d6599729619b3b94a686035f4d1a26 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Sun, 26 Jul 2026 15:52:42 +0300 Subject: [PATCH] Implement desktop support Signed-off-by: denis0001-dev --- .idea/artifacts/shared_jvm.xml | 8 + .idea/compiler.xml | 2 +- .idea/gradle.xml | 1 + .idea/kotlinc.xml | 7 + .idea/misc.xml | 3 +- README.en.md | 21 +- README.md | 21 +- app/desktop/build.gradle.kts | 106 +++++ .../main/kotlin/ru/fromchat/desktop/Main.kt | 249 ++++++++++++ .../xcshareddata/xcschemes/iosApp.xcscheme | 77 ++++ app/ios/iosApp/Info.plist | 8 + app/shared/build.gradle.kts | 38 +- .../ru/fromchat/KeepWebSocketAlive.android.kt | 3 + .../ui/calls/CallMediaLayer.android.kt | 27 +- .../ui/calls/NotifyIncomingCall.android.kt | 3 + .../settings/NotificationsScreen.android.kt | 4 +- .../composeResources/values-ru/strings.xml | 2 + .../composeResources/values/strings.xml | 2 + .../kotlin/ru/fromchat/KeepWebSocketAlive.kt | 8 + .../ru/fromchat/api/local/WebSocketManager.kt | 6 +- .../local/db/store/PublicChatProfileCache.kt | 45 +- .../ru/fromchat/legal/DocumentScreen.kt | 13 +- .../kotlin/ru/fromchat/logging/AppLogStore.kt | 13 +- .../commonMain/kotlin/ru/fromchat/ui/App.kt | 68 +++- .../fromchat/ui/calls/LiveKitCallWebPage.kt | 221 ++++++++++ .../fromchat/ui/calls/NotifyIncomingCall.kt | 4 + .../ui/calls/WebCallInCallControls.kt | 107 +++++ .../ru/fromchat/ui/chat/AttachmentPreview.kt | 45 +- .../kotlin/ru/fromchat/ui/chat/ChatInput.kt | 28 +- .../kotlin/ru/fromchat/ui/chat/ChatScreen.kt | 39 +- .../kotlin/ru/fromchat/ui/chat/ChatTopBar.kt | 27 +- .../kotlin/ru/fromchat/ui/chat/MessageItem.kt | 2 +- .../ui/chat/utils/AttachmentPickers.kt | 4 +- .../ui/components/ExpressiveStepFlow.kt | 21 +- .../ui/components/HazeActionButton.kt | 36 +- .../kotlin/ru/fromchat/ui/main/MainScreen.kt | 325 +++++++++------ .../ru/fromchat/ui/main/chats/ChatsTab.kt | 22 +- .../ui/main/settings/DevicesScreen.kt | 27 +- .../ui/main/settings/LogFilesScreen.kt | 3 +- .../ui/main/settings/NotificationsScreen.kt | 88 ++-- .../settings/server/ServerConfigScreen.kt | 21 +- .../fromchat/ui/profile/EditProfileScreen.kt | 21 +- .../ru/fromchat/ui/profile/ProfileScreen.kt | 25 +- .../ru/fromchat/IosApplicationBootstrap.kt | 2 + .../ru/fromchat/KeepWebSocketAlive.ios.kt | 3 + .../api/DeferredStartupNetwork.ios.kt | 2 +- .../cache/FromChatCacheGeneration.ios.kt | 2 +- .../LocalDecodedImageCache.ios.kt | 4 +- .../download/LocalImageFileDimensions.ios.kt | 35 +- .../api/local/send/OutboxProcessor.ios.kt | 23 +- .../workers/AttachmentUploadQueue.ios.kt | 16 +- .../ru/fromchat/logging/GzipCompress.ios.kt | 67 +-- .../ru/fromchat/logging/LogFileOps.ios.kt | 89 ++-- .../auth/captcha/SmartCaptchaWebView.ios.kt | 247 ++++++++++- .../ui/auth/yandex/YandexOAuthWebView.ios.kt | 383 +++++++++++++++++- .../fromchat/ui/calls/CallMediaLayer.ios.kt | 211 +++++++++- .../fromchat/ui/calls/InlineCallChrome.ios.kt | 6 +- .../ui/calls/NotifyIncomingCall.ios.kt | 3 + .../ui/chat/utils/AttachmentPickers.ios.kt | 207 +++++++++- .../ui/{ => components}/BackHandler.ios.kt | 10 +- .../fromchat/ui/debug/DebugApiScreen.ios.kt | 8 - .../main/settings/NotificationsScreen.ios.kt | 6 +- .../fromchat/utils/NetworkConnectivity.ios.kt | 33 +- .../ru/fromchat/KeepWebSocketAlive.jvm.kt | 3 + .../jvmMain/kotlin/ru/fromchat/Logger.jvm.kt | 33 ++ .../kotlin/ru/fromchat/api/ApiClient.jvm.kt | 32 ++ .../api/DeferredStartupNetwork.jvm.kt | 3 + .../ru/fromchat/api/FcmRegistration.jvm.kt | 9 + .../api/crypto/backup/BackupCrypto.jvm.kt | 82 ++++ .../ru/fromchat/api/crypto/dm/DmCrypto.jvm.kt | 117 ++++++ .../dm/PlatformAesGcmStreamDecrypt.jvm.kt | 117 ++++++ .../crypto/transport/TransportCrypto.jvm.kt | 86 ++++ .../transport/TransportFileEncryptor.jvm.kt | 32 ++ .../crypto/transport/TransportFileKey.jvm.kt | 55 +++ .../cache/AttachmentDiskThumbnail.jvm.kt | 31 ++ .../local/cache/AttachmentUploadLimits.jvm.kt | 5 + .../api/local/cache/FileWriteSink.jvm.kt | 27 ++ .../api/local/cache/FromChatCacheDirs.jvm.kt | 37 ++ .../cache/FromChatCacheGeneration.jvm.kt | 38 ++ .../cache/PendingFileSaveRegistry.jvm.kt | 38 ++ .../local/cache/ResumableUploadStorage.jvm.kt | 351 ++++++++++++++++ .../api/local/db/MessageDatabaseLock.jvm.kt | 6 + .../db/store/MessageDatabaseDriver.jvm.kt | 23 ++ .../AttachmentDownloadForeground.jvm.kt | 9 + .../local/download/DmFileDownloader.jvm.kt | 24 ++ .../download/EncryptedFileDownloader.jvm.kt | 15 + .../download/LocalDecodedImageCache.jvm.kt | 54 +++ .../download/LocalImageFileDimensions.jvm.kt | 17 + .../api/local/download/MessageFileSave.jvm.kt | 45 ++ .../local/download/MessageImageSave.jvm.kt | 29 ++ .../api/local/send/OutboxProcessor.jvm.kt | 13 + .../AttachmentFileCopyForeground.jvm.kt | 6 + .../workers/AttachmentUploadQueue.jvm.kt | 15 + .../ru/fromchat/desktop/DesktopAutostart.kt | 186 +++++++++ .../ru/fromchat/desktop/DesktopDeepLinkBus.kt | 48 +++ .../ru/fromchat/desktop/DesktopNotifier.kt | 37 ++ .../ru/fromchat/legal/LegalMarkdown.jvm.kt | 18 + .../ru/fromchat/logging/GzipCompress.jvm.kt | 10 + .../ru/fromchat/logging/LogFileOps.jvm.kt | 96 +++++ .../ru/fromchat/logging/LogShare.jvm.kt | 23 ++ .../ChatNotificationDismissals.jvm.kt | 5 + .../kotlin/ru/fromchat/ui/Theme.jvm.kt | 13 + .../auth/captcha/SmartCaptchaWebView.jvm.kt | 192 +++++++++ .../ui/auth/yandex/YandexOAuthWebView.jvm.kt | 112 +++++ .../fromchat/ui/calls/CallMediaLayer.jvm.kt | 246 +++++++++++ .../fromchat/ui/calls/InlineCallChrome.jvm.kt | 7 + .../ui/calls/NotifyIncomingCall.jvm.kt | 7 + .../chat/utils/AttachmentFileDownload.jvm.kt | 27 ++ .../chat/utils/AttachmentOpenFeedback.jvm.kt | 5 + .../ui/chat/utils/AttachmentPickers.jvm.kt | 74 ++++ .../fromchat/ui/components/BackHandler.jvm.kt | 11 + .../components/PredictiveBackHandler.jvm.kt | 13 + .../main/settings/NotificationsScreen.jvm.kt | 7 + .../fromchat/ui/profile/ProfileScreen.jvm.kt | 3 + .../fromchat/utils/NetworkConnectivity.jvm.kt | 12 + gradle/libs.versions.toml | 17 +- release.sh | 2 +- settings.gradle.kts | 2 +- utils/shared/build.gradle.kts | 9 + .../com/pr0gramm3r101/utils/Components.kt | 6 +- .../kotlin/com/pr0gramm3r101/utils/IosHmac.kt | 2 +- .../com/pr0gramm3r101/utils/Adaptive.jvm.kt | 9 + .../utils/ClipboardSupport.jvm.kt | 27 ++ .../com/pr0gramm3r101/utils/Compose.jvm.kt | 5 + .../com/pr0gramm3r101/utils/ImeMotion.jvm.kt | 11 + .../utils/SystemBarsVisibility.jvm.kt | 11 + .../com/pr0gramm3r101/utils/Utils.jvm.kt | 24 ++ .../com/pr0gramm3r101/utils/UtilsLibrary.kt | 5 + .../pr0gramm3r101/utils/crypto/Base64.jvm.kt | 9 + .../pr0gramm3r101/utils/crypto/Hmac.jvm.kt | 15 + .../utils/files/PlatformFileSystem.jvm.kt | 63 +++ .../utils/settings/JvmSettings.kt | 48 +++ .../utils/settings/SettingsFactory.jvm.kt | 4 + 133 files changed, 5446 insertions(+), 485 deletions(-) create mode 100644 .idea/artifacts/shared_jvm.xml create mode 100644 .idea/kotlinc.xml create mode 100644 app/desktop/build.gradle.kts create mode 100644 app/desktop/src/main/kotlin/ru/fromchat/desktop/Main.kt create mode 100644 app/ios/iosApp.xcodeproj/xcshareddata/xcschemes/iosApp.xcscheme create mode 100644 app/shared/src/androidMain/kotlin/ru/fromchat/KeepWebSocketAlive.android.kt create mode 100644 app/shared/src/androidMain/kotlin/ru/fromchat/ui/calls/NotifyIncomingCall.android.kt create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/KeepWebSocketAlive.kt create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/ui/calls/LiveKitCallWebPage.kt create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/ui/calls/NotifyIncomingCall.kt create mode 100644 app/shared/src/commonMain/kotlin/ru/fromchat/ui/calls/WebCallInCallControls.kt create mode 100644 app/shared/src/iosMain/kotlin/ru/fromchat/KeepWebSocketAlive.ios.kt rename app/shared/src/iosMain/kotlin/ru/fromchat/api/local/{cache => download}/LocalDecodedImageCache.ios.kt (97%) create mode 100644 app/shared/src/iosMain/kotlin/ru/fromchat/ui/calls/NotifyIncomingCall.ios.kt rename app/shared/src/iosMain/kotlin/ru/fromchat/ui/{ => components}/BackHandler.ios.kt (82%) delete mode 100644 app/shared/src/iosMain/kotlin/ru/fromchat/ui/debug/DebugApiScreen.ios.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/KeepWebSocketAlive.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/Logger.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/ApiClient.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/DeferredStartupNetwork.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/FcmRegistration.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/backup/BackupCrypto.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/dm/DmCrypto.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/dm/PlatformAesGcmStreamDecrypt.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/transport/TransportCrypto.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/transport/TransportFileEncryptor.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/crypto/transport/TransportFileKey.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/AttachmentDiskThumbnail.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/AttachmentUploadLimits.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/FileWriteSink.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/FromChatCacheDirs.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/FromChatCacheGeneration.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/PendingFileSaveRegistry.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/cache/ResumableUploadStorage.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/db/MessageDatabaseLock.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/db/store/MessageDatabaseDriver.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/AttachmentDownloadForeground.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/DmFileDownloader.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/EncryptedFileDownloader.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/LocalDecodedImageCache.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/LocalImageFileDimensions.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/MessageFileSave.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/download/MessageImageSave.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/send/OutboxProcessor.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/workers/AttachmentFileCopyForeground.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/api/local/workers/AttachmentUploadQueue.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopAutostart.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopDeepLinkBus.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/desktop/DesktopNotifier.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/legal/LegalMarkdown.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/logging/GzipCompress.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/logging/LogFileOps.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/logging/LogShare.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/notifications/ChatNotificationDismissals.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/Theme.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/auth/captcha/SmartCaptchaWebView.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/auth/yandex/YandexOAuthWebView.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/calls/CallMediaLayer.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/calls/InlineCallChrome.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/calls/NotifyIncomingCall.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/chat/utils/AttachmentFileDownload.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/chat/utils/AttachmentOpenFeedback.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/chat/utils/AttachmentPickers.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/components/BackHandler.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/components/PredictiveBackHandler.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/main/settings/NotificationsScreen.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/ui/profile/ProfileScreen.jvm.kt create mode 100644 app/shared/src/jvmMain/kotlin/ru/fromchat/utils/NetworkConnectivity.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/Adaptive.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/ClipboardSupport.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/Compose.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/ImeMotion.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/SystemBarsVisibility.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/Utils.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/UtilsLibrary.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/crypto/Base64.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/crypto/Hmac.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/files/PlatformFileSystem.jvm.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/settings/JvmSettings.kt create mode 100644 utils/shared/src/jvmMain/kotlin/com/pr0gramm3r101/utils/settings/SettingsFactory.jvm.kt diff --git a/.idea/artifacts/shared_jvm.xml b/.idea/artifacts/shared_jvm.xml new file mode 100644 index 0000000..2435e77 --- /dev/null +++ b/.idea/artifacts/shared_jvm.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/utils/shared/build/libs + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b86273d..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f7f8664..3d1446a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,7 @@