Exemplo n.º 1
0
        /// <summary>
        /// 获取网络章节内容
        /// </summary>
        /// <param name="chapter"></param>
        /// <returns></returns>
        public string GetWebChapterContent(Chapter chapter)
        {
            var objNVB = NVHelper.NVBaseObject(chapter.OriginLink); //获取对应处理类

            if (objNVB != null)
            {
                return(objNVB.GetChapterContent(new NVChapter {
                    Title = chapter.Name, Link = chapter.OriginLink, Sort = chapter.Sort
                }));
            }
            return(string.Empty);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 重新获取
        /// </summary>
        /// <param name="novelId"></param>
        /// <returns></returns>
        public bool ReGetWebsiteNovel(string novelId)
        {
            var novel = Repository.FindSingle(x => x.Id == novelId);

            if (novel == null)
            {
                return(false);
            }
            var objNVB = NVHelper.NVBaseObject(novel.OriginLink); //获取对应处理类

            if (objNVB == null)
            {
                return(false);
            }
            var listNVChapter = objNVB.GetList(novel.OriginLink);//获取章节信息

            if (listNVChapter.Count() > 0)
            {
                var listChapter = new List <Chapter>();
                foreach (var c in listNVChapter.OrderBy(x => x.Sort))
                {
                    var newChapter = new Chapter
                    {
                        NovelId              = novel.Id,
                        NovelName            = novel.Name,
                        Name                 = c.Title,
                        OriginLink           = c.Link,
                        Sort                 = c.Sort,
                        State                = 0,
                        ChapterStartPosition = 0,
                        ChapterEndPosition   = 0
                    };
                    listChapter.Add(newChapter);
                }
                //保存章节信息到 以novelId为表名的章节表中
                _chapterManager.AddRandChapter(novel.Id, listChapter);
                return(true);
            }
            return(false);
        }
Exemplo n.º 3
0
        public bool Search(User user, string url)
        {
            if (!string.IsNullOrEmpty(url))
            {
                var count = Repository.Find(x => x.OriginLink == url).Count();
                if (count > 0)
                {
                    return(false);
                }
                var objNVB = NVHelper.NVBaseObject(url);
                if (objNVB == null)
                {
                    return(false);
                }
                ThreadPool.QueueUserWorkItem(x =>
                {
                    var websiteNovelApp           = AutofacExt.GetFromFac <WebsiteNovelApp>();
                    var websiteApp                = AutofacExt.GetFromFac <WebsiteApp>();
                    var webSearchHelper           = new WebSearchHelper();
                    webSearchHelper.SpecRegStr    = objNVB.GetSpecRegex();
                    webSearchHelper.GetNovelInfo += objNVB.GetNovelInfo;
                    webSearchHelper.Search(url);

                    string guid = Guid.NewGuid().ToString();
                    websiteApp.Repository.Add(new Website {
                        Id = guid, Name = "新的搜索任务", OriginLink = url, CreatorId = user.Id
                    });
                    var websiteId = guid;

                    ThreadPool.QueueUserWorkItem(m =>
                    {
                        CheckWebsiteState(websiteId, websiteApp, ref webSearchHelper);
                    });

                    try
                    {
                        websiteApp.UpdateState(websiteId, 1);
                        while (true)
                        {
                            if (webSearchHelper.IsAllDone)
                            {
                                websiteApp.UpdateState(websiteId, 2);
                                break;
                            }
                            Thread.Sleep(100);

                            if (webSearchHelper.WebSiteBookInfoQueue.Count > 0)
                            {
                                NVNovel nVNovel = (NVNovel)webSearchHelper.WebSiteBookInfoQueue.Dequeue();
                                if (nVNovel != null)
                                {
                                    nVNovel.WebsiteId = websiteId;
                                    var websiteNovel  = Mapper.Map <WebsiteNovel>(nVNovel);
                                    websiteNovelApp.AddWebsitNovel(websiteId, websiteNovel);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        websiteApp.UpdateState(websiteId, -1);
                        //throw ex;
                    }
                }, objNVB);
                return(true);
            }
            return(false);
        }
Exemplo n.º 4
0
        public bool ReSearch(string websiteId)
        {
            var website = Repository.FindSingle(x => x.Id == websiteId);

            if (website != null)
            {
                var objNVB = NVHelper.NVBaseObject(website.OriginLink);
                if (objNVB == null)
                {
                    return(false);
                }

                ThreadPool.QueueUserWorkItem(x =>
                {
                    var websiteNovelApp           = AutofacExt.GetFromFac <WebsiteNovelApp>();
                    var websiteApp                = AutofacExt.GetFromFac <WebsiteApp>();
                    var webSearchHelper           = new WebSearchHelper();
                    webSearchHelper.SpecRegStr    = objNVB.GetSpecRegex();
                    webSearchHelper.GetNovelInfo += objNVB.GetNovelInfo;
                    webSearchHelper.Search(website.OriginLink);
                    var guid = website.Id;

                    ThreadPool.QueueUserWorkItem(m =>
                    {
                        CheckWebsiteState(websiteId, websiteApp, ref webSearchHelper);
                    });

                    try
                    {
                        websiteApp.UpdateState(guid, 1);
                        while (true)
                        {
                            if (webSearchHelper.IsAllDone)
                            {
                                websiteApp.UpdateState(guid, 2);
                                break;
                            }
                            Thread.Sleep(100);

                            if (webSearchHelper.WebSiteBookInfoQueue.Count > 0)
                            {
                                NVNovel nVNovel = (NVNovel)webSearchHelper.WebSiteBookInfoQueue.Dequeue();
                                if (nVNovel != null)
                                {
                                    nVNovel.WebsiteId = guid;
                                    var websiteNovel  = Mapper.Map <WebsiteNovel>(nVNovel);
                                    websiteNovelApp.AddWebsitNovel(guid, websiteNovel);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        websiteApp.UpdateState(guid, -1);
                        //throw ex;
                    }
                });
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public bool GetWebsiteNovel(User user, string url, string novelName)
        {
            if (Repository.Find(x => x.OriginLink == url).Count() > 0)
            {
                return(true);
            }
            var tableListUrl = url;
            var objNVB       = NVHelper.NVBaseObject(tableListUrl); //获取对应处理类

            if (objNVB == null)
            {
                return(false);
            }
            var newNovelId = Guid.NewGuid().ToString();
            var newNovel   = new Novel
            {
                Id           = newNovelId,
                Name         = string.IsNullOrEmpty(novelName) ? DateTime.Now.ToString("yyyyMMddHHmmss") : novelName,
                PhysicalPath = @"books\" + newNovelId,
                OriginLink   = tableListUrl,
                FromType     = 1
            };

            //newNovel.PhysicalPath = Path.Combine(AppContext.BaseDirectory, @"books\" + newNovel.Id);

            Repository.Add(newNovel);                                                      //添加到Novel表
            _userNovelApp.AddRelationShip(user.Id, user.Name, newNovel.Id, newNovel.Name); //添加用户与novel关系

            var listNVChapter = objNVB.GetList(tableListUrl);                              //获取章节信息

            if (listNVChapter.Count() > 0)
            {
                var chapterName = objNVB.GetNovelName();
                //更改novel状态为获取中
                Repository.Update(x => x.Id == newNovel.Id, n => new Novel {
                    State = 1, Name = chapterName
                });

                var listChapter = new List <Chapter>();
                foreach (var c in listNVChapter.OrderBy(x => x.Sort))
                {
                    var newChapter = new Chapter
                    {
                        NovelId              = newNovel.Id,
                        NovelName            = newNovel.Name,
                        Name                 = c.Title,
                        OriginLink           = c.Link,
                        Sort                 = c.Sort,
                        State                = 0,
                        ChapterStartPosition = 0,
                        ChapterEndPosition   = 0
                    };
                    listChapter.Add(newChapter);
                }
                //保存章节信息到 以novelId为表名的章节表中
                _chapterManager.AddRandChapter(newNovel.Id, listChapter);
                //线程获取章节数据保存到本地
            }
            else
            {
                //更改novel状态为获取中
                Repository.Update(x => x.Id == newNovel.Id, n => new Novel {
                    State = -2,
                });
            }
            return(false);
        }