diff options
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/data')
| -rw-r--r-- | app/src/main/java/org/terst/feedreader/data/ArticleSaving.kt | 30 |
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 +} |
