summaryrefslogtreecommitdiff
path: root/src/rsshit_db.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-06-22 16:54:02 +0200
committerNikita Kostovsky <nikita@kostovsky.me>2025-06-22 16:54:02 +0200
commitf674e179d602d3ccb9818d28fe06f371059449dc (patch)
tree996fb624986512de91581a18332f004d34220ba2 /src/rsshit_db.cpp
parse and insert feeds and items
Diffstat (limited to 'src/rsshit_db.cpp')
-rw-r--r--src/rsshit_db.cpp60
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;
+}