Ejemplo n.º 1
0
        public (int downloadedImageCount, long downloadedImagesSize) GetDownloadedImagesInformation()
        {
            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 (File.Exists(fileNameBuilder.BuildImageFileFullPath(imageKey)))
                    {
                        count++;
                        size += new FileInfo(fileNameBuilder.BuildImageFileFullPath(imageKey)).Length;
                    }
                }
            }
            return(count, size);
        }
        /// <summary>
        /// webtoonKey가 지정하는 웹툰의 폴더 이름을 정의된 포맷 형식(<seealso cref="Config.WebtoonDirectoryNameFormat"/>)에 따라 생성합니다.
        /// </summary>
        /// <param name="episodeKey"></param>
        /// <returns></returns>
        private static string BuildWebtoonDirectoryName(WebtoonInfo webtoonInfo, WebtoonKey webtoonKey)
        {
            string titleId      = webtoonInfo.WebtoonTitleId;
            string webtoonTitle = webtoonInfo.WebtoonTitle;

            return(string.Format(config.WebtoonDirectoryNameFormat,
                                 titleId,
                                 ReplaceFolderName(webtoonTitle)));
        }
        /// <summary>
        /// webtoonKey가 지정하는 웹툰의 폴더 이름을 정의된 포맷 형식(<seealso cref="Config.WebtoonDirectoryNameFormat"/>)에 따라 생성합니다.
        /// </summary>
        /// <param name="episodeKey"></param>
        /// <returns></returns>
        public string BuildWebtoonDirectoryName(WebtoonKey webtoonKey)
        {
            string titleId       = webtoonInfo.WebtoonTitleId;
            string webtoonTitle  = webtoonInfo.WebtoonTitle;
            string webtoonWriter = webtoonInfo.WebtoonWriter;

            return(string.Format(ReplaceFolderName(config.WebtoonDirectoryNameFormat),
                                 titleId,
                                 ReplaceFolderName(webtoonTitle),
                                 ReplaceFolderName(webtoonWriter)));
        }
        /// <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();
        }
Ejemplo n.º 5
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);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// <seealso cref="WebtoonInfo"/>의 새 인스턴스를 초기화합니다.
 /// </summary>
 /// <param name="title"></param>
 /// <param name="titleId"></param>
 public WebtoonInfo(WebtoonKey webtoonKey, string title)
 {
     WebtoonTitle   = title;
     WebtoonTitleId = webtoonKey.TitleId;
     Episodes       = new Dictionary <int, EpisodeInfo>();
 }