コード例 #1
0
        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);
        }
コード例 #2
0
 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()}개 이미지 다운로드 시작...");
         }
     });
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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;
 }
コード例 #7
0
ファイル: HitomiLog.cs プロジェクト: rollrat/hitomi-copy
        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));
        }
コード例 #8
0
ファイル: frmGroupInfo.cs プロジェクト: rollrat/hitomi-copy
        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));
                }
            }
        }
コード例 #9
0
        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);
                }
            }
        }
コード例 #10
0
ファイル: frmGroupInfo.cs プロジェクト: rollrat/hitomi-copy
        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));
        }
コード例 #11
0
ファイル: HitomiCommon.cs プロジェクト: rollrat/hitomi-copy
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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));
        }
コード例 #14
0
 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));
         }
     }
 }
コード例 #15
0
        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);
        }
コード例 #16
0
        /// <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);
        }
コード例 #17
0
        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));
        }
コード例 #18
0
        /// <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.");
            }
        }
コード例 #19
0
ファイル: FsManager.cs プロジェクト: rollrat/hitomi-copy
        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));
            }
        }
コード例 #20
0
        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;
        }
コード例 #21
0
 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;
         }));
     });
 }
コード例 #22
0
        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);
                    }
                }));
            });
コード例 #23
0
 private static HArticleModel ConvertTo(HitomiArticle article, string url, string magic)
 {
     return(ConvertTo(HitomiLegalize.ArticleToMetadata(article), url, magic));
 }
コード例 #24
0
 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}");
             }
         }));
     });
 }