Skip to content
This repository was archived by the owner on Oct 25, 2023. It is now read-only.

Commit 55c661a

Browse files
committed
Optimistic message editing
Closes #1586
1 parent d817e95 commit 55c661a

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

‎app/js/messages_manager.js‎

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ angular.module('myApp.services')
2121
var pendingTopMsgs = {}
2222
var sendFilePromise = $q.when()
2323
var tempID = -1
24+
var tempFinalizeCallbacks = {}
2425

2526
var dialogsIndex = SearchIndexManager.createIndex()
2627
var cachedResults = {query: false}
@@ -994,8 +995,7 @@ angular.module('myApp.services')
994995
}
995996

996997
function canEditMessage(messageID) {
997-
if (messageID <= 0 ||
998-
!messagesStorage[messageID]) {
998+
if (!messagesStorage[messageID]) {
999999
return false
10001000
}
10011001
var message = messagesStorage[messageID]
@@ -2311,12 +2311,25 @@ angular.module('myApp.services')
23112311
delete messagesForHistory[tempID]
23122312
delete messagesStorage[tempID]
23132313

2314+
finalizePendingMessageCallbacks(tempID, finalMessage.mid)
2315+
23142316
return message
23152317
}
23162318

23172319
return false
23182320
}
23192321

2322+
function finalizePendingMessageCallbacks(tempID, mid) {
2323+
var callbacks = tempFinalizeCallbacks[tempID]
2324+
console.warn(dT(), callbacks, tempID)
2325+
if (callbacks !== undefined) {
2326+
angular.forEach(callbacks, function (callback) {
2327+
callback(mid)
2328+
})
2329+
delete tempFinalizeCallbacks[tempID]
2330+
}
2331+
}
2332+
23202333
function getInputEntities(entities) {
23212334
var sendEntites = angular.copy(entities)
23222335
angular.forEach(sendEntites, function (entity) {
@@ -2333,6 +2346,21 @@ angular.module('myApp.services')
23332346
!canEditMessage(messageID)) {
23342347
return $q.reject()
23352348
}
2349+
if (messageID < 0) {
2350+
if (tempFinalizeCallbacks[messageID] === undefined) {
2351+
tempFinalizeCallbacks[messageID] = {}
2352+
}
2353+
var deferred = $q.defer()
2354+
tempFinalizeCallbacks[messageID].edit = function (mid) {
2355+
console.log('invoke callback', mid)
2356+
editMessage(mid, text).then(function (result) {
2357+
deferred.resolve(result)
2358+
}, function (error) {
2359+
deferred.reject(error)
2360+
})
2361+
}
2362+
return deferred.promise
2363+
}
23362364
var entities = []
23372365
text = RichTextProcessor.parseMarkdown(text, entities)
23382366

@@ -3126,6 +3154,8 @@ angular.module('myApp.services')
31263154
msgs[tempID] = true
31273155

31283156
$rootScope.$broadcast('history_delete', {peerID: peerID, msgs: msgs})
3157+
3158+
finalizePendingMessageCallbacks(tempID, finalMessage.mid)
31293159
} else {
31303160
pendingByMessageID[mid] = randomID
31313161
}

0 commit comments

Comments
 (0)