redesignedVersion function
Return StoreVersionAndUrl from Redesigned Play Store results. Created by upgrader package
Implementation
StoreVersionAndUrl? redesignedVersion(dom.Document response, String url) {
try {
// ignore: prefer_single_quotes
const patternName = ",\"name\":\"";
// ignore: prefer_single_quotes
const patternVersion = ",[[[\"";
// ignore: prefer_single_quotes
const patternCallback = "AF_initDataCallback";
// ignore: prefer_single_quotes
const patternEndOfString = "\"";
// ignore: prefer_single_quotes
final scripts = response.getElementsByTagName("script");
final infoElements = scripts.where((element) => element.text.contains(patternName));
final additionalInfoElements = scripts.where((element) => element.text.contains(patternCallback));
final additionalInfoElementsFiltered = additionalInfoElements.where((element) => element.text.contains(patternVersion));
final nameElement = infoElements.first.text;
final storeNameStartIndex = nameElement.indexOf(patternName) + patternName.length;
final storeNameEndIndex = storeNameStartIndex + nameElement.substring(storeNameStartIndex).indexOf(patternEndOfString);
final storeName = nameElement.substring(storeNameStartIndex, storeNameEndIndex);
// ignore: prefer_single_quotes
final versionElement = additionalInfoElementsFiltered.where((element) => element.text.contains("\"$storeName\"")).first.text;
final storeVersionStartIndex = versionElement.lastIndexOf(patternVersion) + patternVersion.length;
final storeVersionEndIndex = storeVersionStartIndex + versionElement.substring(storeVersionStartIndex).indexOf(patternEndOfString);
final storeVersion = versionElement.substring(storeVersionStartIndex, storeVersionEndIndex);
// storeVersion might be: 'Varies with device', which is not a valid version.
return StoreVersionAndUrl(storeVersion, url);
} catch (e) {
if (kDebugMode) {
print('upgrader: PlayStoreResults.redesignedVersion exception: $e');
}
}
return null;
}