summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/data
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/data')
-rw-r--r--app/src/main/java/org/terst/feedreader/data/ArticleSaving.kt30
1 files changed, 30 insertions, 0 deletions
diff --git a/app/src/main/java/org/terst/feedreader/data/ArticleSaving.kt b/app/src/main/java/org/terst/feedreader/data/ArticleSaving.kt
new file mode 100644
index 0000000..f2bcb72
--- /dev/null
+++ b/app/src/main/java/org/terst/feedreader/data/ArticleSaving.kt
@@ -0,0 +1,30 @@
+package org.terst.feedreader.data
+
+import android.content.Context
+import org.terst.feedreader.readability.ReaderExtractor
+import java.security.MessageDigest
+
+fun urlToArticleId(url: String): String =
+ MessageDigest.getInstance("SHA-256").digest(url.toByteArray()).joinToString("") { "%02x".format(it) }
+
+/**
+ * Creates (or returns the existing) standalone ArticleEntity for a bare URL not tied to any
+ * feed, extracting it fresh via Readability if it's not already on-device. Shared by every
+ * "save something without opening it in the reader first" entry point: the share-sheet
+ * target, and long-pressing a link inside an article to save/stash it directly.
+ */
+suspend fun ensureStandaloneArticle(context: Context, db: AppDatabase, url: String): ArticleEntity {
+ val id = urlToArticleId(url)
+ db.articleDao().getById(id)?.let { return it }
+ val extracted = ReaderExtractor.extract(context, url)
+ val entity = ArticleEntity(
+ id = id,
+ feedId = null,
+ title = extracted?.title ?: url,
+ link = url,
+ extractedContent = extracted?.content,
+ createdAt = System.currentTimeMillis()
+ )
+ db.articleDao().upsert(entity)
+ return entity
+}