public static (int downloadedImageCount, long downloadedImagesSize) GetDownloadedImagesInformation(WebtoonInfo webtoonInfo)
        {
            WebtoonKey webtoonKey  = new WebtoonKey(webtoonInfo.WebtoonTitleId);
            int        count       = 0;
            long       size        = 0;
            int        lastEpisode = webtoonInfo.GetLastEpisodeNo();

            for (int episodeNo = 1; episodeNo <= lastEpisode; episodeNo++)
            {
                if (!webtoonInfo.Episodes.ContainsKey(episodeNo))
                {
                    continue;
                }
                EpisodeInfo episodeInfo = webtoonInfo.Episodes[episodeNo];
                string[]    imageUrls   = episodeInfo.EpisodeImageUrls;
                for (int imageIndex = 0; imageIndex < imageUrls.Length; imageIndex++)
                {
                    ImageKey imageKey = new ImageKey(webtoonInfo.WebtoonTitleId, episodeNo, imageIndex);
                    if (IO.Exists(BuildImageFileFullDirectory(webtoonInfo, imageKey), BuildImageFileName(webtoonInfo, imageKey)))
                    {
                        count++;
                        size += new FileInfo(BuildImageFileFullDirectory(webtoonInfo, imageKey) + "\\" + BuildImageFileName(webtoonInfo, imageKey)).Length;
                    }
                }
            }
            return(count, size);
        }
        public static ImageKey[] BuildImageKeysToDown(WebtoonInfo webtoonInfo)
        {
            List <ImageKey> list   = new List <ImageKey>();
            int             latest = webtoonInfo.GetLastEpisodeNo();

            for (int episodeNo = 1; episodeNo <= latest; episodeNo++)
            {
                if (!webtoonInfo.Episodes.ContainsKey(episodeNo))
                {
                    continue;
                }
                EpisodeInfo episodeInfo = webtoonInfo.Episodes[episodeNo];
                string[]    imageUrls   = episodeInfo.EpisodeImageUrls;
                for (int imageIndex = 0; imageIndex < imageUrls.Length; imageIndex++)
                {
                    ImageKey imageKey = new ImageKey(webtoonInfo.WebtoonTitleId, episodeNo, imageIndex);
                    if (IO.Exists(BuildImageFileFullDirectory(webtoonInfo, imageKey), BuildImageFileName(webtoonInfo, imageKey)))
                    {
                        continue;
                    }
                    list.Add(imageKey);
                }
            }
            return(list.ToArray());
        }
예제 #3
0
        /// <summary>
        /// "{0}({1}) [{2}/{3}] ({4:P}) [{5}]"
        /// <code>{0}:웹툰 제목</code>
        /// <code>{1}:웹툰 아이디</code>
        /// <code>{2}:현재 포지션</code>
        /// <code>{3}:총 작업수</code>
        /// <code>{4}:퍼센트</code>
        /// <code>{5}:회차 날짜</code>
        /// </summary>
        /// <param name="webtoonInfo"></param>
        /// <param name="ProgressTextFormat"></param>
        public void UpdateWebtoonInfo(string ProgressTextFormat, IProgress <string> progress)
        {
            WebtoonKey webtoonKey = new WebtoonKey(webtoonInfo.WebtoonTitleId);

            //comic.naver.com에서 최신 회차의 EpisodeNo를 불러옵니다.
            agent.LoadPage(webtoonKey.BuildUrl());
            int latestEpisodeNo = int.Parse(parser.GetLatestEpisodeNo());
            //webtoonInfo중 가장 마지막 회차의 EpisodeNo를 불러옵니다.
            int lastEpisodeNo = webtoonInfo.GetLastEpisodeNo();

            //웹툰 정보를 업데이트합니다.
            for (int episodeNo = lastEpisodeNo + 1; episodeNo <= latestEpisodeNo; episodeNo++)
            {
                EpisodeKey episodeKey = new EpisodeKey(webtoonKey.TitleId, episodeNo);
                agent.LoadPage(episodeKey.BuildUrl());
                string currentEpisodeNo = parser.GetCurrentEpisodeNo();
                if (!currentEpisodeNo.Equals(episodeNo.ToString()))
                {
                    //비어있는 번호 건너뛰기
                    continue;
                }
                string   episodeTitle = parser.GetEpisodeTitle();
                string   episodeDate  = parser.GetEpisodeDate();
                string[] imageUrls    = parser.GetComicContentImageUrls();
                webtoonInfo.Episodes.Add(episodeNo, new EpisodeInfo(episodeKey, episodeTitle, imageUrls, episodeDate));
                progress.Report(string.Format(ProgressTextFormat,
                                              webtoonInfo.WebtoonTitle,
                                              webtoonInfo.WebtoonTitleId,
                                              (episodeNo).ToString("D" + latestEpisodeNo.ToString().Length.ToString()),
                                              latestEpisodeNo,
                                              (decimal)(episodeNo) / latestEpisodeNo,
                                              webtoonInfo.Episodes[episodeNo].EpisodeDate,
                                              webtoonInfo.Episodes[episodeNo].EpisodeTitle));
            }
            Thread.Sleep(500);
        }
        /// <summary>
        /// "{0}({1}) [{2}/{3}] ({4:P}) [{5}]"
        /// <code>{0}:웹툰 제목</code>
        /// <code>{1}:웹툰 아이디</code>
        /// <code>{2}:현재 포지션</code>
        /// <code>{3}:총 작업수</code>
        /// <code>{4}:퍼센트</code>
        /// <code>{5}:회차 날짜</code>
        /// </summary>
        /// <param name="webtoonInfo"></param>
        /// <param name="ProgressTextFormat"></param>
        public static void UpdateWebtoonInfo(WebtoonInfo webtoonInfo, string ProgressTextFormat)
        {
            Agent agent = Agent.Instance;

            Parser.Parser parser     = Parser.Parser.Instance;
            WebtoonKey    webtoonKey = new WebtoonKey(webtoonInfo.WebtoonTitleId);

            //comic.naver.com에서 최신 회차의 EpisodeNo를 불러옵니다.
            agent.LoadPage(webtoonKey.BuildUrl());
            int latestEpisodeNo = int.Parse(parser.GetLatestEpisodeNo());
            //webtoonInfo중 가장 마지막 회차의 EpisodeNo를 불러옵니다.
            int lastEpisodeNo = webtoonInfo.GetLastEpisodeNo();

            //웹툰 정보를 업데이트합니다.
            for (int episodeNo = lastEpisodeNo + 1; episodeNo <= latestEpisodeNo; episodeNo++)
            {
                EpisodeKey episodeKey = new EpisodeKey(webtoonKey.TitleId, episodeNo);
                agent.LoadPage(episodeKey.BuildUrl());
                string currentEpisodeNo = parser.GetCurrentEpisodeNo();
                if (!currentEpisodeNo.Equals(episodeNo.ToString()))
                {
                    //비어있는 번호 건너뛰기
                    continue;
                }
                string   episodeTitle = parser.GetEpisodeTitle();
                string   episodeDate  = parser.GetEpisodeDate();
                string[] imageUrls    = parser.GetComicContentImageUrls();
                webtoonInfo.Episodes.Add(episodeNo, new EpisodeInfo(episodeKey, episodeTitle, imageUrls, episodeDate));
                ProgressChangedEvent(string.Format(ProgressTextFormat,
                                                   webtoonInfo.WebtoonTitle,
                                                   webtoonInfo.WebtoonTitleId,
                                                   (episodeNo).ToString("D" + latestEpisodeNo.ToString().Length.ToString()),
                                                   latestEpisodeNo,
                                                   (decimal)(episodeNo) / latestEpisodeNo,
                                                   webtoonInfo.Episodes[episodeNo].EpisodeDate,
                                                   webtoonInfo.Episodes[episodeNo].EpisodeTitle));
            }
            Console.WriteLine();
        }