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)));
}
Example #3
0
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);
    }
}
Example #4
0
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);
    }
}
Example #5
0
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)));
}
Example #7
0
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);
}
Example #8
0
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);
}
Example #9
0
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);
    }
}
Example #10
0
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);
}