diff --git a/ImmichFrame.Core/Api/ImmichApi.cs b/ImmichFrame.Core/Api/ImmichApi.cs index 49edb490..ca0bc6b3 100644 --- a/ImmichFrame.Core/Api/ImmichApi.cs +++ b/ImmichFrame.Core/Api/ImmichApi.cs @@ -41,5 +41,29 @@ public async Task PlayAssetVideoWithRangeAsync(Guid id, string ran response.Dispose(); throw new ApiException($"Unexpected status code ({status}).", status, error, headers, null); } + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder) + { + var url = urlBuilder.ToString(); + + var parts = url.Split('?', 2); + var path = parts[0]; + var query = parts.Length > 1 ? parts[1] : string.Empty; + + var isAlbumsEndpoint = path.EndsWith("/albums", StringComparison.OrdinalIgnoreCase) || path.Contains("/albums/", StringComparison.OrdinalIgnoreCase); + + if (isAlbumsEndpoint) + { + var hasSharedKey = query + .Split('&', StringSplitOptions.RemoveEmptyEntries) + .Select(p => p.Split('=', 2)[0]) + .Any(k => string.Equals(k, "shared", StringComparison.OrdinalIgnoreCase)); + + if (!hasSharedKey) + { + string separator = query.Length > 0 ? "&" : "?"; + urlBuilder.Append($"{separator}shared=true"); + } + } + } } }