evaluate method
- PrismVersion current,
- Map<
UpdateChannel, PrismVersion> latestByChannel
Evaluates current against the policy using the latest known
version per channel in latestByChannel.
Implementation
UpdatePolicyResult evaluate(
PrismVersion current,
Map<UpdateChannel, PrismVersion> latestByChannel,
) {
final candidates = [
for (final channel in channels) ...[?latestByChannel[channel]],
];
if (candidates.isEmpty) {
return const UpdatePolicyResult(UpdateDecision.upToDate);
}
final latest = candidates.reduce((a, b) => a >= b ? a : b);
final minimum = minimumVersion;
if (minimum != null && current < minimum) {
return UpdatePolicyResult(
UpdateDecision.forcedUpdate,
latest: latest,
minimum: minimum,
);
}
if (current < latest) {
// Staged rollout: only the selected percentage of devices sees the
// soft update. Forced updates below the minimum have already returned.
final included = rolloutPercent >= 100 || _isIncludedInRollout();
if (!included) {
return UpdatePolicyResult(
UpdateDecision.upToDate,
latest: latest,
minimum: minimum,
);
}
return UpdatePolicyResult(
UpdateDecision.softUpdate,
latest: latest,
minimum: minimum,
);
}
return UpdatePolicyResult(
UpdateDecision.upToDate,
latest: latest,
minimum: minimum,
);
}