diff --git a/Models/Message.cs b/Models/Message.cs index e0267958..d7c91e46 100644 --- a/Models/Message.cs +++ b/Models/Message.cs @@ -22,4 +22,5 @@ public class Message public List Attachments { get; set; } public Account Author { get; set; } public Channel Channel { get; set; } + public Guid? ChannelId { get; set; } } diff --git a/Rememberer.cs b/Rememberer.cs index 018c8193..0a02a231 100644 --- a/Rememberer.cs +++ b/Rememberer.cs @@ -23,6 +23,10 @@ public static class Rememberer ch.ParentChannel.SubChannels ??= []; ch.ParentChannel.SubChannels.Add(ch); } + if (ch.Messages?.Count > 0) + { + Console.WriteLine($"{ch.DisplayName} got {ch.Messages.Count} messages"); + } } channelCacheDirty = false; dbAccessSemaphore.Release(); @@ -54,7 +58,7 @@ public static class Rememberer } public static Channel SearchChannel(Func predicate) { - if(channelCacheDirty) + if (channelCacheDirty) Task.Run(() => cacheChannels()).Wait(); return channels.FirstOrDefault(predicate); } @@ -66,6 +70,14 @@ public static class Rememberer dbAccessSemaphore.Release(); return toReturn; } + public static List SearchMessages(Expression> predicate) + { + List toReturn; + dbAccessSemaphore.Wait(); + toReturn = db.Messages.Where(predicate).ToList(); + dbAccessSemaphore.Release(); + return toReturn; + } public static User SearchUser(Expression> predicate) { User toReturn; @@ -92,7 +104,7 @@ public static class Rememberer } public static Channel RememberChannel(Channel toRemember) { - if(channelCacheDirty) + if (channelCacheDirty) Task.Run(() => cacheChannels()).Wait(); //so we always do 2 db trips? dbAccessSemaphore.Wait(); db.Update(toRemember); @@ -221,11 +233,14 @@ public static class Rememberer dbAccessSemaphore.Release(); return toReturn; } - public static Channel ChannelDetail(Guid Id) + public static Channel ChannelDetail(Guid Id, bool messages = false) { - if(channelCacheDirty) + if (channelCacheDirty) Task.Run(() => cacheChannels()).Wait(); - return channels.Find(c => c.Id == Id); + var ch = channels.Find(c => c.Id == Id); + if (messages) + ch.Messages = SearchMessages(m => m.ChannelId == ch.Id); + return ch; } public static Message MessageDetail(Guid Id) {