summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/data/Entities.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/data/Entities.kt')
-rw-r--r--app/src/main/java/org/terst/feedreader/data/Entities.kt43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/src/main/java/org/terst/feedreader/data/Entities.kt b/app/src/main/java/org/terst/feedreader/data/Entities.kt
new file mode 100644
index 0000000..d71e1eb
--- /dev/null
+++ b/app/src/main/java/org/terst/feedreader/data/Entities.kt
@@ -0,0 +1,43 @@
+package org.terst.feedreader.data
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "feeds")
+data class FeedEntity(
+ @PrimaryKey val id: String, // the feed URL itself -- naturally unique, no need for a separate id scheme
+ val title: String,
+ val siteUrl: String? = null, // the human-facing site link, if the feed provides one (distinct from the feed XML URL)
+ val lastFetchedAt: Long? = null,
+ val etag: String? = null, // conditional-GET caching (If-None-Match) to avoid re-downloading unchanged feeds
+ val lastModified: String? = null, // conditional-GET caching (If-Modified-Since)
+ val lastError: String? = null // set when a fetch fails; cleared on the next successful fetch
+)
+
+@Entity(tableName = "articles")
+data class ArticleEntity(
+ @PrimaryKey val id: String, // guid if the feed provides one, else a hash of the link
+ @ColumnInfo(index = true) val feedId: String?, // null for a standalone article saved via the share-sheet target, not tied to any feed
+ val title: String,
+ val link: String,
+ val author: String? = null,
+ val publishedAt: Long? = null,
+ val feedContentHtml: String? = null, // whatever content the feed itself provided (may be a summary, may be full text)
+ val extractedContent: String? = null, // Readability-extracted full text, filled in on first read if feedContentHtml was thin
+ val isRead: Boolean = false,
+ val isSaved: Boolean = false, // explicitly kept (independent of read state) -- triggers a Stash save
+ val stashArtifactId: String? = null, // set once successfully archived to Stash; null means not yet saved or save failed
+ val createdAt: Long
+)
+
+enum class FilterAction { MUTE, HIGHLIGHT }
+
+@Entity(tableName = "filter_rules")
+data class FilterRuleEntity(
+ @PrimaryKey(autoGenerate = true) val id: Long = 0,
+ val pattern: String, // plain substring match, case-insensitive -- see FilterRuleEngine
+ val action: FilterAction,
+ val feedId: String? = null, // null applies globally across all feeds
+ val createdAt: Long
+)