selectLatestCompatible method
SoftwareUpdate?
selectLatestCompatible({
- required List<
SoftwareRelease> releases, - required Map<
String, List< assetsByReleaseId,SoftwareAsset> > - required InstalledSoftware installed,
Implementation
SoftwareUpdate? selectLatestCompatible({
required List<SoftwareRelease> releases,
required Map<String, List<SoftwareAsset>> assetsByReleaseId,
required InstalledSoftware installed,
}) {
final candidates = <SoftwareUpdate>[];
for (final release in releases) {
for (final asset in assetsByReleaseId[release.event.id] ?? const []) {
final versionCode = asset.versionCode;
if (asset.mimeType != androidPackageMimeType ||
asset.urls.isEmpty ||
asset.identifier != installed.packageId ||
versionCode == null ||
(asset.minPlatformVersion ?? 0) > installed.platformVersion ||
(asset.minAllowedVersionCode ?? 0) > installed.versionCode ||
(asset.variant != null && asset.variant != installed.variant) ||
!_supportsPlatform(asset.platforms, installed.platforms) ||
!_hasMatchingCertificate(
asset.certificateHashes,
installed.certificateHashes,
)) {
continue;
}
candidates.add(SoftwareUpdate(release: release, asset: asset));
}
}
candidates.sort(
(a, b) => b.asset.versionCode!.compareTo(a.asset.versionCode!),
);
return candidates.firstOrNull;
}