From 0704dfe2ee0be9dca04c74a629fd1b64c9972c78 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Wed, 12 Apr 2023 15:17:08 -0400 Subject: [PATCH] Fixed relative link handling in HTML source --- lib/app_sources/html.dart | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 92ddc9d..92178bf 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -34,16 +34,20 @@ class HTML extends AppSource { var rel = links.last; var apkName = rel.split('/').last; var version = apkName.substring(0, apkName.length - 4); - List apkUrls = [rel] - .map((e) => e.toLowerCase().startsWith('http://') || - e.toLowerCase().startsWith('https://') - ? e - : e.startsWith('/') - ? '${uri.origin}/$e' - : uri.path.endsWith('.html') || uri.path.endsWith('.php') - ? '${uri.origin}/${uri.path.split('/').sublist(0, uri.path.split('/').length - 1).join('/')}/$e' - : '${uri.origin}/${uri.path}/$e') - .toList(); + List apkUrls = [rel].map((e) { + try { + Uri.parse(e).origin; + return e; + } catch (err) { + // is relative + } + var currPathSegments = uri.path.split('/'); + if (e.startsWith('/') || currPathSegments.isEmpty) { + return '${uri.origin}/$e'; + } else { + return '${uri.origin}/${currPathSegments.sublist(0, currPathSegments.length - 1).join('/')}/$e'; + } + }).toList(); return APKDetails( version, getApkUrlsFromUrls(apkUrls), AppNames(uri.host, tr('app'))); } else {