From 80278d9d4ace11baaf5c7166042108c216475c91 Mon Sep 17 00:00:00 2001 From: APTX Date: Thu, 7 Jun 2012 02:50:51 +0200 Subject: [PATCH] MyList shouldn't just run everything in constructor. Give clients a chance to set some settings. --- localmylist/mylist.cpp | 47 +++++++++++++++++++++++++---------- localmylist/mylist.h | 5 ++++ management-gui/main.cpp | 2 +- management-gui/mainwindow.cpp | 8 ++++-- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/localmylist/mylist.cpp b/localmylist/mylist.cpp index 17bedf5..217a5a0 100644 --- a/localmylist/mylist.cpp +++ b/localmylist/mylist.cpp @@ -1,7 +1,6 @@ #include "mylist.h" #include -#include #include #include "database.h" @@ -19,26 +18,19 @@ namespace LocalMyList { MyList::MyList() { init(); - loadLocalSettings(); - saveLocalSettings(); m_requestHandler = 0; + workThread = 0; db = new Database("main"); - db->setConnectionSettings(dbs); - db->connect(); m_settings = new Settings(db, this); - workThread = new WorkThread("workThread", dbs, this); - workThread->start(); - - setupUdpClient(); - setupRequestHandler(); } MyList::~MyList() { delete db; - delete workThread; + if (workThread) + delete workThread; } QString MyList::hostName() const @@ -88,6 +80,9 @@ void MyList::markWatched(int fid, QDateTime when) void MyList::setupUdpClient() { + if (!db->isConnected()) + return; + using namespace ::AniDBUdpClient; Client::instance()->setHost(m_settings->get("udpClientHost").toString()); Client::instance()->setHostPort(m_settings->get("udpClientHostPort").toUInt()); @@ -108,9 +103,16 @@ void MyList::setupRequestHandler() connect(db, SIGNAL(newPendingMyListUpdate()), m_requestHandler, SLOT(handleMyListUpdates())); } -void MyList::loadLocalSettings() +void MyList::setupWorkThread() +{ + if (workThread) + return; + workThread = new WorkThread("workThread", dbs, this); + workThread->start(); +} + +void MyList::loadLocalSettings(QSettings &s) { - QSettings s(QSettings::IniFormat, QSettings::UserScope, organizationName, libraryName); s.beginGroup("general"); hostInfo.name = s.value("hostName", QHostInfo::localHostName().toLower()).toString(); s.endGroup(); @@ -121,6 +123,14 @@ void MyList::loadLocalSettings() dbs.pass = s.value("pass", "localmylist").toString(); dbs.database = s.value("database", "localmylist").toString(); s.endGroup(); + + db->setConnectionSettings(dbs); +} + +void MyList::loadLocalSettings() +{ + QSettings s(QSettings::IniFormat, QSettings::UserScope, organizationName, libraryName); + loadLocalSettings(s); } void MyList::saveLocalSettings() @@ -174,6 +184,7 @@ void MyList::executeTask(AbstractTask *task) { if (task->canUseThreads()) { + setupWorkThread(); task->setDatabase(workThread->database()); task->moveToThread(workThread); } @@ -208,11 +219,21 @@ MyList *MyList::instance() return m_instance; } +void MyList::destroy() +{ + if (!m_instance) + return; + delete m_instance; + m_instance = 0; +} + void MyList::init() { static bool init = false; if (init) return; + qAddPostRoutine(MyList::destroy); + if (!REGISTER_QT_TYPES) return; // qRegisterMetaType("AbstractTaskPtr"); qRegisterMetaType("QFileInfo"); diff --git a/localmylist/mylist.h b/localmylist/mylist.h index 3cb32b6..0efa42e 100644 --- a/localmylist/mylist.h +++ b/localmylist/mylist.h @@ -10,6 +10,7 @@ #include #include #include +#include namespace LocalMyList { @@ -46,7 +47,9 @@ public slots: void setupUdpClient(); void setupRequestHandler(); + void setupWorkThread(); + void loadLocalSettings(QSettings &settings); void loadLocalSettings(); void saveLocalSettings(); @@ -70,6 +73,8 @@ private: public: static MyList *instance(); + static void destroy(); + static bool REGISTER_QT_TYPES; static const char *organizationName; diff --git a/management-gui/main.cpp b/management-gui/main.cpp index 24a397b..26178a3 100644 --- a/management-gui/main.cpp +++ b/management-gui/main.cpp @@ -6,6 +6,6 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); MainWindow w; w.show(); - + return a.exec(); } diff --git a/management-gui/mainwindow.cpp b/management-gui/mainwindow.cpp index 9537b1c..1430309 100644 --- a/management-gui/mainwindow.cpp +++ b/management-gui/mainwindow.cpp @@ -20,13 +20,17 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { ui->setupUi(this); + QString startLabel = MyList::instance()->database()->isConnected() ? "Connected" : "Disconnected"; + databaseConnectionStatusIndicator = new QLabel(startLabel, this); + ui->statusBar->addPermanentWidget(databaseConnectionStatusIndicator); connect(MyList::instance()->database(), SIGNAL(connected()), this, SLOT(dbConnected())); connect(MyList::instance()->database(), SIGNAL(disconnected()), this, SLOT(dbDisconnected())); connect(MyList::instance()->database(), SIGNAL(newPendingRequest()), this, SLOT(handleNotification())); - databaseConnectionStatusIndicator = new QLabel(MyList::instance()->database()->isConnected() ? "Connected" : "Disconnected"); - ui->statusBar->addPermanentWidget(databaseConnectionStatusIndicator); + MyList::instance()->loadLocalSettings(); + MyList::instance()->saveLocalSettings(); + MyList::instance()->database()->connect(); animeModel = new MyListModel(this); ui->myListView->setModel(animeModel); -- 2.52.0