From a4b06b199741992e8eaa72d550dfa34dad5226d6 Mon Sep 17 00:00:00 2001 From: overtake <> Date: Tue, 14 May 2019 19:32:28 +0200 Subject: [PATCH 1/2] no message --- Postbox/Database.swift | 4 +++- Postbox/Postbox.swift | 1 + Postbox/PostboxUpgrade_21to22.swift | 23 +++++------------------ Postbox/SqliteValueBox.swift | 4 ++++ 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/Postbox/Database.swift b/Postbox/Database.swift index 2f28565e02..33e083b6a9 100644 --- a/Postbox/Database.swift +++ b/Postbox/Database.swift @@ -37,7 +37,9 @@ public final class Database { } } - deinit { sqlite3_close(self.handle) } // sqlite3_close_v2 in Yosemite/iOS 8? + deinit { + sqlite3_close(self.handle) + } // sqlite3_close_v2 in Yosemite/iOS 8? public func execute(_ SQL: String) -> Bool { let res = sqlite3_exec(self.handle, SQL, nil, nil, nil) diff --git a/Postbox/Postbox.swift b/Postbox/Postbox.swift index 0ee3237d23..a3b44406be 100644 --- a/Postbox/Postbox.swift +++ b/Postbox/Postbox.swift @@ -973,6 +973,7 @@ public func openPostbox(basePath: String, seedConfiguration: SeedConfiguration, subscriber.putNext(.upgrading(progress)) }) if let updatedPath = updatedPath { + valueBox.internalClose() let _ = try? FileManager.default.removeItem(atPath: basePath + "/db") let _ = try? FileManager.default.moveItem(atPath: updatedPath, toPath: basePath + "/db") valueBox = SqliteValueBox(basePath: basePath + "/db", queue: queue, encryptionParameters: encryptionParameters, upgradeProgress: { progress in diff --git a/Postbox/PostboxUpgrade_21to22.swift b/Postbox/PostboxUpgrade_21to22.swift index a44a246511..871d55b2f2 100644 --- a/Postbox/PostboxUpgrade_21to22.swift +++ b/Postbox/PostboxUpgrade_21to22.swift @@ -8,22 +8,9 @@ import SwiftSignalKit func postboxUpgrade_21to22(queue: Queue, basePath: String, valueBox: ValueBox, encryptionParameters: ValueBoxEncryptionParameters, progress: (Float) -> Void) -> String? { postboxLog("Upgrade 21->22 started") - if encryptionParameters.forceEncryptionIfNoSet { - let exportPath = "\(basePath)/version22" - let _ = try? FileManager.default.removeItem(atPath: exportPath) - valueBox.exportEncrypted(to: exportPath, encryptionParameters: encryptionParameters) - - let updatedValueBox = SqliteValueBox(basePath: exportPath, queue: queue, encryptionParameters: encryptionParameters, upgradeProgress: progress) - let metadataTable = MetadataTable(valueBox: updatedValueBox, table: MetadataTable.tableSpec(0)) - updatedValueBox.begin() - metadataTable.setUserVersion(22) - updatedValueBox.commit() - return exportPath - } else { - valueBox.begin() - let metadataTable = MetadataTable(valueBox: valueBox, table: MetadataTable.tableSpec(0)) - metadataTable.setUserVersion(22) - valueBox.commit() - return nil - } + valueBox.begin() + let metadataTable = MetadataTable(valueBox: valueBox, table: MetadataTable.tableSpec(0)) + metadataTable.setUserVersion(22) + valueBox.commit() + return nil } diff --git a/Postbox/SqliteValueBox.swift b/Postbox/SqliteValueBox.swift index 37af60b5ef..3400f055e8 100644 --- a/Postbox/SqliteValueBox.swift +++ b/Postbox/SqliteValueBox.swift @@ -210,6 +210,10 @@ public final class SqliteValueBox: ValueBox { checkpoints.dispose() } + func internalClose() { + self.database = nil + } + private func openDatabase(encryptionParameters: ValueBoxEncryptionParameters?, upgradeProgress: (Float) -> Void) -> Database { assert(self.queue.isCurrent()) From c9a1006ccd26fe5cf845bed334901b16a908fc0d Mon Sep 17 00:00:00 2001 From: overtake <> Date: Tue, 21 May 2019 18:08:30 +0200 Subject: [PATCH 2/2] no message --- Postbox/Message.swift | 2 +- Postbox/MessageHistoryIndexTable.swift | 4 ++++ Postbox/MessageHistoryView.swift | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Postbox/Message.swift b/Postbox/Message.swift index 7e8e175f92..cd327dff00 100644 --- a/Postbox/Message.swift +++ b/Postbox/Message.swift @@ -443,7 +443,7 @@ public struct MessageForwardInfo: Equatable { } } -public protocol MessageAttribute: PostboxCoding { +public protocol MessageAttribute: class, PostboxCoding { var associatedPeerIds: [PeerId] { get } var associatedMessageIds: [MessageId] { get } } diff --git a/Postbox/MessageHistoryIndexTable.swift b/Postbox/MessageHistoryIndexTable.swift index d80896d6c3..6f62bdb02f 100644 --- a/Postbox/MessageHistoryIndexTable.swift +++ b/Postbox/MessageHistoryIndexTable.swift @@ -146,6 +146,10 @@ final class MessageHistoryIndexTable: Table { operations.append(.Update(previousIndex, message)) case let .InsertMessage(insertMessage) where insertMessage.index == message.index: break + case let .InsertExistingMessage(insertMessage) where insertMessage.index == message.index: + operations.removeAll() + operations.append(.Remove(index: previousIndex)) + operations.append(.Update(insertMessage.index, message)) default: operations.append(operation) } diff --git a/Postbox/MessageHistoryView.swift b/Postbox/MessageHistoryView.swift index 7fdea77e61..9d76e6f030 100644 --- a/Postbox/MessageHistoryView.swift +++ b/Postbox/MessageHistoryView.swift @@ -377,6 +377,21 @@ final class MutableMessageHistoryView { } case let .loaded(loadedState): for operationSet in operations { + var addCount = 0 + var removeCount = 0 + for operation in operationSet { + switch operation { + case .InsertMessage: + addCount += 1 + case .Remove: + removeCount += 1 + default: + break + } + } + if addCount == 2 && removeCount == 2 { + assert(true) + } for operation in operationSet { switch operation { case let .InsertMessage(message):