Use /sources/stats in the home #133
@ -44,7 +44,8 @@ class Repository(
|
||||
private val _badgeStarred = MutableStateFlow(0)
|
||||
val badgeStarred = _badgeStarred.asStateFlow()
|
||||
|
||||
private var fetchedSources = false
|
||||
private var sources = ArrayList<SelfossModel.Source>()
|
||||
AmineB marked this conversation as resolved
|
||||
|
||||
private var fetchedTags = false
|
||||
|
||||
private var _readerItems = ArrayList<SelfossModel.Item>()
|
||||
@ -180,23 +181,49 @@ class Repository(
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getSources(): ArrayList<SelfossModel.Source> {
|
||||
AmineB marked this conversation as resolved
AmineB
commented
There should be two methods:
There should be two methods:
```
suspend fun getSourceDetailsOrStats(): ArrayList<SelfossModel.Source> {
if (IS PUBLIC MODE) {
return api.sourcesStats()
} else {
copy/past the content of the old `getSources()` method
}
}
suspend fun getSourcesDetails(): List<SelfossModel.SourceDetail> { // This will be called in the sources activity
if (isNetworkAvailable()) {
return api.sourcesDetailed().data.orEmpty()
}
return emptyList<>()
}
```
davidoskky
commented
I'm not sure about this. Doing so is fine only as long as we don't care about the unread count. That is only available in the stats. I'm not sure about this. Doing so is fine only as long as we don't care about the unread count. That is only available in the stats.
If we don't plan on displaying the unread count, this is fine; otherwise the amount of unread articles should be available in the home activity.
AmineB
commented
Unread count was complicated code-wise. We have no idea if the feature was used/useful, so for now, let's not add it back. Unread count was complicated code-wise. We have no idea if the feature was used/useful, so for now, let's not add it back.
davidoskky
commented
I did find the tags unread count useful. I will not add this here; we can always implement it later. I did find the tags unread count useful. I will not add this here; we can always implement it later.
|
||||
private fun updateSources(newSources: ArrayList<SelfossModel.Source>) {
|
||||
val isDatabaseEnabled =
|
||||
appSettingsService.isItemCachingEnabled() || !appSettingsService.isUpdateSourcesEnabled()
|
||||
AmineB marked this conversation as resolved
AmineB
commented
All this is overly complicated. All this is overly complicated.
|
||||
return if (isNetworkAvailable() && !fetchedSources) {
|
||||
val apiSources = api.sources()
|
||||
if (apiSources.success && apiSources.data != null && isDatabaseEnabled) {
|
||||
resetDBSourcesWithData(apiSources.data)
|
||||
if (!appSettingsService.isUpdateSourcesEnabled()) {
|
||||
fetchedSources = true
|
||||
}
|
||||
}
|
||||
apiSources.data ?: ArrayList()
|
||||
} else if (isDatabaseEnabled) {
|
||||
ArrayList(getDBSources().map { it.toView() })
|
||||
} else {
|
||||
ArrayList()
|
||||
val newIds = newSources.map {it.id}
|
||||
val filteredSources = sources.filterNot { it.id in newIds }
|
||||
for (source in filteredSources) {
|
||||
val newSource = newSources.find { it.id == source.id }
|
||||
source.update(newSource!!)
|
||||
}
|
||||
sources = (filteredSources + newSources).distinctBy { it.id } as ArrayList<SelfossModel.Source>
|
||||
|
||||
if (isDatabaseEnabled) {
|
||||
resetDBSourcesWithData(sources)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getSourcesStats(): ArrayList<SelfossModel.Source> {
|
||||
val isDatabaseEnabled =
|
||||
appSettingsService.isItemCachingEnabled() || !appSettingsService.isUpdateSourcesEnabled()
|
||||
if (isNetworkAvailable() && sources.none { it.unread != null }) {
|
||||
val apiSources = api.sourcesStats()
|
||||
if (apiSources.success && apiSources.data != null) {
|
||||
updateSources(apiSources.data.map { SelfossModel.Source(it) } as ArrayList)
|
||||
}
|
||||
} else if (isDatabaseEnabled) {
|
||||
updateSources(getDBSources().map { it.toView() } as ArrayList)
|
||||
}
|
||||
|
||||
return sources
|
||||
}
|
||||
|
||||
AmineB marked this conversation as resolved
AmineB
commented
We only update the DB from We only update the DB from `getSourcesDetails`
|
||||
suspend fun getSourcesDetails(): ArrayList<SelfossModel.Source> {
|
||||
val isDatabaseEnabled =
|
||||
appSettingsService.isItemCachingEnabled() || !appSettingsService.isUpdateSourcesEnabled()
|
||||
if (isNetworkAvailable() && sources.none { it.spout != null }) {
|
||||
val apiSources = api.sourcesDetailed()
|
||||
if (apiSources.success && apiSources.data != null) {
|
||||
updateSources(apiSources.data.map { SelfossModel.Source(it) } as ArrayList)
|
||||
}
|
||||
} else if (isDatabaseEnabled) {
|
||||
updateSources(getDBSources().map { it.toView() } as ArrayList)
|
||||
}
|
||||
return sources
|
||||
}
|
||||
|
||||
suspend fun markAsRead(item: SelfossModel.Item): Boolean {
|
||||
@ -373,6 +400,7 @@ class Repository(
|
||||
items = ArrayList(items.filter { it.sourcetitle != title })
|
||||
setReaderItems(items)
|
||||
db.itemsQueries.deleteItemsWhereSource(title)
|
||||
sources.removeAll { it.id == id }
|
||||
}
|
||||
|
||||
return success
|
||||
|
Loading…
Reference in New Issue
Block a user
This shouldn't be changed/added.