From ab8f54c4e927f6cdc7dda4a66620446908b344b5 Mon Sep 17 00:00:00 2001 From: Bruno Date: Tue, 24 Feb 2026 01:24:59 +0000 Subject: [PATCH] fix: Parse channel information from snapcraft.io Closes: https://github.com/ubuntu/app-center/issues/1982 --- packages/app_center/lib/store/store_providers.dart | 10 ++++++++-- packages/app_center/lib/store/store_routes.dart | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/app_center/lib/store/store_providers.dart b/packages/app_center/lib/store/store_providers.dart index a1176f839..a658fd6db 100644 --- a/packages/app_center/lib/store/store_providers.dart +++ b/packages/app_center/lib/store/store_providers.dart @@ -38,9 +38,15 @@ String? _parseRoute(List? args) { try { if (args?.firstOrNull?.startsWith(_kUrlPrefix) ?? false) { - final snap = args!.first.split(_kUrlPrefix)[1]; + final uri = Uri.parse(args!.first); + final snap = uri.host; if (snap.isNotEmpty) { - return StoreRoutes.namedSnap(name: snap); + final channel = uri.queryParameters['channel']; + if (channel != null) { + return StoreRoutes.namedSnap(name: snap, channel: channel); + } else { + return StoreRoutes.namedSnap(name: snap); + } } } diff --git a/packages/app_center/lib/store/store_routes.dart b/packages/app_center/lib/store/store_routes.dart index 9203c5621..92e01da6b 100644 --- a/packages/app_center/lib/store/store_routes.dart +++ b/packages/app_center/lib/store/store_routes.dart @@ -33,6 +33,9 @@ abstract class StoreRoutes { static String? queryOf(RouteSettings route) => Uri.parse(route.name ?? '').queryParameters['query']; + static String? channelOf(RouteSettings route) => + Uri.parse(route.name ?? '').queryParameters['channel']; + static List gstResourcesOf(RouteSettings route) => (Uri.parse(route.name ?? '').queryParametersAll['resources'] ?? []) .map((item) => item.split('|')) @@ -52,8 +55,11 @@ abstract class StoreRoutes { return namedRoute(StoreRoutes.localDeb, {'local-deb': path}); } - static String namedSnap({required String name}) { - return namedRoute(StoreRoutes.snap, {'snap': name}); + static String namedSnap({required String name, String? channel}) { + return namedRoute(StoreRoutes.snap, { + 'snap': name, + if (channel != null) 'channel': channel, + }); } static String namedSearch({String? query, String? category}) {