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

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)
}
}
}