Browse Source

Added updateChannel handler

Added bottom panel
master
Igor Zhukov 9 years ago
parent
commit
d30e779808
  1. 138
      app/js/controllers.js
  2. 3
      app/js/locales/en-us.json
  3. 80
      app/js/messages_manager.js
  4. 6
      app/js/services.js

138
app/js/controllers.js

@ -451,6 +451,11 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.historyPeer = {}; $scope.historyPeer = {};
$scope.historyState = { $scope.historyState = {
selectActions: false, selectActions: false,
botActions: false,
channelActions: false,
actions: function () {
return $scope.historyState.selectActions ? 'selected' : ($scope.historyState.botActions ? 'bot' : ($scope.historyState.channelActions ? 'channel' : false));
},
typing: [], typing: [],
missedCount: 0, missedCount: 0,
skipped: false skipped: false
@ -694,13 +699,20 @@ angular.module('myApp.controllers', ['myApp.i18n'])
}); });
$scope.$on('dialog_flush', function (e, dialog) { function deleteDialog (peerID) {
for (var i = 0; i < $scope.dialogs.length; i++) { for (var i = 0; i < $scope.dialogs.length; i++) {
if ($scope.dialogs[i].peerID == dialog.peerID) { if ($scope.dialogs[i].peerID == peerID) {
$scope.dialogs.splice(i, 1); $scope.dialogs.splice(i, 1);
break; break;
} }
} }
}
$scope.$on('dialog_flush', function (e, dialog) {
deleteDialog(dialog.peerID);
});
$scope.$on('dialog_drop', function (e, dialog) {
deleteDialog(dialog.peerID);
}); });
$scope.$on('history_delete', function (e, historyUpdate) { $scope.$on('history_delete', function (e, historyUpdate) {
@ -982,7 +994,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
}) })
.controller('AppImHistoryController', function ($scope, $location, $timeout, $modal, $rootScope, MtpApiManager, AppUsersManager, AppChatsManager, AppMessagesManager, AppPeersManager, ApiUpdatesManager, PeersSelectService, IdleManager, StatusManager, ErrorService) { .controller('AppImHistoryController', function ($scope, $location, $timeout, $modal, $rootScope, MtpApiManager, AppUsersManager, AppChatsManager, AppMessagesManager, AppPeersManager, ApiUpdatesManager, PeersSelectService, IdleManager, StatusManager, NotificationsManager, ErrorService) {
$scope.$watchCollection('curDialog', applyDialogSelect); $scope.$watchCollection('curDialog', applyDialogSelect);
@ -994,6 +1006,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.selectedMsgs = {}; $scope.selectedMsgs = {};
$scope.selectedCount = 0; $scope.selectedCount = 0;
$scope.historyState.selectActions = false; $scope.historyState.selectActions = false;
$scope.historyState.botActions = false;
$scope.historyState.channelActions = false;
$scope.historyState.missedCount = 0; $scope.historyState.missedCount = 0;
$scope.historyState.skipped = false; $scope.historyState.skipped = false;
$scope.state = {}; $scope.state = {};
@ -1004,7 +1018,12 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.selectedReply = selectedReply; $scope.selectedReply = selectedReply;
$scope.selectedCancel = selectedCancel; $scope.selectedCancel = selectedCancel;
$scope.selectedFlush = selectedFlush; $scope.selectedFlush = selectedFlush;
$scope.botStart = botStart;
$scope.startBot = startBot;
$scope.cancelBot = cancelBot;
$scope.joinChannel = joinChannel;
$scope.togglePeerMuted = togglePeerMuted;
$scope.toggleEdit = toggleEdit; $scope.toggleEdit = toggleEdit;
$scope.toggleMedia = toggleMedia; $scope.toggleMedia = toggleMedia;
@ -1056,7 +1075,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.curDialog.inputPeer = AppPeersManager.getInputPeer(newPeer); $scope.curDialog.inputPeer = AppPeersManager.getInputPeer(newPeer);
$scope.historyFilter.mediaType = false; $scope.historyFilter.mediaType = false;
updateStartBot(); updateBotActions();
selectedCancel(true); selectedCancel(true);
if (oldDialog.peer && if (oldDialog.peer &&
@ -1150,14 +1169,14 @@ angular.module('myApp.controllers', ['myApp.i18n'])
} }
} }
function updateStartBot () { function updateBotActions () {
var wasStartBot = $scope.historyState.startBot; var wasBotActions = $scope.historyState.botActions;
if (!peerID || if (!peerID ||
peerID < 0 || peerID < 0 ||
!AppUsersManager.isBot(peerID) || !AppUsersManager.isBot(peerID) ||
$scope.historyFilter.mediaType || $scope.historyFilter.mediaType ||
$scope.curDialog.messageID) { $scope.curDialog.messageID) {
$scope.historyState.startBot = false; $scope.historyState.botActions = false;
} }
else if ( else if (
$scope.state.empty || ( $scope.state.empty || (
@ -1167,15 +1186,43 @@ angular.module('myApp.controllers', ['myApp.i18n'])
peerHistory.messages[0].action._ == 'messageActionBotIntro' peerHistory.messages[0].action._ == 'messageActionBotIntro'
) )
) { ) {
$scope.historyState.startBot = 2; $scope.historyState.botActions = 'start';
} }
else if ($scope.curDialog.startParam) { else if ($scope.curDialog.startParam) {
$scope.historyState.startBot = 1; $scope.historyState.botActions = 'param';
}
else {
$scope.historyState.botActions = false;
}
if (wasBotActions != $scope.historyState.botActions) {
$scope.$broadcast('ui_panel_update');
}
}
function updateChannelActions () {
var wasChannelActions = $scope.historyState.channelActions;
var channel;
if (peerID &&
AppPeersManager.isChannel(peerID) &&
(channel = AppChatsManager.getChat(-peerID)) &&
!channel.pFlags.creator &&
!channel.pFlags.editor) {
if (channel.pFlags.left) {
$scope.historyState.channelActions = 'join';
} else {
if (!$scope.historyState.channelActions) {
$scope.historyState.channelActions = 'mute';
}
NotificationsManager.getPeerMuted(peerID).then(function (muted) {
$scope.historyState.channelActions = muted ? 'unmute' : 'mute';
});
}
} }
else { else {
$scope.historyState.startBot = false; $scope.historyState.channelActions = false;
} }
if (wasStartBot != $scope.historyState.startBot) { if (wasChannelActions != $scope.historyState.channelActions) {
$scope.$broadcast('ui_panel_update'); $scope.$broadcast('ui_panel_update');
} }
} }
@ -1382,7 +1429,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
AppMessagesManager.readHistory($scope.curDialog.inputPeer); AppMessagesManager.readHistory($scope.curDialog.inputPeer);
updateStartBot(); updateBotActions();
updateChannelActions();
}, function () { }, function () {
safeReplaceObject($scope.state, {error: true}); safeReplaceObject($scope.state, {error: true});
@ -1399,13 +1447,32 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.$broadcast('ui_history_change'); $scope.$broadcast('ui_history_change');
} }
function botStart () { function startBot () {
AppMessagesManager.startBot(peerID, 0, $scope.curDialog.startParam); AppMessagesManager.startBot(peerID, 0, $scope.curDialog.startParam);
$scope.curDialog.startParam = false; $scope.curDialog.startParam = false;
} }
function cancelBot () {
delete $scope.curDialog.startParam;
}
function joinChannel () {
MtpApiManager.invokeApi('channels.joinChannel', {
channel: AppChatsManager.getChannelInput(-peerID)
}).then(function (result) {
ApiUpdatesManager.processUpdateMessage(result);
});
}
function togglePeerMuted (muted) {
NotificationsManager.getPeerSettings(peerID).then(function (settings) {
settings.mute_until = !muted ? 0 : 2000000000;
NotificationsManager.updatePeerSettings(peerID, settings);
});
}
function toggleMessage (messageID, $event) { function toggleMessage (messageID, $event) {
if ($scope.historyState.startBot || if ($scope.historyState.botActions ||
$rootScope.idle.afterFocus) { $rootScope.idle.afterFocus) {
return false; return false;
} }
@ -1462,7 +1529,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
break; break;
case 'select': case 'select':
$scope.historyState.selectActions = true; $scope.historyState.selectActions = 'selected';
$scope.$broadcast('ui_panel_update'); $scope.$broadcast('ui_panel_update');
toggleMessage(messageID); toggleMessage(messageID);
break; break;
@ -1514,7 +1581,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.selectedMsgs[messageID] = true; $scope.selectedMsgs[messageID] = true;
$scope.selectedCount++; $scope.selectedCount++;
if (!$scope.historyState.selectActions) { if (!$scope.historyState.selectActions) {
$scope.historyState.selectActions = true; $scope.historyState.selectActions = 'selected';
$scope.$broadcast('ui_panel_update'); $scope.$broadcast('ui_panel_update');
} }
} }
@ -1522,11 +1589,6 @@ angular.module('myApp.controllers', ['myApp.i18n'])
} }
function selectedCancel (noBroadcast) { function selectedCancel (noBroadcast) {
if (!noBroadcast &&
$scope.curDialog.startParam) {
delete $scope.curDialog.startParam;
return;
}
$scope.selectedMsgs = {}; $scope.selectedMsgs = {};
$scope.selectedCount = 0; $scope.selectedCount = 0;
$scope.historyState.selectActions = false; $scope.historyState.selectActions = false;
@ -1605,7 +1667,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
if ($scope.historyState.selectActions) { if ($scope.historyState.selectActions) {
selectedCancel(); selectedCancel();
} else { } else {
$scope.historyState.selectActions = true; $scope.historyState.selectActions = 'selected';
$scope.$broadcast('ui_panel_update'); $scope.$broadcast('ui_panel_update');
} }
} }
@ -1660,6 +1722,26 @@ angular.module('myApp.controllers', ['myApp.i18n'])
} }
}); });
$scope.$on('history_forbidden', function (e, updPeerID) {
if (updPeerID == $scope.curDialog.peerID) {
$rootScope.$apply(function () {
$location.url('/im');
})
}
});
$scope.$on('notify_settings', function (e, data) {
if (data.peerID == $scope.curDialog.peerID) {
updateChannelActions();
}
});
$scope.$on('channel_settings', function (e, data) {
if (data.channelID == -$scope.curDialog.peerID) {
updateChannelActions();
}
});
var typingTimeouts = {}; var typingTimeouts = {};
$scope.$on('history_append', function (e, addedMessage) { $scope.$on('history_append', function (e, addedMessage) {
var history = historiesQueueFind(addedMessage.peerID); var history = historiesQueueFind(addedMessage.peerID);
@ -1719,7 +1801,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
}); });
} }
updateStartBot(); updateBotActions();
updateChannelActions();
} }
}); });
@ -1815,7 +1898,8 @@ angular.module('myApp.controllers', ['myApp.i18n'])
}); });
} }
updateStartBot(); updateBotActions();
updateChannelActions();
} }
}); });
@ -1845,7 +1929,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.$broadcast('messages_regroup'); $scope.$broadcast('messages_regroup');
if (historyUpdate.peerID == $scope.curDialog.peerID) { if (historyUpdate.peerID == $scope.curDialog.peerID) {
$scope.state.empty = !newMessages.length; $scope.state.empty = !newMessages.length;
updateStartBot(); updateBotActions();
} }
}); });
@ -1856,7 +1940,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
history.ids = []; history.ids = [];
if (dialog.peerID == $scope.curDialog.peerID) { if (dialog.peerID == $scope.curDialog.peerID) {
$scope.state.empty = true; $scope.state.empty = true;
updateStartBot(); updateBotActions();
} }
} }
}); });

3
app/js/locales/en-us.json

@ -433,6 +433,9 @@
"im_forward": "Forward {count}", "im_forward": "Forward {count}",
"im_reply": "Reply", "im_reply": "Reply",
"im_start": "Start", "im_start": "Start",
"im_channel_join": "+Join",
"im_channel_mute": "Mute",
"im_channel_unmute": "Unmute",
"im_reply_loading": "Loading{dots}", "im_reply_loading": "Loading{dots}",
"im_photos_drop_text": "Drop photos here to send", "im_photos_drop_text": "Drop photos here to send",
"im_message_field_placeholder": "Write a message...", "im_message_field_placeholder": "Write a message...",

80
app/js/messages_manager.js

@ -2448,42 +2448,76 @@ angular.module('myApp.services')
}); });
break; break;
case 'updateChannel':
var channelID = update.channel_id;
var peerID = -channelID;
var channel = AppChatsManager.getChat(channelID);
var needDialog = channel._ == 'channel' && (!channel.pFlags.left && !channel.pFlags.kicked);
var foundDialog = getDialogByPeerID(peerID);
var hasDialog = foundDialog.length > 0;
var canViewHistory = channel._ == 'channel' && (channel.username || !channel.pFlags.left && !channel.pFlags.kicked);
var hasHistory = historiesStorage[peerID] !== undefined;
if (canViewHistory != hasHistory) {
delete historiesStorage[peerID];
$rootScope.$broadcast('history_forbidden', peerID);
}
if (hasDialog != needDialog) {
if (needDialog) {
reloadChannelDialog(channelID);
} else {
if (foundDialog[0]) {
dialogsStorage.dialogs.splice(foundDialog[1], 1);
$rootScope.$broadcast('dialog_drop', {peerID: peerID});
}
}
}
break;
case 'updateChannelReload': case 'updateChannelReload':
var channelID = update.channel_id; var channelID = update.channel_id;
var peerID = -channelID; var peerID = -channelID;
delete historiesStorage[peerID];
var foundDialog = getDialogByPeerID(peerID); var foundDialog = getDialogByPeerID(peerID);
if (foundDialog[0]) { if (foundDialog[0]) {
dialogsStorage.dialogs.splice(foundDialog[1], 1); dialogsStorage.dialogs.splice(foundDialog[1], 1);
} }
delete historiesStorage[peerID];
var inputPeer = AppPeersManager.getInputPeerByID(peerID); reloadChannelDialog(channelID).then(function () {
$q.all([
getHistory(inputPeer, 0),
AppChatsManager.getChannelFull(channelID, true)
]).then(function (results) {
var historyResult = results[0];
var channelResult = results[1];
var dialog = {
_: 'dialogChannel',
peer: AppPeersManager.getOutputPeer(peerID),
top_message: historyResult.history[0],
top_important_message: historyResult.history[0],
read_inbox_max_id: channelResult.read_inbox_max_id,
unread_count: channelResult.unread_count,
unread_important_count: channelResult.unread_important_count
};
saveChannelDialog(channelID, dialog);
var updatedDialogs = {};
updatedDialogs[peerID] = dialog;
$rootScope.$broadcast('dialogs_multiupdate', updatedDialogs);
$rootScope.$broadcast('history_reload', peerID); $rootScope.$broadcast('history_reload', peerID);
}); });
break; break;
} }
}); });
function reloadChannelDialog (channelID) {
var peerID = -channelID;
var inputPeer = AppPeersManager.getInputPeerByID(peerID);
return $q.all([
AppChatsManager.getChannelFull(channelID, true),
getHistory(inputPeer, 0)
]).then(function (results) {
var channelResult = results[0];
var historyResult = results[1];
var topMsgID = historyResult.history[0];
var dialog = {
_: 'dialogChannel',
peer: AppPeersManager.getOutputPeer(peerID),
top_message: topMsgID,
top_important_message: topMsgID,
read_inbox_max_id: channelResult.read_inbox_max_id,
unread_count: channelResult.unread_count,
unread_important_count: channelResult.unread_important_count
};
saveChannelDialog(channelID, dialog);
var updatedDialogs = {};
updatedDialogs[peerID] = dialog;
$rootScope.$broadcast('dialogs_multiupdate', updatedDialogs);
});
}
$rootScope.$on('webpage_updated', function (e, eventData) { $rootScope.$on('webpage_updated', function (e, eventData) {
angular.forEach(eventData.msgs, function (msgID) { angular.forEach(eventData.msgs, function (msgID) {
var historyMessage = messagesForHistory[msgID]; var historyMessage = messagesForHistory[msgID];

6
app/js/services.js

@ -877,6 +877,11 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
} }
} }
break; break;
case 'updateChannel':
var channelID = update.channel_id;
$rootScope.$broadcast('channel_settings', {channelID: channelID});
break;
} }
}); });
@ -2926,6 +2931,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
function savePeerSettings (peerID, settings) { function savePeerSettings (peerID, settings) {
// console.trace(dT(), 'peer settings', peerID, settings); // console.trace(dT(), 'peer settings', peerID, settings);
peerSettings[peerID] = $q.when(settings); peerSettings[peerID] = $q.when(settings);
$rootScope.$broadcast('notify_settings', {peerID: peerID});
} }
function updatePeerSettings (peerID, settings) { function updatePeerSettings (peerID, settings) {

Loading…
Cancel
Save