private void lvMyTagRank_SelectedIndexChanged(object sender, EventArgs e) { if (lvMyTagRank.SelectedItems.Count > 0) { string[] tags = lvMyTagRank.SelectedItems.OfType <ListViewItem>().Select(x => x.SubItems[0].Text).ToArray(); flowLayoutPanel1.SuspendLayout(); for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++) { PicElement pe = flowLayoutPanel1.Controls[i] as PicElement; if (tags.All(x => pe.Log.Tags != null && pe.Log.Tags.Contains(x))) { pe.Selected = true; } else { pe.Selected = false; } } flowLayoutPanel1.ResumeLayout(); } else { for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++) { (flowLayoutPanel1.Controls[i] as PicElement).Selected = false; } } }
private void load_zip(string files) { IPicElement pe; pe = new PicElement(this); pe.Path = files; pe.Label = Path.GetFileNameWithoutExtension(files); using (var zip = ZipFile.Open(files, ZipArchiveMode.Read)) { string tmp = Path.GetTempFileName(); if (!zip.Entries[0].Name.EndsWith(".json")) { zip.Entries[0].ExtractToFile(tmp, true); } else { zip.Entries[1].ExtractToFile(tmp, true); } try { pe.Log = JsonConvert.DeserializeObject <HitomiJsonModel>(new StreamReader(zip.GetEntry("Info.json").Open()).ReadToEnd()); if (pe.Log.Tags != null) { lock (tags) { foreach (var tag in pe.Log.Tags) { if (tags.ContainsKey(tag)) { tags[tag] += 1; } else { tags.Add(tag, 1); } } } } } catch (Exception e) { } pe.SetImageFromAddress(tmp, 150, 200); } pe.Font = this.Font; Interlocked.Increment(ref count_load); this.Post(() => Text = $"{prefix} [{count_load}/{max_load}]"); this.Post(() => flowLayoutPanel1.Controls.Add(pe as Control)); this.Post(() => SortThumbnail()); }