|
|
@ -704,16 +704,20 @@ angular.module('myApp.services') |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function getSearch (peerID, query, inputFilter, maxID, limit) { |
|
|
|
function getSearch (peerID, query, inputFilter, maxID, limit) { |
|
|
|
|
|
|
|
peerID = peerID ? parseInt(peerID) : 0 |
|
|
|
var foundMsgs = [] |
|
|
|
var foundMsgs = [] |
|
|
|
var useSearchCache = !query |
|
|
|
var useSearchCache = !query |
|
|
|
var newSearchFilter = {peer: peerID, filter: inputFilter} |
|
|
|
var newSearchFilter = {peer: peerID, filter: inputFilter} |
|
|
|
var sameSearchCache = useSearchCache && angular.equals(lastSearchFilter, newSearchFilter) |
|
|
|
var sameSearchCache = useSearchCache && angular.equals(lastSearchFilter, newSearchFilter) |
|
|
|
|
|
|
|
|
|
|
|
if (useSearchCache && !sameSearchCache) { |
|
|
|
if (useSearchCache && !sameSearchCache) { |
|
|
|
|
|
|
|
// console.warn(dT(), 'new search filter', lastSearchFilter, newSearchFilter)
|
|
|
|
lastSearchFilter = newSearchFilter |
|
|
|
lastSearchFilter = newSearchFilter |
|
|
|
lastSearchResults = [] |
|
|
|
lastSearchResults = [] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// console.log(dT(), 'search', useSearchCache, sameSearchCache, lastSearchResults, maxID)
|
|
|
|
|
|
|
|
|
|
|
|
if (peerID && !maxID && !query) { |
|
|
|
if (peerID && !maxID && !query) { |
|
|
|
var historyStorage = historiesStorage[peerID] |
|
|
|
var historyStorage = historiesStorage[peerID] |
|
|
|
|
|
|
|
|
|
|
@ -754,8 +758,8 @@ angular.module('myApp.services') |
|
|
|
message = messagesStorage[historyStorage.history[i]] |
|
|
|
message = messagesStorage[historyStorage.history[i]] |
|
|
|
if (message.media && neededContents[message.media._]) { |
|
|
|
if (message.media && neededContents[message.media._]) { |
|
|
|
if (neededDocType !== undefined && |
|
|
|
if (neededDocType !== undefined && |
|
|
|
message.media._ == 'messageMediaDocument' && |
|
|
|
message.media._ == 'messageMediaDocument' && |
|
|
|
message.media.document.type != neededDocType) { |
|
|
|
message.media.document.type != neededDocType) { |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
foundMsgs.push(message.mid) |
|
|
|
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) { |
|
|
|
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++) { |
|
|
|
for (var i = 0; i < lastSearchResults.length; i++) { |
|
|
|
if (lastSearchResults[i] < minID) { |
|
|
|
if (minID === false || lastSearchResults[i] < minID) { |
|
|
|
foundMsgs.push(lastSearchResults[i]) |
|
|
|
foundMsgs.push(lastSearchResults[i]) |
|
|
|
if (foundMsgs.length >= neededLimit) { |
|
|
|
if (foundMsgs.length >= neededLimit) { |
|
|
|
break |
|
|
|
break |
|
|
@ -778,7 +782,7 @@ angular.module('myApp.services') |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// console.log(dT(), foundMsgs)
|
|
|
|
// console.warn(dT(), 'after append', foundMsgs)
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (foundMsgs.length || limit == 1000) { |
|
|
|
if (foundMsgs.length || limit == 1000) { |
|
|
@ -795,20 +799,15 @@ angular.module('myApp.services') |
|
|
|
var apiPromise |
|
|
|
var apiPromise |
|
|
|
|
|
|
|
|
|
|
|
if (peerID || !query) { |
|
|
|
if (peerID || !query) { |
|
|
|
var flags = 0 |
|
|
|
|
|
|
|
if (AppPeersManager.isChannel(peerID) && |
|
|
|
|
|
|
|
!AppPeersManager.isMegagroup(peerID)) { |
|
|
|
|
|
|
|
flags |= 1 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
apiPromise = MtpApiManager.invokeApi('messages.search', { |
|
|
|
apiPromise = MtpApiManager.invokeApi('messages.search', { |
|
|
|
flags: flags, |
|
|
|
flags: 0, |
|
|
|
peer: AppPeersManager.getInputPeerByID(peerID), |
|
|
|
peer: AppPeersManager.getInputPeerByID(peerID), |
|
|
|
q: query || '', |
|
|
|
q: query || '', |
|
|
|
filter: inputFilter || {_: 'inputMessagesFilterEmpty'}, |
|
|
|
filter: inputFilter || {_: 'inputMessagesFilterEmpty'}, |
|
|
|
min_date: 0, |
|
|
|
min_date: 0, |
|
|
|
max_date: 0, |
|
|
|
max_date: 0, |
|
|
|
limit: limit || 20, |
|
|
|
limit: limit || 20, |
|
|
|
max_id: maxID || 0 |
|
|
|
max_id: AppMessagesIDsManager.getMessageLocalID(maxID) || 0 |
|
|
|
}, { |
|
|
|
}, { |
|
|
|
timeout: 300, |
|
|
|
timeout: 300, |
|
|
|
noErrorBox: true |
|
|
|
noErrorBox: true |
|
|
@ -855,9 +854,11 @@ angular.module('myApp.services') |
|
|
|
foundMsgs.push(message.mid) |
|
|
|
foundMsgs.push(message.mid) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
if (useSearchCache) { |
|
|
|
if (useSearchCache && |
|
|
|
|
|
|
|
(!maxID || sameSearchCache && lastSearchResults.indexOf(maxID) >= 0)) { |
|
|
|
lastSearchResults = listMergeSorted(lastSearchResults, foundMsgs) |
|
|
|
lastSearchResults = listMergeSorted(lastSearchResults, foundMsgs) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// console.log(dT(), 'after API', foundMsgs, lastSearchResults)
|
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
count: foundCount, |
|
|
|
count: foundCount, |
|
|
|