diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart
index b00f73e..9037f6d 100644
--- a/lib/app_sources/html.dart
+++ b/lib/app_sources/html.dart
@@ -9,6 +9,13 @@ import 'package:obtainium/providers/apps_provider.dart';
import 'package:obtainium/providers/source_provider.dart';
String ensureAbsoluteUrl(String ambiguousUrl, Uri referenceAbsoluteUrl) {
+ try {
+ if (Uri.parse(ambiguousUrl).isAbsolute) {
+ return ambiguousUrl; // #2315
+ }
+ } catch (e) {
+ //
+ }
return referenceAbsoluteUrl.resolve(ambiguousUrl).toString();
}
diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart
index be14f75..ad506f0 100644
--- a/lib/providers/apps_provider.dart
+++ b/lib/providers/apps_provider.dart
@@ -360,8 +360,8 @@ Future downloadFile(String url, String fileName, bool fileNameHasExt,
}
var responseWithClient =
await sourceRequestStreamResponse('GET', url, reqHeaders, {});
- HttpClient responseClient = responseWithClient.key;
- HttpClientResponse response = responseWithClient.value;
+ HttpClient responseClient = responseWithClient.value.key;
+ HttpClientResponse response = responseWithClient.value.value;
sink ??= tempDownloadedFile.openWrite(mode: FileMode.writeOnly);
// Perform the download
diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart
index 1555074..72d88cd 100644
--- a/lib/providers/source_provider.dart
+++ b/lib/providers/source_provider.dart
@@ -511,7 +511,7 @@ HttpClient createHttpClient(bool insecure) {
return client;
}
-Future> sourceRequestStreamResponse(
+Future>> sourceRequestStreamResponse(
String method,
String url,
Map? requestHeaders,
@@ -551,7 +551,7 @@ Future> sourceRequestStreamResponse(
}
}
- return MapEntry(httpClient, response);
+ return MapEntry(currentUrl, MapEntry(httpClient, response));
}
throw ObtainiumError('Too many redirects ($maxRedirects)');
}
@@ -637,14 +637,14 @@ abstract class AppSource {
{bool followRedirects = true, Object? postBody}) async {
var method = postBody == null ? 'GET' : 'POST';
var requestHeaders = await getRequestHeaders(additionalSettings);
- var streamedResponseAndClient = await sourceRequestStreamResponse(
+ var streamedResponseUrlWithResponseAndClient = await sourceRequestStreamResponse(
method, url, requestHeaders, additionalSettings,
followRedirects: followRedirects, postBody: postBody);
return await httpClientResponseStreamToFinalResponse(
- streamedResponseAndClient.key,
+ streamedResponseUrlWithResponseAndClient.value.key,
method,
- url,
- streamedResponseAndClient.value);
+ streamedResponseUrlWithResponseAndClient.key.toString(),
+ streamedResponseUrlWithResponseAndClient.value.value);
}
void runOnAddAppInputChange(String inputUrl) {