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(); }
/// <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> /// <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>(); }