Simple search in chat history
This commit is contained in:
parent
a0f71227de
commit
75df136a7f
@ -716,6 +716,14 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$scope.$on('history_search', function (e, peerID) {
|
||||||
|
$scope.setSearchPeer(peerID)
|
||||||
|
})
|
||||||
|
|
||||||
|
$scope.$on('esc_no_more', function () {
|
||||||
|
$scope.setSearchPeer(false)
|
||||||
|
})
|
||||||
|
|
||||||
$scope.$on('dialogs_multiupdate', function (e, dialogsUpdated) {
|
$scope.$on('dialogs_multiupdate', function (e, dialogsUpdated) {
|
||||||
if ($scope.search.query !== undefined && $scope.search.query.length) {
|
if ($scope.search.query !== undefined && $scope.search.query.length) {
|
||||||
return false
|
return false
|
||||||
@ -862,7 +870,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
$scope.$watchCollection('search', function () {
|
$scope.$watchCollection('search', function () {
|
||||||
$scope.dialogs = []
|
$scope.dialogs = []
|
||||||
$scope.foundMessages = []
|
$scope.foundMessages = []
|
||||||
searchMessages = false
|
searchMessages = $scope.searchPeer ? true : false
|
||||||
contactsJump++
|
contactsJump++
|
||||||
loadDialogs()
|
loadDialogs()
|
||||||
})
|
})
|
||||||
@ -877,6 +885,20 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
PhonebookContactsService.openPhonebookImport()
|
PhonebookContactsService.openPhonebookImport()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.setSearchPeer = function (peerID) {
|
||||||
|
$scope.searchPeer = peerID || false
|
||||||
|
$scope.searchClear()
|
||||||
|
if (peerID) {
|
||||||
|
$scope.dialogs = []
|
||||||
|
$scope.foundPeers = []
|
||||||
|
searchMessages = true
|
||||||
|
$scope.toggleSearch()
|
||||||
|
} else {
|
||||||
|
searchMessages = false
|
||||||
|
}
|
||||||
|
loadDialogs(true)
|
||||||
|
}
|
||||||
|
|
||||||
$scope.$on('contacts_update', function () {
|
$scope.$on('contacts_update', function () {
|
||||||
if (contactsShown) {
|
if (contactsShown) {
|
||||||
showMoreConversations()
|
showMoreConversations()
|
||||||
@ -901,7 +923,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
if (searchMessages) {
|
if (searchMessages) {
|
||||||
searchTimeoutPromise = (force || maxID) ? $q.when() : $timeout(angular.noop, 500)
|
searchTimeoutPromise = (force || maxID) ? $q.when() : $timeout(angular.noop, 500)
|
||||||
return searchTimeoutPromise.then(function () {
|
return searchTimeoutPromise.then(function () {
|
||||||
return AppMessagesManager.getSearch(false, $scope.search.query, {_: 'inputMessagesFilterEmpty'}, maxID).then(function (result) {
|
var searchPeerID = $scope.searchPeer || false
|
||||||
|
return AppMessagesManager.getSearch(searchPeerID, $scope.search.query, {_: 'inputMessagesFilterEmpty'}, maxID).then(function (result) {
|
||||||
if (curJump != jump) {
|
if (curJump != jump) {
|
||||||
return $q.reject()
|
return $q.reject()
|
||||||
}
|
}
|
||||||
@ -964,6 +987,15 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
}
|
}
|
||||||
var wrapDialog = searchMessages ? undefined : dialog
|
var wrapDialog = searchMessages ? undefined : dialog
|
||||||
var wrappedDialog = AppMessagesManager.wrapForDialog(dialog.top_message, wrapDialog)
|
var wrappedDialog = AppMessagesManager.wrapForDialog(dialog.top_message, wrapDialog)
|
||||||
|
|
||||||
|
if (searchMessages &&
|
||||||
|
$scope.searchPeer) {
|
||||||
|
var message = AppMessagesManager.getMessage(dialog.top_message)
|
||||||
|
if (message.fromID > 0) {
|
||||||
|
wrappedDialog.peerID = message.fromID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (searchMessages) {
|
if (searchMessages) {
|
||||||
wrappedDialog.unreadCount = -1
|
wrappedDialog.unreadCount = -1
|
||||||
} else {
|
} else {
|
||||||
@ -1022,11 +1054,21 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
}
|
}
|
||||||
var wrapDialog = searchMessages ? undefined : dialog
|
var wrapDialog = searchMessages ? undefined : dialog
|
||||||
var wrappedDialog = AppMessagesManager.wrapForDialog(dialog.top_message, wrapDialog)
|
var wrappedDialog = AppMessagesManager.wrapForDialog(dialog.top_message, wrapDialog)
|
||||||
|
|
||||||
if (searchMessages) {
|
if (searchMessages) {
|
||||||
wrappedDialog.unreadCount = -1
|
wrappedDialog.unreadCount = -1
|
||||||
} else {
|
} else {
|
||||||
peersInDialogs[dialog.peerID] = true
|
peersInDialogs[dialog.peerID] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (searchMessages &&
|
||||||
|
$scope.searchPeer) {
|
||||||
|
var message = AppMessagesManager.getMessage(dialog.top_message)
|
||||||
|
if (message.fromID > 0) {
|
||||||
|
wrappedDialog.peerID = message.fromID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dialogsList.push(wrappedDialog)
|
dialogsList.push(wrappedDialog)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1847,6 +1889,10 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
}
|
}
|
||||||
|
|
||||||
function toggleMedia (mediaType) {
|
function toggleMedia (mediaType) {
|
||||||
|
if (mediaType == 'search') {
|
||||||
|
$rootScope.$broadcast('history_search', $scope.curDialog.peerID)
|
||||||
|
return
|
||||||
|
}
|
||||||
$scope.historyFilter.mediaType = mediaType || false
|
$scope.historyFilter.mediaType = mediaType || false
|
||||||
$scope.curDialog.messageID = false
|
$scope.curDialog.messageID = false
|
||||||
peerHistory.messages = []
|
peerHistory.messages = []
|
||||||
|
@ -681,7 +681,6 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
|
|
||||||
function link($scope, element, attrs) {
|
function link($scope, element, attrs) {
|
||||||
var messageID = $scope.$parent.$eval(attrs.myMessageEdited)
|
var messageID = $scope.$parent.$eval(attrs.myMessageEdited)
|
||||||
console.log(attrs.myMessageEdited, messageID)
|
|
||||||
if (checkEdited($scope, element, messageID)) {
|
if (checkEdited($scope, element, messageID)) {
|
||||||
$scope.$on('message_edit', function (e, data) {
|
$scope.$on('message_edit', function (e, data) {
|
||||||
var messageID = $scope.$parent.$eval(attrs.myMessageEdited)
|
var messageID = $scope.$parent.$eval(attrs.myMessageEdited)
|
||||||
@ -694,7 +693,6 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
|
|
||||||
function checkEdited($scope, element, messageID) {
|
function checkEdited($scope, element, messageID) {
|
||||||
var message = AppMessagesManager.getMessage(messageID)
|
var message = AppMessagesManager.getMessage(messageID)
|
||||||
console.warn('check edited', messageID, message.canBeEdited, message.edit_date)
|
|
||||||
if (!message.canBeEdited) {
|
if (!message.canBeEdited) {
|
||||||
$timeout(function () {
|
$timeout(function () {
|
||||||
$scope.$destroy()
|
$scope.$destroy()
|
||||||
@ -795,7 +793,9 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
// Strange Chrome bug, when field doesn't get blur, but becomes inactive after location change
|
// Strange Chrome bug, when field doesn't get blur, but becomes inactive after location change
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
searchField.blur()
|
searchField.blur()
|
||||||
searchField.focus()
|
setTimeout(function () {
|
||||||
|
searchField.focus()
|
||||||
|
}, 0)
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
return cancelEvent(e)
|
return cancelEvent(e)
|
||||||
|
@ -311,6 +311,8 @@
|
|||||||
"conversation_media_contact": "Contact",
|
"conversation_media_contact": "Contact",
|
||||||
"conversation_media_attachment": "Attachment",
|
"conversation_media_attachment": "Attachment",
|
||||||
|
|
||||||
|
"conversation_search_peer": "Search in this chat",
|
||||||
|
|
||||||
"conversation_group_created": "created the group",
|
"conversation_group_created": "created the group",
|
||||||
"conversation_group_renamed": "changed group name",
|
"conversation_group_renamed": "changed group name",
|
||||||
"conversation_group_photo_updated": "changed group photo",
|
"conversation_group_photo_updated": "changed group photo",
|
||||||
@ -433,6 +435,7 @@
|
|||||||
"head_media_video": "Videos",
|
"head_media_video": "Videos",
|
||||||
"head_media_documents": "Files",
|
"head_media_documents": "Files",
|
||||||
"head_media_audio": "Voice messages",
|
"head_media_audio": "Voice messages",
|
||||||
|
"head_media_search": "Search",
|
||||||
"head_about": "About",
|
"head_about": "About",
|
||||||
"head_clear_all": "Clear history",
|
"head_clear_all": "Clear history",
|
||||||
"head_edit": "Edit",
|
"head_edit": "Edit",
|
||||||
|
@ -754,6 +754,12 @@ angular.module('myApp.services')
|
|||||||
neededContents['messageMediaDocument'] = true
|
neededContents['messageMediaDocument'] = true
|
||||||
neededDocType = 'voice'
|
neededDocType = 'voice'
|
||||||
break
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
return $q.when({
|
||||||
|
count: 0,
|
||||||
|
history: []
|
||||||
|
})
|
||||||
}
|
}
|
||||||
for (i = 0; i < historyStorage.history.length; i++) {
|
for (i = 0; i < historyStorage.history.length; i++) {
|
||||||
message = messagesStorage[historyStorage.history[i]]
|
message = messagesStorage[historyStorage.history[i]]
|
||||||
|
@ -1340,6 +1340,24 @@ a.im_dialog_selected {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.im_dialogs_scrollable_wrap a.im_dialog_searchpeer .icon-search-clear {
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.im_dialogs_scrollable_wrap {
|
||||||
|
a.im_dialog_searchpeer {
|
||||||
|
&,
|
||||||
|
&:hover,
|
||||||
|
&_selected {
|
||||||
|
background: #f3f3f3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.im_dialog_peer {
|
.im_dialog_peer {
|
||||||
color: #222;
|
color: #222;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
<li><a ng-click="toggleMedia('video')" my-i18n="head_media_video"></a></li>
|
<li><a ng-click="toggleMedia('video')" my-i18n="head_media_video"></a></li>
|
||||||
<li><a ng-click="toggleMedia('documents')" my-i18n="head_media_documents"></a></li>
|
<li><a ng-click="toggleMedia('documents')" my-i18n="head_media_documents"></a></li>
|
||||||
<li><a ng-click="toggleMedia('audio')" my-i18n="head_media_audio"></a></li>
|
<li><a ng-click="toggleMedia('audio')" my-i18n="head_media_audio"></a></li>
|
||||||
|
<li><a ng-click="toggleMedia('search')" my-i18n="head_media_search"></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -26,6 +26,33 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul class="nav nav-pills nav-stacked">
|
<ul class="nav nav-pills nav-stacked">
|
||||||
|
<li class="im_dialog_wrap" ng-if="searchPeer">
|
||||||
|
<a class="im_dialog im_dialog_searchpeer disabled" ng-mousedown="setSearchPeer()">
|
||||||
|
|
||||||
|
<div class="im_dialog_meta pull-right">
|
||||||
|
<div class="im_dialog_clear_searchpeer">
|
||||||
|
<!-- <i class="icon icon-clear-searchpeer"></i> -->
|
||||||
|
<i class="icon icon-search-clear"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="im_dialog_photo pull-left" my-peer-photolink="searchPeer" img-class="im_dialog_photo" watch="true"></div>
|
||||||
|
|
||||||
|
<div class="im_dialog_message_wrap">
|
||||||
|
|
||||||
|
<div class="im_dialog_peer">
|
||||||
|
<span my-peer-link="searchPeer"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="im_dialog_message">
|
||||||
|
<span class="" my-i18n="conversation_search_peer"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
<li class="im_dialog_wrap" my-dialog dialog-message="dialogMessage" ng-repeat="dialogMessage in dialogs track by dialogMessage.peerID" ng-class="{active: curDialog.peerID == dialogMessage.peerID}"></li>
|
<li class="im_dialog_wrap" my-dialog dialog-message="dialogMessage" ng-repeat="dialogMessage in dialogs track by dialogMessage.peerID" ng-class="{active: curDialog.peerID == dialogMessage.peerID}"></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user