public async Task GetDataFromGoogleBooks() { ClearAll(); // not a real test yet.... var url = BooksService.GetSearchUrl("MonoTouch"); var json = new MvxJsonConverter(); var client = new MvxJsonRestClient { JsonConverterProvider = () => json }; var request = new MvxRestRequest(url); MvxDecodedRestResponse <BookSearchResult> theResponse = null; Exception exception = null; theResponse = await client.MakeRequestForAsync <BookSearchResult>(request); Assert.IsNotNull(theResponse); Assert.IsNull(exception); Assert.IsNotNull(theResponse.Result); Assert.AreEqual(HttpStatusCode.OK, theResponse.StatusCode); Assert.IsTrue(theResponse.Result.items.Count == 10); Assert.IsTrue(theResponse.Result.items[0].ToString().Contains("MonoTouch")); }
public NoteDataService(IMvxFileStore mvxFileStorage) { filePath = "noteStorage.json"; converter = new MvxJsonConverter(); storage = mvxFileStorage; if (!storage.Exists(filePath)) { storage.WriteFile(filePath, converter.SerializeObject(Enumerable.Empty<Note>())); } }
public async Task LoadRemoteAppSettings(bool overrideCache = false) { var remoteSettings = await GetRemoteAppSettings(overrideCache); if(remoteSettings != null) try { var fields = typeof(AppSettings).GetRuntimeFields(); var a = new Dictionary<string, object>(); MvxJsonConverter mvxJsonConverter = new MvxJsonConverter(); a = mvxJsonConverter.DeserializeObject<Dictionary<string,object>>(remoteSettings); foreach (FieldInfo field in fields) { var value = a[field.Name]; //JSON.Net converts all numeric values to Int64 which breaks things =) //http://stackoverflow.com/questions/16683784/expression-convert-object-of-type-system-int64-cannot-be-converted-to-type-s if (value.GetType() == typeof(Int64)) value = Convert.ToInt32(value); else if(value.GetType() == typeof(JArray)) { if (field.FieldType == typeof(UrlSource[])) { JArray jArray = value as JArray; List<UrlSource> urlSourceList = new List<UrlSource>(); foreach (var item in jArray) urlSourceList.Add(new UrlSource { Url = item["Url"].ToString(), Group = item["Group"].ToString(), Type = item["Type"].ToString() }); value = urlSourceList.ToArray(); } else if (field.FieldType == typeof(string[])) { JArray jArray = value as JArray; List<string> stringList = new List<string>(); foreach (var item in jArray) stringList.Add(item.ToString()); value = stringList.ToArray(); } } field.SetValue(null, value); } } catch(Exception e) { ServiceLocator.MessageService.ShowErrorAsync("Error Loading RemoteAppSettings: " + e.Message, "RemoteAppSettings Error"); } }
public void Should_process_successful_children() { var factory = new Cirrious.MvvmCross.Plugins.Sqlite.Wpf.MvxWpfSqLiteConnectionFactory(); var connection = factory.Create("queue.db"); connection.CreateTable<QueueEntity>(); var entities = connection.Table<QueueEntity>().ToList(); foreach (var entity in entities) { connection.Delete(entity); } var jsonConverter = new MvxJsonConverter(); IMvxQueue queue = new MvxQueue(factory, jsonConverter); var saveToLocalDatabaseCommand = new SaveToLocalDatabaseCommand { Message = "Test" }; var saveToRemoteServiceCommand = new FakeCommand(); saveToLocalDatabaseCommand.AddSuccessCommand(saveToRemoteServiceCommand); queue.Push(saveToLocalDatabaseCommand); queue.ProcessQueue(); }
public async Task LoadRemoteAppSettings(bool overrideCache = false) { var remoteSettings = await GetRemoteAppSettings(overrideCache); if (remoteSettings != null) { try { var fields = typeof(AppSettings).GetRuntimeFields(); var a = new Dictionary <string, object>(); MvxJsonConverter mvxJsonConverter = new MvxJsonConverter(); a = mvxJsonConverter.DeserializeObject <Dictionary <string, object> >(remoteSettings); foreach (FieldInfo field in fields) { var value = a[field.Name]; //JSON.Net converts all numeric values to Int64 which breaks things =) //http://stackoverflow.com/questions/16683784/expression-convert-object-of-type-system-int64-cannot-be-converted-to-type-s if (value.GetType() == typeof(Int64)) { value = Convert.ToInt32(value); } else if (value.GetType() == typeof(JArray)) { if (field.FieldType == typeof(UrlSource[])) { JArray jArray = value as JArray; List <UrlSource> urlSourceList = new List <UrlSource>(); foreach (var item in jArray) { urlSourceList.Add(new UrlSource { Url = item["Url"].ToString(), Group = item["Group"].ToString(), Type = item["Type"].ToString() }); } value = urlSourceList.ToArray(); } else if (field.FieldType == typeof(string[])) { JArray jArray = value as JArray; List <string> stringList = new List <string>(); foreach (var item in jArray) { stringList.Add(item.ToString()); } value = stringList.ToArray(); } } field.SetValue(null, value); } } catch (Exception e) { ServiceLocator.MessageService.ShowErrorAsync("Error Loading RemoteAppSettings: " + e.Message, "RemoteAppSettings Error"); } } }
public void SetUp() { _jsonConverter = new MvxJsonConverter(); _mockDataClient = new MockCampDataClient(); _fileManager = new InMemoryFileManager(); }
/// <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; }