]> Some of my projects - localmylist.git/commitdiff
MyList shouldn't just run everything in constructor. Give clients a chance to set...
authorAPTX <marek321@gmail.com>
Thu, 7 Jun 2012 00:50:51 +0000 (02:50 +0200)
committerAPTX <marek321@gmail.com>
Thu, 7 Jun 2012 00:50:51 +0000 (02:50 +0200)
localmylist/mylist.cpp
localmylist/mylist.h
management-gui/main.cpp
management-gui/mainwindow.cpp

index 17bedf5ba3712ebad45040a51f1645bb27b7849f..217a5a076b006607374f13a0eab665042c80c575 100644 (file)
@@ -1,7 +1,6 @@
 #include "mylist.h"
 
 #include <QMetaType>
-#include <QSettings>
 #include <QCoreApplication>
 
 #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>("AbstractTaskPtr");
        qRegisterMetaType<QFileInfo>("QFileInfo");
index 3cb32b62784922cf8cb0be0bc83e0c49d2bde1bf..0efa42e149a9c40c9983792d2d536166882856c7 100644 (file)
@@ -10,6 +10,7 @@
 #include <QDir>
 #include <QFileInfo>
 #include <QDateTime>
+#include <QSettings>
 
 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;
index 24a397b20df4b8d4bbf2511e1cc0eecb3c052670..26178a3873b8e11b1585287605287927df8f3a0b 100644 (file)
@@ -6,6 +6,6 @@ int main(int argc, char *argv[])
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
-       
+
        return a.exec();
 }
index 9537b1c000c9b4c11bb862a607401c3c768dffd4..1430309bee698f1c0ba935b71f71c1f4551a9b03 100644 (file)
@@ -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);