public void Match(ICollection <T> items, Action afterUpdate = null) { Execute.OnTheUI(() => { var toAdd = items.Except(this, objectComparer).ToList(); var toRemove = this.Except(items, objectComparer).ToArray(); for (int i = 0; i < toRemove.Length; i++) { var remove = toRemove[i]; var add = toAdd.FirstOrDefault(x => Equals(ExtractKey(x), ExtractKey(remove))); if (add == null) { Remove(remove); continue; } SetItem(Items.IndexOf(remove), add); toAdd.Remove(add); } foreach (var add in toAdd) { Add(add); } if (afterUpdate != null) { afterUpdate(); } }); if (afterUpdate != null) { afterUpdate(); } }
public static void Navigate(string url, bool dontOpenNewTab = false, bool forceRefresh = false) { if (url == null) { return; } url = new UrlParser(url).BuildUrl(); Execute.OnTheUI(() => { if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && dontOpenNewTab == false) { OpenUrlOnANewTab(url); return; } if (Url == url && forceRefresh) { Refresh(); } else { Navigate((new Uri(url, UriKind.Relative))); } }); }
public void AddRange(IEnumerable <T> enumerable) { Execute.OnTheUI(() => { foreach (var v in enumerable) { Add(v); } }); }
public void Set(IEnumerable <T> enumerable) { Execute.OnTheUI(() => { Clear(); foreach (var v in enumerable) { Add(v); } }); }
public void Set(IEnumerable <T> enumerable, Action after = null) { Execute.OnTheUI(() => { Clear(); foreach (var v in enumerable) { Add(v); } if (after != null) { after(); } }); }
public static Task Catch(this Task parent, Action <AggregateException> action) { var stackTrace = new StackTrace(); return(parent.ContinueWith(task => { if (task.IsFaulted == false) { return; } var ex = task.Exception.ExtractSingleInnerException(); Execute.OnTheUI(() => ErrorPresenter.Show(ex, stackTrace)) .ContinueWith(_ => action(task.Exception)); })); }
public static Task <TResult> Catch <TResult>(this Task <TResult> parent, Action <AggregateException> action) { var stackTrace = new StackTrace(); return(parent.ContinueWith(task => { if (task.IsFaulted == false) { return task; } var ex = task.Exception.ExtractSingleInnerException(); Execute.OnTheUI(() => ApplicationModel.Current.AddErrorNotification(ex, null, stackTrace)) .ContinueWith(_ => action(task.Exception)); return task; }).Unwrap()); }
public static void Navigate(string url) { if (url == null) { return; } url = new UrlParser(url).BuildUrl(); Execute.OnTheUI(() => { if (Keyboard.Modifiers == ModifierKeys.Control) { OpenUrlOnANewTab(url); return; } Navigate((new Uri(url, UriKind.Relative))); }); }
public static Task <TResult> Catch <TResult>(this Task <TResult> parent, Action <AggregateException> action) { var stackTrace = new StackTrace(); return(parent.ContinueWith(task => { if (task.IsFaulted == false) { return task; } var ex = task.Exception.ExtractSingleInnerException(); if (ErrorHandler.Handle(ex) == false) { Execute.OnTheUI(() => ErrorPresenter.Show(ex, stackTrace)) .ContinueWith(_ => action(task.Exception)); } return task; }).Unwrap()); }
public static Task CatchIgnore <TException>(this Task parent, Action <TException> action) where TException : Exception { return(parent.ContinueWith(task => { if (task.IsFaulted == false) { return task; } var ex = task.Exception.ExtractSingleInnerException() as TException; if (ex == null) { return task; } Execute.OnTheUI(() => action(ex)); return Execute.EmptyResult <object>(); }) .Unwrap()); }
public static Task Catch(this Task parent, Func <AggregateException, bool> func) { var stackTrace = new StackTrace(); return(parent.ContinueWith(task => { if (task.IsFaulted == false) { return; } var ex = task.Exception.ExtractSingleInnerException(); Execute.OnTheUI(() => { if (func(task.Exception) == false) { ApplicationModel.Current.AddErrorNotification(ex, null, stackTrace); } }); })); }
internal void TimerTicked() { if (ApplicationModel.Current.Server.Value.CreateNewDatabase) { ApplicationModel.Current.Server.Value.CreateNewDatabase = false; ApplicationModel.Current.Server.Value.DocumentStore .AsyncDatabaseCommands .ForSystemDatabase() .GetAsync("Raven/StudioConfig") .ContinueWith(task => { if (task.IsFaulted == false) { Execute.OnTheUI(() => { if (task.Result != null && task.Result.DataAsJson.ContainsKey("WarnWhenUsingSystemDatabase")) { if (task.Result.DataAsJson.Value <bool>("WarnWhenUsingSystemDatabase") == false) { return; } } Command.ExecuteCommand(new CreateDatabaseCommand()); }); } else { GC.KeepAlive(task.Exception); // ignoring the exeption } }); } ApplicationModel.Current.UpdateAlerts(); if (currentTask != null) { return; } lock (this) { if (currentTask != null) { return; } var timeFromLastRefresh = SystemTime.UtcNow - lastRefresh; var refreshRate = GetRefreshRate(); if (timeFromLastRefresh < refreshRate) { return; } using (OnWebRequest(request => request.Headers["Raven-Timer-Request"] = "true")) currentTask = TimerTickedAsync(); if (currentTask == null) { return; } currentTask .Catch() .Finally(() => { lastRefresh = SystemTime.UtcNow; IsForced = false; currentTask = null; }); } }
public static Task ContinueOnSuccessInTheUIThread <T>(this Task <T> parent, Action <T> action) { return(parent.ContinueOnSuccess(result => Execute.OnTheUI(() => action(result)))); }
public static Task ContinueOnSuccessInTheUIThread(this Task parent, Action action) { return(parent.ContinueOnSuccess(() => Execute.OnTheUI(action))); }
public static Task <bool> ContinueWhenTrueInTheUIThread(this Task <bool> parent, Action action) { return(parent.ContinueWhenTrue(() => Execute.OnTheUI(action))); }
public void Invoke(object sender, PropertyChangedEventArgs e) { Execute.OnTheUI(() => Value(sender, e)); }
public static Task FinallyInTheUIThread(this Task task, Action action) { return(task.ContinueWith(t => Execute.OnTheUI(action))); }
private static void Navigate(Uri source) { Execute.OnTheUI(() => Application.Current.Host.NavigationState = source.ToString()); }