mainwindow.cpp 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "UiHelper.h"
  4. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){
  5. ui->setupUi(this);
  6. setWindowTitle("OpenMBFR " + version);
  7. createTab();
  8. installEventFilter(this);
  9. if(!cacheDir .exists()) cacheDir.mkdir(cacheDir .path());
  10. if(!cookieDir.exists()) cookieDir.mkdir(cookieDir.path());
  11. QStringList cmdline_args = QCoreApplication::arguments();
  12. if(cmdline_args.length() > 1) StartServer(cmdline_args[1]);
  13. connect(ui->tabWidget, &QTabWidget::currentChanged, this, &MainWindow::tabChanged);
  14. }
  15. MainWindow::~MainWindow()
  16. {//диструктор
  17. delete ui;
  18. }
  19. void MainWindow::readSocket()
  20. {//чтение команд от miniPoster
  21. QLocalSocket * socket = (QLocalSocket*)sender();
  22. if(tabs.count() == 0)
  23. { error(NO_TABS, socket); return; }
  24. QByteArray data_to_server = "1";
  25. QStringList TaskList = ((QString)socket->readAll()).split("||");
  26. TaskList.removeAll("");//Удаляем пустые строки после функции split
  27. int tabId = -1;
  28. Commands command = undefined;
  29. if(TaskList.length() >= 1){
  30. if(TaskList.length() >= 2){//tabId||command
  31. bool findDigits = false;
  32. for(int i = 0; i < TaskList.at(0).length(); i++){
  33. if(!TaskList.at(i)[0].isDigit()){
  34. if(findDigits){//1gfg5||command
  35. error(BAD_ID, socket); return;
  36. }
  37. break;//command||param
  38. }
  39. else findDigits = true;
  40. }
  41. if(findDigits){
  42. //Исключаем номер вкладки из списка, чтобы не переписывать половину кода
  43. tabId = TaskList.takeAt(0).toInt();
  44. }
  45. }
  46. command = getCommand(&TaskList.at(0).toUpper().remove('_'));
  47. }
  48. else { error(NO_COMMAND, socket); return; }
  49. Tab *tab = getTabById(tabId);
  50. if(tab == nullptr)//такой вкладки не существует
  51. { error(TAB_NOT_EXISTS, socket); return; }
  52. if(command == undefined){ error(BAD_COMMAND_NAME, socket); return; }
  53. if(command == IS_LOAD)//проверка загрузки страницы
  54. { data_to_server = tab->isLoaded ? "YES" : "NO"; }
  55. else if(TaskList.length() == 1)//Функции без параметров
  56. {
  57. if(command == GET_URL)//получить текущий url
  58. data_to_server = tab->url().url().toLocal8Bit();
  59. else if(command == GET_HTML)//получить HTML страницу
  60. tab->get_html(data_to_server);
  61. else if(command == CLOSE_WINDOW){//закрыть браузер
  62. SendToServer(socket, &data_to_server);
  63. QApplication::quit();
  64. }
  65. else if(command == WINDOW_MINIMAZE)//свернуть браузер
  66. save_position_and_pseudo_minimaze();
  67. else if(command == WINDOW_RESTORE)//обычное состояние браузера
  68. restore_position_and_show_normal();
  69. else if(command == WINDOW_MAXIMIZE){//развернуть браузер на весь экран
  70. normal_pos = pos();
  71. showMaximized();
  72. }
  73. else if(command == RECAPTCHA_RESPONSE){//получить ключ reCAPCHA(2|3), HCAP
  74. if(!tab->getCaptchaResponse(data_to_server))
  75. { error(BAD_CAPTCHA_TYPE, socket); return; }
  76. }
  77. else if(command == DEL_TOR)//убрать подключение через TOR
  78. QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
  79. else if(command == PROXY_ON)//включить прокси
  80. data_to_server = QString::number(Proxy::on_off(PROXYSTATE::ON)).toLocal8Bit();
  81. else if(command == PROXY_OFF)//отключить прокси
  82. data_to_server = QString::number(Proxy::on_off(PROXYSTATE::OFF)).toLocal8Bit();
  83. else if(command == IS_JS)//проверить включен ли JavaScript в браузере
  84. data_to_server = QString::number(tab->settings()->testAttribute(QWebEngineSettings::JavascriptEnabled)).toLocal8Bit();
  85. else if(command == ENABLE_JS)//включить JavaScript на вкадке
  86. tab->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
  87. else if(command == DISABLE_JS)//выключить JavaScript на вкладке
  88. tab->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false);
  89. else if(command == ENABLE_ACCELERATION)//включить 2d ускорение
  90. tab->settings()->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled, true);
  91. else if(command == DISABLE_ACCELERATION)//выключить 2d ускорение
  92. tab->settings()->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled, false);
  93. else if(command == GET_COOKIES)//Получить куки из браузера
  94. tab->get_cookies(data_to_server);
  95. else if(command == DELETE_ALL_COOKIES)//Удалить все куки
  96. tab->deleteCookies();
  97. else if(command == FORWARD)//Загрузить следующую страницу
  98. tab->forward();
  99. else if(command == BACK)//Загрузить предыдущую страницу
  100. tab->back();
  101. else if(command == RELOAD)//Перезагрузить страницу
  102. tab->reload();
  103. else if(command == GET_IDS){//Получить список id всех вкладок
  104. data_to_server = "";
  105. for(auto &tab : tabs){
  106. data_to_server += QByteArray::number(tab->id) + "|";
  107. }
  108. if(data_to_server.length() > 0) data_to_server = data_to_server.remove(data_to_server.length() - 1, 1);
  109. }
  110. else if(command == GET_POSITION)//получить положение окна
  111. data_to_server = (QString::number(this->pos().x()) + ":" + QString::number(this->pos().y())).toLocal8Bit();
  112. else if(command == GET_WINDOW_SIZE)//получить размеры окна
  113. data_to_server = (QString::number(this->size().width()) + ":" + QString::number(this->size().height())).toLocal8Bit();
  114. else if(command == SCROLL_Y_POSITION)//Получить текущее значение полосы прокрутки по вертикали
  115. data_to_server = tab->scroll_y_position();
  116. else if(command == SCROLL_Y_MAX)//Получить максимальное значение полосы прокрутки по вертикали
  117. data_to_server = tab->scroll_y_max();
  118. else if(command == SCROLL_X_POSITION)//Получить текущее значение полосы прокрутки по горизонтали3
  119. data_to_server = tab->scroll_x_position();
  120. else if(command == SCROLL_X_MAX)//Получить максимальное значение полосы прокрутки по горизонтали
  121. data_to_server = tab->scroll_x_max();
  122. else if(command == GET_USERAGENT)//Получить значение UserAgent
  123. data_to_server = tab->page()->profile()->httpUserAgent().toLocal8Bit();
  124. else if(command == GET_TAB_ID)//Получить id текущей вкладки
  125. data_to_server = QByteArray::number(tab->id);
  126. else if(command == GET_TAB_COUNT)//Получить число вкладок
  127. data_to_server = QByteArray::number(tabs.count());
  128. else if(command == JS_ERROR)//Получить ошибки в JS
  129. data_to_server = tab->JS_Errors().toLocal8Bit();
  130. else if(command == CLEAR_JS_ERRORS)//Очистить список ошибок JS
  131. tab->clearJS_errors();
  132. else if(command == ADD_TAB)//Открыть новую вкладку
  133. data_to_server = QByteArray::number(createTab());
  134. else if(command == ADD_TAB_FOCUS){//Открыть новую вкладку и сделать её активной
  135. int id = createTab();
  136. data_to_server = QByteArray::number(id);
  137. tabFocus(id);
  138. }
  139. else if(command == CLOSE_TAB)//Закрыть вкладку
  140. data_to_server = QByteArray::number(deleteTab(tab));
  141. else if(command == TAB_FOCUS)//переключиться на вкладку
  142. data_to_server = QByteArray::number(tabFocus(tabId));
  143. else if(command == HIDE_BAR){//Скрыть нижнюю панель
  144. ui->progressBar->hide();
  145. ui->pushButton->hide();
  146. ui->btn_saveCookie->hide();
  147. ui->btn_removeCookie->hide();
  148. }
  149. else if(command == SHOW_BAR){//Показать нижнюю панель
  150. ui->progressBar->show();
  151. ui->pushButton->show();
  152. ui->btn_saveCookie->show();
  153. ui->btn_removeCookie->show();
  154. }
  155. else if(command == IS_BAR){//Проверить видна ли нижняя панель
  156. data_to_server = QByteArray::number(ui->progressBar->isHidden());
  157. }
  158. else { error(BAD_COMMAND_NAME, socket); return; }
  159. }
  160. else if(TaskList.length() == 2){//Дальше идут функции с параметрами
  161. if(command == OPEN_URL){//обычная загрузка сайта
  162. if(ui->tabWidget->currentWidget() == tab)
  163. ui->url_line->setText(TaskList.at(1));
  164. tab->load(QUrl(TaskList.at(1)));
  165. }
  166. else if(command == ADD_TAB)//Открыть новую вкладку с заданным именем
  167. data_to_server = QByteArray::number(createTab(TaskList.at(1)));
  168. else if(command == ADD_TAB_FOCUS){//Открыть новую вкладку с заданным именем и сделать её активной
  169. int id = createTab(TaskList.at(1));
  170. data_to_server = QByteArray::number(id);
  171. tabFocus(id);
  172. }
  173. else if(command == CLOSE_TAB){//Закрыть вкладку по id
  174. tab = getTabById(TaskList.at(1).toInt());
  175. data_to_server = QByteArray::number(deleteTab(tab));
  176. }
  177. else if(command == CLOSE_TAB_BY_NAME){//Закрыть вкладку по её имени
  178. for(int i = 0; i < ui->tabWidget->count(); ++i){
  179. if(TaskList.at(1) == ui->tabWidget->tabText(i))
  180. tab = static_cast<Tab*>(ui->tabWidget->widget(i));
  181. }
  182. data_to_server = QByteArray::number(deleteTab(tab));
  183. }
  184. else if(command == IS_TAB_EXISTS)//Проверить открыта ли вкладка с указанным id
  185. data_to_server = QByteArray::number(isTabExist(TaskList.at(1).toInt()));
  186. else if(command == IS_TAB_NAME_EXISTS)//Проверить открыта ли вкладка с указанным именем
  187. data_to_server = QByteArray::number(isTabNameExist(TaskList.at(1)));
  188. else if(command == TAB_FOCUS)//переключиться на вкладку с указанным id
  189. data_to_server = QByteArray::number(tabFocus(tab->id));
  190. else if(command == TAB_FOCUS_BY_NAME){//Переключиться на вкладку с указанным именем
  191. data_to_server = "0";
  192. for(int i = 0; i < ui->tabWidget->count(); ++i){
  193. if(TaskList.at(1) == ui->tabWidget->tabText(i)){
  194. ui->tabWidget->setCurrentIndex(i);
  195. data_to_server = "1";
  196. break;
  197. }
  198. }
  199. }
  200. else if(command == EVAL_JS)//выполнить JavaScript на странице
  201. data_to_server = tab->runJavaScript(TaskList.at(1));
  202. else if(command == SET_PROXY){//установить подключение через прокси
  203. if(!Proxy::set(&TaskList))
  204. { error(BAD_PROXY_TYPE_OR_PARAMS, socket); return; }
  205. }
  206. else if(command == SET_USERAGENT)//установить UserAgent
  207. tab->page()->profile()->setHttpUserAgent(TaskList[1]);
  208. else if(command == SET_ACCEPT_HEADER)//Установить заголовок Accept
  209. tab->page()->profile()->setHttpAcceptLanguage(TaskList.at(1));
  210. else if(command == JS_ERROR_LOGGING)//Включить/выключить запись ошибок в JS
  211. tab->set_JS_capture(TaskList.at(1) == "1");
  212. else if(command == JS_LOG_LEVEL)//Установить уровень логирования
  213. tab->set_JS_capture_level(TaskList.at(1).toInt());
  214. else if(command == JS_ON_ERROR_ALERT)//Отображать ошибку в JS в отдельном окне
  215. tab->set_JS_on_error_alert(TaskList.at(1) == "1");
  216. else if(command == SET_WINDOW_SIZE){//установить собственные размеры окна
  217. QList<QString> list = TaskList[1].split(":");
  218. if(list.size() == 2)
  219. {
  220. int currentWidth = this->size().width();
  221. int currentHeight = this->size().height();
  222. int newWidth = list[0].toInt();
  223. int newHeight = list[1].toInt();
  224. if(newWidth < 0){
  225. if(currentWidth - newWidth < 0)
  226. newWidth = 120;
  227. else newWidth = currentWidth - newWidth;
  228. }
  229. if(newHeight < 0){
  230. if(currentHeight - newHeight < 0)
  231. newHeight = 200;
  232. else newHeight = currentHeight - newHeight;
  233. }
  234. resize(newWidth, newHeight);
  235. }
  236. else { error(BAD_COMMAND_PARAM_LIST, socket); return; }
  237. }
  238. else if(command == SET_POSITION){//установить положение окна
  239. QList<QString> list = TaskList[1].split(":");
  240. if(list.size() == 2) {
  241. int currentX = this->pos().x();
  242. int currentY = this->pos().y();
  243. int newX = list[0].toInt();
  244. int newY = list[1].toInt();
  245. if(newX < 0){
  246. if(currentX - newX < 0)//Вышли за границы экрана
  247. newX = 0;
  248. else newX = currentX - newX;//Двигаем окно левее
  249. }
  250. if(newY < 0){
  251. if(currentY - newY < 0)//Вышли за границы экрана
  252. newY = 0;
  253. else newY = currentY - newY;//Двигаем окно вверх
  254. }
  255. move(newX, newY);
  256. }
  257. else { error(BAD_COMMAND_PARAM_LIST, socket); return; }
  258. }
  259. else if(command == SET_HTML)//установить HTML страницу
  260. tab->setHtml(TaskList.at(1));
  261. else if(command == TOR)//установить подключение через TOR
  262. QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, "127.0.0.1", TaskList[1].toUInt()));
  263. else if(command == ELEMENT_CLICK_BY_ID)//Нажать на элемент страницы с указанным id
  264. tab->element_click_by_id(TaskList.at(1));
  265. else if(command == ELEMENT_CLICK_BY_CLASS)//Нажать на элемент страницы с указанным классом
  266. tab->element_clock_by_class(TaskList.at(1));
  267. else if(command == SET_CACHE_DIR)//Изменить директорию для кэша
  268. setCachePath(tab, TaskList.at(1));
  269. else if(command == SET_COOKIE_DIR)//Изменить директорию для куков
  270. setCookiePath(tab, TaskList.at(1));
  271. else if(command == SET_OWN_CACHE_DIR)//Изменить директорию для кэша вне папки miniPoster
  272. tab->page()->profile()->setCachePath(TaskList.at(1));
  273. else if(command == SET_OWN_COOKIE_DIR)//Изменить директорию для куков вне папки miniPoster
  274. tab->page()->profile()->setPersistentStoragePath(TaskList.at(1));
  275. else if(command == SET_COOKIES)//Установить куки полученные из файла
  276. data_to_server = QByteArray::number(tab->set_cookies(TaskList));
  277. else if(command == SET_COOKIES_FROM_STRING)//Установить куки полученные из строки
  278. data_to_server = QByteArray::number(tab->set_cookies(TaskList, true));
  279. else if(command == SAVE_COOKIES)//получить куки из браузера и сохранить по стандартному пути
  280. tab->saveCookies("", TaskList.at(1), false, true);
  281. else if(command == SAVE_COOKIES_TO_PATH)//получить куки из браузера и сохранить в определенный файл
  282. tab->saveCookies("", TaskList.at(1), false, false);
  283. else if(command == GET_COOKIE_VALUE_BY_NAME)//Получить значение куки по имени
  284. tab->get_cookie_value_by_name(data_to_server, TaskList);
  285. else if(command == GET_COOKIE_BY_DOMAIN)//Получить куки для домена
  286. tab->get_cookie_by_domain(data_to_server, TaskList);
  287. else if(command == IMAGES)//Включение/Выключение автозагрузки изображений
  288. tab->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, TaskList[1] != "0");
  289. else if(command == SET_WINDOW_TITLE)//Изменить заголовок окна
  290. setWindowTitle(TaskList.at(1));
  291. else if(command == SCROLL_Y)//Прокрутить страницу по вертикали на заданное расстояние
  292. data_to_server = tab->scroll_y(TaskList.at(1));
  293. else if(command == SCROLL_TO_Y)//Прокрутить страницу по вертикали до определенной высоты
  294. data_to_server = tab->scroll_to_y(TaskList.at(1));
  295. else if(command == SCROLL_X)//Прокрутить страницу по горизонтали на заданное расстояние
  296. data_to_server = tab->scroll_x(TaskList.at(1));
  297. else if(command == SCROLL_TO_X)//Прокрутить страницу по горизонтали до определенной длины
  298. data_to_server = tab->scroll_to_x(TaskList.at(1));
  299. else if(command == SET_URL){//Установить адрес сайта без перезагрузки страницы
  300. ui->url_line->setText(TaskList.at(1));
  301. }
  302. else {
  303. QPoint point = getPoint(&TaskList[1]);
  304. if(!performeMouseEmulation(tab, command, &point))
  305. { error(BAD_MOUSE_EMULATION, socket); return; }
  306. }
  307. }
  308. else if(TaskList.length() == 3){
  309. if(command == V2 || command == OPEN_URL){//загрузить страничку для решения reCAPTCHA2
  310. tab->load_v2reCAPTHCA(&TaskList[1], &TaskList[2]);
  311. if(ui->tabWidget->currentWidget() == tab){// показать ссылку откуда загружаем капчу и siteKey
  312. ui->url_line->setText(TaskList.at(1) + TaskList.at(2));
  313. }
  314. }
  315. else if(command == V3){//загрузить страничку для решения reCAPTCHA3, с action "homepage"
  316. tab->load_v3reCAPTHCA(TaskList);
  317. if(ui->tabWidget->currentWidget() == tab){// показать ссылку откуда загружаем капчу и siteKey
  318. ui->url_line->setText(TaskList.at(1) + TaskList.at(2));
  319. }
  320. }
  321. else if(command == HCAP){//загрузить страничку для решения hCaptcha
  322. tab->load_hcaptcha(TaskList);
  323. if(ui->tabWidget->currentWidget() == tab){// показать ссылку откуда загружаем капчу и siteKey
  324. ui->url_line->setText(TaskList.at(1) + TaskList.at(2));
  325. }
  326. }
  327. else if(command == SET_HTML)//установить HTML страницу
  328. tab->setHtml(TaskList.at(1), QUrl(TaskList.at(2)));
  329. else if(command == SAVE_COOKIES)//получить куки из браузера и сохранить по стандартному пути
  330. tab->saveCookies(TaskList.at(1), TaskList.at(2), false, true);
  331. else if(command == SAVE_COOKIES_TO_PATH)//получить куки из браузера и сохранить в определенный файл
  332. tab->saveCookies(TaskList.at(1), TaskList.at(2), false, false);
  333. else if(command == GET_DOMAIN_COOKIE_VALUE_BY_NAME)//Получить значение куки по имени на указанном домене
  334. tab->get_domain_cookie_value_by_name(data_to_server, TaskList);
  335. else if(command == ELEMENT_SET_VALUE_BY_ID)//Установить значение value у элемента страницы с указанным id
  336. tab->element_set_value_by_id(TaskList.at(1), TaskList.at(2));
  337. else if(command == ELEMENT_SET_VALUE_BY_CLASS)//Установить значение value у элемента страницы с указанным классом
  338. tab->element_set_value_by_class(TaskList.at(1), TaskList.at(2));
  339. else if(command == ELEMENT_SET_INNER_HTML_BY_ID)//Установить значение innerHTML у элемента страницы с указанным id
  340. tab->element_set_inner_html_by_id(TaskList.at(1), TaskList.at(2));
  341. else if(command == ELEMENT_SET_INNER_HTML_BY_CLASS)//Установить значение innerHTML у элемента страницы с указанным классом
  342. tab->element_set_inner_html_by_class(TaskList.at(1), TaskList.at(2));
  343. else if(command == MOUSE_EMULATION){//эмуляция мыши
  344. Commands secondCommand = getCommand(&(TaskList.at(1).toUpper().replace('_', "")));
  345. QPoint point = getPoint(&TaskList[2]);
  346. if(!performeMouseEmulation(tab, secondCommand, &point))
  347. { error(BAD_MOUSE_EMULATION, socket); return; }
  348. }
  349. else { error(BAD_COMMAND_NAME, socket); return; }
  350. }
  351. else if(TaskList.length() == 4){
  352. if(command == SAVE_COOKIES)//получить куки из браузера и сохранить по стандартному пути
  353. tab->saveCookies(TaskList[1], TaskList[2], TaskList[3] == "1", true);
  354. else if(command == SAVE_COOKIES_TO_PATH)//получить куки из браузера и сохранить в определенный файл
  355. tab->saveCookies(TaskList[1], TaskList[2], TaskList[3] == "1", false);
  356. else if(command == V3 || command == OPEN_URL){//загрузить страничку для решения reCAPTCHA3, с произвольным action
  357. tab->load_v3reCAPTHCA(TaskList);
  358. if(ui->tabWidget->currentWidget() == tab){// показать ссылку откуда загружаем капчу и siteKey
  359. ui->url_line->setText(TaskList.at(1) + TaskList.at(2));
  360. }
  361. }
  362. else if(command == SCREEN_SHOT)//сделать скриншот области
  363. tab->screen_shot(data_to_server, TaskList);
  364. else if(command == PIXEL_EXISTS)//проверить существует ли пиксель в заданной области
  365. tab->pixel_exists(data_to_server, TaskList);
  366. /*
  367. else if(command == CONTAINS_IMAGE){//проверить существует ли пиксель в заданной области
  368. QList<QString> listData = TaskList[1].split(":");
  369. listData.append(TaskList[2].split(":"));
  370. if(listData.size() < 4) return;
  371. tab->settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
  372. tab->page()->settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
  373. tab->profile()->settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
  374. int x = listData[0].toInt(), y = listData[1].toInt();
  375. QImage img = tab->grab(QRect(QPoint(x,y), QSize(listData[2].toInt() - x, listData[3].toInt() - y))).toImage();
  376. QImage image;
  377. int bestPercent = 0;
  378. int currentPercent = 0;
  379. for(int y = 0; y < img.height(); ++y)
  380. for(int x = 0; x < img.width(); ++x)
  381. if(img.pixel(x, y) == pixel.rgb())
  382. { }
  383. }*/
  384. else { error(BAD_COMMAND_NAME, socket); return; }
  385. }
  386. else { error(TOO_MUCH_PARAMS, socket); return; }
  387. /*else if(command == CAPMONSTER)//
  388. QList<QString> list = TaskList[1].split(":");
  389. if(list.size() == 2){
  390. QString cap_monster_key = list[0];
  391. QString cap_monster_ip = list[1];
  392. QNetworkAccessManager nam;
  393. QString data_sitekey = "123";
  394. QString page_url = ui->url_line->text();
  395. QNetworkRequest request(QUrl("http://" + cap_monster_ip + "/in.php"));
  396. QByteArray data;
  397. data += "/key=" + cap_monster_key + "&method=userrecaptcha&googlekey=" + data_sitekey + "&pageurl=" + page_url;
  398. nam.post(request, data);
  399. }
  400. }*/
  401. SendToServer(socket, &data_to_server);
  402. }
  403. QPoint MainWindow::getPoint(QString *str){
  404. QList<QString> xyList = str->split(":");
  405. if(xyList.size() < 2) return QPoint(0, 0);
  406. return QPoint(xyList[0].toInt(), xyList[1].toInt());
  407. }
  408. void MainWindow::scrollToClickPoint(QPoint *point)
  409. {
  410. //x
  411. //if(point)
  412. }
  413. bool MainWindow::performeMouseEmulation(Tab *tab, Commands command, QPoint *point){
  414. QWidget *eventsReciverWidget = nullptr;
  415. for(auto *o : tab->children()){
  416. QWidget *wgt = qobject_cast<QWidget*>(o);
  417. if (wgt) {
  418. eventsReciverWidget = wgt;
  419. break;
  420. }
  421. }
  422. if(!eventsReciverWidget) return false;
  423. if(command == L_BUTTON_CLICK){//клик левой кнопкой мыши
  424. // scrollToClickPoint(point);
  425. QMouseEvent event(QEvent::MouseButtonPress, *point, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
  426. QCoreApplication::sendEvent(eventsReciverWidget, &event);
  427. QMouseEvent event1(QEvent::MouseButtonRelease, *point, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
  428. QCoreApplication::sendEvent(eventsReciverWidget, &event1);
  429. }
  430. else if(command == R_BUTTON_CLICK){//клик правой кнопкой мыши
  431. scrollToClickPoint(point);
  432. QMouseEvent event(QEvent::MouseButtonPress, *point, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
  433. QCoreApplication::sendEvent(eventsReciverWidget, &event);
  434. QMouseEvent event1(QEvent::MouseButtonRelease, *point, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
  435. QCoreApplication::sendEvent(eventsReciverWidget, &event1);
  436. }
  437. else if(command == L_BUTTON_PRESS){//нажали левой кнопкой мыши
  438. scrollToClickPoint(point);
  439. QMouseEvent event(QEvent::MouseButtonPress, *point, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
  440. QCoreApplication::sendEvent(eventsReciverWidget, &event);
  441. }
  442. else if(command == L_BUTTON_RELEASE){//отпускаем левую кнопку мыши
  443. scrollToClickPoint(point);
  444. QMouseEvent event(QEvent::MouseButtonRelease, *point, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
  445. QCoreApplication::sendEvent(eventsReciverWidget, &event);
  446. }
  447. else if(command == MOUSE_MOVE){//эмуляция движения мышу в заданную точку
  448. // scrollToClickPoint(point);
  449. QMouseEvent event(QEvent::MouseMove, *point, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
  450. QCoreApplication::sendEvent(eventsReciverWidget, &event);
  451. }
  452. else return false;
  453. return true;
  454. }
  455. //int indext = 0;
  456. //void MainWindow::on_pushButton_3_clicked()
  457. //{
  458. //// tabFocus(indext++);
  459. // return;
  460. //// Tab *tab = getTabById();
  461. //// QMouseEvent event(QEvent::MouseButtonPress, point, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
  462. //// QCoreApplication::sendEvent(tab->page(), &event);
  463. //// QMouseEvent event1(QEvent::MouseButtonRelease, point, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
  464. //// QCoreApplication::sendEvent(tab->page(), &event1);
  465. //}