예제 #1
0
        private async Task <IEnumerable <MangaUpdatedCluster> > Request(DatabaseExternalLink mangaLinks)
        {
            try
            {
                var result = (await GetClustersForDel(mangaLinks))
                             .Where(it => !(it.Item2 is null))
                             .ToList();
                for (var i = 0; i < result.Count; i++)
                {
                    result[i].cluster.Id = mangaLinks.Id;
                    if (result[i].cluster.Mangas.Any())
                    {
                        result[i].link.LastUpdate = result[i].cluster.Mangas.First().Date + 2;
                    }
                }

                mangaLinks.UpdatedAt = DateTime.UtcNow;
                _database.Update(mangaLinks);
                return(result.Select(it => it.Item2));
            }

            catch (FlurlHttpException ex)
            {
                _logger.LogCritical($"{ex.Message}");
                return(null);
            }
        }
예제 #2
0
        public bool Update(DatabaseExternalLink links)
        {
            var col = _db.GetCollection <DatabaseExternalLink>("external_links");

            col.EnsureIndex(x => x.Id);
            return(col.Upsert(links));
        }
예제 #3
0
        private async Task <IEnumerable <(ExtendedLink link, MangaUpdatedCluster cluster)> > GetClustersForDel(
            DatabaseExternalLink mangaLinks)
        {
            var x = mangaLinks.Links.AsParallel()
                    .Select(it => (it, _config.Services.Manser
                                   .AppendPathSegment("byUrl")
                                   .AppendPathSegment(it.Link.Url)
                                   .SetQueryParam("after", it.LastUpdate)));

            var y = x.Select(it => (it.it, Request(it.Item2))).ToList();
            await Task.WhenAll(y.Select(it => it.Item2));

            return(y.Select(it => (it.it, it.Item2.Result)));
        }