//--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ #region --Misc Methods (Public)-- public async Task UpdateAsync(string canteenId, bool force) { // Wait for the old update to finish first: if (updateTask is null || updateTask.IsCompleted) { updateTask = Task.Run(async() => { // Get current language: Language lang = CanteensDbContext.GetActiveLanguage(); if (lang is null) { Logger.Error("Failed to download dishes. No language available."); return; } Logger.Debug($"Dish language: {lang.Name}"); if (!force && CacheDbContext.IsCacheEntryValid(BuildCanteenDishUrl(canteenId, lang))) { Logger.Info("No need to fetch dishes. Cache is still valid."); return; } IEnumerable <Dish> dishes = await DownloadDishesAsync(canteenId, lang); if (!(dishes is null)) { using (CanteensDbContext ctx = new CanteensDbContext()) { ctx.RemoveRange(ctx.Dishes.Where(d => string.Equals(d.CanteenId, canteenId))); ctx.AddRange(dishes); } CacheDbContext.UpdateCacheEntry(BuildCanteenDishUrl(canteenId, lang), DateTime.Now.Add(MAX_TIME_IN_CACHE)); } }); } await updateTask.ConfAwaitFalse(); }
//--------------------------------------------------------Constructor:----------------------------------------------------------------\\ #region --Constructors-- #endregion //--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\ #region --Set-, Get- Methods-- private void MigrateActiveLanguage(List <Language> languages) { Language activeLang = CanteensDbContext.GetActiveLanguage(); if (activeLang is null) { bool foundEnglish = false; for (int i = 0; i < languages.Count(); i++) { if (string.Equals(languages[i].Name, "EN")) { languages[i].Active = true; foundEnglish = true; break; } } foreach (Language lang in languages) { if (string.Equals(lang.Name, "EN")) { lang.Active = true; foundEnglish = true; break; } } if (!foundEnglish) { Logger.Warn("English not found as language for setting it as default language for canteens in result."); languages.First().Active = true; } } else { bool foundActiveLanguage = false; foreach (Language lang in languages) { if (string.Equals(lang.Name, activeLang.Name)) { lang.Active = true; foundActiveLanguage = true; break; } } if (!foundActiveLanguage) { Logger.Warn($"Active language {activeLang.Name} not found as language for setting it as default language for canteens in result."); languages.First().Active = true; } } }
//--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ #region --Misc Methods (Public)-- public async Task <IEnumerable <Canteen> > UpdateCanteensAsync(bool force) { // Wait for the old update to finish first: if (!(updateCanteensTask is null) && !updateCanteensTask.IsCompleted) { return(await updateCanteensTask.ConfAwaitFalse()); } updateCanteensTask = Task.Run(async() => { // Get current language: Language lang = CanteensDbContext.GetActiveLanguage(); if (lang is null) { Logger.Error("Failed to download canteens. No language available."); return(new List <Canteen>()); } Logger.Debug($"Canteen language: {lang.Name}"); if (!force && CacheDbContext.IsCacheEntryValid(CANTEENS_URI_POSTDIX + '_' + lang.BaseUrl)) { Logger.Info("No need to fetch canteens. Cache is still valid."); using (CanteensDbContext ctx = new CanteensDbContext()) { return(ctx.Canteens.Include(ctx.GetIncludePaths(typeof(Canteen))).ToList()); } } IEnumerable <Canteen> canteens = await DownloadCanteensAsync(lang); if (!(canteens is null)) { using (CanteensDbContext ctx = new CanteensDbContext()) { ctx.RemoveRange(ctx.Canteens); ctx.AddRange(canteens); } CacheDbContext.UpdateCacheEntry(CANTEENS_URI_POSTDIX + '_' + lang.BaseUrl, DateTime.Now.Add(MAX_TIME_IN_CACHE)); return(canteens); } Logger.Info("Failed to retrieve canteens. Returning from DB."); using (CanteensDbContext ctx = new CanteensDbContext()) { return(ctx.Canteens.Include(ctx.GetIncludePaths(typeof(Canteen))).ToList()); } }); return(await updateCanteensTask.ConfAwaitFalse()); }