private void AdminLogExecute() { if (_item == null) { return; } NavigationService.Navigate(typeof(ChannelAdminLogPage), _item.ToPeer()); }
private async void ContinueUploadingPhoto(TLChannel channel) { var response = await ProtoService.EditPhotoAsync(channel, new TLInputChatUploadedPhoto { File = _photo }); if (response.IsSucceeded) { NavigationService.Navigate(typeof(ChannelCreateStep2Page), channel.ToPeer()); } else { // TODO: ... } }
public override async Task <IList <TLMessageBase> > LoadDataAsync() { _viewModel.IsLoading = true; _hasMore = false; var maxId = Count > 0 ? _minEventId : 0; var response = await _protoService.GetAdminLogAsync(_inputChannel, null, null, null, maxId, 0, 50); if (response.IsSucceeded) { _viewModel.IsLoading = false; var result = new List <TLMessageBase>(); foreach (var item in response.Result.Events) { _minEventId = Math.Min(_minEventId, item.Id); if (item.Action is TLChannelAdminLogEventActionChangeTitle changeTitle) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangeAbout changeAbout) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; message.Message = changeAbout.NewValue; message.HasMedia = true; if (string.IsNullOrEmpty(changeAbout.PrevValue)) { message.Media = new TLMessageMediaEmpty(); } else { message.Media = new TLMessageMediaWebPage { WebPage = new TLWebPage { SiteName = Strings.Android.EventLogPreviousGroupDescription, Description = changeAbout.PrevValue, HasSiteName = true, HasDescription = true } }; } result.Insert(0, message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangeUsername changeUsername) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; message.Message = string.IsNullOrEmpty(changeUsername.NewValue) ? string.Empty : MeUrlPrefixConverter.Convert(changeUsername.NewValue); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasMedia = true; message.HasEntities = true; message.Entities.Add(new TLMessageEntityUrl { Offset = 0, Length = message.Message.Length }); if (string.IsNullOrEmpty(changeUsername.PrevValue)) { message.Media = new TLMessageMediaEmpty(); } else { message.Media = new TLMessageMediaWebPage { WebPage = new TLWebPage { SiteName = Strings.Android.EventLogPreviousLink, Description = MeUrlPrefixConverter.Convert(changeUsername.PrevValue), HasSiteName = true, HasDescription = true } }; } result.Insert(0, message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangePhoto changePhoto) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionToggleInvites toggleInvites) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionToggleSignatures toggleSignatures) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionTogglePreHistoryHidden togglePreHistoryHidden) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionUpdatePinned updatePinned) { // Patch for view if (updatePinned.Message is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = null; messageCommon.IsOut = false; messageCommon.IsPost = false; } if (!(updatePinned.Message is TLMessageEmpty)) { result.Insert(0, updatePinned.Message); } result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionEditMessage editMessage) { // TODO: the actual message if (editMessage.NewMessage is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = editMessage.PrevMessage.Id; messageCommon.IsOut = false; messageCommon.IsPost = false; } if (editMessage.NewMessage is TLMessage message) { message.Reply = editMessage.PrevMessage; message.EditDate = null; message.HasEditDate = false; } result.Insert(0, editMessage.NewMessage); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionDeleteMessage deleteMessage) { // Patch for view if (deleteMessage.Message is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = null; messageCommon.IsOut = false; messageCommon.IsPost = false; } result.Insert(0, deleteMessage.Message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantJoin participantJoin) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantLeave participantLeave) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantInvite participantInvite) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantToggleBan participantToggleBan) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; //message.Message = from.ReadString(); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasFromId = true; message.HasEntities = true; var whoUser = participantToggleBan.PrevParticipant.User; TLChannelBannedRights o = null; TLChannelBannedRights n = null; if (participantToggleBan.PrevParticipant is TLChannelParticipantBanned prevBanned) { o = prevBanned.BannedRights; } if (participantToggleBan.NewParticipant is TLChannelParticipantBanned newBanned) { n = newBanned.BannedRights; } if (_channel.IsMegaGroup && (n == null || !n.IsViewMessages || n != null && o != null && n.UntilDate != o.UntilDate)) { StringBuilder rights; String bannedDuration; if (n != null && !AdminLogHelper.IsBannedForever(n.UntilDate)) { bannedDuration = ""; int duration = n.UntilDate - item.Date; int days = duration / 60 / 60 / 24; duration -= days * 60 * 60 * 24; int hours = duration / 60 / 60; duration -= hours * 60 * 60; int minutes = duration / 60; int count = 0; for (int a = 0; a < 3; a++) { String addStr = null; if (a == 0) { if (days != 0) { addStr = LocaleHelper.Declension("Days", days); count++; } } else if (a == 1) { if (hours != 0) { addStr = LocaleHelper.Declension("Hours", hours); count++; } } else { if (minutes != 0) { addStr = LocaleHelper.Declension("Minutes", minutes); count++; } } if (addStr != null) { if (bannedDuration.Length > 0) { bannedDuration += ", "; } bannedDuration += addStr; } if (count == 2) { break; } } } else { bannedDuration = Strings.Android.UserRestrictionsUntilForever; } var str = Strings.Android.EventLogRestrictedUntil; rights = new StringBuilder(String.Format(str, GetUserName(whoUser, message.Entities, str.IndexOf("{0}")), bannedDuration)); var added = false; if (o == null) { o = new TLChannelBannedRights(); } if (n == null) { n = new TLChannelBannedRights(); } void AppendChange(bool value, string label) { if (!added) { rights.Append('\n'); added = true; } rights.Append('\n').Append(!value ? '+' : '-').Append(' '); rights.Append(label); } if (o.IsViewMessages != n.IsViewMessages) { AppendChange(n.IsViewMessages, Strings.Android.EventLogRestrictedReadMessages); } if (o.IsSendMessages != n.IsSendMessages) { AppendChange(n.IsSendMessages, Strings.Android.EventLogRestrictedSendMessages); } if (o.IsSendStickers != n.IsSendStickers || o.IsSendInline != n.IsSendInline || o.IsSendGifs != n.IsSendGifs || o.IsSendGames != n.IsSendGames) { AppendChange(n.IsSendStickers, Strings.Android.EventLogRestrictedSendStickers); } if (o.IsSendMedia != n.IsSendMedia) { AppendChange(n.IsSendMedia, Strings.Android.EventLogRestrictedSendMedia); } if (o.IsEmbedLinks != n.IsEmbedLinks) { AppendChange(n.IsEmbedLinks, Strings.Android.EventLogRestrictedSendEmbed); } message.Message = rights.ToString(); } else { String str; if (n != null && (o == null || n.IsViewMessages)) { str = Strings.Android.EventLogChannelRestricted; } else { str = Strings.Android.EventLogChannelUnrestricted; } message.Message = String.Format(str, GetUserName(whoUser, message.Entities, str.IndexOf("{0}"))); } result.Insert(0, message); } else if (item.Action is TLChannelAdminLogEventActionParticipantToggleAdmin participantToggleAdmin) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; //message.Message = from.ReadString(); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasFromId = true; message.HasEntities = true; var whoUser = participantToggleAdmin.PrevParticipant.User; var str = Strings.Android.EventLogPromoted; var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); var builder = new StringBuilder(string.Format(str, userName)); var added = false; TLChannelAdminRights o = null; TLChannelAdminRights n = null; if (participantToggleAdmin.PrevParticipant is TLChannelParticipantAdmin prevAdmin) { o = prevAdmin.AdminRights; } if (participantToggleAdmin.NewParticipant is TLChannelParticipantAdmin newAdmin) { n = newAdmin.AdminRights; } if (o == null) { o = new TLChannelAdminRights(); } if (n == null) { n = new TLChannelAdminRights(); } void AppendChange(bool value, string label) { if (!added) { builder.Append('\n'); added = true; } builder.Append('\n').Append(value ? '+' : '-').Append(' '); builder.Append(label); } if (o.IsChangeInfo != n.IsChangeInfo) { AppendChange(n.IsChangeInfo, _channel.IsMegaGroup ? Strings.Android.EventLogPromotedChangeGroupInfo : Strings.Android.EventLogPromotedChangeChannelInfo); } if (!_channel.IsMegaGroup) { if (o.IsPostMessages != n.IsPostMessages) { AppendChange(n.IsPostMessages, Strings.Android.EventLogPromotedPostMessages); } if (o.IsEditMessages != n.IsEditMessages) { AppendChange(n.IsEditMessages, Strings.Android.EventLogPromotedEditMessages); } } if (o.IsDeleteMessages != n.IsDeleteMessages) { AppendChange(n.IsDeleteMessages, Strings.Android.EventLogPromotedDeleteMessages); } if (o.IsAddAdmins != n.IsAddAdmins) { AppendChange(n.IsAddAdmins, Strings.Android.EventLogPromotedAddAdmins); } if (_channel.IsMegaGroup) { if (o.IsBanUsers != n.IsBanUsers) { AppendChange(n.IsBanUsers, Strings.Android.EventLogPromotedBanUsers); } } if (o.IsInviteUsers != n.IsInviteUsers) { AppendChange(n.IsInviteUsers, Strings.Android.EventLogPromotedAddUsers); } if (_channel.IsMegaGroup) { if (o.IsPinMessages != n.IsPinMessages) { AppendChange(n.IsPinMessages, Strings.Android.EventLogPromotedPinMessages); } } message.Message = builder.ToString(); result.Insert(0, message); } else if (item.Action is TLChannelAdminLogEventActionChangeStickerSet changeStickerSet) { result.Insert(0, GetServiceMessage(item)); } } if (response.Result.Events.Count < 50) { _hasMore = false; } return(result); } _viewModel.IsLoading = false; return(new TLMessageBase[0]); }
public override async Task <IList <TLMessageBase> > LoadDataAsync() { _viewModel.IsLoading = true; var maxId = Count > 0 ? _minEventId : 0; var response = await _protoService.GetAdminLogAsync(_inputChannel, null, null, null, maxId, 0, 50); if (response.IsSucceeded) { _viewModel.IsLoading = false; var result = new List <TLMessageBase>(); foreach (var item in response.Result.Events) { _minEventId = Math.Min(_minEventId, item.Id); if (item.Action is TLChannelAdminLogEventActionChangeTitle changeTitle) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangeAbout changeAbout) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; message.Message = changeAbout.NewValue; message.HasMedia = true; if (string.IsNullOrEmpty(changeAbout.PrevValue)) { message.Media = new TLMessageMediaEmpty(); } else { message.Media = new TLMessageMediaWebPage { WebPage = new TLWebPage { SiteName = AppResources.EventLogPreviousGroupDescription, Description = changeAbout.PrevValue, HasSiteName = true, HasDescription = true } }; } result.Insert(0, message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangeUsername changeUsername) { var config = InMemoryCacheService.Current.GetConfig(); if (config == null) { continue; } var linkPrefix = config.MeUrlPrefix; if (linkPrefix.EndsWith("/")) { linkPrefix = linkPrefix.Substring(0, linkPrefix.Length - 1); } if (linkPrefix.StartsWith("https://")) { linkPrefix = linkPrefix.Substring(8); } else if (linkPrefix.StartsWith("http://")) { linkPrefix = linkPrefix.Substring(7); } var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; message.Message = string.IsNullOrEmpty(changeUsername.NewValue) ? string.Empty : $"https://{linkPrefix}/{changeUsername.NewValue}"; message.Entities = new TLVector <TLMessageEntityBase>(); message.HasMedia = true; message.HasEntities = true; message.Entities.Add(new TLMessageEntityUrl { Offset = 0, Length = message.Message.Length }); if (string.IsNullOrEmpty(changeUsername.PrevValue)) { message.Media = new TLMessageMediaEmpty(); } else { message.Media = new TLMessageMediaWebPage { WebPage = new TLWebPage { SiteName = AppResources.EventLogPreviousLink, Description = $"https://{linkPrefix}/{changeUsername.PrevValue}", HasSiteName = true, HasDescription = true } }; } result.Insert(0, message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionChangePhoto changePhoto) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionToggleInvites toggleInvites) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionToggleSignatures toggleSignatures) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionUpdatePinned updatePinned) { // Patch for view if (updatePinned.Message is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = null; messageCommon.IsOut = false; messageCommon.IsPost = false; } if (!(updatePinned.Message is TLMessageEmpty)) { result.Insert(0, updatePinned.Message); } result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionEditMessage editMessage) { // TODO: the actual message if (editMessage.NewMessage is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = editMessage.PrevMessage.Id; messageCommon.IsOut = false; messageCommon.IsPost = false; } if (editMessage.NewMessage is TLMessage message) { message.Reply = editMessage.PrevMessage; message.EditDate = null; message.HasEditDate = false; } result.Insert(0, editMessage.NewMessage); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionDeleteMessage deleteMessage) { // Patch for view if (deleteMessage.Message is TLMessageCommonBase messageCommon) { messageCommon.ReplyToMsgId = null; messageCommon.IsOut = false; messageCommon.IsPost = false; } result.Insert(0, deleteMessage.Message); result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantJoin participantJoin) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantLeave participantLeave) { result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantInvite participantInvite) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; //message.Message = from.ReadString(); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasFromId = true; message.HasEntities = true; var whoUser = participantInvite.Participant.User; var str = AppResources.EventLogInvited; var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); var builder = new StringBuilder(string.Format(str, userName)); message.Message = string.Format(str, userName); result.Insert(0, message); //result.Insert(0, GetServiceMessage(item)); } else if (item.Action is TLChannelAdminLogEventActionParticipantToggleBan participantToggleBan) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; //message.Message = from.ReadString(); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasFromId = true; message.HasEntities = true; var whoUser = participantToggleBan.PrevParticipant.User; TLChannelBannedRights o = null; TLChannelBannedRights n = null; if (participantToggleBan.PrevParticipant is TLChannelParticipantBanned prevBanned) { o = prevBanned.BannedRights; } if (participantToggleBan.NewParticipant is TLChannelParticipantBanned newBanned) { n = newBanned.BannedRights; } if (!_channel.IsMegaGroup || (n != null && n.IsViewMessages && (n == null || o == null || n.UntilDate == o.UntilDate))) { string str; if (n == null || !(o == null || n.IsViewMessages)) { str = AppResources.EventLogChannelUnrestricted; } else { str = AppResources.EventLogChannelRestricted; } var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); message.Message = string.Format(str, userName); } else { StringBuilder builder; if (n == null || AdminLogHelper.IsBannedForever(n.UntilDate)) { var str = AppResources.EventLogRestricted; var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); builder = new StringBuilder(String.Format(str, userName)); } else { var bannedDuration = ""; int duration = n.UntilDate - item.Date; int days = ((duration / 60) / 60) / 24; duration -= ((days * 60) * 60) * 24; int hours = (duration / 60) / 60; int minutes = (duration - ((hours * 60) * 60)) / 60; int count = 0; for (int a = 0; a < 3; a++) { String addStr = null; if (a == 0) { if (days != 0) { //addStr = LocaleController.formatPluralString("Days", days); addStr = $"{days} days"; count++; } } else if (a == 1) { if (hours != 0) { //addStr = LocaleController.formatPluralString("Hours", hours); addStr = $"{hours} hours"; count++; } } else if (minutes != 0) { //addStr = LocaleController.formatPluralString("Minutes", minutes); addStr = $"{minutes} minutes"; count++; } if (addStr != null) { if (bannedDuration.Length > 0) { bannedDuration = bannedDuration + ", "; } bannedDuration = bannedDuration + addStr; } if (count == 2) { break; } } var str = AppResources.EventLogRestrictedUntil; var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); builder = new StringBuilder(String.Format(str, userName, bannedDuration)); } var added = false; if (o == null) { o = new TLChannelBannedRights(); } if (n == null) { n = new TLChannelBannedRights(); } void AppendChange(bool value, string label) { if (!added) { builder.Append('\n'); added = true; } builder.Append('\n').Append(!value ? '+' : '-').Append(' '); builder.Append(label); } if (o.IsViewMessages != n.IsViewMessages) { AppendChange(n.IsViewMessages, AppResources.EventLogRestrictedReadMessages); } if (o.IsSendMessages != n.IsSendMessages) { AppendChange(n.IsSendMessages, AppResources.EventLogRestrictedSendMessages); } if (!(o.IsSendStickers == n.IsSendStickers && o.IsSendInline == n.IsSendInline && o.IsSendGifs == n.IsSendGifs && o.IsSendGames == n.IsSendGames)) { AppendChange(n.IsSendStickers, AppResources.EventLogRestrictedSendStickers); } if (o.IsSendMedia != n.IsSendMedia) { AppendChange(n.IsSendMedia, AppResources.EventLogRestrictedSendMedia); } if (o.IsEmbedLinks != n.IsEmbedLinks) { AppendChange(n.IsEmbedLinks, AppResources.EventLogRestrictedSendEmbed); } message.Message = builder.ToString(); } result.Insert(0, message); } else if (item.Action is TLChannelAdminLogEventActionParticipantToggleAdmin participantToggleAdmin) { var message = new TLMessage(); //message.Id = item.Id; message.FromId = item.UserId; message.ToId = _channel.ToPeer(); message.Date = item.Date; //message.Message = from.ReadString(); message.Entities = new TLVector <TLMessageEntityBase>(); message.HasFromId = true; message.HasEntities = true; var whoUser = participantToggleAdmin.PrevParticipant.User; var str = AppResources.EventLogPromoted; var userName = GetUserName(whoUser, message.Entities, str.IndexOf("{0}")); var builder = new StringBuilder(string.Format(str, userName)); var added = false; TLChannelAdminRights o = null; TLChannelAdminRights n = null; if (participantToggleAdmin.PrevParticipant is TLChannelParticipantAdmin prevAdmin) { o = prevAdmin.AdminRights; } if (participantToggleAdmin.NewParticipant is TLChannelParticipantAdmin newAdmin) { n = newAdmin.AdminRights; } if (o == null) { o = new TLChannelAdminRights(); } if (n == null) { n = new TLChannelAdminRights(); } void AppendChange(bool value, string label) { if (!added) { builder.Append('\n'); added = true; } builder.Append('\n').Append(value ? '+' : '-').Append(' '); builder.Append(label); } if (o.IsChangeInfo != n.IsChangeInfo) { AppendChange(n.IsChangeInfo, _channel.IsMegaGroup ? AppResources.EventLogPromotedChangeGroupInfo : AppResources.EventLogPromotedChangeChannelInfo); } if (!_channel.IsMegaGroup) { if (o.IsPostMessages != n.IsPostMessages) { AppendChange(n.IsPostMessages, AppResources.EventLogPromotedPostMessages); } if (o.IsEditMessages != n.IsEditMessages) { AppendChange(n.IsEditMessages, AppResources.EventLogPromotedEditMessages); } } if (o.IsDeleteMessages != n.IsDeleteMessages) { AppendChange(n.IsDeleteMessages, AppResources.EventLogPromotedDeleteMessages); } if (o.IsAddAdmins != n.IsAddAdmins) { AppendChange(n.IsAddAdmins, AppResources.EventLogPromotedAddAdmins); } if (_channel.IsMegaGroup) { if (o.IsBanUsers != n.IsBanUsers) { AppendChange(n.IsBanUsers, AppResources.EventLogPromotedBanUsers); } if (o.IsInviteUsers != n.IsInviteUsers) { AppendChange(n.IsInviteUsers, AppResources.EventLogPromotedAddUsers); } if (o.IsPinMessages != n.IsPinMessages) { AppendChange(n.IsPinMessages, AppResources.EventLogPromotedPinMessages); } } message.Message = builder.ToString(); result.Insert(0, message); } } if (response.Result.Events.Count < 50) { _hasMore = false; } return(result); } _viewModel.IsLoading = false; return(new TLMessageBase[0]); }