evaluate method

UpdatePolicyResult evaluate(
  1. PrismVersion current,
  2. 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,
  );
}