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 }