SearchController.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using AVSORTER;
  7. using Gets;
  8. namespace PicSo
  9. {
  10. internal class SearchController
  11. {
  12. private List<string> list1;
  13. Arzon arzon;
  14. public List<ResultArzon> Results = new List<ResultArzon>();
  15. public SearchController(Arzon a, List<string> list)
  16. {
  17. list1 = list;
  18. arzon = a;
  19. }
  20. public void MainDo(int threadCount)
  21. {
  22. int minWorker, minIOC;
  23. ThreadPool.GetMinThreads(out minWorker, out minIOC);
  24. ThreadPool.SetMaxThreads(minWorker, minIOC);
  25. foreach (string item in list1)
  26. {
  27. ResultArzon ra = new ResultArzon { Code = item.ToString(), QStatus= QStatus.未开始 };
  28. Results.Add(ra);
  29. ThreadPool.QueueUserWorkItem(willdo,ra as object);
  30. }
  31. return;
  32. }
  33. void willdo(object fcode)
  34. {
  35. Console.WriteLine("start:" + Thread.CurrentThread.ManagedThreadId);
  36. var ra = fcode as ResultArzon;
  37. ra.QStatus = QStatus.查询中;
  38. RaiseStatusChangeEvent(ra);
  39. var mb_list = code_2_mb_list(ra.Code);
  40. ra.QStatus = QStatus.查询完成;
  41. RaiseStatusChangeEvent(ra);
  42. if (mb_list.Count<4)
  43. {
  44. ra.QStatus = QStatus.获取信息中;
  45. RaiseStatusChangeEvent(ra);
  46. foreach (MovieBasic item in mb_list)
  47. {
  48. var m = mb_2_m(item);
  49. if (m.AVCode == ra.Code)
  50. {
  51. ra.QStatus = QStatus.获取信息完成;
  52. RaiseStatusChangeEvent(ra);
  53. ra.Movie = m;
  54. break;
  55. }
  56. }
  57. ra.QStatus = QStatus.下载封面中;
  58. RaiseStatusChangeEvent(ra);
  59. if (m_cover(ra.Movie))
  60. {
  61. ra.QStatus = QStatus.封面下载完成;
  62. RaiseStatusChangeEvent(ra);
  63. }
  64. else
  65. {
  66. ra.QStatus = QStatus.出错;
  67. RaiseStatusChangeEvent(ra);
  68. }
  69. }
  70. else
  71. {
  72. ra.QStatus = QStatus.查询完成无匹配;
  73. RaiseStatusChangeEvent(ra);
  74. throw new ArgumentException("code可能不对,有过多的查询结果");
  75. }
  76. ra.QStatus = QStatus.准备好移动文件;
  77. RaiseStatusChangeEvent(ra);
  78. Console.WriteLine("end:" + Thread.CurrentThread.ManagedThreadId);
  79. }
  80. List<MovieBasic> code_2_mb_list(string fcode)
  81. {
  82. var new_a = this.arzon.Clone() as Arzon;
  83. return new_a.Query(fcode);
  84. }
  85. Movie mb_2_m(MovieBasic mb)
  86. {
  87. var new_a = this.arzon.Clone() as Arzon;
  88. return new_a.GetMovie(mb);
  89. }
  90. bool m_cover(Movie m)
  91. {
  92. var new_a = this.arzon.Clone() as Arzon;
  93. return new_a.GetCover(m);
  94. }
  95. public class StatusChangeEventArgs : EventArgs
  96. {
  97. public ResultArzon Ra { get; set; }
  98. public StatusChangeEventArgs(ResultArzon ra)
  99. {
  100. this.Ra = ra;
  101. }
  102. }
  103. public delegate void StatusChangeHandler(object sender, StatusChangeEventArgs e);
  104. public event StatusChangeHandler OnStatusChange;
  105. private void RaiseStatusChangeEvent(ResultArzon ra)
  106. {
  107. if (OnStatusChange!=null)
  108. {
  109. OnStatusChange(this, new StatusChangeEventArgs(ra));
  110. }
  111. }
  112. }
  113. }