You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
1.0 KiB
Kotlin
25 lines
1.0 KiB
Kotlin
package me.eater.hefbrug.enforcer.impl
|
|
|
|
import me.eater.hefbrug.enforcer.AbstractEnforcer
|
|
import me.eater.hefbrug.executor.ExecutionContext
|
|
import me.eater.hefbrug.state.ExistenceStatus
|
|
import me.eater.hefbrug.state.impl.PackageState
|
|
|
|
class PackageEnforcer(context: ExecutionContext) : AbstractEnforcer<PackageState>(context) {
|
|
override suspend fun enforce(currentState: PackageState, desiredState: PackageState, changeSet: Set<String>) {
|
|
val pm = context.getPackageManager()
|
|
pm.sync()
|
|
|
|
if (PackageState::status in changeSet) {
|
|
when (desiredState.status) {
|
|
ExistenceStatus.Absent -> pm.remove(desiredState.name)
|
|
ExistenceStatus.Present -> pm.install(desiredState.name)
|
|
else -> Unit
|
|
}
|
|
}
|
|
|
|
if (currentState.status == ExistenceStatus.Present && (desiredState.upgrade && !(PackageState::status in changeSet || desiredState.status == ExistenceStatus.Absent))) {
|
|
pm.upgrade(desiredState.name)
|
|
}
|
|
}
|
|
} |