Skip to content

Commit 13e368c

Browse files
authored
Cleaned up constructors, regions and variables in NewDefaultUrlProvider (#19403)
Cleaned up constructors, regions and variables in NewDefaultUrlProvider.
1 parent e6967a4 commit 13e368c

File tree

1 file changed

+61
-26
lines changed

1 file changed

+61
-26
lines changed

src/Umbraco.Core/Routing/NewDefaultUrlProvider.cs

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,54 +15,102 @@
1515
namespace Umbraco.Cms.Core.Routing;
1616

1717
/// <summary>
18-
/// Provides urls.
18+
/// Provides URLs.
1919
/// </summary>
2020
public class NewDefaultUrlProvider : IUrlProvider
2121
{
22-
private readonly ILocalizationService _localizationService;
2322
private readonly IPublishedContentCache _publishedContentCache;
2423
private readonly IDomainCache _domainCache;
2524
private readonly IIdKeyMap _idKeyMap;
2625
private readonly IDocumentUrlService _documentUrlService;
2726
private readonly IDocumentNavigationQueryService _navigationQueryService;
2827
private readonly IPublishedContentStatusFilteringService _publishedContentStatusFilteringService;
29-
private readonly ILocalizedTextService? _localizedTextService;
3028
private readonly ILogger<DefaultUrlProvider> _logger;
3129
private readonly ISiteDomainMapper _siteDomainMapper;
3230
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
3331
private readonly UriUtility _uriUtility;
3432
private RequestHandlerSettings _requestSettings;
33+
private readonly ILanguageService _languageService;
3534

35+
// TODO (V17): When removing the obsolete constructors, remove the unused localizationService parameter from the constructor (we can't do it now
36+
// because it is used in the obsolete constructors and leads to an ambigious constructor error).
37+
// See also if we can make GetUrlFromRoute asynchronous and avoid the GetAwaiter().GetResult() in when using ILanguageService.
38+
39+
/// <summary>
40+
/// Initializes a new instance of the <see cref="NewDefaultUrlProvider"/> class.
41+
/// </summary>
3642
public NewDefaultUrlProvider(
3743
IOptionsMonitor<RequestHandlerSettings> requestSettings,
3844
ILogger<DefaultUrlProvider> logger,
3945
ISiteDomainMapper siteDomainMapper,
4046
IUmbracoContextAccessor umbracoContextAccessor,
4147
UriUtility uriUtility,
48+
#pragma warning disable CS0618 // Type or member is obsolete
49+
#pragma warning disable IDE0060 // Remove unused parameter
4250
ILocalizationService localizationService,
51+
#pragma warning restore IDE0060 // Remove unused parameter
52+
#pragma warning restore CS0618 // Type or member is obsolete
4353
IPublishedContentCache publishedContentCache,
4454
IDomainCache domainCache,
4555
IIdKeyMap idKeyMap,
4656
IDocumentUrlService documentUrlService,
4757
IDocumentNavigationQueryService navigationQueryService,
48-
IPublishedContentStatusFilteringService publishedContentStatusFilteringService)
58+
IPublishedContentStatusFilteringService publishedContentStatusFilteringService,
59+
ILanguageService languageService)
4960
{
5061
_requestSettings = requestSettings.CurrentValue;
5162
_logger = logger;
5263
_siteDomainMapper = siteDomainMapper;
5364
_umbracoContextAccessor = umbracoContextAccessor;
5465
_uriUtility = uriUtility;
55-
_localizationService = localizationService;
5666
_publishedContentCache = publishedContentCache;
5767
_domainCache = domainCache;
5868
_idKeyMap = idKeyMap;
5969
_documentUrlService = documentUrlService;
6070
_navigationQueryService = navigationQueryService;
6171
_publishedContentStatusFilteringService = publishedContentStatusFilteringService;
72+
_languageService = languageService;
6273

6374
requestSettings.OnChange(x => _requestSettings = x);
6475
}
6576

77+
/// <summary>
78+
/// Initializes a new instance of the <see cref="NewDefaultUrlProvider"/> class.
79+
/// </summary>
80+
[Obsolete("Use the non-obsolete constructor. Scheduled for removal in V17.")]
81+
public NewDefaultUrlProvider(
82+
IOptionsMonitor<RequestHandlerSettings> requestSettings,
83+
ILogger<DefaultUrlProvider> logger,
84+
ISiteDomainMapper siteDomainMapper,
85+
IUmbracoContextAccessor umbracoContextAccessor,
86+
UriUtility uriUtility,
87+
ILocalizationService localizationService,
88+
IPublishedContentCache publishedContentCache,
89+
IDomainCache domainCache,
90+
IIdKeyMap idKeyMap,
91+
IDocumentUrlService documentUrlService,
92+
IDocumentNavigationQueryService navigationQueryService,
93+
IPublishedContentStatusFilteringService publishedContentStatusFilteringService)
94+
: this(
95+
requestSettings,
96+
logger,
97+
siteDomainMapper,
98+
umbracoContextAccessor,
99+
uriUtility,
100+
localizationService,
101+
publishedContentCache,
102+
domainCache,
103+
idKeyMap,
104+
documentUrlService,
105+
navigationQueryService,
106+
publishedContentStatusFilteringService,
107+
StaticServiceProvider.Instance.GetRequiredService<ILanguageService>())
108+
{
109+
}
110+
111+
/// <summary>
112+
/// Initializes a new instance of the <see cref="NewDefaultUrlProvider"/> class.
113+
/// </summary>
66114
[Obsolete("Use the non-obsolete constructor. Scheduled for removal in V17.")]
67115
public NewDefaultUrlProvider(
68116
IOptionsMonitor<RequestHandlerSettings> requestSettings,
@@ -92,8 +140,6 @@ public NewDefaultUrlProvider(
92140
{
93141
}
94142

95-
#region GetOtherUrls
96-
97143
/// <summary>
98144
/// Gets the other URLs of a published content.
99145
/// </summary>
@@ -108,14 +154,14 @@ public NewDefaultUrlProvider(
108154
/// </remarks>
109155
public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
110156
{
111-
var keyAttempt = _idKeyMap.GetKeyForId(id, UmbracoObjectTypes.Document);
157+
Attempt<Guid> keyAttempt = _idKeyMap.GetKeyForId(id, UmbracoObjectTypes.Document);
112158

113159
if (keyAttempt.Success is false)
114160
{
115161
yield break;
116162
}
117163

118-
var key = keyAttempt.Result;
164+
Guid key = keyAttempt.Result;
119165

120166
IPublishedContent? node = _publishedContentCache.GetById(key);
121167
if (node == null)
@@ -156,7 +202,7 @@ public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
156202

157203
// need to strip off the leading ID for the route if it exists (occurs if the route is for a node with a domain assigned)
158204
var pos = route.IndexOf('/', StringComparison.Ordinal);
159-
var path = pos == 0 ? route : route.Substring(pos);
205+
var path = pos == 0 ? route : route[pos..];
160206

161207
var uri = new Uri(CombinePaths(d.Uri.GetLeftPart(UriPartial.Path), path));
162208
uri = _uriUtility.UriFromUmbraco(uri, _requestSettings);
@@ -178,17 +224,9 @@ public virtual IEnumerable<UrlInfo> GetOtherUrls(int id, Uri current)
178224
private string GetLegacyRouteFormatById(Guid key, string? culture)
179225
{
180226
var isDraft = _umbracoContextAccessor.GetRequiredUmbracoContext().InPreviewMode;
181-
182-
183227
return _documentUrlService.GetLegacyRouteFormat(key, culture, isDraft);
184-
185-
186228
}
187229

188-
#endregion
189-
190-
#region GetUrl
191-
192230
/// <inheritdoc />
193231
public virtual UrlInfo? GetUrl(IPublishedContent content, UrlMode mode, string? culture, Uri current)
194232
{
@@ -217,6 +255,9 @@ private string GetLegacyRouteFormatById(Guid key, string? culture)
217255
return GetUrlFromRoute(route, content.Id, current, mode, culture);
218256
}
219257

258+
/// <summary>
259+
/// Gets the URL from the provided route.
260+
/// </summary>
220261
internal UrlInfo? GetUrlFromRoute(
221262
string? route,
222263
int id,
@@ -226,7 +267,7 @@ private string GetLegacyRouteFormatById(Guid key, string? culture)
226267
{
227268
if (string.IsNullOrWhiteSpace(route) || route.Equals("#"))
228269
{
229-
if (_logger.IsEnabled(Microsoft.Extensions.Logging.LogLevel.Debug))
270+
if (_logger.IsEnabled(LogLevel.Debug))
230271
{
231272
_logger.LogDebug(
232273
"Couldn't find any page with nodeId={NodeId}. This is most likely caused by the page not being published.",
@@ -248,7 +289,7 @@ private string GetLegacyRouteFormatById(Guid key, string? culture)
248289
current,
249290
culture);
250291

251-
var defaultCulture = _localizationService.GetDefaultLanguageIsoCode();
292+
var defaultCulture = _languageService.GetDefaultIsoCodeAsync().GetAwaiter().GetResult();
252293
if (domainUri is not null ||
253294
string.IsNullOrEmpty(culture) ||
254295
culture.Equals(defaultCulture, StringComparison.InvariantCultureIgnoreCase))
@@ -260,10 +301,6 @@ private string GetLegacyRouteFormatById(Guid key, string? culture)
260301
return null;
261302
}
262303

263-
#endregion
264-
265-
#region Utilities
266-
267304
private Uri AssembleUrl(DomainAndUri? domainUri, string path, Uri current, UrlMode mode)
268305
{
269306
Uri uri;
@@ -331,6 +368,4 @@ private string CombinePaths(string path1, string path2)
331368
var path = path1.TrimEnd(Constants.CharArrays.ForwardSlash) + path2;
332369
return path == "/" ? path : path.TrimEnd(Constants.CharArrays.ForwardSlash);
333370
}
334-
335-
#endregion
336371
}

0 commit comments

Comments
 (0)