Supported migrate to supergroup
This commit is contained in:
parent
e02b9fd2eb
commit
eb04ecd77b
@ -1794,6 +1794,14 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
historiesQueuePop(updPeerID);
|
historiesQueuePop(updPeerID);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$scope.$on('dialog_migrate', function (e, data) {
|
||||||
|
if (data.migrateFrom == $scope.curDialog.peerID) {
|
||||||
|
var peerString = AppPeersManager.getPeerString(data.migrateTo);
|
||||||
|
$rootScope.$broadcast('history_focus', {peerString: peerString});
|
||||||
|
}
|
||||||
|
historiesQueuePop(data.migrateFrom);
|
||||||
|
});
|
||||||
|
|
||||||
$scope.$on('notify_settings', function (e, data) {
|
$scope.$on('notify_settings', function (e, data) {
|
||||||
if (data.peerID == $scope.curDialog.peerID) {
|
if (data.peerID == $scope.curDialog.peerID) {
|
||||||
updateChannelActions();
|
updateChannelActions();
|
||||||
@ -3161,10 +3169,21 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
$scope.chatFull = AppChatsManager.wrapForFull($scope.chatID, {});
|
$scope.chatFull = AppChatsManager.wrapForFull($scope.chatID, {});
|
||||||
$scope.settings = {notifications: true};
|
$scope.settings = {notifications: true};
|
||||||
|
|
||||||
|
$scope.maxParticipants = 200;
|
||||||
|
|
||||||
AppProfileManager.getChatFull($scope.chatID).then(function (chatFull) {
|
AppProfileManager.getChatFull($scope.chatID).then(function (chatFull) {
|
||||||
$scope.chatFull = AppChatsManager.wrapForFull($scope.chatID, chatFull);
|
$scope.chatFull = AppChatsManager.wrapForFull($scope.chatID, chatFull);
|
||||||
$scope.$broadcast('ui_height');
|
$scope.$broadcast('ui_height');
|
||||||
|
|
||||||
|
$scope.canMigrate = $scope.chatFull &&
|
||||||
|
$scope.chatFull.participants &&
|
||||||
|
$scope.chatFull.participants.participants &&
|
||||||
|
$scope.chatFull.participants.participants.length >= 200;
|
||||||
|
|
||||||
|
if (Config.Modes.test || Config.Modes.debug) {
|
||||||
|
$scope.canMigrate = true;
|
||||||
|
}
|
||||||
|
|
||||||
NotificationsManager.savePeerSettings(-$scope.chatID, chatFull.notify_settings);
|
NotificationsManager.savePeerSettings(-$scope.chatID, chatFull.notify_settings);
|
||||||
|
|
||||||
NotificationsManager.getPeerMuted(-$scope.chatID).then(function (muted) {
|
NotificationsManager.getPeerMuted(-$scope.chatID).then(function (muted) {
|
||||||
@ -3229,6 +3248,14 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.migrateToSuperGroup = function () {
|
||||||
|
ErrorService.confirm({type: 'SUPERGROUP_MIGRATE'}).then(function () {
|
||||||
|
MtpApiManager.invokeApi('messages.migrateChat', {
|
||||||
|
chat_id: AppChatsManager.getChatInput($scope.chatID)
|
||||||
|
}).then(onChatUpdated);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$scope.kickFromGroup = function (userID) {
|
$scope.kickFromGroup = function (userID) {
|
||||||
MtpApiManager.invokeApi('messages.deleteChatUser', {
|
MtpApiManager.invokeApi('messages.deleteChatUser', {
|
||||||
chat_id: AppChatsManager.getChatInput($scope.chatID),
|
chat_id: AppChatsManager.getChatInput($scope.chatID),
|
||||||
@ -3338,6 +3365,15 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if ($scope.chatFull.chat &&
|
||||||
|
$scope.chatFull.chat.pFlags.creator &&
|
||||||
|
$scope.chatFull.exported_invite &&
|
||||||
|
$scope.chatFull.exported_invite._ == 'chatInviteEmpty') {
|
||||||
|
AppProfileManager.getChatInviteLink($scope.chatID, true).then(function (link) {
|
||||||
|
$scope.chatFull.exported_invite = {_: 'chatInviteExported', link: link};
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,8 +24,15 @@
|
|||||||
"group_modal_settings": "Settings",
|
"group_modal_settings": "Settings",
|
||||||
"group_modal_notifications": "Notifications",
|
"group_modal_notifications": "Notifications",
|
||||||
"group_modal_menu_share_link": "Invite to group via link",
|
"group_modal_menu_share_link": "Invite to group via link",
|
||||||
|
"group_modal_migrate_to_supergroup": "Upgrade to supergroup",
|
||||||
"group_modal_members": "Members",
|
"group_modal_members": "Members",
|
||||||
"group_modal_members_kick": "Remove",
|
"group_modal_members_kick": "Remove",
|
||||||
|
"group_modal_migrate_header": "Members limit reached",
|
||||||
|
"group_modal_migrate_desc": "To go over the limit and get additional features, upgrade to a supergroup.",
|
||||||
|
"group_modal_migrate_item1": "Supergroups can get up to 1000 members",
|
||||||
|
"group_modal_migrate_item2": "New members see the entire chat history",
|
||||||
|
"group_modal_migrate_item3": "Admins delete messages for everyone",
|
||||||
|
"group_modal_migrate_item4": "Notifications are muted by default",
|
||||||
|
|
||||||
"channel_modal_info": "Channel info",
|
"channel_modal_info": "Channel info",
|
||||||
"channel_modal_description": "Description",
|
"channel_modal_description": "Description",
|
||||||
@ -223,6 +230,7 @@
|
|||||||
"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_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 members will be removed and all messages will be lost.",
|
"confirm_modal_delete_channel_md": "Are you sure you want to delete this channel?\n\nAll members will be removed and all messages will be lost.",
|
||||||
"confirm_modal_jump_ext_url_md": "Open this link?\n\n{url}",
|
"confirm_modal_jump_ext_url_md": "Open this link?\n\n{url}",
|
||||||
|
"confirm_modal_migrate_supergroup_md": "Please note that group members will need to update their Telegram apps to the latest version to see your supergroup.\n\nAre you sure you want to upgrage this group?",
|
||||||
|
|
||||||
"confirm_modal_are_u_sure": "Are you sure?",
|
"confirm_modal_are_u_sure": "Are you sure?",
|
||||||
|
|
||||||
|
@ -473,11 +473,8 @@ angular.module('myApp.services')
|
|||||||
|
|
||||||
function fillHistoryStorage (peerID, maxID, fullLimit, historyStorage) {
|
function fillHistoryStorage (peerID, maxID, fullLimit, historyStorage) {
|
||||||
// console.log('fill history storage', peerID, maxID, fullLimit, angular.copy(historyStorage));
|
// console.log('fill history storage', peerID, maxID, fullLimit, angular.copy(historyStorage));
|
||||||
var migratedNextPeer = migratedFromTo[peerID];
|
var offset = (migratedFromTo[peerID] && !maxID) ? 1 : 0;
|
||||||
var migratedPrevPeer = migratedToFrom[peerID];
|
return requestHistory (peerID, maxID, fullLimit, offset).then(function (historyResult) {
|
||||||
var isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined;
|
|
||||||
|
|
||||||
return requestHistory (peerID, maxID, fullLimit).then(function (historyResult) {
|
|
||||||
historyStorage.count = historyResult.count || historyResult.messages.length;
|
historyStorage.count = historyResult.count || historyResult.messages.length;
|
||||||
|
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
@ -505,6 +502,10 @@ angular.module('myApp.services')
|
|||||||
var totalCount = historyStorage.history.length;
|
var totalCount = historyStorage.history.length;
|
||||||
fullLimit -= (totalCount - wasTotalCount);
|
fullLimit -= (totalCount - wasTotalCount);
|
||||||
|
|
||||||
|
var migratedNextPeer = migratedFromTo[peerID];
|
||||||
|
var migratedPrevPeer = migratedToFrom[peerID];
|
||||||
|
var isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined;
|
||||||
|
|
||||||
if (isMigrated) {
|
if (isMigrated) {
|
||||||
historyStorage.count = Math.max(historyStorage.count, totalCount) + 1;
|
historyStorage.count = Math.max(historyStorage.count, totalCount) + 1;
|
||||||
}
|
}
|
||||||
@ -546,6 +547,30 @@ angular.module('myApp.services')
|
|||||||
return $q.when(result);
|
return $q.when(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function migrateChecks (migrateFrom, migrateTo) {
|
||||||
|
if (!migratedFromTo[migrateFrom] &&
|
||||||
|
!migratedToFrom[migrateTo] &&
|
||||||
|
AppChatsManager.hasChat(-migrateTo)) {
|
||||||
|
|
||||||
|
var fromChat = AppChatsManager.getChat(-migrateFrom);
|
||||||
|
if (fromChat &&
|
||||||
|
fromChat.migrated_to &&
|
||||||
|
fromChat.migrated_to.channel_id == -migrateTo) {
|
||||||
|
migratedFromTo[migrateFrom] = migrateTo;
|
||||||
|
migratedToFrom[migrateTo] = migrateFrom;
|
||||||
|
|
||||||
|
$timeout(function () {
|
||||||
|
var foundDialog = getDialogByPeerID(migrateFrom);
|
||||||
|
if (foundDialog.length) {
|
||||||
|
dialogsStorage.dialogs.splice(foundDialog[1], 1);
|
||||||
|
$rootScope.$broadcast('dialog_drop', {peerID: migrateFrom});
|
||||||
|
}
|
||||||
|
$rootScope.$broadcast('dialog_migrate', {migrateFrom: migrateFrom, migrateTo: migrateTo});
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getHistory (peerID, maxID, limit, backLimit, prerendered) {
|
function getHistory (peerID, maxID, limit, backLimit, prerendered) {
|
||||||
if (migratedFromTo[peerID]) {
|
if (migratedFromTo[peerID]) {
|
||||||
peerID = migratedFromTo[peerID];
|
peerID = migratedFromTo[peerID];
|
||||||
@ -1174,6 +1199,7 @@ angular.module('myApp.services')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (apiMessage.action) {
|
if (apiMessage.action) {
|
||||||
|
var migrateFrom, migrateTo;
|
||||||
switch (apiMessage.action._) {
|
switch (apiMessage.action._) {
|
||||||
case 'messageActionChatEditPhoto':
|
case 'messageActionChatEditPhoto':
|
||||||
AppPhotosManager.savePhoto(apiMessage.action.photo, mediaContext);
|
AppPhotosManager.savePhoto(apiMessage.action.photo, mediaContext);
|
||||||
@ -1211,6 +1237,22 @@ angular.module('myApp.services')
|
|||||||
apiMessage.action._ = 'messageActionChatLeave';
|
apiMessage.action._ = 'messageActionChatLeave';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'messageActionChannelMigrateFrom':
|
||||||
|
migrateFrom = -apiMessage.action.chat_id;
|
||||||
|
migrateTo = -channelID;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'messageActionChatMigrateTo':
|
||||||
|
migrateFrom = -channelID;
|
||||||
|
migrateTo = -apiMessage.action.channel_id;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (migrateFrom &&
|
||||||
|
migrateTo &&
|
||||||
|
!migratedFromTo[migrateFrom] &&
|
||||||
|
!migratedToFrom[migrateTo]) {
|
||||||
|
migrateChecks(migrateFrom, migrateTo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,9 +1089,17 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
chatFull.exported_invite._ == 'chatInviteExported') {
|
chatFull.exported_invite._ == 'chatInviteExported') {
|
||||||
return chatFull.exported_invite.link;
|
return chatFull.exported_invite.link;
|
||||||
}
|
}
|
||||||
return MtpApiManager.invokeApi('messages.exportChatInvite', {
|
var promise;
|
||||||
|
if (AppChatsManager.isChannel(id)) {
|
||||||
|
promise = MtpApiManager.invokeApi('channels.exportInvite', {
|
||||||
|
channel: AppChatsManager.getChannelInput(id)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
promise = MtpApiManager.invokeApi('messages.exportChatInvite', {
|
||||||
chat_id: AppChatsManager.getChatInput(id)
|
chat_id: AppChatsManager.getChatInput(id)
|
||||||
}).then(function (exportedInvite) {
|
});
|
||||||
|
}
|
||||||
|
return promise.then(function (exportedInvite) {
|
||||||
if (chatsFull[id] !== undefined) {
|
if (chatsFull[id] !== undefined) {
|
||||||
chatsFull[id].exported_invite = exportedInvite;
|
chatsFull[id].exported_invite = exportedInvite;
|
||||||
}
|
}
|
||||||
|
@ -3012,13 +3012,15 @@ _:-ms-lang(x), .composer_rich_textarea:empty:focus:before {
|
|||||||
padding: 20px 0;
|
padding: 20px 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
word-break: break-all;
|
|
||||||
}
|
}
|
||||||
.confirm_phone_number {
|
.confirm_phone_number {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 15px 10px 0;
|
padding: 15px 10px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
.confirm_modal_extlink_jump {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
.photo_modal_window,
|
.photo_modal_window,
|
||||||
.video_modal_window,
|
.video_modal_window,
|
||||||
@ -3208,6 +3210,16 @@ a.contacts_modal_contact:hover .md_modal_list_peer_description,
|
|||||||
color: #91a6ba;
|
color: #91a6ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h4.chat_modal_migrate_header {
|
||||||
|
font-size: inherit;
|
||||||
|
font-weight: bold;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
ul.chat_modal_migrate_list {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.chat_modal_participant_wrap {
|
.chat_modal_participant_wrap {
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
border-top: 1px solid #F0F0F0;
|
border-top: 1px solid #F0F0F0;
|
||||||
@ -4045,11 +4057,18 @@ a.countries_modal_search_clear {
|
|||||||
|
|
||||||
&_splitter {
|
&_splitter {
|
||||||
border-top: 1px solid #dfdfdf;
|
border-top: 1px solid #dfdfdf;
|
||||||
height: 12px;
|
min-height: 12px;
|
||||||
background: #f5f5f5;
|
background: #f5f5f5;
|
||||||
|
|
||||||
.box-shadow(inset 0px 1px 1px #ededed);
|
.box-shadow(inset 0px 1px 1px #ededed);
|
||||||
}
|
}
|
||||||
|
&_splitter_content {
|
||||||
|
height: auto;
|
||||||
|
padding-left: 120px;
|
||||||
|
color: #777;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 5px 20px 3px 55px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.md_modal_versioned_section_wrap {
|
.md_modal_versioned_section_wrap {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
<div class="md_modal_sections clearfix">
|
<div class="md_modal_sections clearfix">
|
||||||
|
|
||||||
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="hasRights('invite') || chatFull.chat.pFlags.left">
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="hasRights('invite') && chatFull.participants.participants.length < maxParticipants || chatFull.chat.pFlags.left">
|
||||||
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
||||||
|
|
||||||
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
||||||
@ -78,11 +78,31 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="chatFull.chat.pFlags.creator && canMigrate">
|
||||||
|
|
||||||
|
<div class="md_modal_section_link_wrap">
|
||||||
|
<a class="md_modal_section_link" ng-click="migrateToSuperGroup()" my-i18n="group_modal_migrate_to_supergroup"></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.participants.participants.length > 0">
|
<div ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.participants.participants.length > 0">
|
||||||
|
|
||||||
<div class="md_modal_section_splitter"></div>
|
<div ng-switch="chatFull.chat.pFlags.creator && canMigrate">
|
||||||
|
<div ng-switch-when="true" class="md_modal_section_splitter md_modal_section_splitter_content">
|
||||||
|
<h4 class="chat_modal_migrate_header" my-i18n="group_modal_migrate_header"></h4>
|
||||||
|
<p class="chat_modal_migrate_description" my-i18n="group_modal_migrate_desc"></p>
|
||||||
|
<ul class="chat_modal_migrate_list">
|
||||||
|
<li my-i18n="group_modal_migrate_item1"></li>
|
||||||
|
<li my-i18n="group_modal_migrate_item2"></li>
|
||||||
|
<li my-i18n="group_modal_migrate_item3"></li>
|
||||||
|
<li my-i18n="group_modal_migrate_item4"></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div ng-switch-default class="md_modal_section_splitter"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_peers">
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_peers">
|
||||||
<i class="md_modal_section_icon md_modal_section_icon_people"></i>
|
<i class="md_modal_section_icon md_modal_section_icon_people"></i>
|
||||||
|
@ -55,9 +55,11 @@
|
|||||||
<div ng-switch-when="REVOKE_GROUP_INVITE_LINK" my-i18n="confirm_modal_revoke_group_link"></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="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>
|
<div ng-switch-when="CHANNEL_DELETE" my-i18n="confirm_modal_delete_channel_md"></div>
|
||||||
<div ng-switch-when="JUMP_EXT_URL" my-i18n="confirm_modal_jump_ext_url_md">
|
<div ng-switch-when="JUMP_EXT_URL" my-i18n="confirm_modal_jump_ext_url_md" class="confirm_modal_extlink_jump">
|
||||||
<my-i18n-param name="url"><strong ng-bind="url"></strong></my-i18n-param>
|
<my-i18n-param name="url"><strong ng-bind="url"></strong></my-i18n-param>
|
||||||
</div>
|
</div>
|
||||||
|
<div ng-switch-when="SUPERGROUP_MIGRATE" my-i18n="confirm_modal_migrate_supergroup_md"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<span ng-switch-default ng-switch="message.length > 0">
|
<span ng-switch-default ng-switch="message.length > 0">
|
||||||
|
Loading…
Reference in New Issue
Block a user