Example #1
0
        private void Index_Load(object sender, EventArgs e)
        {
            ColumnSorter.InitListView(listView1);
            ColumnSorter.InitListView(listView2);

            List <HitomiTagdata> tags = new List <HitomiTagdata>();

            tags.AddRange(HitomiData.Instance.tagdata_collection.female);
            tags.AddRange(HitomiData.Instance.tagdata_collection.male);
            tags.AddRange(HitomiData.Instance.tagdata_collection.tag);

            List <Tuple <string, string, int> > tag_e2k = new List <Tuple <string, string, int> >();

            foreach (var tag in tags)
            {
                string k_try = KoreanTag.TagMap(tag.Tag);
                if (k_try != tag.Tag)
                {
                    if (k_try.Contains(":"))
                    {
                        tag_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try.Split(':')[1], tag.Count));
                    }
                    else
                    {
                        tag_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try, tag.Count));
                    }
                }
            }
            tag_e2k.Sort((a, b) => b.Item3.CompareTo(a.Item3));

            List <ListViewItem> lvi = new List <ListViewItem>();

            for (int i = 0; i < tag_e2k.Count; i++)
            {
                lvi.Add(new ListViewItem(new string[] { (i + 1).ToString(), tag_e2k[i].Item1, tag_e2k[i].Item2, tag_e2k[i].Item3.ToString() }));
            }
            listView1.Items.AddRange(lvi.ToArray());

            List <Tuple <string, string, int> > series_e2k = new List <Tuple <string, string, int> >();

            foreach (var tag in HitomiData.Instance.tagdata_collection.series)
            {
                string k_try = KoreanSeries.SeriesMap(tag.Tag);
                if (k_try != tag.Tag)
                {
                    series_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try, tag.Count));
                }
            }
            series_e2k.Sort((a, b) => b.Item3.CompareTo(a.Item3));

            List <ListViewItem> lvi2 = new List <ListViewItem>();

            for (int i = 0; i < series_e2k.Count; i++)
            {
                lvi2.Add(new ListViewItem(new string[] { (i + 1).ToString(), series_e2k[i].Item1, series_e2k[i].Item2, series_e2k[i].Item3.ToString() }));
            }
            listView2.Items.AddRange(lvi2.ToArray());
        }
        private void ZipViewerElements_Loaded(object sender, RoutedEventArgs e)
        {
            if (loaded)
            {
                return;
            }
            loaded = true;
            if (offline_mode == false && !File.Exists(zip_file_name))
            {
                Title.Text  = $"파일을 찾을 수 없음";
                Artist.Text = zip_file_name;
                return;
            }
            set_rateeffect();
            Task.Run(() =>
            {
                try
                {
                    Application.Current.Dispatcher.BeginInvoke(new Action(
                                                                   delegate
                    {
                        Title.Text      = model.Title;
                        Artist.Text     = model.Artists != null ? model.Artists[0] : "";
                        ImageCount.Text = $"{model.Pages} Pages";

                        bool seperator = false;
                        if (model.Artists != null)
                        {
                            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 model.Artists)
                            {
                                var item = new MenuItem {
                                    Header = new TextBlock {
                                        Text = artist
                                    }, Tag = $"artist:{artist.Replace(' ', '_')}"
                                };
                                item.Click += subitem_click;
                                menu_item.Items.Add(item);
                            }
                            seperator = true;
                            Menu.Items.Add(new Separator {
                                Margin = new Thickness(4, 0, 4, 0), Background = Brushes.Gray
                            });
                            Menu.Items.Add(menu_item);
                        }
                        if (model.Groups != null)
                        {
                            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 model.Groups)
                            {
                                var item = new MenuItem {
                                    Header = new TextBlock {
                                        Text = group
                                    }, Tag = $"group:{group.Replace(' ', '_')}"
                                };
                                item.Click += subitem_click;
                                menu_item.Items.Add(item);
                            }
                            if (!seperator)
                            {
                                seperator = true;
                                Menu.Items.Add(new Separator {
                                    Margin = new Thickness(8, 0, 8, 0), Background = Brushes.Gray
                                });
                            }
                            Menu.Items.Add(menu_item);
                        }
                        if (model.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 model.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 += subitem_click;
                                menu_item.Items.Add(item);
                            }
                            if (!seperator)
                            {
                                seperator = true;
                                Menu.Items.Add(new Separator {
                                    Margin = new Thickness(8, 0, 8, 0), Background = Brushes.Gray
                                });
                            }
                            Menu.Items.Add(menu_item);
                        }
                        if (model.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 model.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 += subitem_click;
                                menu_item.Items.Add(item);
                            }
                            if (!seperator)
                            {
                                seperator = true;
                                Menu.Items.Add(new Separator {
                                    Margin = new Thickness(8, 0, 8, 0), Background = Brushes.Gray
                                });
                            }
                            Menu.Items.Add(menu_item);
                        }
                    }));

                    if (offline_mode == false)
                    {
                        zipFile      = ZipFile.Open(zip_file_name, ZipArchiveMode.Read);
                        var zipEntry = !zipFile.Entries[0].Name.EndsWith(".json") ? zipFile.Entries[0] : zipFile.Entries[1];
                        zipStream    = zipEntry.Open();

                        Application.Current.Dispatcher.BeginInvoke(new Action(
                                                                       delegate
                        {
                            var bitmap = new BitmapImage();
                            bitmap.BeginInit();
                            bitmap.DecodePixelWidth = 250;
                            bitmap.CacheOption      = BitmapCacheOption.OnLoad;
                            bitmap.StreamSource     = zipStream;
                            bitmap.EndInit();
                            bitmap.DownloadCompleted += Bitmap_DownloadCompleted;

                            Image.Source = bitmap;
                        }));
                    }
                    else if (download_thumbnail)
                    {
                        var thumbnail = HitomiCommon.HitomiThumbnail + HitomiParser.ParseGalleryBlock(Koromo_Copy.Net.NetCommon.DownloadString(
                                                                                                          $"{HitomiCommon.HitomiGalleryBlock}{model.Id}.html")).Thumbnail;
                        Application.Current.Dispatcher.BeginInvoke(new Action(
                                                                       delegate
                        {
                            var bitmap = new BitmapImage();
                            bitmap.BeginInit();
                            bitmap.UriSource        = new Uri(thumbnail);
                            bitmap.DecodePixelWidth = 240;
                            bitmap.CacheOption      = BitmapCacheOption.OnLoad;
                            bitmap.EndInit();
                            //bitmap.DownloadCompleted += Bitmap_DownloadCompleted;
                            Image.Source = bitmap;
                        }));
                    }
                }
                catch (Exception ex)
                {
                    Monitor.Instance.Push(ex.Message);
                    Monitor.Instance.Push(ex.StackTrace);
                }
            });
        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);
                    }
                }));
            });
Example #4
0
        private void Index_Loaded(object sender, RoutedEventArgs e)
        {
            if (!SearchSpace.Instance.IsMetadataLoaded || loaded)
            {
                return;
            }
            loaded = true;

            List <HitomiTagdata> tags = new List <HitomiTagdata>();

            tags.AddRange(HitomiIndex.Instance.tagdata_collection.female);
            tags.AddRange(HitomiIndex.Instance.tagdata_collection.male);
            tags.AddRange(HitomiIndex.Instance.tagdata_collection.tag);

            List <Tuple <string, string, int> > tag_e2k = new List <Tuple <string, string, int> >();

            foreach (var tag in tags)
            {
                string k_try = KoreanTag.TagMap(tag.Tag);
                if (k_try != tag.Tag)
                {
                    if (k_try.Contains(":"))
                    {
                        tag_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try.Split(':')[1], tag.Count));
                    }
                    else
                    {
                        tag_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try, tag.Count));
                    }
                }
            }
            tag_e2k.Sort((a, b) => b.Item3.CompareTo(a.Item3));

            var tagdx = KoreanTagList.DataContext as ToolIndexDataGridViewModel;

            for (int i = 0; i < tag_e2k.Count; i++)
            {
                tagdx.Items.Add(new ToolIndexDataGridItemViewModel
                {
                    인덱스 = (i + 1).ToString(),
                    영어  = tag_e2k[i].Item1,
                    한국어 = tag_e2k[i].Item2,
                    카운트 = tag_e2k[i].Item3.ToString()
                });
            }

            List <Tuple <string, string, int> > series_e2k = new List <Tuple <string, string, int> >();

            foreach (var tag in HitomiIndex.Instance.tagdata_collection.series)
            {
                string k_try = KoreanSeries.SeriesMap(tag.Tag);
                if (k_try != tag.Tag)
                {
                    series_e2k.Add(new Tuple <string, string, int>(tag.Tag, k_try, tag.Count));
                }
            }
            series_e2k.Sort((a, b) => b.Item3.CompareTo(a.Item3));

            var seriesdx = KoreanSeriesList.DataContext as ToolIndexDataGridViewModel;

            for (int i = 0; i < series_e2k.Count; i++)
            {
                seriesdx.Items.Add(new ToolIndexDataGridItemViewModel
                {
                    인덱스 = (i + 1).ToString(),
                    영어  = series_e2k[i].Item1,
                    한국어 = series_e2k[i].Item2,
                    카운트 = series_e2k[i].Item3.ToString()
                });
            }
        }
Example #5
0
        private void contextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e)
        {
            string[] artist    = Article.Artists?.Select(x => x.Trim()).ToArray();
            string[] group     = Article.Groups?.Select(x => x.Trim()).ToArray();
            string[] series    = Article.Series?.Select(x => x.Trim()).ToArray();
            string[] character = Article.Characters?.Select(x => x.Trim()).ToArray();
            string[] tag       = Article.Tags?.Select(x => x.Trim()).ToArray();

            (contextMenuStrip1.Items[1] as ToolStripMenuItem).DropDownItems.Clear();
            if (artist != null)
            {
                (contextMenuStrip1.Items[1] as ToolStripMenuItem).DropDownItems.AddRange(artist.Select(x => new ToolStripMenuItem(x, null, Artist_Click)).ToArray());
            }

            (contextMenuStrip1.Items[2] as ToolStripMenuItem).DropDownItems.Clear();
            if (group != null)
            {
                (contextMenuStrip1.Items[2] as ToolStripMenuItem).DropDownItems.AddRange(group.Select(x => new ToolStripMenuItem(x, null, Group_Click)).ToArray());
            }

            (contextMenuStrip1.Items[3] as ToolStripMenuItem).DropDownItems.Clear();
            if (series != null)
            {
                (contextMenuStrip1.Items[3] as ToolStripMenuItem).DropDownItems.AddRange(series.Select(x => {
                    string ko = KoreanSeries.SeriesMap(x);
                    if (ko != x)
                    {
                        return(new ToolStripMenuItem($"{x} ({ko})", null, Series_Click));
                    }
                    else
                    {
                        return(new ToolStripMenuItem($"{x}", null, Series_Click));
                    }
                }).ToArray());
            }

            (contextMenuStrip1.Items[4] as ToolStripMenuItem).DropDownItems.Clear();
            if (character != null)
            {
                (contextMenuStrip1.Items[4] as ToolStripMenuItem).DropDownItems.AddRange(character.Select(x => new ToolStripMenuItem(x, null, Character_Click)).ToArray());
            }

            (contextMenuStrip1.Items[5] as ToolStripMenuItem).DropDownItems.Clear();
            if (tag != null)
            {
                (contextMenuStrip1.Items[5] as ToolStripMenuItem).DropDownItems.AddRange(tag.Select(x => {
                    string ko = KoreanTag.TagMap(x);
                    if (ko != x)
                    {
                        if (ko.Contains(':'))
                        {
                            return(new ToolStripMenuItem($"{x} ({ko.Split(':')[1]})", null, Tag_Click));
                        }
                        else
                        {
                            return(new ToolStripMenuItem($"{x} ({ko})", null, Tag_Click));
                        }
                    }
                    else
                    {
                        return(new ToolStripMenuItem($"{x}", null, Tag_Click));
                    }
                }).ToArray());
            }
        }