public NoteDataService(IMvxFileStore mvxFileStorage) { filePath = "noteStorage.json"; converter = new MvxJsonConverter(); storage = mvxFileStorage; if (!storage.Exists(filePath)) { storage.WriteFile(filePath, converter.SerializeObject(Enumerable.Empty<Note>())); } }
private async Task LoadDataService(IDataService dataService, bool overrideCache = false) { List <Item> currentItems = new List <Item>(); bool loadedFromCache = false; if (fileStore != null) { string lastRefreshText; if (fileStore.TryReadTextFile("LastRefresh-" + dataService.GetType().ToString(), out lastRefreshText)) { var lastRefreshTime = DateTime.Parse(lastRefreshText); var timeSinceLastRefreshInMinutes = (DateTime.Now - lastRefreshTime).TotalMinutes; //has cache expired? if (overrideCache || timeSinceLastRefreshInMinutes > AppSettings.CacheIntervalInMinutes) { currentItems = await dataService.GetItems(); } else //load from cache { string cachedItemsText; pool.WaitOne(); try { if (fileStore.TryReadTextFile("CachedItems-" + dataService.GetType().ToString(), out cachedItemsText)) { currentItems = mvxJsonConverter.DeserializeObject <List <Item> >(cachedItemsText); loadedFromCache = true; } } catch { ServiceLocator.MessageService.ShowErrorAsync("Error Deserializing " + dataService.GetType().ToString(), "Error loading cache"); } finally { pool.Release(); } } } else { currentItems = await dataService.GetItems(); } } try { if (!loadedFromCache && currentItems.Count > 0) { if (fileStore.Exists("CachedItems-" + dataService.GetType().ToString())) { fileStore.DeleteFile("CachedItems-" + dataService.GetType().ToString()); } if (fileStore.Exists("LastRefresh-" + dataService.GetType().ToString())) { fileStore.DeleteFile("LastRefresh-" + dataService.GetType().ToString()); } fileStore.WriteFile("CachedItems-" + dataService.GetType().ToString(), mvxJsonConverter.SerializeObject(currentItems)); fileStore.WriteFile("LastRefresh-" + dataService.GetType().ToString(), DateTime.Now.ToString()); } items.AddRange(currentItems); } catch { ServiceLocator.MessageService.ShowErrorAsync("Error retrieving items from " + dataService.GetType().ToString() + "\n\nPossible Causes:\nNo internet connection\nRemote Service unavailable", "Application Error"); } }
/// <summary> /// Loads Items from our Azure Mobile Service and sort into grouped enumerable /// </summary> private async void LoadItems(bool overrideCache = false) { IsBusy = true; List<Item> items = new List<Item>(); MvxJsonConverter mvxJsonConverter = new MvxJsonConverter(); var fileStore = Mvx.Resolve<IMvxFileStore>(); foreach (var dataService in EnabledDataServices) { List<Item> currentItems = new List<Item>(); bool loadedFromCache = false; if (fileStore != null) { string lastRefreshText; if (fileStore.TryReadTextFile("LastRefresh-" + dataService.GetType().ToString(), out lastRefreshText)) { var lastRefreshTime = DateTime.Parse(lastRefreshText); //has cache expired? if (overrideCache || (DateTime.Now - lastRefreshTime).Minutes > AppSettings.CacheIntervalInMinutes) { currentItems = await dataService.GetItems(); } else //load from cache { string cachedItemsText; if (fileStore.TryReadTextFile("CachedItems-" + dataService.GetType().ToString(), out cachedItemsText)) { currentItems = mvxJsonConverter.DeserializeObject<List<Item>>(cachedItemsText); loadedFromCache = true; } } } else { currentItems = await dataService.GetItems(); } } try { if (!loadedFromCache && currentItems.Count > 0) { if (fileStore.Exists("CachedItems-" + dataService.GetType().ToString())) fileStore.DeleteFile("CachedItems-" + dataService.GetType().ToString()); if (fileStore.Exists("LastRefresh-" + dataService.GetType().ToString())) fileStore.DeleteFile("LastRefresh-" + dataService.GetType().ToString()); fileStore.WriteFile("CachedItems-" + dataService.GetType().ToString(), mvxJsonConverter.SerializeObject(currentItems)); fileStore.WriteFile("LastRefresh-" + dataService.GetType().ToString(), DateTime.Now.ToString()); } foreach (var currentItem in currentItems) { if (AppSettings.ForceYoutubeVideosToLoadFullScreen) currentItem.Description = currentItem.Description.Replace("/watch?v=", "/watch_popup?v="); items.Add(currentItem); } } catch { ServiceLocator.MessageService.ShowErrorAsync("Error retrieving items from Remote Service. \n\nPossible Causes:\nNo internet connection\nRemote Service unavailable", "Application Error"); } } ItemGroups = new List<Group<Item>>(from item in items group item by item.Group into grp orderby grp.Key select new Group<Item>(grp.Key, grp)).ToList(); IsBusy = false; }
/// <summary> /// Loads Items from our Azure Mobile Service and sort into grouped enumerable /// </summary> private async void LoadItems(bool overrideCache = false) { IsBusy = true; List <Item> items = new List <Item>(); MvxJsonConverter mvxJsonConverter = new MvxJsonConverter(); var fileStore = Mvx.Resolve <IMvxFileStore>(); foreach (var dataService in EnabledDataServices) { List <Item> currentItems = new List <Item>(); bool loadedFromCache = false; if (fileStore != null) { string lastRefreshText; if (fileStore.TryReadTextFile("LastRefresh-" + dataService.GetType().ToString(), out lastRefreshText)) { var lastRefreshTime = DateTime.Parse(lastRefreshText); //has cache expired? if (overrideCache || (DateTime.Now - lastRefreshTime).Minutes > AppSettings.CacheIntervalInMinutes) { currentItems = await dataService.GetItems(); } else //load from cache { string cachedItemsText; if (fileStore.TryReadTextFile("CachedItems-" + dataService.GetType().ToString(), out cachedItemsText)) { currentItems = mvxJsonConverter.DeserializeObject <List <Item> >(cachedItemsText); loadedFromCache = true; } } } else { currentItems = await dataService.GetItems(); } } try { if (!loadedFromCache && currentItems.Count > 0) { if (fileStore.Exists("CachedItems-" + dataService.GetType().ToString())) { fileStore.DeleteFile("CachedItems-" + dataService.GetType().ToString()); } if (fileStore.Exists("LastRefresh-" + dataService.GetType().ToString())) { fileStore.DeleteFile("LastRefresh-" + dataService.GetType().ToString()); } fileStore.WriteFile("CachedItems-" + dataService.GetType().ToString(), mvxJsonConverter.SerializeObject(currentItems)); fileStore.WriteFile("LastRefresh-" + dataService.GetType().ToString(), DateTime.Now.ToString()); } foreach (var currentItem in currentItems) { if (AppSettings.ForceYoutubeVideosToLoadFullScreen) { currentItem.Description = currentItem.Description.Replace("/watch?v=", "/watch_popup?v="); } items.Add(currentItem); } } catch { ServiceLocator.MessageService.ShowErrorAsync("Error retrieving items from Remote Service. \n\nPossible Causes:\nNo internet connection\nRemote Service unavailable", "Application Error"); } } ItemGroups = new List <Group <Item> >(from item in items group item by item.Group into grp orderby grp.Key select new Group <Item>(grp.Key, grp)).ToList(); IsBusy = false; }