Skip to content

Commit

Permalink
Optimistic message editing
Browse files Browse the repository at this point in the history
  • Loading branch information
zhukov committed Feb 13, 2018
1 parent d817e95 commit 55c661a
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions app/js/messages_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ angular.module('myApp.services')
var pendingTopMsgs = {}
var sendFilePromise = $q.when()
var tempID = -1
var tempFinalizeCallbacks = {}

var dialogsIndex = SearchIndexManager.createIndex()
var cachedResults = {query: false}
Expand Down Expand Up @@ -994,8 +995,7 @@ angular.module('myApp.services')
}

function canEditMessage(messageID) {
if (messageID <= 0 ||
!messagesStorage[messageID]) {
if (!messagesStorage[messageID]) {
return false
}
var message = messagesStorage[messageID]
Expand Down Expand Up @@ -2311,12 +2311,25 @@ angular.module('myApp.services')
delete messagesForHistory[tempID]
delete messagesStorage[tempID]

finalizePendingMessageCallbacks(tempID, finalMessage.mid)

return message
}

return false
}

function finalizePendingMessageCallbacks(tempID, mid) {
var callbacks = tempFinalizeCallbacks[tempID]
console.warn(dT(), callbacks, tempID)
if (callbacks !== undefined) {
angular.forEach(callbacks, function (callback) {
callback(mid)
})
delete tempFinalizeCallbacks[tempID]
}
}

function getInputEntities(entities) {
var sendEntites = angular.copy(entities)
angular.forEach(sendEntites, function (entity) {
Expand All @@ -2333,6 +2346,21 @@ angular.module('myApp.services')
!canEditMessage(messageID)) {
return $q.reject()
}
if (messageID < 0) {
if (tempFinalizeCallbacks[messageID] === undefined) {
tempFinalizeCallbacks[messageID] = {}
}
var deferred = $q.defer()
tempFinalizeCallbacks[messageID].edit = function (mid) {
console.log('invoke callback', mid)
editMessage(mid, text).then(function (result) {
deferred.resolve(result)
}, function (error) {
deferred.reject(error)
})
}
return deferred.promise
}
var entities = []
text = RichTextProcessor.parseMarkdown(text, entities)

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

$rootScope.$broadcast('history_delete', {peerID: peerID, msgs: msgs})

finalizePendingMessageCallbacks(tempID, finalMessage.mid)
} else {
pendingByMessageID[mid] = randomID
}
Expand Down

0 comments on commit 55c661a

Please sign in to comment.