#include "mylist.h"
#include <QMetaType>
-#include <QSettings>
#include <QCoreApplication>
#include "database.h"
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
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());
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();
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()
{
if (task->canUseThreads())
{
+ setupWorkThread();
task->setDatabase(workThread->database());
task->moveToThread(workThread);
}
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");
#include <QDir>
#include <QFileInfo>
#include <QDateTime>
+#include <QSettings>
namespace LocalMyList {
void setupUdpClient();
void setupRequestHandler();
+ void setupWorkThread();
+ void loadLocalSettings(QSettings &settings);
void loadLocalSettings();
void saveLocalSettings();
public:
static MyList *instance();
+ static void destroy();
+
static bool REGISTER_QT_TYPES;
static const char *organizationName;
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);