Beispiel #1
0
        public async Task SetSourcesToAllChannelsAsync(CancellationToken cancel = default)
        {
//            var pageSize = 500;
//            var channels = await _channelRepository.GetAsync(new ChannelQuery(0, pageSize), cancel);
//            var totalPages = (Int32) (Math.Ceiling(channels.TotalCount / (Double) pageSize));
//            for (var i = 1; i < totalPages; i++)
//            {
//            }


            var allChannels = await _channelRepository.GetAsync(ChannelQuery.GetAll(), cancel);

            var allSourcesAggregated = await _sourceRepository.GetAggregationByTitleAsync(SourceQuery.GetAll(), cancel);

            var sources = allSourcesAggregated.Items.ToDictionary(x => x.Title, v => v.Sources);

            foreach (var channel in allChannels.Items)
            {
                if (channel.LockSourceUrl)
                {
                    continue;
                }

                var titleLower = channel.Title.ToLowerInvariant();

                List <Source> processingSources = new List <Source>(1);
                if (sources.ContainsKey(titleLower))
                {
                    processingSources = sources[titleLower];
                }

                if (channel.AlternativeTitles.IsNotEmpty())
                {
                    foreach (var alternativeTitle in channel.AlternativeTitles)
                    {
                        var alternativeTitleLower = alternativeTitle.ToLowerInvariant();
                        {
                            if (sources.ContainsKey(alternativeTitleLower))
                            {
                                processingSources.AddRange(sources[alternativeTitleLower]);
                            }
                        }
                    }
                }

                processingSources = processingSources.Where(x => x.FrameSize > 0).ToList();
                if (processingSources.IsEmpty())
                {
                    continue;
                }

                var actualSource = processingSources.OrderBy(x => x.PriorityNumber)
                                   .ThenByDescending(x => x.LastScanDate)
                                   .ThenByDescending(x => x.FrameSize)
                                   .First();

                channel.CurrentSourceUrl = actualSource.Url;
                await _channelRepository.UpdateAsync(channel, cancel);
            }
        }
        public async Task HandleReply(Message message)
        {
            var replyMessage = message.ReplyToMessage.Text;

            if (replyMessage == MessageConstants.EnterQuery && message.Text != null)
            {
                var queryModel = new ChannelQuery(message.Text);

                var user = CurrentUser.Instance;

                if (user.Queries is null)
                {
                    user.Queries = new List <ChannelQuery>();
                }

                user.Queries.Add(queryModel);

                _serviceHelper
                .TryCatch(() => _userRepository.UpdateAsync(user));

                await _parameterService.SendAsync(message.CurrentChatId(), queryModel.Name);
            }
            else
            {
                throw new ArgumentException(nameof(message));
            }
        }
Beispiel #3
0
        private async Task LoadData(bool isRefresh)
        {
            if (!NavigationService.IsNetworkAvailable ||
                (_channelsLoaded && !isRefresh))
            {
                return;
            }

            var query = new ChannelQuery
            {
                UserId = AuthenticationService.Current.LoggedInUserId
            };

            try
            {
                SetProgressBar(AppResources.SysTrayGettingChannels);

                var items = await ApiClient.GetChannels(query);

                Channels = new ObservableCollection <BaseItemDto>(items.Items);

                _channelsLoaded = true;
            }
            catch (HttpException ex)
            {
                Utils.HandleHttpException(ex, "LoadData(" + isRefresh + ")", NavigationService, Log);
            }

            SetProgressBar();
        }
Beispiel #4
0
        public Task <QueryResult <BaseItemDto> > GetChannels(ChannelQuery query, CancellationToken cancellationToken)
        {
            var user = string.IsNullOrWhiteSpace(query.UserId)
                ? null
                : _userManager.GetUserById(new Guid(query.UserId));

            var channels = _channelEntities.OrderBy(i => i.SortName).ToList();

            if (user != null)
            {
                channels = channels.Where(i => GetChannelProvider(i).IsEnabledFor(user) && i.IsVisible(user))
                           .ToList();
            }

            // Get everything
            var fields = Enum.GetNames(typeof(ItemFields))
                         .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
                         .ToList();

            var returnItems = channels.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                              .ToArray();

            var result = new QueryResult <BaseItemDto>
            {
                Items            = returnItems,
                TotalRecordCount = returnItems.Length
            };

            return(Task.FromResult(result));
        }
Beispiel #5
0
        public async Task <SearchResponse> GetResults()
        {
            SearchResponse      response = new SearchResponse();
            List <SearchResult> result   = await LoadItems();

            List <string> videosId    = new List <string>();
            List <string> channelsId  = new List <string>();
            List <string> playlistsId = new List <string>();

            result.ForEach(item =>
            {
                switch (item.Id.Kind)
                {
                case "youtube#video":
                    videosId.Add(item.Id.VideoId);
                    break;

                case "youtube#channel":
                    channelsId.Add(item.Id.ChannelId);
                    break;

                case "youtube#playlist":
                    playlistsId.Add(item.Id.PlaylistId);
                    break;
                }
            });

            VideoQuery videoQuery = new VideoQuery
            {
                Part       = "snippet,contentDetails",
                Id         = string.Join(",", videosId),
                MaxResults = this.Query.MaxResults
            };
            VideoListResponse videoResponse = await service.GetVideoInfo(videoQuery);

            response.Videos.AddRange(videoResponse.Items);

            ChannelQuery channelQuery = new ChannelQuery
            {
                Part       = "snippet,statistics",
                Id         = string.Join(",", channelsId),
                MaxResults = this.Query.MaxResults
            };
            ChannelListResponse channelResponse = await service.GetChannelInfo(channelQuery);

            response.Channels.AddRange(channelResponse.Items);

            PlaylistQuery playlistQuery = new PlaylistQuery
            {
                Part       = "snippet,status,contentDetails",
                Id         = string.Join(",", playlistsId),
                MaxResults = this.Query.MaxResults
            };
            PlaylistListResponse playlistResponse = await service.GetPlaylistInfo(playlistQuery);

            response.Playlists.AddRange(playlistResponse.Items);

            return(response);
        }
Beispiel #6
0
        public Task <QueryResult <Channel> > GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken)
        {
            var user = string.IsNullOrWhiteSpace(query.UserId)
                ? null
                : _userManager.GetUserById(new Guid(query.UserId));

            var channels = GetAllChannels()
                           .Select(GetChannelEntity)
                           .OrderBy(i => i.SortName)
                           .ToList();

            if (query.SupportsLatestItems.HasValue)
            {
                var val = query.SupportsLatestItems.Value;
                channels = channels.Where(i => (GetChannelProvider(i) is ISupportsLatestMedia) == val)
                           .ToList();
            }
            if (query.IsFavorite.HasValue)
            {
                var val = query.IsFavorite.Value;
                channels = channels.Where(i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite == val)
                           .ToList();
            }

            if (user != null)
            {
                channels = channels.Where(i => GetChannelProvider(i).IsEnabledFor(user.Id.ToString("N")) && i.IsVisible(user))
                           .ToList();
            }

            var all        = channels;
            var totalCount = all.Count;

            if (query.StartIndex.HasValue)
            {
                all = all.Skip(query.StartIndex.Value).ToList();
            }
            if (query.Limit.HasValue)
            {
                all = all.Take(query.Limit.Value).ToList();
            }

            var returnItems = all.ToArray();

            var result = new QueryResult <Channel>
            {
                Items            = returnItems,
                TotalRecordCount = totalCount
            };

            return(Task.FromResult(result));
        }
Beispiel #7
0
        private async Task <ItemsResult> GetChannelsAsync(ItemListViewModel viewModel)
        {
            var query = new ChannelQuery
            {
                UserId = _sessionManager.CurrentUser.Id
            };

            var result = await _apiClient.GetChannels(query, CancellationToken.None);

            return(new ItemsResult
            {
                Items = result.Items,
                TotalRecordCount = result.TotalRecordCount
            });
        }
Beispiel #8
0
        public async Task <Page <Channel> > GetAsync(ChannelQuery query,
                                                     CancellationToken cancel = default)
        {
            var allChannels = await GetAllChannelsFromFileAsync(cancel);

            var page = new Page <Channel>
            {
                Items = allChannels.Skip(query.Offset)
                        .Take(query.Limit)
                        .Select(x => x.Value)
                        .ToList(),
                TotalCount = allChannels.Count
            };

            return(page);
        }
Beispiel #9
0
        public async Task <List <Channel> > GetChannels(ChannelQuery query)
        {
            Func <Task <List <Channel> > > add = async() =>
            {
                var p = new Dictionary <string, string>();
                if (!query.IncludeArchived)
                {
                    p.Add("exclude_archived", "1");
                }

                var root = await _slackApiHelper.Get <ChannelsRoot>("channels.list", _settings.SlackApiAuthToken, p);

                return(query.MyChannelsOnly
                    ? root.channels.Where(c => c.is_member).ToList()
                    : root.channels.ToList());
            };

            return(await _cache.Get("Channels", add, TimeSpan.FromMinutes(3)));
        }
Beispiel #10
0
        /// <summary>
        /// 获取子栏目列表
        /// </summary>
        /// <returns>栏目列表</returns>
        protected List <Channel> GetChannels()
        {
            ChannelQuery query = new ChannelQuery();

            if (OrderFields == null || OrderFields == string.Empty)
            {
                OrderFields = "Index|Asc";
            }
            query.OrderKeys = OrderFields;
            query.State     = ArticleStates.Started;

            if (ParentID != null && ParentID.Length > 0)
            {
                query.ParentID = ParentID;
            }
            else if (Level != null && Level.Length > 0 & We7Helper.IsNumber(Level))
            {
                query.ParentID = GetParentIDByLevel((int.Parse(Level) - 1).ToString());
            }
            else
            {
                if (CurrentChannel == null)
                {
                    query.ParentID = We7.We7Helper.EmptyGUID;
                }
                else
                {
                    query.ParentID = CurrentChannel.ID;
                }
            }
            if (Tag != null && Tag.Length > 0)
            {
                query.Tag = Tag;
            }
            List <Channel> list = ChannelHelper.QueryChannels(query);

            if (list == null)
            {
                list = new List <Channel>();
            }
            list = FormatChannelsData(list);
            return(list);
        }
Beispiel #11
0
        public QueryResult <BaseItemDto> GetChannels(ChannelQuery query)
        {
            var user = query.UserId.Equals(Guid.Empty)
                ? null
                : _userManager.GetUserById(query.UserId);

            var internalResult = GetChannelsInternal(query);

            var dtoOptions = new DtoOptions();

            // TODO Fix The co-variant conversion (internalResult.Items) between Folder[] and BaseItem[], this can generate runtime issues.
            var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user);

            var result = new QueryResult <BaseItemDto>(
                query.StartIndex,
                internalResult.TotalRecordCount,
                returnItems);

            return(result);
        }
Beispiel #12
0
        public async Task <QueryResult <BaseItemDto> > GetChannels(ChannelQuery query, CancellationToken cancellationToken)
        {
            var user = string.IsNullOrEmpty(query.UserId)
                ? null
                : _userManager.GetUserById(query.UserId);

            var internalResult = await GetChannelsInternal(query, cancellationToken).ConfigureAwait(false);

            var dtoOptions = new DtoOptions()
            {
            };

            var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user);

            var result = new QueryResult <BaseItemDto>
            {
                Items            = returnItems,
                TotalRecordCount = internalResult.TotalRecordCount
            };

            return(result);
        }
Beispiel #13
0
        public QueryResult <BaseItemDto> GetChannels(ChannelQuery query)
        {
            var user = query.UserId.Equals(Guid.Empty)
                ? null
                : _userManager.GetUserById(query.UserId);

            var internalResult = GetChannelsInternal(query);

            var dtoOptions = new DtoOptions()
            {
            };

            var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user);

            var result = new QueryResult <BaseItemDto>
            {
                Items            = returnItems,
                TotalRecordCount = internalResult.TotalRecordCount
            };

            return(result);
        }
Beispiel #14
0
        public async Task <QueryResult <BaseItemDto> > GetChannels(ChannelQuery query, CancellationToken cancellationToken)
        {
            var user = string.IsNullOrWhiteSpace(query.UserId)
                ? null
                : _userManager.GetUserById(new Guid(query.UserId));

            var internalResult = await GetChannelsInternal(query, cancellationToken).ConfigureAwait(false);

            // Get everything
            var fields = Enum.GetNames(typeof(ItemFields))
                         .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true))
                         .ToList();

            var returnItems = internalResult.Items.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                              .ToArray();

            var result = new QueryResult <BaseItemDto>
            {
                Items            = returnItems,
                TotalRecordCount = internalResult.TotalRecordCount
            };

            return(result);
        }
Beispiel #15
0
        public QueryResult <Channel> GetChannelsInternal(ChannelQuery query)
        {
            var user = query.UserId.Equals(Guid.Empty)
                ? null
                : _userManager.GetUserById(query.UserId);

            var channels = GetAllChannels()
                           .Select(GetChannelEntity)
                           .OrderBy(i => i.SortName)
                           .ToList();

            if (query.IsRecordingsFolder.HasValue)
            {
                var val = query.IsRecordingsFolder.Value;
                channels = channels.Where(i =>
                {
                    try
                    {
                        var hasAttributes = GetChannelProvider(i) as IHasFolderAttributes;

                        return((hasAttributes != null && hasAttributes.Attributes.Contains("Recordings", StringComparer.OrdinalIgnoreCase)) == val);
                    }
                    catch
                    {
                        return(false);
                    }
                }).ToList();
            }

            if (query.SupportsLatestItems.HasValue)
            {
                var val = query.SupportsLatestItems.Value;
                channels = channels.Where(i =>
                {
                    try
                    {
                        return(GetChannelProvider(i) is ISupportsLatestMedia == val);
                    }
                    catch
                    {
                        return(false);
                    }
                }).ToList();
            }

            if (query.SupportsMediaDeletion.HasValue)
            {
                var val = query.SupportsMediaDeletion.Value;
                channels = channels.Where(i =>
                {
                    try
                    {
                        return(GetChannelProvider(i) is ISupportsDelete == val);
                    }
                    catch
                    {
                        return(false);
                    }
                }).ToList();
            }
            if (query.IsFavorite.HasValue)
            {
                var val = query.IsFavorite.Value;
                channels = channels.Where(i => _userDataManager.GetUserData(user, i).IsFavorite == val)
                           .ToList();
            }

            if (user != null)
            {
                channels = channels.Where(i =>
                {
                    if (!i.IsVisible(user))
                    {
                        return(false);
                    }

                    try
                    {
                        return(GetChannelProvider(i).IsEnabledFor(user.Id.ToString("N", CultureInfo.InvariantCulture)));
                    }
                    catch
                    {
                        return(false);
                    }
                }).ToList();
            }

            var all        = channels;
            var totalCount = all.Count;

            if (query.StartIndex.HasValue)
            {
                all = all.Skip(query.StartIndex.Value).ToList();
            }
            if (query.Limit.HasValue)
            {
                all = all.Take(query.Limit.Value).ToList();
            }

            var returnItems = all.ToArray();

            if (query.RefreshLatestChannelItems)
            {
                foreach (var item in returnItems)
                {
                    RefreshLatestChannelItems(GetChannelProvider(item), CancellationToken.None).GetAwaiter().GetResult();
                }
            }

            return(new QueryResult <Channel>
            {
                Items = returnItems,
                TotalRecordCount = totalCount
            });
        }
Beispiel #16
0
 public Task <Page <Channel> > GetAsync(ChannelQuery query,
                                        CancellationToken cancel = default)
 {
     return(_channelRepository.GetAsync(query, cancel));
 }
Beispiel #17
0
        /// <summary>
        /// 获取子栏目列表
        /// </summary>
        /// <returns>栏目列表</returns>
        protected List <Channel> GetChannels()
        {
            List <Channel> list = new List <Channel>();

            if (DesignHelper.IsDesigning)
            {
                list = DesignRecords;
            }
            else
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("ChannelDataProvider$GetChannels$");
                sb.AppendFormat("ID:{0}$Url:{1}$", ID, We7Helper.GetChannelUrlFromUrl(Request.RawUrl));


                list = CacheRecord.Create("channel").GetInstance <List <Channel> >(sb.ToString(), delegate()
                {
                    ChannelQuery query = new ChannelQuery();
                    if (OrderFields == null || OrderFields == string.Empty)
                    {
                        OrderFields = "Index|Asc";
                    }
                    query.OrderKeys = OrderFields;
                    query.State     = ArticleStates.Started;

                    if (ParentID != null && ParentID.Length > 0)
                    {
                        query.ParentID = ParentID;
                    }
                    else if (Level != null && Level.Length > 0 & We7Helper.IsNumber(Level))
                    {
                        query.ParentID = GetParentIDByLevel((int.Parse(Level) - 1).ToString());
                    }
                    else
                    {
                        query.ParentID = ChannelID;
                    }
                    if (Tag != null && Tag.Length > 0)
                    {
                        query.Tag = Tag;
                    }
                    if (IncludeAllSons)
                    {
                        query.IncludeAllSons = true;
                    }

                    if (channelFlag && string.IsNullOrEmpty(level))
                    {
                        if (ThisChannel == null)
                        {
                            ThisChannel = new Channel();
                        }
                        ThisChannel.HaveSon = ChannelHelper.HasChild(ChannelID);
                        if (!ThisChannel.HaveSon && noChildsDisplay)
                        {
                            query.ParentID = ThisChannel.ParentID;
                        }
                    }
                    return(ChannelHelper.QueryChannels(query));
                });
            }
            return(list != null?FormatChannelsData(list) : new List <Channel>());
        }
        public async Task <List <Channel> > GetChannels(ChannelQuery query)
        {
            var channels = await GetJson <ChannelsRoot>("channels");

            return(channels.channels.ToList());
        }
Beispiel #19
0
 public QueryResult <Channel> GetChannelsInternal(ChannelQuery query)
 {
     var user = query.UserId.Equals(default)