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);
            }
        }
Exemple #8
0
 public NicoRepoLiveTimeline(NicoRepoTimelineItem timelineItem, NicoRepoItemTopic itemType, HohoemaPlaylist playlist) : base(timelineItem, itemType, playlist)
 {
 }
Exemple #9
0
        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;
            }
        }