diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-06-22 16:54:02 +0200 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-06-22 16:54:02 +0200 |
| commit | f674e179d602d3ccb9818d28fe06f371059449dc (patch) | |
| tree | 996fb624986512de91581a18332f004d34220ba2 /src/rsshit_db.cpp | |
parse and insert feeds and items
Diffstat (limited to 'src/rsshit_db.cpp')
| -rw-r--r-- | src/rsshit_db.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/rsshit_db.cpp b/src/rsshit_db.cpp new file mode 100644 index 0000000..d5d2a2a --- /dev/null +++ b/src/rsshit_db.cpp @@ -0,0 +1,60 @@ +#include "rsshit_db.h" + +#include <QDebug> +#include <QFileInfo> +#include <QSqlDatabase> +#include <QSqlError> +#include <QSqlQuery> +#include <QSqlRecord> +#include <QSqlResult> +#include <QSqlTableModel> +#include <QStandardPaths> + +#include "atomchannel.h" +#include "constants.h" +#include "playground.h" + +namespace { +namespace feeds_field_names { +const QString link{"link"}; +const QString title{"title"}; +const QString image_url{"image_url"}; +} // namespace feeds_field_names +} // namespace + +bool applyToDb(const std::shared_ptr<AtomChannel> channel) +{ + if (channel->getOrInsertDbId() == rsshit::db::IdNotFound) + return false; + + if (channel->items.isEmpty()) + return true; + + channel->syncDbItems(); + + return true; +} + +std::optional<QSqlDatabase> rsshit::db::open() +{ + auto db = QSqlDatabase::database(); + + if (db.isValid() && db.isOpen()) + return db; + + db = QSqlDatabase::addDatabase(rsshit::db::driver); + const auto dataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + const QString dbFilepath{dataLocation + '/' + + QFileInfo{rsshit::db::dbSqliteResourceFilename}.fileName()}; + + db.setDatabaseName(dbFilepath); + qDebug() << "open" << dbFilepath; + + if (!db.open()) { + qWarning() << "cannot open db:" << db.lastError().text(); + + return {}; + } + + return db; +} |
