From 3b5fe8e73b631c0cd4bb3319e0aeb76517a360a2 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 6 Jul 2016 15:30:03 +0300 Subject: [PATCH] Fixed search with filter from cache --- app/js/messages_manager.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index c6937b72..ef10010f 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -704,16 +704,20 @@ angular.module('myApp.services') } function getSearch (peerID, query, inputFilter, maxID, limit) { + peerID = peerID ? parseInt(peerID) : 0 var foundMsgs = [] var useSearchCache = !query var newSearchFilter = {peer: peerID, filter: inputFilter} var sameSearchCache = useSearchCache && angular.equals(lastSearchFilter, newSearchFilter) if (useSearchCache && !sameSearchCache) { + // console.warn(dT(), 'new search filter', lastSearchFilter, newSearchFilter) lastSearchFilter = newSearchFilter lastSearchResults = [] } + // console.log(dT(), 'search', useSearchCache, sameSearchCache, lastSearchResults, maxID) + if (peerID && !maxID && !query) { var historyStorage = historiesStorage[peerID] @@ -754,8 +758,8 @@ angular.module('myApp.services') message = messagesStorage[historyStorage.history[i]] if (message.media && neededContents[message.media._]) { if (neededDocType !== undefined && - message.media._ == 'messageMediaDocument' && - message.media.document.type != neededDocType) { + message.media._ == 'messageMediaDocument' && + message.media.document.type != neededDocType) { continue } foundMsgs.push(message.mid) @@ -766,11 +770,11 @@ angular.module('myApp.services') } } - // console.log(dT(), sameSearchCache, foundMsgs, lastSearchResults) + // console.warn(dT(), 'before append', foundMsgs) if (foundMsgs.length < neededLimit && lastSearchResults.length && sameSearchCache) { - var minID = foundMsgs.length ? foundMsgs[foundMsgs.length - 1] : 0xFFFFFFFF + var minID = foundMsgs.length ? foundMsgs[foundMsgs.length - 1] : false for (var i = 0; i < lastSearchResults.length; i++) { - if (lastSearchResults[i] < minID) { + if (minID === false || lastSearchResults[i] < minID) { foundMsgs.push(lastSearchResults[i]) if (foundMsgs.length >= neededLimit) { break @@ -778,7 +782,7 @@ angular.module('myApp.services') } } } - // console.log(dT(), foundMsgs) + // console.warn(dT(), 'after append', foundMsgs) } if (foundMsgs.length || limit == 1000) { @@ -795,20 +799,15 @@ angular.module('myApp.services') var apiPromise if (peerID || !query) { - var flags = 0 - if (AppPeersManager.isChannel(peerID) && - !AppPeersManager.isMegagroup(peerID)) { - flags |= 1 - } apiPromise = MtpApiManager.invokeApi('messages.search', { - flags: flags, + flags: 0, peer: AppPeersManager.getInputPeerByID(peerID), q: query || '', filter: inputFilter || {_: 'inputMessagesFilterEmpty'}, min_date: 0, max_date: 0, limit: limit || 20, - max_id: maxID || 0 + max_id: AppMessagesIDsManager.getMessageLocalID(maxID) || 0 }, { timeout: 300, noErrorBox: true @@ -855,9 +854,11 @@ angular.module('myApp.services') foundMsgs.push(message.mid) }) - if (useSearchCache) { + if (useSearchCache && + (!maxID || sameSearchCache && lastSearchResults.indexOf(maxID) >= 0)) { lastSearchResults = listMergeSorted(lastSearchResults, foundMsgs) } + // console.log(dT(), 'after API', foundMsgs, lastSearchResults) return { count: foundCount,