diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-21 04:05:55 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-21 04:05:55 +0300 |
commit | c8029a36924fdad89b2455746bfd771da723287f (patch) | |
tree | ecf981983d178176bd2e9619c7040c743c34d67d /client-qt | |
parent | c83c19a7d93ee77617c6e47bf0700346545b4611 (diff) |
client-qt:
correct network thread termination
downloads model skeleton
filters model skeleton
empty download info tabwindow
main window layout
initial server data requests (settings, modules, downloads)
protocol:
renamed most of ui_* messages to download_ui* as it more precise
reworked ui related proto part
added download related messages (should be sufficient for now)
some work on event subscription part
bit of work on module related messages
added more top level messages (most of defined messages may be used now)
Diffstat (limited to 'client-qt')
-rw-r--r-- | client-qt/udm-client-qt/client_session.cpp | 16 | ||||
-rw-r--r-- | client-qt/udm-client-qt/connect_widget.cpp | 3 | ||||
-rw-r--r-- | client-qt/udm-client-qt/downloads_model.cpp | 67 | ||||
-rw-r--r-- | client-qt/udm-client-qt/downloads_model.h | 47 | ||||
-rw-r--r-- | client-qt/udm-client-qt/filters_model.cpp | 62 | ||||
-rw-r--r-- | client-qt/udm-client-qt/filters_model.h | 45 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm-client-qt.pro | 8 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.cpp | 89 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.h | 12 |
9 files changed, 337 insertions, 12 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp index 45e93b9..9cb951c 100644 --- a/client-qt/udm-client-qt/client_session.cpp +++ b/client-qt/udm-client-qt/client_session.cpp @@ -26,7 +26,7 @@ #include <QMetaType> Q_DECLARE_METATYPE(server_msg); -int shit = qRegisterMetaType <server_msg> ("server_msg"); +int server_msg_metatype__useless_id = qRegisterMetaType <server_msg> ("server_msg"); std::shared_ptr<char*> pack_data(const std::string &buf, int *size_) { @@ -221,11 +221,11 @@ void client_session::handle_connect(const boost::system::error_code &e) { emit client_connected(true, QString::fromUtf8(e.message().c_str())); //TODO: something better ? - {// for now hust send auth request message + {// for now just send auth request message client_msg msg; msg.set_type(CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST); - msg.mutable_auth_info()->set_hash_type(PASSWD_HASH_TYPE::HASH_SHA512); - msg.mutable_auth_info()->set_password(password_sha512.data()); + msg.mutable_auth_request()->set_hash_type(PASSWD_HASH_TYPE::HASH_SHA512); + msg.mutable_auth_request()->set_password(password_sha512.data()); send_message(msg); } //listen for messages from server @@ -305,11 +305,11 @@ void client_session::handle_write(const boost::system::error_code& error) client_session::~client_session() { //TODO: correct thread termination, reimplement - io_service_.stop(); +// io_service_.stop(); delete socket_; - boost::asio::io_service *s = &io_service_; - delete s; - //emit terminate_thread(); +// boost::asio::io_service *s = &io_service_; +// delete s; + emit terminate_thread(); } /*boost::asio::io_service &client_session::io_service() diff --git a/client-qt/udm-client-qt/connect_widget.cpp b/client-qt/udm-client-qt/connect_widget.cpp index 2c35ea2..ee17b3c 100644 --- a/client-qt/udm-client-qt/connect_widget.cpp +++ b/client-qt/udm-client-qt/connect_widget.cpp @@ -33,8 +33,9 @@ connect_widget::connect_widget(QWidget *parent) : QWidget(parent) { edit_host = new QLineEdit(this), edit_port = new QLineEdit(this), edit_passwd = new QLineEdit(this); + edit_host->setText("127.0.0.1"); edit_port->setInputMask("D0000"); - edit_port->setText("1"); + edit_port->setText("6613"); edit_passwd->setEchoMode(QLineEdit::Password); lbl_host = new QLabel(tr("host") + ":", this); lbl_port = new QLabel(tr("port") + ":", this); diff --git a/client-qt/udm-client-qt/downloads_model.cpp b/client-qt/udm-client-qt/downloads_model.cpp new file mode 100644 index 0000000..2dadc0f --- /dev/null +++ b/client-qt/udm-client-qt/downloads_model.cpp @@ -0,0 +1,67 @@ +/* + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include "downloads_model.h" + +downloads_model::downloads_model(QObject *parent) +{ + +} + +int downloads_model::rowCount(const QModelIndex &parent) const +{ + return 0; +} + +QVariant downloads_model::data(const QModelIndex &index, int role) const +{ + if(!index.isValid()) + return QVariant(); +} + +QVariant downloads_model::headerData(int section, Qt::Orientation orientation, int role) const +{ + return QVariant(); +} + +int downloads_model::columnCount ( const QModelIndex & parent) const +{ + return 1; +} + +bool downloads_model::insertRows(int position, int rows, const QModelIndex &index) +{ + beginInsertRows(QModelIndex(), position, position+rows-1); + endInsertRows(); + return true; +} + +bool downloads_model::removeRows(int position, int rows, const QModelIndex &index) +{ + beginRemoveRows(QModelIndex(), position, position+rows-1); + endRemoveRows(); + return true; +} + +void downloads_model::sort ( int column, Qt::SortOrder order) +{ + +} diff --git a/client-qt/udm-client-qt/downloads_model.h b/client-qt/udm-client-qt/downloads_model.h new file mode 100644 index 0000000..5a27e90 --- /dev/null +++ b/client-qt/udm-client-qt/downloads_model.h @@ -0,0 +1,47 @@ +/* + 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 <http://www.gnu.org/licenses/>. + +*/ + + + +#ifndef DOWNLOADS_MODEL_H +#define DOWNLOADS_MODEL_H + +#include <QAbstractItemModel> + +class downloads_model : public QAbstractTableModel +{ + Q_OBJECT +public: + downloads_model(QObject *parent = 0); + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + int columnCount ( const QModelIndex & parent = QModelIndex() ) const; + bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); + void sort ( int column, Qt::SortOrder order = Qt::AscendingOrder ); + + +signals: + +public slots: +}; + +#endif // DOWNLOADS_MODEL_H diff --git a/client-qt/udm-client-qt/filters_model.cpp b/client-qt/udm-client-qt/filters_model.cpp new file mode 100644 index 0000000..d69a4be --- /dev/null +++ b/client-qt/udm-client-qt/filters_model.cpp @@ -0,0 +1,62 @@ +/* + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include "filters_model.h" + + + +filters_model::filters_model(QObject *parent) +{ + +} + +int filters_model::columnCount(const QModelIndex &parent) const +{ + return 1; +} + +QVariant filters_model::data(const QModelIndex& index, int role) const +{ + if (!index.isValid()) + return QVariant(); + if(role != Qt::DisplayRole) + return QVariant(); +} + +QModelIndex filters_model::index(int row, int column, const QModelIndex& parent) const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); +} + +QModelIndex filters_model::parent(const QModelIndex& index) const +{ + if (!index.isValid()) + return QModelIndex(); +} + +int filters_model::rowCount(const QModelIndex& parent) const +{ + if (parent.column() > 0) + return 0; + return 0; + +} diff --git a/client-qt/udm-client-qt/filters_model.h b/client-qt/udm-client-qt/filters_model.h new file mode 100644 index 0000000..e22abee --- /dev/null +++ b/client-qt/udm-client-qt/filters_model.h @@ -0,0 +1,45 @@ +/* + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef FILTERS_MODEL_H +#define FILTERS_MODEL_H + +#include <QAbstractItemModel> + +class filters_model : public QAbstractTableModel +{ + Q_OBJECT +public: + filters_model(QObject *parent = 0); + virtual int columnCount(const QModelIndex &parent=QModelIndex()) const; + virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + virtual QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex& index) const; + virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; + + +signals: + +public slots: +}; + +#endif // FILTERS_MODEL_H diff --git a/client-qt/udm-client-qt/udm-client-qt.pro b/client-qt/udm-client-qt/udm-client-qt.pro index 3a7be9a..d64ebe4 100644 --- a/client-qt/udm-client-qt/udm-client-qt.pro +++ b/client-qt/udm-client-qt/udm-client-qt.pro @@ -39,8 +39,12 @@ SOURCES += main.cpp\ udm_main.cpp \ client_session.cpp \ connect_widget.cpp \ - ../../protocol/udm.pb.cc + ../../protocol/udm.pb.cc \ + downloads_model.cpp \ + filters_model.cpp HEADERS += udm_main.h \ client_session.h \ - connect_widget.h + connect_widget.h \ + downloads_model.h \ + filters_model.h diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp index 0089a45..17744aa 100644 --- a/client-qt/udm-client-qt/udm_main.cpp +++ b/client-qt/udm-client-qt/udm_main.cpp @@ -25,14 +25,25 @@ #include <QMessageBox> #include <QStatusBar> #include <QLabel> +#include <QTableView> +#include <QTreeView> +#include <QTabWidget> +#include <QHeaderView> +#include <QSplitter> +#include <QStackedLayout> #include "connect_widget.h" #include "client_session.h" +#include "downloads_model.h" +#include "filters_model.h" udm_main::udm_main(QWidget *parent) : QMainWindow(parent) { + io_service_ = nullptr; + thread_client_session = nullptr; + //session = nullptr; 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())); @@ -41,10 +52,55 @@ udm_main::udm_main(QWidget *parent) lbl_state = new QLabel; lbl_state->setText(tr("State") + ": " + tr("Offline")); this->statusBar()->addPermanentWidget(lbl_state); + + tbl_downloads = new QTableView; + tbl_downloads->setShowGrid(false); + mdl_downloads = new downloads_model; + tbl_downloads->setModel(mdl_downloads); + tbl_downloads->setSelectionBehavior(QAbstractItemView::SelectRows); + tbl_downloads->setSortingEnabled(true); + tbl_downloads->horizontalHeader()->setHighlightSections(false); + tbl_downloads->horizontalHeader()->setMovable(true); + tbl_downloads->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); + tbl_downloads->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); + + tree_filters = new QTreeView; + mdl_filters = new filters_model; + tree_filters->setModel(mdl_filters); + tree_filters->header()->hide(); + tree_filters->setSelectionMode(QAbstractItemView::ExtendedSelection); + tree_filters->setSelectionBehavior(QAbstractItemView::SelectRows); + tree_filters->setIndentation(10); + + spl_hor = new QSplitter(Qt::Horizontal); + spl_hor->addWidget(tree_filters); + spl_hor->addWidget(tbl_downloads); + + spl_hor->setStretchFactor(0, 2); + spl_hor->setStretchFactor(1, 10); + + tabs_info = new QTabWidget; + + + + + spl_vert = new QSplitter(Qt::Vertical); + spl_vert->addWidget(spl_hor); + spl_vert->addWidget(tabs_info); + + spl_vert->setStretchFactor(0, 3); + spl_vert->setStretchFactor(1, 1); + setCentralWidget(spl_vert); + } udm_main::~udm_main() { + if(thread_client_session) + { + thread_client_session->quit(); + delete thread_client_session; + } //TODO: clear all remaining data } @@ -59,15 +115,30 @@ void udm_main::show_connect_widget() void udm_main::client_pre_connect_init() { + if(thread_client_session) + { + delete thread_client_session; + thread_client_session = nullptr; + } thread_client_session = new QThread(this); + if(io_service_) + { + delete io_service_; + io_service_ = nullptr; + } io_service_ = new boost::asio::io_service; +/* if(session) //crashing + { + delete session; + session = nullptr; + } */ 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())); + connect(session, SIGNAL(terminate_thread()), thread_client_session, SLOT(quit())); session->moveToThread(thread_client_session); thread_client_session->start(); } @@ -99,6 +170,22 @@ void udm_main::server_message_received(server_msg msg) auth_token = msg.auth_reply().auth_token().c_str(); //TODO: update client status lbl_state->setText(tr("State") + ": " + tr("Connected") + ", " + tr("Authenticated")); + //request modules and settings here + { + client_msg msg; + msg.set_type(CLIENT_MSG_TYPE::CLIENT_CORE_SETTINGS_REQUEST); + session->send_message(msg); + } + { + client_msg msg; + msg.set_type(CLIENT_MSG_TYPE::CLIENT_MODULES_REQUEST); + session->send_message(msg); + } + { + client_msg msg; + msg.set_type(CLIENT_MSG_TYPE::CLIENT_DOWNLOADS_LIST_REQUEST); + session->send_message(msg); + } } else { diff --git a/client-qt/udm-client-qt/udm_main.h b/client-qt/udm-client-qt/udm_main.h index 8861403..9d56822 100644 --- a/client-qt/udm-client-qt/udm_main.h +++ b/client-qt/udm-client-qt/udm_main.h @@ -29,6 +29,12 @@ class client_session; class QLabel; +class QTableView; +class QTreeView; +class QTabWidget; +class downloads_model; +class filters_model; +class QSplitter; namespace boost { namespace asio { @@ -63,6 +69,12 @@ private: boost::asio::io_service *io_service_; QString auth_token; QLabel *lbl_state; + QTableView *tbl_downloads; + QTreeView *tree_filters; + QTabWidget *tabs_info; + downloads_model *mdl_downloads; + filters_model *mdl_filters; + QSplitter *spl_hor, *spl_vert; }; #endif // UDM_MAIN_H |