DeclarativeTabModel::DeclarativeTabModel(QObject *parent) : QAbstractListModel(parent) , m_loaded(false) , m_browsing(false) , m_nextTabId(DBManager::instance()->getMaxTabId() + 1) , m_backForwardNavigation(false) { connect(DBManager::instance(), SIGNAL(tabsAvailable(QList<Tab>)), this, SLOT(tabsAvailable(QList<Tab>))); connect(DBManager::instance(), SIGNAL(tabChanged(Tab)), this, SLOT(tabChanged(Tab))); }
DeclarativeTabModel::DeclarativeTabModel(QObject *parent) : QAbstractListModel(parent) , m_loaded(false) , m_browsing(false) , m_nextTabId(DBManager::instance()->getMaxTabId() + 1) { connect(DBManager::instance(), SIGNAL(tabsAvailable(QList<Tab>)), this, SLOT(tabsAvailable(QList<Tab>))); connect(DBManager::instance(), SIGNAL(tabChanged(Tab)), this, SLOT(tabChanged(Tab))); connect(DBManager::instance(), SIGNAL(titleChanged(int,int,QString,QString)), this, SLOT(updateTitle(int,int,QString,QString))); }
void DBWorker::removeTab(int tabId) { #if DEBUG_LOGS qDebug() << "tab id:" << tabId; #endif QSqlQuery query = prepare("DELETE FROM tab WHERE tab_id = ?;"); query.bindValue(0, tabId); execute(query); // Remove links that are only related to this tab query = prepare("DELETE FROM link WHERE link_id IN " "(SELECT DISTINCT link_id FROM tab_history WHERE tab_id = ? " "AND link_id NOT IN (SELECT link_id FROM tab_history WHERE tab_id != ? " "))"); query.bindValue(0, tabId); query.bindValue(1, tabId); // Remove history query = prepare("DELETE FROM tab_history WHERE tab_id = ?;"); query.bindValue(0, tabId); execute(query); // Check last tab closed if (!tabCount()) { QList<Tab> tabList; emit tabsAvailable(tabList); } }
void DBWorker::removeAllTabs(bool noFeedback) { int oldTabCount(0); if (!noFeedback) { oldTabCount = tabCount(); } QSqlQuery query = prepare("DELETE FROM tab;"); execute(query); // Remove links that are not stored in history query = prepare("DELETE FROM link WHERE link_id IN " "(SELECT DISTINCT link_id FROM tab_history)"); execute(query); // Remove history query = prepare("DELETE FROM tab_history;"); execute(query); QList<Tab> tabList; if (oldTabCount != 0) { emit tabsAvailable(tabList); } }
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)); }
DeclarativeTabModel::DeclarativeTabModel(QObject *parent) : QAbstractListModel(parent) , m_currentTab(0) , m_loaded(false) , m_browsing(false) , m_activeTabClosed(false) { connect(DBManager::instance(), SIGNAL(tabsAvailable(QList<Tab>)), this, SLOT(tabsAvailable(QList<Tab>))); connect(DBManager::instance(), SIGNAL(tabChanged(Tab)), this, SLOT(tabChanged(Tab))); connect(DBManager::instance(), SIGNAL(thumbPathChanged(QString,QString,int)), this, SLOT(updateThumbPath(QString,QString,int))); connect(DBManager::instance(), SIGNAL(titleChanged(QString,QString)), this, SLOT(updateTitle(QString,QString))); }
void DBWorker::clearHistory() { QSqlQuery query = prepare("DELETE FROM history;"); execute(query); removeAllTabs(); query = prepare("DELETE FROM link;"); execute(query); QList<Link> linkList; emit historyAvailable(linkList); QList<Tab> tabList; emit tabsAvailable(tabList); }
void DBWorker::getAllTabs() { QList<Tab> tabList; QSqlQuery query = prepare("SELECT tab_id, tab_history_id FROM tab;"); if (!execute(query)) { return; } while (query.next()) { tabList.append(getTabData(query.value(0).toInt(), query.value(1).toInt())); } emit tabsAvailable(tabList); }
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::getAllTabs() { QList<Tab> tabList; QSqlQuery query = prepare("SELECT tab.tab_id, link.url, link.title, link.thumb_path " "FROM tab " "INNER JOIN tab_history ON tab_history.id = tab.tab_history_id " "INNER JOIN link ON tab_history.link_id = link.link_id;"); if (!execute(query)) { return; } while (query.next()) { tabList.append(Tab(query.value(0).toInt(), query.value(1).toString(), query.value(2).toString(), query.value(3).toString())); } emit tabsAvailable(tabList); }