public override async void HitomiPanel_Loaded(object sender, RoutedEventArgs e) { this.nameLabel.Content = h.name + " (로딩중)"; InternetP parser = new InternetP(); parser.index = int.Parse(h.id); h = await parser.HitomiData(); //h = await parser.HitomiData2(h, int.Parse(h.id)); if (Global.config.origin_thumb.Get <bool>() && h.files != null && h.files.Length >= 1 && h.files[0] != null) { this.pageLabel.Content = h.files.Length; this.nameLabel.Content = h.name + " (썸네일 로딩중)"; ImageProcessor.ProcessAsync(h.files[0].url).then((byte[] image) => { h.thumbnail.preview_img = image; base.h = this.h; this.nameLabel.Content = h.name; }, null, sourceName: MethodBase.GetCurrentMethod().FullName()); } else { var preview_image = await ImageProcessor.ProcessAsync(h.thumbnail.preview_url).@catch(null, MethodBase.GetCurrentMethod().FullName()); h.thumbnail.preview_img = preview_image; base.h = this.h; this.nameLabel.Content = h.name; } BitmapImage image = h.thumbnail.preview_img.ToImage(); thumbNail.Source = image; thumbBrush.ImageSource = image; thumbNail.MouseEnter += (object _, MouseEventArgs __) => thumbNail.ToolTip = GetToolTip(panel.Height); Init(); }
private async void HitomiPanel_Loaded(object sender, RoutedEventArgs e) { if (!afterLoad) { return; } if (h.type == Hitomi.Type.Hiyobi) { this.nameLabel.Content = h.name + " (로딩중)"; h.files = new string[0]; InternetP parser = new InternetP(index: int.Parse(h.id)); this.h.files = (await parser.HiyobiFiles()).Select(x => x.url).ToArray(); this.h.page = h.files.Length; this.nameLabel.Content = h.name; Init(); } if (h.type == Hitomi.Type.Hitomi) { this.nameLabel.Content = h.name + " (로딩중)"; InternetP parser = new InternetP(); parser.url = $"https://ltn.hitomi.la/galleries/{h.id}.js"; JObject info = await parser.HitomiGalleryInfo(); h.type = Hitomi.Type.Hitomi; h.tags = parser.HitomiTags(info); h.files = parser.HitomiFiles(info).ToArray(); h.page = h.files.Length; h.thumb = ImageProcessor.LoadWebImage("https:" + h.thumbpath); h.Json = info; h = await parser.HitomiGalleryData(h); this.nameLabel.Content = h.name; Init(); } }
private async void DownloadData_Click(object sender, RoutedEventArgs e) { bool hiyobi = ftype == Hitomi.Type.Hiyobi; if (ftype == Hitomi.Type.Folder) { bool result = await new InternetP(index: int.Parse(h.id)).isHiyobi(); hiyobi = result; } if (hiyobi) { Hitomi h2 = await new HiyobiLoader(text: h.id).Parser(); if (h2.name == "정보없음" && h2.id == "0") { MessageBox.Show("데이터를 받아오는데 실패했습니다."); return; } string folder = h.dir; if (h.type != Hitomi.Type.Folder) { folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Global.DownloadFolder, File2.GetDownloadTitle(File2.SaftyFileName(h2.name))); } if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } File.WriteAllText(Path.Combine(folder, "info.json"), JObject.FromObject(h2).ToString()); MessageBox.Show("데이터를 성공적으로 받았습니다."); authorsPanel.Children.Clear(); authorsPanel.Children.Add(new Label { Content = "작가 :" }); tagPanel.Children.Clear(); Init(); } if (!hiyobi) { InternetP parser = new InternetP(); parser.index = int.Parse(h.id); Hitomi h2 = await parser.HitomiData2(); string folder = h.dir; if (h.type != Hitomi.Type.Folder) { folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Global.DownloadFolder, File2.GetDownloadTitle(File2.SaftyFileName(h2.name))); } if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } File.WriteAllText(Path.Combine(folder, "info.json"), JObject.FromObject(h2).ToString()); MessageBox.Show("데이터를 성공적으로 받았습니다."); authorsPanel.Children.Clear(); authorsPanel.Children.Add(new Label { Content = "작가 :" }); tagPanel.Children.Clear(); Init(); } }
private void Folder_Hiyobi_Search_Click(object sender, RoutedEventArgs e) { MainWindow.MainPanel.Children.Clear(); MainWindow.label.Visibility = Visibility.Visible; MainWindow.label.FontSize = 100; InternetP parser = new InternetP(); parser.keyword = h.name.Replace("|", "|").Split(' ').ToList(); parser.index = 1; parser.HiyobiSearch(data => new InternetP(data: data).ParseJObject(async jobject => { MainWindow.label.Content = 0 + "/" + jobject["list"].ToList().Count; foreach (JToken tk in jobject["list"]) { MainWindow.label.Content = jobject["list"].ToList().IndexOf(tk) + "/" + jobject["list"].ToList().Count; parser = new InternetP(); parser.url = $"https://cdn.hiyobi.me/data/json/{tk["id"]}_list.json"; JArray imgs = await parser.TryLoadJArray(); if (imgs == null) { continue; } Hitomi h = new Hitomi { id = tk["id"].ToString(), name = tk["title"].ToString(), dir = $"https://hiyobi.me/reader/{tk["id"]}", page = imgs.Count, thumbpath = $"https://cdn.hiyobi.me/tn/{tk["id"]}.jpg", thumb = await ImageProcessor.LoadWebImageAsync($"https://cdn.hiyobi.me/tn/{tk["id"]}.jpg"), type = Hitomi.Type.Hiyobi }; Int64 size = 0; h.files = imgs.ToList().Select(x => $"https://cdn.hiyobi.me/data/{tk["id"]}/{x["name"]}").ToArray(); h.FolderByte = size; h.SizePerPage = size / imgs.Count; foreach (JToken tags in tk["tags"]) { Tag tag = new Tag(); if (tags["value"].ToString().Contains(":")) { tag.types = (Tag.Types)Enum.Parse(typeof(Tag.Types), tags["value"].ToString().Split(':')[0]); tag.name = tags["display"].ToString(); } else { tag.types = Structs.Tag.Types.tag; tag.name = tags["display"].ToString(); } h.tags.Add(tag); } MainWindow.MainPanel.Children.Add(new HitomiPanel(h, MainWindow)); Console.WriteLine($"Completed: https://cdn.hiyobi.me/tn/{tk["id"]}.jpg"); } MainWindow.label.Visibility = Visibility.Hidden; })); }
private void MenuHiyobi_Click(object sender, RoutedEventArgs e) { MainPanel.Children.Clear(); LabelSetup(); InternetP parser = new InternetP(url: "https://api.hiyobi.me/list/" + GetPage()); HiyobiLoader hiyobi = new HiyobiLoader(); hiyobi.FastDefault(); parser.LoadJObject(hiyobi.FastParser); }
public void Hiyobi_Search_Button_Click(object sender, RoutedEventArgs e) { MainPanel.Children.Clear(); LabelSetup(); InternetP parser = new InternetP(keyword: Hiyobi_Search_Text.Text.Split(' ').ToList(), index: 1); HiyobiLoader hiyobi = new HiyobiLoader(); hiyobi.FastDefault(); parser.HiyobiSearch(data => new InternetP(data: data).ParseJObject(hiyobi.FastParser)); }
public async Task Parser(int[] ids) { start(ids.Length); InternetP parser = new InternetP(); for (int i = 0; i < ids.Length; i++) { parser.index = ids[i]; Hitomi h = await parser.HitomiData2(); update(h, i, ids.Count()); } end(); }
public async void FastParser(int[] ids) { start(ids.Length); for (int i = 0; i < ids.Length; i++) { InternetP parser = new InternetP(); parser.index = ids[i]; Hitomi h = await parser.HitomiData(); h.type = Hitomi.Type.Hitomi; h.id = ids[i].ToString(); update(h, i, ids.Count()); } end(); }
public async Task <Hitomi> Parser() { InternetP parser; parser = new InternetP(url: $"https://api.hiyobi.me/gallery/{text}"); JObject obj = await parser.LoadJObject(); parser = new InternetP(url: $"https://cdn.hiyobi.me/data/json/{text}_list.json"); JArray imgs = await parser.TryLoadJArray(); if (imgs == null) { return(null); } Hitomi h = new Hitomi { id = obj.StringValue("id"), name = obj.StringValue("title"), type = type, page = imgs.Count, dir = $"https://hiyobi.me/reader/{text}", thumb = ImageProcessor.LoadWebImage($"https://cdn.hiyobi.me/tn/{text}.jpg"), thumbpath = $"https://cdn.hiyobi.me/tn/{text}.jpg", files = imgs.ToList().Select(x => $"https://cdn.hiyobi.me/data/{text}/{x["name"]}").ToArray(), author = string.Join(", ", obj["artists"].Select(x => x["display"].ToString())), authors = obj["artists"].Select(x => x["display"].ToString()).ToArray(), Json = obj, designType = new InternetP().DesignTypeFromInt(obj.IntValue("type") ?? 0), language = obj.StringValue("language") }; foreach (JToken tags in obj["tags"]) { Tag tag = new Tag(); if (tags["value"].ToString().Contains(":")) { tag.types = (Tag.Types)Enum.Parse(typeof(Tag.Types), tags["value"].ToString().Split(':')[0]); } else { tag.types = Tag.Types.tag; } tag.name = tags["display"].ToString(); h.tags.Add(tag); } return(h); }
public async void Parser(JObject jobject) { start(jobject["list"].Count()); foreach (JToken tk in jobject["list"]) { InternetP parser = new InternetP(url: $"https://cdn.hiyobi.me/data/json/{tk["id"]}_list.json"); JArray imgs = await parser.TryLoadJArray(); if (imgs == null) { continue; } Hitomi h = new Hitomi { id = tk["id"].ToString(), name = tk["title"].ToString(), type = type, page = imgs.Count, dir = $"https://hiyobi.me/reader/{tk["id"]}", thumb = ImageProcessor.LoadWebImage($"https://cdn.hiyobi.me/tn/{tk["id"]}.jpg"), thumbpath = $"https://cdn.hiyobi.me/tn/{tk["id"]}.jpg", files = imgs.ToList().Select(x => $"https://cdn.hiyobi.me/data/{tk["id"]}/{x["name"]}").ToArray(), author = string.Join(", ", tk["artists"].Select(x => x["display"].ToString())), authors = tk["artists"].Select(x => x["display"].ToString()).ToArray(), Json = tk//tk.ToString() }; foreach (JToken tags in tk["tags"]) { Tag tag = new Tag(); if (tags["value"].ToString().Contains(":")) { tag.types = (Tag.Types)Enum.Parse(typeof(Tag.Types), tags["value"].ToString().Split(':')[0]); } else { tag.types = Tag.Types.tag; } tag.name = tags["display"].ToString(); h.tags.Add(tag); } update(h, jobject["list"].ToList().IndexOf(tk), jobject["list"].Count()); } end(); }
private async void Hitomi_Search_TagOnly_Button_Click(object sender, RoutedEventArgs e) { string[] tags = Hitomi_Search_TagOnly_Text.Text.Split(' '); string[] tagstart = Enum.GetNames(typeof(Tag.Types)); tags = tags.Where(x => HiyobiTags.Tags.Select(y => y.name).Contains(x)) .Where(x => tagstart.Any(x.ToLower().StartsWith)).ToArray(); if (tags.Length <= 0) { MessageBox.Show("검색 가능한 태그가 없습니다."); return; } List <int> idlist = new List <int>(); int index = GetPage(); foreach (string tag in tags) { InternetP parser = new InternetP(); parser.url = $"https://ltn.hitomi.la/tag/{tag}-all.nozomi"; parser.index = index - 1; parser.count = (int)1000; int[] ids = parser.ByteArrayToIntArray(await parser.LoadNozomi()); idlist = idlist.Concat(ids).ToList(); } List <int> new_idlist = new List <int>(); for (int i = 0; i < idlist.Count; i++) { int count = idlist.Count(y => y == idlist[i]); if (count == tags.Length) { new_idlist.Add(idlist[i]); } if (new_idlist.Count >= (int)Page_itemCount) { break; } } //idlist = idlist.Where(x => idlist.Count(y => y == x) == tags.Length).ToList(); //_ = idlist; MainPanel.Children.Clear(); LabelSetup(); HitomiLoader hitomi = new HitomiLoader(); hitomi.FastDefault(); hitomi.FastParser(new_idlist.ToArray()); }
public async void Test() { Hitomi.HTag tag = Hitomi.HTag.Parse("artist:2gou"); InternetP parser = new InternetP(); byte[] data = await parser.LoadNozomiTag(tag.type.ToString(), tag.tag, false, 0, 9999); int[] ids; if (tag.type == Hitomi.HTag.TType.artists.Name) { ids = parser.ByteArrayToIntArrayBig(data); } else { ids = parser.ByteArrayToIntArrayBig(data); } Console.WriteLine(ids); }
public async void Parser() { InternetP parser = new InternetP(); parser.index = (index - 1) * count; parser.count = count; parser.url = "https://ltn.hitomi.la/index-all.nozomi"; int[] ids = parser.ByteArrayToIntArray(await parser.LoadNozomi()); start(ids.Count()); foreach (int id in ids) { parser.index = id; Hitomi h = await parser.HitomiData2(); update(h, ids.ToList().IndexOf(id), ids.Count()); } end(); }
public void FastParser(JObject jobject) { start(jobject["list"].Count()); JArray arr = jobject["list"] as JArray; for (int i = 0; i < arr.Count; i++) { Hitomi h = new InternetP().HiyobiParse(arr[i]); h.type = Hitomi.Type.Hiyobi; Config config = new Config(); config.Load(); if (!config.ArrayValue <string>(Settings.except_tags).Any(x => h.tags.Select(y => y.name).Contains(x)) || !(config.BoolValue(Settings.block_tags) ?? false)) { update(h, i, arr.Count); } } end(); }
private async void FavoriteBtn_Click(object sender, RoutedEventArgs e) { MainPanel.Children.Clear(); label.Visibility = Visibility.Visible; label.FontSize = 100; Config cfg = new Config(); cfg.Load(); List <string> favs = cfg.ArrayValue <string>(Settings.favorites).ToList(); favs = favs.Where(x => Directory.Exists(x) || x.isUrl()).Distinct().ToList(); InternetP parser = new InternetP(); parser.start = (int count) => label.Content = "0/" + count; parser.update = (Hitomi h, int index, int max) => { label.Content = $"{index}/{max}"; MainPanel.Children.Add(new HitomiPanel(h, this)); }; parser.end = () => label.Visibility = Visibility.Collapsed; await parser.LoadCompre(favs); label.Visibility = Visibility.Collapsed; }
public async void FastParser() { InternetP parser = new InternetP(); parser.index = (index - 1) * count; parser.count = count; parser.url = "https://ltn.hitomi.la/index-all.nozomi"; int[] ids = parser.ByteArrayToIntArray(await parser.LoadNozomi()); FastParser(ids); /* * start(ids.Count()); * for (int i = 0; i < ids.Length; i++) * { * InternetP parser2 = new InternetP(); * parser2.index = ids[i]; * Hitomi h = await parser2.HitomiData(); * h.type = Hitomi.Type.Hitomi; * h.id = ids[i].ToString(); * update(h, i, ids.Count()); * } * end(); */ }
private async void Search_Button_Click(object sender, RoutedEventArgs e) { string SearchText = Search_Text.Text; int number = 0; if (int.TryParse(SearchText, out number)) { MainPanel.Children.Clear(); InternetP parser = new InternetP(index: number); Tuple <bool, Hitomi> data = await parser.isHiyobiData(); bool result = data.Item1; Hitomi h = data.Item2; if (!result) { h = await parser.HitomiData(); } MainPanel.Children.Add(new HitomiPanel(h, this, true)); } else { File_Search_Button_Click(sender, e); } }
public void TagCache() { if (HiyobiTags.Tags == null) { HiyobiTags.LoadTags(); } try { List <Hitomi.HTag> tags = HiyobiTags.Tags; Dispatcher patcher = Global.dispatcher; ProgressBox progressBox = null; patcher.Invoke(() => { progressBox = new ProgressBox(); progressBox.Title = "태그 캐시 다운로드"; progressBox.Show(); progressBox.ProgressBar.Maximum = tags.Count; }); for (int i = 0; i < tags.Count; i++) { Hitomi.HTag tag = tags[i]; Thread th = new Thread(new ThreadStart(async() => { try { string dir = Path.Combine(rootDir, tag.type.ToString()); string file = Path.Combine(dir, tag.tag + ".json"); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } if (File.Exists(file)) { //patcher.Invoke(() => progressBox.ProgressBar.Value++); return; } InternetP parser = new InternetP(); int[] ids = parser.ByteArrayToIntArrayBig(await parser.LoadNozomiTag(tag.type.ToString(), tag.tag, false, 0, 9999)); JArray arr = JArray.FromObject(ids); File.WriteAllText(file, arr.ToString()); Console.WriteLine("{0}/{1}: {2}", i, tags.Count, tag.full); } catch (IOException) { Console.WriteLine("Faild {0}/{1}: {2}", i, tags.Count, tag.full); } catch (Exception ex) { Console.WriteLine("Error {0} : {1}", tag.full, ex.Message); } finally { patcher.Invoke(() => { progressBox.ProgressBar.Value++; if (progressBox.ProgressBar.Value == progressBox.ProgressBar.Maximum) { progressBox.Close(); MessageBox.Show("캐시 다운로드가 끝났습니다."); } }); } })); th.Start(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void Search() { InternetP parser = new InternetP(keyword: text.Split(' ').ToList(), index: index); parser.HiyobiSearch(data => new InternetP(data: data).ParseJObject(Parser)); }
public override void DownloadImage_Click(object sender, RoutedEventArgs e) { base.DownloadImage_Click(sender, e); string filename = CF.File.GetDownloadTitle(CF.File.SaftyFileName(h.name)); for (int i = 0; i < h.files.Length; i++) { Hitomi.HFile file = h.files[i]; WebClient wc = new WebClient(); wc.Headers.Add("referer", "https://hitomi.la/"); string folder = Global.config.download_folder.Get <string>(); if (!File.Exists($"{AppDomain.CurrentDomain.BaseDirectory}/{folder}/{filename}/{i}.jpg")) { bool fileen = Global.config.download_file_encrypt.Get <bool>(); h.FileInfo.encrypted = fileen; string path = $"{AppDomain.CurrentDomain.BaseDirectory}/{folder}/{filename}/{file.name}.{InternetP.GetDirFromHFileS(file)}.lock"; if (fileen) { FileEncrypt.DownloadAsync(wc, new Uri(file.url), path + ".lock"); } else { wc.DownloadFileAsync(new Uri(file.url), path); } } } }
public void HitomiSearch() { List <int> idlist = new List <int>(); int compcount = 0; if (cache.Keys.Any(x => x.ItemsEqual(tags))) { string[] key = cache.Keys.Where(x => x.ItemsEqual(tags)).First(); this.start(0); idlist = cache[key].ToList(); compcount = tags.Length; } else { List <Task> tasks = new List <Task>(); this.start(tags.Length); Dispatcher dispatcher = Dispatcher.CurrentDispatcher; foreach (string tag in tags) { Hitomi.HTag tag2 = Hitomi.HTag.Parse(tag); string path = Path.Combine(Global.rootDir, "Cache", tag2.type, tag2.tag + ".json"); if (Global.config.cache_search.Get <bool>()) { if (File.Exists(path)) { JArray arr = JArray.Parse(File.ReadAllText(path)); int[] ids = arr.Select(x => int.Parse(x.ToString())).ToArray(); idlist = idlist.Concat(ids).ToList(); compcount++; continue; } } Thread th = new Thread(new ThreadStart(async() => { int[] ids; InternetP parser = new InternetP(); parser.index = index - 1; parser.Count = search_count; if (HiyobiTags.Tags.Select(y => y.full).Contains(tag)) { try { ids = parser.ByteArrayToIntArrayBig(await parser.LoadNozomiTag(tag2.type.ToString(), tag2.tag, range: !Global.config.cache_search.Get <bool>(), start: 0, end: 99)); } catch { ids = new int[0]; } } else { ids = await parser.LoadQuery(tag); } if (Global.config.cache_search.Get <bool>() && !File.Exists(path)) { if (!Directory.Exists(Path.GetDirectoryName(path))) { Directory.CreateDirectory(Path.GetDirectoryName(path)); } File.WriteAllText(path, JArray.FromObject(ids).ToString()); } dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => idlist = idlist.Concat(ids).ToList())); compcount++; dispatcher.Invoke(() => update(compcount, tags.Length)); })); th.Start(); } } int start = (index - 1) * itemCount; int PageCount = start + itemCount; Task.Factory.StartNew(() => { while (compcount != tags.Length) { } if (!cache.Keys.Any(x => x.ItemsEqual(tags))) { cache.Add(tags, idlist.ToArray()); } List <int> new_idlist = new List <int>(); for (int i = 0; i < idlist.Count; i++) { int count = idlist.Count(y => y == idlist[i]); if (count == tags.Length) { new_idlist.Add(idlist[i]); } if (new_idlist.Count >= PageCount) { break; } } new_idlist = new_idlist.Skip(start).ToList(); Global.dispatcher.Invoke(delegate { HitomiLoader hitomi = new HitomiLoader(); hitomi.Default(); LoaderDefaults.Hitomis.Setup(hitomi); hitomi.Parser(new_idlist.ToArray()); }); }); }