|
@@ -36,8 +36,6 @@ class ExtensionsPresenter(
|
|
|
override fun onCreate(savedState: Bundle?) {
|
|
|
super.onCreate(savedState)
|
|
|
|
|
|
- extensionManager.findAvailableExtensions()
|
|
|
-
|
|
|
val context = Injekt.get<Application>()
|
|
|
val extensionMapper: (Map<String, InstallStep>) -> ((Extension) -> ExtensionUiModel) = { map ->
|
|
|
{
|
|
@@ -71,13 +69,13 @@ class ExtensionsPresenter(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- launchIO {
|
|
|
+ presenterScope.launchIO {
|
|
|
combine(
|
|
|
_query,
|
|
|
getExtensions.subscribe(),
|
|
|
_currentDownloads,
|
|
|
- ) { query, (updates, installed, available, untrusted), downloads ->
|
|
|
- val languagesWithExtensions = available
|
|
|
+ ) { query, (_updates, _installed, _available, _untrusted), downloads ->
|
|
|
+ val languagesWithExtensions = _available
|
|
|
.filter(queryFilter(query))
|
|
|
.groupBy { LocaleHelper.getSourceDisplayName(it.lang, context) }
|
|
|
.toSortedMap()
|
|
@@ -90,14 +88,14 @@ class ExtensionsPresenter(
|
|
|
|
|
|
val items = mutableListOf<ExtensionUiModel>()
|
|
|
|
|
|
- val updates = updates.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
+ val updates = _updates.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
if (updates.isNotEmpty()) {
|
|
|
items.add(ExtensionUiModel.Header.Resource(R.string.ext_updates_pending))
|
|
|
items.addAll(updates)
|
|
|
}
|
|
|
|
|
|
- val installed = installed.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
- val untrusted = untrusted.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
+ val installed = _installed.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
+ val untrusted = _untrusted.filter(queryFilter(query)).map(extensionMapper(downloads))
|
|
|
if (installed.isNotEmpty() || untrusted.isNotEmpty()) {
|
|
|
items.add(ExtensionUiModel.Header.Resource(R.string.ext_installed))
|
|
|
items.addAll(installed)
|
|
@@ -110,21 +108,22 @@ class ExtensionsPresenter(
|
|
|
|
|
|
items
|
|
|
}.collectLatest {
|
|
|
- state.isRefreshing = false
|
|
|
state.isLoading = false
|
|
|
state.items = it
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ presenterScope.launchIO { findAvailableExtensions() }
|
|
|
}
|
|
|
|
|
|
fun search(query: String) {
|
|
|
- launchIO {
|
|
|
+ presenterScope.launchIO {
|
|
|
_query.emit(query)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fun updateAllExtensions() {
|
|
|
- launchIO {
|
|
|
+ presenterScope.launchIO {
|
|
|
if (state.isEmpty) return@launchIO
|
|
|
val items = state.items
|
|
|
items.mapNotNull {
|
|
@@ -151,16 +150,16 @@ class ExtensionsPresenter(
|
|
|
}
|
|
|
|
|
|
private fun removeDownloadState(extension: Extension) {
|
|
|
- _currentDownloads.update { map ->
|
|
|
- val map = map.toMutableMap()
|
|
|
+ _currentDownloads.update { _map ->
|
|
|
+ val map = _map.toMutableMap()
|
|
|
map.remove(extension.pkgName)
|
|
|
map
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private fun addDownloadState(extension: Extension, installStep: InstallStep) {
|
|
|
- _currentDownloads.update { map ->
|
|
|
- val map = map.toMutableMap()
|
|
|
+ _currentDownloads.update { _map ->
|
|
|
+ val map = _map.toMutableMap()
|
|
|
map[extension.pkgName] = installStep
|
|
|
map
|
|
|
}
|
|
@@ -180,8 +179,11 @@ class ExtensionsPresenter(
|
|
|
}
|
|
|
|
|
|
fun findAvailableExtensions() {
|
|
|
- state.isRefreshing = true
|
|
|
- extensionManager.findAvailableExtensions()
|
|
|
+ presenterScope.launchIO {
|
|
|
+ state.isRefreshing = true
|
|
|
+ extensionManager.findAvailableExtensions()
|
|
|
+ state.isRefreshing = false
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
fun trustSignature(signatureHash: String) {
|