public void SaveTransaction(ObservableCollection<Transaction> transactions, Action<Exception> callback) { App.Instance.StaticServiceData.SetServerStatus(async status => { //continue with local if status is ok but is pending Sync if (status != Model.StaticServiceData.ServerStatus.Ok || !App.Instance.IsSync) { try { foreach (var item in transactions) item.OptimizeOnTopLevel(Transaction.ImageRemovalStatus.None); foreach (var item in TransactionList.Where(x => x.HasChanges)) item.HasChanges = false; await SetupTransactionList(transactions, false); App.Instance.IsSync = false; callback(null); } catch (Exception ex) { callback(ex); } } else { var client = new MainClient(); foreach (var item in transactions) item.OptimizeOnTopLevel(Transaction.ImageRemovalStatus.Unchanged); client.SaveTransactionsAsync(transactions); client.SaveTransactionsCompleted += async (sender, completedEventArgs) => { if (completedEventArgs.Error == null) { await SetupTransactionList(completedEventArgs.Result, true); //Only update sync when offline and in login and main pages //App.Instance.IsSync = true; callback(null); } else callback(completedEventArgs.Error); }; } }); }