/* Copyright © 2015 Gluzskiy Alexandr (sss) This file is part of Unknown Download Manager (UDM). UDM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. UDM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UDM. If not, see . */ #include "udm_main.h" #include #include #include #include #include #include "connect_widget.h" #include "client_session.h" udm_main::udm_main(QWidget *parent) : QMainWindow(parent) { auto menu_main = this->menuBar()->addMenu(tr("Main")); auto action_connect = menu_main->addAction(tr("Connect")); connect(action_connect, SIGNAL(triggered()), this, SLOT(show_connect_widget())); auto action_exit = menu_main->addAction(tr("Exit")); connect(action_exit, SIGNAL(triggered(bool)), this, SLOT(close())); //TODO: something better lbl_state = new QLabel; lbl_state->setText(tr("State") + ": " + tr("Offline")); this->statusBar()->addPermanentWidget(lbl_state); } udm_main::~udm_main() { //TODO: clear all remaining data } void udm_main::show_connect_widget() { connect_widget *w = new connect_widget; connect(w, SIGNAL(client_connect(QString&,QString&,int)), this, SLOT(client_connect(QString&,QString&,int))); //TODO: make connection to other slots related to connection //TODO: destroy widget on close w->show(); } void udm_main::client_pre_connect_init() { thread_client_session = new QThread(this); io_service_ = new boost::asio::io_service; session = new client_session(0, io_service_); //parent must be 0 here connect(session, SIGNAL(server_message_received(server_msg)), this, SLOT(server_message_received(server_msg))); connect(session, SIGNAL(client_connected(bool,QString)), this, SLOT(client_connected(bool,QString))); } void udm_main::client_connect_finalize() { //connect(session, SIGNAL(terminate_thread()), thread_client_session, SLOT(terminate())); session->moveToThread(thread_client_session); thread_client_session->start(); } void udm_main::client_connect(QString &host, QString &password, int port) { client_pre_connect_init(); connect(this, SIGNAL(connect_signal(QString,QString,int)), session, SLOT(client_connect(QString,QString,int))); client_connect_finalize(); emit connect_signal(host, password, port); } void udm_main::client_connect_ssl(QString &host, QString &password, int port, QString &ssl_ca, QString &ssl_crt, QString &ssl_key) { client_pre_connect_init(); connect(this, SIGNAL(connect_signal(QString,QString,int,QString,QString)), session, SLOT(client_connect(QString,QString,int,QString,QString))); client_connect_finalize(); emit connect_signal_ssl(host, password, port, ssl_ca, ssl_crt, ssl_key); } void udm_main::server_message_received(server_msg msg) { switch(msg.type()) { case SERVER_MSG_TYPE::SERVER_AUTH_REPLY: { if(msg.auth_reply().status()) { auth_token = msg.auth_reply().auth_token().c_str(); //TODO: update client status lbl_state->setText(tr("State") + ": " + tr("Connected") + ", " + tr("Authenticated")); } else { QMessageBox msg_box; msg_box.setText(tr("Authentication failed with error:") + "\n" + msg.auth_reply().error_description().c_str()); msg_box.exec(); lbl_state->setText(tr("State") + ": " + tr("auth error")); } } break; default: break; } } void udm_main::client_connected(bool success, QString error_text) { if(!success) { QMessageBox msg; msg.setText(tr("client connection error with error:") + error_text); msg.exec(); lbl_state->setText(tr("State") + ": " + tr("Connection error")); } else { lbl_state->setText(tr("State") + ": " + tr("Connected")); } /* QMessageBox msg; msg.setText(success?"client connected with message:":"client connection error with error:" + error_text); msg.exec(); */ }