UiHelper.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. #ifndef UIHELPER_H
  2. #define UIHELPER_H
  3. #include "mainwindow.h"
  4. #include "ui_mainwindow.h"
  5. #include "QMouseEvent"
  6. #include "QFileDialog"
  7. #include "QNetworkCookie"
  8. #include "QWebEngineCookieStore"
  9. void MainWindow::StartServer(const QString &name)
  10. {//Запуск сервера
  11. setWindowTitle("OpenMBFR " + version + " для " + name);
  12. if(server.listen(name))
  13. {
  14. connect(&server, &QLocalServer::newConnection, this, &MainWindow::getNewConnections);//Подключаем обработчик для новых подключений
  15. getNewConnections();//обрабатываем существующие подключения
  16. }
  17. }
  18. void MainWindow::getNewConnections()
  19. {//обработка подключений к локальному серверу
  20. while (server.hasPendingConnections())
  21. {
  22. QLocalSocket* socket = server.nextPendingConnection();
  23. connection_list.push_back(socket);
  24. connect(socket, &QLocalSocket::readyRead, this, &MainWindow::readSocket);
  25. connect(socket, &QLocalSocket::disconnected, this, &MainWindow::disconnectSocket);
  26. }
  27. }
  28. bool MainWindow::eventFilter(QObject *o, QEvent *event)
  29. {
  30. if (event->type() == QEvent::HoverMove && !ControlKeyPressed){
  31. if(tabs.count() == 0) return QObject::event(event);
  32. QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
  33. QWebEngineView *view = getTabById();
  34. if(mouseEvent->pos().y() >= ui->url_line->height() && mouseEvent->y() <= view->height()){
  35. QPointF s = view->page()->scrollPosition();
  36. QPointF p = mouseEvent->localPos();
  37. // QString pos = QString::number(mouseEvent->x() - view->pos().x() + rx) + " : " + QString::number(mouseEvent->y() - view->pos().y() );
  38. QString pos = QString::number(p.x() + s.x()) + " : " + QString::number(p.y() + s.y() - ui->url_line->height());
  39. ui->cursorPosition->setText(pos);
  40. }
  41. }
  42. else if(event->type() == QEvent::FocusOut || event->type() == QEvent::FocusIn){
  43. ControlKeyPressed = false;
  44. }
  45. return QObject::event(event);
  46. }
  47. void MainWindow::keyPressEvent(QKeyEvent *event)
  48. {
  49. if(Qt::Modifier::CTRL == event->modifiers()){
  50. ControlKeyPressed = true;
  51. if(Qt::Key_N == event->key()){
  52. createTab();
  53. }
  54. else if(tabs.count() > 0){
  55. Tab *tab = getTabById();
  56. if(Qt::Key_Plus == event->key() || Qt::Key_Equal == event->key()){
  57. tab->setZoomFactor(tab->zoomFactor() + 0.1);
  58. }
  59. else if(Qt::Key_Minus == event->key()){
  60. tab->setZoomFactor(tab->zoomFactor() - 0.1);
  61. }
  62. else if(Qt::Key_0 == event->key()){
  63. tab->setZoomFactor(1);
  64. }
  65. else if(Qt::Key_W == event->key()){
  66. deleteTab(tab);
  67. }
  68. }
  69. }
  70. }
  71. void MainWindow::keyReleaseEvent(QKeyEvent *event){
  72. if(Qt::Key_Control == event->key())
  73. ControlKeyPressed = false;
  74. }
  75. void MainWindow::mousePressEvent(QMouseEvent* event){
  76. #if QT_VERSION_MAJOR == 5
  77. mouseClick_X = event->x();
  78. mouseClick_Y = event->y();
  79. #else
  80. mouseClick_X = event->position().x();
  81. mouseClick_Y = event->position().y();
  82. #endif
  83. }
  84. void MainWindow::mouseMoveEvent(QMouseEvent* event){
  85. #if QT_VERSION_MAJOR == 5
  86. move(event->globalX() - mouseClick_X, event->globalY() - mouseClick_Y);
  87. #else
  88. move(event->globalPosition().x() - mouseClick_X, event->globalPosition().y() - mouseClick_Y);
  89. #endif
  90. }
  91. void MainWindow::SendToServer(QLocalSocket *socket, const QByteArray *str){
  92. socket->write(*str); socket->waitForBytesWritten();
  93. }
  94. void MainWindow::disconnectSocket()
  95. {//miniPoster отключился
  96. QLocalSocket * ptrSender = (QLocalSocket*)sender();
  97. connection_list.removeOne(ptrSender);
  98. ptrSender->deleteLater();
  99. }
  100. bool MainWindow::isMatchString(QString &string, QStringList strings)
  101. {//проверка совпали ли команды
  102. return strings.contains(string);
  103. }
  104. void MainWindow::error(Errors err, QLocalSocket *socket){
  105. SendToServer(socket, getError(err));
  106. }
  107. const QByteArray* MainWindow::getError(Errors err){
  108. switch (err) {
  109. case NO_TABS: return &NO_TABS_err;
  110. case BAD_ID: return &BAD_ID_err;
  111. case NO_COMMAND: return &NO_COMMAND_err;
  112. case TAB_NOT_EXISTS: return &TAB_NOT_EXISTS_err;
  113. case BAD_CAPTCHA_TYPE: return &BAD_CAPTCHA_TYPE_err;
  114. case BAD_COMMAND_NAME: return &BAD_COMMAND_NAME_err;
  115. case BAD_PROXY_TYPE_OR_PARAMS: return &BAD_PROXY_TYPE_OR_PARAMS_err;
  116. case BAD_COMMAND_PARAM_LIST: return &BAD_COMMAND_PARAM_LIST_err;
  117. case BAD_COMMAND_NAME_OR_PARAMS: return &BAD_COMMAND_NAME_OR_PARAMS_err;
  118. case BAD_MOUSE_EMULATION: return &BAD_MOUSE_EMULATION_err;
  119. case TOO_MUCH_PARAMS: return &TOO_MUCH_PARAMS_err;
  120. default: return &UNDEFINED_ERROR;
  121. }
  122. }
  123. MainWindow::Commands MainWindow::getCommand(QString *posterCommand){
  124. if(*posterCommand == "ISLOAD")
  125. return IS_LOAD;
  126. if(*posterCommand == "GETURL")
  127. return GET_URL;
  128. if(*posterCommand == "OPENURL" ||
  129. *posterCommand == "OPEN")
  130. return OPEN_URL;
  131. if(*posterCommand == "TABFOCUSBYNAME")
  132. return TAB_FOCUS_BY_NAME;
  133. if(*posterCommand == "EVALJS")
  134. return EVAL_JS;
  135. if(*posterCommand == "SETPROXY")
  136. return SET_PROXY;
  137. if(*posterCommand == "SETUSERAGENT")
  138. return SET_USERAGENT;
  139. if(*posterCommand == "JSERRORLOGGING")
  140. return JS_ERROR_LOGGING;
  141. if(*posterCommand == "JSLOGLEVEL")
  142. return JS_LOG_LEVEL;
  143. if(*posterCommand == "JSONERRORALERT")
  144. return JS_ON_ERROR_ALERT;
  145. if(*posterCommand == "GETHTML")
  146. return GET_HTML;
  147. if(*posterCommand == "SETHTML")
  148. return SET_HTML;
  149. if(*posterCommand == "V2")
  150. return V2;
  151. if(*posterCommand == "V3")
  152. return V3;
  153. if(*posterCommand == "HCAP")
  154. return HCAP;
  155. if(*posterCommand == "RR" ||
  156. *posterCommand == "RECAPTCHARESPONSE")
  157. return RECAPTCHA_RESPONSE;
  158. if(*posterCommand == "FORWARD")
  159. return FORWARD;
  160. if(*posterCommand == "BACK")
  161. return BACK;
  162. if(*posterCommand == "RELOAD")
  163. return RELOAD;
  164. if(*posterCommand == "GETIDS")
  165. return GET_IDS;
  166. if(*posterCommand == "GETUSERAGENT")
  167. return GET_USERAGENT;
  168. if(*posterCommand == "GETTABID")
  169. return GET_TAB_ID;
  170. if(*posterCommand == "GETTABCOUNT")
  171. return GET_TAB_COUNT;
  172. if(*posterCommand == "CLOSEWINDOW" ||
  173. *posterCommand == "CLOSE")
  174. return CLOSE_WINDOW;
  175. if(*posterCommand == "WINDOWMINIMAZE" ||
  176. *posterCommand == "MINIMAZE")
  177. return WINDOW_MINIMAZE;
  178. if(*posterCommand == "WINDOWRESTORE" ||
  179. *posterCommand == "RESTORE")
  180. return WINDOW_RESTORE;
  181. if(*posterCommand == "ELEMENTSETVALUEBYID")
  182. return ELEMENT_SET_VALUE_BY_ID;
  183. if(*posterCommand == "ELEMENTSETVALUEBYCLASS")
  184. return ELEMENT_SET_VALUE_BY_CLASS;
  185. if(*posterCommand == "ELEMENTSETINNERHTMLBYID")
  186. return ELEMENT_SET_INNER_HTML_BY_ID;
  187. if(*posterCommand == "ELEMENTSETINNERHTMLBYCLASS")
  188. return ELEMENT_SET_INNER_HTML_BY_CLASS;
  189. if(*posterCommand == "ELEMENTCLICKBYID")
  190. return ELEMENT_CLICK_BY_ID;
  191. if(*posterCommand == "ELEMENTCLICKBYCLASS")
  192. return ELEMENT_CLICK_BY_CLASS;
  193. if(*posterCommand == "DELTOR")
  194. return DEL_TOR;
  195. if(*posterCommand == "PROXYON" ||
  196. *posterCommand == "ONPROXY")
  197. return PROXY_ON;
  198. if(*posterCommand == "PROXYOFF" ||
  199. *posterCommand == "OFFPROXY")
  200. return PROXY_OFF;
  201. if(*posterCommand == "GETCOOKIES")
  202. return GET_COOKIES;
  203. if(*posterCommand == "DELETEALLCOOKIES")
  204. return DELETE_ALL_COOKIES;
  205. if(*posterCommand == "JSERROR")
  206. return JS_ERROR;
  207. if(*posterCommand == "CLEARJSERRORS" ||
  208. *posterCommand == "JSCLEARERRORS")
  209. return CLEAR_JS_ERRORS;
  210. if(*posterCommand == "ADDTAB")
  211. return ADD_TAB;
  212. if(*posterCommand == "ADDTABFOCUS")
  213. return ADD_TAB_FOCUS;
  214. if(*posterCommand == "CLOSETAB")
  215. return CLOSE_TAB;
  216. if(*posterCommand == "TABFOCUS")
  217. return TAB_FOCUS;
  218. if(*posterCommand == "CLOSETABBYNAME")
  219. return CLOSE_TAB_BY_NAME;
  220. if(*posterCommand == "ISTABEXISTS")
  221. return IS_TAB_EXISTS;
  222. if(*posterCommand == "ISTABNAMEEXISTS")
  223. return IS_TAB_NAME_EXISTS;
  224. if(*posterCommand == "SETWINDOWSIZE")
  225. return SET_WINDOW_SIZE;
  226. if(*posterCommand == "SETPOSITION")
  227. return SET_POSITION;
  228. if(*posterCommand == "TOR")
  229. return TOR;
  230. if(*posterCommand == "SETCACHEDIR")
  231. return SET_CACHE_DIR;
  232. if(*posterCommand == "SETCOOKIEDIR")
  233. return SET_COOKIE_DIR;
  234. if(*posterCommand == "SETOWNCACHEDIR")
  235. return SET_OWN_CACHE_DIR;
  236. if(*posterCommand == "SETOWNCOOKIEDIR")
  237. return SET_OWN_COOKIE_DIR;
  238. if(*posterCommand == "SETCOOKIES")
  239. return SET_COOKIES;
  240. if(*posterCommand == "SETCOOKIESFROMSTRING")
  241. return SET_COOKIES_FROM_STRING;
  242. if(*posterCommand == "SAVECOOKIES")
  243. return SAVE_COOKIES;
  244. if(*posterCommand == "SAVECOOKIESTOPATH")
  245. return SAVE_COOKIES_TO_PATH;
  246. if(*posterCommand == "GETCOOKIEVALUEBYNAME")
  247. return GET_COOKIE_VALUE_BY_NAME;
  248. if(*posterCommand == "GETCOOKIEBYDOMAIN")
  249. return GET_COOKIE_BY_DOMAIN;
  250. if(*posterCommand == "GETDOMAINCOOKIEVALUEBYNAME" ||
  251. *posterCommand == "GETDOMAINCOOKIEBYNAME")
  252. return GET_DOMAIN_COOKIE_VALUE_BY_NAME;
  253. if(*posterCommand == "MOUSEEMULATION")
  254. return MOUSE_EMULATION;
  255. if(*posterCommand == "SCREENSHOT")
  256. return SCREEN_SHOT;
  257. if(*posterCommand == "PIXELEXISTS")
  258. return PIXEL_EXISTS;
  259. if(*posterCommand == "LBUTTONCLICK" ||
  260. *posterCommand == "LBC")
  261. return L_BUTTON_CLICK;
  262. if(*posterCommand == "RBUTTONCLICK" ||
  263. *posterCommand == "RBC")
  264. return R_BUTTON_CLICK;
  265. if(*posterCommand == "LBUTTONPRESS" ||
  266. *posterCommand == "LBP")
  267. return L_BUTTON_PRESS;
  268. if(*posterCommand == "LBUTTONRELEASE" ||
  269. *posterCommand == "LBR")
  270. return L_BUTTON_RELEASE;
  271. if(*posterCommand == "MOUSEMOVE")
  272. return MOUSE_MOVE;
  273. if(*posterCommand == "SETTITLE" ||
  274. *posterCommand == "SETWINDOWTITLE")
  275. return SET_WINDOW_TITLE;
  276. if(*posterCommand == "SETURL")
  277. return SET_URL;
  278. if(*posterCommand == "SETACCEPTHEADER")
  279. return SET_ACCEPT_HEADER;
  280. if(*posterCommand == "SCROLLY")
  281. return SCROLL_Y;
  282. if(*posterCommand == "SCROLLTOY")
  283. return SCROLL_TO_Y;
  284. if(*posterCommand == "SCROLLX")
  285. return SCROLL_X;
  286. if(*posterCommand == "SCROLLTOX")
  287. return SCROLL_TO_X;
  288. if(*posterCommand == "SCROLLYPOSITION")
  289. return SCROLL_Y_POSITION;
  290. if(*posterCommand == "SCROLLYMAX")
  291. return SCROLL_Y_MAX;
  292. if(*posterCommand == "SCROLLXPOSITION")
  293. return SCROLL_X_POSITION;
  294. if(*posterCommand == "SCROLLXMAX")
  295. return SCROLL_X_MAX;
  296. if(*posterCommand == "GETPOSITION")
  297. return GET_POSITION;
  298. if(*posterCommand == "GETWINDOWSIZE")
  299. return GET_WINDOW_SIZE;
  300. if(*posterCommand == "IMAGES")
  301. return IMAGES;
  302. if(*posterCommand == "ISJS")
  303. return IS_JS;
  304. if(*posterCommand == "ENABLEJS")
  305. return ENABLE_JS;
  306. if(*posterCommand == "DISABLEJS")
  307. return DISABLE_JS;
  308. if(*posterCommand == "MAXIMIZE" ||
  309. *posterCommand == "WINDOWMAXIMIZE")
  310. return WINDOW_MAXIMIZE;
  311. if(*posterCommand == "ENABLEACCELERATION")
  312. return ENABLE_ACCELERATION;
  313. if(*posterCommand == "DISABLEACCELERATION")
  314. return DISABLE_ACCELERATION;
  315. if(*posterCommand == "HIDEBAR")
  316. return HIDE_BAR;
  317. if(*posterCommand == "SHOWBAR")
  318. return SHOW_BAR;
  319. if(*posterCommand == "ISBAR")
  320. return IS_BAR;
  321. return undefined;
  322. }
  323. void MainWindow::on_pushButton_clicked(){//Нажата кнопка "Gmail"
  324. const QString url = "https://mail.google.com/";
  325. getTabById()->load(QUrl(url));
  326. ui->url_line->setText(url);
  327. }
  328. void MainWindow::on_pushButton_2_clicked(){//Нажата кнопка "GO!"
  329. if(tabs.count() == 0) return;
  330. getTabById()->load(QUrl::fromUserInput(ui->url_line->text()));
  331. }
  332. void MainWindow::on_url_line_returnPressed(){//Нажали Enter в адресной строке
  333. if(tabs.count() == 0) return;
  334. getTabById()->load(QUrl::fromUserInput(ui->url_line->text()));
  335. }
  336. void MainWindow::on_btn_saveCookie_clicked(){
  337. if(tabs.count() == 0) return;
  338. QString fileName = QFileDialog::getSaveFileName(this,
  339. "Укажите файл для сохранения кук",
  340. cookieDir.path());
  341. if(fileName.length() == 0) return;
  342. Tab *tab = getTabById();
  343. if(tab == nullptr) return;
  344. tab->saveCookies("", fileName, false, false);
  345. }
  346. void MainWindow::on_btn_removeCookie_clicked(){
  347. if(tabs.count() == 0) return;
  348. getTabById()->deleteCookies();
  349. }
  350. int MainWindow::createTab(QString name){//создать новую вкладку
  351. mutex.lock();
  352. Tab *tab = new Tab;
  353. tabs.append(tab);
  354. ui->tabWidget->addTab(tab, name.length() > 0
  355. ? name :
  356. "Tab_" + QString::number(tab->id));
  357. mutex.unlock();
  358. connect(tab, &QWebEngineView::loadProgress, ui->progressBar, &QProgressBar::setValue);
  359. return tab->id;
  360. }
  361. bool MainWindow::deleteTab(Tab* tab){//закрыть вкладку и почистить за собой
  362. if(tabs.count() == 0) return false;
  363. mutex.lock();
  364. if(tab == nullptr) return false;
  365. int index = ui->tabWidget->indexOf(tab);
  366. ui->tabWidget->removeTab(index);
  367. tabs.removeOne(tab);
  368. delete tab;
  369. mutex.unlock();
  370. return true;
  371. }
  372. Tab* MainWindow::getTabById(int tabId){
  373. if(tabId == -1)
  374. return getTabByWidget(ui->tabWidget->currentWidget());
  375. for(auto tab : tabs)
  376. if(tab->id == tabId)
  377. return tab;
  378. return nullptr;
  379. }
  380. Tab* MainWindow::getTabByWidget(QWidget *w){
  381. for(auto tab : tabs)
  382. if(tab == w)
  383. return tab;
  384. return nullptr;
  385. }
  386. void MainWindow::tabChanged(int index){//выбрана другая вкладка -> меняем url
  387. if(index == -1) { ui->url_line->setText(""); return; }
  388. Tab *tab = getTabById();
  389. ui->url_line->setText(tab->page()->url().toString());
  390. }
  391. void MainWindow::on_tabWidget_tabCloseRequested(int index){
  392. deleteTab(getTabByWidget(ui->tabWidget->widget(index)));
  393. }
  394. int MainWindow::tabFocus(int tabId){//сделать вкладку активной по её id
  395. if(tabs.count() == 0) return 0;
  396. Tab *tab = getTabById(tabId);
  397. int index = ui->tabWidget->indexOf(tab);
  398. ui->tabWidget->setCurrentIndex(index);
  399. return 1;
  400. }
  401. bool MainWindow::isTabExist(int tabId){
  402. return getTabById(tabId) != nullptr;
  403. }
  404. bool MainWindow::isTabNameExist(QString tabName){
  405. for(int i = 0; i < ui->tabWidget->count(); ++i)
  406. if(ui->tabWidget->tabText(i) == tabName)
  407. return true;
  408. return false;//не существует
  409. }
  410. void MainWindow::save_position_and_pseudo_minimaze(){
  411. if(!isMinimized){
  412. normal_pos = pos();
  413. QSize s = size();
  414. move(-s.width(), -s.height());
  415. isMinimized = true;
  416. }
  417. }
  418. void MainWindow::restore_position_and_show_normal(){
  419. if(isMinimized){
  420. move(normal_pos);
  421. isMinimized = false;
  422. }
  423. else showNormal();
  424. }
  425. void MainWindow::setCachePath(Tab *tab, QString path){
  426. tab->page()->profile()->setCachePath("../save/cacheChrom/" + path);
  427. }
  428. void MainWindow::setCookiePath(Tab *tab, QString path){
  429. tab->page()->profile()->setPersistentStoragePath("../save/coockieChrom/" + path);
  430. }
  431. #endif // UIHELPER_H