Пример #1
0
        /// <summary>
        /// Preencho o repositório com as HQs novas
        /// </summary>
        public void Dump(IComicRepository comicRepository, IAuthorRepository authorRepository,
                                IGenreRepository genreRepository, IPublisherRepository publisherRepository,
                                ILogRepository logRepository)
        {
            //Se já processei nesse período, retorno
            DateTime lastSyncDate = logRepository.GetLastComicListUpdate();
            if (lastSyncDate.AddHours(24) > DateTime.Now) return;

            //Espero terminar de processar
            while (_working) Thread.Sleep(10);

            //Busco todas as HQs do banco
            IList<Comic> repoList = comicRepository.Read();

            //Comparo o que mudou
            foreach (ComicVisitor cacheComic in _cache)
            {
                if (repoList.Any(c => c.ComicName.ToUpper().Equals(cacheComic.ComicName.ToUpper()))) continue;

                //Se tem uma HQ nova, adiciono
                Comic dbComic = ComicVisitor.ToComic(cacheComic);
                comicRepository.Add(dbComic);
                cacheComic.ComicId = dbComic.ComicId;
            }

            comicRepository.Save();
            logRepository.SetLastComicListUpdate(DateTime.Now);
        }
Пример #2
0
        /// <summary>
        /// Preencho a HQ com a id passada
        /// </summary>
        public async void Dump(IComicRepository comicRepository, IAuthorRepository authorRepository,
                                IGenreRepository genreRepository, IPublisherRepository publisherRepository,
                                IChapterRepository chapterRepository, ILogRepository logRepository, int id)
        {
            //Se já processei nesse período, retorno
            DateTime lastSyncDate = logRepository.GetLastComicListUpdate();
            if (lastSyncDate.AddHours(24) > DateTime.Now) return;

            //Espero terminar de processar
            while (_working) Thread.Sleep(10);

            //Busco a HQ do repositório
            Comic dbComic = comicRepository.Get(id);

            //Se não tem no repositório, retorno
            if (dbComic == null) return;

            //Busco a HQ do cache
            ComicVisitor cacheComic = _cache.FirstOrDefault(c => c.ComicUrl == dbComic.ComicUrl);

            //Se não existe a HQ no cache ou já foi processada, retorno
            if (cacheComic == null) return;
            if (cacheComic.ComicState != ComicState.Empty) return;

            cacheComic.ComicId = id;

            //Se não processei a HQ ainda
            //Preencho a HQ
            cacheComic.ComicState = ComicState.Working;
            cacheComic = (ComicVisitor)_comicCrawler.Edit(cacheComic);


            AddAuthor(dbComic, authorRepository, cacheComic.DirtyStateAuthor);
            AddGenre(dbComic, genreRepository, cacheComic.DirtyStateGenre);
            AddPublisher(dbComic, publisherRepository, cacheComic.DirtyStatePublisher);
            AddChapters(id, chapterRepository, cacheComic.Chapters);
            
            //Libero a HQ
            cacheComic.ComicState = ComicState.Visited;
        }