From e0ec1332098a7778152ae01d09a5f4a635cfd73e Mon Sep 17 00:00:00 2001 From: FlorianDahn Date: Fri, 1 Oct 2021 18:35:05 +0200 Subject: [PATCH 1/3] AutoCleanForm FIX - adding MessageDeleted event to AutoCleanForm for catching messages getting deleted outside of AutoCleanForm - added OnMessageDelete invoke to DeleteMessage in DeviceSession --- TelegramBotBase/Form/AutoCleanForm.cs | 11 +++++++++-- TelegramBotBase/Sessions/DeviceSession.cs | 12 +++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/TelegramBotBase/Form/AutoCleanForm.cs b/TelegramBotBase/Form/AutoCleanForm.cs index 5617775..4acc8ee 100644 --- a/TelegramBotBase/Form/AutoCleanForm.cs +++ b/TelegramBotBase/Form/AutoCleanForm.cs @@ -49,8 +49,15 @@ namespace TelegramBotBase.Form this.Device.MessageSent += Device_MessageSent; this.Device.MessageReceived += Device_MessageReceived; + + this.Device.MessageDeleted += Device_MessageDeleted; } + private void Device_MessageDeleted(object sender, MessageDeletedEventArgs e) + { + if (OldMessages.Contains(e.MessageId)) + OldMessages.Remove(e.MessageId); + } private void Device_MessageReceived(object sender, MessageReceivedEventArgs e) { @@ -157,7 +164,7 @@ namespace TelegramBotBase.Form retryAfterTask = Task.Delay(retryAfterSeconds * 1000); } - deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); + //deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x)); if (retryAfterTask != null) @@ -190,7 +197,7 @@ namespace TelegramBotBase.Form retryAfterTask = Task.Delay(retryAfterSeconds * 1000); } - deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); + //deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x)); if (retryAfterTask != null) diff --git a/TelegramBotBase/Sessions/DeviceSession.cs b/TelegramBotBase/Sessions/DeviceSession.cs index 0e0ce98..cf3a5c4 100644 --- a/TelegramBotBase/Sessions/DeviceSession.cs +++ b/TelegramBotBase/Sessions/DeviceSession.cs @@ -644,18 +644,12 @@ namespace TelegramBotBase.Sessions /// public virtual async Task DeleteMessage(int messageId = -1) { - try - { - await RAW(a => a.DeleteMessageAsync(this.DeviceId, messageId)); - return true; - } - catch (ApiRequestException) - { + await RAW(a => a.DeleteMessageAsync(this.DeviceId, messageId)); - } + OnMessageDeleted(new MessageDeletedEventArgs(messageId)); - return false; + return true; } /// From d2ae08771efa7205daf900452fbf1b59706eb277 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 4 Oct 2021 21:55:41 +0300 Subject: [PATCH 2/3] Fix documentation inaccuracy --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 67379a4..936392b 100644 --- a/README.md +++ b/README.md @@ -169,11 +169,9 @@ public class StartForm : FormBase } - //Gets invoked during Navigation to this form - public override async Task Init(params object[] param) - { - - } + //Gets invoked during Navigation to this form + + //Init() got replaced with event handler //Opened() got replaced with event handler From 8e29652148cf634573e6b9b620b5c0e0a5b07cf7 Mon Sep 17 00:00:00 2001 From: FlorianDahn Date: Sun, 17 Oct 2021 15:39:31 +0200 Subject: [PATCH 3/3] Fixing possible Deadlock in AutoCleanForm --- TelegramBotBase/Form/AutoCleanForm.cs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/TelegramBotBase/Form/AutoCleanForm.cs b/TelegramBotBase/Form/AutoCleanForm.cs index 4acc8ee..7fd9200 100644 --- a/TelegramBotBase/Form/AutoCleanForm.cs +++ b/TelegramBotBase/Form/AutoCleanForm.cs @@ -150,8 +150,15 @@ namespace TelegramBotBase.Form { parallelQuery.ForAll(i => { - Device.DeleteMessage(i).GetAwaiter().GetResult(); - deletedMessages.Add(i); + try + { + Device.DeleteMessage(i).GetAwaiter().GetResult(); + deletedMessages.Add(i); + } + catch (ApiRequestException req) when (req.ErrorCode == 400) + { + deletedMessages.Add(i); + } }); } catch (AggregateException ex) @@ -160,10 +167,10 @@ namespace TelegramBotBase.Form var retryAfterSeconds = ex.InnerExceptions .Where(e => e is ApiRequestException apiEx && apiEx.ErrorCode == 429) - .Max(e =>(int?) ((ApiRequestException)e).Parameters.RetryAfter) ?? 0; + .Max(e => (int?)((ApiRequestException)e).Parameters.RetryAfter) ?? 0; retryAfterTask = Task.Delay(retryAfterSeconds * 1000); } - + //deletedMessages.AsParallel().ForAll(i => Device.OnMessageDeleted(new MessageDeletedEventArgs(i))); oldMessages = oldMessages.Where(x => !deletedMessages.Contains(x)); @@ -183,8 +190,15 @@ namespace TelegramBotBase.Form { parallelQuery.ForAll(i => { - Device.DeleteMessage(i).GetAwaiter().GetResult(); - deletedMessages.Add(i); + try + { + Device.DeleteMessage(i).GetAwaiter().GetResult(); + deletedMessages.Add(i); + } + catch (ApiRequestException req) when (req.ErrorCode == 400) + { + deletedMessages.Add(i); + } }); } catch (AggregateException ex)