public override async Task OnNavigatedToAsync(INavigationParameters parameters) { await RefreshCacheSaveFolderStatus(); if (IsRequireUpdateCacheSaveFolder.Value) { NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("ChoiceCacheSavingFolder".Translate(), showDuration: TimeSpan.FromSeconds(30) )); if (await CacheSaveFolder.ChangeUserDataFolder()) { await Task.Delay(1000); await RefreshCacheSaveFolderStatus(); await ResetList(); NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("ReadyForVideoCache".Translate()) ); } } await base.OnNavigatedToAsync(parameters); }
protected override async Task NavigatedToAsync(CancellationToken cancelToken, NavigatedToEventArgs e, Dictionary <string, object> viewModelState) { await RefreshCacheSaveFolderStatus(); if (IsRequireUpdateCacheSaveFolder.Value) { NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの保存先フォルダを選択してください。\n保存先が選択されると利用準備が完了します。", showDuration: TimeSpan.FromSeconds(30) )); if (await CacheSaveFolder.ChangeUserDataFolder()) { await Task.Delay(1000); await RefreshCacheSaveFolderStatus(); await ResetList(); NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの利用準備が出来ました") ); } } await base.NavigatedToAsync(cancelToken, e, viewModelState); }
public override async Task OnNavigatedToAsync(INavigationParameters parameters) { await RefreshCacheSaveFolderStatus(); if (IsRequireUpdateCacheSaveFolder.Value) { NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの保存先フォルダを選択してください。\n保存先が選択されると利用準備が完了します。", showDuration: TimeSpan.FromSeconds(30) )); if (await CacheSaveFolder.ChangeUserDataFolder()) { await Task.Delay(1000); await RefreshCacheSaveFolderStatus(); await ResetList(); NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの利用準備が出来ました") ); } } await base.OnNavigatedToAsync(parameters); }
public CacheManagementPageViewModel( HohoemaApp app, PageManager pageManager, HohoemaDialogService dialogService ) : base(app, pageManager) { _MediaManager = app.CacheManager; _HohoemaDialogService = dialogService; IsRequireUpdateCacheSaveFolder = new ReactiveProperty <bool>(false); IsCacheUserAccepted = HohoemaApp.UserSettings.CacheSettings.ObserveProperty(x => x.IsUserAcceptedCache) .ToReadOnlyReactiveProperty(); RequireEnablingCacheCommand = new DelegateCommand(async() => { var result = await _HohoemaDialogService.ShowAcceptCacheUsaseDialogAsync(); if (result) { HohoemaApp.UserSettings.CacheSettings.IsEnableCache = true; HohoemaApp.UserSettings.CacheSettings.IsUserAcceptedCache = true; (App.Current).Resources["IsCacheEnabled"] = true; await RefreshCacheSaveFolderStatus(); (App.Current as App).PublishInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの保存先フォルダを選択してください。\n保存先が選択されると利用準備が完了します。", showDuration: TimeSpan.FromSeconds(30) )); if (await HohoemaApp.ChangeUserDataFolder()) { await RefreshCacheSaveFolderStatus(); await ResetList(); (App.Current as App).PublishInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("キャッシュの利用準備が出来ました") ); } } }); ReadCacheAcceptTextCommand = new DelegateCommand(async() => { var result = await _HohoemaDialogService.ShowAcceptCacheUsaseDialogAsync(showWithoutConfirmButton: true); }); CacheFolderStateDescription = new ReactiveProperty <string>(""); CacheSaveFolderPath = new ReactiveProperty <string>(""); OpenCurrentCacheFolderCommand = new DelegateCommand(async() => { await RefreshCacheSaveFolderStatus(); var folder = await HohoemaApp.GetVideoCacheFolder(); if (folder != null) { await Launcher.LaunchFolderAsync(folder); } }); ChangeCacheFolderCommand = new DelegateCommand(async() => { var prevPath = CacheSaveFolderPath.Value; if (await HohoemaApp.ChangeUserDataFolder()) { (App.Current as App).PublishInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification($"キャッシュの保存先を {CacheSaveFolderPath.Value} に変更しました") ); await RefreshCacheSaveFolderStatus(); await ResetList(); } }); }
public CacheManagementPageViewModel( ApplicationLayoutManager applicationLayoutManager, CacheSettings cacheSettings, VideoCacheManager videoCacheManager, CacheSaveFolder cacheSaveFolder, NicoVideoProvider nicoVideoProvider, PageManager pageManager, DialogService dialogService, NotificationService notificationService, HohoemaPlaylist hohoemaPlaylist ) { ApplicationLayoutManager = applicationLayoutManager; CacheSettings = cacheSettings; VideoCacheManager = videoCacheManager; CacheSaveFolder = cacheSaveFolder; NicoVideoProvider = nicoVideoProvider; HohoemaDialogService = dialogService; NotificationService = notificationService; HohoemaPlaylist = hohoemaPlaylist; IsRequireUpdateCacheSaveFolder = new ReactiveProperty <bool>(false); IsCacheUserAccepted = CacheSettings.ObserveProperty(x => x.IsUserAcceptedCache) .ToReadOnlyReactiveProperty(); RequireEnablingCacheCommand = new DelegateCommand(async() => { var result = await HohoemaDialogService.ShowAcceptCacheUsaseDialogAsync(); if (result) { CacheSettings.IsEnableCache = true; CacheSettings.IsUserAcceptedCache = true; (App.Current).Resources["IsCacheEnabled"] = true; await RefreshCacheSaveFolderStatus(); NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("ChoiceCacheSavingFolder".Translate(), showDuration: TimeSpan.FromSeconds(30) )); if (await CacheSaveFolder.ChangeUserDataFolder()) { await RefreshCacheSaveFolderStatus(); await VideoCacheManager.CacheFolderChanged(); await ResetList(); NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("ReadyForVideoCache".Translate()) ); } } }); ReadCacheAcceptTextCommand = new DelegateCommand(async() => { var result = await HohoemaDialogService.ShowAcceptCacheUsaseDialogAsync(showWithoutConfirmButton: true); }); CacheFolderStateDescription = new ReactiveProperty <string>(""); CacheSaveFolderPath = new ReactiveProperty <string>(""); OpenCurrentCacheFolderCommand = new DelegateCommand(async() => { await RefreshCacheSaveFolderStatus(); var folder = await CacheSaveFolder.GetVideoCacheFolder(); if (folder != null) { await Launcher.LaunchFolderAsync(folder); } }); ChangeCacheFolderCommand = new DelegateCommand(async() => { var prevPath = CacheSaveFolderPath.Value; if (await CacheSaveFolder.ChangeUserDataFolder()) { NotificationService.ShowInAppNotification( InAppNotificationPayload.CreateReadOnlyNotification("CacheSaveFolderChangeToX".Translate(CacheSaveFolderPath.Value)) ); await RefreshCacheSaveFolderStatus(); await VideoCacheManager.CacheFolderChanged(); await ResetList(); } }); }
public HohoemaVideoListingPageViewModelBase(HohoemaApp app, PageManager pageManager, bool isRequireSignIn = true, bool useDefaultPageTitle = true) : base(app, pageManager, useDefaultPageTitle: useDefaultPageTitle) { var SelectionItemsChanged = SelectedItems.ToCollectionChanged().ToUnit(); #if DEBUG SelectedItems.CollectionChangedAsObservable() .Subscribe(x => { Debug.WriteLine("Selected Count: " + SelectedItems.Count); }) .AddTo(_CompositeDisposable); #endif PlayAllCommand = SelectionItemsChanged .Select(_ => SelectedItems.Count > 0) .ToReactiveCommand(false) .AddTo(_CompositeDisposable); PlayAllCommand .SubscribeOnUIDispatcher() .Subscribe(_ => { // TODO: プレイリストに登録 // プレイリストを空にしてから選択動画を登録 // SelectedVideoInfoItems.First()?.PlayCommand.Execute(); }) .AddTo(_CompositeDisposable); CancelCacheDownloadRequest = SelectionItemsChanged .Select(_ => SelectedItems.Count > 0) .ToReactiveCommand(false) .AddTo(_CompositeDisposable); CancelCacheDownloadRequest .SubscribeOnUIDispatcher() .Subscribe(async _ => { var items = EnumerateCacheRequestedVideoItems().ToList(); var action = AsyncInfo.Run <uint>(async(cancelToken, progress) => { uint count = 0; foreach (var item in items) { foreach (var quality in item.CachedQualityVideos.ToArray()) { await HohoemaApp.CacheManager.CancelCacheRequest(item.RawVideoId, quality.Quality); } ++count; progress.Report(count); } ClearSelection(); }); await PageManager.StartNoUIWork("キャッシュリクエストをキャンセル中", items.Count, () => action); } ) .AddTo(_CompositeDisposable); // クオリティ指定無しのキャッシュDLリクエスト RequestCacheDownload = SelectionItemsChanged .Select(_ => SelectedItems.Count > 0 && CanDownload) .ToReactiveCommand(false) .AddTo(_CompositeDisposable); RequestCacheDownload .SubscribeOnUIDispatcher() .Subscribe(async _ => { foreach (var item in SelectedItems) { await HohoemaApp.CacheManager.RequestCache(item.RawVideoId, NicoVideoQuality.Smile_Original); } ClearSelection(); await UpdateList(); }) .AddTo(_CompositeDisposable); RegistratioMylistCommand = SelectionItemsChanged .Select(x => SelectedItems.Count > 0) .ToReactiveCommand(false) .AddTo(_CompositeDisposable); RegistratioMylistCommand .SubscribeOnUIDispatcher() .Subscribe(async _ => { var targetMylist = await HohoemaApp.ChoiceMylist(); if (targetMylist == null) { return; } var items = SelectedItems.ToList(); var action = AsyncInfo.Run <uint>(async(cancelToken, progress) => { uint progressCount = 0; Debug.WriteLine($"一括マイリストに追加を開始..."); int successCount = 0; int existCount = 0; int failedCount = 0; foreach (var video in SelectedItems) { var registrationResult = await HohoemaApp.AddMylistItem(targetMylist, video.Label, video.RawVideoId); switch (registrationResult) { case Mntone.Nico2.ContentManageResult.Success: successCount++; break; case Mntone.Nico2.ContentManageResult.Exist: existCount++; break; case Mntone.Nico2.ContentManageResult.Failed: failedCount++; break; default: break; } Debug.WriteLine($"{video.Label}[{video.RawVideoId}]:{registrationResult.ToString()}"); progressCount++; progress.Report(progressCount); } if (targetMylist.Origin == PlaylistOrigin.LoginUser) { var mylistGroup = targetMylist as MylistGroupInfo; await mylistGroup.Refresh(); // マイリストに追加に失敗したものを残すように // 登録済みのアイテムを選択アイテムリストから削除 foreach (var item in SelectedItems.ToArray()) { if (mylistGroup.CheckRegistratedVideoId(item.RawVideoId)) { SelectedItems.Remove(item); } } } // リフレッシュ // ユーザーに結果を通知 var titleText = $"「{targetMylist.Label}」に {successCount}件 の動画を登録しました"; var resultText = $""; if (existCount > 0) { resultText += $"重複:{existCount} 件"; } if (failedCount > 0) { resultText += $"\n登録に失敗した {failedCount}件 は選択されたままです"; } (App.Current as App).PublishInAppNotification(InAppNotificationPayload.CreateReadOnlyNotification( titleText, TimeSpan.FromSeconds(7) )); // ResetList(); Debug.WriteLine($"一括マイリストに追加を完了---------------"); ClearSelection(); }); await PageManager.StartNoUIWork("マイリストに追加", items.Count, () => action); } ) .AddTo(_CompositeDisposable); Playlists = HohoemaApp.Playlist.Playlists.ToReadOnlyReactiveCollection(); }