Split MariaDB message storage out into its own library.
This commit is contained in:
parent
8eff4127b5
commit
f1d4051fb5
23 changed files with 255 additions and 228 deletions
SharpChatCommon/Messages
63
SharpChatCommon/Messages/VirtualMessageStorage.cs
Normal file
63
SharpChatCommon/Messages/VirtualMessageStorage.cs
Normal file
|
@ -0,0 +1,63 @@
|
|||
using System.Text.Json;
|
||||
|
||||
namespace SharpChat.Messages;
|
||||
|
||||
public class VirtualMessageStorage : MessageStorage {
|
||||
private readonly Dictionary<long, Message> Messages = [];
|
||||
|
||||
public Task LogMessage(
|
||||
long id,
|
||||
string type,
|
||||
string channelName,
|
||||
string senderId,
|
||||
string senderName,
|
||||
ColourInheritable senderColour,
|
||||
int senderRank,
|
||||
string senderNick,
|
||||
UserPermissions senderPerms,
|
||||
object? data = null,
|
||||
MessageFlags flags = MessageFlags.None
|
||||
) {
|
||||
Messages.Add(
|
||||
id,
|
||||
new(
|
||||
id,
|
||||
type,
|
||||
long.TryParse(senderId, out long senderId64) && senderId64 > 0 ? senderId : null,
|
||||
senderName,
|
||||
senderColour,
|
||||
senderRank,
|
||||
senderPerms,
|
||||
senderNick,
|
||||
DateTimeOffset.Now,
|
||||
null,
|
||||
channelName,
|
||||
JsonDocument.Parse(data == null ? "{}" : JsonSerializer.Serialize(data)),
|
||||
flags
|
||||
)
|
||||
);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task<Message?> GetMessage(long seqId) {
|
||||
return Task.FromResult(Messages.TryGetValue(seqId, out Message? evt) ? evt : null);
|
||||
}
|
||||
|
||||
public Task DeleteMessage(Message evt) {
|
||||
Messages.Remove(evt.Id);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task<IEnumerable<Message>> GetMessages(string channelName, int amount = 20, int offset = 0) {
|
||||
IEnumerable<Message> subset = Messages.Values.Where(ev => ev.ChannelName == channelName);
|
||||
|
||||
int start = subset.Count() - offset - amount;
|
||||
if(start < 0) {
|
||||
amount += start;
|
||||
start = 0;
|
||||
}
|
||||
|
||||
return Task.FromResult(subset.Skip(start).Take(amount).ToArray() as IEnumerable<Message>);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue