From 2884810ec43dbc17829f5e41282fa20c0c3d81ce Mon Sep 17 00:00:00 2001 From: TolaMironcenko Date: Sat, 29 Aug 2026 00:57:08 +0700 Subject: [PATCH] finish SwiftData migration with @Query views - Drive chat list, timeline and forward picker from SwiftData @Query instead of AppModel's in-memory arrays; inject the per-account ModelContext from RootView with an in-memory fallback. - Physically delete locally deleted messages (context.delete) and purge rows marked deleted by older builds on store open, so @Query views never resurrect them. - Delete the legacy JSON snapshot only after a successful import save and restore the completeUntilFirstUserAuthentication data protection attribute on the store file. - Mirror the old ChatArchive tolerant decoding in LegacyArchiveImporter so snapshots from older schema versions (missing reactions, isGroupMessage, roster fields) still import. - Cover the new behaviour in ArchiveStoreTests and guard it with new verify.sh invariants; update AGENTS.md, ARCHITECTURE.md and SECURITY.md. --- AGENTS.md | 14 +- Docs/ARCHITECTURE.md | 14 +- Docs/SECURITY.md | 24 +- .../AppIcon-Watch-Notification-45mm@2x.png | Bin 0 -> 7155 bytes .../AppIcon-Watch-QuickLook-45mm@2x.png | Bin 0 -> 63461 bytes .../AppIcon-Watch-QuickLook-49mm@2x.png | Bin 0 -> 75866 bytes .../AppIcon.appiconset/Contents.json | 3 + Scripts/verify.sh | 40 ++- Sources/Shared/Models/AppModel.swift | 54 +++- Sources/Shared/Persistence/ArchiveStore.swift | 54 +++- .../Persistence/LegacyArchiveImporter.swift | 257 ++++++++++++++++++ Sources/Shared/UI/ChatView.swift | 71 ++++- Sources/Shared/UI/ForwardMessageView.swift | 21 +- Sources/Shared/UI/MainChatView.swift | 29 +- Sources/Shared/UI/RootView.swift | 2 + Tests/ArchiveStoreTests.swift | 135 +++++++-- 16 files changed, 653 insertions(+), 65 deletions(-) create mode 100644 Resources/AppAssets.xcassets/AppIcon.appiconset/AppIcon-Watch-Notification-45mm@2x.png create mode 100644 Resources/AppAssets.xcassets/AppIcon.appiconset/AppIcon-Watch-QuickLook-45mm@2x.png create mode 100644 Resources/AppAssets.xcassets/AppIcon.appiconset/AppIcon-Watch-QuickLook-49mm@2x.png diff --git a/AGENTS.md b/AGENTS.md index 091ce75..d45c64f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,11 +8,17 @@ and the Martin / MartinOMEMO libraries. The Xcode project is generated from - `Sources/App/` — iOS/macOS app entry point (`LumaApp.swift`). - `Sources/Shared/` — shared code: - - `Models/` — value types and pure policy enums (`ChatMessage`, - `ArchiveSyncPagination`, `ChatTypingPolicy`, …). - - `UI/` — SwiftUI views and components. + - `Models/` — value types and pure policy enums (`ArchiveSyncPagination`, + `ChatTypingPolicy`, …) plus the SwiftData `@Model` classes + (`ChatMessage`, `Conversation`). + - `UI/` — SwiftUI views; chat list, timeline and forward picker read + SwiftData through `@Query` (`MainChatView`, `ChatView`, + `ForwardMessageView`). - `XMPP/` — `XMPPService` (MAM/OMEMO/MUC), `LumaCallEngine`, OMEMO store. - - `Persistence/` — `ChatArchive` (JSON snapshot), preferences. + - `Persistence/` — `ArchiveStore` (per-account SwiftData container), + `ArchiveMetadataRecord` (durable MAM checkpoint metadata), + `LegacyArchiveImporter` (one-time legacy JSON snapshot migration), + preferences. - `Services/`, `Security/` — media, notifications, credentials. - `Sources/Watch/` — single-target watchOS app. - `Tests/` — XCTest unit tests. diff --git a/Docs/ARCHITECTURE.md b/Docs/ARCHITECTURE.md index 91b0eb7..df37e52 100644 --- a/Docs/ARCHITECTURE.md +++ b/Docs/ARCHITECTURE.md @@ -9,7 +9,9 @@ 3. `LumaOMEMOStore` адаптирует постоянное состояние к Signal storage callbacks; AES-GCM выполняется CryptoKit. 4. `AppModel` сводит сетевые события в UI-состояние, дедуплицирует MAM/live - сообщения и сохраняет snapshot локально. + сообщения и сохраняет их в per-account SwiftData-хранилище (`ArchiveStore`, + отдельный `ModelContainer` на аккаунт); список чатов, лента и список + получателей при пересылке читают данные напрямую через `@Query`. 5. SwiftUI views используют один и тот же слой моделей на iOS/iPadOS/macOS. 6. watchOS не держит отдельный XMPP-сокет: iPhone передаёт компактный snapshot, текстовые ответы возвращаются немедленно или через гарантированную очередь, @@ -60,7 +62,7 @@ Signal-криптография не блокирует главный пото автоматически повторяется ограниченное число раз. При уходе приложения с экрана и на время записи/отправки видеосообщения активный MAM-запрос закрывается, чтобы дешифрование истории не конкурировало с камерой и upload. Только после commit -`AppModel` обновляет SwiftUI, локальный snapshot и Apple Watch; незавершённый +`AppModel` обновляет SwiftUI, SwiftData-хранилище и Apple Watch; незавершённый проход при timeout/disconnect отбрасывается целиком. Редактирование реализовано стандартным XEP-0308: исправление получает новый id и @@ -100,8 +102,9 @@ XEP-0424 retraction проходит через тот же plaintext/OMEMO-пу после чего заменяет payload tombstone, очищает медиакэш и блокирует дальнейшее редактирование/пересылку. Retract, пришедший раньше исходной stanza при MAM, временно удерживается в ограниченной очереди. Локальное удаление физически -убирает запись из snapshot и сохраняет отдельный набор подавленных id, чтобы -последующая MAM-синхронизация не добавила её обратно. +удаляет строку из SwiftData-хранилища (при открытии хранилище также вычищает +строки, помеченные удалёнными старыми сборками) и сохраняет отдельный набор +подавленных id, чтобы последующая MAM-синхронизация не добавила её обратно. Пересылка текста создаёт новое сообщение с явной подписью источника. Медиа не переиспользует старый `aesgcm://` URL: клиент получает расшифрованные байты и @@ -205,6 +208,7 @@ PushKit/CallKit и серверной APNs-инфраструктуры. - APNs provider + XEP-0357 registration; - современный `urn:xmpp:omemo:2` adapter и миграция устройств; - MIX и реакции; -- SQLite/SQLCipher вместо JSON snapshot; +- шифрование базы SQLCipher поверх SwiftData SQLite (история уже хранится + в SwiftData, а не в JSON snapshot); - PushKit/CallKit для фоновых входящих звонков и групповые звонки; - share extension и notification service extension. diff --git a/Docs/SECURITY.md b/Docs/SECURITY.md index 22bfb87..fb3ae1c 100644 --- a/Docs/SECURITY.md +++ b/Docs/SECURITY.md @@ -1,7 +1,7 @@ # Безопасность и модель угроз MVP - Пароль XMPP сохраняется в Keychain и не попадает в `UserDefaults` или - snapshot истории. + локальное хранилище истории. - Проверка сертификата не отключается. Ручной host меняет маршрут подключения, но XMPP domain/JID остаётся исходной идентичностью. - TLS trust оценивается системным Apple Security framework как сертификат @@ -49,22 +49,24 @@ STUN/TURN-сервис видит сетевые адреса и объём трафика. TURN ретранслирует уже зашифрованный медиапоток. Если Prosody не публикует собственный сервис через XEP-0215, резервный публичный STUN получает запрос на определение адреса. -- На iOS файлы OMEMO-состояния и локальной истории получают data-protection - `completeUntilFirstUserAuthentication`. +- На iOS файл OMEMO-состояния и база локальной истории (SwiftData + `.store`) получают data-protection `completeUntilFirstUserAuthentication`. ## Известные ограничения -- На macOS история и OMEMO state лежат в sandbox Application Support без - дополнительного SQLCipher-слоя; защиту обеспечивает учётная запись и FileVault - пользователя. Для повышенной модели угроз нужна зашифрованная база. +- На macOS история (SwiftData SQLite в Application Support) и OMEMO state + лежат в sandbox без дополнительного SQLCipher-слоя; защиту обеспечивает + учётная запись и FileVault пользователя. Для повышенной модели угроз нужна + зашифрованная база. - Локальная история содержит уже расшифрованные тексты, как и у большинства клиентов. Полное удаление требует выхода с опцией удаления истории. -- «Удалить у меня» удаляет запись только из локального snapshot этого устройства - и запоминает id против повторной MAM-загрузки; оно не удаляет серверный архив, - другие собственные устройства или копию собеседника. +- «Удалить у меня» удаляет запись только из локального SwiftData-хранилища + этого устройства и запоминает id против повторной MAM-загрузки; оно не + удаляет серверный архив, другие собственные устройства или копию собеседника. - Глобальная политика шифрования хранится в `UserDefaults` отдельно для каждого - JID, а переопределение чата — в локальном snapshot. Эти значения не являются - секретами, но прямо влияют на конфиденциальность следующей отправки. + JID, а переопределение чата — в локальном SwiftData-хранилище. Эти значения + не являются секретами, но прямо влияют на конфиденциальность следующей + отправки. - Аватары XEP-0084/vCard не шифруются OMEMO. Их видимость определяется настройками PEP и roster на сервере; не используйте аватар как секретное фото. - Используемая реализация MartinOMEMO поддерживает распространённый legacy diff --git a/Resources/AppAssets.xcassets/AppIcon.appiconset/AppIcon-Watch-Notification-45mm@2x.png b/Resources/AppAssets.xcassets/AppIcon.appiconset/AppIcon-Watch-Notification-45mm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ceff83df9007cc00c8df185914b63cb8605ea7 GIT binary patch literal 7155 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 z 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%0D6+Yhm@JAE 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

tgpbGl7M3O1P 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 GWY3142g=HJQ5|ZyEV4YMp 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 private var persistTask: Task? private var watchSyncTask: Task? @@ -257,9 +260,37 @@ final class AppModel: ObservableObject { return entries } + /// The `ModelContext` injected into the SwiftUI environment so views + /// can read conversations and messages through `@Query`. Falls back to + /// an in-memory context when the on-disk store cannot be opened, keeping + /// the session usable without persistence. + var modelContext: ModelContext { + if let store { return store.context } + if let fallbackContext { return fallbackContext } + let schema = Schema([ + Conversation.self, + ChatMessage.self, + ArchiveMetadata.self, + ]) + let configuration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true) + let container = try! ModelContainer(for: schema, configurations: [configuration]) + let context = ModelContext(container) + fallbackContext = context + return context + } + + /// Opens the per-account SwiftData store before `account` is published so + /// the `@Query`-backed screens never render without a usable context. + private func prepareStore(for jid: String) { + guard store == nil || storeAccountJID != jid else { return } + store = try? ArchiveStore(accountJID: jid) + storeAccountJID = jid + } + func bootstrap() async { guard !RuntimeEnvironment.isRunningTests else { return } guard let saved = preferences.load() else { return } + prepareStore(for: saved.normalizedJID) account = saved globalEncryptionEnabled = preferences.encryptionEnabled(for: saved.normalizedJID) typingIndicatorsEnabled = preferences.chatStatesEnabled(for: saved.normalizedJID) @@ -270,6 +301,7 @@ final class AppModel: ObservableObject { guard let storedPassword = try credentials.password(for: saved.normalizedJID) else { account = nil store = nil + fallbackContext = nil conversations = [] rosterContactJIDs = [] messages = [] @@ -281,6 +313,7 @@ final class AppModel: ObservableObject { } catch { account = nil store = nil + fallbackContext = nil conversations = [] rosterContactJIDs = [] messages = [] @@ -323,6 +356,7 @@ final class AppModel: ObservableObject { rosterContactJIDs = [] resetMediaSendActivity() resetMediaPreviews() + prepareStore(for: account.normalizedJID) self.account = account globalEncryptionEnabled = preferences.encryptionEnabled(for: account.normalizedJID) typingIndicatorsEnabled = preferences.chatStatesEnabled(for: account.normalizedJID) @@ -341,6 +375,7 @@ final class AppModel: ObservableObject { await xmpp.disconnect() self.account = nil store = nil + fallbackContext = nil conversations = [] rosterContactJIDs = [] messages = [] @@ -364,6 +399,7 @@ final class AppModel: ObservableObject { watchSyncTask?.cancel() watchSyncTask = nil store = nil + fallbackContext = nil account = nil conversations = [] rosterContactJIDs = [] @@ -884,6 +920,7 @@ final class AppModel: ObservableObject { let affectedConversations = Set(selected.map(\.conversationID)) for message in selected { + modelContext.delete(message) locallyDeletedMessageIDs.insert( Self.localDeletionKey( messageID: message.clientID, @@ -2116,7 +2153,7 @@ final class AppModel: ObservableObject { } } else { let conversation = Conversation(jid: normalized, displayName: name) - store?.context.insert(conversation) + modelContext.insert(conversation) conversations.append(conversation) } if conversations.first(where: { $0.jid == normalized })?.isGroup != true { @@ -2169,7 +2206,7 @@ final class AppModel: ObservableObject { shouldAutojoin: shouldAutojoin, invitedBy: invitedBy ) - store?.context.insert(conversation) + modelContext.insert(conversation) conversations.append(conversation) } if !isApplyingArchiveBatch { @@ -2555,8 +2592,8 @@ final class AppModel: ObservableObject { // `merged` is the freshly-created incoming message; replace the // previously managed object with it so SwiftData does not keep // an orphaned duplicate of the same clientID. - store?.context.delete(previous) - store?.context.insert(merged) + modelContext.delete(previous) + modelContext.insert(merged) } if let stanzaID = merged.stanzaID { messageIndexByStanzaKey[ @@ -2575,7 +2612,7 @@ final class AppModel: ObservableObject { updateConversationPreview(for: merged, incrementUnread: false) return false } - store?.context.insert(message) + modelContext.insert(message) messages.append(message) let insertedIndex = messages.index(before: messages.endIndex) messageIndexByStorageKey[ @@ -2757,8 +2794,9 @@ final class AppModel: ObservableObject { private func loadArchive(for jid: String) async { resetArchiveBatchState() resetMediaPreviews() - guard let store = try? ArchiveStore(accountJID: jid) else { - self.store = nil + prepareStore(for: jid) + guard let store else { + fallbackContext = nil return } self.store = store @@ -3058,7 +3096,7 @@ final class AppModel: ObservableObject { } private static func localDeletionKey(messageID: String, conversationID: String) -> String { - conversationID.lowercased() + "\u{1F}" + messageID + ArchiveStore.deletionKey(messageID: messageID, conversationID: conversationID) } } diff --git a/Sources/Shared/Persistence/ArchiveStore.swift b/Sources/Shared/Persistence/ArchiveStore.swift index 5b58a5d..eb11a2d 100644 --- a/Sources/Shared/Persistence/ArchiveStore.swift +++ b/Sources/Shared/Persistence/ArchiveStore.swift @@ -43,8 +43,10 @@ final class ArchiveStore { container = try ModelContainer(for: schema, configurations: [configuration]) context = ModelContext(container) context.autosaveEnabled = false + applyDataProtection() migrateLegacyJSONIfNeeded() + purgeLocallyDeletedMessages() } func load() -> Loaded { @@ -86,6 +88,7 @@ final class ArchiveStore { MAMCheckpointEntry(key: $0.key, checkpoint: $0.value) } try context.save() + applyDataProtection() } func erase() throws { @@ -121,11 +124,58 @@ final class ArchiveStore { metadata.lastSuccessfulMAMSync = imported.lastSuccessfulMAMSync metadata.lastSuccessfulMAMCursor = imported.lastSuccessfulMAMCursor metadata.mamCheckpoints = imported.mamCheckpoints - try? context.save() + do { + try context.save() + } catch { + // The imported rows stay pending in memory so this session keeps + // the history, but the legacy JSON remains on disk as the only + // durable copy until a save actually succeeds. + return + } + applyDataProtection() try? FileManager.default.removeItem(at: legacyJSONURL) } - private static func stableHash(_ value: String) -> String { + /// Removes rows that older builds only marked as locally deleted (the + /// legacy snapshot filtered them at load time). `@Query`-based views read + /// the store directly, so these rows must physically disappear. + func purgeLocallyDeletedMessages() { + let metadata = fetchMetadata() + let deletedKeys = Set(metadata.locallyDeletedMessageIDs) + guard !deletedKeys.isEmpty else { return } + let messages = (try? context.fetch(FetchDescriptor())) ?? [] + var removedAny = false + for message in messages { + let key = Self.deletionKey( + messageID: message.clientID, + conversationID: message.conversationID + ) + guard deletedKeys.contains(key) else { continue } + context.delete(message) + removedAny = true + } + if removedAny { + try? context.save() + applyDataProtection() + } + } + + /// Key format shared with `AppModel.localDeletionKey`: + /// `\u{1F}`. + static func deletionKey(messageID: String, conversationID: String) -> String { + conversationID.lowercased() + "\u{1F}" + messageID + } + + private func applyDataProtection() { +#if os(iOS) + try? FileManager.default.setAttributes( + [.protectionKey: FileProtectionType.completeUntilFirstUserAuthentication], + ofItemAtPath: storeURL.path + ) +#endif + } + + static func stableHash(_ value: String) -> String { let hash = value.lowercased().utf8.reduce(UInt64(14_695_981_039_346_656_037)) { partial, byte in (partial ^ UInt64(byte)) &* 1_099_511_628_211 } diff --git a/Sources/Shared/Persistence/LegacyArchiveImporter.swift b/Sources/Shared/Persistence/LegacyArchiveImporter.swift index 7e9c851..bed14e1 100644 --- a/Sources/Shared/Persistence/LegacyArchiveImporter.swift +++ b/Sources/Shared/Persistence/LegacyArchiveImporter.swift @@ -2,6 +2,9 @@ import Foundation /// Reads the legacy JSON snapshot and converts it into SwiftData `@Model` /// objects once, so existing history survives the migration from the JSON file. +/// Decoding mirrors the tolerant decoders of the removed `ChatArchive`: +/// every field that was ever optional or added later falls back to a default, +/// so snapshots written by older schema versions still import. enum LegacyArchiveImporter { struct LegacyConversation: Codable { enum Kind: String, Codable { case direct, group } @@ -20,6 +23,80 @@ enum LegacyArchiveImporter { var shouldAutojoin: Bool var occupantCount: Int var invitedBy: String? + + init( + id: String, + jid: String, + displayName: String, + lastMessage: String, + lastActivity: Date, + unreadCount: Int, + isOnline: Bool, + isPinned: Bool, + encryptionPreference: EncryptionPreference, + kind: Kind, + groupNickname: String? = nil, + isGroupJoined: Bool, + shouldAutojoin: Bool, + occupantCount: Int, + invitedBy: String? = nil + ) { + self.id = id + self.jid = jid + self.displayName = displayName + self.lastMessage = lastMessage + self.lastActivity = lastActivity + self.unreadCount = unreadCount + self.isOnline = isOnline + self.isPinned = isPinned + self.encryptionPreference = encryptionPreference + self.kind = kind + self.groupNickname = groupNickname + self.isGroupJoined = isGroupJoined + self.shouldAutojoin = shouldAutojoin + self.occupantCount = occupantCount + self.invitedBy = invitedBy + } + + private enum CodingKeys: String, CodingKey { + case id + case jid + case displayName + case lastMessage + case lastActivity + case unreadCount + case isOnline + case isPinned + case encryptionPreference + case kind + case groupNickname + case isGroupJoined + case shouldAutojoin + case occupantCount + case invitedBy + } + + init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + jid = try values.decode(String.self, forKey: .jid) + id = try values.decodeIfPresent(String.self, forKey: .id) ?? jid.lowercased() + displayName = try values.decode(String.self, forKey: .displayName) + lastMessage = try values.decode(String.self, forKey: .lastMessage) + lastActivity = try values.decode(Date.self, forKey: .lastActivity) + unreadCount = try values.decode(Int.self, forKey: .unreadCount) + isOnline = try values.decode(Bool.self, forKey: .isOnline) + isPinned = try values.decode(Bool.self, forKey: .isPinned) + encryptionPreference = try values.decodeIfPresent( + EncryptionPreference.self, + forKey: .encryptionPreference + ) ?? .inheritGlobal + kind = try values.decodeIfPresent(Kind.self, forKey: .kind) ?? .direct + groupNickname = try values.decodeIfPresent(String.self, forKey: .groupNickname) + isGroupJoined = try values.decodeIfPresent(Bool.self, forKey: .isGroupJoined) ?? false + shouldAutojoin = try values.decodeIfPresent(Bool.self, forKey: .shouldAutojoin) ?? false + occupantCount = max(0, try values.decodeIfPresent(Int.self, forKey: .occupantCount) ?? 0) + invitedBy = try values.decodeIfPresent(String.self, forKey: .invitedBy) + } } struct LegacyMessage: Codable { @@ -56,9 +133,133 @@ enum LegacyArchiveImporter { var isGroupMessage: Bool var callHistory: CallHistoryMetadata? var reactions: [MessageReaction] + + init( + id: String, + conversationID: String, + senderJID: String, + body: String, + timestamp: Date, + direction: Direction, + delivery: Delivery, + security: Security, + kind: Kind, + remoteAttachmentURL: String? = nil, + localFilename: String? = nil, + mimeType: String? = nil, + duration: TimeInterval? = nil, + byteCount: Int? = nil, + encryptionFingerprint: String? = nil, + editedAt: Date? = nil, + replyToID: String? = nil, + replyToJID: String? = nil, + replyPreview: String? = nil, + forwardedFrom: String? = nil, + retractedAt: Date? = nil, + originID: String? = nil, + stanzaID: String? = nil, + senderDisplayName: String? = nil, + isGroupMessage: Bool = false, + callHistory: CallHistoryMetadata? = nil, + reactions: [MessageReaction] = [] + ) { + self.id = id + self.conversationID = conversationID + self.senderJID = senderJID + self.body = body + self.timestamp = timestamp + self.direction = direction + self.delivery = delivery + self.security = security + self.kind = kind + self.remoteAttachmentURL = remoteAttachmentURL + self.localFilename = localFilename + self.mimeType = mimeType + self.duration = duration + self.byteCount = byteCount + self.encryptionFingerprint = encryptionFingerprint + self.editedAt = editedAt + self.replyToID = replyToID + self.replyToJID = replyToJID + self.replyPreview = replyPreview + self.forwardedFrom = forwardedFrom + self.retractedAt = retractedAt + self.originID = originID + self.stanzaID = stanzaID + self.senderDisplayName = senderDisplayName + self.isGroupMessage = isGroupMessage + self.callHistory = callHistory + self.reactions = reactions + } + + private enum CodingKeys: String, CodingKey { + case id + case conversationID + case senderJID + case body + case timestamp + case direction + case delivery + case security + case kind + case remoteAttachmentURL + case localFilename + case mimeType + case duration + case byteCount + case encryptionFingerprint + case editedAt + case replyToID + case replyToJID + case replyPreview + case forwardedFrom + case retractedAt + case originID + case stanzaID + case senderDisplayName + case isGroupMessage + case callHistory + case reactions + } + + init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + id = try values.decode(String.self, forKey: .id) + conversationID = try values.decode(String.self, forKey: .conversationID).lowercased() + senderJID = try values.decode(String.self, forKey: .senderJID) + body = try values.decode(String.self, forKey: .body) + timestamp = try values.decode(Date.self, forKey: .timestamp) + direction = try values.decode(Direction.self, forKey: .direction) + delivery = try values.decode(Delivery.self, forKey: .delivery) + security = try values.decode(Security.self, forKey: .security) + kind = try values.decode(Kind.self, forKey: .kind) + remoteAttachmentURL = try values.decodeIfPresent(String.self, forKey: .remoteAttachmentURL) + localFilename = try values.decodeIfPresent(String.self, forKey: .localFilename) + mimeType = try values.decodeIfPresent(String.self, forKey: .mimeType) + duration = try values.decodeIfPresent(TimeInterval.self, forKey: .duration) + byteCount = try values.decodeIfPresent(Int.self, forKey: .byteCount) + encryptionFingerprint = try values.decodeIfPresent( + String.self, + forKey: .encryptionFingerprint + ) + editedAt = try values.decodeIfPresent(Date.self, forKey: .editedAt) + replyToID = try values.decodeIfPresent(String.self, forKey: .replyToID) + replyToJID = try values.decodeIfPresent(String.self, forKey: .replyToJID) + replyPreview = try values.decodeIfPresent(String.self, forKey: .replyPreview) + forwardedFrom = try values.decodeIfPresent(String.self, forKey: .forwardedFrom) + retractedAt = try values.decodeIfPresent(Date.self, forKey: .retractedAt) + originID = try values.decodeIfPresent(String.self, forKey: .originID) + stanzaID = try values.decodeIfPresent(String.self, forKey: .stanzaID) + senderDisplayName = try values.decodeIfPresent(String.self, forKey: .senderDisplayName) + isGroupMessage = try values.decodeIfPresent(Bool.self, forKey: .isGroupMessage) ?? false + callHistory = try values.decodeIfPresent(CallHistoryMetadata.self, forKey: .callHistory) + reactions = try values.decodeIfPresent([MessageReaction].self, forKey: .reactions) ?? [] + } } struct Snapshot: Codable { + static let currentSchemaVersion = 6 + var schemaVersion: Int var conversations: [LegacyConversation] var messages: [LegacyMessage] @@ -67,6 +268,62 @@ enum LegacyArchiveImporter { var lastSuccessfulMAMSync: Date? var lastSuccessfulMAMCursor: String? var mamCheckpoints: [MAMArchiveKey: MAMArchiveCheckpoint] + + init( + conversations: [LegacyConversation], + messages: [LegacyMessage], + locallyDeletedMessageIDs: Set = [], + rosterContactJIDs: Set = [], + lastSuccessfulMAMSync: Date? = nil, + lastSuccessfulMAMCursor: String? = nil, + mamCheckpoints: [MAMArchiveKey: MAMArchiveCheckpoint] = [:] + ) { + self.schemaVersion = Self.currentSchemaVersion + self.conversations = conversations + self.messages = messages + self.locallyDeletedMessageIDs = locallyDeletedMessageIDs + self.rosterContactJIDs = rosterContactJIDs + self.lastSuccessfulMAMSync = lastSuccessfulMAMSync + self.lastSuccessfulMAMCursor = lastSuccessfulMAMCursor + self.mamCheckpoints = mamCheckpoints + } + + private enum CodingKeys: String, CodingKey { + case schemaVersion + case conversations + case messages + case locallyDeletedMessageIDs + case rosterContactJIDs + case lastSuccessfulMAMSync + case lastSuccessfulMAMCursor + case mamCheckpoints + } + + init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + schemaVersion = try values.decodeIfPresent(Int.self, forKey: .schemaVersion) ?? 1 + conversations = try values.decode([LegacyConversation].self, forKey: .conversations) + messages = try values.decode([LegacyMessage].self, forKey: .messages) + locallyDeletedMessageIDs = try values.decodeIfPresent( + Set.self, + forKey: .locallyDeletedMessageIDs + ) ?? [] + rosterContactJIDs = try values.decodeIfPresent( + Set.self, + forKey: .rosterContactJIDs + ) ?? [] + lastSuccessfulMAMSync = try values.decodeIfPresent( + Date.self, + forKey: .lastSuccessfulMAMSync + ) + lastSuccessfulMAMCursor = ArchiveSyncCheckpoint.normalizedCursor( + try values.decodeIfPresent(String.self, forKey: .lastSuccessfulMAMCursor) + ) + mamCheckpoints = try values.decodeIfPresent( + [MAMArchiveKey: MAMArchiveCheckpoint].self, + forKey: .mamCheckpoints + ) ?? [:] + } } struct Imported { diff --git a/Sources/Shared/UI/ChatView.swift b/Sources/Shared/UI/ChatView.swift index 58fab13..898b2bd 100644 --- a/Sources/Shared/UI/ChatView.swift +++ b/Sources/Shared/UI/ChatView.swift @@ -2,6 +2,7 @@ import CoreTransferable import Foundation import ImageIO import PhotosUI +import SwiftData import SwiftUI import UniformTypeIdentifiers @@ -67,6 +68,65 @@ struct ChatView: View { @State private var captureAttemptID = UUID() @State private var captureStartTask: Task? @State private var captureSuspendsArchiveSync = false + @State private var timelineEntries: [ChatTimelineEntry] = [] + + /// Messages of this conversation straight from the SwiftData store, + /// ordered like `AppModel.selectedMessages`: timestamp, then clientID. + @Query private var messages: [ChatMessage] + + init(model: AppModel, conversation: Conversation) { + self.model = model + self.conversation = conversation + let conversationJID = conversation.jid + _messages = Query( + filter: #Predicate { message in + message.conversationID == conversationJID + }, + sort: [ + SortDescriptor(\ChatMessage.timestamp, order: .forward), + SortDescriptor(\ChatMessage.clientID, order: .forward), + ] + ) + _audioRecorder = StateObject(wrappedValue: AudioMessageRecorder()) + _isComposerFocused = FocusState() + _draft = State(initialValue: "") + _showingFileImporter = State(initialValue: false) + _fileImportMode = State(initialValue: FileImportMode.files) + _showingEncryption = State(initialValue: false) + _showingVideoNoteRecorder = State(initialValue: false) + _videoNoteIsSending = State(initialValue: false) + _showingMediaPicker = State(initialValue: false) + _showingPhotoCamera = State(initialValue: false) + _photoCameraIsPreparingResult = State(initialValue: false) + _showingLocationPicker = State(initialValue: false) + _showingGroupInfo = State(initialValue: false) + _showingAttachmentPreview = State(initialValue: false) + _attachmentPreviewPresentationPending = State(initialValue: false) + _attachmentPreviewPresentationTask = State?>(initialValue: nil) + _pickedMediaItems = State<[PhotosPickerItem]>(initialValue: []) + _attachmentDrafts = State<[AttachmentDraft]>(initialValue: []) + _isPreparingAttachments = State(initialValue: false) + _editingMessageID = State(initialValue: nil) + _replyingToMessageID = State(initialValue: nil) + _forwardingSelection = State(initialValue: nil) + _selectedMessageIDs = State>(initialValue: []) + _destructiveAction = State(initialValue: nil) + _replyThreadSelection = State(initialValue: nil) + _emojiPickerPresentation = State(initialValue: nil) + _hasCompletedInitialScroll = State(initialValue: false) + _isNearTimelineBottom = State(initialValue: true) + _historyLoadAnchorID = State(initialValue: nil) + _historyTopTriggerArmed = State(initialValue: true) + _activeCaptureMode = State(initialValue: nil) + _preparingCaptureMode = State(initialValue: nil) + _captureGestureIsActive = State(initialValue: false) + _captureIsLocked = State(initialValue: false) + _captureDragTranslation = State(initialValue: CGSize.zero) + _captureAttemptID = State(initialValue: UUID()) + _captureStartTask = State?>(initialValue: nil) + _captureSuspendsArchiveSync = State(initialValue: false) + _timelineEntries = State<[ChatTimelineEntry]>(initialValue: []) + } var body: some View { VStack(spacing: 0) { @@ -352,13 +412,16 @@ struct ChatView: View { model.selectedMessages.filter { selectedMessageIDs.contains($0.clientID) } } + private func rebuildTimelineEntries(from newMessages: [ChatMessage]? = nil) { + timelineEntries = ChatTimelineEntry.make(from: newMessages ?? messages) + } + private var isSelectingMessages: Bool { !selectedMessageIDs.isEmpty } private var messageTimeline: some View { ScrollViewReader { proxy in - let timelineEntries = model.selectedTimelineEntries GeometryReader { viewport in ZStack(alignment: .bottomTrailing) { ScrollView { @@ -468,6 +531,12 @@ struct ChatView: View { .scrollDismissesKeyboard(.interactively) #endif .coordinateSpace(name: Self.timelineCoordinateSpace) + .onAppear { + rebuildTimelineEntries() + } + .onChange(of: messages) { _, newMessages in + rebuildTimelineEntries(from: newMessages) + } #if os(macOS) .onPreferenceChange(TimelineBottomYPreferenceKey.self) { bottomY in updateTimelineBottomProximity( diff --git a/Sources/Shared/UI/ForwardMessageView.swift b/Sources/Shared/UI/ForwardMessageView.swift index c285ace..0a4cc8d 100644 --- a/Sources/Shared/UI/ForwardMessageView.swift +++ b/Sources/Shared/UI/ForwardMessageView.swift @@ -1,3 +1,4 @@ +import SwiftData import SwiftUI @MainActor @@ -10,6 +11,9 @@ struct ForwardMessageView: View { @State private var destinationJID = "" @State private var isForwarding = false + /// SwiftData-backed destination list, ordered like the main chat list. + @Query private var conversations: [Conversation] + init( model: AppModel, messages: [ChatMessage], @@ -18,6 +22,11 @@ struct ForwardMessageView: View { _model = ObservedObject(wrappedValue: model) self.messages = messages.filter(\.canBeForwarded) self.onComplete = onComplete + _conversations = Query( + sort: [ + SortDescriptor(\Conversation.lastActivity, order: .reverse), + ] + ) } var body: some View { @@ -39,9 +48,9 @@ struct ForwardMessageView: View { } } - if !model.conversations.isEmpty { + if !orderedConversations.isEmpty { Section("Чаты") { - ForEach(model.conversations) { conversation in + ForEach(orderedConversations) { conversation in Button { forward(to: conversation.jid) } label: { @@ -105,6 +114,14 @@ struct ForwardMessageView: View { #endif } + /// Pinned-first ordering, matching the main chat list. + private var orderedConversations: [Conversation] { + conversations.sorted { lhs, rhs in + if lhs.isPinned != rhs.isPinned { return lhs.isPinned } + return lhs.lastActivity > rhs.lastActivity + } + } + private func forward(to jid: String) { guard !isForwarding, !messages.isEmpty else { return } isForwarding = true diff --git a/Sources/Shared/UI/MainChatView.swift b/Sources/Shared/UI/MainChatView.swift index 838c303..4c0bc8f 100644 --- a/Sources/Shared/UI/MainChatView.swift +++ b/Sources/Shared/UI/MainChatView.swift @@ -1,4 +1,5 @@ import Foundation +import SwiftData import SwiftUI struct MainChatView: View { @@ -21,27 +22,45 @@ struct MainChatView: View { @State private var showingNewGroup = false @State private var showingSettings = false + /// SwiftData-backed chat list. The query orders by last activity; + /// `filteredConversations` applies the pinned-first ordering that matches + /// `AppModel.sortConversations` (`Bool` is not `Comparable`, so pinning + /// cannot be a `SortDescriptor`). + @Query( + sort: [ + SortDescriptor(\Conversation.lastActivity, order: .reverse), + ] + ) + private var conversations: [Conversation] + private var filteredConversations: [Conversation] { - guard !searchText.isEmpty else { return model.conversations } - return model.conversations.filter(matchesSearch) + let source = searchText.isEmpty ? conversations : conversations.filter(matchesSearch) + return source.sorted(by: conversationSort) + } + + private func conversationSort(_ lhs: Conversation, _ rhs: Conversation) -> Bool { + if lhs.isPinned != rhs.isPinned { return lhs.isPinned } + if lhs.lastActivity != rhs.lastActivity { return lhs.lastActivity > rhs.lastActivity } + return lhs.displayName.localizedCaseInsensitiveCompare(rhs.displayName) + == .orderedAscending } private var filteredRosterContacts: [Conversation] { - model.conversations + conversations .filter { !$0.isGroup && model.rosterContactJIDs.contains($0.jid) } .filter { searchText.isEmpty || matchesSearch($0) } .sorted(by: contactSort) } private var filteredGroupContacts: [Conversation] { - model.conversations + conversations .filter { $0.isGroup } .filter { searchText.isEmpty || matchesSearch($0) } .sorted(by: contactSort) } private var hasStoredContacts: Bool { - !model.rosterContactJIDs.isEmpty || model.conversations.contains { $0.isGroup } + !model.rosterContactJIDs.isEmpty || conversations.contains { $0.isGroup } } var body: some View { diff --git a/Sources/Shared/UI/RootView.swift b/Sources/Shared/UI/RootView.swift index 269b465..66fc817 100644 --- a/Sources/Shared/UI/RootView.swift +++ b/Sources/Shared/UI/RootView.swift @@ -1,4 +1,5 @@ import QuickLook +import SwiftData import SwiftUI struct RootView: View { @@ -11,6 +12,7 @@ struct RootView: View { LoginView(model: model) } else { MainChatView(model: model) + .environment(\.modelContext, model.modelContext) } } diff --git a/Tests/ArchiveStoreTests.swift b/Tests/ArchiveStoreTests.swift index 6a65de3..3f9241e 100644 --- a/Tests/ArchiveStoreTests.swift +++ b/Tests/ArchiveStoreTests.swift @@ -45,7 +45,6 @@ final class ArchiveStoreTests: XCTestCase { func testLegacyImportMapsConversationAndMessage() throws { let jid = "test-\(UUID().uuidString)@example.org" let legacy = LegacyArchiveImporter.Snapshot( - schemaVersion: 1, conversations: [ LegacyArchiveImporter.LegacyConversation( id: "bob@example.org", @@ -75,32 +74,9 @@ final class ArchiveStoreTests: XCTestCase { direction: .outgoing, delivery: .sent, security: .omemo, - kind: .text, - remoteAttachmentURL: nil, - localFilename: nil, - mimeType: nil, - duration: nil, - byteCount: nil, - encryptionFingerprint: nil, - editedAt: nil, - replyToID: nil, - replyToJID: nil, - replyPreview: nil, - forwardedFrom: nil, - retractedAt: nil, - originID: nil, - stanzaID: nil, - senderDisplayName: nil, - isGroupMessage: false, - callHistory: nil, - reactions: [] + kind: .text ) - ], - locallyDeletedMessageIDs: [], - rosterContactJIDs: [], - lastSuccessfulMAMSync: nil, - lastSuccessfulMAMCursor: nil, - mamCheckpoints: [:] + ] ) let encoder = JSONEncoder() @@ -117,4 +93,111 @@ final class ArchiveStoreTests: XCTestCase { XCTAssertEqual(imported?.messages.map(\.clientID), ["msg-1"]) XCTAssertEqual(imported?.messages.first?.conversation?.jid, "bob@example.org") } + + func testLegacyImportToleratesMissingOptionalFields() throws { + // Snapshots written by older schema versions lack fields that were + // added later (reactions, isGroupMessage, rosterContactJIDs, ...). + // The importer must decode them with defaults, exactly like the + // removed ChatArchive did. + let raw: [String: Any] = [ + "schemaVersion": 2, + "conversations": [ + [ + "id": "bob@example.org", + "jid": "bob@example.org", + "displayName": "Bob", + "lastMessage": "", + "lastActivity": 1_700_000_000_000.0, + "unreadCount": 0, + "isOnline": false, + "isPinned": false, + ] + ], + "messages": [ + [ + "id": "msg-1", + "conversationID": "bob@example.org", + "senderJID": "alice@example.org", + "body": "Hello", + "timestamp": 1_700_000_000_000.0, + "direction": "outgoing", + "delivery": "sent", + "security": "omemo", + "kind": "text", + ] + ], + ] + let data = try JSONSerialization.data(withJSONObject: raw) + let url = FileManager.default.temporaryDirectory + .appendingPathComponent("legacy-old-\(UUID().uuidString).json") + defer { try? FileManager.default.removeItem(at: url) } + try data.write(to: url) + + let imported = try LegacyArchiveImporter.importIfNeeded(from: url) + XCTAssertNotNil(imported) + XCTAssertEqual(imported?.conversations.map(\.jid), ["bob@example.org"]) + XCTAssertEqual(imported?.conversations.first?.kind, .direct) + XCTAssertEqual(imported?.conversations.first?.isGroupJoined, false) + XCTAssertEqual(imported?.messages.map(\.clientID), ["msg-1"]) + XCTAssertEqual(imported?.messages.first?.isGroupMessage, false) + XCTAssertEqual(imported?.messages.first?.reactions ?? [], []) + XCTAssertEqual(imported?.rosterContactJIDs ?? [], []) + XCTAssertEqual(imported?.mamCheckpoints ?? [], []) + XCTAssertNil(imported?.lastSuccessfulMAMSync) + } + + func testLocallyDeletedRowsArePurgedFromTheStore() throws { + // @Query views read the store directly, so messages that were only + // marked as locally deleted must be physically removed on open. + let jid = "test-\(UUID().uuidString)@example.org" + let store = try ArchiveStore(accountJID: jid) + defer { try? store.erase() } + + let conversation = Conversation(jid: "bob@example.org", displayName: "Bob") + let message = ChatMessage( + conversationID: conversation.jid, + senderJID: jid, + body: "Will be deleted", + direction: .outgoing, + delivery: .sent, + security: .omemo + ) + store.context.insert(conversation) + store.context.insert(message) + let deletionKey = ArchiveStore.deletionKey( + messageID: message.clientID, + conversationID: conversation.jid + ) + try store.save( + locallyDeletedMessageIDs: [deletionKey], + rosterContactJIDs: [], + lastSuccessfulMAMSync: nil, + lastSuccessfulMAMCursor: nil, + mamCheckpoints: [:] + ) + + store.purgeLocallyDeletedMessages() + let loaded = store.load() + XCTAssertTrue(loaded.messages.isEmpty) + XCTAssertEqual(loaded.locallyDeletedMessageIDs, Set([deletionKey])) + } + + func testCorruptLegacyJSONIsKeptForRetry() throws { + let jid = "test-\(UUID().uuidString)@example.org" + let directory = FileManager.default.urls( + for: .applicationSupportDirectory, + in: .userDomainMask + ).first!.appendingPathComponent("Luma/Accounts", isDirectory: true) + let legacyURL = directory.appendingPathComponent("\(ArchiveStore.stableHash(jid)).json") + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + try Data("not-json".utf8).write(to: legacyURL) + defer { try? FileManager.default.removeItem(at: legacyURL) } + + let store = try ArchiveStore(accountJID: jid) + defer { try? store.erase() } + XCTAssertTrue(store.load().conversations.isEmpty) + // The unreadable snapshot must stay on disk instead of being deleted + // together with the user's history. + XCTAssertTrue(FileManager.default.fileExists(atPath: legacyURL.path)) + } }