SearchController.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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<5)
  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. if (ra.Movie==null)
  58. {
  59. ra.QStatus = QStatus.查询完成无匹配;
  60. RaiseStatusChangeEvent(ra);
  61. return;
  62. }
  63. ra.QStatus = QStatus.下载封面中;
  64. RaiseStatusChangeEvent(ra);
  65. if (m_cover(ra.Movie))
  66. {
  67. ra.QStatus = QStatus.封面下载完成;
  68. RaiseStatusChangeEvent(ra);
  69. }
  70. else
  71. {
  72. ra.QStatus = QStatus.出错;
  73. RaiseStatusChangeEvent(ra);
  74. }
  75. }
  76. else
  77. {
  78. ra.QStatus = QStatus.查询完成无匹配;
  79. RaiseStatusChangeEvent(ra);
  80. throw new ArgumentException("code可能不对,有过多的查询结果");
  81. }
  82. ra.QStatus = QStatus.准备好移动文件;
  83. RaiseStatusChangeEvent(ra);
  84. Console.WriteLine("end:" + Thread.CurrentThread.ManagedThreadId);
  85. }
  86. List<MovieBasic> code_2_mb_list(string fcode)
  87. {
  88. var new_a = this.arzon.Clone() as Arzon;
  89. return new_a.Query(fcode);
  90. }
  91. Movie mb_2_m(MovieBasic mb)
  92. {
  93. var new_a = this.arzon.Clone() as Arzon;
  94. return new_a.GetMovie(mb);
  95. }
  96. bool m_cover(Movie m)
  97. {
  98. var new_a = this.arzon.Clone() as Arzon;
  99. return new_a.GetCover(m);
  100. }
  101. public class StatusChangeEventArgs : EventArgs
  102. {
  103. public ResultArzon Ra { get; set; }
  104. public StatusChangeEventArgs(ResultArzon ra)
  105. {
  106. this.Ra = ra;
  107. }
  108. }
  109. public delegate void StatusChangeHandler(object sender, StatusChangeEventArgs e);
  110. public event StatusChangeHandler OnStatusChange;
  111. private void RaiseStatusChangeEvent(ResultArzon ra)
  112. {
  113. if (OnStatusChange!=null)
  114. {
  115. OnStatusChange(this, new StatusChangeEventArgs(ra));
  116. }
  117. }
  118. }
  119. }