public async Task <string> PersistAsync(Entry entry) { if (entry == null) { return(null); } if (IsLocalMode) { return(await _fallbackPersister.PersistAsync(entry)); } try { var entryJson = JsonConvert.SerializeObject(entry); var client = GetClient(); var content = new StringContent(entryJson, Encoding.UTF8, "application/json"); var response = await client.PutAsync("/api/entries", content); if (response.IsSuccessStatusCode) { return(entryJson); } else { IsLocalMode = true; } } catch (Exception e) { Debug.WriteLine(e.Message); IsLocalMode = true; } if (IsLocalMode) { return(await _fallbackPersister.PersistAsync(entry)); } ; return(null); }
private async Task ChangeStateAsync(Func <IWatcherState> action) { var entry = await _persister.RestoreAsync(); var interval = Settings.RefreshInterval; if (entry != null && entry.SessionId != Session.SessionId && (DateTime.UtcNow - entry.Timestamp) < interval) { await _dialog.AlertAsync("Alert", "Syncing in progress... Please try again later."); return; } State = action(); RaiseAllCanExecute(); RaiseAllPropertyChanged(); var username = _authManager.AuthData.Username; entry = await Entry.CreateAsync(username, State.StateId, State.Data); await _persister.PersistAsync(entry); }