Skip to content

Commit 28e9200

Browse files
committed
Add URL provider notation to UrlInfo
1 parent 004d6a2 commit 28e9200

File tree

14 files changed

+70
-31
lines changed

14 files changed

+70
-31
lines changed

src/Umbraco.Cms.Api.Management/Factories/DocumentUrlFactory.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ public Task<IEnumerable<DocumentUrlInfoResponseModel>> CreatePreviewUrlSetsAsync
4949
private IEnumerable<DocumentUrlInfo> CreateDocumentUrlInfos(IEnumerable<UrlInfo> urlInfos)
5050
=> urlInfos
5151
.Where(urlInfo => urlInfo.Url is not null)
52-
.Select(urlInfo => new DocumentUrlInfo { Culture = urlInfo.Culture, Url = urlInfo.Url!.ToString(), Message = urlInfo.Message, IsExternal = urlInfo.IsExternal })
52+
.Select(urlInfo => new DocumentUrlInfo
53+
{
54+
Culture = urlInfo.Culture,
55+
Url = urlInfo.Url!.ToString(),
56+
Message = urlInfo.Message,
57+
IsExternal = urlInfo.IsExternal,
58+
Provider = urlInfo.Provider,
59+
})
5360
.ToArray();
5461
}

src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentUrlInfo.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Document;
55
public class DocumentUrlInfo : ContentUrlInfoBase
66
{
77
public required string? Message { get; init; }
8+
9+
public required string Provider { get; init; }
810
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Umbraco.Cms.Core;
2+
3+
public static partial class Constants
4+
{
5+
public static class UrlProviders
6+
{
7+
public static string Default = "umbDefaultProvider";
8+
}
9+
}

src/Umbraco.Core/Routing/AliasUrlProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
121121
{
122122
var path = "/" + alias;
123123
var uri = new Uri(path, UriKind.Relative);
124-
yield return UrlInfo.FromUri(_uriUtility.UriFromUmbraco(uri, _requestConfig));
124+
yield return UrlInfo.FromUri(_uriUtility.UriFromUmbraco(uri, _requestConfig), Constants.UrlProviders.Default);
125125
}
126126
}
127127
else
@@ -153,7 +153,7 @@ public IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
153153
{
154154
var path = "/" + alias;
155155
var uri = new Uri(CombinePaths(domainUri.Uri.GetLeftPart(UriPartial.Authority), path));
156-
yield return UrlInfo.FromUri(_uriUtility.UriFromUmbraco(uri, _requestConfig), domainUri.Culture);
156+
yield return UrlInfo.FromUri(_uriUtility.UriFromUmbraco(uri, _requestConfig), Constants.UrlProviders.Default, domainUri.Culture);
157157
}
158158
}
159159
}

src/Umbraco.Core/Routing/DefaultMediaUrlProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public DefaultMediaUrlProvider(MediaUrlGeneratorCollection mediaPathGenerators,
3939
if (_mediaPathGenerators.TryGetMediaPath(propType?.EditorAlias, value, out var path))
4040
{
4141
Uri url = _urlAssembler.AssembleUrl(path!, current, mode);
42-
return UrlInfo.FromUri(url, culture);
42+
return UrlInfo.FromUri(url, Constants.UrlProviders.Default, culture);
4343
}
4444

4545
return null;

src/Umbraco.Core/Routing/DefaultUrlProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
137137

138138
var uri = new Uri(CombinePaths(d.Uri.GetLeftPart(UriPartial.Path), path));
139139
uri = _uriUtility.UriFromUmbraco(uri, _requestSettings);
140-
yield return UrlInfo.FromUri(uri, culture);
140+
yield return UrlInfo.FromUri(uri, Constants.UrlProviders.Default, culture);
141141
}
142142
}
143143

@@ -198,7 +198,7 @@ public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
198198
culture.Equals(defaultCulture, StringComparison.InvariantCultureIgnoreCase))
199199
{
200200
Uri url = AssembleUrl(domainUri, path, current, mode);
201-
return UrlInfo.FromUri(url, culture);
201+
return UrlInfo.FromUri(url, Constants.UrlProviders.Default, culture);
202202
}
203203

204204
return null;

src/Umbraco.Core/Routing/NewDefaultUrlProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
134134

135135
var uri = new Uri(CombinePaths(d.Uri.GetLeftPart(UriPartial.Path), path));
136136
uri = _uriUtility.UriFromUmbraco(uri, _requestSettings);
137-
yield return UrlInfo.FromUri(uri, culture);
137+
yield return UrlInfo.FromUri(uri, Constants.UrlProviders.Default, culture);
138138
}
139139
}
140140

141141
#region GetPreviewUrls
142142

143143
/// <inheritdoc />
144144
public IEnumerable<UrlInfo> GetPreviewUrls(IContent content) => [
145-
UrlInfo.AsUrl($"/{Constants.System.UmbracoPathSegment}/preview?id={content.Key}")
145+
UrlInfo.AsUrl($"/{Constants.System.UmbracoPathSegment}/preview?id={content.Key}", Constants.UrlProviders.Default)
146146
];
147147

148148
#endregion
@@ -232,7 +232,7 @@ private string GetLegacyRouteFormatById(Guid key, string? culture)
232232
culture.Equals(defaultCulture, StringComparison.InvariantCultureIgnoreCase))
233233
{
234234
Uri url = AssembleUrl(domainUri, path, current, mode);
235-
return UrlInfo.FromUri(url, culture);
235+
return UrlInfo.FromUri(url, Constants.UrlProviders.Default, culture);
236236
}
237237

238238
return null;

src/Umbraco.Core/Routing/PublishedUrlInfoProvider.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public async Task<ISet<UrlInfo>> GetAllAsync(IContent content)
5252
// Handle "could not get URL"
5353
if (url is "#" or "#ex")
5454
{
55-
urlInfos.Add(UrlInfo.AsMessage(_localizedTextService.Localize("content", "getUrlException"), culture));
55+
urlInfos.Add(UrlInfo.AsMessage(_localizedTextService.Localize("content", "getUrlException"), Constants.UrlProviders.Default, culture));
5656
continue;
5757
}
5858

@@ -65,7 +65,7 @@ public async Task<ISet<UrlInfo>> GetAllAsync(IContent content)
6565
continue;
6666
}
6767

68-
urlInfos.Add(UrlInfo.AsUrl(url, culture));
68+
urlInfos.Add(UrlInfo.AsUrl(url, Constants.UrlProviders.Default, culture));
6969
}
7070

7171
// If the content is trashed, we can't get the other URLs, as we have no parent structure to navigate through.
@@ -105,7 +105,7 @@ public async Task<ISet<UrlInfo>> GetAllAsync(IContent content)
105105
_logger.LogDebug(logMsg, url, uri, culture);
106106
}
107107

108-
var urlInfo = UrlInfo.AsMessage(_localizedTextService.Localize("content", "routeErrorCannotRoute"), culture);
108+
var urlInfo = UrlInfo.AsMessage(_localizedTextService.Localize("content", "routeErrorCannotRoute"), Constants.UrlProviders.Default, culture);
109109
return Attempt.Succeed(urlInfo);
110110
}
111111

@@ -118,7 +118,7 @@ public async Task<ISet<UrlInfo>> GetAllAsync(IContent content)
118118
{
119119
var collidingContent = publishedRequest.PublishedContent?.Key.ToString();
120120

121-
var urlInfo = UrlInfo.AsMessage(_localizedTextService.Localize("content", "routeError", [collidingContent]), culture);
121+
var urlInfo = UrlInfo.AsMessage(_localizedTextService.Localize("content", "routeError", [collidingContent]), Constants.UrlProviders.Default, culture);
122122
return Attempt.Succeed(urlInfo);
123123
}
124124

src/Umbraco.Core/Routing/UrlInfo.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,15 @@ public class UrlInfo : IEquatable<UrlInfo>
1212
/// <summary>
1313
/// Initializes a new instance of the <see cref="UrlInfo" /> class.
1414
/// </summary>
15-
public UrlInfo(Uri url, string? culture, string? message = null, bool isExternal = false)
15+
public UrlInfo(Uri url, string provider, string? culture, string? message = null, bool isExternal = false)
1616
{
17+
if (provider.IsNullOrWhiteSpace())
18+
{
19+
throw new ArgumentException("Value cannot be null or whitespace.", nameof(provider));
20+
}
21+
1722
Url = url;
23+
Provider = provider;
1824
Culture = culture;
1925
Message = message;
2026
IsExternal = isExternal;
@@ -23,26 +29,32 @@ public UrlInfo(Uri url, string? culture, string? message = null, bool isExternal
2329
/// <summary>
2430
/// Initializes a new instance of the <see cref="UrlInfo" /> class as a "message only" - that is, not an actual URL.
2531
/// </summary>
26-
public UrlInfo(string message, string? culture = null)
32+
public UrlInfo(string message, string provider, string? culture = null)
2733
{
2834
if (message.IsNullOrWhiteSpace())
2935
{
3036
throw new ArgumentException("Value cannot be null or whitespace.", nameof(message));
3137
}
3238

39+
if (provider.IsNullOrWhiteSpace())
40+
{
41+
throw new ArgumentException("Value cannot be null or whitespace.", nameof(provider));
42+
}
43+
3344
Url = null;
45+
Provider = provider;
3446
Message = message;
3547
Culture = culture;
3648
}
3749

38-
public static UrlInfo AsUrl(string url, string? culture = null, bool isExternal = false)
39-
=> new(new Uri(url, UriKind.RelativeOrAbsolute), culture: culture, isExternal: isExternal);
50+
public static UrlInfo AsUrl(string url, string provider, string? culture = null, bool isExternal = false)
51+
=> new(new Uri(url, UriKind.RelativeOrAbsolute), provider, culture: culture, isExternal: isExternal);
4052

41-
public static UrlInfo AsMessage(string message, string? culture = null)
42-
=> new(message, culture);
53+
public static UrlInfo AsMessage(string message, string provider, string? culture = null)
54+
=> new(message, provider, culture: culture);
4355

44-
public static UrlInfo FromUri(Uri uri, string? culture = null, bool isExternal = false)
45-
=> new(uri, culture: culture, isExternal: isExternal);
56+
public static UrlInfo FromUri(Uri uri, string provider, string? culture = null, bool isExternal = false)
57+
=> new(uri, provider, culture: culture, isExternal: isExternal);
4658

4759
/// <summary>
4860
/// Gets the culture.
@@ -56,6 +68,8 @@ public static UrlInfo FromUri(Uri uri, string? culture = null, bool isExternal =
5668
[DataMember(Name = "url")]
5769
public Uri? Url { get; }
5870

71+
public string Provider { get; }
72+
5973
/// <summary>
6074
/// Gets the message.
6175
/// </summary>

src/Umbraco.Core/Routing/UrlProviderExtensions.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public static async Task<IEnumerable<UrlInfo>> GetContentUrlsAsync(
5050

5151
if (content.Published == false)
5252
{
53-
result.Add(UrlInfo.AsMessage(textService.Localize("content", "itemNotPublished")));
53+
result.Add(UrlInfo.AsMessage(textService.Localize("content", "itemNotPublished"), Constants.UrlProviders.Default));
5454
return result;
5555
}
5656

@@ -155,7 +155,7 @@ private static async Task<IEnumerable<UrlInfo>> GetContentUrlsByCultureAsync(
155155

156156
// deal with exceptions
157157
case "#ex":
158-
result.Add(UrlInfo.AsMessage(textService.Localize("content", "getUrlException"), culture));
158+
result.Add(UrlInfo.AsMessage(textService.Localize("content", "getUrlException"), Constants.UrlProviders.Default, culture));
159159
break;
160160

161161
// got a URL, deal with collisions, add URL
@@ -168,7 +168,7 @@ private static async Task<IEnumerable<UrlInfo>> GetContentUrlsByCultureAsync(
168168
}
169169
else
170170
{
171-
result.Add(UrlInfo.AsUrl(url, culture));
171+
result.Add(UrlInfo.AsUrl(url, Constants.UrlProviders.Default, culture));
172172
}
173173

174174
break;
@@ -193,18 +193,19 @@ private static UrlInfo HandleCouldNotGetUrl(IContent content, string culture, IC
193193
if (parent == null)
194194
{
195195
// oops, internal error
196-
return UrlInfo.AsMessage(textService.Localize("content", "parentNotPublishedAnomaly"), culture);
196+
return UrlInfo.AsMessage(textService.Localize("content", "parentNotPublishedAnomaly"), Constants.UrlProviders.Default, culture);
197197
}
198198

199199
if (!parent.Published)
200200
{
201201
// totally not published
202-
return UrlInfo.AsMessage(textService.Localize("content", "parentNotPublished", new[] { parent.Name }), culture);
202+
return UrlInfo.AsMessage(textService.Localize("content", "parentNotPublished", new[] { parent.Name }), Constants.UrlProviders.Default, culture);
203203
}
204204

205205
// culture not published
206206
return UrlInfo.AsMessage(
207207
textService.Localize("content", "parentCultureNotPublished", new[] { parent.Name }),
208+
Constants.UrlProviders.Default,
208209
culture);
209210
}
210211

@@ -242,7 +243,7 @@ private static UrlInfo HandleCouldNotGetUrl(IContent content, string culture, IC
242243
logger.LogDebug(logMsg, url, uri, culture);
243244
}
244245

245-
var urlInfo = UrlInfo.AsMessage(textService.Localize("content", "routeErrorCannotRoute"), culture);
246+
var urlInfo = UrlInfo.AsMessage(textService.Localize("content", "routeErrorCannotRoute"), Constants.UrlProviders.Default, culture);
246247
return Attempt.Succeed(urlInfo);
247248
}
248249

@@ -264,7 +265,7 @@ private static UrlInfo HandleCouldNotGetUrl(IContent content, string culture, IC
264265
l.Reverse();
265266
var s = "/" + string.Join("/", l) + " (id=" + pcr.PublishedContent?.Id + ")";
266267

267-
var urlInfo = UrlInfo.AsMessage(textService.Localize("content", "routeError", new[] { s }), culture);
268+
var urlInfo = UrlInfo.AsMessage(textService.Localize("content", "routeError", new[] { s }), Constants.UrlProviders.Default, culture);
268269
return Attempt.Succeed(urlInfo);
269270
}
270271

0 commit comments

Comments
 (0)