Example #1
0
        public async Task <ComicDetail> StoreAsync()
        {
            KeepingAction?.Invoke(null, null, null, null, KeepingActionTypes.BeginGetEntity);
            OnBeginGetEntity();
            var entity = await Provider.GetChaptersAsync(Address);

            try
            {
                if (entity is null)
                {
                    return(null);
                }
                var detail = new ComicDetail {
                    Entity = entity
                };
                var cwps = new List <ChapterWithPage>(entity.Chapters.Length);
                foreach (var item in entity.Chapters)
                {
                    if (tokenSource.IsCancellationRequested)
                    {
                        break;
                    }
                    KeepingAction?.Invoke(entity, item, null, null, KeepingActionTypes.BeginStoreChapter);
                    OnBeginStoreChapter(entity, item);
                    try
                    {
                        var cwp = await StoreChapterAsync(entity, item);

                        cwps.Add(cwp);
                    }
                    catch (Exception ex)
                    {
                        KeepingAction?.Invoke(entity, item, null, ex, KeepingActionTypes.StoreChapterException);
                        OnStoreChapterException(entity, item, ex);
                    }
                    KeepingAction?.Invoke(entity, item, null, null, KeepingActionTypes.EndStoreChapter);
                    OnEndStoreChapter(entity, item);
                }
                if (!tokenSource.IsCancellationRequested)
                {
                    var streamManager = AppEngine.GetRequiredService <RecyclableMemoryStreamManager>();
                    var str           = JsonHelper.Serialize(detail);
                    var buffer        = Encoding.UTF8.GetBytes(str);
                    var path          = ComicIndexName;
                    using (var stream = streamManager.GetStream())
                    {
                        stream.Write(buffer, 0, buffer.Length);
                        stream.Seek(0, SeekOrigin.Begin);
                        await storeService.SaveAsync(path, stream);
                    }
                }
                return(detail);
            }
            finally
            {
                KeepingAction?.Invoke(entity, null, null, null, KeepingActionTypes.EndGetEntity);
                OnEndGetEntity(entity);
            }
        }
Example #2
0
        public static DownloadLink LoadDownloadAsync(this IServiceProvider host,
                                                     string address,
                                                     ComicDetail detail,
                                                     IComicSaver saver)
        {
            var provider = host.GetComicProvider(address);

            if (provider == null)
            {
                return(default);
Example #3
0
 public ComicDownloadRequest(IComicSaver saver,
                             ComicEntity entity,
                             ComicDetail detail,
                             IReadOnlyCollection <DownloadItemRequest> requests,
                             IComicSourceProvider provider)
 {
     Detail           = detail;
     Entity           = entity;
     Saver            = saver;
     DownloadRequests = requests;
     Provider         = provider;
 }
Example #4
0
        public void GivenValueInit_PropertyMustEqualGiven()
        {
            var saver    = new NullSaver();
            var entity   = new ComicEntity();
            var detail   = new ComicDetail();
            var reqs     = new List <DownloadItemRequest>();
            var provider = new NullSourceProvider();
            var req      = new ComicDownloadRequest(saver, entity, detail, reqs, provider);

            Assert.AreEqual(saver, req.Saver);
            Assert.AreEqual(entity, req.Entity);
            Assert.AreEqual(detail, req.Detail);
            Assert.AreEqual(reqs, req.DownloadRequests);
            Assert.AreEqual(provider, req.Provider);
            var listener = new NullDownloadListener();

            req.Listener = listener;
            Assert.AreEqual(listener, req.Listener);
        }
Example #5
0
        //lấy link tập
        void crawlTrap(ChromeDriver chrome, string url, int codeComic)
        {
            chrome.Url = (url);
            chrome.Navigate();

            var nodeList = chrome.FindElementsByCssSelector("#info > table > tbody > tr > td > a").ToList();

            var nameComic = chrome.FindElementsByCssSelector("body > table > tbody > tr:nth-child(1) > td:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2) > a:nth-child(6)").FirstOrDefault().Text + "漫畫";

            //漫畫 : truyện tranh
            foreach (var item in nodeList)
            {
                ComicDetail comic = new ComicDetail();
                comic.link      = item.GetAttribute("href");
                comic.name      = nameComic + "-" + item.Text;
                comic.codeComic = codeComic;

                db.ComicDetails.Add(comic);
                db.SaveChanges();
            }
        }