Form1.cs 20 KB

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