Updated schema
Improved loading dialogs
This commit is contained in:
parent
9cef19bc0e
commit
889da274c6
File diff suppressed because one or more lines are too long
@ -133,13 +133,11 @@ messageActionChatCreate#a6638b9a title:string users:Vector<int> = MessageAction;
|
|||||||
messageActionChatEditTitle#b5a1ce5a title:string = MessageAction;
|
messageActionChatEditTitle#b5a1ce5a title:string = MessageAction;
|
||||||
messageActionChatEditPhoto#7fcb13a8 photo:Photo = MessageAction;
|
messageActionChatEditPhoto#7fcb13a8 photo:Photo = MessageAction;
|
||||||
messageActionChatDeletePhoto#95e3fbef = MessageAction;
|
messageActionChatDeletePhoto#95e3fbef = MessageAction;
|
||||||
messageActionChatAddUser#5e3cfc4b user_id:int = MessageAction;
|
messageActionChatAddUser#488a7337 users:Vector<int> = MessageAction;
|
||||||
messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction;
|
messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction;
|
||||||
messageActionChatJoinedByLink#f89cf5e8 inviter_id:int = MessageAction;
|
messageActionChatJoinedByLink#f89cf5e8 inviter_id:int = MessageAction;
|
||||||
messageActionChannelCreate#95d2ac92 title:string = MessageAction;
|
messageActionChannelCreate#95d2ac92 title:string = MessageAction;
|
||||||
messageActionChatMigrateTo#51bdb021 channel_id:int = MessageAction;
|
messageActionChatMigrateTo#51bdb021 channel_id:int = MessageAction;
|
||||||
messageActionChatDeactivate#64ad20a8 = MessageAction;
|
|
||||||
messageActionChatActivate#40ad8cb2 = MessageAction;
|
|
||||||
messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageAction;
|
messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageAction;
|
||||||
|
|
||||||
dialog#c1dd804a peer:Peer top_message:int read_inbox_max_id:int unread_count:int notify_settings:PeerNotifySettings = Dialog;
|
dialog#c1dd804a peer:Peer top_message:int read_inbox_max_id:int unread_count:int notify_settings:PeerNotifySettings = Dialog;
|
||||||
@ -573,7 +571,7 @@ contacts.search#11f812d8 q:string limit:int = contacts.Found;
|
|||||||
contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
|
contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
|
||||||
|
|
||||||
messages.getMessages#4222fa74 id:Vector<int> = messages.Messages;
|
messages.getMessages#4222fa74 id:Vector<int> = messages.Messages;
|
||||||
messages.getDialogs#859b3d3c offset:int limit:int = messages.Dialogs;
|
messages.getDialogs#6b47f94d offset_date:int offset_id:int offset_peer:InputPeer limit:int = messages.Dialogs;
|
||||||
messages.getHistory#8a8ec2da peer:InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
|
messages.getHistory#8a8ec2da peer:InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
|
||||||
messages.search#d4569248 flags:# important_only:flags.0?true peer:InputPeer q:string filter:MessagesFilter min_date:int max_date:int offset:int max_id:int limit:int = messages.Messages;
|
messages.search#d4569248 flags:# important_only:flags.0?true peer:InputPeer q:string filter:MessagesFilter min_date:int max_date:int offset:int max_id:int limit:int = messages.Messages;
|
||||||
messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages;
|
messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages;
|
||||||
@ -618,7 +616,6 @@ messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_par
|
|||||||
messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>;
|
messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>;
|
||||||
messages.toggleChatAdmins#ec8bd9e1 chat_id:int enabled:Bool = Updates;
|
messages.toggleChatAdmins#ec8bd9e1 chat_id:int enabled:Bool = Updates;
|
||||||
messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool;
|
messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool;
|
||||||
messages.deactivateChat#626f0b41 chat_id:int enabled:Bool = Updates;
|
|
||||||
messages.migrateChat#15a3b8e3 chat_id:int = Updates;
|
messages.migrateChat#15a3b8e3 chat_id:int = Updates;
|
||||||
messages.searchGlobal#9e3cacb0 q:string offset_date:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
|
messages.searchGlobal#9e3cacb0 q:string offset_date:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
|
||||||
|
|
||||||
|
@ -65,8 +65,6 @@ angular.module('myApp.services')
|
|||||||
|
|
||||||
NotificationsManager.start();
|
NotificationsManager.start();
|
||||||
|
|
||||||
var allChannelsLoaded = false;
|
|
||||||
var channelsLoadPromise = false;
|
|
||||||
var allDialogsLoaded = false
|
var allDialogsLoaded = false
|
||||||
var loadedDialogsCount = 0;
|
var loadedDialogsCount = 0;
|
||||||
var dialogsNum = 0;
|
var dialogsNum = 0;
|
||||||
@ -108,7 +106,7 @@ angular.module('myApp.services')
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
isSearch ||
|
isSearch ||
|
||||||
(allChannelsLoaded && allDialogsLoaded) ||
|
allDialogsLoaded ||
|
||||||
(
|
(
|
||||||
curDialogStorage.dialogs.length >= offset + limit &&
|
curDialogStorage.dialogs.length >= offset + limit &&
|
||||||
curDialogStorage.dialogs[offset + limit - 1].index >= minDialogsIndex
|
curDialogStorage.dialogs[offset + limit - 1].index >= minDialogsIndex
|
||||||
@ -119,7 +117,7 @@ angular.module('myApp.services')
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return $q.all([getAllChannels(), getTopMessages(loadedDialogsCount, limit)]).then(function () {
|
return getTopMessages(limit).then(function () {
|
||||||
offset = 0;
|
offset = 0;
|
||||||
if (offsetIndex > 0) {
|
if (offsetIndex > 0) {
|
||||||
for (offset = 0; offset < curDialogStorage.dialogs.length; offset++) {
|
for (offset = 0; offset < curDialogStorage.dialogs.length; offset++) {
|
||||||
@ -149,8 +147,13 @@ angular.module('myApp.services')
|
|||||||
var peerText = AppPeersManager.getPeerSearchText(peerID);
|
var peerText = AppPeersManager.getPeerSearchText(peerID);
|
||||||
SearchIndexManager.indexObject(peerID, peerText, dialogsIndex);
|
SearchIndexManager.indexObject(peerID, peerText, dialogsIndex);
|
||||||
|
|
||||||
var mid = getFullMessageID(dialog.top_important_message, channelID);
|
var isMegagroup = AppChatsManager.isMegagroup(channelID);
|
||||||
dialog.top_message = mid;
|
if (isMegagroup) {
|
||||||
|
var mid = getFullMessageID(dialog.top_message, channelID);
|
||||||
|
} else {
|
||||||
|
var mid = getFullMessageID(dialog.top_important_message, channelID);
|
||||||
|
dialog.top_message = mid;
|
||||||
|
}
|
||||||
dialog.unread_count = dialog.unread_important_count;
|
dialog.unread_count = dialog.unread_important_count;
|
||||||
dialog.read_inbox_max_id = getFullMessageID(dialog.read_inbox_max_id, channelID);
|
dialog.read_inbox_max_id = getFullMessageID(dialog.read_inbox_max_id, channelID);
|
||||||
|
|
||||||
@ -180,46 +183,35 @@ angular.module('myApp.services')
|
|||||||
ApiUpdatesManager.addChannelState(channelID, dialog.pts);
|
ApiUpdatesManager.addChannelState(channelID, dialog.pts);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAllChannels () {
|
function getTopMessages (limit) {
|
||||||
if (channelsLoadPromise) {
|
var first = true;
|
||||||
return channelsLoadPromise;
|
var dialogs = dialogsStorage.dialogs;
|
||||||
|
var len = dialogs && dialogs.length;
|
||||||
|
var offsetDate = 0;
|
||||||
|
var offsetID = 0;
|
||||||
|
var offsetPeerID = 0;
|
||||||
|
if (len) {
|
||||||
|
var dialog = dialogs[len - 1];
|
||||||
|
var index = dialog.index;
|
||||||
|
if (index) {
|
||||||
|
offsetDate = Math.ceil(index / 0x10000);
|
||||||
|
offsetID = dialog.top_message;
|
||||||
|
offsetPeerID = dialog.peerID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return channelsLoadPromise = MtpApiManager.invokeApi('channels.getDialogs', {
|
|
||||||
offset: 0,
|
|
||||||
limit: 100
|
|
||||||
}, {
|
|
||||||
timeout: 300
|
|
||||||
}).then(function (dialogsResult) {
|
|
||||||
AppUsersManager.saveApiUsers(dialogsResult.users);
|
|
||||||
AppChatsManager.saveApiChats(dialogsResult.chats);
|
|
||||||
saveMessages(dialogsResult.messages);
|
|
||||||
|
|
||||||
angular.forEach(dialogsResult.dialogs, function (dialog) {
|
|
||||||
var peerID = AppPeersManager.getPeerID(dialog.peer);
|
|
||||||
var channelID = -peerID;
|
|
||||||
saveChannelDialog(channelID, dialog);
|
|
||||||
ApiUpdatesManager.addChannelState(channelID, dialog.pts);
|
|
||||||
});
|
|
||||||
allChannelsLoaded = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTopMessages (offset, limit) {
|
|
||||||
return MtpApiManager.invokeApi('messages.getDialogs', {
|
return MtpApiManager.invokeApi('messages.getDialogs', {
|
||||||
offset: offset,
|
offset_date: offsetDate,
|
||||||
|
offset_id: getMessageLocalID(offsetID),
|
||||||
|
offset_peer: AppPeersManager.getInputPeerByID(offsetPeerID),
|
||||||
limit: limit
|
limit: limit
|
||||||
}, {
|
}, {
|
||||||
timeout: 300
|
timeout: 300
|
||||||
}).then(function (dialogsResult) {
|
}).then(function (dialogsResult) {
|
||||||
if (!offset) {
|
console.log('dialogs result', dialogsResult);
|
||||||
|
if (!offsetDate) {
|
||||||
TelegramMeWebService.setAuthorized(true);
|
TelegramMeWebService.setAuthorized(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server-side bug
|
|
||||||
if (dialogsResult.count && offset >= dialogsResult.count) {
|
|
||||||
dialogsResult.dialogs = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
AppUsersManager.saveApiUsers(dialogsResult.users);
|
AppUsersManager.saveApiUsers(dialogsResult.users);
|
||||||
AppChatsManager.saveApiChats(dialogsResult.chats);
|
AppChatsManager.saveApiChats(dialogsResult.chats);
|
||||||
saveMessages(dialogsResult.messages);
|
saveMessages(dialogsResult.messages);
|
||||||
@ -227,44 +219,53 @@ angular.module('myApp.services')
|
|||||||
if (!dialogsResult.dialogs.length) {
|
if (!dialogsResult.dialogs.length) {
|
||||||
allDialogsLoaded = true;
|
allDialogsLoaded = true;
|
||||||
}
|
}
|
||||||
else if (!offset) {
|
|
||||||
incrementMaxSeenID(dialogsResult.dialogs[0].top_message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var maxSeenIdIncremented = offsetDate ? true : false;
|
||||||
angular.forEach(dialogsResult.dialogs, function (dialog) {
|
angular.forEach(dialogsResult.dialogs, function (dialog) {
|
||||||
var peerID = AppPeersManager.getPeerID(dialog.peer);
|
var peerID = AppPeersManager.getPeerID(dialog.peer);
|
||||||
var peerText = AppPeersManager.getPeerSearchText(peerID);
|
if (dialog._ == 'dialogChannel') {
|
||||||
SearchIndexManager.indexObject(peerID, peerText, dialogsIndex);
|
var channelID = -peerID;
|
||||||
|
saveChannelDialog(channelID, dialog);
|
||||||
|
ApiUpdatesManager.addChannelState(channelID, dialog.pts);
|
||||||
|
} else {
|
||||||
|
var peerText = AppPeersManager.getPeerSearchText(peerID);
|
||||||
|
SearchIndexManager.indexObject(peerID, peerText, dialogsIndex);
|
||||||
|
|
||||||
var message = getMessage(dialog.top_message);
|
var message = getMessage(dialog.top_message);
|
||||||
|
|
||||||
dialog.index = generateDialogIndex(message.date);
|
dialog.index = generateDialogIndex(message.date);
|
||||||
dialog.peerID = peerID;
|
dialog.peerID = peerID;
|
||||||
|
|
||||||
pushDialogToStorage(dialog);
|
pushDialogToStorage(dialog);
|
||||||
|
|
||||||
if (historiesStorage[peerID] === undefined) {
|
if (!maxSeenIdIncremented) {
|
||||||
var historyStorage = {count: null, history: [dialog.top_message], pending: []};
|
incrementMaxSeenID(dialog.top_message);
|
||||||
historiesStorage[peerID] = historyStorage;
|
maxSeenIdIncremented = true;
|
||||||
if (mergeReplyKeyboard(historyStorage, message)) {
|
|
||||||
$rootScope.$broadcast('history_reply_markup', {peerID: peerID});
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
NotificationsManager.savePeerSettings(peerID, dialog.notify_settings);
|
if (historiesStorage[peerID] === undefined) {
|
||||||
|
var historyStorage = {count: null, history: [dialog.top_message], pending: []};
|
||||||
|
historiesStorage[peerID] = historyStorage;
|
||||||
|
if (mergeReplyKeyboard(historyStorage, message)) {
|
||||||
|
$rootScope.$broadcast('history_reply_markup', {peerID: peerID});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
NotificationsManager.savePeerSettings(peerID, dialog.notify_settings);
|
||||||
dialog.unread_count > 0 &&
|
|
||||||
maxSeenID &&
|
if (
|
||||||
dialog.top_message > maxSeenID
|
dialog.unread_count > 0 &&
|
||||||
) {
|
maxSeenID &&
|
||||||
var notifyPeer = message.flags & 16 ? message.from_id : peerID;
|
dialog.top_message > maxSeenID
|
||||||
if (message.pFlags.unread && !message.pFlags.out) {
|
) {
|
||||||
NotificationsManager.getPeerMuted(notifyPeer).then(function (muted) {
|
var notifyPeer = message.flags & 16 ? message.from_id : peerID;
|
||||||
if (!muted) {
|
if (message.pFlags.unread && !message.pFlags.out) {
|
||||||
notifyAboutMessage(message);
|
NotificationsManager.getPeerMuted(notifyPeer).then(function (muted) {
|
||||||
}
|
if (!muted) {
|
||||||
});
|
notifyAboutMessage(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user