public Interfaces.IMylist FindMylistInCached(string id, Services.PlaylistOrigin?origin = null) { if (!origin.HasValue) { if (UserMylistManager.HasMylistGroup(id)) { origin = Services.PlaylistOrigin.LoginUser; } else if (Services.HohoemaPlaylist.WatchAfterPlaylistId == id) { origin = Services.PlaylistOrigin.Local; } else if (LocalMylistManager.Mylists.FirstOrDefault(x => x.Id == id) != null) { origin = Services.PlaylistOrigin.Local; } else { origin = Services.PlaylistOrigin.OtherUser; } } switch (origin.Value) { case Services.PlaylistOrigin.LoginUser: // ログインユーザーのマイリスト return(UserMylistManager.GetMylistGroup(id)); case Services.PlaylistOrigin.Local: // ローカルマイリスト if (Services.HohoemaPlaylist.WatchAfterPlaylistId == id) { return(HohoemaPlaylist.DefaultPlaylist); } else { return(LocalMylistManager.Mylists.FirstOrDefault(x => x.Id == id)); } case Services.PlaylistOrigin.OtherUser: // 他ユーザーのマイリスト return(OtherOwneredMylistManager.GetMylistIfCached(id)); default: throw new Exception("not found mylist:" + id); } }
public UserMylistPageViewModel( Services.PageManager pageMaanger, Services.DialogService dialogService, NiconicoSession niconicoSession, UserProvider userProvider, LoginUserMylistProvider loginUserMylistProvider, OtherOwneredMylistManager otherOwneredMylistManager, UserMylistManager userMylistManager, LocalMylistManager localMylistManager, HohoemaPlaylist hohoemaPlaylist ) : base(pageMaanger, useDefaultPageTitle: false) { DialogService = dialogService; NiconicoSession = niconicoSession; UserProvider = userProvider; LoginUserMylistProvider = loginUserMylistProvider; OtherOwneredMylistManager = otherOwneredMylistManager; UserMylistManager = userMylistManager; LocalMylistManager = localMylistManager; HohoemaPlaylist = hohoemaPlaylist; IsLoginUserMylist = new ReactiveProperty <bool>(false); OpenMylistCommand = new ReactiveCommand <Interfaces.IMylist>(); OpenMylistCommand.Subscribe(listItem => { PageManager.OpenPage(HohoemaPageType.Mylist, new MylistPagePayload() { Id = listItem.Id, Origin = listItem.ToMylistOrigin() } .ToParameterString() ); }); AddMylistGroupCommand = new DelegateCommand(async() => { MylistGroupEditData data = new MylistGroupEditData() { Name = "新しいマイリスト", Description = "", IsPublic = false, MylistDefaultSort = MylistDefaultSort.Latest, IconType = IconType.Default, }; // 成功するかキャンセルが押されるまで繰り返す while (true) { if (true == await DialogService.ShowCreateMylistGroupDialogAsync(data)) { var result = await UserMylistManager.AddMylist( data.Name, data.Description, data.IsPublic, data.MylistDefaultSort, data.IconType ); if (result == Mntone.Nico2.ContentManageResult.Success) { await ResetList(); break; } } else { break; } } } , () => UserMylistManager.Mylists.Count < UserMylistManager.MaxMylistGroupCountCurrentUser ); RemoveMylistGroupCommand = new DelegateCommand <Interfaces.IMylist>(async(item) => { var mylistOrigin = item.ToMylistOrigin(); if (mylistOrigin == PlaylistOrigin.Local) { if (item.Id == HohoemaPlaylist.WatchAfterPlaylistId) { return; } } else if (mylistOrigin == PlaylistOrigin.LoginUser) { if (item.Id == "0") { return; } } // 確認ダイアログ var originText = mylistOrigin == PlaylistOrigin.Local ? "ローカルマイリスト" : "マイリスト"; var contentMessage = $"{item.Label} を削除してもよろしいですか?(変更は元に戻せません)"; var dialog = new MessageDialog(contentMessage, $"{originText}削除の確認"); dialog.Commands.Add(new UICommand("削除", async(i) => { if (mylistOrigin == PlaylistOrigin.Local) { LocalMylistManager.RemoveCommand.Execute(item as LocalMylistGroup); } else if (mylistOrigin == PlaylistOrigin.LoginUser) { await UserMylistManager.RemoveMylist(item.Id); // await UpdateUserMylist(); } })); dialog.Commands.Add(new UICommand("キャンセル")); dialog.CancelCommandIndex = 1; dialog.DefaultCommandIndex = 1; await dialog.ShowAsync(); }); EditMylistGroupCommand = new DelegateCommand <Interfaces.IMylist>(async item => { var mylistOrigin = item.ToMylistOrigin(); if (mylistOrigin == PlaylistOrigin.Local) { if (item.Id == HohoemaPlaylist.WatchAfterPlaylistId) { return; } } else if (mylistOrigin == PlaylistOrigin.LoginUser) { if (item.Id == "0") { return; } } if (mylistOrigin == PlaylistOrigin.Local) { var localMylist = item as LocalMylistGroup; var resultText = await DialogService.GetTextAsync("プレイリスト名を変更", localMylist.Label, localMylist.Label, (tempName) => !string.IsNullOrWhiteSpace(tempName) ); if (!string.IsNullOrWhiteSpace(resultText)) { localMylist.Label = resultText; } } if (mylistOrigin == PlaylistOrigin.LoginUser) { var mylistGroupListItem = item as UserOwnedMylist; var selectedMylistGroupId = mylistGroupListItem.Id; if (selectedMylistGroupId == null) { return; } var mylistGroup = UserMylistManager.GetMylistGroup(selectedMylistGroupId); MylistGroupEditData data = new MylistGroupEditData() { Name = mylistGroup.Label, Description = mylistGroup.Description, IsPublic = mylistGroup.IsPublic, MylistDefaultSort = mylistGroup.Sort, IconType = mylistGroup.IconType, }; // 成功するかキャンセルが押されるまで繰り返す while (true) { if (true == await DialogService.ShowCreateMylistGroupDialogAsync(data)) { mylistGroup.Label = data.Name; mylistGroup.Description = data.Description; mylistGroup.IsPublic = data.IsPublic; mylistGroup.Sort = data.MylistDefaultSort; mylistGroup.IconType = data.IconType; var result = await LoginUserMylistProvider.UpdateMylist(mylistGroup); if (result == Mntone.Nico2.ContentManageResult.Success) { // TODO: UI上のマイリスト表示を更新する break; } } else { break; } } } }); PlayAllCommand = new DelegateCommand <Interfaces.IMylist>((mylist) => { if (mylist.ItemCount == 0) { return; } HohoemaPlaylist.Play(mylist); }); AddLocalMylistCommand = new DelegateCommand(async() => { var name = await DialogService.GetTextAsync("新しいローカルマイリスト名を入力", "ローカルマイリスト名", "", (s) => { if (string.IsNullOrWhiteSpace(s)) { return(false); } if (LocalMylistManager.Mylists.Any(x => x.Label == s)) { return(false); } return(true); }); if (name != null) { LocalMylistManager.Mylists.Add(new LocalMylistGroup(Guid.NewGuid().ToString(), name)); } }); }
public OtherUserMylistIncrementalLoadingSource(string userId, OtherOwneredMylistManager otherOwneredMylistManager) { UserId = userId; OtherOwneredMylistManager = otherOwneredMylistManager; }
protected override async Task NavigatedToAsync(CancellationToken cancelToken, NavigatedToEventArgs e, Dictionary <string, object> viewModelState) { List <IPlayableList> mylists = null; if (e.Parameter is string) { UserId = e.Parameter as string; } MylistList.Clear(); IsLoginUserMylist.Value = UserId == null || UserId == HohoemaApp.LoginUserId.ToString(); if (!IsLoginUserMylist.Value && UserId != null) { try { var userInfo = await HohoemaApp.ContentFinder.GetUserInfo(UserId); UserName = userInfo.Nickname; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } try { var items = await OtherOwneredMylistManager.GetByUserId(UserId); mylists = items.Cast <IPlayableList>().ToList(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } MylistList.Add(new MylistItemsWithTitle() { Title = "マイリスト", Origin = PlaylistOrigin.OtherUser, Items = mylists.ToList(), }); OnPropertyChanged(nameof(MylistList)); } else if (IsLoginUserMylist.Value) { // ログインユーザーのマイリスト一覧を表示 UserName = HohoemaApp.LoginUserName; await UpdateUserMylist(); } else { throw new Exception("UserMylistPage が不明なパラメータと共に開かれました : " + e.Parameter); } UpdateTitle($"{UserName} さんのマイリスト一覧"); AddMylistGroupCommand.RaiseCanExecuteChanged(); }