runCleaner function
Implementation
String runCleaner(String url, Cleaner? cleaner) {
//Amazon sponsored URLs
if (url.contains("picassoRedirect.html")) {
Uri parsed = Uri.parse(url);
if (parsed.queryParameters.containsKey('url')) {
url = "${parsed.origin}${parsed.queryParameters['url']}";
}
}
//Set variables
Uri og = Uri.parse(url);
Map<String, String> params = {};
//Empty cleaner, return path only, no params!
if (cleaner == null) {
return Uri.https(og.authority, og.path).toString();
}
//Blacklisted params! Add all other params.
if (cleaner.blacklistParams != null) {
og.queryParameters.forEach((key, value) {
if (!cleaner.blacklistParams!.contains(key)) {
params[key] = value;
}
});
} else {
params.addAll(og.queryParameters);
}
//Let's remove non-whitelisted params
if (cleaner.whitelistParams != null) {
List<String> toRemove = [];
params.forEach((key, value) {
if (!cleaner.whitelistParams!.contains(key)) {
toRemove.add(key);
}
});
params.removeWhere((k, v) => toRemove.contains(k));
} else {
params.clear();
}
//Let's append defined parameters
if (cleaner.appendParams != null) {
cleaner.appendParams!.forEach((key, value) {
params[key] = value;
});
}
return Uri.https(og.authority, og.path, params).toString();
}