diff --git a/kDrive/UI/Controller/Files/Preview/PreviewViewController.swift b/kDrive/UI/Controller/Files/Preview/PreviewViewController.swift index 57bd00d1d..180a52441 100644 --- a/kDrive/UI/Controller/Files/Preview/PreviewViewController.swift +++ b/kDrive/UI/Controller/Files/Preview/PreviewViewController.swift @@ -548,10 +548,23 @@ final class PreviewViewController: UIViewController, PreviewContentCellDelegate, return } + downloadFile(at: indexPath) + } + + private func downloadFile(at indexPath: IndexPath) { if let publicShareProxy = driveFileManager.publicShareProxy { downloadPublicShareFile(at: indexPath, publicShareProxy: publicShareProxy) } else { - downloadFile(at: indexPath) + DownloadQueue.instance.temporaryDownload( + file: currentFile, + userId: accountManager.currentUserId, + onOperationCreated: { operation in + self.trackOperationCreated(at: indexPath, downloadOperation: operation) + }, + completion: { error in + self.downloadCompletion(at: indexPath, error: error) + } + ) } } @@ -568,19 +581,6 @@ final class PreviewViewController: UIViewController, PreviewContentCellDelegate, ) } - private func downloadFile(at indexPath: IndexPath) { - DownloadQueue.instance.temporaryDownload( - file: currentFile, - userId: accountManager.currentUserId, - onOperationCreated: { operation in - self.trackOperationCreated(at: indexPath, downloadOperation: operation) - }, - completion: { error in - self.downloadCompletion(at: indexPath, error: error) - } - ) - } - private func trackOperationCreated(at indexPath: IndexPath, downloadOperation: DownloadAuthenticatedOperation?) { Task { @MainActor [weak self] in guard let self else { diff --git a/kDriveCore/AudioPlayer/SingleTrackPlayer.swift b/kDriveCore/AudioPlayer/SingleTrackPlayer.swift index 6e1a4dd99..2497511fe 100644 --- a/kDriveCore/AudioPlayer/SingleTrackPlayer.swift +++ b/kDriveCore/AudioPlayer/SingleTrackPlayer.swift @@ -106,27 +106,39 @@ public final class SingleTrackPlayer: Pausable { Task { await setMetaData(from: asset.commonMetadata, playableFileName: playableFile.name) } + } else if let publicShareProxy = driveFileManager.publicShareProxy { + let url = Endpoint.downloadShareLinkFile( + driveId: publicShareProxy.driveId, + linkUuid: publicShareProxy.shareLinkUid, + fileId: playableFile.id + ).url + let asset = AVURLAsset(url: url) + setupStreamingAsset(asset, fileName: playableFile.name) } else if let token = driveFileManager.apiFetcher.currentToken { driveFileManager.apiFetcher.performAuthenticatedRequest(token: token) { token, _ in guard let token else { return } - Task { @MainActor in - let url = Endpoint.download(file: playableFile).url - let headers = ["Authorization": "Bearer \(token.accessToken)"] - let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers]) - self.player = AVPlayer(playerItem: AVPlayerItem(asset: asset)) - await self.setMetaData(from: asset.commonMetadata, playableFileName: playableFile.name) - self.setUpObservers() - - self.currentItemStatusObserver = self.player?.observe(\.currentItem?.status) { _, _ in - self.handleItemStatusChange() - } - } + let url = Endpoint.download(file: playableFile).url + let headers = ["Authorization": "Bearer \(token.accessToken)"] + let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers]) + self.setupStreamingAsset(asset, fileName: playableFile.name) } } else { onPlaybackError.send(.previewLoadErrorNoToken) } } + private func setupStreamingAsset(_ urlAsset: AVURLAsset, fileName: String) { + Task { @MainActor in + player = AVPlayer(playerItem: AVPlayerItem(asset: urlAsset)) + await setMetaData(from: urlAsset.commonMetadata, playableFileName: fileName) + setUpObservers() + + currentItemStatusObserver = player?.observe(\.currentItem?.status) { _, _ in + self.handleItemStatusChange() + } + } + } + public func reset() { removeAllObservers() player?.pause()