Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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)));
                }
            });
        }
Exemplo n.º 3
0
 public void AddRange(IEnumerable <T> enumerable)
 {
     Execute.OnTheUI(() =>
     {
         foreach (var v in enumerable)
         {
             Add(v);
         }
     });
 }
Exemplo n.º 4
0
 public void Set(IEnumerable <T> enumerable)
 {
     Execute.OnTheUI(() =>
     {
         Clear();
         foreach (var v in enumerable)
         {
             Add(v);
         }
     });
 }
Exemplo n.º 5
0
        public void Set(IEnumerable <T> enumerable, Action after = null)
        {
            Execute.OnTheUI(() =>
            {
                Clear();
                foreach (var v in enumerable)
                {
                    Add(v);
                }

                if (after != null)
                {
                    after();
                }
            });
        }
Exemplo n.º 6
0
        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));
            }));
        }
Exemplo n.º 7
0
        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());
        }
Exemplo n.º 8
0
        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)));
            });
        }
Exemplo n.º 9
0
        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());
        }
Exemplo n.º 10
0
        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());
        }
Exemplo n.º 11
0
        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);
                    }
                });
            }));
        }
Exemplo n.º 12
0
        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;
                });
            }
        }
Exemplo n.º 13
0
 public static Task ContinueOnSuccessInTheUIThread <T>(this Task <T> parent, Action <T> action)
 {
     return(parent.ContinueOnSuccess(result => Execute.OnTheUI(() => action(result))));
 }
Exemplo n.º 14
0
 public static Task ContinueOnSuccessInTheUIThread(this Task parent, Action action)
 {
     return(parent.ContinueOnSuccess(() => Execute.OnTheUI(action)));
 }
Exemplo n.º 15
0
 public static Task <bool> ContinueWhenTrueInTheUIThread(this Task <bool> parent, Action action)
 {
     return(parent.ContinueWhenTrue(() => Execute.OnTheUI(action)));
 }
Exemplo n.º 16
0
 public void Invoke(object sender, PropertyChangedEventArgs e)
 {
     Execute.OnTheUI(() => Value(sender, e));
 }
Exemplo n.º 17
0
 public static Task FinallyInTheUIThread(this Task task, Action action)
 {
     return(task.ContinueWith(t => Execute.OnTheUI(action)));
 }
Exemplo n.º 18
0
 private static void Navigate(Uri source)
 {
     Execute.OnTheUI(() => Application.Current.Host.NavigationState = source.ToString());
 }