public void RemoteDownloadArticleFromId(string id) { tabControl1.SelectedIndex = 2; HitomiMetadata metadata = new HitomiMetadata(); foreach (var v in hitomi_data.metadata_collection) { if (v.ID.ToString() == id) { metadata = v; break; } } PicElement fake_pe = new PicElement(this); HitomiArticle article = new HitomiArticle(); article.Magic = metadata.ID.ToString(); article.Title = metadata.Name; if (metadata.Artists != null) { article.Artists = metadata.Artists[0]; } if (metadata.Tags != null) { article.Tags = metadata.Tags.ToList(); } fake_pe.Article = article; fake_pe.Label = metadata.Name; RemoteDownloadArticle(fake_pe); }
public static void ProcessEXHentai(HArticleModel commander, bool unstable = false) { Task.Run(() => { if (unstable) { MainWindow.Instance.Fade_MiddlePopup(true, $"불안정한 작업 진행중...[{unstable_request}개]"); } var pages = ExHentaiParser.GetPagesUri(NetCommon.DownloadExHentaiString(commander.URL)); var pages_html = EmiliaJobEXH.Instance.AddJob(pages.ToList(), x => { }).Select(x => ExHentaiParser.GetImagesUri(x)); List <string> pages_all = new List <string>(); pages_html.ToList().ForEach(x => pages_all.AddRange(x)); var imagelink = EmiliaJobEXH.Instance.AddJob(pages_all, x => { }).Select(x => ExHentaiParser.GetImagesAddress(x)); List <string> tags = new List <string>(); if (commander.male != null) { tags.AddRange(commander.male.Select(x => "male:" + x.Replace(' ', '_'))); } if (commander.female != null) { tags.AddRange(commander.female.Select(x => "female:" + x.Replace(' ', '_'))); } if (commander.misc != null) { tags.AddRange(commander.misc.Select(x => x.Replace(' ', '_'))); } HitomiArticle article = new HitomiArticle { Magic = commander.Magic, Title = commander.Title, Artists = commander.artist, Groups = commander.group, Series = commander.parody, Tags = tags.ToArray(), Language = commander.language != null ? commander.language[0] : "", Characters = commander.character }; string dir = HitomiCommon.MakeDownloadDirectory(article); article.ImagesLink = imagelink.ToList(); Directory.CreateDirectory(dir); var se = Koromo_Copy.Interface.SemaphoreExtends.MakeDefault(); se.Cookie = "igneous=30e0c0a66;ipb_member_id=2742770;ipb_pass_hash=6042be35e994fed920ee7dd11180b65f;"; DownloadSpace.Instance.RequestDownload(article.Title, imagelink.ToArray(), imagelink.Select(y => Path.Combine(dir, y.Split('/').Last())).ToArray(), se, dir, article); if (unstable) { Interlocked.Decrement(ref unstable_request); } if (unstable && unstable_request != 0) { MainWindow.Instance.Fade_MiddlePopup(true, $"불안정한 작업 진행중...[{unstable_request}개]"); } else { MainWindow.Instance.FadeOut_MiddlePopup($"{imagelink.Count()}개 이미지 다운로드 시작..."); } }); }
static public string DownloadThumbnail(HitomiArticle ha, string prefix = "") { string temp = Path.GetTempFileName(); WebClient wc = new WebClient(); wc.Encoding = Encoding.UTF8; wc.DownloadFile(prefix + ha.Thumbnail, temp); return(temp); }
public static async Task <IArticle> Collect(string uri) { string magic = Regex.Match(uri, "(\\d+)").Value; string html_source = await Task.Run(() => NetCommon.DownloadString(HiyobiCommon.GetInfoAddress(magic))); HitomiArticle article = HiyobiParser.ParseGalleryConents(html_source); return(article); }
public void AddArticle(HitomiArticle article) { HitomiLogModel mm = new HitomiLogModel(); mm.Id = article.Magic; mm.Title = article.Title; mm.Artists = article.Artists; mm.Tags = article.Tags; model.Add(mm); }
public void SetModelFromArticle(HitomiArticle article) { model.Id = article.Magic; model.Title = article.Title; model.Artists = article.Artists; model.Series = article.Series; model.Types = article.Types; model.Pages = article.ImagesLink.Count; model.Tags = article.Tags; }
public void AddArticle(HitomiArticle article) { HitomiLogModel mm = new HitomiLogModel(); mm.Id = article.Magic; mm.Title = article.Title; mm.Artists = article.Artists; mm.Tags = article.Tags; mm.Time = DateTime.Now; model.Add(mm); downloaded.Add(Convert.ToInt32(article.Magic)); }
private void frmArtistInfo_Load(object sender, EventArgs e) { Text += group; var hitomi_data = HitomiData.Instance.metadata_collection; Dictionary <string, int> tag_count = new Dictionary <string, int>(); int gallery_count = 0; foreach (var metadata in hitomi_data) { if (metadata.Groups != null && metadata.Tags != null && (metadata.Language == HitomiSetting.Instance.GetModel().Language || HitomiSetting.Instance.GetModel().Language == "ALL") && metadata.Groups.Contains(group)) { gallery_count += 1; foreach (var tag in metadata.Tags) { if (tag_count.ContainsKey(tag)) { tag_count[tag] += 1; } else { tag_count.Add(tag, 1); } } } } var result = tag_count.ToList(); result.Sort((pair1, pair2) => pair2.Value.CompareTo(pair1.Value)); List <ListViewItem> lvil = new List <ListViewItem>(); for (int i = 0; i < result.Count; i++) { lvil.Add(new ListViewItem(new string[] { result[i].Key, result[i].Value.ToString() })); } lvMyTagRank.Items.AddRange(lvil.ToArray()); pbLoad.Maximum = gallery_count; foreach (var metadata in hitomi_data) { if (metadata.Groups != null && (metadata.Language == HitomiSetting.Instance.GetModel().Language || HitomiSetting.Instance.GetModel().Language == "ALL") && metadata.Groups.Contains(group)) { HitomiArticle article = HitomiCommon.MetadataToArticle(metadata); Task.Run(() => ProcessLoading(article)); } } }
private void Button_Click(object sender, RoutedEventArgs e) { var tag = (sender as Button).Tag.ToString(); HitomiArticle ha = Article as HitomiArticle; if (tag == "FindArtist") { if (ha.Artists != null) { ArtistViewerWindow avw = new ArtistViewerWindow(ha.Artists[0]); avw.Show(); } } else if (tag == "FindGroup") { if (ha.Groups != null) { GroupViewerWindow avw = new GroupViewerWindow(ha.Groups[0]); avw.Show(); } } else if (tag == "Preview") { PreviewWindow pw = new PreviewWindow(Article); pw.Show(); } else if (tag == "ShowOnEX") { string result = ExHentaiTool.GetAddressFromMagicTitle(ha.Magic, ha.Title); if (result != "") { System.Diagnostics.Process.Start(result); } else { MainWindow.Instance.FadeOut_MiddlePopup("익헨 주소를 찾지 못했습니다 ㅠㅠ", false); } } else if (tag == "Comment") { string result = ExHentaiTool.GetAddressFromMagicTitle(ha.Magic, ha.Title); if (result != "") { (new CommentWindow(result)).Show(); } else { MainWindow.Instance.FadeOut_MiddlePopup("익헨 주소를 찾지 못했습니다 ㅠㅠ", false); } } }
private void ProcessLoading(HitomiArticle article) { article.Thumbnail = HitomiCore.GetThumbnailAddress(article.Magic); string temp = Path.GetTempFileName(); WebClient wc = new WebClient(); wc.Headers["Accept-Encoding"] = "application/x-gzip"; wc.Encoding = Encoding.UTF8; wc.DownloadFileCompleted += CallbackThumbnail; wc.DownloadFileAsync(new Uri(HitomiDef.HitomiThumbnail + article.Thumbnail), temp, new Tuple <string, HitomiArticle>(temp, article)); }
public static HitomiMetadata ArticleToMetadata(HitomiArticle article) { HitomiMetadata metadata = new HitomiMetadata(); metadata.Artists = article.Artists; metadata.Characters = article.Characters; metadata.Groups = article.Groups; metadata.ID = Convert.ToInt32(article.Magic); metadata.Language = LegalizeLanguage(article.Language); metadata.Name = article.Title; metadata.Parodies = article.Series; metadata.Tags = article.Tags.Select(x => LegalizeTag(x)).ToArray(); metadata.Type = article.Types; return(metadata); }
public static HitomiArticle MetadataToArticle(HitomiMetadata metadata) { HitomiArticle article = new HitomiArticle(); article.Artists = metadata.Artists; article.Characters = metadata.Characters; article.Groups = metadata.Groups; article.Language = metadata.Language; article.Magic = metadata.ID.ToString(); article.Series = metadata.Parodies; article.Tags = metadata.Tags; article.Title = metadata.Name; article.Types = metadata.Type; return(article); }
private string MakeDownloadDirectory(HitomiArticle article) { string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); string title = article.Title; string artists = article.Artists; foreach (char c in invalid) { title = title.Replace(c.ToString(), ""); } foreach (char c in invalid) { artists = artists.Replace(c.ToString(), ""); } return(Regex.Replace(Regex.Replace(Regex.Replace(tbDownloadPath.Text, "{Title}", title), "{Artists}", artists), "{Id}", article.Magic)); }
static public void DownloadArticle(HitomiArticle ha, string folder, CallBack2 callback, PicElement pe, int v1, int v2) { Directory.CreateDirectory(folder); for (int i = v1; i < v2; i++) { WebClient wc = new WebClient(); wc.Headers["Accept-Encoding"] = "application/x-gzip"; wc.Encoding = Encoding.UTF8; wc.DownloadFileCompleted += wc_da; if (ha.TagsKor == false) { wc.DownloadFileAsync(new Uri(HitomiDef.GetDownloadImageAddress(ha.Magic, ha.ImagesLink[i])), Path.Combine(folder, ha.ImagesLink[i]), new Tuple <HitomiArticle, int, CallBack2, PicElement>(ha, i, callback, pe)); } } }
private static HArticleModel ConvertTo(HitomiArticle article, string url, string magic) { var article2 = new HArticleModel(); article2.Magic = magic; article2.ArticleType = HArticleType.Hitomi; article2.URL = url; article2.artist = article.Artists; article2.group = article.Groups; article2.parody = article.Series; article2.misc = article.Tags; article2.character = article.Characters; article2.Language = article.Language; article2.Title = article.Title; article2.Type = article.Type; article2.Thumbnail = article.Thumbnail; return(article2); }
/// <summary> /// Info 페이지를 분석합니다. /// </summary> /// <param name="html"></param> /// <returns></returns> public static HitomiArticle ParseGalleryConents(string html) { HitomiArticle article = new HitomiArticle(); HtmlDocument document = new HtmlDocument(); document.LoadHtml(html); HtmlNode node = document.DocumentNode.SelectNodes("//main/div")[0]; article.Magic = node.SelectSingleNode("./a").GetAttributeValue("href", "").Split('/')[2]; article.Thumbnail = node.SelectSingleNode("./a/img").GetAttributeValue("src", ""); var span = node.SelectSingleNode("./span"); article.Title = span.SelectSingleNode("./h5/a/b").InnerText; var table = span.SelectNodes("./table/tr"); var table_dic = new Dictionary <string, HtmlNode>(); table.ToList().ForEach(x => table_dic.Add(x.SelectSingleNode("./td[1]").InnerText.Remove(2), x)); if (table_dic.ContainsKey("작가")) { try { article.Artists = table_dic["작가"].SelectNodes("./td[2]/a").ToList().Select(x => x.InnerText).ToArray(); } catch { } } if (table_dic.ContainsKey("원작")) { try { article.Series = table_dic["원작"].SelectNodes("./td[2]/a").ToList().Select(x => $"{x.GetAttributeValue("data-original", "")}|{x.InnerText}").ToArray(); } catch { } } if (table_dic.ContainsKey("종류")) { try { article.Type = table_dic["종류"].SelectSingleNode("./td[2]/a").InnerText; } catch { } } if (table_dic.ContainsKey("태그")) { try { article.Tags = table_dic["태그"].SelectNodes("./td[2]/a").ToList().Select(x => $"{x.GetAttributeValue("data-original", "")}|{x.InnerText}").ToArray(); } catch { } } if (table_dic.ContainsKey("캐릭")) { try { article.Characters = table_dic["캐릭"].SelectNodes("./td[2]/a").ToList().Select(x => $"{x.GetAttributeValue("data-original", "")}|{x.InnerText}").ToArray(); } catch { } } return(article); }
private void CallbackSearch2(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null) { return; } HitomiArticle ha = HitomiParser.ParseGallery(e.Result); ha.Magic = (e.UserState as string[])[0]; ha.Title = (e.UserState as string[])[1]; ha.Artists = (e.UserState as string[])[2]; ha.Tags = new List <string>((e.UserState as string[])[3].Split(',')); string temp = Path.GetTempFileName(); WebClient wc = new WebClient(); wc.Headers["Accept-Encoding"] = "application/x-gzip"; wc.Encoding = Encoding.UTF8; wc.DownloadFileCompleted += CallbackThumbnail; wc.DownloadFileAsync(new Uri(HitomiDef.HitomiThumbnail + ha.Thumbnail), temp, new Tuple <string, HitomiArticle>(temp, ha)); }
/// <summary> /// 히토미아티클을 이용해 익헨 주소를 가져옵니다. /// </summary> /// <param name="args"></param> static void ProcessAddress(string[] args) { HitomiArticle article = null; try { article = JsonConvert.DeserializeObject <HitomiArticle>(args[0]); } catch { } if (article == null) { Console.Instance.WriteErrorLine("Not valid 'HitomiArticle' objects. Check your pipe or arguments."); return; } string result = ExHentaiTool.GetAddressFromMagicTitle(article.Magic, article.Title); if (result != "") { Console.Instance.WriteLine(result); } else { Console.Instance.WriteLine("Not found."); } }
private void AddPanel() { int count = 0; foreach (var md in metadatas) { if (!md.Item3.HasValue) { continue; } count++; if (count == 100) { return; } string path = Path.Combine(tbPath.Text, md.Item1); IPicElement pe; pe = new PicElement(this); HitomiArticle article = HitomiCommon.MetadataToArticle(md.Item3.Value); pe.Article = article; pe.Label = article.Title; using (var zip = ZipFile.Open(path, ZipArchiveMode.Read)) { string tmp = Path.GetTempFileName(); zip.Entries[0].ExtractToFile(tmp, true); pe.SetImageFromAddress(tmp, 150, 200); } pe.Font = this.Font; this.Post(() => ImagePanel.Controls.Add(pe as Control)); } }
public SearchElements(IArticle article) { InitializeComponent(); Article = article; HitomiArticle ha = article as HitomiArticle; if (HitomiLog.Instance.Contains(ha.Magic)) { Downloaded.Visibility = Visibility.Visible; } Title.Text = $"제목 : {ha.Title}"; if (ha.Artists != null) { InfoPanel.Children.Add(new TextBlock { Text = $"작가 : " + string.Join(", ", ha.Artists), FontSize = 17, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 0, 0, 0) }); } if (ha.Groups != null) { InfoPanel.Children.Add(new TextBlock { Text = $"그룹 : " + string.Join(", ", ha.Groups), FontSize = 17, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 0, 0, 0) }); } if (ha.Series != null) { InfoPanel.Children.Add(new TextBlock { Text = $"시리즈 : " + string.Join(", ", ha.Series), FontSize = 17, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 0, 0, 0) }); } if (ha.Characters != null) { InfoPanel.Children.Add(new TextBlock { Text = $"캐릭터 : " + string.Join(", ", ha.Characters), FontSize = 17, HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 0, 0, 0) }); } if (ha.Tags != null) { foreach (var tag in ha.Tags) { var e = new Button(); string text = tag; var stack_panel = new StackPanel { Orientation = Orientation.Horizontal }; if (tag.StartsWith("female:")) { e.Background = new SolidColorBrush(Color.FromRgb(0xE8, 0x60, 0xA0)); e.BorderBrush = e.Background; text = tag.Substring("female:".Length); stack_panel.Children.Add(new PackIcon { Kind = PackIconKind.GenderFemale, Opacity = 0.8, VerticalAlignment = VerticalAlignment.Center, }); } else if (tag.StartsWith("male:")) { e.Background = new SolidColorBrush(Color.FromRgb(0x00, 0xB1, 0xCF)); e.BorderBrush = e.Background; text = tag.Substring("male:".Length); stack_panel.Children.Add(new PackIcon { Kind = PackIconKind.GenderMale, Opacity = 0.8, VerticalAlignment = VerticalAlignment.Center, }); } else { e.Background = Brushes.LightGray; e.BorderBrush = e.Background; } stack_panel.Children.Add(new TextBlock { FontSize = 11, Margin = new Thickness(2, 0, 3, 0), VerticalAlignment = VerticalAlignment.Center, Text = text }); e.Content = stack_panel; e.Height = 20; e.FontSize = 10; e.Margin = new Thickness(1, 1, 1, 1); e.Click += E_Click; e.Tag = tag; Tags.Children.Add(e); } } Date.Text = HitomiDate.estimate_datetime(Convert.ToInt32(ha.Magic)).ToString(); Loaded += SearchElements_Loaded; }
private void SearchElements_Loaded(object sender, EventArgs ex) { if (init) { return; } init = true; Task.Run(() => { HitomiArticle ha = Article as HitomiArticle; try { ha.Thumbnail = HitomiCommon.HitomiThumbnail + HitomiParser.ParseGalleryBlock(Koromo_Copy.Net.NetCommon.DownloadString( $"{HitomiCommon.HitomiGalleryBlock}{ha.Magic}.html")).Thumbnail; ha.ImagesLink = HitomiParser.GetImageLink(Koromo_Copy.Net.NetCommon.DownloadString(HitomiCommon.GetImagesLinkAddress(ha.Magic))); } catch { ha.IsUnstable = true; var har = HCommander.GetArticleData(Convert.ToInt32(ha.Magic)); if (!har.HasValue) { MessageBox.Show($"{ha.Magic}를 찾을 수 없습니다. 이 항목은 히요비, 이헨, 익헨 어디에도 없었습니다. 프로그램 제작자에게 문의하세요.", "Koromo copy", MessageBoxButton.OK, MessageBoxImage.Error); return; } ha.UnstableModel = har.Value; ha.Thumbnail = ha.UnstableModel.Thumbnail; ha.ImagesLink = new List <string>(); } Application.Current.Dispatcher.BeginInvoke(new Action( delegate { if (ha.IsUnstable && ha.UnstableModel.ArticleType == HArticleType.EXHentai) { var image = NetCommon.GetExHentaiClient().DownloadData(new Uri(ha.UnstableModel.Thumbnail)); using (var ms = new System.IO.MemoryStream(image)) { BitmapImage.BeginInit(); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.CacheOption = BitmapCacheOption.OnLoad; BitmapImage.StreamSource = ms; BitmapImage.EndInit(); } } else { BitmapImage.BeginInit(); BitmapImage.UriSource = new Uri(ha.Thumbnail); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.EndInit(); BitmapImage.DownloadCompleted += B_DownloadCompleted; } Page.Text = ha.ImagesLink.Count + " Pages"; Image.Source = BitmapImage; Image.Stretch = Stretch.Uniform; Image.Width = BitmapImage.Width * 200 / BitmapImage.Height; })); }); }
private void SearchMaterialElements_Loaded(object sender, RoutedEventArgs e) { if (init) { return; } init = true; Task.Run(() => { HitomiArticle ha = Article as HitomiArticle; try { ha.Thumbnail = HitomiCommon.HitomiThumbnail + HitomiParser.ParseGalleryBlock(Koromo_Copy.Net.NetCommon.DownloadString( $"{HitomiCommon.HitomiGalleryBlock}{ha.Magic}.html")).Thumbnail; ha.ImagesLink = HitomiParser.GetImageLink(Koromo_Copy.Net.NetCommon.DownloadString(HitomiCommon.GetImagesLinkAddress(ha.Magic))); } catch { ha.IsUnstable = true; var har = HCommander.GetArticleData(Convert.ToInt32(ha.Magic)); if (!har.HasValue) { MessageBox.Show($"{ha.Magic}를 찾을 수 없습니다. 이 항목은 히요비, 이헨, 익헨 어디에도 없었습니다. 프로그램 제작자에게 문의하세요.", "Koromo copy", MessageBoxButton.OK, MessageBoxImage.Error); return; } ha.UnstableModel = har.Value; ha.Thumbnail = ha.UnstableModel.Thumbnail; ha.ImagesLink = new List <string>(); } Application.Current.Dispatcher.BeginInvoke(new Action( delegate { try { if (ha.IsUnstable && ha.UnstableModel.ArticleType == HArticleType.EXHentai) { var image = NetCommon.GetExHentaiClient().DownloadData(new Uri(ha.UnstableModel.Thumbnail)); using (var ms = new System.IO.MemoryStream(image)) { BitmapImage.BeginInit(); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.CacheOption = BitmapCacheOption.OnLoad; BitmapImage.StreamSource = ms; BitmapImage.EndInit(); } } else { BitmapImage.BeginInit(); BitmapImage.UriSource = new Uri(ha.Thumbnail); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.EndInit(); BitmapImage.DownloadCompleted += B_DownloadCompleted; } } catch (Exception ex) { Monitor.Instance.Push("[SME Error] " + ex.Message + "\r\n" + ex.StackTrace); } ImageCount.Text = ha.ImagesLink.Count + " Pages"; Image.Source = BitmapImage; if (ha.Artists != null && ha.Artists[0].ToUpper() != "N/A") { var stack = new StackPanel { Orientation = Orientation.Horizontal }; stack.Children.Add(new PackIcon { Kind = PackIconKind.Artist, Opacity = .56 }); stack.Children.Add(new TextBlock { Margin = new Thickness(8, 0, 0, 0), VerticalAlignment = VerticalAlignment.Center, Text = "작가 목록" }); var menu_item = new MenuItem { Header = stack }; foreach (var artist in ha.Artists) { var item = new MenuItem { Header = new TextBlock { Text = artist }, Tag = $"artist:{artist.Replace(' ', '_')}" }; item.Click += MenuItem_Click; menu_item.Items.Add(item); } Menu.Items.Add(menu_item); } if (ha.Groups != null && ha.Groups[0].ToUpper() != "N/A") { var stack = new StackPanel { Orientation = Orientation.Horizontal }; stack.Children.Add(new PackIcon { Kind = PackIconKind.UserGroup, Opacity = .56 }); stack.Children.Add(new TextBlock { Margin = new Thickness(8, 0, 0, 0), VerticalAlignment = VerticalAlignment.Center, Text = "그룹 목록" }); var menu_item = new MenuItem { Header = stack }; foreach (var group in ha.Groups) { var item = new MenuItem { Header = new TextBlock { Text = group }, Tag = $"group:{group.Replace(' ', '_')}" }; item.Click += MenuItem_Click; menu_item.Items.Add(item); } Menu.Items.Add(menu_item); } if (ha.Series != null) { var stack = new StackPanel { Orientation = Orientation.Horizontal }; stack.Children.Add(new PackIcon { Kind = PackIconKind.Book, Opacity = .56 }); stack.Children.Add(new TextBlock { Margin = new Thickness(8, 0, 0, 0), VerticalAlignment = VerticalAlignment.Center, Text = "시리즈 목록" }); var menu_item = new MenuItem { Header = stack }; foreach (var series in ha.Series) { MenuItem item = null; if (KoreanSeries.SeriesMap(series) == series) { item = new MenuItem { Header = new TextBlock { Text = series }, Tag = $"series:{series.Replace(' ', '_')}" } } ; else { item = new MenuItem { Header = new TextBlock { Text = $"{series} ({KoreanSeries.SeriesMap(series)})" }, Tag = $"series:{series.Replace(' ', '_')}" } }; item.Click += MenuItem_Click; menu_item.Items.Add(item); } Menu.Items.Add(menu_item); } if (ha.Tags != null) { var stack = new StackPanel { Orientation = Orientation.Horizontal }; stack.Children.Add(new PackIcon { Kind = PackIconKind.Tag, Opacity = .56 }); stack.Children.Add(new TextBlock { Margin = new Thickness(8, 0, 0, 0), VerticalAlignment = VerticalAlignment.Center, Text = "태그 목록" }); var menu_item = new MenuItem { Header = stack }; foreach (var tag in ha.Tags) { MenuItem item = null; if (KoreanTag.TagMap(tag) == tag) { item = new MenuItem { Header = new TextBlock { Text = tag }, Tag = $"{(tag.StartsWith("female:") || tag.StartsWith("male:") ? tag.Replace(' ', '_') : $"tag:{tag.Replace(' ', '_')}")}" } } ; else if (KoreanTag.TagMap(tag).Contains(':')) { item = new MenuItem { Header = new TextBlock { Text = $"{tag} ({KoreanTag.TagMap(tag).Split(':')[1]})" }, Tag = $"{(tag.StartsWith("female:") || tag.StartsWith("male:") ? tag.Replace(' ', '_') : $"tag:{tag.Replace(' ', '_')}")}" } } ; else { item = new MenuItem { Header = new TextBlock { Text = $"{tag} ({KoreanTag.TagMap(tag)})" }, Tag = $"{(tag.StartsWith("female:") || tag.StartsWith("male:") ? tag.Replace(' ', '_') : $"tag:{tag.Replace(' ', '_')}")}" } }; item.Click += MenuItem_Click; menu_item.Items.Add(item); } Menu.Items.Add(menu_item); } })); });
private static HArticleModel ConvertTo(HitomiArticle article, string url, string magic) { return(ConvertTo(HitomiLegalize.ArticleToMetadata(article), url, magic)); }
private void SearchElements_Loaded(object sender, EventArgs ex) { if (init) { return; } init = true; Task.Run(() => { HitomiArticle ha = Article as HitomiArticle; try { ha.Thumbnail = HitomiCommon.HitomiThumbnail + HitomiParser.ParseGalleryBlock(Koromo_Copy.Net.NetCommon.DownloadString( $"{HitomiCommon.HitomiGalleryBlock}{ha.Magic}.html")).Thumbnail; var info = Koromo_Copy.Net.NetCommon.DownloadString(HitomiCommon.GetImagesLinkAddress(ha.Magic)); ha.ImagesLink = HitomiParser.GetImageLink(info); ha.HasWebp = HitomiParser.CheckHasWebp(info); ha.Hashs = HitomiParser.GetHash(info); } catch { ha.IsUnstable = true; var har = HCommander.GetArticleData(Convert.ToInt32(ha.Magic)); if (!har.HasValue) { Koromo_Copy.Console.Console.Instance.WriteErrorLine($"Cannot find '{ha.Magic}'! This item was not found in Hiyobi, Ex-Hentai, and Hitomi. Contact to the developer.\r\n" + "Run program as an administrator, or use a DPI program or VPN."); return; } ha.UnstableModel = har.Value; ha.Thumbnail = ha.UnstableModel.Thumbnail; ha.ImagesLink = new List <string>(); } Application.Current.Dispatcher.BeginInvoke(new Action( delegate { try { if (ha.IsUnstable && ha.UnstableModel.ArticleType == HArticleType.EXHentai) { var image = NetCommon.GetExHentaiClient().DownloadData(new Uri(ha.UnstableModel.Thumbnail)); using (var ms = new System.IO.MemoryStream(image)) { BitmapImage.BeginInit(); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.CacheOption = BitmapCacheOption.OnLoad; BitmapImage.StreamSource = ms; BitmapImage.EndInit(); } } else { BitmapImage.BeginInit(); BitmapImage.UriSource = new Uri(ha.Thumbnail); if (Settings.Instance.Model.LowQualityImage) { BitmapImage.DecodePixelWidth = 100; } BitmapImage.EndInit(); BitmapImage.DownloadCompleted += B_DownloadCompleted; } if (!ha.IsUnstable) { Page.Text = ha.ImagesLink.Count + " Pages"; } else { Page.Text = ha.UnstableModel.Length + " Pages"; } Image.Source = BitmapImage; Image.Stretch = Stretch.Uniform; Image.Width = BitmapImage.Width * 200 / BitmapImage.Height; } catch (Exception e) { Monitor.Instance.Push($"[Search Elements] isunstable={ha.IsUnstable} article_type={ha.UnstableModel}" + $" thumbnail={(ha.UnstableModel.Thumbnail ?? ha.Thumbnail)}" + $"\r\n{e.Message}\r\n{e.StackTrace}"); } })); }); }