Form1.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. namespace PicSo
  13. {
  14. public partial class Form1 : Form
  15. {
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. ListView.CheckForIllegalCrossThreadCalls = false;
  20. }
  21. private void Form1_Load(object sender, EventArgs e)
  22. {
  23. arzon = new Gets.Arzon(false);
  24. arzon.InitCompleted += arzon_InitCompleted;
  25. arzon.CookiesInit();
  26. var f = AVSORTER.FileProcessor.GetInstance();
  27. this.txt_Dest.Text = f.DestPath;
  28. this.txt_sub.Text = f.SubPath;
  29. }
  30. void arzon_InitCompleted(object sender, EventArgs e)
  31. {
  32. lbl_YouMaStatus.BackColor = Color.Green;
  33. }
  34. Gets.Arzon arzon;
  35. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  36. {
  37. }
  38. bool lastSort;
  39. private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
  40. {
  41. try
  42. {
  43. this.listView1.ListViewItemSorter = new ListViewColumnSorter(e.Column, !lastSort);
  44. lastSort = !lastSort;
  45. }
  46. catch (Exception)
  47. {
  48. }
  49. }
  50. private void textBox2_TextChanged(object sender, EventArgs e)
  51. {
  52. }
  53. private void btn_Clear_Click(object sender, EventArgs e)
  54. {
  55. this.listView1.Items.Clear();
  56. this.listView1.ListViewItemSorter = null;
  57. AVSORTER.FileProcessor.GetInstance().Files.Clear();
  58. }
  59. private void btn_removeItem_Click(object sender, EventArgs e)
  60. {
  61. while (this.listView1.SelectedItems.Count > 0)
  62. {
  63. this.listView1.Items.Remove(this.listView1.SelectedItems[0]);
  64. }
  65. }
  66. private void btn_brower_Click(object sender, EventArgs e)
  67. {
  68. FolderBrowserDialog fbd = new FolderBrowserDialog();
  69. if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  70. {
  71. var f = AVSORTER.FileProcessor.GetInstance();
  72. f.AddDirectory(fbd.SelectedPath);
  73. List<ListViewItem> li = new List<ListViewItem>();
  74. for (int i = 0; i < f.Files.Count; i++)
  75. {
  76. li.Add(new ListViewItem(f.Files[i]));
  77. }
  78. this.listView1.Items.AddRange(li.ToArray());
  79. }
  80. for (int i = 0; i < this.listView1.Items.Count; i++)
  81. {
  82. this.listView1.Items[i].SubItems.Add(AVSORTER.Tools.Fcode(Path.GetFileNameWithoutExtension(this.listView1.Items[i].Text)));
  83. this.listView1.Items[i].SubItems.Add("");
  84. }
  85. }
  86. void initFileProcessor()
  87. {
  88. var f = AVSORTER.FileProcessor.GetInstance();
  89. if (f != null)
  90. {
  91. f.DestPath = txt_Dest.Text;
  92. f.SubPath = txt_sub.Text;
  93. f.ShowLog = cb_IsShowlog.Checked;
  94. new AVSORTER.DB.AVDB().SetDestPath(f.DestPath);
  95. new AVSORTER.DB.AVDB().SetSubPath(f.SubPath);
  96. }
  97. }
  98. Semaphore sem1_bmovie = new Semaphore(2, 2);
  99. Semaphore sem2_movie = new Semaphore(2, 2);
  100. private void btn_GO_Click(object sender, EventArgs e)
  101. {
  102. foreach (ListViewItem item in listView1.Items)
  103. {
  104. var fi = new AVSORTER.SearchItem(item.SubItems[1].Text, arzon.Clone() as AVSORTER.IGetable);
  105. item.Tag = fi;
  106. fi.OnStatusChange += fi_OnStatusChange;
  107. fi.Tag = item;
  108. fi.IsAutoSelect = cb_AutoSelect.Checked;
  109. fi.IsDownloadCover = cb_isCoverDownload.Checked;
  110. //等一个许可信号
  111. fi.OnAboutToLoadInfo += Fi_OnAboutToLoadInfo;
  112. //释放放一个许可
  113. fi.OnCompletedLoadInfo += Fi_OnCompletedLoadInfo;
  114. fi.OnAboutToLoadImage += Fi_OnAboutToLoadImage;
  115. fi.OnCompletedLoadImage += Fi_OnCompletedLoadImage;
  116. fi.StartQuery();
  117. }
  118. }
  119. private void Fi_OnAboutToLoadImage(object sender, EventArgs e)
  120. {
  121. sem2_movie.WaitOne();
  122. }
  123. private void Fi_OnCompletedLoadImage(object sender, EventArgs e)
  124. {
  125. sem2_movie.Release();
  126. }
  127. private void Fi_OnCompletedLoadInfo(object sender, EventArgs e)
  128. {
  129. sem1_bmovie.Release();
  130. }
  131. private void Fi_OnAboutToLoadInfo(object sender, EventArgs e)
  132. {
  133. sem1_bmovie.WaitOne();
  134. }
  135. void fi_OnStatusChange(object sender, AVSORTER.SearchItem.StatusChangeEventArgs e)
  136. {
  137. ((sender as AVSORTER.SearchItem).Tag as ListViewItem).SubItems[2].Text = e.After.ToString();
  138. }
  139. private void UIParamChange(object sender, EventArgs e)
  140. {
  141. }
  142. private void listView1_SelectedIndexChanged(object sender, EventArgs e)
  143. {
  144. if (listView1.SelectedItems.Count == 1)
  145. {
  146. if (listView1.SelectedItems[0].Tag != null)
  147. {
  148. var si = (listView1.SelectedItems[0].Tag as AVSORTER.SearchItem);
  149. this.bc.ListMovieBasic = si.MovieBasicList;
  150. if (si.IsSelected)
  151. {
  152. this.bc.MovieB = si.SelectedMovieBasic;
  153. }
  154. else if (si.MovieBasicList != null && si.MovieBasicList.Count != 0)
  155. {
  156. this.bc.MovieB = si.MovieBasicList[0];
  157. }
  158. }
  159. }
  160. }
  161. private void btn_select_Click(object sender, EventArgs e)
  162. {
  163. if (listView1.SelectedItems.Count == 1)
  164. {
  165. if (listView1.SelectedItems[0].Tag != null)
  166. {
  167. (listView1.SelectedItems[0].Tag as AVSORTER.SearchItem).Select(this.bc.MovieB);
  168. }
  169. }
  170. }
  171. private void btn_MoveFile_Click(object sender, EventArgs e)
  172. {
  173. this.btn_MoveFile.Enabled = false;
  174. try
  175. {
  176. initFileProcessor();
  177. foreach (ListViewItem item in listView1.Items)
  178. {
  179. if ((item.Tag as AVSORTER.SearchItem).IsSelected == true)
  180. {
  181. if (item.Text != "No File")
  182. {
  183. AVSORTER.FileProcessor.GetInstance().MakeMove((item.Tag as AVSORTER.SearchItem).MovieDetail, item.Text);
  184. item.SubItems[2].Text = "移动成功!";
  185. }
  186. else
  187. {
  188. item.SubItems[2].Text = "未移动";
  189. }
  190. }
  191. else
  192. {
  193. item.SubItems[2].Text = "未指定对应影片信息";
  194. }
  195. }
  196. AVSORTER.FileProcessor.GetInstance().WriteLog();
  197. }
  198. catch (Exception err)
  199. {
  200. MessageBox.Show(err.Message);
  201. }
  202. finally
  203. {
  204. this.btn_MoveFile.Enabled = true;
  205. }
  206. }
  207. private void menu_BrowerFile_Click(object sender, EventArgs e)
  208. {
  209. if (listView1.SelectedItems.Count > 0)
  210. {
  211. System.Diagnostics.Process.Start("Explorer.exe", "/select, " + listView1.SelectedItems[0].Text);
  212. }
  213. }
  214. private void menu_ChangeFcode_Click(object sender, EventArgs e)
  215. {
  216. var inp = new InputBox();
  217. if (listView1.SelectedItems.Count > 0)
  218. {
  219. inp.InputText = listView1.SelectedItems[0].SubItems[1].Text;
  220. }
  221. if (inp.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  222. {
  223. listView1.SelectedItems[0].SubItems[1].Text = inp.InputText;
  224. }
  225. }
  226. private void menu_remove_Click(object sender, EventArgs e)
  227. {
  228. while (this.listView1.SelectedItems.Count > 0)
  229. {
  230. this.listView1.Items.Remove(this.listView1.SelectedItems[0]);
  231. }
  232. }
  233. private void listView1_DragDrop(object sender, DragEventArgs e)
  234. {
  235. if (e.Data.GetDataPresent(DataFormats.FileDrop) && e.Effect == DragDropEffects.Link)
  236. {
  237. var dd = e.Data.GetData(DataFormats.FileDrop);
  238. var f = AVSORTER.FileProcessor.GetInstance();
  239. this.txt_Dest.Text = f.DestPath;
  240. this.txt_sub.Text = f.SubPath;
  241. var arr = dd as string[];
  242. foreach (var item in arr)
  243. {
  244. f.AddDirectory(item);
  245. }
  246. List<ListViewItem> li = new List<ListViewItem>();
  247. for (int i = 0; i < f.Files.Count; i++)
  248. {
  249. var lsvi = new ListViewItem(f.Files[i]);
  250. lsvi.SubItems.Add(AVSORTER.Tools.Fcode(Path.GetFileNameWithoutExtension(f.Files[i])));
  251. lsvi.SubItems.Add("");
  252. li.Add(lsvi);
  253. }
  254. this.listView1.Items.Clear();
  255. this.listView1.Items.AddRange(li.ToArray());
  256. }
  257. }
  258. private void listView1_DragEnter(object sender, DragEventArgs e)
  259. {
  260. e.Effect = DragDropEffects.Link;
  261. }
  262. private void bc_Load(object sender, EventArgs e)
  263. {
  264. }
  265. private void groupBox1_Enter(object sender, EventArgs e)
  266. {
  267. }
  268. private void menu_BigCover_Click(object sender, EventArgs e)
  269. {
  270. if (this.listView1.SelectedItems.Count > 0)
  271. {
  272. var d = (listView1.SelectedItems[0].Tag as AVSORTER.SearchItem).MovieDetail;
  273. if (d != null)
  274. {
  275. System.Diagnostics.Process.Start(d.CoverFile);
  276. }
  277. }
  278. }
  279. private void btn_AddNewEmptyItem_Click(object sender, EventArgs e)
  280. {
  281. var li = new ListViewItem("No File");
  282. li.SubItems.Add(AVSORTER.Tools.Fcode(this.txt_EmptyItemKeyWord.Text));
  283. li.SubItems.Add("");
  284. this.listView1.Items.Add(li);
  285. }
  286. private void btn_paste_new_Click(object sender, EventArgs e)
  287. {
  288. if (Clipboard.ContainsText())
  289. {
  290. txt_EmptyItemKeyWord.Text = Clipboard.GetText();
  291. btn_AddNewEmptyItem_Click(this, new EventArgs());
  292. }
  293. }
  294. private void listView1_DoubleClick(object sender, EventArgs e)
  295. {
  296. if (this.listView1.SelectedItems.Count > 0)
  297. {
  298. var d = (listView1.SelectedItems[0].Tag as AVSORTER.SearchItem);
  299. if (d.MovieDetail != null && d != null && !string.IsNullOrEmpty(d.MovieDetail.CoverFile))
  300. {
  301. System.Diagnostics.Process.Start(d.MovieDetail.CoverFile);
  302. }
  303. }
  304. }
  305. private void btn_rebuild_Click(object sender, EventArgs e)
  306. {
  307. this.btn_MoveFile.Enabled = false;
  308. initFileProcessor();
  309. foreach (ListViewItem item in listView1.Items)
  310. {
  311. if ((item.Tag as AVSORTER.SearchItem).IsSelected == true)
  312. {
  313. if (item.Text != "No File")
  314. {
  315. AVSORTER.FileProcessor.GetInstance().MakeDataBase((item.Tag as AVSORTER.SearchItem).MovieDetail, item.Text);
  316. item.SubItems[2].Text = "成功!";
  317. }
  318. else
  319. {
  320. item.SubItems[2].Text = "未动";
  321. }
  322. }
  323. else
  324. {
  325. item.SubItems[2].Text = "未指定对应影片信息";
  326. }
  327. }
  328. AVSORTER.FileProcessor.GetInstance().WriteLog();
  329. this.btn_MoveFile.Enabled = true;
  330. }
  331. #region Page2
  332. private void btn_LocalSearch_Click(object sender, EventArgs e)
  333. {
  334. string fc = txt_LocalSearchKeyWord.Text;
  335. if (cb_AutoCorrect.Checked)
  336. {
  337. fc = AVSORTER.Tools.Fcode(txt_LocalSearchKeyWord.Text);
  338. txt_LocalSearchKeyWord.Text = fc;
  339. }
  340. var db = new AVSORTER.DB.AVDB();
  341. var l = db.QueryAV(fc);
  342. this.movieContainer1.MovieList = l;
  343. this.listBox1.DataSource = l;
  344. //this.listBox1.DisplayMember = string.Format("{0}:{1}", "AVCode", "Title");
  345. if (l.Count > 0)
  346. {
  347. this.movieContainer1.Movie = l[0];
  348. }
  349. }
  350. private void txt_LocalSearchKeyWord_KeyPress(object sender, KeyPressEventArgs e)
  351. {
  352. if (e.KeyChar == 13)
  353. {
  354. btn_LocalSearch_Click(sender, e);
  355. }
  356. }
  357. private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
  358. {
  359. if (this.listBox1.SelectedItems.Count > 0)
  360. {
  361. this.movieContainer1.Movie = (this.listBox1.SelectedItem as AVSORTER.Movie);
  362. }
  363. }
  364. #endregion
  365. #region Page3
  366. private void btnFind_Click(object sender, EventArgs e)
  367. {
  368. BackgroundWorker worker = new BackgroundWorker();
  369. worker.WorkerReportsProgress = true;
  370. worker.ProgressChanged += worker_ProgressChanged;
  371. worker.DoWork += worker_DoWork;
  372. worker.RunWorkerCompleted += worker_RunWorkerCompleted;
  373. worker.RunWorkerAsync(worker);
  374. }
  375. void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  376. {
  377. //throw new NotImplementedException();
  378. }
  379. void worker_DoWork(object sender, DoWorkEventArgs e)
  380. {
  381. var worker = (e.Argument as BackgroundWorker);
  382. List<AVSORTER.Movie> list = new List<AVSORTER.Movie>();
  383. var mvbs = arzon.FindInURL(txt_url.Text);
  384. worker.ReportProgress(0, "共找到影片:" + mvbs.Count.ToString());
  385. int no = 0;
  386. int totalNo = mvbs.Count;
  387. foreach (var mvb in mvbs)
  388. {
  389. var fi = arzon.Clone() as AVSORTER.IGetable;
  390. var mv = fi.GetMovie(mvb);
  391. no++;
  392. worker.ReportProgress(0, no.ToString() + "/" + totalNo.ToString());
  393. worker.ReportProgress(0, mv.AVCode + "\t" + mv.Title);
  394. if (mv.Actor != null && mv.Actor.Count <= nud_ActorLessThan.Value)
  395. {
  396. Gets.MyWebClient wc = new Gets.MyWebClient();
  397. wc.ReferURL = mvb.ItemURL;
  398. string fn = mvb.Title + ".jpg";
  399. fn = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SmallImageFindInURL", Path.ChangeExtension(fn, "jpg"));
  400. try
  401. {
  402. if (!Directory.Exists(Path.GetDirectoryName(fn)))
  403. {
  404. Directory.CreateDirectory(Path.GetDirectoryName(fn));
  405. }
  406. if (!File.Exists(fn))
  407. {
  408. wc.DownloadFile(mvb.Img_s, fn);
  409. }
  410. else
  411. {
  412. Console.WriteLine("已有封面" + fn);
  413. }
  414. worker.ReportProgress(0, mv.AVCode + "\t封面OK!");
  415. }
  416. catch
  417. { }
  418. mv.CoverFile = fn;
  419. list.Add(mv);
  420. }
  421. else
  422. {
  423. worker.ReportProgress(0, mv.AVCode + "\t演员人数超限制\t" + mv.Title);
  424. }
  425. }
  426. StringBuilder sb = new StringBuilder();
  427. foreach (AVSORTER.Movie item in list)
  428. {
  429. sb.Append("<div id = \"" + item.AVCode + "\" class = \"item\"><img src = \"" + item.CoverFile + "\" /><input type=\"checkbox\" />" + item.AVCode + "</div>");
  430. }
  431. var htmlResult = Properties.Resources.htmlResultStart + sb + Properties.Resources.htmlResultEnd;
  432. System.IO.File.WriteAllText("temp.html", htmlResult);
  433. System.Diagnostics.Process.Start("temp.html");
  434. }
  435. void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
  436. {
  437. if (e.ProgressPercentage == 0)
  438. {
  439. txt_FindStatus.AppendText(e.UserState as string + "\r\n");
  440. }
  441. }
  442. #endregion
  443. #region Page4
  444. private void btn_p4_Go1_Click(object sender, EventArgs e)
  445. {
  446. lbl_p4_status.Visible = true;
  447. btn_p4_Go1.Enabled = false;
  448. btn_p4_Go1_paste.Enabled = false;
  449. BackgroundWorker workerP4 = new BackgroundWorker();
  450. workerP4.WorkerReportsProgress = true;
  451. workerP4.ProgressChanged += workerP4_ProgressChanged;
  452. workerP4.DoWork += workerP4_DoWork;
  453. workerP4.RunWorkerCompleted += workerP4_RunWorkerCompleted;
  454. workerP4.RunWorkerAsync();
  455. }
  456. void workerP4_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  457. {
  458. lbl_p4_status.Visible = false;
  459. btn_p4_Go1.Enabled = true;
  460. btn_p4_Go1_paste.Enabled = true;
  461. }
  462. /// <summary>
  463. /// torrentKitty
  464. /// </summary>
  465. /// <param name="sender"></param>
  466. /// <param name="e"></param>
  467. void workerP4_DoWork(object sender, DoWorkEventArgs e)
  468. {
  469. Gets.HttpHelper help = new Gets.HttpHelper(new System.Net.CookieContainer());
  470. var html = help.GetHtml("http://www.torrentkitty.net/search/" + txt_p4_keyword.Text.Trim());
  471. Console.WriteLine(html);
  472. HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
  473. doc.LoadHtml(html);
  474. if (doc.DocumentNode.SelectNodes("//table[@id='archiveResult']/tr") == null)
  475. {
  476. return;
  477. }
  478. int n = doc.DocumentNode.SelectNodes("//table[@id='archiveResult']/tr").Count;
  479. for (int i = 2; i < n; i++)
  480. {
  481. var name = doc.DocumentNode.SelectSingleNode("//table[@id='archiveResult']/tr[" + i + "]/td[@class='name']").InnerText;
  482. ListViewItem li = new ListViewItem(name);
  483. var size = doc.DocumentNode.SelectSingleNode("//table[@id='archiveResult']/tr[" + i + "]/td[@class='size']").InnerText;
  484. li.SubItems.Add(size);
  485. var link = doc.DocumentNode.SelectSingleNode("//table[@id='archiveResult']/tr[" + i + "]/td[@class='action']/a[2]").Attributes["href"].Value;
  486. li.SubItems.Add(link);
  487. lv_p4_result.Items.Add(li);
  488. }
  489. lv_p4_result.Items.Add(new ListViewItem("====="));
  490. }
  491. void workerP4_ProgressChanged(object sender, ProgressChangedEventArgs e)
  492. {
  493. }
  494. private void cmenu_p4_item_copy_Click(object sender, EventArgs e)
  495. {
  496. if (lv_p4_result.SelectedItems.Count==1)
  497. {
  498. var link= lv_p4_result.SelectedItems[0].SubItems[2].Text;
  499. Clipboard.SetText(link);
  500. }
  501. }
  502. private void btn_p4_Clear_Click(object sender, EventArgs e)
  503. {
  504. lv_p4_result.Items.Clear();
  505. }
  506. private void btn_p4_Go1_paste_Click(object sender, EventArgs e)
  507. {
  508. if (Clipboard.ContainsText())
  509. {
  510. txt_p4_keyword.Text = Clipboard.GetText();
  511. btn_p4_Go1_Click(this, new EventArgs());
  512. }
  513. }
  514. #endregion
  515. }
  516. }