private bool CheckCanDisplayTimelineItem(NicoRepoTimelineItem item) { var topicType = NicoRepoItemTopicExtension.ToNicoRepoTopicType(item.Topic); if (!AllowedNicoRepoItemType.Any(x => x == topicType)) { return(false); } if (topicType == NicoRepoItemTopic.Live_User_Program_OnAirs || topicType == NicoRepoItemTopic.Live_User_Program_Reserve || topicType == NicoRepoItemTopic.Live_Channel_Program_Onairs || topicType == NicoRepoItemTopic.Live_Channel_Program_Reserve) { if (item.Program != null) { // 放送開始が現時点より6時間以上前の場合には既に終了済みとして表示しない if (item.Program.BeginAt < NiconamaDisplayTime) { return(false); } } return(true); } else { return(true); } }
protected override async Task <IAsyncEnumerable <HohoemaListingPageItemBase> > GetPagedItemsImpl(int head, int count) { var tail = head + count; var prevCount = TimelineItems.Count; if (TimelineItems.Count < tail) { while (prevCount == TimelineItems.Count) { var nicoRepoResponse = await LoginUserNicoRepoProvider.GetLoginUserNicoRepo(NicoRepoTimelineType.all, _LastItem?.Id); if (nicoRepoResponse.IsStatusOK) { foreach (var item in nicoRepoResponse.TimelineItems) { if (CheckCanDisplayTimelineItem(item)) { TimelineItems.Add(item); } } _LastItem = nicoRepoResponse.LastTimelineItem; if (nicoRepoResponse.TimelineItems.Count == 0) { break; } } else { break; } } } var list = new List <HohoemaListingPageItemBase>(); return(TimelineItems.Skip(head).Take(count).ToArray() .Select <NicoRepoTimelineItem, HohoemaListingPageItemBase>(item => { var topicType = NicoRepoItemTopicExtension.ToNicoRepoTopicType(item.Topic); if (topicType == NicoRepoItemTopic.Live_User_Program_OnAirs || topicType == NicoRepoItemTopic.Live_User_Program_Reserve || topicType == NicoRepoItemTopic.Live_Channel_Program_Onairs || topicType == NicoRepoItemTopic.Live_Channel_Program_Reserve) { return new NicoRepoLiveTimeline(item, topicType); } else if (topicType == NicoRepoItemTopic.NicoVideo_User_Video_Upload || topicType == NicoRepoItemTopic.NicoVideo_User_Mylist_Add_Video || topicType == NicoRepoItemTopic.NicoVideo_Channel_Video_Upload) { return new NicoRepoVideoTimeline(item, topicType); } else { throw new NotSupportedException(topicType.ToString()); } }) .ToAsyncEnumerable()); }
public static string ItemTopictypeToDescription(NicoRepoItemTopic topicType, NicoRepoTimelineItem timelineItem) { switch (topicType) { case NicoRepoItemTopic.Unknown: return($"(対応していないニコレポアイテム)"); case NicoRepoItemTopic.NicoVideo_User_Video_Kiriban_Play: return($"動画再生数がキリ番に到達しました"); case NicoRepoItemTopic.NicoVideo_User_Video_Upload: return($"{timelineItem.SenderNiconicoUser.Nickname} さんが動画を投稿"); case NicoRepoItemTopic.NicoVideo_Community_Level_Raise: return($"コミュニティレベル"); case NicoRepoItemTopic.NicoVideo_User_Mylist_Add_Video: return($"{timelineItem.SenderNiconicoUser.Nickname} さんがマイリストに動画を追加"); case NicoRepoItemTopic.NicoVideo_User_Community_Video_Add: return($"コミュニティ動画に動画が追加されました"); case NicoRepoItemTopic.NicoVideo_User_Video_UpdateHighestRankings: return($"動画がランキングにランクイン"); case NicoRepoItemTopic.NicoVideo_User_Video_Advertise: return($"動画が広告されました"); case NicoRepoItemTopic.NicoVideo_Channel_Blomaga_Upload: return($"ブロマガが投稿されました"); case NicoRepoItemTopic.NicoVideo_Channel_Video_Upload: return($"{timelineItem.SenderChannel.Name} が動画を投稿"); case NicoRepoItemTopic.Live_User_Program_OnAirs: return($"{timelineItem.SenderNiconicoUser.Nickname} さんが生放送を開始"); case NicoRepoItemTopic.Live_User_Program_Reserve: return($"{timelineItem.SenderNiconicoUser.Nickname} さんが生放送を予約"); case NicoRepoItemTopic.Live_Channel_Program_Onairs: return($"{timelineItem.SenderChannel.Name} が生放送を開始"); case NicoRepoItemTopic.Live_Channel_Program_Reserve: return($"{timelineItem.SenderChannel.Name} が生放送を予約"); default: return(string.Empty); } }
public NicoRepoVideoTimeline(NicoRepoTimelineItem timelineItem, NicoRepoItemTopic itemType) : base(timelineItem.Video.Id) { TimelineItem = timelineItem; ItemTopic = itemType; if (TimelineItem.Video != null) { this.Label = TimelineItem.Video.Title; if (TimelineItem.Video.ThumbnailUrl.Small != null) { AddImageUrl(TimelineItem.Video.ThumbnailUrl.Small); } else if (TimelineItem.Video.ThumbnailUrl.Normal != null) { AddImageUrl(TimelineItem.Video.ThumbnailUrl.Normal); } this.OptionText = $"{TimelineItem.CreatedAt.ToString()}"; } Description = NicoRepoTimelineVM.ItemTopictypeToDescription(ItemTopic, TimelineItem); /* * * if (TimelineItem.SenderNiconicoUser != null) * { * ProviderId = TimelineItem.SenderNiconicoUser.Id.ToString(); * ProviderName = TimelineItem.SenderNiconicoUser.Nickname; * ProviderType = UserType.User; * } * * * if (TimelineItem.SenderNiconicoUser != null) * { * this.Description = this.TimelineItem.SenderNiconicoUser.Nickname; * } * else if (TimelineItem.SenderChannel != null) * { * this.Description = this.TimelineItem.SenderChannel.Name; * _OwnerUserId = TimelineItem.SenderChannel.Id.ToString(); * ProviderType = UserType.Channel; * } */ }
private async void StartAlert(params NiconicoAlertServiceType[] alertServiceTypes) { if (!_IsLoggedIn) { return; } await AlertClient.ConnectAlertWebScoketServerAsync(alertServiceTypes); // 既に始まっている生放送を検出して通知 var hohoemaApp = App.Current.Container.Resolve <HohoemaApp>(); NicoRepoTimelineItem lastNicoRepoItem = null; var res = await hohoemaApp.NiconicoContext.NicoRepo.GetLoginUserNicoRepo(Mntone.Nico2.NicoRepo.NicoRepoTimelineType.all, lastNicoRepoItem?.Id); foreach (var item in res.TimelineItems) { var topicType = ViewModels.NicoRepoItemTopicExtension.ToNicoRepoTopicType(item.Topic); if (topicType == ViewModels.NicoRepoItemTopic.Live_Channel_Program_Onairs || topicType == ViewModels.NicoRepoItemTopic.Live_User_Program_OnAirs) { if (item.Program != null) { try { var liveStatus = await hohoemaApp.NiconicoContext.Live.GetPlayerStatusAsync(item.Program.Id); var toastService = App.Current.Container.Resolve <ToastNotificationService>(); if (liveStatus.Program.EndedAt.DateTime > DateTime.Now) { toastService.ShowText($"{liveStatus.Program.BroadcasterName} さんのニコ生開始", $"{liveStatus.Program.Title}", luanchContent: "niconico://" + item.Program.Id ); } } catch { } await Task.Delay(250); } } } }
public NicoRepoLiveTimeline(NicoRepoTimelineItem timelineItem, NicoRepoItemTopic itemTopic) : base(timelineItem.Program.Id) { TimelineItem = timelineItem; ItemTopic = itemTopic; if (TimelineItem.Program != null) { this.Label = TimelineItem.Program.Title; AddImageUrl(TimelineItem.Program.ThumbnailUrl); this.OptionText = $"{TimelineItem.Program.BeginAt.ToString()} 放送開始"; if (TimelineItem.Community != null) { CommunityGlobalId = TimelineItem.Community.Id; CommunityName = TimelineItem.Community.Name; } else { CommunityGlobalId = TimelineItem.SenderChannel.Id.ToString(); CommunityName = TimelineItem.SenderChannel.Name; } } if (timelineItem.SenderChannel != null) { this.CommunityType = CommunityType.Channel; } else if (timelineItem.Community != null) { this.CommunityType = CommunityType.Community; } else { this.CommunityType = CommunityType.Official; } Description = NicoRepoTimelineVM.ItemTopictypeToDescription(ItemTopic, TimelineItem); }
protected override async Task <int> ResetSourceImpl() { TimelineItems.Clear(); var nicoRepoResponse = await LoginUserNicoRepoProvider.GetLoginUserNicoRepo(NicoRepoTimelineType.all); if (nicoRepoResponse.IsStatusOK) { foreach (var item in nicoRepoResponse.TimelineItems) { if (CheckCanDisplayTimelineItem(item)) { TimelineItems.Add(item); } } _LastItem = nicoRepoResponse.LastTimelineItem; return(nicoRepoResponse.Meta.Limit); } else { return(0); } }
public NicoRepoLiveTimeline(NicoRepoTimelineItem timelineItem, NicoRepoItemTopic itemType, HohoemaPlaylist playlist) : base(timelineItem, itemType, playlist) { }
public NicoRepoTimelineVM(NicoRepoTimelineItem timelineItem, NicoRepoItemTopic itemType, HohoemaPlaylist playlist) { TimelineItem = timelineItem; HohoemaPlaylist = playlist; ItemTopic = itemType; if (TimelineItem.Program != null) { this.Label = TimelineItem.Program.Title; AddImageUrl(TimelineItem.Program.ThumbnailUrl); this.OptionText = $"{TimelineItem.Program.BeginAt.ToString()} 放送開始"; if (TimelineItem.Community != null) { _OwnerUserId = TimelineItem.Community.Id; OwnerUserName = TimelineItem.Community.Name; } else { _OwnerUserId = TimelineItem.SenderChannel.Id.ToString(); OwnerUserName = TimelineItem.SenderChannel.Name; OwnerUserType = UserType.User; } } else if (TimelineItem.Video != null) { this.Label = TimelineItem.Video.Title; if (TimelineItem.Video.ThumbnailUrl.Small != null) { AddImageUrl(TimelineItem.Video.ThumbnailUrl.Small); } else if (TimelineItem.Video.ThumbnailUrl.Normal != null) { AddImageUrl(TimelineItem.Video.ThumbnailUrl.Normal); } this.OptionText = $"{TimelineItem.CreatedAt.ToString()}"; } if (TimelineItem.SenderNiconicoUser != null) { _OwnerUserId = TimelineItem.SenderNiconicoUser.Id.ToString(); OwnerUserName = TimelineItem.SenderNiconicoUser.Nickname; OwnerUserType = UserType.User; } if (TimelineItem.SenderNiconicoUser != null) { this.Description = this.TimelineItem.SenderNiconicoUser.Nickname; } else if (TimelineItem.SenderChannel != null) { this.Description = this.TimelineItem.SenderChannel.Name; OwnerUserType = UserType.Channel; } switch (ItemTopic) { case NicoRepoItemTopic.Unknown: Description = $"(対応していないニコレポアイテム)"; break; case NicoRepoItemTopic.NicoVideo_User_Video_Kiriban_Play: Description = $"動画再生数がキリ番に到達しました"; break; case NicoRepoItemTopic.NicoVideo_User_Video_Upload: Description = $"{this.TimelineItem.SenderNiconicoUser.Nickname} さんが動画を投稿"; break; case NicoRepoItemTopic.NicoVideo_Community_Level_Raise: Description = $"コミュニティレベル"; break; case NicoRepoItemTopic.NicoVideo_User_Mylist_Add_Video: Description = $"{this.TimelineItem.SenderNiconicoUser.Nickname} さんがマイリストに動画を追加"; break; case NicoRepoItemTopic.NicoVideo_User_Community_Video_Add: Description = $"コミュニティ動画に動画が追加されました"; break; case NicoRepoItemTopic.NicoVideo_User_Video_UpdateHighestRankings: Description = $"動画がランキングにランクイン"; break; case NicoRepoItemTopic.NicoVideo_User_Video_Advertise: Description = $"動画が広告されました"; break; case NicoRepoItemTopic.NicoVideo_Channel_Blomaga_Upload: Description = $"ブロマガが投稿されました"; break; case NicoRepoItemTopic.NicoVideo_Channel_Video_Upload: Description = $"{this.TimelineItem.SenderChannel.Name} が動画を投稿"; break; case NicoRepoItemTopic.Live_User_Program_OnAirs: Description = $"{this.TimelineItem.SenderNiconicoUser.Nickname} さんが生放送を開始"; break; case NicoRepoItemTopic.Live_User_Program_Reserve: Description = $"{this.TimelineItem.SenderNiconicoUser.Nickname} さんが生放送を予約"; break; case NicoRepoItemTopic.Live_Channel_Program_Onairs: Description = $"{this.TimelineItem.SenderChannel.Name} が生放送を開始"; break; case NicoRepoItemTopic.Live_Channel_Program_Reserve: Description = $"{this.TimelineItem.SenderChannel.Name} が生放送を予約"; break; default: break; } }