From cbdeaec676bb7c99758ad19debecc7cfa28992ed Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Thu, 26 Mar 2026 21:39:13 -0300 Subject: [PATCH] Use redirect on cdn --- .../package_manager/package_manager.dart | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/services/package_manager/package_manager.dart b/lib/services/package_manager/package_manager.dart index 417ae2f..3f5a59e 100644 --- a/lib/services/package_manager/package_manager.dart +++ b/lib/services/package_manager/package_manager.dart @@ -348,8 +348,7 @@ abstract class PackageManager extends StateNotifier { } } - final downloadUrl = target.urls.firstOrNull; - if (downloadUrl == null || downloadUrl.isEmpty) { + if (target.urls.firstOrNull == null || target.urls.firstOrNull!.isEmpty) { setOperation( appId, OperationFailed( @@ -387,9 +386,8 @@ abstract class PackageManager extends StateNotifier { // Queue items with staggered delays to prevent UI flood for (var i = 0; i < toQueue.length; i++) { final item = toQueue[i]; - final downloadUrl = item.target.urls.firstOrNull; - - if (downloadUrl == null || downloadUrl.isEmpty) { + if (item.target.urls.firstOrNull == null || + item.target.urls.firstOrNull!.isEmpty) { setOperation( item.appId, OperationFailed( @@ -706,6 +704,18 @@ abstract class PackageManager extends StateNotifier { // DOWNLOAD INTERNALS // ═══════════════════════════════════════════════════════════════════════════ + /// Returns the effective download URL for [target]. + /// + /// If the first URL is already on cdn.zapstore.dev it is used as-is. + /// Otherwise we route through the CDN redirect endpoint so that downloads + /// are tracked regardless of the original host (e.g. GitHub releases). + String? _resolveDownloadUrl(Installable target) { + final first = target.urls.firstOrNull; + if (first == null || first.isEmpty) return null; + if (Uri.tryParse(first)?.host == 'cdn.zapstore.dev') return first; + return 'https://cdn.zapstore.dev/${target.hash}?redirect=true'; + } + Future _startDownloadTask( String appId, Installable target, @@ -978,7 +988,7 @@ abstract class PackageManager extends StateNotifier { continue; } - final downloadUrl = op.target.urls.firstOrNull; + final downloadUrl = _resolveDownloadUrl(op.target); if (downloadUrl == null) { setOperation( appId,