mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-05-24 08:25:00 -04:00
Use dedicated DB methods for getting new and recently updated apps
Otherwise the 200 apps limit causes us to miss apps that we'd still consider "new".
This commit is contained in:
@@ -94,11 +94,11 @@ fun AppBox(app: AppDiscoverItem, onAppTap: (AppDiscoverItem) -> Unit) {
|
||||
@Composable
|
||||
fun AppCarouselPreview() {
|
||||
val apps = listOf(
|
||||
AppDiscoverItem("", Names.randomName, isNew = true),
|
||||
AppDiscoverItem("", Names.randomName, isNew = false),
|
||||
AppDiscoverItem("", Names.randomName, isNew = false),
|
||||
AppDiscoverItem("", Names.randomName, isNew = false),
|
||||
AppDiscoverItem("", Names.randomName, isNew = false),
|
||||
AppDiscoverItem("", Names.randomName),
|
||||
AppDiscoverItem("", Names.randomName),
|
||||
AppDiscoverItem("", Names.randomName),
|
||||
AppDiscoverItem("", Names.randomName),
|
||||
AppDiscoverItem("", Names.randomName),
|
||||
)
|
||||
FDroidContent {
|
||||
AppCarousel("Preview Apps", apps, onTitleTap = {}) {}
|
||||
|
||||
@@ -6,6 +6,5 @@ class AppDiscoverItem(
|
||||
val packageName: String,
|
||||
val name: String,
|
||||
val iconDownloadRequest: DownloadRequest? = null,
|
||||
val isNew: Boolean,
|
||||
val lastUpdated: Long = -1,
|
||||
)
|
||||
|
||||
@@ -10,18 +10,20 @@ import org.fdroid.ui.categories.CategoryItem
|
||||
|
||||
@Composable
|
||||
fun DiscoverPresenter(
|
||||
appsFlow: Flow<List<AppDiscoverItem>>,
|
||||
newAppsFlow: Flow<List<AppDiscoverItem>>,
|
||||
recentlyUpdatedAppsFlow: Flow<List<AppDiscoverItem>>,
|
||||
categoriesFlow: Flow<List<CategoryItem>>,
|
||||
repositoriesFlow: Flow<List<Repository>>,
|
||||
searchResultsFlow: StateFlow<SearchResults?>,
|
||||
): DiscoverModel {
|
||||
val apps = appsFlow.collectAsState(null).value
|
||||
val newApps = newAppsFlow.collectAsState(null).value
|
||||
val recentlyUpdatedApps = recentlyUpdatedAppsFlow.collectAsState(null).value
|
||||
val categories = categoriesFlow.collectAsState(null).value
|
||||
val searchResults = searchResultsFlow.collectAsState().value
|
||||
|
||||
return if (apps.isNullOrEmpty()) {
|
||||
return if (newApps.isNullOrEmpty() || recentlyUpdatedApps.isNullOrEmpty()) {
|
||||
val repositories = repositoriesFlow.collectAsState(null).value
|
||||
if (apps == null) {
|
||||
if (newApps == null && recentlyUpdatedApps == null) {
|
||||
LoadingDiscoverModel(false)
|
||||
} else if (repositories?.all { !it.enabled } == true) {
|
||||
NoEnabledReposDiscoverModel
|
||||
@@ -33,8 +35,8 @@ fun DiscoverPresenter(
|
||||
}
|
||||
} else {
|
||||
LoadedDiscoverModel(
|
||||
newApps = apps.filter { it.isNew },
|
||||
recentlyUpdatedApps = apps.filter { !it.isNew },
|
||||
newApps = newApps,
|
||||
recentlyUpdatedApps = recentlyUpdatedApps,
|
||||
categories = categories?.groupBy { it.group },
|
||||
searchResults = searchResults,
|
||||
)
|
||||
|
||||
@@ -19,7 +19,9 @@ import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.withContext
|
||||
import mu.KotlinLogging
|
||||
import org.fdroid.LocaleChooser.getBestLocale
|
||||
import org.fdroid.database.AppOverviewItem
|
||||
import org.fdroid.database.FDroidDatabase
|
||||
import org.fdroid.database.Repository
|
||||
import org.fdroid.download.getDownloadRequest
|
||||
import org.fdroid.index.RepoManager
|
||||
import org.fdroid.ui.categories.CategoryItem
|
||||
@@ -47,18 +49,16 @@ class DiscoverViewModel @Inject constructor(
|
||||
private val collator = Collator.getInstance(Locale.getDefault())
|
||||
|
||||
val numUpdates = updatesManager.numUpdates
|
||||
val apps = db.getAppDao().getAppOverviewItems().asFlow().map { list ->
|
||||
val newApps = db.getAppDao().getNewAppsFlow().map { list ->
|
||||
list.mapNotNull {
|
||||
val repository = repoManager.getRepository(it.repoId)
|
||||
?: return@mapNotNull null
|
||||
AppDiscoverItem(
|
||||
packageName = it.packageName,
|
||||
name = it.getName(localeList) ?: "Unknown App",
|
||||
isNew = it.lastUpdated == it.added,
|
||||
lastUpdated = it.lastUpdated,
|
||||
iconDownloadRequest = it.getIcon(localeList)
|
||||
?.getDownloadRequest(repository),
|
||||
)
|
||||
val repository = repoManager.getRepository(it.repoId) ?: return@mapNotNull null
|
||||
it.toAppDiscoverItem(repository)
|
||||
}
|
||||
}
|
||||
val recentlyUpdatedApps = db.getAppDao().getRecentlyUpdatedAppsFlow().map { list ->
|
||||
list.mapNotNull {
|
||||
val repository = repoManager.getRepository(it.repoId) ?: return@mapNotNull null
|
||||
it.toAppDiscoverItem(repository)
|
||||
}
|
||||
}
|
||||
private val categories = db.getRepositoryDao().getLiveCategories().asFlow().map { categories ->
|
||||
@@ -74,7 +74,8 @@ class DiscoverViewModel @Inject constructor(
|
||||
val localeList = LocaleListCompat.getDefault()
|
||||
val discoverModel: StateFlow<DiscoverModel> = scope.launchMolecule(mode = ContextClock) {
|
||||
DiscoverPresenter(
|
||||
appsFlow = apps,
|
||||
newAppsFlow = newApps,
|
||||
recentlyUpdatedAppsFlow = recentlyUpdatedApps,
|
||||
categoriesFlow = categories,
|
||||
repositoriesFlow = repoManager.repositoriesState,
|
||||
searchResultsFlow = searchResults,
|
||||
@@ -140,4 +141,11 @@ class DiscoverViewModel @Inject constructor(
|
||||
fun onSearchCleared() {
|
||||
searchResults.value = null
|
||||
}
|
||||
|
||||
private fun AppOverviewItem.toAppDiscoverItem(repository: Repository) = AppDiscoverItem(
|
||||
packageName = packageName,
|
||||
name = getName(localeList) ?: "Unknown App",
|
||||
lastUpdated = lastUpdated,
|
||||
iconDownloadRequest = getIcon(localeList)?.getDownloadRequest(repository),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user