From da9dc854bf533491023a724f6a71df46c9b5dbe0 Mon Sep 17 00:00:00 2001 From: Butterscotch! Date: Wed, 31 Jan 2024 03:43:28 -0500 Subject: [PATCH] Add pagination prefix & fix expiration timing --- .../MessageSystem/MessageQueueTests.cs | 2 +- ButterSTT/Config/STTConfig.cs | 4 +- ButterSTT/MessageSystem/MessageQueue.cs | 37 +++++++++++++++---- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/ButterSTT.Tests/MessageSystem/MessageQueueTests.cs b/ButterSTT.Tests/MessageSystem/MessageQueueTests.cs index 235cde5..c3f9018 100644 --- a/ButterSTT.Tests/MessageSystem/MessageQueueTests.cs +++ b/ButterSTT.Tests/MessageSystem/MessageQueueTests.cs @@ -121,7 +121,7 @@ public void PageDequeueTest() queue.FinishCurrentParagraph(); curMessage = queue.GetCurrentMessage(); _output.WriteLine($"Third messages: \"{curMessage}\""); - Assert.Equal($"message. {thirdMessage}", curMessage); + Assert.Equal($"-message. {thirdMessage}", curMessage); } [Theory()] diff --git a/ButterSTT/Config/STTConfig.cs b/ButterSTT/Config/STTConfig.cs index ec07edc..882df59 100644 --- a/ButterSTT/Config/STTConfig.cs +++ b/ButterSTT/Config/STTConfig.cs @@ -37,10 +37,10 @@ public record STTConfig public int RealtimeQueuePadding { get; set; } = 24; [JsonPropertyName("word_time_s")] - public double WordTimeS { get; set; } = 5.0; + public double WordTimeS { get; set; } = 0.3; [JsonPropertyName("hard_word_time_s")] - public double HardWordTimeS { get; set; } = 16.0; + public double HardWordTimeS { get; set; } = 8.0; [JsonPropertyName("page_context")] public int PageContext { get; set; } = 1; diff --git a/ButterSTT/MessageSystem/MessageQueue.cs b/ButterSTT/MessageSystem/MessageQueue.cs index f93e217..107bb0c 100644 --- a/ButterSTT/MessageSystem/MessageQueue.cs +++ b/ButterSTT/MessageSystem/MessageQueue.cs @@ -45,6 +45,8 @@ public class MessageQueue private (int sentence, int word) _curIndex; private bool _atCurEnd = false; + private bool _pagePrefix = false; + public Paragraph CurParagraph { get @@ -263,9 +265,6 @@ public void QueueParagraphToFit(int padding = 0) } } - private static DateTime ComputeExpiration(TimeSpan span) => - span >= TimeSpan.MaxValue ? DateTime.MaxValue : DateTime.UtcNow + span; - private void ExpireWords() { var dequeueCount = 0; @@ -292,6 +291,7 @@ private void PaginateWords() // Wait until the last word on the full page is expired if (!hardExpired && (!IsMessageFull || DateTime.UtcNow < lastWord.ExpiryTime)) return; + var removedAny = false; while ( _messageWordQueue.Count > 0 && ( @@ -305,6 +305,17 @@ private void PaginateWords() ) { _curMessageLength -= _messageWordQueue.Dequeue().Text.Length; + removedAny = true; + } + if (_messageWordQueue.Count > 0 && removedAny) + { + _pagePrefix = true; + _curMessageLength += 1; + } + else if (_messageWordQueue.Count <= 0 && _pagePrefix) + { + _pagePrefix = false; + _curMessageLength -= 1; } } @@ -327,6 +338,11 @@ private void DequeueMessages() } } + private static DateTime ComputeExpiration(DateTime time, TimeSpan span) => + time >= DateTime.MaxValue || span >= TimeSpan.MaxValue + ? DateTime.MaxValue + : time + span; + private void ProgressWordQueue() { // Make sure there is enough room to fit a new word in the message, @@ -341,11 +357,15 @@ private void ProgressWordQueue() ) { var word = _wordQueue.Dequeue(); + var lastTime = _messageWordQueue + .Select(w => w.ExpiryTime) + .LastOrDefault(DateTime.UtcNow); + var baseTime = DateTime.UtcNow > lastTime ? DateTime.UtcNow : lastTime; _messageWordQueue.Enqueue( new MessageWord( word, - ComputeExpiration(WordTime), - ComputeExpiration(HardWordTime) + ComputeExpiration(baseTime, WordTime), + ComputeExpiration(baseTime, HardWordTime) ) ); _curMessageLength += word.Length; @@ -380,11 +400,14 @@ public string GetCurrentMessage() return false; }) ); - return (message + paragraph).Trim() + return (_pagePrefix ? "-" : "") + + (message + paragraph).Trim() + (_curParagraph.Length > totalTaken ? "-" : ""); } - return message.Trim() + (_wordQueue.Count > 0 ? "-" : ""); + return (_pagePrefix ? "-" : "") + + message.Trim() + + (_wordQueue.Count > 0 ? "-" : ""); } } }