store history using sqlite, add suggestion with open

This commit is contained in:
2026-10-15 23:22:32 +02:00
parent a841178cf7
commit 13c1488b0e
12 changed files with 435 additions and 5 deletions
+49
View File
@@ -0,0 +1,49 @@
#pragma once
#include <QList>
#include <QSqlDatabase>
#include <QString>
#include <QStringList>
#include <QUrl>
// Browsing history in history.sqlite under AppDataLocation. Two tables:
// "visits" is an append-only log of every page load; "urls" holds one row per
// URL with its latest title and visit time, and is what completion searches.
//
// Queries run synchronously on the GUI thread. That is fine for SQLite at
// browser-history sizes, with WAL so a write never waits on a full fsync.
class History
{
public:
struct Entry {
QString url;
QString title;
};
History();
~History();
History(const History &) = delete;
History &operator=(const History &) = delete;
bool isOpen() const { return m_open; }
void addVisit(const QUrl &url, const QString &title);
// Pages often set their title after the load finished.
void updateTitle(const QUrl &url, const QString &title);
// Most recently visited first. Every word must appear in the URL or the
// title, case-insensitively.
QList<Entry> search(const QStringList &words, int limit) const;
bool clear();
// Whether a URL belongs in history at all: no internal or data pages.
static bool isRecordable(const QUrl &url);
private:
bool exec(const QString &sql);
QSqlDatabase m_db;
bool m_open = false;
};