Guest User

mainwindow.cpp

a guest
Aug 7th, 2015
16
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. MainWindow::MainWindow(QWidget *parent) :
  5.     QMainWindow(parent),
  6.     ui(new Ui::MainWindow)
  7. {
  8.  
  9.     ui->setupUi(this);
  10.     this -> setTrayIconActions();
  11.     this -> showTrayIcon();
  12.     file_settings = new QSettings("Settings.ini",QSettings::IniFormat);
  13.     QPixmap image;
  14.     image.load(":/imgages/logo.jpg");
  15.     ui->lbl_image->setPixmap(image);
  16.     //ui->phone_edit->hide();
  17.     //ui->request_btn->hide();
  18.  
  19.     // реквест ссылки на пользователя
  20.     connect(ui->request_btn,SIGNAL(clicked()),this, SLOT(req()));
  21.  
  22.     connect(trayIcon, SIGNAL(messageClicked()), this, SLOT(showLink()));
  23.  
  24.     connect(ui->button_setings, SIGNAL(clicked()), this, SLOT(settings()));
  25.  
  26.     connect(ui->btn_link, SIGNAL(clicked()), this, SLOT(link_button_click()));
  27.  
  28.     sock = new QTcpSocket();
  29.  
  30.  
  31.  
  32.     connect(ui->btn_connect, SIGNAL(clicked()), this, SLOT(connect_Sock()));
  33.     connect(ui->btn_disconnect, SIGNAL(clicked()), this, SLOT(disconnect_Sock()));
  34.     connect(ui->btn_login, SIGNAL(clicked()), this, SLOT(login()));
  35.     connect(sock, SIGNAL(readyRead()), this, SLOT(read_Data()));
  36.  
  37.  
  38. }
  39.  
  40. MainWindow::~MainWindow()
  41. {
  42.     delete ui;
  43. }
  44.  
  45. // Показать иконку в трее
  46. void MainWindow::showTrayIcon()
  47. {
  48.     //Создаем экземпляр класса и задаем свойства
  49.     trayIcon = new QSystemTrayIcon(this);
  50.     QIcon trayImage(":/imgages/Abills.png");
  51.     trayIcon->setIcon(trayImage);
  52.     trayIcon->setContextMenu(trayIconMenu);
  53.  
  54.     // Подключаем обработчик клика по иконке...
  55.     connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason)));
  56.  
  57.     // Выводим значок...
  58.     trayIcon -> show();
  59. }
  60.  
  61. // Восстановление окна
  62. void MainWindow::trayActionExecute()
  63. {
  64.     this->showNormal();
  65.     this->focusPolicy();
  66. }
  67.  
  68. // Активация окна
  69. void MainWindow::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
  70. {
  71.     switch (reason)
  72.     {
  73.  
  74.         case QSystemTrayIcon::DoubleClick:
  75.         case QSystemTrayIcon::Trigger:
  76.             this -> showNormal();
  77.             break;
  78.         default:
  79.             break;
  80.     }
  81. }
  82.  
  83. // Действия для иконки в трее
  84. void MainWindow::setTrayIconActions()
  85. {
  86.     // Setting actions...
  87.     minimizeAction = new QAction("Свернуть", this);
  88.     restoreAction = new QAction("Восстановить", this);
  89.     quitAction = new QAction("Выход", this);
  90.  
  91.     // Connecting actions to slots...
  92.     connect (minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
  93.     connect (restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
  94.     connect (quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
  95.  
  96.     // Setting system tray's icon menu...
  97.     trayIconMenu = new QMenu(this);
  98.     trayIconMenu -> addAction (minimizeAction);
  99.     trayIconMenu -> addAction (restoreAction);
  100.     trayIconMenu -> addAction (quitAction);
  101. }
  102.  
  103. // Минимизирование окна
  104. void MainWindow::changeEvent(QEvent *event)
  105. {
  106.     QMainWindow::changeEvent(event);
  107.     if (event -> type() == QEvent::WindowStateChange)
  108.     {
  109.         if (isMinimized())
  110.         {
  111.             this -> hide();
  112.         }
  113.     }
  114. }
  115.  
  116.  
  117. // Отправка реквеста к серверу
  118. void MainWindow::req()
  119. {
  120.     Settings setti;
  121.     QString txt = ui->phone_edit->text();
  122.  
  123.     if(setti.get_type_connect() == "1")
  124.     {
  125.         abills = "https://"+ setti.get_login_abills() +":" + setti.get_password_abills()+ "@" + setti.get_ip() + ":9443/admin/index.cgi?qindex=7&search_form=1&search=1&type=11&header=1&xml=1&PHONE=";
  126.         abills+=txt;
  127.         url_req = abills;
  128.         ui->browser_dbg->append(url_req.toString());
  129.  
  130.     }else
  131.     {
  132.         abills = "https://"+ setti.get_ip() + ":9443/admin/index.cgi?qindex=7&user=" + setti.get_login_abills() + "&passwd=" + setti.get_password_abills() + "&search_form=1&search=1&type=11&header=1&xml=1&PHONE=";
  133.         abills+=txt;
  134.         url_req = abills;
  135.         ui->browser_dbg->append(url_req.toString());
  136.  
  137.     }
  138.  
  139.     manager = new QNetworkAccessManager(this);
  140.     reply = manager->get(QNetworkRequest(url_req));
  141.     reply->ignoreSslErrors();
  142.     connect(reply, SIGNAL(finished()),this, SLOT(getXML()));
  143. }
  144.  
  145. // Парсинг XML и заполнение данными
  146. void MainWindow::getXML()
  147. {
  148.     qDebug() << "bytes available in reply - " << reply->bytesAvailable();
  149.     data = reply->read(reply->bytesAvailable());
  150.     qDebug() << "length of data - " << data.length();
  151.     xml.addData(data);
  152.     while(!xml.atEnd())
  153.     {
  154.         xml.readNext();
  155.         ui->edit_phone->setText(ui->phone_edit->text());
  156.         if (xml.name() == "FIO")
  157.         {
  158.             QString test;
  159.             test = xml.readElementText();
  160.             if(!test.isEmpty())
  161.             {
  162.                 fio = test;
  163.  
  164.  
  165.                 //trayIcon->showMessage("USER", fio);
  166.                 log_string = QDate::currentDate().toString(Qt::ISODate);
  167.                 log_string.append(" - " + QTime::currentTime().toString());
  168.  
  169.                 ui->edit_fullname->setText(fio);
  170.             }
  171.  
  172.         }
  173.  
  174.         if (xml.name() == "UID")
  175.         {
  176.             QString test;
  177.             test = xml.readElementText();
  178.             if(!test.isEmpty())
  179.             {
  180.                 uid = test;
  181.             }
  182.         }
  183.  
  184.         if (xml.name() == "ADDRESS_DISTRICT")
  185.         {
  186.             QString test;
  187.             test = xml.readElementText();
  188.             if(!test.isEmpty())
  189.             {
  190.                 district = test;
  191.                 ui->edit_district->setText(district);
  192.             }
  193.         }
  194.  
  195.         if (xml.name() == "ADDRESS_STREET")
  196.         {
  197.             QString test;
  198.             test = xml.readElementText();
  199.             if(!test.isEmpty())
  200.             {
  201.                 street = test;
  202.                 ui->edit_street->setText(street);
  203.             }
  204.         }
  205.  
  206.         if (xml.name() == "ADDRESS_BUILD")
  207.         {
  208.             QString test;
  209.             test = xml.readElementText();
  210.             if(!test.isEmpty())
  211.             {
  212.                 build = test;
  213.                 ui->edit_build->setText(build);
  214.             }
  215.  
  216.         }
  217.  
  218.         if (xml.name() == "TP_NAME")
  219.         {
  220.             QString tp = xml.readElementText();
  221.             ui->edit_tp->setText(tp);
  222.         }
  223.  
  224.         if (xml.name() == "G_NAME")
  225.         {
  226.             QString group = xml.readElementText();
  227.             ui->edit_group->setText(group);
  228.         }
  229.  
  230.         if (xml.name() == "DEPOSIT")
  231.         {
  232.             QString test;
  233.             test = xml.readElementText();
  234.             if(!test.isEmpty())
  235.             {
  236.                 deposit = test;
  237.                 ui->edit_deposit->setText(deposit);
  238.             }
  239.         }
  240.  
  241.         if (xml.name() == "CREDIT")
  242.         {
  243.             QString test;
  244.             test = xml.readElementText();
  245.             if(!test.isEmpty())
  246.             {
  247.                 credit = test;
  248.                 ui->edit_credit->setText(credit);
  249.             }
  250.         }
  251.     }
  252.     msg_show.append(fio + "\n");
  253.     msg_show.append("Баланс: " + deposit + "\n");
  254.     msg_show.append("UID = " + uid);
  255.     trayIcon->showMessage("Звонок", msg_show);
  256.     msg_show.clear();
  257.  
  258.     xml.clear();
  259.     reply->deleteLater();
  260. }
  261.  
  262. // Открытие абонента в браузере(сообщение в трее)
  263. void MainWindow::showLink()
  264. {
  265.  
  266.     Settings setti;
  267.     QDesktopServices open;
  268.     if(setti.get_type_connect() == "1")
  269.     {
  270.         QString link = "https://"+ setti.get_login_abills() +":" + setti.get_password_abills()+ "@" + setti.get_ip() + ":9443/admin/index.cgi?&index=15&UID=";
  271.         link+=uid;
  272.         open.openUrl(QUrl(link));
  273.  
  274.  
  275.     }else
  276.     {
  277.         QString link = "https://"+ setti.get_ip() + ":9443/admin/index.cgi?user=" + setti.get_login_abills() + "&passwd=" + setti.get_password_abills() + "&index=15&UID=";
  278.         link += uid;
  279.         open.openUrl(QUrl(link));
  280.  
  281.     }
  282.  
  283.  
  284. }
  285.  
  286. // Окно настроек, обьект
  287. void MainWindow::settings()
  288. {
  289.     Settings *setings = new Settings;
  290.     setings->exec();
  291.  
  292. }
  293.  
  294. // Подключение к сокету
  295. void MainWindow::connect_Sock()
  296. {
  297.  
  298.     Settings sett;
  299.  
  300.     //ui->browser_dbg->clear();
  301.     sock->connectToHost(sett.get_ip(), 5039);
  302.     qDebug() << "ip для сокета" << sett.get_ip();
  303.  
  304.     if(!sock->waitForConnected(3000))
  305.         ui->statusBar->showMessage(sock->errorString());
  306.     else
  307.     {
  308.         ui->statusBar->showMessage("Подключение открыто к " + sett.get_ip() + ", попробуй залогиниться");
  309.         ui->btn_connect->setDisabled(true);
  310.         ui->btn_disconnect->setEnabled(true);
  311.         qDebug() << "connect to sock";
  312.     }
  313.  
  314. }
  315.  
  316. // Отключение от сокета
  317. void MainWindow::disconnect_Sock()
  318. {
  319.     ui->btn_disconnect->setDisabled(true);
  320.     //ui->browser_dbg->clear();
  321.     sock->write("Action: Logoff\n");
  322.     sock->write("\n");
  323.  
  324.     sock->disconnect();
  325.     ui->browser_dbg->append("Socket disconnected!");
  326.     ui->statusBar->showMessage("Подключение закрыто");
  327.     ui->btn_connect->setEnabled(true);
  328. }
  329.  
  330. // Открытие абонента в браузере(кнопка)
  331. void MainWindow::link_button_click()
  332. {
  333.     Settings setti;
  334.     QDesktopServices open;
  335.     if(setti.get_type_connect() == "1")
  336.     {
  337.         QString link = "https://"+ setti.get_login_abills() +":" + setti.get_password_abills()+ "@" + setti.get_ip() + ":9443/admin/index.cgi?&index=15&UID=";
  338.         link+=uid;
  339.         open.openUrl(QUrl(link));
  340.  
  341.     }else
  342.     {
  343.         QString link = "https://"+ setti.get_ip() + ":9443/admin/index.cgi?user=" + setti.get_login_abills() + "&passwd=" + setti.get_password_abills() + "&index=15&UID=";
  344.         link += uid;
  345.         open.openUrl(QUrl(link));
  346.  
  347.     }
  348. }
  349.  
  350. // Логин до Астериска
  351. void MainWindow::login()
  352. {
  353.  
  354.     //ui->browser_dbg->clear();
  355.     Settings sett;
  356.     sock->write("Action: Login\n");
  357.     sock->write("Username: ");
  358.     sock->write(sett.get_login_asterisk());
  359.     sock->write("\n");
  360.     sock->write("Secret:");
  361.     sock->write(sett.get_password_asterisk());
  362.     sock->write("\n");
  363.     sock->write("\n");
  364.  
  365.  
  366. }
  367.  
  368. // Читаем данные с астериск менеджера
  369. void MainWindow::read_Data()
  370. {
  371.  
  372.     //ui->browser_dbg->append("NEW DATA");
  373.     QByteArray data_sock;
  374.     data_sock.clear();
  375.     data_str.clear();
  376.  
  377.     qDebug() << "bytes available in sock - " << sock->bytesAvailable();
  378.  
  379.     qDebug() << data_sock.append(sock->read(sock->bytesAvailable()));
  380.  
  381.     qDebug() << "lenth of data_sock - " << data_sock.size();
  382.     data_str.append(data_sock);
  383.     qDebug() << "length of data_str - " << data_str.size();
  384.     ui->browser_dbg->append(data_str);
  385.  
  386.     if(data_str.contains("Message: Authentication accepted"))
  387.     {
  388.         ui->statusBar->showMessage("Авторизировано");
  389.         qDebug() << "login accepted";
  390.     }
  391.     if(data_str.contains("Event: Newstate"))
  392.     {
  393.         ui->browser_dbg->append("_______________________");
  394.         QRegularExpression regexp("CallerIDNum.*", QRegularExpression::MultilineOption);
  395.         QRegularExpressionMatch match = regexp.match(data_str);
  396.         if(match.hasMatch())
  397.         {
  398.             QString number = match.captured();
  399.  
  400.             ui->browser_dbg->append("!" + number);
  401.  
  402.             QRegularExpression regexp1("\\d.*");
  403.             QRegularExpressionMatch match1 = regexp1.match(number);
  404.             if(match1.hasMatch())
  405.             {
  406.                 QString last = match1.captured();
  407.                 last = last.remove(last.size()-1,1);
  408.                 ui->browser_dbg->append("PHONE = " + last);
  409.                 ui->phone_edit->setText(last);
  410.                 ui->request_btn->click();
  411.              }
  412.         }
  413.     }
  414.  
  415.     if(data_str.contains("Event: SoftHangupRequest"))
  416.     {
  417.         Settings setti;
  418.  
  419.         log_string.append(" - " + QTime::currentTime().toString() + " - " + fio + " - Обработано.");
  420.  
  421.         QString link = "https://"+ setti.get_ip() + ":9443/admin/index.cgi?index\=15&user=" + setti.get_login_abills() + "&passwd=" + setti.get_password_abills() + "&UID=";
  422.         link += uid;
  423.         ui->textBrowser->setOpenExternalLinks(true);
  424.  
  425.  
  426.         log_string.append("<a href=\"" + link + "\">" + uid + "</a>");
  427.  
  428.  
  429.  
  430.         QFile log_file("log.txt");
  431.         QTextStream out(&log_file);
  432.  
  433.         if(log_file.open(QIODevice::Append))
  434.         {
  435.             out << log_string << "\n\n";
  436.             log_file.close();
  437.         }
  438.         else
  439.         {
  440.             QMessageBox box;
  441.             box.setText("ERROR FILE NOT OPEN");
  442.             box.show();
  443.         }
  444.  
  445.         ui->textBrowser->append(log_string + "\n\n");
  446.  
  447.         log_string.clear();
  448.         ui->edit_build->clear();
  449.         ui->edit_credit->clear();
  450.         ui->edit_deposit->clear();
  451.         ui->edit_district->clear();
  452.         ui->edit_flat->clear();
  453.         ui->edit_fullname->clear();
  454.         ui->edit_group->clear();
  455.         ui->edit_phone->clear();
  456.         ui->edit_street->clear();
  457.         ui->edit_tp->clear();
  458.  
  459.     }
  460.  
  461. }
RAW Paste Data