private void LibraryOnLibraryChanged(object o, LibraryViewModelArgs args)
        {
            if (args.LibraryOperation == LibraryOperation.UpdateMangaChanged)
            {
                var model = this.MangaViewModels.SingleOrDefault(m => Equals(m.Id, args.Manga?.Id));
                switch (args.MangaOperation)
                {
                case MangaOperation.Added:
                    if (model == null)
                    {
                        Client.Dispatcher.Invoke(() => this.MangaViewModels.Add(new MangaModel(args.Manga)));
                    }
                    break;

                case MangaOperation.Deleted:
                    if (model != null)
                    {
                        Client.Dispatcher.Invoke(() => this.MangaViewModels.Remove(model));
                    }
                    break;

                case MangaOperation.UpdateStarted:
                    ActualizeSpeedAndProcess(LastDownload as IManga);
                    this.LastDownload = args.Manga;
                    break;

                case MangaOperation.UpdateCompleted:
                    ActualizeSpeedAndProcess(args.Manga);
                    this.LastDownload = null;
                    break;

                case MangaOperation.None:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            if (args.LibraryOperation == LibraryOperation.UpdateCompleted)
            {
                if (Library.ShutdownPC)
                {
                    Client.Dispatcher.Invoke(() => new ShutdownViewModel().Show());
                }
                Library.ShutdownPC = false;
            }
            if (args.LibraryOperation == LibraryOperation.UpdatePercentChanged)
            {
                ActualizeSpeedAndProcess(args.Manga);
            }
        }
        private void LibraryOnLibraryChanged(object sender, LibraryViewModelArgs args)
        {
            switch (args.LibraryOperation)
            {
            case LibraryOperation.UpdateStarted:
                Percent       = 0;
                ProgressState = ProgressState.Normal;
                break;

            case LibraryOperation.UpdatePercentChanged:
                Percent = args.Percent ?? 0;
                break;

            case LibraryOperation.UpdateMangaChanged:
                switch (args.MangaOperation)
                {
                case MangaOperation.Added:
                    break;

                case MangaOperation.Deleted:
                    break;

                case MangaOperation.UpdateStarted:
                    break;

                case MangaOperation.UpdateCompleted:
                    TaskbarIcon.ShowInTray(Strings.Library_Status_MangaUpdate + args.Manga.Name + " завершено.", args.Manga);
                    break;

                case MangaOperation.None:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                break;

            case LibraryOperation.UpdateCompleted:
                Percent       = 0;
                ProgressState = ProgressState.None;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }