Skip to content

Commit 02a7174

Browse files
committed
[feature] Support #65
1 parent 2574590 commit 02a7174

File tree

21 files changed

+330
-188
lines changed

21 files changed

+330
-188
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ android {
2222
minSdk = 24
2323
targetSdk = 35
2424
versionCode = 24
25-
versionName = "2.1-beta17"
25+
versionName = "2.1-rc01"
2626

2727
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2828

app/src/main/java/com/skyd/anivu/ext/PreferenceExt.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.skyd.anivu.model.preference.appearance.article.ShowArticlePullRefresh
1717
import com.skyd.anivu.model.preference.appearance.article.ShowArticleTopBarRefreshPreference
1818
import com.skyd.anivu.model.preference.appearance.feed.FeedDefaultGroupExpandPreference
1919
import com.skyd.anivu.model.preference.appearance.feed.FeedListTonalElevationPreference
20+
import com.skyd.anivu.model.preference.appearance.feed.FeedNumberBadgePreference
2021
import com.skyd.anivu.model.preference.appearance.feed.FeedTopBarTonalElevationPreference
2122
import com.skyd.anivu.model.preference.appearance.media.MediaShowThumbnailPreference
2223
import com.skyd.anivu.model.preference.appearance.read.ReadContentTonalElevationPreference
@@ -87,6 +88,7 @@ fun Preferences.toSettings(): Settings {
8788
readTextSize = ReadTextSizePreference.fromPreferences(this),
8889
readContentTonalElevation = ReadContentTonalElevationPreference.fromPreferences(this),
8990
readTopBarTonalElevation = ReadTopBarTonalElevationPreference.fromPreferences(this),
91+
feedNumberBadge = FeedNumberBadgePreference.fromPreferences(this),
9092

9193
// Update
9294
ignoreUpdateVersion = IgnoreUpdateVersionPreference.fromPreferences(this),

app/src/main/java/com/skyd/anivu/model/db/dao/FeedDao.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,16 @@ interface FeedDao {
139139
fun getFeedPagingSource(): PagingSource<Int, FeedBean>
140140

141141
@Transaction
142-
@Query("SELECT * FROM $FEED_TABLE_NAME WHERE ${FeedBean.URL_COLUMN} = :feedUrl")
143-
suspend fun getFeed(feedUrl: String): FeedBean
142+
@Query("SELECT * FROM $FEED_VIEW_NAME WHERE ${FeedBean.URL_COLUMN} = :feedUrl")
143+
suspend fun getFeed(feedUrl: String): FeedViewBean
144144

145145
@Transaction
146-
@Query(
147-
"""
148-
SELECT * FROM $FEED_VIEW_NAME
149-
WHERE ${FeedBean.GROUP_ID_COLUMN} IN (:groupIds)
150-
"""
151-
)
152-
suspend fun getFeedsIn(groupIds: List<String>): List<FeedViewBean>
146+
@Query("SELECT * FROM $FEED_VIEW_NAME WHERE ${FeedBean.URL_COLUMN} IN (:feedUrls)")
147+
suspend fun getFeedsIn(feedUrls: List<String>): List<FeedViewBean>
148+
149+
@Transaction
150+
@Query("SELECT * FROM $FEED_VIEW_NAME WHERE ${FeedBean.GROUP_ID_COLUMN} IN (:groupIds)")
151+
suspend fun getFeedsInGroup(groupIds: List<String>): List<FeedViewBean>
153152

154153
@Transaction
155154
@Query(
@@ -159,7 +158,7 @@ interface FeedDao {
159158
${FeedBean.GROUP_ID_COLUMN} NOT IN (:groupIds)
160159
"""
161160
)
162-
suspend fun getFeedsNotIn(groupIds: List<String>): List<FeedViewBean>
161+
suspend fun getFeedsNotInGroup(groupIds: List<String>): List<FeedViewBean>
163162

164163
@Transaction
165164
@Query(

app/src/main/java/com/skyd/anivu/model/db/dao/GroupDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ interface GroupDao {
130130
removeGroupIdFromList(groupId)
131131
innerRemoveGroup(groupId)
132132
return EntryPointAccessors.fromApplication(appContext, GroupDaoEntryPoint::class.java).run {
133-
feedDao.getFeedsIn(listOf(groupId)).forEach {
133+
feedDao.getFeedsInGroup(listOf(groupId)).forEach {
134134
it.feed.customIcon?.let { icon -> tryDeleteFeedIconFile(icon) }
135135
}
136136
feedDao.removeFeedByGroupId(groupId)

app/src/main/java/com/skyd/anivu/model/preference/Settings.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.skyd.anivu.model.preference.appearance.article.ShowArticlePullRefresh
2222
import com.skyd.anivu.model.preference.appearance.article.ShowArticleTopBarRefreshPreference
2323
import com.skyd.anivu.model.preference.appearance.feed.FeedDefaultGroupExpandPreference
2424
import com.skyd.anivu.model.preference.appearance.feed.FeedListTonalElevationPreference
25+
import com.skyd.anivu.model.preference.appearance.feed.FeedNumberBadgePreference
2526
import com.skyd.anivu.model.preference.appearance.feed.FeedTopBarTonalElevationPreference
2627
import com.skyd.anivu.model.preference.appearance.media.MediaShowThumbnailPreference
2728
import com.skyd.anivu.model.preference.appearance.read.ReadContentTonalElevationPreference
@@ -84,6 +85,7 @@ import com.skyd.anivu.ui.local.LocalDateStyle
8485
import com.skyd.anivu.ui.local.LocalDeduplicateTitleInDesc
8586
import com.skyd.anivu.ui.local.LocalFeedDefaultGroupExpand
8687
import com.skyd.anivu.ui.local.LocalFeedListTonalElevation
88+
import com.skyd.anivu.ui.local.LocalFeedNumberBadge
8789
import com.skyd.anivu.ui.local.LocalFeedTopBarTonalElevation
8890
import com.skyd.anivu.ui.local.LocalHardwareDecode
8991
import com.skyd.anivu.ui.local.LocalHideEmptyDefault
@@ -152,6 +154,7 @@ data class Settings(
152154
val readTextSize: Float = ReadTextSizePreference.default,
153155
val readContentTonalElevation: Float = ReadContentTonalElevationPreference.default,
154156
val readTopBarTonalElevation: Float = ReadTopBarTonalElevationPreference.default,
157+
val feedNumberBadge: Int = FeedNumberBadgePreference.default,
155158
// Update
156159
val ignoreUpdateVersion: Long = IgnoreUpdateVersionPreference.default,
157160
// Behavior
@@ -229,6 +232,7 @@ fun SettingsProvider(
229232
LocalReadTextSize provides settings.readTextSize,
230233
LocalReadContentTonalElevation provides settings.readContentTonalElevation,
231234
LocalReadTopBarTonalElevation provides settings.readTopBarTonalElevation,
235+
LocalFeedNumberBadge provides settings.feedNumberBadge,
232236
// Update
233237
LocalIgnoreUpdateVersion provides settings.ignoreUpdateVersion,
234238
// Behavior
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.skyd.anivu.model.preference.appearance.feed
2+
3+
import android.content.Context
4+
import androidx.datastore.preferences.core.Preferences
5+
import androidx.datastore.preferences.core.intPreferencesKey
6+
import com.skyd.anivu.R
7+
import com.skyd.anivu.base.BasePreference
8+
import com.skyd.anivu.ext.dataStore
9+
import com.skyd.anivu.ext.getOrDefault
10+
import com.skyd.anivu.ext.put
11+
import kotlinx.coroutines.CoroutineScope
12+
import kotlinx.coroutines.Dispatchers
13+
import kotlinx.coroutines.launch
14+
15+
object FeedNumberBadgePreference : BasePreference<Int> {
16+
private const val FEED_NUMBER_BADGE = "feedNumberBadge"
17+
18+
const val UNREAD = 1
19+
const val ALL = 1 shl 1
20+
const val UNREAD_ALL = UNREAD + ALL
21+
val values = arrayOf(UNREAD, ALL, UNREAD_ALL)
22+
23+
override val default = ALL
24+
25+
val key = intPreferencesKey(FEED_NUMBER_BADGE)
26+
27+
fun put(context: Context, scope: CoroutineScope, value: Int) {
28+
scope.launch(Dispatchers.IO) {
29+
context.dataStore.put(key, value)
30+
}
31+
}
32+
33+
override fun fromPreferences(preferences: Preferences): Int = preferences[key] ?: default
34+
35+
fun toDisplayName(
36+
context: Context,
37+
value: Int = context.dataStore.getOrDefault(this),
38+
): String = when (value) {
39+
UNREAD -> context.getString(R.string.feed_number_badge_unread)
40+
ALL -> context.getString(R.string.feed_number_badge_all)
41+
UNREAD_ALL -> context.getString(R.string.feed_number_badge_unread_all)
42+
else -> context.getString(R.string.unknown)
43+
}
44+
}

app/src/main/java/com/skyd/anivu/model/repository/ArticleRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ArticleRepository @Inject constructor(
102102
requests += async {
103103
val articleBeanList = runCatching {
104104
rssHelper.queryRssXml(
105-
feed = feedDao.getFeed(feedUrl),
105+
feed = feedDao.getFeed(feedUrl).feed,
106106
latestLink = articleDao.queryLatestByFeedUrl(feedUrl)?.link,
107107
)?.also { feedWithArticle ->
108108
feedDao.updateFeed(feedWithArticle.feed)

0 commit comments

Comments
 (0)