// Remove the updated threads from session, so a fresh version can be fetched again. public void OnThreadUpdatedCacheHandler(Types.ConvThreadCategory category = Types.ConvThreadCategory.Unknown, int officialCoinId = 0, int threadId = 0) { if (_memoryCache.TryGetValue(Constant.Session.GlobalThreadsByCategory, out List <ConversationFetchData> fetchData)) { if (fetchData.IsNullOrEmpty()) { return; } if (threadId > 0) { if (fetchData.Any(x => x.Results.Any(t => t.ThreadId == threadId))) { fetchData.RemoveAll(x => x.Results.Any(t => t.ThreadId == threadId)); _memoryCache.Set(Constant.Session.GlobalThreadsByCategory, fetchData, TimeSpan.FromHours(24)); } } else if (fetchData.Any(x => x.Category == category && x.OfficialCoinId == officialCoinId)) { ConversationFetchData desiredResult = fetchData.First(x => x.Category == category && x.OfficialCoinId == officialCoinId); fetchData.Remove(desiredResult); _memoryCache.Set(Constant.Session.GlobalThreadsByCategory, fetchData, TimeSpan.FromHours(24)); } } }
public async Task <List <BBThread> > GetThreadsByCategory(int take, Types.ConvThreadCategory category, int officialCoinId = 0) { if (_memoryCache.TryGetValue(Constant.Session.GlobalThreadsByCategory, out List <ConversationFetchData> fetchData)) { if (!fetchData.IsNullOrEmpty() && fetchData.Any(x => x.Take == take && x.Category == category && x.OfficialCoinId == officialCoinId)) { // This results already exist. ConversationFetchData desiredResult = fetchData.First(x => x.Take == take && x.Category == category && x.OfficialCoinId == officialCoinId); return(desiredResult.Results); } } // Results does not exist, or fetchData itself is non-existant. if (fetchData.IsNullOrEmpty()) { fetchData = new List <ConversationFetchData>(); } List <BBThread> results = await CommunityLogic.GetMessageThreads(50, Types.ConvThreadCategory.MainDashboard, CurrentUser, officialCoinId : officialCoinId); fetchData.Add(new ConversationFetchData { Take = take, Category = category, OfficialCoinId = officialCoinId, Results = results }); _memoryCache.Set(Constant.Session.GlobalThreadsByCategory, fetchData, TimeSpan.FromHours(24)); return(results); }