diff --git a/Telegram/Resources/scheme.tl b/Telegram/Resources/scheme.tl index 500b7c020f..660df99d01 100644 --- a/Telegram/Resources/scheme.tl +++ b/Telegram/Resources/scheme.tl @@ -227,12 +227,12 @@ userStatusLastWeek#7bf09fc = UserStatus; userStatusLastMonth#77ebc742 = UserStatus; chatEmpty#9ba2d800 id:int = Chat; -chat#d91cdd54 flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true admins_enabled:flags.3?true admin:flags.4?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel = Chat; +chat#3bda1bde flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chatForbidden#7328bdb id:int title:string = Chat; -channel#c88974ac flags:# creator:flags.0?true left:flags.2?true editor:flags.3?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true democracy:flags.10?true signatures:flags.11?true min:flags.12?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChannelAdminRights banned_rights:flags.15?ChannelBannedRights participants_count:flags.17?int = Chat; +channel#4df30834 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int = Chat; channelForbidden#289da732 flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string until_date:flags.16?int = Chat; -chatFull#edd2a791 flags:# id:int participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int = ChatFull; +chatFull#22a235da flags:# can_set_username:flags.7?true id:int about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int = ChatFull; channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull; chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant; @@ -318,8 +318,7 @@ peerNotifySettings#af509d20 flags:# show_previews:flags.0?Bool silent:flags.1?Bo peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings; -wallPaper#ccb03657 id:int title:string sizes:Vector color:int = WallPaper; -wallPaperSolid#63117f24 id:int title:string bg_color:int color:int = WallPaper; +wallPaper#f04f91ec id:long flags:# creator:flags.0?true default:flags.1?true access_hash:long slug:string document:Document = WallPaper; inputReportReasonSpam#58dbcab8 = ReportReason; inputReportReasonViolence#1e22c78d = ReportReason; @@ -413,7 +412,6 @@ updateNewChannelMessage#62ba04d9 message:Message pts:int pts_count:int = Update; updateReadChannelInbox#4214f37f channel_id:int max_id:int = Update; updateDeleteChannelMessages#c37521c9 channel_id:int messages:Vector pts:int pts_count:int = Update; updateChannelMessageViews#98a12b4b channel_id:int id:int views:int = Update; -updateChatAdmins#6e947941 chat_id:int enabled:Bool version:int = Update; updateChatParticipantAdmin#b6901959 chat_id:int user_id:int is_admin:Bool version:int = Update; updateNewStickerSet#688a30aa stickerset:messages.StickerSet = Update; updateStickerSetsOrder#bb2d201 flags:# masks:flags.0?true order:Vector = Update; @@ -450,6 +448,7 @@ updateDialogUnreadMark#e16459c3 flags:# unread:flags.0?true peer:DialogPeer = Up updateUserPinnedMessage#4c43da18 user_id:int id:int = Update; updateChatPinnedMessage#22893b26 chat_id:int id:int = Update; updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update; +updateChatDefaultBannedRights#54c01850 peer:Peer default_banned_rights:ChatBannedRights version:int = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -514,7 +513,7 @@ inputDocumentEmpty#72f0eaae = InputDocument; inputDocument#1abfb575 id:long access_hash:long file_reference:bytes = InputDocument; documentEmpty#36f8c871 id:long = Document; -document#59534e4c id:long access_hash:long file_reference:bytes date:int mime_type:string size:int thumb:PhotoSize dc_id:int attributes:Vector = Document; +document#9ba29cc1 flags:# id:long access_hash:long file_reference:bytes date:int mime_type:string size:int thumbs:flags.0?Vector dc_id:int attributes:Vector = Document; help.support#17c6b5f6 phone_number:string user:User = help.Support; @@ -676,8 +675,8 @@ channelMessagesFilter#cd77d957 flags:# exclude_new_messages:flags.1?true ranges: channelParticipant#15ebac1d user_id:int date:int = ChannelParticipant; channelParticipantSelf#a3289a6d user_id:int inviter_id:int date:int = ChannelParticipant; channelParticipantCreator#e3e2e1f9 user_id:int = ChannelParticipant; -channelParticipantAdmin#a82fa898 flags:# can_edit:flags.0?true user_id:int inviter_id:int promoted_by:int date:int admin_rights:ChannelAdminRights = ChannelParticipant; -channelParticipantBanned#222c1886 flags:# left:flags.0?true user_id:int kicked_by:int date:int banned_rights:ChannelBannedRights = ChannelParticipant; +channelParticipantAdmin#5daa6e23 flags:# can_edit:flags.0?true self:flags.1?true user_id:int inviter_id:flags.1?int promoted_by:int date:int admin_rights:ChatAdminRights = ChannelParticipant; +channelParticipantBanned#1c0facaf flags:# left:flags.0?true user_id:int kicked_by:int date:int banned_rights:ChatBannedRights = ChannelParticipant; channelParticipantsRecent#de3f3c79 = ChannelParticipantsFilter; channelParticipantsAdmins#b4608969 = ChannelParticipantsFilter; @@ -685,6 +684,7 @@ channelParticipantsKicked#a3b54985 q:string = ChannelParticipantsFilter; channelParticipantsBots#b0d1865b = ChannelParticipantsFilter; channelParticipantsBanned#1427a5e1 q:string = ChannelParticipantsFilter; channelParticipantsSearch#656ac4b q:string = ChannelParticipantsFilter; +channelParticipantsContacts#bb6ae88d q:string = ChannelParticipantsFilter; channels.channelParticipants#f56ee2a8 count:int participants:Vector users:Vector = channels.ChannelParticipants; channels.channelParticipantsNotModified#f0173fe9 = channels.ChannelParticipants; @@ -921,10 +921,6 @@ langPackDifference#f385c1f6 lang_code:string from_version:int version:int string langPackLanguage#eeca5ce3 flags:# official:flags.0?true rtl:flags.2?true beta:flags.3?true name:string native_name:string lang_code:string base_lang_code:flags.1?string plural_code:string strings_count:int translated_count:int translations_url:string = LangPackLanguage; -channelAdminRights#5d7ceba5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true invite_link:flags.6?true pin_messages:flags.7?true add_admins:flags.9?true manage_call:flags.10?true = ChannelAdminRights; - -channelBannedRights#58cf4249 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true until_date:int = ChannelBannedRights; - channelAdminLogEventActionChangeTitle#e6dfb825 prev_value:string new_value:string = ChannelAdminLogEventAction; channelAdminLogEventActionChangeAbout#55188a2e prev_value:string new_value:string = ChannelAdminLogEventAction; channelAdminLogEventActionChangeUsername#6a4afc38 prev_value:string new_value:string = ChannelAdminLogEventAction; @@ -941,6 +937,8 @@ channelAdminLogEventActionParticipantToggleBan#e6d83d7e prev_participant:Channel channelAdminLogEventActionParticipantToggleAdmin#d5676710 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; channelAdminLogEventActionChangeStickerSet#b1c3caa7 prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction; channelAdminLogEventActionTogglePreHistoryHidden#5f5c95f1 new_value:Bool = ChannelAdminLogEventAction; +channelAdminLogEventActionDefaultBannedRights#2df5fc0a prev_banned_rights:ChatBannedRights new_banned_rights:ChatBannedRights = ChannelAdminLogEventAction; +channelAdminLogEventActionStopPoll#8f079643 message:Message = ChannelAdminLogEventAction; channelAdminLogEvent#3b5a3e40 id:long date:int user_id:int action:ChannelAdminLogEventAction = ChannelAdminLogEvent; @@ -1104,6 +1102,16 @@ chatOnlines#f041e250 onlines:int = ChatOnlines; statsURL#47a971e0 url:string = StatsURL; +chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true = ChatAdminRights; + +chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true until_date:int = ChatBannedRights; + +inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper; +inputWallPaperSlug#72091c80 slug:string = InputWallPaper; + +account.wallPapersNotModified#1c199183 = account.WallPapers; +account.wallPapers#702b65a9 hash:int wallpapers:Vector = account.WallPapers; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -1137,7 +1145,7 @@ account.getNotifySettings#12b3ad31 peer:InputNotifyPeer = PeerNotifySettings; account.resetNotifySettings#db7e1747 = Bool; account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User; account.updateStatus#6628562c offline:Bool = Bool; -account.getWallPapers#c04cfac2 = Vector; +account.getWallPapers#aabb1763 hash:int = account.WallPapers; account.reportPeer#ae189d5f peer:InputPeer reason:ReportReason = Bool; account.checkUsername#2714d86c username:string = Bool; account.updateUsername#3e0bdd7c username:string = User; @@ -1178,6 +1186,10 @@ account.cancelPasswordEmail#c1cbd5b6 = Bool; account.getContactSignUpNotification#9f07c728 = Bool; account.setContactSignUpNotification#cff43f61 silent:Bool = Bool; account.getNotifyExceptions#53577479 flags:# compare_sound:flags.1?true peer:flags.0?InputNotifyPeer = Updates; +account.uploadWallPaper#c7ba9b4d file:InputFile mime_type:string = WallPaper; +account.getWallPaper#fc8ddbea wallpaper:InputWallPaper = WallPaper; +account.saveWallPaper#189581b3 wallpaper:InputWallPaper unsave:Bool = Bool; +account.installWallPaper#4a0378ce wallpaper:InputWallPaper = Bool; users.getUsers#d91a548 id:Vector = Vector; users.getFullUser#ca30a5b1 id:InputUser = UserFull; @@ -1239,7 +1251,7 @@ messages.readMessageContents#36a73f77 id:Vector = messages.AffectedMessages messages.getStickers#43d4f2c emoticon:string hash:int = messages.Stickers; messages.getAllStickers#1c9618b1 hash:int = messages.AllStickers; messages.getWebPagePreview#8b68b0cc flags:# message:string entities:flags.3?Vector = MessageMedia; -messages.exportChatInvite#7d885289 chat_id:int = ExportedChatInvite; +messages.exportChatInvite#df7534c peer:InputPeer = ExportedChatInvite; messages.checkChatInvite#3eadb1bb hash:string = ChatInvite; messages.importChatInvite#6c50051c hash:string = Updates; messages.getStickerSet#2619a90e stickerset:InputStickerSet = messages.StickerSet; @@ -1247,7 +1259,6 @@ messages.installStickerSet#c78fe460 stickerset:InputStickerSet archived:Bool = m messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_param:string = Updates; messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector increment:Bool = Vector; -messages.toggleChatAdmins#ec8bd9e1 chat_id:int enabled:Bool = Updates; messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool; 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; @@ -1306,6 +1317,8 @@ messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector = Upd messages.getPollResults#73bb643b peer:InputPeer msg_id:int = Updates; messages.getOnlines#6e2be050 peer:InputPeer = ChatOnlines; messages.getStatsURL#83f6c0cd peer:InputPeer = StatsURL; +messages.editChatAbout#def60797 peer:InputPeer about:string = Bool; +messages.editChatDefaultBannedRights#a5866b41 peer:InputPeer banned_rights:ChatBannedRights = Updates; updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -1355,8 +1368,7 @@ channels.getParticipant#546dd7a6 channel:InputChannel user_id:InputUser = channe channels.getChannels#a7f6bbb id:Vector = messages.Chats; channels.getFullChannel#8736a09 channel:InputChannel = messages.ChatFull; channels.createChannel#f4893d7f flags:# broadcast:flags.0?true megagroup:flags.1?true title:string about:string = Updates; -channels.editAbout#13e27f1e channel:InputChannel about:string = Bool; -channels.editAdmin#20b88214 channel:InputChannel user_id:InputUser admin_rights:ChannelAdminRights = Updates; +channels.editAdmin#70f893ba channel:InputChannel user_id:InputUser admin_rights:ChatAdminRights = Updates; channels.editTitle#566decd0 channel:InputChannel title:string = Updates; channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates; channels.checkUsername#10e6bd2c channel:InputChannel username:string = Bool; @@ -1364,13 +1376,11 @@ channels.updateUsername#3514b3de channel:InputChannel username:string = Bool; channels.joinChannel#24b524c5 channel:InputChannel = Updates; channels.leaveChannel#f836aa95 channel:InputChannel = Updates; channels.inviteToChannel#199f3a6c channel:InputChannel users:Vector = Updates; -channels.exportInvite#c7560885 channel:InputChannel = ExportedChatInvite; channels.deleteChannel#c0111fe3 channel:InputChannel = Updates; -channels.toggleInvites#49609307 channel:InputChannel enabled:Bool = Updates; channels.exportMessageLink#ceb77163 channel:InputChannel id:int grouped:Bool = ExportedMessageLink; channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates; channels.getAdminedPublicChannels#8d8d82d7 = messages.Chats; -channels.editBanned#bfd915cd channel:InputChannel user_id:InputUser banned_rights:ChannelBannedRights = Updates; +channels.editBanned#72796912 channel:InputChannel user_id:InputUser banned_rights:ChatBannedRights = Updates; channels.getAdminLog#33ddf480 flags:# channel:InputChannel q:string events_filter:flags.0?ChannelAdminLogEventsFilter admins:flags.1?Vector max_id:long min_id:long limit:int = channels.AdminLogResults; channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet = Bool; channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector = Bool; @@ -1408,4 +1418,4 @@ langpack.getDifference#9d51e814 lang_code:string from_version:int = LangPackDiff langpack.getLanguages#42c6978f lang_pack:string = Vector; langpack.getLanguage#6a596502 lang_pack:string lang_code:string = LangPackLanguage; -// LAYER 92 +// LAYER 93 diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 6dff51471d..f6228ac032 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -1376,8 +1376,8 @@ void ApiWrap::applyLastParticipantsList( channel->mgInfo->lastParticipantsStatus = MegagroupInfo::LastParticipantsUpToDate; auto botStatus = channel->mgInfo->botStatus; - const auto emptyAdminRights = MTP_channelAdminRights(MTP_flags(0)); - const auto emptyRestrictedRights = MTP_channelBannedRights( + const auto emptyAdminRights = MTP_chatAdminRights(MTP_flags(0)); + const auto emptyRestrictedRights = MTP_chatBannedRights( MTP_flags(0), MTP_int(0)); for (const auto &p : list) { @@ -1406,11 +1406,11 @@ void ApiWrap::applyLastParticipantsList( } if (!base::contains(channel->mgInfo->lastParticipants, user)) { channel->mgInfo->lastParticipants.push_back(user); - if (adminRights.c_channelAdminRights().vflags.v) { + if (adminRights.c_chatAdminRights().vflags.v) { channel->mgInfo->lastAdmins.emplace( user, MegagroupInfo::Admin{ adminRights, adminCanEdit }); - } else if (restrictedRights.c_channelBannedRights().vflags.v != 0) { + } else if (restrictedRights.c_chatBannedRights().vflags.v != 0) { channel->mgInfo->lastRestricted.emplace( user, MegagroupInfo::Restricted{ restrictedRights }); @@ -1552,7 +1552,9 @@ void ApiWrap::requestSelfParticipant(ChannelData *channel) { } break; case mtpc_channelParticipantAdmin: { auto &d = p.vparticipant.c_channelParticipantAdmin(); - channel->inviter = d.vinviter_id.v; + channel->inviter = (d.is_self() && d.has_inviter_id()) + ? d.vinviter_id.v + : 0; channel->inviteDate = d.vdate.v; } break; } @@ -1582,7 +1584,7 @@ void ApiWrap::kickParticipant( void ApiWrap::kickParticipant( not_null channel, not_null user, - const MTPChannelBannedRights ¤tRights) { + const MTPChatBannedRights ¤tRights) { const auto kick = KickRequest(channel, user); if (_kickRequests.contains(kick)) return; @@ -1614,7 +1616,7 @@ void ApiWrap::unblockParticipant( const auto requestId = request(MTPchannels_EditBanned( channel->inputChannel, user->inputUser, - MTP_channelBannedRights(MTP_flags(0), MTP_int(0)) + MTP_chatBannedRights(MTP_flags(0), MTP_int(0)) )).done([=](const MTPUpdates &result) { applyUpdates(result); @@ -1947,36 +1949,26 @@ void ApiWrap::exportInviteLink(not_null peer) { return; } - const auto sendRequest = [this, peer] { - const auto exportFail = [this, peer](const RPCError &error) { + const auto requestId = [&] { + return request(MTPmessages_ExportChatInvite( + peer->input + )).done([=](const MTPExportedChatInvite &result) { _exportInviteRequests.erase(peer); - }; - if (const auto chat = peer->asChat()) { - return request(MTPmessages_ExportChatInvite( - chat->inputChat - )).done([=](const MTPExportedChatInvite &result) { - _exportInviteRequests.erase(chat); - chat->setInviteLink( - (result.type() == mtpc_chatInviteExported - ? qs(result.c_chatInviteExported().vlink) - : QString())); - }).fail(exportFail).send(); - } else if (const auto channel = peer->asChannel()) { - return request(MTPchannels_ExportInvite( - channel->inputChannel - )).done([=](const MTPExportedChatInvite &result) { - _exportInviteRequests.erase(channel); - channel->setInviteLink( - (result.type() == mtpc_chatInviteExported - ? qs(result.c_chatInviteExported().vlink) - : QString())); - }).fail(exportFail).send(); - } - return 0; - }; - if (const auto requestId = sendRequest()) { - _exportInviteRequests.emplace(peer, requestId); - } + const auto link = (result.type() == mtpc_chatInviteExported) + ? qs(result.c_chatInviteExported().vlink) + : QString(); + if (const auto chat = peer->asChat()) { + chat->setInviteLink(link); + } else if (const auto channel = peer->asChannel()) { + channel->setInviteLink(link); + } else { + Unexpected("Peer in ApiWrap::exportInviteLink."); + } + }).fail([=](const RPCError &error) { + _exportInviteRequests.erase(peer); + }).send(); + }(); + _exportInviteRequests.emplace(peer, requestId); } void ApiWrap::requestNotifySettings(const MTPInputNotifyPeer &peer) { @@ -3653,17 +3645,18 @@ void ApiWrap::editChatAdmins( _chatAdminsToSave.emplace(chat, std::move(admins)); } - auto requestId = request(MTPmessages_ToggleChatAdmins(chat->inputChat, MTP_bool(adminsEnabled))).done([this, chat](const MTPUpdates &updates) { - _chatAdminsEnabledRequests.remove(chat); - applyUpdates(updates); - saveChatAdmins(chat); - }).fail([this, chat](const RPCError &error) { - _chatAdminsEnabledRequests.remove(chat); - if (error.type() == qstr("CHAT_NOT_MODIFIED")) { - saveChatAdmins(chat); - } - }).send(); - _chatAdminsEnabledRequests.emplace(chat, requestId); + // #TODO groups + //auto requestId = request(MTPmessages_ToggleChatAdmins(chat->inputChat, MTP_bool(adminsEnabled))).done([this, chat](const MTPUpdates &updates) { + // _chatAdminsEnabledRequests.remove(chat); + // applyUpdates(updates); + // saveChatAdmins(chat); + //}).fail([this, chat](const RPCError &error) { + // _chatAdminsEnabledRequests.remove(chat); + // if (error.type() == qstr("CHAT_NOT_MODIFIED")) { + // saveChatAdmins(chat); + // } + //}).send(); + //_chatAdminsEnabledRequests.emplace(chat, requestId); } void ApiWrap::saveChatAdmins(not_null chat) { diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 1bfcc2af96..9aa711e4ba 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -145,7 +145,7 @@ public: void kickParticipant( not_null channel, not_null user, - const MTPChannelBannedRights ¤tRights); + const MTPChatBannedRights ¤tRights); void unblockParticipant( not_null channel, not_null user); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 88b9d1877d..f297be69a0 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -156,7 +156,8 @@ namespace App { case mtpc_chatParticipants: { const auto &d(p.c_chatParticipants()); chat = App::chat(d.vchat_id.v); - auto canEdit = chat->canEdit(); + // #TODO groups + auto canEdit = chat->canEditInformation(); if (!requestBotInfos || chat->version <= d.vversion.v) { // !requestBotInfos is true on getFullChat result chat->version = d.vversion.v; auto &v = d.vparticipants.v; @@ -166,7 +167,8 @@ namespace App { : (chat->participants.begin()->second + 1); chat->invitedByMe.clear(); chat->admins.clear(); - chat->removeFlags(MTPDchat::Flag::f_admin); + // #TODO groups + //chat->removeFlags(MTPDchat::Flag::f_admin); for (auto i = v.cbegin(), e = v.cend(); i != e; ++i) { int32 uid = 0, inviter = 0; switch (i->type()) { @@ -197,7 +199,8 @@ namespace App { if (i->type() == mtpc_chatParticipantAdmin) { chat->admins.insert(user); if (user->isSelf()) { - chat->addFlags(MTPDchat::Flag::f_admin); + // #TODO groups +// chat->addFlags(MTPDchat::Flag::f_admin); } } } else { @@ -232,7 +235,8 @@ namespace App { } } } - if (canEdit != chat->canEdit()) { + // #TODO groups + if (canEdit != chat->canEditInformation()) { Notify::peerUpdatedDelayed(chat, Notify::PeerUpdate::Flag::ChatCanEdit); } } break; @@ -284,7 +288,8 @@ namespace App { Auth().api().requestPeer(chat); } else if (chat->version <= d.vversion.v && chat->count > 0) { chat->version = d.vversion.v; - auto canEdit = chat->canEdit(); + // #TODO groups + auto canEdit = chat->canEditInformation(); const auto user = App::userLoaded(d.vuser_id.v); if (user) { if (chat->participants.empty()) { @@ -299,7 +304,8 @@ namespace App { chat->invitedByMe.remove(user); chat->admins.remove(user); if (user->isSelf()) { - chat->removeFlags(MTPDchat::Flag::f_admin); + // #TODO groups +// chat->removeFlags(MTPDchat::Flag::f_admin); } History *h = App::historyLoaded(chat->id); @@ -325,39 +331,14 @@ namespace App { chat->invalidateParticipants(); chat->count--; } - if (canEdit != chat->canEdit()) { + // #TODO groups + if (canEdit != chat->canEditInformation()) { Notify::peerUpdatedDelayed(chat, Notify::PeerUpdate::Flag::ChatCanEdit); } Notify::peerUpdatedDelayed(chat, Notify::PeerUpdate::Flag::MembersChanged); } } - void feedChatAdmins(const MTPDupdateChatAdmins &d) { - auto chat = App::chat(d.vchat_id.v); - if (chat->version <= d.vversion.v) { - auto wasCanEdit = chat->canEdit(); - auto badVersion = (chat->version + 1 < d.vversion.v); - chat->version = d.vversion.v; - if (mtpIsTrue(d.venabled)) { - chat->addFlags(MTPDchat::Flag::f_admins_enabled); - } else { - chat->removeFlags(MTPDchat::Flag::f_admins_enabled); - } - if (badVersion || mtpIsTrue(d.venabled)) { - chat->invalidateParticipants(); - Auth().api().requestPeer(chat); - } - if (wasCanEdit != chat->canEdit()) { - Notify::peerUpdatedDelayed( - chat, - Notify::PeerUpdate::Flag::ChatCanEdit); - } - Notify::peerUpdatedDelayed( - chat, - Notify::PeerUpdate::Flag::AdminsChanged); - } - } - void feedParticipantAdmin(const MTPDupdateChatParticipantAdmin &d) { ChatData *chat = App::chat(d.vchat_id.v); if (chat->version + 1 < d.vversion.v) { @@ -366,12 +347,14 @@ namespace App { Auth().api().requestPeer(chat); } else if (chat->version <= d.vversion.v && chat->count > 0) { chat->version = d.vversion.v; - auto canEdit = chat->canEdit(); + // #TODO groups + auto canEdit = chat->canEditInformation(); UserData *user = App::userLoaded(d.vuser_id.v); if (user) { if (mtpIsTrue(d.vis_admin)) { if (user->isSelf()) { - chat->addFlags(MTPDchat::Flag::f_admin); + // #TODO groups +// chat->addFlags(MTPDchat::Flag::f_admin); } if (chat->noParticipantInfo()) { Auth().api().requestFullPeer(chat); @@ -380,14 +363,15 @@ namespace App { } } else { if (user->isSelf()) { - chat->removeFlags(MTPDchat::Flag::f_admin); + // #TODO groups + //chat->removeFlags(MTPDchat::Flag::f_admin); } chat->admins.remove(user); } } else { chat->invalidateParticipants(); } - if (canEdit != chat->canEdit()) { + if (canEdit != chat->canEditInformation()) { Notify::peerUpdatedDelayed(chat, Notify::PeerUpdate::Flag::ChatCanEdit); } Notify::peerUpdatedDelayed(chat, Notify::PeerUpdate::Flag::AdminsChanged); diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 5c057086d1..18e2a87b55 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -74,7 +74,6 @@ namespace App { void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos); void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d); void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d); - void feedChatAdmins(const MTPDupdateChatAdmins &d); void feedParticipantAdmin(const MTPDupdateChatParticipantAdmin &d); bool checkEntitiesAndViewsUpdate(const MTPDmessage &m); // returns true if item found and it is not detached void updateEditedMessage(const MTPMessage &m); diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index 08ba9677b3..57f7b0eb87 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -96,7 +96,7 @@ void ShowAddParticipantsError( auto box = Box( channel, user, - MTP_channelAdminRights(MTP_flags(0))); + MTP_chatAdminRights(MTP_flags(0))); box->setSaveCallback(saveCallback); *weak = Ui::show(std::move(box)); }; @@ -642,9 +642,9 @@ void GroupInfoBox::createChannel(const QString &title, const QString &descriptio Auth().api().uploadPeerPhoto(channel, std::move(image)); } _createdChannel = channel; - _creationRequestId = request( - MTPchannels_ExportInvite(_createdChannel->inputChannel) - ).done([this](const MTPExportedChatInvite &result) { + _creationRequestId = request(MTPmessages_ExportChatInvite( + _createdChannel->input + )).done([=](const MTPExportedChatInvite &result) { _creationRequestId = 0; if (result.type() == mtpc_chatInviteExported) { auto link = qs(result.c_chatInviteExported().vlink); @@ -1324,7 +1324,12 @@ void EditChannelBox::save() { if (_sentTitle == _channel->name) { saveDescription(); } else { - _saveTitleRequestId = MTP::send(MTPchannels_EditTitle(_channel->inputChannel, MTP_string(_sentTitle)), rpcDone(&EditChannelBox::onSaveTitleDone), rpcFail(&EditChannelBox::onSaveFail)); + _saveTitleRequestId = MTP::send( + MTPchannels_EditTitle( + _channel->inputChannel, + MTP_string(_sentTitle)), + rpcDone(&EditChannelBox::onSaveTitleDone), + rpcFail(&EditChannelBox::onSaveFail)); } } @@ -1338,7 +1343,12 @@ void EditChannelBox::saveDescription() { if (_sentDescription == _channel->about()) { saveSign(); } else { - _saveDescriptionRequestId = MTP::send(MTPchannels_EditAbout(_channel->inputChannel, MTP_string(_sentDescription)), rpcDone(&EditChannelBox::onSaveDescriptionDone), rpcFail(&EditChannelBox::onSaveFail)); + _saveDescriptionRequestId = MTP::send( + MTPmessages_EditChatAbout( + _channel->input, + MTP_string(_sentDescription)), + rpcDone(&EditChannelBox::onSaveDescriptionDone), + rpcFail(&EditChannelBox::onSaveFail)); } } @@ -1346,16 +1356,22 @@ void EditChannelBox::saveSign() { if (!canEditSignatures() || _channel->addsSignature() == _sign->checked()) { saveInvites(); } else { - _saveSignRequestId = MTP::send(MTPchannels_ToggleSignatures(_channel->inputChannel, MTP_bool(_sign->checked())), rpcDone(&EditChannelBox::onSaveSignDone), rpcFail(&EditChannelBox::onSaveFail)); + _saveSignRequestId = MTP::send( + MTPchannels_ToggleSignatures( + _channel->inputChannel, + MTP_bool(_sign->checked())), + rpcDone(&EditChannelBox::onSaveSignDone), + rpcFail(&EditChannelBox::onSaveFail)); } } void EditChannelBox::saveInvites() { - if (!canEditInvites() || _channel->anyoneCanAddMembers() == (_inviteGroup->value() == Invites::Everybody)) { - closeBox(); - } else { - _saveInvitesRequestId = MTP::send(MTPchannels_ToggleInvites(_channel->inputChannel, MTP_bool(_inviteGroup->value() == Invites::Everybody)), rpcDone(&EditChannelBox::onSaveInvitesDone), rpcFail(&EditChannelBox::onSaveFail)); - } + // #TODO groups + //if (!canEditInvites() || _channel->anyoneCanAddMembers() == (_inviteGroup->value() == Invites::Everybody)) { + // closeBox(); + //} else { + // _saveInvitesRequestId = MTP::send(MTPchannels_ToggleInvites(_channel->inputChannel, MTP_bool(_inviteGroup->value() == Invites::Everybody)), rpcDone(&EditChannelBox::onSaveInvitesDone), rpcFail(&EditChannelBox::onSaveFail)); + //} } bool EditChannelBox::onSaveFail(const RPCError &error, mtpRequestId req) { diff --git a/Telegram/SourceFiles/boxes/background_box.cpp b/Telegram/SourceFiles/boxes/background_box.cpp index 360fa7bb60..9da642db03 100644 --- a/Telegram/SourceFiles/boxes/background_box.cpp +++ b/Telegram/SourceFiles/boxes/background_box.cpp @@ -18,7 +18,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_overview.h" #include "styles/style_boxes.h" -class BackgroundBox::Inner : public TWidget, public RPCSender, private base::Subscriber { +class BackgroundBox::Inner + : public Ui::RpWidget + , private MTP::Sender + , private base::Subscriber { public: Inner(QWidget *parent); @@ -35,7 +38,6 @@ protected: void mouseReleaseEvent(QMouseEvent *e) override; private: - void gotWallpapers(const MTPVector &result); void updateWallpapers(); Fn _backgroundChosenCallback; @@ -75,12 +77,21 @@ void BackgroundBox::backgroundChosen(int index) { closeBox(); } -BackgroundBox::Inner::Inner(QWidget *parent) : TWidget(parent) -, _check(std::make_unique(st::overviewCheck, [this] { update(); })) { +BackgroundBox::Inner::Inner(QWidget *parent) : RpWidget(parent) +, _check(std::make_unique(st::overviewCheck, [=] { update(); })) { _check->setChecked(true, Ui::RoundCheckbox::SetStyle::Fast); if (!Auth().data().wallpapersCount()) { resize(BackgroundsInRow * (st::backgroundSize.width() + st::backgroundPadding) + st::backgroundPadding, 2 * (st::backgroundSize.height() + st::backgroundPadding) + st::backgroundPadding); - MTP::send(MTPaccount_GetWallPapers(), rpcDone(&Inner::gotWallpapers)); + request(MTPaccount_GetWallPapers( + MTP_int(0) + )).done([=](const MTPaccount_WallPapers &result) { + result.match([&](const MTPDaccount_wallPapers &data) { + Auth().data().setWallpapers(data.vwallpapers.v); + updateWallpapers(); + }, [&](const MTPDaccount_wallPapersNotModified &) { + LOG(("API Error: account.wallPapersNotModified received.")); + }); + }).send(); } else { updateWallpapers(); } @@ -94,11 +105,6 @@ BackgroundBox::Inner::Inner(QWidget *parent) : TWidget(parent) setMouseTracking(true); } -void BackgroundBox::Inner::gotWallpapers(const MTPVector &result) { - Auth().data().setWallpapers(result.v); - updateWallpapers(); -} - void BackgroundBox::Inner::updateWallpapers() { _bgCount = Auth().data().wallpapersCount(); _rows = _bgCount / BackgroundsInRow; diff --git a/Telegram/SourceFiles/boxes/confirm_box.cpp b/Telegram/SourceFiles/boxes/confirm_box.cpp index 9ae4d0a8ad..9c9413d1d7 100644 --- a/Telegram/SourceFiles/boxes/confirm_box.cpp +++ b/Telegram/SourceFiles/boxes/confirm_box.cpp @@ -621,7 +621,7 @@ void DeleteMessagesBox::deleteAndClear() { Auth().api().kickParticipant( _moderateInChannel, _moderateFrom, - MTP_channelBannedRights(MTP_flags(0), MTP_int(0))); + MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } if (_reportSpam->checked()) { MTP::send( diff --git a/Telegram/SourceFiles/boxes/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/edit_participant_box.cpp index b69d406e14..6b74398c16 100644 --- a/Telegram/SourceFiles/boxes/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_participant_box.cpp @@ -202,26 +202,21 @@ void EditParticipantBox::resizeToContent() { setDimensions(_inner->width(), qMin(_inner->height(), st::boxMaxListHeight)); } -EditAdminBox::EditAdminBox(QWidget*, not_null channel, not_null user, const MTPChannelAdminRights &rights) : EditParticipantBox(nullptr, channel, user, (rights.c_channelAdminRights().vflags.v != 0)) +EditAdminBox::EditAdminBox(QWidget*, not_null channel, not_null user, const MTPChatAdminRights &rights) : EditParticipantBox(nullptr, channel, user, (rights.c_chatAdminRights().vflags.v != 0)) , _oldRights(rights) { - auto dependency = [this](Flag dependent, Flag dependency) { - _dependencies.push_back(std::make_pair(dependent, dependency)); - }; - dependency(Flag::f_invite_link, Flag::f_invite_users); // invite_link <-> invite_users - dependency(Flag::f_invite_users, Flag::f_invite_link); } -MTPChannelAdminRights EditAdminBox::DefaultRights(not_null channel) { +MTPChatAdminRights EditAdminBox::DefaultRights(not_null channel) { auto defaultRights = channel->isMegagroup() - ? (Flag::f_change_info | Flag::f_delete_messages | Flag::f_ban_users | Flag::f_invite_users | Flag::f_invite_link | Flag::f_pin_messages) - : (Flag::f_change_info | Flag::f_post_messages | Flag::f_edit_messages | Flag::f_delete_messages | Flag::f_invite_users | Flag::f_invite_link); - return MTP_channelAdminRights(MTP_flags(defaultRights)); + ? (Flag::f_change_info | Flag::f_delete_messages | Flag::f_ban_users | Flag::f_invite_users | Flag::f_pin_messages) + : (Flag::f_change_info | Flag::f_post_messages | Flag::f_edit_messages | Flag::f_delete_messages | Flag::f_invite_users); + return MTP_chatAdminRights(MTP_flags(defaultRights)); } void EditAdminBox::prepare() { EditParticipantBox::prepare(); - auto hadRights = _oldRights.c_channelAdminRights().vflags.v; + auto hadRights = _oldRights.c_chatAdminRights().vflags.v; setTitle(langFactory(hadRights ? lng_rights_edit_admin : lng_channel_add_admin)); addControl(object_ptr(this), QMargins()); @@ -231,7 +226,7 @@ void EditAdminBox::prepare() { const auto filterByMyRights = canSave() && !hadRights && !channel()->amCreator(); - const auto prepareFlags = prepareRights.c_channelAdminRights().vflags.v + const auto prepareFlags = prepareRights.c_chatAdminRights().vflags.v & (filterByMyRights ? channel()->adminRights() : ~Flag(0)); auto addCheckbox = [&](Flags flags, const QString &text) { const auto checked = (prepareFlags & flags) != 0; @@ -256,7 +251,7 @@ void EditAdminBox::prepare() { addCheckbox(Flag::f_change_info, lang(lng_rights_group_info)); addCheckbox(Flag::f_delete_messages, lang(lng_rights_group_delete)); addCheckbox(Flag::f_ban_users, lang(lng_rights_group_ban)); - addCheckbox(Flag::f_invite_users | Flag::f_invite_link, lang(channel()->anyoneCanAddMembers() ? lng_rights_group_invite_link : lng_rights_group_invite)); + addCheckbox(Flag::f_invite_users, lang(channel()->anyoneCanAddMembers() ? lng_rights_group_invite_link : lng_rights_group_invite)); addCheckbox(Flag::f_pin_messages, lang(lng_rights_group_pin)); addCheckbox(Flag::f_add_admins, lang(lng_rights_add_admins)); } else { @@ -264,7 +259,7 @@ void EditAdminBox::prepare() { addCheckbox(Flag::f_post_messages, lang(lng_rights_channel_post)); addCheckbox(Flag::f_edit_messages, lang(lng_rights_channel_edit)); addCheckbox(Flag::f_delete_messages, lang(lng_rights_channel_delete)); - addCheckbox(Flag::f_invite_users | Flag::f_invite_link, lang(lng_rights_group_invite)); + addCheckbox(Flag::f_invite_users, lang(lng_rights_group_invite)); addCheckbox(Flag::f_add_admins, lang(lng_rights_add_admins)); } @@ -286,7 +281,7 @@ void EditAdminBox::prepare() { if (!_saveCallback) { return; } - auto newFlags = MTPDchannelAdminRights::Flags(0); + auto newFlags = MTPDchatAdminRights::Flags(0); for (auto &&checkbox : _checkboxes) { if (checkbox.second->checked()) { newFlags |= checkbox.first; @@ -298,7 +293,7 @@ void EditAdminBox::prepare() { // Leave only rights that we have so we could save them. newFlags &= channel()->adminRights(); } - _saveCallback(_oldRights, MTP_channelAdminRights(MTP_flags(newFlags))); + _saveCallback(_oldRights, MTP_chatAdminRights(MTP_flags(newFlags))); }); addButton(langFactory(lng_cancel), [this] { closeBox(); }); } else { @@ -332,7 +327,7 @@ void EditAdminBox::refreshAboutAddAdminsText() { resizeToContent(); } -EditRestrictedBox::EditRestrictedBox(QWidget*, not_null channel, not_null user, bool hasAdminRights, const MTPChannelBannedRights &rights) : EditParticipantBox(nullptr, channel, user, hasAdminRights) +EditRestrictedBox::EditRestrictedBox(QWidget*, not_null channel, not_null user, bool hasAdminRights, const MTPChatBannedRights &rights) : EditParticipantBox(nullptr, channel, user, hasAdminRights) , _oldRights(rights) { auto dependency = [this](Flag dependent, Flag dependency) { _dependencies.push_back(std::make_pair(dependent, dependency)); @@ -357,11 +352,11 @@ void EditRestrictedBox::prepare() { addControl(object_ptr(this), QMargins()); addControl(object_ptr(this, lang(lng_rights_user_restrictions_header), Ui::FlatLabel::InitType::Simple, st::rightsHeaderLabel), st::rightsHeaderMargin); - auto prepareRights = (_oldRights.c_channelBannedRights().vflags.v ? _oldRights : DefaultRights(channel())); - _until = prepareRights.c_channelBannedRights().vuntil_date.v; + auto prepareRights = (_oldRights.c_chatBannedRights().vflags.v ? _oldRights : DefaultRights(channel())); + _until = prepareRights.c_chatBannedRights().vuntil_date.v; auto addCheckbox = [&](Flags flags, const QString &text) { - auto checked = (prepareRights.c_channelBannedRights().vflags.v & flags) == 0; + auto checked = (prepareRights.c_chatBannedRights().vflags.v & flags) == 0; auto control = addControl(object_ptr(this, text, checked, st::rightsCheckbox, st::rightsToggle), st::rightsToggleMargin); control->checkedChanges( ) | rpl::start_with_next([=](bool checked) { @@ -391,7 +386,7 @@ void EditRestrictedBox::prepare() { if (!_saveCallback) { return; } - auto newFlags = MTPDchannelBannedRights::Flags(0); + auto newFlags = MTPDchatBannedRights::Flags(0); for (auto &&checkbox : _checkboxes) { if (checkbox.second->checked()) { newFlags &= ~checkbox.first; @@ -399,7 +394,7 @@ void EditRestrictedBox::prepare() { newFlags |= checkbox.first; } } - _saveCallback(_oldRights, MTP_channelBannedRights(MTP_flags(newFlags), MTP_int(getRealUntilValue()))); + _saveCallback(_oldRights, MTP_chatBannedRights(MTP_flags(newFlags), MTP_int(getRealUntilValue()))); }); addButton(langFactory(lng_cancel), [this] { closeBox(); }); } else { @@ -418,9 +413,9 @@ void EditRestrictedBox::applyDependencies(QPointer changed) { ApplyDependencies(_checkboxes, _dependencies, changed); } -MTPChannelBannedRights EditRestrictedBox::DefaultRights(not_null channel) { +MTPChatBannedRights EditRestrictedBox::DefaultRights(not_null channel) { auto defaultRights = Flag::f_send_messages | Flag::f_send_media | Flag::f_embed_links | Flag::f_send_stickers | Flag::f_send_gifs | Flag::f_send_games | Flag::f_send_inline; - return MTP_channelBannedRights(MTP_flags(defaultRights), MTP_int(0)); + return MTP_chatBannedRights(MTP_flags(defaultRights), MTP_int(0)); } void EditRestrictedBox::showRestrictUntil() { @@ -489,7 +484,7 @@ void EditRestrictedBox::createUntilVariants() { } }; auto addCurrentVariant = [this, addCustomVariant](TimeId from, TimeId to) { - auto oldUntil = _oldRights.c_channelBannedRights().vuntil_date.v; + auto oldUntil = _oldRights.c_chatBannedRights().vuntil_date.v; if (oldUntil < _until) { addCustomVariant(oldUntil, from, to); } diff --git a/Telegram/SourceFiles/boxes/edit_participant_box.h b/Telegram/SourceFiles/boxes/edit_participant_box.h index f4fd325ffc..0700e4da76 100644 --- a/Telegram/SourceFiles/boxes/edit_participant_box.h +++ b/Telegram/SourceFiles/boxes/edit_participant_box.h @@ -56,9 +56,9 @@ private: class EditAdminBox : public EditParticipantBox { public: - EditAdminBox(QWidget*, not_null channel, not_null user, const MTPChannelAdminRights &rights); + EditAdminBox(QWidget*, not_null channel, not_null user, const MTPChatAdminRights &rights); - void setSaveCallback(Fn callback) { + void setSaveCallback(Fn callback) { _saveCallback = std::move(callback); } @@ -66,10 +66,10 @@ protected: void prepare() override; private: - using Flag = MTPDchannelAdminRights::Flag; - using Flags = MTPDchannelAdminRights::Flags; + using Flag = MTPDchatAdminRights::Flag; + using Flags = MTPDchatAdminRights::Flags; - static MTPChannelAdminRights DefaultRights(not_null channel); + static MTPChatAdminRights DefaultRights(not_null channel); bool canSave() const { return !!_saveCallback; @@ -77,9 +77,9 @@ private: void applyDependencies(QPointer changed); void refreshAboutAddAdminsText(); - const MTPChannelAdminRights _oldRights; + const MTPChatAdminRights _oldRights; std::vector> _dependencies; - Fn _saveCallback; + Fn _saveCallback; std::map> _checkboxes; QPointer _aboutAddAdmins; @@ -91,9 +91,9 @@ private: class EditRestrictedBox : public EditParticipantBox { public: - EditRestrictedBox(QWidget*, not_null channel, not_null user, bool hasAdminRights, const MTPChannelBannedRights &rights); + EditRestrictedBox(QWidget*, not_null channel, not_null user, bool hasAdminRights, const MTPChatBannedRights &rights); - void setSaveCallback(Fn callback) { + void setSaveCallback(Fn callback) { _saveCallback = std::move(callback); } @@ -101,10 +101,10 @@ protected: void prepare() override; private: - using Flag = MTPDchannelBannedRights::Flag; - using Flags = MTPDchannelBannedRights::Flags; + using Flag = MTPDchatBannedRights::Flag; + using Flags = MTPDchatBannedRights::Flags; - static MTPChannelBannedRights DefaultRights(not_null channel); + static MTPChatBannedRights DefaultRights(not_null channel); bool canSave() const { return !!_saveCallback; @@ -120,10 +120,10 @@ private: void createUntilVariants(); TimeId getRealUntilValue() const; - const MTPChannelBannedRights _oldRights; + const MTPChatBannedRights _oldRights; TimeId _until = 0; std::vector> _dependencies; - Fn _saveCallback; + Fn _saveCallback; std::map> _checkboxes; diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 54285869da..ace3760855 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -684,8 +684,9 @@ void EditChatAdminsBoxController::prepare() { } void EditChatAdminsBoxController::createAllAdminsCheckbox() { + // #TODO groups auto labelWidth = st::boxWideWidth - st::contactsPadding.left() - st::contactsPadding.right(); - auto checkbox = object_ptr(nullptr, lang(lng_chat_all_members_admins), !_chat->adminsEnabled(), st::defaultBoxCheckbox); + auto checkbox = object_ptr(nullptr, lang(lng_chat_all_members_admins), /*!_chat->adminsEnabled()*/false, st::defaultBoxCheckbox); checkbox->setLabelText(true, st::defaultTextStyle, lang(lng_chat_about_all_admins), _defaultOptions, labelWidth); checkbox->setLabelText(false, st::defaultTextStyle, lang(lng_chat_about_admins), _defaultOptions, labelWidth); _allAdmins = checkbox; @@ -844,14 +845,15 @@ bool AddBotToGroupBoxController::needToCreateRow(not_null peer) const return false; } if (auto group = peer->asMegagroup()) { - if (group->restricted(ChannelRestriction::f_send_games)) { + if (group->restricted(ChatRestriction::f_send_games)) { return false; } } return true; } if (auto chat = peer->asChat()) { - if (chat->canEdit()) { + // #TODO groups + if (chat->canEditInformation()) { return true; } } else if (auto group = peer->asMegagroup()) { diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index 5ec4f2c255..6e33c23daa 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -237,7 +237,7 @@ object_ptr Controller::createPhotoAndTitleEdit() { if (auto channel = _peer->asChannel()) { return channel->canEditInformation(); } else if (auto chat = _peer->asChat()) { - return chat->canEdit(); + return chat->canEditInformation(); } return false; }(); @@ -1305,8 +1305,8 @@ void Controller::saveDescription() { channel->setAbout(*_savingData.description); continueSave(); }; - request(MTPchannels_EditAbout( - channel->inputChannel, + request(MTPmessages_EditChatAbout( + channel->input, MTP_string(*_savingData.description) )).done([=](const MTPBool &result) { successCallback(); @@ -1355,19 +1355,20 @@ void Controller::saveInvites() { || *_savingData.everyoneInvites == channel->anyoneCanAddMembers()) { return continueSave(); } - request(MTPchannels_ToggleInvites( - channel->inputChannel, - MTP_bool(*_savingData.everyoneInvites) - )).done([this](const MTPUpdates &result) { - Auth().api().applyUpdates(result); - continueSave(); - }).fail([this](const RPCError &error) { - if (error.type() == qstr("CHAT_NOT_MODIFIED")) { - continueSave(); - } else { - cancelSave(); - } - }).send(); + // #TODO groups + //request(MTPchannels_ToggleInvites( + // channel->inputChannel, + // MTP_bool(*_savingData.everyoneInvites) + //)).done([this](const MTPUpdates &result) { + // Auth().api().applyUpdates(result); + // continueSave(); + //}).fail([this](const RPCError &error) { + // if (error.type() == qstr("CHAT_NOT_MODIFIED")) { + // continueSave(); + // } else { + // cancelSave(); + // } + //}).send(); } void Controller::saveSignatures() { diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp index 344636868c..ce0437e83d 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp +++ b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp @@ -672,8 +672,8 @@ void TabbedSelector::setCurrentPeer(PeerData *peer) { void TabbedSelector::checkRestrictedPeer() { if (auto megagroup = _currentPeer ? _currentPeer->asMegagroup() : nullptr) { - auto restricted = (_currentTabType == SelectorTab::Stickers) ? megagroup->restricted(ChannelRestriction::f_send_stickers) : - (_currentTabType == SelectorTab::Gifs) ? megagroup->restricted(ChannelRestriction::f_send_gifs) : false; + auto restricted = (_currentTabType == SelectorTab::Stickers) ? megagroup->restricted(ChatRestriction::f_send_stickers) : + (_currentTabType == SelectorTab::Gifs) ? megagroup->restricted(ChatRestriction::f_send_gifs) : false; if (restricted) { if (!_restrictedLabel) { auto text = (_currentTabType == SelectorTab::Stickers) diff --git a/Telegram/SourceFiles/data/data_file_origin.cpp b/Telegram/SourceFiles/data/data_file_origin.cpp index e41ab9d3b8..81217e1e9f 100644 --- a/Telegram/SourceFiles/data/data_file_origin.cpp +++ b/Telegram/SourceFiles/data/data_file_origin.cpp @@ -43,7 +43,9 @@ struct FileReferenceAccumulator { } void push(const MTPDocument &data) { data.match([&](const MTPDdocument &data) { - push(data.vthumb); + for (const auto &thumb : data.vthumbs.v) { + push(thumb); + } result.emplace( DocumentFileLocationId(data.vid.v), data.vfile_reference.v); diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index ca1161d780..e79252c3ef 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -326,7 +326,7 @@ bool MediaPhoto::allowsEditCaption() const { QString MediaPhoto::errorTextForForward( not_null channel) const { - if (channel->restricted(ChannelRestriction::f_send_media)) { + if (channel->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); } return QString(); @@ -652,20 +652,20 @@ bool MediaFile::forwardedBecomesUnread() const { QString MediaFile::errorTextForForward( not_null channel) const { if (const auto sticker = _document->sticker()) { - if (channel->restricted(ChannelRestriction::f_send_stickers)) { + if (channel->restricted(ChatRestriction::f_send_stickers)) { return lang(lng_restricted_send_stickers); } } else if (_document->isAnimation()) { if (_document->isVideoMessage()) { - if (channel->restricted(ChannelRestriction::f_send_media)) { + if (channel->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); } } else { - if (channel->restricted(ChannelRestriction::f_send_gifs)) { + if (channel->restricted(ChatRestriction::f_send_gifs)) { return lang(lng_restricted_send_gifs); } } - } else if (channel->restricted(ChannelRestriction::f_send_media)) { + } else if (channel->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); } return QString(); @@ -1117,7 +1117,7 @@ TextWithEntities MediaGame::clipboardText() const { QString MediaGame::errorTextForForward( not_null channel) const { - if (channel->restricted(ChannelRestriction::f_send_games)) { + if (channel->restricted(ChatRestriction::f_send_games)) { return lang(lng_restricted_send_inline); } return QString(); diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 0cf7866b8b..4c8b37db65 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -343,14 +343,16 @@ bool PeerData::canPinMessages() const { if (const auto user = asUser()) { return user->fullFlags() & MTPDuserFull::Flag::f_can_pin_message; } else if (const auto chat = asChat()) { - return chat->adminsEnabled() ? chat->amAdmin() : chat->amIn(); + // #TODO groups + return !chat->isDeactivated() + /*&& ((chat->adminRights() & ChatAdminRight::f_pin_messages) + || chat->amCreator())*/; } else if (const auto channel = asChannel()) { - using AdminRight = ChannelData::AdminRight; if (channel->isMegagroup()) { - return (channel->adminRights() & AdminRight::f_pin_messages) + return (channel->adminRights() & ChatAdminRight::f_pin_messages) || channel->amCreator(); } - return (channel->adminRights() & AdminRight::f_edit_messages) + return (channel->adminRights() & ChatAdminRight::f_edit_messages) || channel->amCreator(); } Unexpected("Peer type in PeerData::canPinMessages."); @@ -652,18 +654,25 @@ void ChatData::setPhoto(PhotoId photoId, const MTPChatPhoto &photo) { } } +bool ChatData::canEditInformation() const { + // #TODO groups + return !isDeactivated() + /*&& ((adminRights() & AdminRight::f_change_info) || amCreator())*/; +} + void ChatData::setName(const QString &newName) { updateNameDelayed(newName.isEmpty() ? name : newName, QString(), QString()); } void ChatData::invalidateParticipants() { - auto wasCanEdit = canEdit(); + // #TODO groups + auto wasCanEdit = canEditInformation(); participants.clear(); admins.clear(); - removeFlags(MTPDchat::Flag::f_admin); + //removeFlags(MTPDchat::Flag::f_admin); invitedByMe.clear(); botStatus = 0; - if (wasCanEdit != canEdit()) { + if (wasCanEdit != canEditInformation()) { Notify::peerUpdatedDelayed(this, Notify::PeerUpdate::Flag::ChatCanEdit); } Notify::peerUpdatedDelayed(this, Notify::PeerUpdate::Flag::MembersChanged | Notify::PeerUpdate::Flag::AdminsChanged); @@ -777,13 +786,13 @@ void ChannelData::setKickedCount(int newKickedCount) { } } -MTPChannelBannedRights ChannelData::KickedRestrictedRights() { - using Flag = MTPDchannelBannedRights::Flag; +MTPChatBannedRights ChannelData::KickedRestrictedRights() { + using Flag = MTPDchatBannedRights::Flag; auto flags = Flag::f_view_messages | Flag::f_send_messages | Flag::f_send_media | Flag::f_embed_links | Flag::f_send_stickers | Flag::f_send_gifs | Flag::f_send_games | Flag::f_send_inline; - return MTP_channelBannedRights(MTP_flags(flags), MTP_int(std::numeric_limits::max())); + return MTP_chatBannedRights(MTP_flags(flags), MTP_int(std::numeric_limits::max())); } -void ChannelData::applyEditAdmin(not_null user, const MTPChannelAdminRights &oldRights, const MTPChannelAdminRights &newRights) { +void ChannelData::applyEditAdmin(not_null user, const MTPChatAdminRights &oldRights, const MTPChatAdminRights &newRights) { auto flags = Notify::PeerUpdate::Flag::AdminsChanged | Notify::PeerUpdate::Flag::None; if (mgInfo) { // If rights are empty - still add participant? TODO check @@ -807,7 +816,7 @@ void ChannelData::applyEditAdmin(not_null user, const MTPChannelAdmin auto userId = peerToUser(user->id); auto it = mgInfo->lastAdmins.find(user); - if (newRights.c_channelAdminRights().vflags.v != 0) { + if (newRights.c_chatAdminRights().vflags.v != 0) { auto lastAdmin = MegagroupInfo::Admin { newRights }; lastAdmin.canEdit = true; if (it == mgInfo->lastAdmins.cend()) { @@ -827,7 +836,7 @@ void ChannelData::applyEditAdmin(not_null user, const MTPChannelAdmin Data::ChannelAdminChanges(this).feed(userId, false); } } - if (oldRights.c_channelAdminRights().vflags.v && !newRights.c_channelAdminRights().vflags.v) { + if (oldRights.c_chatAdminRights().vflags.v && !newRights.c_chatAdminRights().vflags.v) { // We removed an admin. if (adminsCount() > 1) { setAdminsCount(adminsCount() - 1); @@ -836,7 +845,7 @@ void ChannelData::applyEditAdmin(not_null user, const MTPChannelAdmin // Removing bot admin removes it from channel. setMembersCount(membersCount() - 1); } - } else if (!oldRights.c_channelAdminRights().vflags.v && newRights.c_channelAdminRights().vflags.v) { + } else if (!oldRights.c_chatAdminRights().vflags.v && newRights.c_chatAdminRights().vflags.v) { // We added an admin. setAdminsCount(adminsCount() + 1); updateFullForced(); @@ -844,10 +853,10 @@ void ChannelData::applyEditAdmin(not_null user, const MTPChannelAdmin Notify::peerUpdatedDelayed(this, flags); } -void ChannelData::applyEditBanned(not_null user, const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { +void ChannelData::applyEditBanned(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { auto flags = Notify::PeerUpdate::Flag::BannedUsersChanged | Notify::PeerUpdate::Flag::None; - auto isKicked = (newRights.c_channelBannedRights().vflags.v & MTPDchannelBannedRights::Flag::f_view_messages); - auto isRestricted = !isKicked && (newRights.c_channelBannedRights().vflags.v != 0); + auto isKicked = (newRights.c_chatBannedRights().vflags.v & MTPDchatBannedRights::Flag::f_view_messages); + auto isRestricted = !isKicked && (newRights.c_chatBannedRights().vflags.v != 0); if (mgInfo) { // If rights are empty - still remove admin? TODO check if (mgInfo->lastAdmins.contains(user)) { @@ -968,7 +977,8 @@ bool ChannelData::canDeleteMessages() const { } bool ChannelData::anyoneCanAddMembers() const { - return (flags() & MTPDchannel::Flag::f_democracy); + // #TODO groups + return false;// (flags() & MTPDchannel::Flag::f_democracy); } bool ChannelData::hiddenPreHistory() const { @@ -1084,11 +1094,11 @@ bool ChannelData::canRestrictUser(not_null user) const { return adminRights() & AdminRight::f_ban_users; } -void ChannelData::setAdminRights(const MTPChannelAdminRights &rights) { - if (rights.c_channelAdminRights().vflags.v == adminRights()) { +void ChannelData::setAdminRights(const MTPChatAdminRights &rights) { + if (rights.c_chatAdminRights().vflags.v == adminRights()) { return; } - _adminRights.set(rights.c_channelAdminRights().vflags.v); + _adminRights.set(rights.c_chatAdminRights().vflags.v); if (isMegagroup()) { const auto self = session().user(); if (hasAdminRights()) { @@ -1108,13 +1118,13 @@ void ChannelData::setAdminRights(const MTPChannelAdminRights &rights) { Notify::peerUpdatedDelayed(this, UpdateFlag::ChannelRightsChanged | UpdateFlag::AdminsChanged | UpdateFlag::BannedUsersChanged); } -void ChannelData::setRestrictedRights(const MTPChannelBannedRights &rights) { - if (rights.c_channelBannedRights().vflags.v == restrictions() - && rights.c_channelBannedRights().vuntil_date.v == _restrictedUntill) { +void ChannelData::setRestrictedRights(const MTPChatBannedRights &rights) { + if (rights.c_chatBannedRights().vflags.v == restrictions() + && rights.c_chatBannedRights().vuntil_date.v == _restrictedUntill) { return; } - _restrictedUntill = rights.c_channelBannedRights().vuntil_date.v; - _restrictions.set(rights.c_channelBannedRights().vflags.v); + _restrictedUntill = rights.c_chatBannedRights().vuntil_date.v; + _restrictions.set(rights.c_chatBannedRights().vflags.v); if (isMegagroup()) { const auto self = session().user(); if (hasRestrictions()) { diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index 2e3f4ef198..b4817fe56f 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -495,16 +495,21 @@ private: }; +using ChatAdminRight = MTPDchatAdminRights::Flag; +using ChatRestriction = MTPDchatBannedRights::Flag; +using ChatAdminRights = MTPDchatAdminRights::Flags; +using ChatRestrictions = MTPDchatBannedRights::Flags; + class ChatData : public PeerData { public: static constexpr auto kEssentialFlags = 0 | MTPDchat::Flag::f_creator | MTPDchat::Flag::f_kicked | MTPDchat::Flag::f_left - | MTPDchat::Flag::f_admins_enabled - | MTPDchat::Flag::f_admin | MTPDchat::Flag::f_deactivated - | MTPDchat::Flag::f_migrated_to; + | MTPDchat::Flag::f_migrated_to + | MTPDchat::Flag::f_admin_rights + | MTPDchat::Flag::f_default_banned_rights; using Flags = Data::Flags< MTPDchat::Flags, kEssentialFlags>; @@ -552,11 +557,7 @@ public: bool amIn() const { return !isForbidden() && !haveLeft() && !wasKicked(); } - bool canEdit() const { - return !isDeactivated() - && (amCreator() - || (adminsEnabled() ? amAdmin() : amIn())); - } + bool canEditInformation() const; bool canWrite() const { // Duplicated in Data::CanWriteValue(). return !isDeactivated() && amIn(); @@ -567,15 +568,9 @@ public: bool wasKicked() const { return flags() & MTPDchat::Flag::f_kicked; } - bool adminsEnabled() const { - return flags() & MTPDchat::Flag::f_admins_enabled; - } bool amCreator() const { return flags() & MTPDchat::Flag::f_creator; } - bool amAdmin() const { - return (flags() & MTPDchat::Flag::f_admin) && adminsEnabled(); - } bool isDeactivated() const { return flags() & MTPDchat::Flag::f_deactivated; } @@ -687,21 +682,21 @@ private: struct MegagroupInfo { struct Admin { - explicit Admin(MTPChannelAdminRights rights) + explicit Admin(MTPChatAdminRights rights) : rights(rights) { } - Admin(MTPChannelAdminRights rights, bool canEdit) + Admin(MTPChatAdminRights rights, bool canEdit) : rights(rights) , canEdit(canEdit) { } - MTPChannelAdminRights rights; + MTPChatAdminRights rights; bool canEdit = false; }; struct Restricted { - explicit Restricted(MTPChannelBannedRights rights) + explicit Restricted(MTPChatBannedRights rights) : rights(rights) { } - MTPChannelBannedRights rights; + MTPChatBannedRights rights; }; std::deque> lastParticipants; base::flat_map, Admin> lastAdmins; @@ -728,11 +723,6 @@ struct MegagroupInfo { }; -using ChannelAdminRight = MTPDchannelAdminRights::Flag; -using ChannelRestriction = MTPDchannelBannedRights::Flag; -using ChannelAdminRights = MTPDchannelAdminRights::Flags; -using ChannelRestrictions = MTPDchannelBannedRights::Flags; - class ChannelData : public PeerData { public: static constexpr auto kEssentialFlags = 0 @@ -742,7 +732,6 @@ public: | MTPDchannel::Flag::f_verified | MTPDchannel::Flag::f_megagroup | MTPDchannel::Flag::f_restricted - | MTPDchannel::Flag::f_democracy | MTPDchannel::Flag::f_signatures | MTPDchannel::Flag::f_username; using Flags = Data::Flags< @@ -844,19 +833,19 @@ public: return flags() & MTPDchannel::Flag::f_verified; } - static MTPChannelBannedRights KickedRestrictedRights(); + static MTPChatBannedRights KickedRestrictedRights(); static constexpr auto kRestrictUntilForever = TimeId(INT_MAX); static bool IsRestrictedForever(TimeId until) { return !until || (until == kRestrictUntilForever); } void applyEditAdmin( not_null user, - const MTPChannelAdminRights &oldRights, - const MTPChannelAdminRights &newRights); + const MTPChatAdminRights &oldRights, + const MTPChatAdminRights &newRights); void applyEditBanned( not_null user, - const MTPChannelBannedRights &oldRights, - const MTPChannelBannedRights &newRights); + const MTPChatBannedRights &oldRights, + const MTPChatBannedRights &newRights); bool isGroupAdmin(not_null user) const; @@ -889,10 +878,10 @@ public: return flags() & MTPDchannel::Flag::f_creator; } - using AdminRight = ChannelAdminRight; - using Restriction = ChannelRestriction; - using AdminRights = ChannelAdminRights; - using Restrictions = ChannelRestrictions; + using AdminRight = ChatAdminRight; + using Restriction = ChatRestriction; + using AdminRights = ChatAdminRights; + using Restrictions = ChatRestrictions; using AdminRightFlags = Data::Flags; using RestrictionFlags = Data::Flags; auto adminRights() const { @@ -901,7 +890,7 @@ public: auto adminRightsValue() const { return _adminRights.value(); } - void setAdminRights(const MTPChannelAdminRights &rights); + void setAdminRights(const MTPChatAdminRights &rights); bool hasAdminRights() const { return (adminRights() != 0); } @@ -917,7 +906,7 @@ public: TimeId restrictedUntil() const { return _restrictedUntill; } - void setRestrictedRights(const MTPChannelBannedRights &rights); + void setRestrictedRights(const MTPChatBannedRights &rights); bool hasRestrictions() const { return (restrictions() != 0); } @@ -952,7 +941,7 @@ public: return _inviteLink; } bool canHaveInviteLink() const { - return (adminRights() & AdminRight::f_invite_link) + return (adminRights() & AdminRight::f_invite_users) || amCreator(); } diff --git a/Telegram/SourceFiles/data/data_peer_values.cpp b/Telegram/SourceFiles/data/data_peer_values.cpp index 4bee82f7f2..f4a399442c 100644 --- a/Telegram/SourceFiles/data/data_peer_values.cpp +++ b/Telegram/SourceFiles/data/data_peer_values.cpp @@ -76,13 +76,13 @@ inline auto AdminRightsValue(not_null channel) { inline auto AdminRightsValue( not_null channel, - MTPDchannelAdminRights::Flags mask) { + MTPDchatAdminRights::Flags mask) { return FlagsValueWithMask(AdminRightsValue(channel), mask); } inline auto AdminRightValue( not_null channel, - MTPDchannelAdminRights::Flag flag) { + MTPDchatAdminRights::Flag flag) { return SingleFlagValue(AdminRightsValue(channel), flag); } @@ -92,13 +92,13 @@ inline auto RestrictionsValue(not_null channel) { inline auto RestrictionsValue( not_null channel, - MTPDchannelBannedRights::Flags mask) { + MTPDchatBannedRights::Flags mask) { return FlagsValueWithMask(RestrictionsValue(channel), mask); } inline auto RestrictionValue( not_null channel, - MTPDchannelBannedRights::Flag flag) { + MTPDchatBannedRights::Flag flag) { return SingleFlagValue(RestrictionsValue(channel), flag); } @@ -141,10 +141,10 @@ rpl::producer CanWriteValue(ChannelData *channel) { PeerFlagsValue(channel, mask), AdminRightValue( channel, - MTPDchannelAdminRights::Flag::f_post_messages), + MTPDchatAdminRights::Flag::f_post_messages), RestrictionValue( channel, - MTPDchannelBannedRights::Flag::f_send_messages), + MTPDchatBannedRights::Flag::f_send_messages), []( MTPDchannel::Flags flags, bool postMessagesRight, diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 1854284477..44a862b46c 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -117,6 +117,26 @@ QString ExtractRestrictionReason(const QString &restriction) { return QString(); } +MTPPhotoSize FindDocumentThumb(const MTPDdocument &data) { + const auto area = [](const MTPPhotoSize &size) { + static constexpr auto kInvalid = std::numeric_limits::max(); + return size.match([](const MTPDphotoSizeEmpty &) { + return kInvalid; + }, [](const MTPDphotoStrippedSize &) { + return kInvalid; + }, [](const auto &data) { + return (data.vw.v >= 90 || data.vh.v >= 90) + ? (data.vw.v * data.vh.v) + : kInvalid; + }); + }; + const auto &thumbs = data.vthumbs.v; + const auto i = ranges::max_element(thumbs, std::greater<>(), area); + return (i != thumbs.end()) + ? (*i) + : MTPPhotoSize(MTP_photoSizeEmpty(MTP_string(""))); +} + } // namespace Session::Session(not_null session) @@ -407,7 +427,8 @@ not_null Session::chat(const MTPChat &data) { data.match([&](const MTPDchat &data) { const auto chat = result->asChat(); - const auto canEdit = chat->canEdit(); + // #TODO groups + const auto canEdit = chat->canEditInformation(); if (chat->version < data.vversion.v) { chat->version = data.vversion.v; @@ -458,19 +479,22 @@ not_null Session::chat(const MTPChat &data) { }, [](const MTPDinputChannelEmpty &) { }); - if (!(chat->flags() & MTPDchat::Flag::f_admins_enabled) - && (data.vflags.v & MTPDchat::Flag::f_admins_enabled)) { - chat->invalidateParticipants(); - } + // #TODO groups + //if (!(chat->flags() & MTPDchat::Flag::f_admins_enabled) + // && (data.vflags.v & MTPDchat::Flag::f_admins_enabled)) { + // chat->invalidateParticipants(); + //} chat->setFlags(data.vflags.v); chat->count = data.vparticipants_count.v; - if (canEdit != chat->canEdit()) { + // #TODO groups + if (canEdit != chat->canEditInformation()) { update.flags |= UpdateFlag::ChatCanEdit; } }, [&](const MTPDchatForbidden &data) { const auto chat = result->asChat(); - const auto canEdit = chat->canEdit(); + // #TODO groups + const auto canEdit = chat->canEditInformation(); chat->input = MTP_inputPeerChat(data.vid); chat->setName(qs(data.vtitle)); @@ -479,7 +503,8 @@ not_null Session::chat(const MTPChat &data) { chat->count = -1; chat->invalidateParticipants(); chat->setFlags(MTPDchat_ClientFlag::f_forbidden | 0); - if (canEdit != chat->canEdit()) { + // #TODO groups + if (canEdit != chat->canEditInformation()) { update.flags |= UpdateFlag::ChatCanEdit; } }, [&](const MTPDchannel &data) { @@ -510,19 +535,18 @@ not_null Session::chat(const MTPChat &data) { | MTPDchannel::Flag::f_broadcast | MTPDchannel::Flag::f_verified | MTPDchannel::Flag::f_megagroup - | MTPDchannel::Flag::f_democracy | MTPDchannel_ClientFlag::f_forbidden; channel->setFlags((channel->flags() & ~mask) | (data.vflags.v & mask)); } else { if (data.has_admin_rights()) { channel->setAdminRights(data.vadmin_rights); } else if (channel->hasAdminRights()) { - channel->setAdminRights(MTP_channelAdminRights(MTP_flags(0))); + channel->setAdminRights(MTP_chatAdminRights(MTP_flags(0))); } if (data.has_banned_rights()) { channel->setRestrictedRights(data.vbanned_rights); } else if (channel->hasRestrictions()) { - channel->setRestrictedRights(MTP_channelBannedRights(MTP_flags(0), MTP_int(0))); + channel->setRestrictedRights(MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } channel->inputChannel = MTP_inputChannel(data.vid, data.vaccess_hash); channel->access = data.vaccess_hash.v; @@ -572,10 +596,10 @@ not_null Session::chat(const MTPChat &data) { channel->setFlags((channel->flags() & ~mask) | (mtpCastFlags(data.vflags) & mask) | MTPDchannel_ClientFlag::f_forbidden); if (channel->hasAdminRights()) { - channel->setAdminRights(MTP_channelAdminRights(MTP_flags(0))); + channel->setAdminRights(MTP_chatAdminRights(MTP_flags(0))); } if (channel->hasRestrictions()) { - channel->setRestrictedRights(MTP_channelBannedRights(MTP_flags(0), MTP_int(0))); + channel->setRestrictedRights(MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } channel->setName(qs(data.vtitle), QString()); @@ -1992,6 +2016,7 @@ void Session::documentApplyFields( void Session::documentApplyFields( not_null document, const MTPDdocument &data) { + const auto thumb = FindDocumentThumb(data); documentApplyFields( document, data.vaccess_hash.v, @@ -1999,10 +2024,10 @@ void Session::documentApplyFields( data.vdate.v, data.vattributes.v, qs(data.vmime_type), - App::image(data.vthumb), + App::image(thumb), data.vdc_id.v, data.vsize.v, - StorageImageLocation::FromMTP(data.vthumb)); + StorageImageLocation::FromMTP(thumb)); } void Session::documentApplyFields( @@ -3007,48 +3032,14 @@ void Session::setWallpapers(const QVector &data) { }); for (const auto &paper : data) { paper.match([&](const MTPDwallPaper &paper) { - const MTPPhotoSize *thumb = nullptr; - const MTPPhotoSize *full = nullptr; - auto thumbLevel = -1; - auto fullLevel = -1; - for (const auto &photoSize : paper.vsizes.v) { - auto size = char(0); - auto w = 0; - auto h = 0; - photoSize.match([](const MTPDphotoSizeEmpty &) { - LOG(("API Error: photoSizeEmpty in wallpapers.")); - }, [](const MTPDphotoStrippedSize &) { - LOG(("API Error: photoStrippedSize in wallpapers.")); - }, [&](const auto &photoSize) { - if (photoSize.vtype.v.size()) { - size = photoSize.vtype.v[0]; - } - w = photoSize.vw.v; - h = photoSize.vh.v; - }); - if (!size || !w || !h) { - continue; - } - - const auto newThumbLevel = qAbs((st::backgroundSize.width() * cIntRetinaFactor()) - w); - const auto newFullLevel = qAbs(2560 - w); - if (thumbLevel < 0 || newThumbLevel < thumbLevel) { - thumbLevel = newThumbLevel; - thumb = &photoSize; - } - if (fullLevel < 0 || newFullLevel < fullLevel) { - fullLevel = newFullLevel; - full = &photoSize; - } - } - if (thumb && full) { + const auto document = Auth().data().document(paper.vdocument); + if (document->thumb) { _wallpapers.push_back({ - paper.vid.v ? paper.vid.v : INT_MAX, - App::image(*thumb), - App::image(*full) + paper.vid.v ? int32(paper.vid.v) : INT_MAX, + document->thumb, + document->thumb, }); } - }, [](const MTPDwallPaperSolid &) { }); } } diff --git a/Telegram/SourceFiles/export/data/export_data_types.cpp b/Telegram/SourceFiles/export/data/export_data_types.cpp index 62c5c466ed..3dc7b4e878 100644 --- a/Telegram/SourceFiles/export/data/export_data_types.cpp +++ b/Telegram/SourceFiles/export/data/export_data_types.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include #include +#include #include #include #include @@ -405,6 +406,43 @@ QString DocumentFolder(const Document &data) { return "files"; } +Image ParseDocumentThumb( + const QVector &thumbs, + const QString &documentPath) { + const auto area = [](const MTPPhotoSize &size) { + return size.match([](const MTPDphotoSizeEmpty &) { + return 0; + }, [](const MTPDphotoStrippedSize &) { + return 0; + }, [](const auto &data) { + return data.vw.v * data.vh.v; + }); + }; + const auto i = ranges::max_element(thumbs, ranges::less(), area); + if (i == thumbs.end()) { + return Image(); + } + return i->match([](const MTPDphotoSizeEmpty &) { + return Image(); + }, [](const MTPDphotoStrippedSize &) { + return Image(); + }, [&](const auto &data) { + auto result = Image(); + result.width = data.vw.v; + result.height = data.vh.v; + result.file.location = ParseLocation(data.vlocation); + if constexpr (MTPDphotoCachedSize::Is()) { + result.file.content = data.vbytes.v; + result.file.size = result.file.content.size(); + } else { + result.file.content = QByteArray(); + result.file.size = data.vsize.v; + } + result.file.suggestedPath = documentPath + "_thumb.jpg"; + return result; + }); +} + Document ParseDocument( ParseMediaContext &context, const MTPDocument &data, @@ -423,30 +461,13 @@ Document ParseDocument( data.vid, data.vaccess_hash, data.vfile_reference); - const auto path = result.file.suggestedPath = suggestedFolder + result.file.suggestedPath = suggestedFolder + DocumentFolder(result) + '/' + CleanDocumentName(ComputeDocumentName(context, result, date)); - result.thumb = data.vthumb.match([](const MTPDphotoSizeEmpty &) { - return Image(); - }, [](const MTPDphotoStrippedSize &) { - // For now stripped images are used only in photos. - return Image(); - }, [&](const auto &data) { - auto result = Image(); - result.width = data.vw.v; - result.height = data.vh.v; - result.file.location = ParseLocation(data.vlocation); - if constexpr (MTPDphotoCachedSize::Is()) { - result.file.content = data.vbytes.v; - result.file.size = result.file.content.size(); - } else { - result.file.content = QByteArray(); - result.file.size = data.vsize.v; - } - result.file.suggestedPath = path + "_thumb.jpg"; - return result; - }); + result.thumb = ParseDocumentThumb( + data.vthumbs.v, + result.file.suggestedPath); }, [&](const MTPDdocumentEmpty &data) { result.id = data.vid.v; }); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index d82d07946e..9157596c82 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -1127,11 +1127,11 @@ void InnerWidget::suggestRestrictUser(not_null user) { } } _menu->addAction(lang(lng_context_restrict_user), [=] { - auto editRestrictions = [=](bool hasAdminRights, const MTPChannelBannedRights ¤tRights) { + auto editRestrictions = [=](bool hasAdminRights, const MTPChatBannedRights ¤tRights) { auto weak = QPointer(this); auto weakBox = std::make_shared>(); auto box = Box(_channel, user, hasAdminRights, currentRights); - box->setSaveCallback([user, weak, weakBox](const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { + box->setSaveCallback([user, weak, weakBox](const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { if (weak) { weak->restrictUser(user, oldRights, newRights); } @@ -1144,7 +1144,7 @@ void InnerWidget::suggestRestrictUser(not_null user) { LayerOption::KeepOther); }; if (base::contains(_admins, user)) { - editRestrictions(true, MTP_channelBannedRights(MTP_flags(0), MTP_int(0))); + editRestrictions(true, MTP_chatBannedRights(MTP_flags(0), MTP_int(0))); } else { request(MTPchannels_GetParticipant(_channel->inputChannel, user->inputUser)).done([=](const MTPchannels_ChannelParticipant &result) { Expects(result.type() == mtpc_channels_channelParticipant); @@ -1158,13 +1158,13 @@ void InnerWidget::suggestRestrictUser(not_null user) { } else { auto hasAdminRights = (type == mtpc_channelParticipantAdmin) || (type == mtpc_channelParticipantCreator); - auto bannedRights = MTP_channelBannedRights( + auto bannedRights = MTP_chatBannedRights( MTP_flags(0), MTP_int(0)); editRestrictions(hasAdminRights, bannedRights); } }).fail([=](const RPCError &error) { - auto bannedRights = MTP_channelBannedRights( + auto bannedRights = MTP_chatBannedRights( MTP_flags(0), MTP_int(0)); editRestrictions(false, bannedRights); @@ -1173,7 +1173,7 @@ void InnerWidget::suggestRestrictUser(not_null user) { }); } -void InnerWidget::restrictUser(not_null user, const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { +void InnerWidget::restrictUser(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { auto weak = QPointer(this); MTP::send(MTPchannels_EditBanned(_channel->inputChannel, user->inputUser, newRights), rpcDone([megagroup = _channel.get(), user, weak, oldRights, newRights](const MTPUpdates &result) { Auth().api().applyUpdates(result); @@ -1184,9 +1184,9 @@ void InnerWidget::restrictUser(not_null user, const MTPChannelBannedR })); } -void InnerWidget::restrictUserDone(not_null user, const MTPChannelBannedRights &rights) { - Expects(rights.type() == mtpc_channelBannedRights); - if (rights.c_channelBannedRights().vflags.v) { +void InnerWidget::restrictUserDone(not_null user, const MTPChatBannedRights &rights) { + Expects(rights.type() == mtpc_chatBannedRights); + if (rights.c_chatBannedRights().vflags.v) { _admins.erase(std::remove(_admins.begin(), _admins.end(), user), _admins.end()); _adminsCanEdit.erase(std::remove(_adminsCanEdit.begin(), _adminsCanEdit.end(), user), _adminsCanEdit.end()); } diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h index 2835e659e9..33adeca5c8 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h @@ -154,8 +154,8 @@ private: void copySelectedText(); TextWithEntities getSelectedText() const; void suggestRestrictUser(not_null user); - void restrictUser(not_null user, const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights); - void restrictUserDone(not_null user, const MTPChannelBannedRights &rights); + void restrictUser(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights); + void restrictUserDone(not_null user, const MTPChatBannedRights &rights); void requestAdmins(); void checkPreloadMore(); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp index a1b85d846d..ac53147c4d 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_item.cpp @@ -151,17 +151,16 @@ const auto CollectChanges = [](auto &phraseMap, auto plusFlags, auto minusFlags) return withPrefix(plusFlags & ~minusFlags, '+') + withPrefix(minusFlags & ~plusFlags, kMinus); }; -auto GenerateAdminChangeText(not_null channel, const TextWithEntities &user, const MTPChannelAdminRights *newRights, const MTPChannelAdminRights *prevRights) { - using Flag = MTPDchannelAdminRights::Flag; - using Flags = MTPDchannelAdminRights::Flags; +auto GenerateAdminChangeText(not_null channel, const TextWithEntities &user, const MTPChatAdminRights *newRights, const MTPChatAdminRights *prevRights) { + using Flag = MTPDchatAdminRights::Flag; + using Flags = MTPDchatAdminRights::Flags; - Expects(!newRights || newRights->type() == mtpc_channelAdminRights); - Expects(!prevRights || prevRights->type() == mtpc_channelAdminRights); - auto newFlags = newRights ? newRights->c_channelAdminRights().vflags.v : MTPDchannelAdminRights::Flags(0); - auto prevFlags = prevRights ? prevRights->c_channelAdminRights().vflags.v : MTPDchannelAdminRights::Flags(0); + Expects(!newRights || newRights->type() == mtpc_chatAdminRights); + Expects(!prevRights || prevRights->type() == mtpc_chatAdminRights); + auto newFlags = newRights ? newRights->c_chatAdminRights().vflags.v : MTPDchatAdminRights::Flags(0); + auto prevFlags = prevRights ? prevRights->c_chatAdminRights().vflags.v : MTPDchatAdminRights::Flags(0); auto result = lng_admin_log_promoted__generic(lt_user, user); - auto inviteKey = Flag::f_invite_users | Flag::f_invite_link; auto useInviteLinkPhrase = channel->isMegagroup() && channel->anyoneCanAddMembers(); auto invitePhrase = (useInviteLinkPhrase ? lng_admin_log_admin_invite_link : lng_admin_log_admin_invite_users); static auto phraseMap = std::map { @@ -170,11 +169,11 @@ auto GenerateAdminChangeText(not_null channel, const TextWithEntit { Flag::f_edit_messages, lng_admin_log_admin_edit_messages }, { Flag::f_delete_messages, lng_admin_log_admin_delete_messages }, { Flag::f_ban_users, lng_admin_log_admin_ban_users }, - { inviteKey, invitePhrase }, + { Flag::f_invite_users, invitePhrase }, { Flag::f_pin_messages, lng_admin_log_admin_pin_messages }, { Flag::f_add_admins, lng_admin_log_admin_add_admins }, }; - phraseMap[inviteKey] = invitePhrase; + phraseMap[Flag::f_invite_users] = invitePhrase; if (!channel->isMegagroup()) { // Don't display "Ban users" changes in channels. @@ -190,15 +189,15 @@ auto GenerateAdminChangeText(not_null channel, const TextWithEntit return result; }; -auto GenerateBannedChangeText(const TextWithEntities &user, const MTPChannelBannedRights *newRights, const MTPChannelBannedRights *prevRights) { - using Flag = MTPDchannelBannedRights::Flag; - using Flags = MTPDchannelBannedRights::Flags; +auto GenerateBannedChangeText(const TextWithEntities &user, const MTPChatBannedRights *newRights, const MTPChatBannedRights *prevRights) { + using Flag = MTPDchatBannedRights::Flag; + using Flags = MTPDchatBannedRights::Flags; - Expects(!newRights || newRights->type() == mtpc_channelBannedRights); - Expects(!prevRights || prevRights->type() == mtpc_channelBannedRights); - auto newFlags = newRights ? newRights->c_channelBannedRights().vflags.v : MTPDchannelBannedRights::Flags(0); - auto prevFlags = prevRights ? prevRights->c_channelBannedRights().vflags.v : MTPDchannelBannedRights::Flags(0); - auto newUntil = newRights ? newRights->c_channelBannedRights().vuntil_date.v : TimeId(0); + Expects(!newRights || newRights->type() == mtpc_chatBannedRights); + Expects(!prevRights || prevRights->type() == mtpc_chatBannedRights); + auto newFlags = newRights ? newRights->c_chatBannedRights().vflags.v : MTPDchatBannedRights::Flags(0); + auto prevFlags = prevRights ? prevRights->c_chatBannedRights().vflags.v : MTPDchatBannedRights::Flags(0); + auto newUntil = newRights ? newRights->c_chatBannedRights().vuntil_date.v : TimeId(0); auto indefinitely = ChannelData::IsRestrictedForever(newUntil); if (newFlags & Flag::f_view_messages) { return lng_admin_log_banned__generic(lt_user, user); diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index d2e4d76340..b11b38ec92 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -503,7 +503,8 @@ bool HistoryItem::canDeleteForEveryone(TimeId now) const { } if (!out()) { if (const auto chat = peer->asChat()) { - if (!chat->amCreator() && (!chat->amAdmin() || !chat->adminsEnabled())) { + // #TODO groups + if (!chat->amCreator()/* && (!chat->amAdmin() || !chat->adminsEnabled())*/) { return false; } } else if (peer->isUser()) { diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index 2bcd98eae0..fa28483ffd 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -54,7 +54,7 @@ MTPDmessage::Flags NewForwardedFlags( if (dynamic_cast(fwd->media())) { // Drop web page if we're not allowed to send it. if (channel->restricted( - ChannelRestriction::f_embed_links)) { + ChatRestriction::f_embed_links)) { result &= ~MTPDmessage::Flag::f_media; } } @@ -263,7 +263,7 @@ QString GetErrorTextForForward( } } } - if (megagroup->restricted(ChannelRestriction::f_send_inline) + if (megagroup->restricted(ChatRestriction::f_send_inline) && HasInlineItems(items)) { return lang(lng_restricted_send_inline); } @@ -431,7 +431,7 @@ HistoryMessage::HistoryMessage( auto ignoreMedia = [&] { if (mediaOriginal && mediaOriginal->webpage()) { if (const auto channel = history->peer->asChannel()) { - if (channel->restricted(ChannelRestriction::f_embed_links)) { + if (channel->restricted(ChatRestriction::f_embed_links)) { return true; } } diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index ca3afb8953..4f97151e74 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -1933,7 +1933,7 @@ bool HistoryWidget::canWriteMessage() const { bool HistoryWidget::isRestrictedWrite() const { if (auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { return megagroup->restricted( - ChannelRestriction::f_send_messages); + ChatRestriction::f_send_messages); } return false; } @@ -3033,7 +3033,7 @@ void HistoryWidget::step_recording(float64 ms, bool timer) { void HistoryWidget::chooseAttach() { if (!_peer || !_peer->canWrite()) return; if (auto megagroup = _peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { Ui::show(Box(lang(lng_restricted_send_media))); return; } @@ -3143,7 +3143,7 @@ void HistoryWidget::recordStartCallback() { return; } if (auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { Ui::show(Box(lang(lng_restricted_send_media))); return; } @@ -3938,7 +3938,7 @@ bool HistoryWidget::showSendingFilesError( const Storage::PreparedList &list) const { const auto text = [&] { if (const auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); } } @@ -5377,7 +5377,7 @@ bool HistoryWidget::sendExistingDocument( not_null document, TextWithEntities caption) { if (const auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_send_stickers)) { + if (megagroup->restricted(ChatRestriction::f_send_stickers)) { Ui::show( Box(lang(lng_restricted_send_stickers)), LayerOption::KeepOther); @@ -5413,7 +5413,7 @@ bool HistoryWidget::sendExistingPhoto( not_null photo, TextWithEntities caption) { if (const auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { Ui::show( Box(lang(lng_restricted_send_media)), LayerOption::KeepOther); @@ -5860,7 +5860,7 @@ void HistoryWidget::previewCancel() { void HistoryWidget::checkPreview() { auto previewRestricted = [this] { if (auto megagroup = _peer ? _peer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_embed_links)) { + if (megagroup->restricted(ChatRestriction::f_embed_links)) { return true; } } diff --git a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp index 1d3ca5c147..c56c2fdc1b 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_cover.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_cover.cpp @@ -305,7 +305,7 @@ void Cover::initViewers() { void Cover::refreshUploadPhotoOverlay() { _userpic->switchChangePhotoOverlay([&] { if (const auto chat = _peer->asChat()) { - return chat->canEdit(); + return chat->canEditInformation(); } else if (const auto channel = _peer->asChannel()) { return channel->canEditInformation(); } diff --git a/Telegram/SourceFiles/info/profile/info_profile_members_controllers.cpp b/Telegram/SourceFiles/info/profile/info_profile_members_controllers.cpp index 108a3ec737..bee151e8da 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_members_controllers.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_members_controllers.cpp @@ -230,9 +230,10 @@ std::unique_ptr ChatMembersController::createRow( auto ChatMembersController::computeType( not_null user) -> Type { auto isCreator = (peerFromUser(_chat->creator) == user->id); - auto isAdmin = _chat->adminsEnabled() - && _chat->admins.contains(user); - auto canRemove = [&] { + // #TODO groups + auto isAdmin = false;/* _chat->adminsEnabled() + && _chat->admins.contains(user);*/ + auto canRemove = false;/* [&] { if (user->isSelf()) { return false; } else if (_chat->amCreator()) { @@ -245,7 +246,7 @@ auto ChatMembersController::computeType( return true; } return false; - }(); + }();*/ auto result = Type(); result.rights = isCreator diff --git a/Telegram/SourceFiles/info/profile/info_profile_values.cpp b/Telegram/SourceFiles/info/profile/info_profile_values.cpp index 2bf13aaf95..5c46c49297 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_values.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_values.cpp @@ -283,7 +283,7 @@ rpl::producer CanAddMemberValue( chat, Notify::PeerUpdate::Flag::ChatCanEdit ) | rpl::map([chat] { - return chat->canEdit(); + return chat->canEditInformation(); // #TODO groups }); } else if (auto channel = peer->asChannel()) { return Notify::PeerUpdateValue( diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp index afe6697386..ccf0aa9d00 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_send_data.cpp @@ -64,7 +64,7 @@ QString SendDataCommon::getErrorOnSend( const Result *owner, not_null history) const { if (const auto megagroup = history->peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_messages)) { + if (megagroup->restricted(ChatRestriction::f_send_messages)) { return lang(lng_restricted_send_message); } } @@ -146,7 +146,7 @@ QString SendPhoto::getErrorOnSend( const Result *owner, not_null history) const { if (const auto megagroup = history->peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); } } @@ -181,12 +181,12 @@ QString SendFile::getErrorOnSend( const Result *owner, not_null history) const { if (const auto megagroup = history->peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { return lang(lng_restricted_send_media); - } else if (megagroup->restricted(ChannelRestriction::f_send_stickers) + } else if (megagroup->restricted(ChatRestriction::f_send_stickers) && (_document->sticker() != nullptr)) { return lang(lng_restricted_send_stickers); - } else if (megagroup->restricted(ChannelRestriction::f_send_gifs) + } else if (megagroup->restricted(ChatRestriction::f_send_gifs) && _document->isAnimation() && !_document->isVideoMessage()) { return lang(lng_restricted_send_gifs); @@ -222,7 +222,7 @@ QString SendGame::getErrorOnSend( const Result *owner, not_null history) const { if (auto megagroup = history->peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_games)) { + if (megagroup->restricted(ChatRestriction::f_send_games)) { return lang(lng_restricted_send_inline); } } diff --git a/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp b/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp index ca6db5e1ee..727d88846d 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_results_widget.cpp @@ -79,7 +79,7 @@ void Inner::visibleTopBottomUpdated( void Inner::checkRestrictedPeer() { if (auto megagroup = _inlineQueryPeer ? _inlineQueryPeer->asMegagroup() : nullptr) { - if (megagroup->restricted(ChannelRestriction::f_send_inline)) { + if (megagroup->restricted(ChatRestriction::f_send_inline)) { if (!_restrictedLabel) { _restrictedLabel.create(this, lang(lng_restricted_send_inline), Ui::FlatLabel::InitType::Simple, st::stickersRestrictedLabel); _restrictedLabel->show(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 8a6e62f482..917b9f02c8 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -563,7 +563,7 @@ bool MainWidget::sendPaths(PeerId peerId) { Ui::show(Box(lang(lng_forward_send_files_cant))); return false; } else if (auto megagroup = peer->asMegagroup()) { - if (megagroup->restricted(ChannelRestriction::f_send_media)) { + if (megagroup->restricted(ChatRestriction::f_send_media)) { Ui::show(Box(lang(lng_restricted_send_media))); return false; } @@ -4225,9 +4225,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { App::feedParticipantDelete(update.c_updateChatParticipantDelete()); } break; - case mtpc_updateChatAdmins: { - App::feedChatAdmins(update.c_updateChatAdmins()); - } break; + // #TODO groups new update case mtpc_updateChatParticipantAdmin: { App::feedParticipantAdmin(update.c_updateChatParticipantAdmin()); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index ddde694310..62bb0a5d43 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -464,7 +464,7 @@ void MediaView::updateActions() { return _userPhotosData && _fullIndex && _fullCount; } else if (_photo && _photo->peer && _photo->peer->userpicPhotoId() == _photo->id) { if (auto chat = _photo->peer->asChat()) { - return chat->canEdit(); + return chat->canEditInformation(); } else if (auto channel = _photo->peer->asChannel()) { return channel->canEditInformation(); } diff --git a/Telegram/SourceFiles/profile/profile_block_group_members.cpp b/Telegram/SourceFiles/profile/profile_block_group_members.cpp index 72f05527ae..8baf280aaa 100644 --- a/Telegram/SourceFiles/profile/profile_block_group_members.cpp +++ b/Telegram/SourceFiles/profile/profile_block_group_members.cpp @@ -67,11 +67,11 @@ void GroupMembersWidget::editAdmin(not_null user) { } auto currentRightsIt = megagroup->mgInfo->lastAdmins.find(user); auto hasAdminRights = (currentRightsIt != megagroup->mgInfo->lastAdmins.cend()); - auto currentRights = hasAdminRights ? currentRightsIt->second.rights : MTP_channelAdminRights(MTP_flags(0)); + auto currentRights = hasAdminRights ? currentRightsIt->second.rights : MTP_chatAdminRights(MTP_flags(0)); auto weak = std::make_shared>(nullptr); auto box = Box(megagroup, user, currentRights); box->setSaveCallback(SaveAdminCallback(megagroup, user, [=]( - const MTPChannelAdminRights &newRights) { + const MTPChatAdminRights &newRights) { if (*weak) { (*weak)->closeBox(); } @@ -91,10 +91,10 @@ void GroupMembersWidget::restrictUser(not_null user) { auto currentRightsIt = megagroup->mgInfo->lastRestricted.find(user); auto currentRights = (currentRightsIt != megagroup->mgInfo->lastRestricted.end()) ? currentRightsIt->second.rights - : MTP_channelBannedRights(MTP_flags(0), MTP_int(0)); + : MTP_chatBannedRights(MTP_flags(0), MTP_int(0)); auto hasAdminRights = megagroup->mgInfo->lastAdmins.find(user) != megagroup->mgInfo->lastAdmins.cend(); auto box = Box(megagroup, user, hasAdminRights, currentRights); - box->setSaveCallback([megagroup, user](const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { + box->setSaveCallback([megagroup, user](const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { Ui::hideLayer(); // #TODO use Auth().api(). MTP::send(MTPchannels_EditBanned(megagroup->inputChannel, user->inputUser, newRights), rpcDone([megagroup, user, oldRights, newRights](const MTPUpdates &result) { @@ -110,14 +110,14 @@ void GroupMembersWidget::removePeer(PeerData *selectedPeer) { Assert(user != nullptr); auto text = lng_profile_sure_kick(lt_user, user->firstName); - auto currentRestrictedRights = [&]() -> MTPChannelBannedRights { + auto currentRestrictedRights = [&]() -> MTPChatBannedRights { if (auto channel = peer()->asMegagroup()) { auto it = channel->mgInfo->lastRestricted.find(user); if (it != channel->mgInfo->lastRestricted.cend()) { return it->second.rights; } } - return MTP_channelBannedRights(MTP_flags(0), MTP_int(0)); + return MTP_chatBannedRights(MTP_flags(0), MTP_int(0)); }(); Ui::show(Box(text, lang(lng_box_remove), [user, currentRestrictedRights, peer = peer()] { Ui::hideLayer(); @@ -344,12 +344,13 @@ void GroupMembersWidget::refreshLimitReached() { void GroupMembersWidget::checkSelfAdmin(ChatData *chat) { if (chat->participants.empty()) return; + // #TODO groups const auto self = Auth().user(); - if (chat->amAdmin() && !chat->admins.contains(self)) { - chat->admins.insert(self); - } else if (!chat->amAdmin() && chat->admins.contains(self)) { - chat->admins.remove(self); - } + //if (chat->amAdmin() && !chat->admins.contains(self)) { + // chat->admins.insert(self); + //} else if (!chat->amAdmin() && chat->admins.contains(self)) { + // chat->admins.remove(self); + //} } void GroupMembersWidget::sortMembers() { @@ -418,12 +419,13 @@ void GroupMembersWidget::setItemFlags(Item *item, ChatData *chat) { using AdminState = Item::AdminState; auto user = getMember(item)->user(); auto isCreator = (peerFromUser(chat->creator) == item->peer->id); - auto isAdmin = chat->adminsEnabled() && chat->admins.contains(user); + // #TODO groups + auto isAdmin = false;// chat->adminsEnabled() && chat->admins.contains(user); auto adminState = isCreator ? AdminState::Creator : isAdmin ? AdminState::Admin : AdminState::None; item->adminState = adminState; if (item->peer->id == Auth().userPeerId()) { item->hasRemoveLink = false; - } else if (chat->amCreator() || (chat->amAdmin() && (adminState == AdminState::None))) { + } else if (chat->amCreator() /*|| (chat->amAdmin() && (adminState == AdminState::None))*/) { item->hasRemoveLink = true; } else if (chat->invitedByMe.contains(user) && (adminState == AdminState::None)) { item->hasRemoveLink = true; diff --git a/Telegram/SourceFiles/profile/profile_channel_controllers.cpp b/Telegram/SourceFiles/profile/profile_channel_controllers.cpp index 9e7d54a0ff..691ce3d5ab 100644 --- a/Telegram/SourceFiles/profile/profile_channel_controllers.cpp +++ b/Telegram/SourceFiles/profile/profile_channel_controllers.cpp @@ -35,9 +35,9 @@ constexpr auto kSortByOnlineDelay = TimeMs(1000); void RemoveAdmin( not_null channel, not_null user, - const MTPChannelAdminRights &oldRights, + const MTPChatAdminRights &oldRights, Fn onDone) { - const auto newRights = MTP_channelAdminRights(MTP_flags(0)); + const auto newRights = MTP_chatAdminRights(MTP_flags(0)); auto done = [=](const MTPUpdates &result) { Auth().api().applyUpdates(result); channel->applyEditAdmin(user, oldRights, newRights); @@ -54,15 +54,15 @@ void RemoveAdmin( } // namespace Fn SaveAdminCallback( + const MTPChatAdminRights &oldRights, + const MTPChatAdminRights &newRights)> SaveAdminCallback( not_null channel, not_null user, - Fn onDone, + Fn onDone, Fn onFail) { return [=]( - const MTPChannelAdminRights &oldRights, - const MTPChannelAdminRights &newRights) { + const MTPChatAdminRights &oldRights, + const MTPChatAdminRights &newRights) { auto done = [=](const MTPUpdates &result) { Auth().api().applyUpdates(result); channel->applyEditAdmin(user, oldRights, newRights); @@ -278,11 +278,11 @@ void ParticipantsBoxController::addNewItem() { return; } auto weak = base::make_weak(this); - _addBox = Ui::show(Box(std::make_unique(_channel, _role, [weak](not_null user, const MTPChannelAdminRights &rights) { + _addBox = Ui::show(Box(std::make_unique(_channel, _role, [weak](not_null user, const MTPChatAdminRights &rights) { if (const auto strong = weak.get()) { strong->editAdminDone(user, rights); } - }, [weak](not_null user, const MTPChannelBannedRights &rights) { + }, [weak](not_null user, const MTPChatBannedRights &rights) { if (const auto strong = weak.get()) { strong->editRestrictedDone(user, rights); } @@ -688,7 +688,7 @@ bool ParticipantsBoxController::canEditAdmin( } else if (!canEditAdminByRights(user)) { return false; } - return _channel->adminRights() & ChannelAdminRight::f_add_admins; + return _channel->adminRights() & ChatAdminRight::f_add_admins; } bool ParticipantsBoxController::canRestrictUser( @@ -700,7 +700,7 @@ bool ParticipantsBoxController::canRestrictUser( } else if (!canEditAdminByRights(user)) { return false; } - return _channel->adminRights() & ChannelAdminRight::f_ban_users; + return _channel->adminRights() & ChatAdminRight::f_ban_users; } base::unique_qptr ParticipantsBoxController::rowContextMenu( @@ -761,15 +761,15 @@ void ParticipantsBoxController::showAdmin(not_null user) { auto isCreator = (user == _additional.creator); auto notAdmin = !isCreator && (it == _additional.adminRights.cend()); auto currentRights = isCreator - ? MTP_channelAdminRights(MTP_flags(~MTPDchannelAdminRights::Flag::f_add_admins | MTPDchannelAdminRights::Flag::f_add_admins)) - : notAdmin ? MTP_channelAdminRights(MTP_flags(0)) : it->second; + ? MTP_chatAdminRights(MTP_flags(~MTPDchatAdminRights::Flag::f_add_admins | MTPDchatAdminRights::Flag::f_add_admins)) + : notAdmin ? MTP_chatAdminRights(MTP_flags(0)) : it->second; auto weak = base::make_weak(this); auto box = Box(_channel, user, currentRights); auto canEdit = (_additional.adminCanEdit.find(user) != _additional.adminCanEdit.end()); auto canSave = notAdmin ? _channel->canAddAdmins() : canEdit; if (canSave) { box->setSaveCallback(SaveAdminCallback(_channel, user, [=]( - const MTPChannelAdminRights &newRights) { + const MTPChatAdminRights &newRights) { if (weak) { weak->editAdminDone(user, newRights); } @@ -784,14 +784,14 @@ void ParticipantsBoxController::showAdmin(not_null user) { void ParticipantsBoxController::editAdminDone( not_null user, - const MTPChannelAdminRights &rights) { + const MTPChatAdminRights &rights) { if (_editBox) { _editBox->closeBox(); } if (_addBox) { _addBox->closeBox(); } - auto notAdmin = (rights.c_channelAdminRights().vflags.v == 0); + auto notAdmin = (rights.c_chatAdminRights().vflags.v == 0); if (notAdmin) { _additional.adminRights.erase(user); _additional.adminPromotedBy.erase(user); @@ -820,13 +820,13 @@ void ParticipantsBoxController::editAdminDone( void ParticipantsBoxController::showRestricted(not_null user) { auto it = _additional.restrictedRights.find(user); auto restrictedRights = (it == _additional.restrictedRights.cend()) - ? MTP_channelBannedRights(MTP_flags(0), MTP_int(0)) + ? MTP_chatBannedRights(MTP_flags(0), MTP_int(0)) : it->second; auto weak = base::make_weak(this); auto hasAdminRights = false; auto box = Box(_channel, user, hasAdminRights, restrictedRights); if (_channel->canBanMembers()) { - box->setSaveCallback([megagroup = _channel.get(), user, weak](const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { + box->setSaveCallback([megagroup = _channel.get(), user, weak](const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { MTP::send(MTPchannels_EditBanned(megagroup->inputChannel, user->inputUser, newRights), rpcDone([megagroup, user, weak, oldRights, newRights](const MTPUpdates &result) { Auth().api().applyUpdates(result); megagroup->applyEditBanned(user, oldRights, newRights); @@ -839,15 +839,15 @@ void ParticipantsBoxController::showRestricted(not_null user) { _editBox = Ui::show(std::move(box), LayerOption::KeepOther); } -void ParticipantsBoxController::editRestrictedDone(not_null user, const MTPChannelBannedRights &rights) { +void ParticipantsBoxController::editRestrictedDone(not_null user, const MTPChatBannedRights &rights) { if (_editBox) { _editBox->closeBox(); } if (_addBox) { _addBox->closeBox(); } - auto notBanned = (rights.c_channelBannedRights().vflags.v == 0); - auto fullBanned = rights.c_channelBannedRights().is_view_messages(); + auto notBanned = (rights.c_chatBannedRights().vflags.v == 0); + auto fullBanned = rights.c_chatBannedRights().is_view_messages(); if (notBanned) { _additional.kicked.erase(user); _additional.restrictedRights.erase(user); @@ -902,7 +902,7 @@ void ParticipantsBoxController::kickMemberSure(not_null user) { } auto alreadyIt = _additional.restrictedRights.find(user); auto currentRights = (alreadyIt == _additional.restrictedRights.cend()) - ? MTP_channelBannedRights(MTP_flags(0), MTP_int(0)) + ? MTP_chatBannedRights(MTP_flags(0), MTP_int(0)) : alreadyIt->second; if (auto row = delegate()->peerListFindRow(user->id)) { @@ -933,7 +933,7 @@ void ParticipantsBoxController::removeAdminSure(not_null user) { const auto weak = base::make_weak(this); RemoveAdmin(_channel, user, oldRightsIt->second, [=] { if (const auto strong = weak.get()) { - const auto newRights = MTP_channelAdminRights(MTP_flags(0)); + const auto newRights = MTP_chatAdminRights(MTP_flags(0)); strong->editAdminDone(user, newRights); } }); @@ -1367,8 +1367,8 @@ void AddParticipantBoxController::showAdmin(not_null user, bool sure) auto weak = base::make_weak(this); auto alreadyIt = _additional.adminRights.find(user); auto currentRights = (_additional.creator == user) - ? MTP_channelAdminRights(MTP_flags(~MTPDchannelAdminRights::Flag::f_add_admins | MTPDchannelAdminRights::Flag::f_add_admins)) - : MTP_channelAdminRights(MTP_flags(0)); + ? MTP_chatAdminRights(MTP_flags(~MTPDchatAdminRights::Flag::f_add_admins | MTPDchatAdminRights::Flag::f_add_admins)) + : MTP_chatAdminRights(MTP_flags(0)); if (alreadyIt != _additional.adminRights.end()) { // The user is already an admin. currentRights = alreadyIt->second; @@ -1442,7 +1442,7 @@ void AddParticipantBoxController::showAdmin(not_null user, bool sure) auto box = Box(_channel, user, currentRights); if (!canNotEdit) { box->setSaveCallback(SaveAdminCallback(_channel, user, [=]( - const MTPChannelAdminRights &newRights) { + const MTPChatAdminRights &newRights) { if (weak) { weak->editAdminDone(user, newRights); } @@ -1457,13 +1457,13 @@ void AddParticipantBoxController::showAdmin(not_null user, bool sure) void AddParticipantBoxController::editAdminDone( not_null user, - const MTPChannelAdminRights &rights) { + const MTPChatAdminRights &rights) { if (_editBox) _editBox->closeBox(); _additional.restrictedRights.erase(user); _additional.restrictedBy.erase(user); _additional.kicked.erase(user); _additional.external.erase(user); - if (rights.c_channelAdminRights().vflags.v == 0) { + if (rights.c_chatAdminRights().vflags.v == 0) { _additional.adminRights.erase(user); _additional.adminPromotedBy.erase(user); _additional.adminCanEdit.erase(user); @@ -1493,7 +1493,7 @@ void AddParticipantBoxController::showRestricted(not_null user, bool // Check restrictions. auto weak = base::make_weak(this); auto alreadyIt = _additional.restrictedRights.find(user); - auto currentRights = MTP_channelBannedRights(MTP_flags(0), MTP_int(0)); + auto currentRights = MTP_chatBannedRights(MTP_flags(0), MTP_int(0)); auto hasAdminRights = false; if (alreadyIt != _additional.restrictedRights.end()) { // The user is already banned or restricted. @@ -1520,7 +1520,7 @@ void AddParticipantBoxController::showRestricted(not_null user, bool // Finally edit the restricted. auto box = Box(_channel, user, hasAdminRights, currentRights); - box->setSaveCallback([user, weak](const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { + box->setSaveCallback([user, weak](const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { if (weak) { weak->restrictUserSure(user, oldRights, newRights); } @@ -1528,7 +1528,7 @@ void AddParticipantBoxController::showRestricted(not_null user, bool _editBox = Ui::show(std::move(box), LayerOption::KeepOther); } -void AddParticipantBoxController::restrictUserSure(not_null user, const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights) { +void AddParticipantBoxController::restrictUserSure(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights) { auto weak = base::make_weak(this); MTP::send(MTPchannels_EditBanned(_channel->inputChannel, user->inputUser, newRights), rpcDone([megagroup = _channel.get(), user, weak, oldRights, newRights](const MTPUpdates &result) { Auth().api().applyUpdates(result); @@ -1541,18 +1541,18 @@ void AddParticipantBoxController::restrictUserSure(not_null user, con void AddParticipantBoxController::editRestrictedDone( not_null user, - const MTPChannelBannedRights &rights) { + const MTPChatBannedRights &rights) { if (_editBox) _editBox->closeBox(); _additional.adminRights.erase(user); _additional.adminCanEdit.erase(user); _additional.adminPromotedBy.erase(user); - if (rights.c_channelBannedRights().vflags.v == 0) { + if (rights.c_chatBannedRights().vflags.v == 0) { _additional.restrictedRights.erase(user); _additional.restrictedBy.erase(user); _additional.kicked.erase(user); } else { _additional.restrictedRights[user] = rights; - if (rights.c_channelBannedRights().vflags.v & MTPDchannelBannedRights::Flag::f_view_messages) { + if (rights.c_chatBannedRights().vflags.v & MTPDchatBannedRights::Flag::f_view_messages) { _additional.kicked.emplace(user); } else { _additional.kicked.erase(user); @@ -1602,7 +1602,7 @@ void AddParticipantBoxController::kickUser(not_null user, bool sure) }), LayerOption::KeepOther); return; } - auto currentRights = MTP_channelBannedRights(MTP_flags(0), MTP_int(0)); + auto currentRights = MTP_chatBannedRights(MTP_flags(0), MTP_int(0)); auto alreadyIt = _additional.restrictedRights.find(user); if (alreadyIt != _additional.restrictedRights.end()) { // The user is already banned or restricted. diff --git a/Telegram/SourceFiles/profile/profile_channel_controllers.h b/Telegram/SourceFiles/profile/profile_channel_controllers.h index a63d17ace7..545eec89d1 100644 --- a/Telegram/SourceFiles/profile/profile_channel_controllers.h +++ b/Telegram/SourceFiles/profile/profile_channel_controllers.h @@ -21,11 +21,11 @@ class Navigation; namespace Profile { Fn SaveAdminCallback( + const MTPChatAdminRights &oldRights, + const MTPChatAdminRights &newRights)> SaveAdminCallback( not_null channel, not_null user, - Fn onDone, + Fn onDone, Fn onFail); // Viewing admins, banned or restricted users list with search. @@ -48,10 +48,10 @@ public: Role role); struct Additional { - std::map, MTPChannelAdminRights> adminRights; + std::map, MTPChatAdminRights> adminRights; std::set> adminCanEdit; std::map, not_null> adminPromotedBy; - std::map, MTPChannelBannedRights> restrictedRights; + std::map, MTPChatBannedRights> restrictedRights; std::set> kicked; std::map, not_null> restrictedBy; std::set> external; @@ -122,11 +122,11 @@ private: void showAdmin(not_null user); void editAdminDone( not_null user, - const MTPChannelAdminRights &rights); + const MTPChatAdminRights &rights); void showRestricted(not_null user); void editRestrictedDone( not_null user, - const MTPChannelBannedRights &rights); + const MTPChatBannedRights &rights); void removeKicked(not_null row, not_null user); void kickMember(not_null user); void kickMemberSure(not_null user); @@ -219,8 +219,8 @@ public: using Role = ParticipantsBoxController::Role; using Additional = ParticipantsBoxController::Additional; - using AdminDoneCallback = Fn user, const MTPChannelAdminRights &adminRights)>; - using BannedDoneCallback = Fn user, const MTPChannelBannedRights &bannedRights)>; + using AdminDoneCallback = Fn user, const MTPChatAdminRights &adminRights)>; + using BannedDoneCallback = Fn user, const MTPChatBannedRights &bannedRights)>; AddParticipantBoxController(not_null channel, Role role, AdminDoneCallback adminDoneCallback, BannedDoneCallback bannedDoneCallback); void prepare() override; @@ -238,11 +238,11 @@ private: bool checkInfoLoaded(not_null user, Callback callback); void showAdmin(not_null user, bool sure = false); - void editAdminDone(not_null user, const MTPChannelAdminRights &rights); + void editAdminDone(not_null user, const MTPChatAdminRights &rights); void showRestricted(not_null user, bool sure = false); - void editRestrictedDone(not_null user, const MTPChannelBannedRights &rights); + void editRestrictedDone(not_null user, const MTPChatBannedRights &rights); void kickUser(not_null user, bool sure = false); - void restrictUserSure(not_null user, const MTPChannelBannedRights &oldRights, const MTPChannelBannedRights &newRights); + void restrictUserSure(not_null user, const MTPChatBannedRights &oldRights, const MTPChatBannedRights &newRights); bool appendRow(not_null user); bool prependRow(not_null user); std::unique_ptr createRow(not_null user) const; diff --git a/Telegram/SourceFiles/storage/localimageloader.cpp b/Telegram/SourceFiles/storage/localimageloader.cpp index d6cf485864..9b1e6b7e78 100644 --- a/Telegram/SourceFiles/storage/localimageloader.cpp +++ b/Telegram/SourceFiles/storage/localimageloader.cpp @@ -749,24 +749,26 @@ void FileLoadTask::process() { attributes[0] = MTP_documentAttributeAudio(MTP_flags(flags), MTP_int(_duration), MTPstring(), MTPstring(), MTP_bytes(documentWaveformEncode5bit(_waveform))); attributes.resize(1); document = MTP_document( + MTP_flags(0), MTP_long(_id), MTP_long(0), MTP_bytes(QByteArray()), MTP_int(unixtime()), MTP_string(filemime), MTP_int(filesize), - thumbSize, + MTP_vector(1, thumbSize), MTP_int(MTP::maindc()), MTP_vector(attributes)); } else if (_type != SendMediaType::Photo) { document = MTP_document( + MTP_flags(0), MTP_long(_id), MTP_long(0), MTP_bytes(QByteArray()), MTP_int(unixtime()), MTP_string(filemime), MTP_int(filesize), - thumbSize, + MTP_vector(1, thumbSize), MTP_int(MTP::maindc()), MTP_vector(attributes)); _type = SendMediaType::File; diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 3e490dc437..b8858a0b3f 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -354,7 +354,8 @@ void Filler::addUserActions(not_null user) { void Filler::addChatActions(not_null chat) { if (_source != PeerMenuSource::ChatsList) { - if (chat->canEdit()) { + // #TODO groups + if (chat->canEditInformation()) { _addAction( lang(lng_manage_group_title), [chat] { Ui::show(Box(chat)); });