Skip to content

Commit 9f8a730

Browse files
committed
Merge branch 'resolve-initial-id'
2 parents 8903e90 + 6ce6137 commit 9f8a730

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

AirMessage/Database/DatabaseManager.swift

+23-24
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,24 @@ class DatabaseManager {
7777
}
7878

7979
do {
80-
//Build the WHERE clause and fetch messages
81-
let whereClause: String
82-
do {
83-
if let id = _lastScannedMessageID.value {
84-
//If we've scanned previously, only search for messages with a higher ID than last time
85-
whereClause = "message.ROWID > \(id)"
86-
} else {
87-
//If we have no previous scan data, search for messages added since we first started scanning
88-
whereClause = "message.date > \(initTime)"
89-
}
80+
//Resolve the last message ID to start scanning from
81+
let lastMessageID: Int64
82+
83+
//Try to use the cached value in memory
84+
if let lastScannedMessageID = _lastScannedMessageID.value {
85+
lastMessageID = lastScannedMessageID
86+
} else {
87+
//Query the value from the database
88+
//If no value is returned, the table is empty, and 0 is used
89+
//because the first actual ID is always 1
90+
let id = (try dbConnection.scalar("SELECT MAX(ROWID) from message") as! Int64?) ?? 0
91+
92+
lastMessageID = id
93+
_lastScannedMessageID.value = id
9094
}
95+
96+
//Build the WHERE clause and fetch messages
97+
let whereClause = "message.ROWID > \(lastMessageID)"
9198
let stmt = try fetchMessages(using: dbConnection, where: whereClause)
9299
let indices = DatabaseConverter.makeColumnIndexDict(stmt.columnNames)
93100
let rows = try stmt.map { row -> (id: Int64, messageRow: DatabaseMessageRow?) in
@@ -103,25 +110,17 @@ class DatabaseManager {
103110
//Collect new additions
104111
let (conversationItems, looseModifiers) = DatabaseConverter.groupMessageRows(rows.map { $0.messageRow }).destructured
105112

106-
//Set to the latest message ID, only we hit a new max
107-
var updatedMessageID: Int64?
108-
109113
//Update the latest message ID
114+
let updatedMessageID: Int64?
110115
if rows.isEmpty {
111116
updatedMessageID = nil
112117
} else {
113-
_lastScannedMessageID.with { value in
114-
let maxID = rows.reduce(Int64.min) { lastID, row in
115-
max(lastID, row.id)
116-
}
117-
118-
if value == nil || maxID > value! {
119-
value = maxID
120-
updatedMessageID = maxID
121-
} else {
122-
updatedMessageID = nil
123-
}
118+
let maxID = rows.reduce(Int64.min) { lastID, row in
119+
max(lastID, row.id)
124120
}
121+
122+
_lastScannedMessageID.value = maxID
123+
updatedMessageID = maxID
125124
}
126125

127126
//Check for updated message states

0 commit comments

Comments
 (0)