envCheck.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. #include "envCheck.h"
  2. #include "ui_envCheck.h"
  3. #include "CAppInfo.h"
  4. #include "CCommonTools.h"
  5. #include "logproc.h"
  6. #include "popMsgBox.h"
  7. #include <QDateTime>
  8. envCheck::envCheck(QWidget *parent) :
  9. QWidget(parent),
  10. ui(new Ui::envCheck)
  11. {
  12. ui->setupUi(this);
  13. setStyleSheet(g_appInfoPtr->m_sQssStr);
  14. m_MonitorEnumeratorPtr = std::make_shared<CMultiMonitorEnumerator>();
  15. initUI();
  16. m_sCameraList<<"17GuaGua Cam"
  17. <<"91KBOX"
  18. <<"e2eSoft iVCam"
  19. <<"e2eSoft VCam"
  20. <<"FaceRig Virtual Camera"
  21. <<"MagicCamera Capture"
  22. <<"MeiSe"
  23. <<"Virtual Cam"
  24. << QString::fromLocal8Bit("YY伴侣")
  25. <<"WebcamMax Capture"
  26. <<"Wecam"
  27. <<"Vcam "
  28. <<"softcam"
  29. <<"Vandate Virtual Camera"
  30. <<"video2webcam"
  31. <<"VCDCut Pro"
  32. << QString::fromLocal8Bit("9158虚拟视频")
  33. <<"9158Capture"
  34. << "Insta360 Virtual Camera"
  35. << QString::fromLocal8Bit("无他直播伴侣PC客户端")
  36. << QString::fromLocal8Bit("无他相机电脑版")
  37. <<"mobiola webcamera"
  38. << QString::fromLocal8Bit("艾米秀宝(ImiShowBox)")
  39. <<"video2Webcam"
  40. << QString::fromLocal8Bit("飞翔虚拟视频")
  41. << QString::fromLocal8Bit("魔力秀")
  42. << QString::fromLocal8Bit("YY开播")
  43. << QString::fromLocal8Bit("无他伴侣")
  44. << QString::fromLocal8Bit("视频连麦")
  45. << QString::fromLocal8Bit("酷狗直播伴侣")
  46. <<"screen-capture-recorder"
  47. <<"OBS Virtual Camera"
  48. <<"OBS-Camera"
  49. <<"ManyCam Virtual Webcam"
  50. << QString::fromLocal8Bit("小葫芦直播助手")
  51. <<"yyplayer"
  52. << QString::fromLocal8Bit("秀色直播伴侣")
  53. << QString::fromLocal8Bit("秀色直播助手")
  54. <<"Citrix HDX Web Camera";
  55. m_sRemoteList
  56. << "qq"
  57. <<"teamviewer"
  58. <<"lookmypc"
  59. <<"xt"
  60. <<"winaw32"
  61. <<"pcaquickconnect"
  62. <<"sessioncontroller"
  63. <<"sunloginclient"
  64. <<"sunloginremote"
  65. <<"wechat"
  66. <<"wemeetapp";
  67. m_sRemoteTipList<<"QQ"
  68. <<"TeamViewer"
  69. <<"LookMyPC"
  70. << QString::fromLocal8Bit("协通")
  71. <<"Symantec PCAnywhere"
  72. <<"Symantec PCAnywhere"
  73. <<"Symantec PCAnywhere"
  74. << QString::fromLocal8Bit("向日葵")
  75. << QString::fromLocal8Bit("向日葵")
  76. << QString::fromLocal8Bit("微信")
  77. << QString::fromLocal8Bit("腾讯会议");
  78. qRegisterMetaType<CSysNotice>("CSysNotice");
  79. connect(g_httpBllPtr.get(), &CHttpBll::sgnSysNotice, this, &envCheck::onSysNotice);
  80. qRegisterMetaType<CUpgrade>("CUpgrade");
  81. connect(g_httpBllPtr.get(), &CHttpBll::sgnUpgrade, this, &envCheck::onUpgrade);
  82. qRegisterMetaType<CStudentClientConfig>("CStudentClientConfig");
  83. connect(g_httpBllPtr.get(), &CHttpBll::sgnStudentClientConfig, this, &envCheck::onStudentClientConfig);
  84. qRegisterMetaType<CGetSoftwareConfig>("CGetSoftwareConfig");
  85. connect(g_httpBllPtr.get(), &CHttpBll::sgnGetSoftwareConfig, this, &envCheck::onGetSoftwareConfig);
  86. }
  87. envCheck::~envCheck()
  88. {
  89. delete ui;
  90. }
  91. void envCheck::onStudentClientConfig(CStudentClientConfig studentClientConfig)
  92. {
  93. if (studentClientConfig.nCode == 200)
  94. {
  95. g_appInfoPtr->m_bDisableRemoteAssistance = studentClientConfig.bDisableRemoteAssistance;
  96. g_appInfoPtr->m_bDisableVirtualCamera = studentClientConfig.bDisableVirtualCamera;
  97. }
  98. else
  99. {
  100. popMsg(QString::fromLocal8Bit("网络异常,请检查网络连接!"), QString::fromLocal8Bit("系统提示"), this);
  101. return;
  102. }
  103. if(g_appInfoPtr->m_bDisableRemoteAssistance || g_appInfoPtr->m_bDisableVirtualCamera)
  104. {
  105. CHttpRequestPackage hrp;
  106. hrp.sUri = QString("https://%1/oe_client/software.json").arg(g_appInfoPtr->m_sEscDomain);
  107. hrp.nRequestType = RequestType::rtGetSoftwareConfig;
  108. g_httpBllPtr->getUrl(hrp);
  109. }
  110. else
  111. {
  112. checkProc();
  113. }
  114. }
  115. void envCheck::onGetSoftwareConfig(CGetSoftwareConfig getSoftwareConfig)
  116. {
  117. if (getSoftwareConfig.nCode == 200)
  118. {
  119. qDebug()<<getSoftwareConfig.sSoftwareConfig.toLocal8Bit();
  120. QString sSoftwareConfig = QByteArray::fromBase64(getSoftwareConfig.sSoftwareConfig.toLocal8Bit());
  121. if(!sSoftwareConfig.isEmpty())
  122. {
  123. Json::Reader reader;
  124. Json::Value jsonRoot = Json::Value::null;
  125. if (reader.parse(sSoftwareConfig.toStdString(), jsonRoot))
  126. {
  127. QString sCamera = jsonRoot["vCamList"].asString().c_str();
  128. QStringList cameraList = sCamera.split("\n", QString::SkipEmptyParts);
  129. QString sRemoteApp = jsonRoot["remoteApp"].asString().c_str();
  130. QStringList remoteAppList = sRemoteApp.split("\n", QString::SkipEmptyParts);
  131. m_sCameraList += cameraList;
  132. m_sRemoteList += remoteAppList;
  133. m_sRemoteTipList += remoteAppList;
  134. }
  135. }
  136. }
  137. checkProc();
  138. }
  139. void envCheck::initUI()
  140. {
  141. setGeometry(0, 0, g_appInfoPtr->m_fRate*(600 - 24), g_appInfoPtr->m_fRate*340);
  142. ui->label_platformIcon->setGeometry(g_appInfoPtr->m_fRate*60, g_appInfoPtr->m_fRate*40,
  143. g_appInfoPtr->m_fRate*32, g_appInfoPtr->m_fRate*32);
  144. ui->label_platformTitle->adjustSize();
  145. ui->label_platformTitle->setGeometry(ui->label_platformIcon->x() + ui->label_platformIcon->width() + g_appInfoPtr->m_fRate*10,
  146. ui->label_platformIcon->y() + (ui->label_platformIcon->height() - ui->label_platformTitle->height())/2,
  147. ui->label_platformTitle->width(), ui->label_platformTitle->height());
  148. ui->label_mainHint->adjustSize();
  149. ui->label_mainHint->setGeometry(g_appInfoPtr->m_fRate*60, g_appInfoPtr->m_fRate*144, ui->label_mainHint->width(), ui->label_mainHint->height());
  150. ui->label_checkItem->adjustSize();
  151. ui->label_checkItem->setGeometry(ui->label_mainHint->x(), ui->label_mainHint->y() + ui->label_mainHint->height() + g_appInfoPtr->m_fRate*10,
  152. width(), ui->label_checkItem->height());
  153. if(!g_appInfoPtr->m_sVersionCode.isEmpty())
  154. {
  155. ui->label_version->setText(QString("V%1").arg(g_appInfoPtr->m_sVersionCode));
  156. }
  157. ui->label_version->adjustSize();
  158. ui->label_version->setGeometry(ui->label_mainHint->x(), g_appInfoPtr->m_fRate*264, g_appInfoPtr->m_fRate*300, ui->label_version->height());
  159. ui->label_complay->adjustSize();
  160. ui->label_complay->setGeometry(ui->label_version->x(), ui->label_version->y() + ui->label_version->height() + g_appInfoPtr->m_fRate*10,
  161. ui->label_complay->width(), ui->label_complay->height());
  162. }
  163. void envCheck::checkProc()
  164. {
  165. QString sCheckStr = "";
  166. if(g_appInfoPtr->m_bDisableRemoteAssistance)
  167. {
  168. ui->label_checkItem->setText(QString::fromLocal8Bit("正在检测是否存在远程桌面 …"));
  169. QApplication::processEvents();
  170. if(CCommonTools::isUseRDP())
  171. {
  172. sCheckStr = QString::fromLocal8Bit("请检测是否开启远程桌面");
  173. qDebug()<<QString::fromLocal8Bit("环境检测异常,")<<sCheckStr;
  174. }
  175. ui->label_checkItem->setText(QString::fromLocal8Bit("正在检测是否存在分屏 …"));
  176. QApplication::processEvents();
  177. if(m_MonitorEnumeratorPtr->getMontorNumber() > 1)
  178. {
  179. if(sCheckStr.isEmpty())
  180. {
  181. sCheckStr = QString::fromLocal8Bit("请检测是否开启分屏");
  182. }
  183. else
  184. {
  185. sCheckStr += QString::fromLocal8Bit("、分屏");
  186. }
  187. }
  188. }
  189. if(g_appInfoPtr->m_bDisableVirtualCamera)
  190. {
  191. ui->label_checkItem->setText(QString::fromLocal8Bit("正在检测是否存在虚拟摄像头 …"));
  192. QApplication::processEvents();
  193. std::vector<CameraInfo> cameraList;
  194. QStringList UnpassList;
  195. CCommonTools::listCameraDevices(cameraList, UnpassList, m_sCameraList);
  196. for(CameraInfo ci : cameraList)
  197. {
  198. if(ci.vid.empty() || ci.pid.empty())
  199. {
  200. if(UnpassList.indexOf(ci.name, Qt::CaseInsensitive) >= 0)
  201. {
  202. if(sCheckStr.isEmpty())
  203. {
  204. sCheckStr = QString::fromLocal8Bit("请检测是否开启虚拟摄像头%1").arg(ci.name);
  205. }
  206. else
  207. {
  208. sCheckStr += QString::fromLocal8Bit("、%1").arg(ci.name);
  209. }
  210. myDebug()<<QString::fromLocal8Bit("虚拟摄像头信息,vid:%1,pid%2:,name:%3")
  211. .arg(ci.vid).arg(ci.pid).arg(ci.name);
  212. }
  213. }
  214. }
  215. }
  216. if(!sCheckStr.isEmpty())
  217. {
  218. m_unpasslist.push_back(sCheckStr);
  219. myDebug()<<QString::fromLocal8Bit("环境检测异常,")<<sCheckStr;
  220. }
  221. sCheckStr = "";
  222. if(g_appInfoPtr->m_bDisableRemoteAssistance)
  223. {
  224. ui->label_checkItem->setText(QString::fromLocal8Bit("正在检测是否存在远程协助工具 …"));
  225. QApplication::processEvents();
  226. QStringList appList;
  227. CCommonTools::getAllAppNameList(appList, m_sRemoteList, m_sRemoteTipList);
  228. if(appList.count() > 0)
  229. {
  230. for(int i = 0; i < appList.count(); i++)
  231. {
  232. if(sCheckStr.isEmpty())
  233. {
  234. sCheckStr = QString::fromLocal8Bit("请检测是否开启%1").arg(appList[i]);
  235. }
  236. else
  237. {
  238. sCheckStr += QString::fromLocal8Bit("、%1").arg(appList[i]);
  239. }
  240. }
  241. }
  242. }
  243. if(!sCheckStr.isEmpty())
  244. {
  245. m_unpasslist.push_back(sCheckStr);
  246. myServerLog()<<QString::fromLocal8Bit("环境检测异常,")<<sCheckStr;
  247. }
  248. if(m_unpasslist.count() > 0)
  249. {
  250. emit checkUnpass();
  251. return;
  252. }
  253. CHttpRequestPackage hrp;
  254. hrp.sUri = QString("https://%1/oe_client/pc/upgrade.json").arg(g_appInfoPtr->m_sEscDomain);
  255. hrp.nRequestType = RequestType::rtUpgrade;
  256. g_httpBllPtr->getUrl(hrp);
  257. }
  258. void envCheck::startCheck()
  259. {
  260. CHttpRequestPackage hrp;
  261. hrp.sUri = QString("https://%1/sys_notice/org_all.json").arg(g_appInfoPtr->m_sEscDomain);
  262. hrp.nRequestType = RequestType::rtSysNotice;
  263. g_httpBllPtr->getUrl(hrp);
  264. }
  265. QStringList envCheck::unpassList()
  266. {
  267. return m_unpasslist;
  268. }
  269. void envCheck::onSysNotice(CSysNotice sysNotice)
  270. {
  271. if(sysNotice.nCode == 200)
  272. {
  273. QDateTime dtStartTime = QDateTime::fromString(sysNotice.sStartTime, "yyyy-MM-dd hh:mm:ss");
  274. QDateTime dtEndTime = QDateTime::fromString(sysNotice.sEndTime, "yyyy-MM-dd hh:mm:ss");
  275. QDateTime dtNow = QDateTime::currentDateTime();
  276. if(sysNotice.bEnable && dtNow < dtEndTime && dtNow > dtStartTime)
  277. {
  278. if(popMsg(sysNotice.sContent, sysNotice.sTitle, this) == QDialog::Rejected)
  279. {
  280. emit sysUpadte();
  281. }
  282. else
  283. {
  284. CHttpRequestPackage hrp;
  285. hrp.sUri = QString("https://%1/org_properties/byOrgDomain/%2.ecs.qmth.com.cn/studentClientConfig.json")
  286. .arg(g_appInfoPtr->m_sEscDomain).arg(g_appInfoPtr->m_sOrgPrefix);
  287. hrp.nRequestType = RequestType::rtStudentClientConfig;
  288. g_httpBllPtr->getUrl(hrp);
  289. }
  290. }
  291. else
  292. {
  293. CHttpRequestPackage hrp;
  294. hrp.sUri = QString("https://%1/org_properties/byOrgDomain/%2.ecs.qmth.com.cn/studentClientConfig.json")
  295. .arg(g_appInfoPtr->m_sEscDomain).arg(g_appInfoPtr->m_sOrgPrefix);
  296. hrp.nRequestType = RequestType::rtStudentClientConfig;
  297. g_httpBllPtr->getUrl(hrp);
  298. // checkProc();
  299. }
  300. }
  301. else
  302. {
  303. m_unpasslist.push_back(QString::fromLocal8Bit("网络连接不畅"));
  304. emit checkUnpass();
  305. }
  306. }
  307. void envCheck::onUpgrade(CUpgrade upgrade)
  308. {
  309. if(upgrade.nCode == 200)
  310. {
  311. bool bUpdateVersion = false;
  312. if(g_appInfoPtr->m_nVersionId != upgrade.nBuild)
  313. {
  314. g_appInfoPtr->m_nVersionId = upgrade.nBuild;
  315. g_appInfoPtr->m_sVersionCode = upgrade.sVersion;
  316. g_appInfoPtr->m_sUpgradeUrl = upgrade.sUpgradeUrl;
  317. bUpdateVersion = true;
  318. }
  319. emit checkpassed(bUpdateVersion);
  320. }
  321. else
  322. {
  323. m_unpasslist.push_back(QString::fromLocal8Bit("网络连接不畅"));
  324. emit checkUnpass();
  325. }
  326. }