Skip to content

Commit

Permalink
Don't hard expire text with current paragraph
Browse files Browse the repository at this point in the history
  • Loading branch information
ButterscotchV committed Jan 31, 2024
1 parent 112355f commit 687d9f6
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 25 deletions.
102 changes: 80 additions & 22 deletions ButterSTT.Tests/MessageSystem/MessageQueueTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ public MessageQueueTests(ITestOutputHelper output)
}

[Fact()]
public void ScrollTimeoutTest()
public void ScrollMaxDequeueTest()
{
var queue = new MessageQueue
{
DequeueSystem = DequeueSystems.Scrolling,
MaxWordsDequeued = int.MaxValue,
MaxWordsDequeued = 2,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.Zero
HardWordTime = TimeSpan.MaxValue
};

var firstMessage = "Testing the queue system.";
Expand All @@ -36,18 +36,18 @@ public void ScrollTimeoutTest()
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal(secondMessage, curMessage);
Assert.Equal($"queue system. {secondMessage}", curMessage);
}

[Fact()]
public void ScrollMaxDequeueTest()
public void ScrollHardWordTest()
{
var queue = new MessageQueue
{
DequeueSystem = DequeueSystems.Scrolling,
MaxWordsDequeued = 2,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.MaxValue
HardWordTime = TimeSpan.Zero
};

var firstMessage = "Testing the queue system.";
Expand All @@ -62,18 +62,18 @@ public void ScrollMaxDequeueTest()
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal($"queue system. {secondMessage}", curMessage);
Assert.Equal(secondMessage, curMessage);
}

[Fact()]
public void ScrollHardWordTest()
public void PageDequeueTest()
{
var queue = new MessageQueue
{
DequeueSystem = DequeueSystems.Scrolling,
MaxWordsDequeued = 2,
MessageLength = 47,
DequeueSystem = DequeueSystems.Pagination,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.Zero
HardWordTime = TimeSpan.MaxValue
};

var firstMessage = "Testing the queue system.";
Expand All @@ -87,19 +87,25 @@ public void ScrollHardWordTest()
queue.CurParagraph = EnglishTextParser.ParseParagraph(secondMessage);
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal(secondMessage, curMessage);
_output.WriteLine($"Both messages: \"{curMessage}\"");
Assert.Equal($"{firstMessage} {secondMessage}", curMessage);

var thirdMessage = "Testing a third time.";
queue.CurParagraph = EnglishTextParser.ParseParagraph(thirdMessage);
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Third messages: \"{curMessage}\"");
Assert.Equal($"-message. {thirdMessage}", curMessage);
}

[Fact()]
public void PageDequeueTest()
public void PageRealtimeHardWordTest()
{
var queue = new MessageQueue
{
MessageLength = 47,
DequeueSystem = DequeueSystems.Pagination,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.MaxValue
HardWordTime = TimeSpan.Zero
};

var firstMessage = "Testing the queue system.";
Expand All @@ -111,17 +117,69 @@ public void PageDequeueTest()

var secondMessage = "Second test message.";
queue.CurParagraph = EnglishTextParser.ParseParagraph(secondMessage);
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Both messages: \"{curMessage}\"");
Assert.Equal($"{firstMessage} {secondMessage}", curMessage);
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal(secondMessage, curMessage);
}

var thirdMessage = "Testing a third time.";
[Fact()]
public void PageRealtimeHardWordPersistTest()
{
var queue = new MessageQueue
{
MessageLength = 46,
DequeueSystem = DequeueSystems.Pagination,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.Zero
};

var firstMessage = "Testing the queue system.";
queue.CurParagraph = EnglishTextParser.ParseParagraph(firstMessage);
queue.FinishCurrentParagraph();

var secondMessage = "Second test message ";
queue.CurParagraph = EnglishTextParser.ParseParagraph(secondMessage);
var curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal($"{firstMessage} {secondMessage.Trim()}", curMessage);

var thirdMessage = "Second test message that is just now finished!";
queue.CurParagraph = EnglishTextParser.ParseParagraph(thirdMessage);
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Third message: \"{curMessage}\"");
Assert.Equal($"{firstMessage} {secondMessage.Trim()}-", curMessage);

curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Third message expired: \"{curMessage}\"");
Assert.Equal("that is just now finished!", curMessage);
}

[Theory()]
[InlineData(DequeueSystems.Scrolling)]
[InlineData(DequeueSystems.Pagination)]
public void TimeoutTest(DequeueSystems dequeueSystem)
{
var queue = new MessageQueue
{
DequeueSystem = dequeueSystem,
MaxWordsDequeued = int.MaxValue,
WordTime = TimeSpan.Zero,
HardWordTime = TimeSpan.Zero
};

var firstMessage = "Testing the queue system.";
queue.CurParagraph = EnglishTextParser.ParseParagraph(firstMessage);
queue.FinishCurrentParagraph();
var curMessage = queue.GetCurrentMessage();
_output.WriteLine($"First message: \"{curMessage}\"");
Assert.Equal(firstMessage, curMessage);

var secondMessage = "Second test message.";
queue.CurParagraph = EnglishTextParser.ParseParagraph(secondMessage);
queue.FinishCurrentParagraph();
curMessage = queue.GetCurrentMessage();
_output.WriteLine($"Third messages: \"{curMessage}\"");
Assert.Equal($"-message. {thirdMessage}", curMessage);
_output.WriteLine($"Second message: \"{curMessage}\"");
Assert.Equal(secondMessage, curMessage);
}

[Theory()]
Expand Down
23 changes: 20 additions & 3 deletions ButterSTT/MessageSystem/MessageQueue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,16 @@ public class MessageQueue
private (int sentence, int word) _curIndex;
private bool _atCurEnd = false;

/// <summary>
/// Keeps track of whether the current message should have a prefix.
/// </summary>
private bool _pagePrefix = false;

/// <summary>
/// Keeps track of whether text is currently being written, if true then don't hard expire the current message.
/// </summary>
private bool _hadTextLast = false;

public Paragraph CurParagraph
{
get
Expand Down Expand Up @@ -79,6 +87,8 @@ public bool IsFinished
}
}

public int AvailableMessageLength => MessageLength - _curMessageLength;

public (int sentence, int word)? NextIndex()
{
if (_curParagraph.Sentences.Length <= 0)
Expand Down Expand Up @@ -217,7 +227,7 @@ public void QueueParagraphToFit(int padding = 0)
return;

var paragraphLen = ParagraphLengthFromIndex();
var availableSpace = MessageLength - _curMessageLength;
var availableSpace = AvailableMessageLength;

switch (DequeueSystem)
{
Expand Down Expand Up @@ -294,8 +304,12 @@ private void PaginateWords()
var lastWord = _messageWordQueue.Last();
var hardExpired = DateTime.UtcNow >= lastWord.HardExpiryTime;
// Wait until the last word on the full page is expired
if (!hardExpired && (!IsMessageFull || DateTime.UtcNow < lastWord.ExpiryTime))
if (
(!hardExpired || _hadTextLast)
&& (!IsMessageFull || DateTime.UtcNow < lastWord.ExpiryTime)
)
return;

var removedAny = false;
while (
_messageWordQueue.Count > 0
Expand All @@ -312,6 +326,7 @@ private void PaginateWords()
_curMessageLength -= _messageWordQueue.Dequeue().Text.Length;
removedAny = true;
}

if (_messageWordQueue.Count <= 0)
{
if (removedAny && !hardExpired && UsePagePrefix)
Expand Down Expand Up @@ -395,12 +410,13 @@ public string GetCurrentMessage()
var showSuffix = _wordQueue.Count > 0;

// If there's no queue and there's new words to display
_hadTextLast = false;
if (_wordQueue.Count <= 0 && _curParagraph.Length > 0)
{
var paragraphLength = ParagraphLengthFromIndex();
if (paragraphLength > 0)
{
var availableLength = MessageLength - _curMessageLength;
var availableLength = AvailableMessageLength;
var totalTaken = 0;
var paragraph = string.Concat(
ParagraphWordEnumerator()
Expand All @@ -417,6 +433,7 @@ public string GetCurrentMessage()
);
message += paragraph;
showSuffix = paragraphLength > totalTaken;
_hadTextLast = totalTaken > 0;
}
}

Expand Down

0 comments on commit 687d9f6

Please sign in to comment.