DBManager::DBManager(QObject *parent) : QObject(parent) , m_maxTabId(0) { qRegisterMetaType<QList<Tab> >("QList<Tab>"); qRegisterMetaType<QList<Link> >("QList<Link>"); qRegisterMetaType<Tab>("Tab"); worker = new DBWorker(); worker->moveToThread(&workerThread); connect(&workerThread, SIGNAL(finished()), worker, SLOT(deleteLater())); connect(worker, SIGNAL(tabsAvailable(QList<Tab>)), this, SLOT(tabListAvailable(QList<Tab>))); connect(worker, SIGNAL(historyAvailable(QList<Link>)), this, SIGNAL(historyAvailable(QList<Link>))); connect(worker, SIGNAL(tabHistoryAvailable(int,QList<Link>)), this, SIGNAL(tabHistoryAvailable(int,QList<Link>))); connect(worker, SIGNAL(tabChanged(Tab)), this, SIGNAL(tabChanged(Tab))); connect(worker, SIGNAL(tabAvailable(Tab)), this, SIGNAL(tabAvailable(Tab))); connect(worker, SIGNAL(titleChanged(QString,QString)), this, SIGNAL(titleChanged(QString,QString))); connect(worker, SIGNAL(thumbPathChanged(QString,QString,int)), this, SIGNAL(thumbPathChanged(QString,QString,int))); workerThread.start(); QMetaObject::invokeMethod(worker, "init", Qt::BlockingQueuedConnection); QMetaObject::invokeMethod(worker, "getMaxTabId", Qt::BlockingQueuedConnection, Q_RETURN_ARG(int, m_maxTabId)); QMetaObject::invokeMethod(worker, "getSettings", Qt::BlockingQueuedConnection, Q_RETURN_ARG(SettingsMap, m_settings)); }
void DBWorker::getHistory(const QString &filter) { QString filterQuery; if (filter != "") { filterQuery = QString("WHERE (link.url LIKE '%%1%' OR link.title LIKE '%%1%') ").arg(filter); } QString queryString = QString("SELECT history.link_id, link.url, link.thumb_path, link.title " "FROM history INNER JOIN link " "ON history.link_id = link.link_id " "%1" "ORDER BY history.date DESC;").arg(filterQuery); QSqlQuery query = prepare(queryString.toLatin1().constData()); if (!execute(query)) { return; } QList<Link> linkList; while (query.next()) { Link url(query.value(0).toInt(), query.value(1).toString(), query.value(2).toString(), query.value(3).toString()); linkList.append(url); } emit historyAvailable(linkList); }
void DBWorker::clearHistory() { QSqlQuery query = prepare("DELETE FROM browser_history;"); execute(query); removeAllTabs(); query = prepare("DELETE FROM link;"); execute(query); QList<Link> linkList; emit historyAvailable(linkList); }
void Pastebin::onHistoryFinished() { QNetworkReply *networkReply = qobject_cast<QNetworkReply *>(sender()); QList<PasteListing> *pasteList = new QList<PasteListing>(); if(processPasteListResponse(networkReply, pasteList)) { emit historyAvailable(pasteList); } else { delete pasteList; emit historyError(); } }
void DBWorker::clearHistory() { int oldTabCount = tabCount(); QSqlQuery query = prepare("DELETE FROM browser_history;"); execute(query); removeAllTabs(); query = prepare("DELETE FROM link;"); execute(query); QList<Link> linkList; emit historyAvailable(linkList); if (oldTabCount != 0) { QList<Tab> tabList; emit tabsAvailable(tabList); } }
void DBWorker::getHistory(const QString &filter) { // Skip empty titles always QString filterQuery("WHERE (NULLIF(title, '') IS NOT NULL AND url NOT LIKE 'about:%' AND %1) "); QString order; if (!filter.isEmpty()) { filterQuery = filterQuery.arg(QString("(url LIKE :search OR title LIKE :search)")); order = QString("visited_count DESC, date ASC, LENGTH(url), title"); } else { filterQuery = filterQuery.arg(1); order = QString("date DESC"); } QString queryString = QString("SELECT DISTINCT id, url, title " "FROM browser_history " "%1" "ORDER BY %2 LIMIT 20;").arg(filterQuery).arg(order); QSqlQuery query = prepare(queryString); if (!filter.isEmpty()) { query.bindValue(QString(":search"), QString("%%1%").arg(filter)); } if (!execute(query)) { return; } QList<Link> linkList; while (query.next()) { Link link(query.value(0).toInt(), query.value(1).toString(), "", query.value(2).toString()); #if DEBUG_LOGS qDebug() << &link; #endif linkList.append(link); } emit historyAvailable(linkList); }