using System; using System.Collections.Generic; using System.Diagnostics; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Plugin.Connectivity; namespace ezxamairn { public class CloudDataStore : IDataStore { HttpClient client; IEnumerable items; public CloudDataStore() { client = new HttpClient(); client.BaseAddress = new Uri($"{App.BackendUrl}/"); items = new List(); } public async Task> GetItemsAsync(bool forceRefresh = false) { if (forceRefresh && CrossConnectivity.Current.IsConnected) { var json = await client.GetStringAsync($"api/item"); items = await Task.Run(() => JsonConvert.DeserializeObject>(json)); } return items; } public async Task GetItemAsync(string id) { if (id != null && CrossConnectivity.Current.IsConnected) { var json = await client.GetStringAsync($"api/item/{id}"); return await Task.Run(() => JsonConvert.DeserializeObject(json)); } return null; } public async Task AddItemAsync(Item item) { if (item == null || !CrossConnectivity.Current.IsConnected) return false; var serializedItem = JsonConvert.SerializeObject(item); var response = await client.PostAsync($"api/item", new StringContent(serializedItem, Encoding.UTF8, "application/json")); return response.IsSuccessStatusCode; } public async Task UpdateItemAsync(Item item) { if (item == null || item.Id == null || !CrossConnectivity.Current.IsConnected) return false; var serializedItem = JsonConvert.SerializeObject(item); var buffer = Encoding.UTF8.GetBytes(serializedItem); var byteContent = new ByteArrayContent(buffer); var response = await client.PutAsync(new Uri($"api/item/{item.Id}"), byteContent); return response.IsSuccessStatusCode; } public async Task DeleteItemAsync(string id) { if (string.IsNullOrEmpty(id) && !CrossConnectivity.Current.IsConnected) return false; var response = await client.DeleteAsync($"api/item/{id}"); return response.IsSuccessStatusCode; } } }