diff --git a/Sources/NextcloudFileProviderKit/Metadata/ItemMetadata.swift b/Sources/NextcloudFileProviderKit/Metadata/ItemMetadata.swift index 53c7d04d..dc27e8ea 100644 --- a/Sources/NextcloudFileProviderKit/Metadata/ItemMetadata.swift +++ b/Sources/NextcloudFileProviderKit/Metadata/ItemMetadata.swift @@ -162,15 +162,18 @@ public extension ItemMetadata { guard hasPreview else { return nil } - - let urlBase = urlBase.urlEncoded! - // Leave the leading slash in webdavUrl - let webdavUrl = urlBase + Account.webDavFilesUrlSuffix + user - let serverFileRelativeUrl = - serverUrl.replacingOccurrences(of: webdavUrl, with: "") + "/" + fileName - - let urlString = - "\(urlBase)/index.php/core/preview.png?file=\(serverFileRelativeUrl)&x=\(size.width)&y=\(size.height)&a=1&mode=cover" - return URL(string: urlString) + guard #available(macOS 13.0, iOS 16.0, visionOS 1.0, *) else { + return URL( + string: "\(urlBase.urlEncoded ?? "")/index.php/core/preview?fileId=\(fileId)&x=\(size.width)&y=\(size.height)&a=true" + ) + } + return URL(string: urlBase.urlEncoded ?? "")? + .appending(components: "index.php", "core", "preview") + .appending(queryItems: [ + .init(name: "fileId", value: fileId), + .init(name: "x", value: "\(size.width)"), + .init(name: "y", value: "\(size.height)"), + .init(name: "a", value: "true") + ]) } } diff --git a/Tests/NextcloudFileProviderKitTests/ItemMetadataTests.swift b/Tests/NextcloudFileProviderKitTests/ItemMetadataTests.swift new file mode 100644 index 00000000..4ba3b3f3 --- /dev/null +++ b/Tests/NextcloudFileProviderKitTests/ItemMetadataTests.swift @@ -0,0 +1,23 @@ +// +// ItemMetadataTests.swift +// NextcloudFileProviderKit +// +// Created by Claudio Cambra on 23/5/25. +// + +import Foundation +import Testing +@testable import NextcloudFileProviderKit + +struct ItemMetadataTests { + @Test func thumbnailUrlCorrect() { + let account = + Account(user: "user", id: "id", serverUrl: "https://examplecloud.com", password: "bla") + var item = SendableItemMetadata(ocId: "ec-test", fileName: "test.txt", account: account) + item.fileId = "test" + item.hasPreview = true + let expectedUrl = URL(string: "https://examplecloud.com/index.php/core/preview?fileId=test&x=250.0&y=250.0&a=true") + #expect(expectedUrl != nil) + #expect(item.thumbnailUrl(size: .init(width: 250, height: 250)) == expectedUrl) + } +}