Improved channels error handling

This commit is contained in:
Igor Zhukov 2015-10-01 14:53:02 +03:00
parent 6d9aa03695
commit 7ab5650f99
7 changed files with 73 additions and 25 deletions

View File

@ -620,7 +620,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
$scope.dialogs = [];
$scope.contacts = [];
$scope.foundUsers = [];
$scope.foundPeers = [];
$scope.foundMessages = [];
if ($scope.search === undefined) {
@ -854,7 +854,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
if (!searchMessages) {
$scope.dialogs = [];
$scope.contacts = [];
$scope.foundUsers = [];
$scope.foundPeers = [];
}
$scope.foundMessages = [];
@ -966,15 +966,16 @@ angular.module('myApp.controllers', ['myApp.i18n'])
if (curJump != contactsJump) return;
MtpApiManager.invokeApi('contacts.search', {q: $scope.search.query, limit: 10}).then(function (result) {
AppUsersManager.saveApiUsers(result.users);
AppChatsManager.saveApiChats(result.chats);
if (curJump != contactsJump) return;
$scope.foundUsers = [];
$scope.foundPeers = [];
angular.forEach(result.results, function(contactFound) {
var userID = contactFound.user_id;
if (peersInDialogs[userID] === undefined) {
$scope.foundUsers.push({
userID: userID,
user: AppUsersManager.getUser(userID),
peerString: AppUsersManager.getUserString(userID)
var peerID = AppPeersManager.getPeerID(contactFound);
if (peersInDialogs[peerID] === undefined) {
$scope.foundPeers.push({
id: peerID,
username: AppPeersManager.getPeer(peerID).username,
peerString: AppUsersManager.getUserString(peerID)
});
}
});
@ -1726,6 +1727,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
if (updPeerID == $scope.curDialog.peerID) {
$location.url('/im');
}
historiesQueuePop(updPeerID);
});
$scope.$on('notify_settings', function (e, data) {
@ -3926,7 +3928,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
.controller('ContactsModalController', function ($scope, $timeout, $modal, $modalInstance, MtpApiManager, AppUsersManager, ErrorService) {
$scope.contacts = [];
$scope.foundUsers = [];
$scope.foundPeers = [];
$scope.search = {};
$scope.slice = {limit: 20, limitDelta: 20};

View File

@ -217,6 +217,7 @@
"confirm_modal_abort_password_setup": "Abort two-step verification setup?",
"confirm_modal_reset_account_md": "Are you sure?\nThis action can not be undone.\n\nYou will lose all your chats and messages, along with any media and files you shared, if you proceed with resetting your account.",
"confirm_modal_join_group_link": "Do you want to join the group «{title}»?",
"confirm_modal_join_channel_link": "Do you want to join the channel «{title}»?",
"confirm_modal_revoke_group_link": "Are you sure you want to revoke this link? Once you do, no one will be able to join the group using it.",
"confirm_modal_revoke_channel_link": "Are you sure you want to revoke this link? Once you do, no one will be able to join the channel using it.",
"confirm_modal_delete_channel_md": "Are you sure you want to delete this channel?\n\nAll messages will be removed and all messages will be lost.",
@ -363,6 +364,8 @@
"error_modal_password_disabled_descripion": "You have disabled Two-Step Verification.",
"error_modal_user_not_mutual_contact": "The user can be invited by his contact only",
"error_modal_invite_link_invalid": "The invite link is invalid",
"error_modal_channel_not_accessible": "Sorry, this channel is not accessible.",
"error_modal_not_contact_flood": "Sorry, you can only send messages to mutual contacts at the moment. {more-info-link: More info »}",
"head_telegram": "Telegram",

View File

@ -314,7 +314,7 @@ angular.module('myApp.services')
offset_id: maxID ? getMessageLocalID(maxID) : 0,
add_offset: offset || 0,
limit: limit || 0
}, {noErrorBox: true});
});
} else {
promise = MtpApiManager.invokeApi('messages.getHistory', {
peer: inputPeer,
@ -365,6 +365,23 @@ angular.module('myApp.services')
}
return historyResult;
});
}, function (error) {
switch (error.type) {
case 'CHANNEL_PRIVATE':
var channel = AppChatsManager.getChat(-peerID);
channel = {_: 'channelForbidden', access_hash: channel.access_hash, title: channel.title};
ApiUpdatesManager.processUpdateMessage({
_: 'updates',
updates: [{
_: 'updateChannel',
channel_id: -peerID
}],
chats: [channel],
users: []
});
break;
}
return $q.reject(error);
});
}
@ -1599,7 +1616,7 @@ angular.module('myApp.services')
chatTitle = chatInvite.title;
}
ErrorService.confirm({
type: 'JOIN_GROUP_BY_LINK',
type: chatInvite.flags & 1 ? 'JOIN_CHANNEL_BY_LINK' : 'JOIN_GROUP_BY_LINK',
title: chatTitle
}).then(function () {
return MtpApiManager.invokeApi('messages.importChatInvite', {

View File

@ -418,9 +418,14 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
case 'updateUserPhoto':
var userID = update.user_id;
if (users[userID]) {
var user = users[userID];
if (user) {
forceUserOnline(userID);
safeReplaceObject(users[userID].photo, update.photo);
if (!user.photo) {
user.photo = update.photo;
} else {
safeReplaceObject(user.photo, update.photo);
}
if (cachedPhotoLocations[userID] !== undefined) {
safeReplaceObject(cachedPhotoLocations[userID], update.photo && update.photo.photo_small || {empty: true});
@ -619,7 +624,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
function isChannel (id) {
var chat = chats[id];
if (chat && chat._ == 'channel' ||
if (chat && (chat._ == 'channel' || chat._ == 'channelForbidden') ||
channelAccess[id]) {
return true;
}
@ -965,7 +970,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
}
})
.service('AppProfileManager', function ($q, $rootScope, AppUsersManager, AppChatsManager, AppPeersManager, AppPhotosManager, NotificationsManager, MtpApiManager, RichTextProcessor) {
.service('AppProfileManager', function ($q, $rootScope, AppUsersManager, AppChatsManager, AppPeersManager, AppPhotosManager, NotificationsManager, MtpApiManager, ApiUpdatesManager, RichTextProcessor) {
var botInfos = {};
var chatsFull = {};
@ -1129,6 +1134,22 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
return fullChannel;
});
}, function (error) {
switch (error.type) {
case 'CHANNEL_PRIVATE':
var channel = AppChatsManager.getChat(id);
channel = {_: 'channelForbidden', access_hash: channel.access_hash, title: channel.title};
ApiUpdatesManager.processUpdateMessage({
_: 'updates',
updates: [{
_: 'updateChannel',
channel_id: id
}],
chats: [channel],
users: []
});
break;
}
});
}

View File

@ -48,6 +48,9 @@
<div ng-switch-when="JOIN_GROUP_BY_LINK" my-i18n="confirm_modal_join_group_link">
<my-i18n-param name="title"><strong ng-bind="title"></strong></my-i18n-param>
</div>
<div ng-switch-when="JOIN_CHANNEL_BY_LINK" my-i18n="confirm_modal_join_channel_link">
<my-i18n-param name="title"><strong ng-bind="title"></strong></my-i18n-param>
</div>
<div ng-switch-when="REVOKE_GROUP_INVITE_LINK" my-i18n="confirm_modal_revoke_group_link"></div>
<div ng-switch-when="REVOKE_CHANNEL_INVITE_LINK" my-i18n="confirm_modal_revoke_channel_link"></div>
<div ng-switch-when="CHANNEL_DELETE" my-i18n="confirm_modal_delete_channel_md"></div>

View File

@ -42,7 +42,10 @@
<span ng-switch-when="INVITE_HASH_INVALID" my-i18n="error_modal_invite_link_invalid"></span>
<span ng-switch-when="INVITE_HASH_EXPIRED" my-i18n="error_modal_invite_link_invalid"></span>
<span ng-switch-when="INVITE_HASH_EMPTY" my-i18n="error_modal_invite_link_invalid"></span>
<span ng-switch-when="CHANNEL_PRIVATE" my-i18n="error_modal_channel_not_accessible"></span>
<span ng-switch-when="PEER_FLOOD" my-i18n="error_modal_not_contact_flood">
<my-i18n-param name="more-info-link"><a href="https://telegram.org/faq#can-39t-send-messages-to-non-contacts" target="_blank">{0}</a></my-i18n-param>
</span>
<div ng-switch-default ng-switch="error.code">

View File

@ -48,19 +48,18 @@
</ul>
</div>
<div class="im_dialogs_contacts_wrap" ng-show="foundUsers.length > 0">
<div class="im_dialogs_contacts_wrap" ng-show="foundPeers.length > 0">
<h5 my-i18n="im_found_title"></h5>
<ul class="nav nav-pills nav-stacked">
<li class="im_dialog_wrap" ng-repeat="foundUser in foundUsers track by foundUser.userID" ng-class="{active: curDialog.peerID == foundUser.userID}">
<a class="im_dialog" ng-mousedown="dialogSelect(foundUser.peerString)">
<div class="im_dialog_photo pull-left" my-peer-photolink="foundUser.userID" img-class="im_dialog_photo" watch="true"></div>
<li class="im_dialog_wrap" ng-repeat="foundPeer in foundPeers track by foundPeer.id" ng-class="{active: curDialog.peerID == foundPeer.id}">
<a class="im_dialog" ng-mousedown="dialogSelect(foundPeer.peerString)">
<div class="im_dialog_photo pull-left" my-peer-photolink="foundPeer.id" img-class="im_dialog_photo" watch="true"></div>
<div class="im_dialog_message_wrap">
<div class="im_dialog_peer">
<span class="im_dialog_user" my-peer-link="foundUser.userID"></span>
<span class="im_dialog_user" my-peer-link="foundPeer.id"></span>
</div>
<div class="im_dialog_message" ng-switch="foundUser.user.username.length > 0">
<span ng-switch-when="true" class="im_dialog_message_text" ng-bind="::'@' + foundUser.user.username"></span>
<span ng-switch-default class="im_dialog_message_text" my-user-status="::foundUser.userID"></span>
<div class="im_dialog_message">
<span class="im_dialog_message_text" ng-bind="::'@' + foundPeer.username"></span>
</div>
</div>
</a>