From 6aa307372d030c2615880a911673eb9a52ea8284 Mon Sep 17 00:00:00 2001 From: jibedoubleve Date: Mon, 13 Nov 2023 17:51:52 +0100 Subject: [PATCH] (#384) Fix the invalid URI error --- .../Managers/PackagedAppValidator.cs | 26 ++++++++++++------- src/Lanceur/Views/KeywordsViewModel.cs | 15 ++++++++--- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/Lanceur.Infra/Managers/PackagedAppValidator.cs b/src/Lanceur.Infra/Managers/PackagedAppValidator.cs index ed649ea0..83a8aa25 100644 --- a/src/Lanceur.Infra/Managers/PackagedAppValidator.cs +++ b/src/Lanceur.Infra/Managers/PackagedAppValidator.cs @@ -46,6 +46,7 @@ public PackagedAppValidator(IPackagedAppSearchService searchService, IFavIconDow /// /// The alias to standardise /// Standardised alias + /// When the alias.FileName is not a valid URI public async Task FixAsync(AliasQueryResult alias) { if (alias is null) return default; @@ -56,15 +57,22 @@ public async Task FixAsync(AliasQueryResult alias) if (response is null) { - var uri = new Uri(alias.FileName); - - if (!await _favIconDownloader.CheckExistsAsync(new($"{uri.Scheme}://{uri.Host}"))) return alias; - - var output = Path.Combine(AppPaths.ImageCache, $"{AppPaths.FaviconPrefix}{uri.Host}.png"); - await _favIconDownloader.SaveToFileAsync(uri, output); - alias.Thumbnail = output; - alias.Icon = null; - return alias; + try + { + var uri = new Uri(alias.FileName); + + if (!await _favIconDownloader.CheckExistsAsync(new($"{uri.Scheme}://{uri.Host}"))) return alias; + + var output = Path.Combine(AppPaths.ImageCache, $"{AppPaths.FaviconPrefix}{uri.Host}.png"); + await _favIconDownloader.SaveToFileAsync(uri, output); + alias.Thumbnail = output; + alias.Icon = null; + return alias; + } + catch (UriFormatException ex) + { + throw new ApplicationException($"Create an URI from '{alias.FileName}' is impossible.", ex); + } } // This is a packaged app diff --git a/src/Lanceur/Views/KeywordsViewModel.cs b/src/Lanceur/Views/KeywordsViewModel.cs index 245731b9..0a5f7edb 100644 --- a/src/Lanceur/Views/KeywordsViewModel.cs +++ b/src/Lanceur/Views/KeywordsViewModel.cs @@ -158,9 +158,18 @@ private async Task OnSaveOrUpdateAliasAsync(AliasQueryResult a BusyMessage = "Saving alias..."; using (_busyScope.Open()) { - alias.SetName(); - alias = await _packagedAppValidator.FixAsync(alias); - _aliasService.SaveOrUpdate(ref alias); + try + { + alias.SetName(); + alias = await _packagedAppValidator.FixAsync(alias); + _aliasService.SaveOrUpdate(ref alias); + } + catch (ApplicationException ex) + { + _log.Warning(ex.Message); + _notify.Warning($"Error when {(created ? "creating" : "updating")} the alias: {ex.Message}"); + return alias; + } } _notification.Information($"Alias '{alias.Name}' {(created ? "created" : "updated")}.");