Skip to content

Commit

Permalink
refactor: Feedbacks and remove unused code
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthieu-dgl committed Dec 2, 2024
1 parent 6e1da02 commit 8722a62
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 28 deletions.
7 changes: 0 additions & 7 deletions kDrive/UI/View/Files/Preview/VideoCollectionViewCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class VideoCollectionViewCell: PreviewCollectionViewCell {
weak var parentViewController: UIViewController?
weak var floatingPanelController: FloatingPanelController?

private var playableFileName: String?
private var previewDownloadTask: Kingfisher.DownloadTask?
private var file: File!
private var videoPlayer: VideoPlayer?
Expand All @@ -63,17 +62,11 @@ class VideoCollectionViewCell: PreviewCollectionViewCell {
assert(file.realm == nil || file.isFrozen, "File must be thread safe at this point")

self.file = file
playableFileName = file.name
file.getThumbnail { preview, hasThumbnail in
self.previewFrameImageView.image = hasThumbnail ? preview : nil
}
Task { @MainActor in
videoPlayer = VideoPlayer(frozenFile: file, driveFileManager: driveFileManager)
guard let videoPlayer else { return }
videoPlayer.setNowPlayingMetadata()
videoPlayer.onPlaybackEnded = { [weak self] in
self?.videoPlayer?.setNowPlayingMetadata()
}
}
}

Expand Down
8 changes: 3 additions & 5 deletions kDriveCore/AudioPlayer/MediaMetadata.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,14 @@ public struct MediaMetadata {
}

public extension MediaMetadata {
static func extractTrackMetadata(from url: URL) async -> MediaMetadata {
static func extractTrackMetadata(from url: URL, playableFileName: String?) async -> MediaMetadata {
let asset = AVAsset(url: url)

var title = KDriveResourcesStrings.Localizable.unknownTitle
var title = playableFileName ?? KDriveResourcesStrings.Localizable.unknownTitle
var artist = KDriveResourcesStrings.Localizable.unknownArtist
var artwork: UIImage?

let metadata = asset.commonMetadata

for item in metadata {
for item in asset.commonMetadata {
guard let commonKey = item.commonKey else { continue }

switch commonKey {
Expand Down
13 changes: 7 additions & 6 deletions kDriveCore/AudioPlayer/SingleTrackPlayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@ public final class SingleTrackPlayer {
if !playableFile.isLocalVersionOlderThanRemote {
player = AVPlayer(url: playableFile.localUrl)
Task { @MainActor in
currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: playableFile.localUrl)
await onCurrentTrackMetadata.send(MediaMetadata.extractTrackMetadata(from: playableFile.localUrl))
await setMetaData(url: playableFile.localUrl, playableFileName: playableFile.name)
}
setUpObservers()
} else if let token = driveFileManager.apiFetcher.currentToken {
Expand All @@ -108,10 +107,7 @@ public final class SingleTrackPlayer {
let headers = ["Authorization": "Bearer \(token.accessToken)"]
let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
Task { @MainActor in
self.currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: asset.url)
await self.onCurrentTrackMetadata.send(MediaMetadata.extractTrackMetadata(
from: asset.url
))
await self.setMetaData(url: asset.url, playableFileName: playableFile.name)
self.player = AVPlayer(playerItem: AVPlayerItem(asset: asset))
self.setUpObservers()
}
Expand All @@ -131,6 +127,11 @@ public final class SingleTrackPlayer {
playerState = .stopped
}

private func setMetaData(url: URL, playableFileName: String?) async {
currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: url, playableFileName: playableFileName)
await onCurrentTrackMetadata.send(MediaMetadata.extractTrackMetadata(from: url, playableFileName: playableFileName))
}

// MARK: - MediaPlayer

private func setNowPlayingMetadata() {
Expand Down
24 changes: 14 additions & 10 deletions kDriveCore/VideoPlayer/VideoPlayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,16 @@ public final class VideoPlayer {
setupPlayer(with: frozenFile, driveFileManager: driveFileManager)
}

public func setNowPlayingMetadata() {
public func setNowPlayingMetadata(metadata: MediaMetadata) {
var nowPlayingInfo = [String: Any]()
nowPlayingInfo[MPNowPlayingInfoPropertyMediaType] = MPNowPlayingInfoMediaType.video.rawValue
nowPlayingInfo[MPNowPlayingInfoPropertyIsLiveStream] = false

if let currentTrackMetadata {
nowPlayingInfo[MPMediaItemPropertyTitle] = currentTrackMetadata.title
nowPlayingInfo[MPMediaItemPropertyArtist] = currentTrackMetadata.artist
if let artwork = currentTrackMetadata.artwork {
let artworkItem = MPMediaItemArtwork(boundsSize: artwork.size) { _ in artwork }
nowPlayingInfo[MPMediaItemPropertyArtwork] = artworkItem
}
nowPlayingInfo[MPMediaItemPropertyTitle] = metadata.title
nowPlayingInfo[MPMediaItemPropertyArtist] = metadata.artist
if let artwork = metadata.artwork {
let artworkItem = MPMediaItemArtwork(boundsSize: artwork.size) { _ in artwork }
nowPlayingInfo[MPMediaItemPropertyArtwork] = artworkItem
}

if let duration = player?.currentItem?.duration {
Expand All @@ -73,7 +71,10 @@ public final class VideoPlayer {
if !file.isLocalVersionOlderThanRemote {
player = AVPlayer(url: file.localUrl)
Task { @MainActor in
currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: file.localUrl)
currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: file.localUrl, playableFileName: file.name)
if let currentMetadata = self.currentTrackMetadata {
setNowPlayingMetadata(metadata: currentMetadata)
}
}
} else if let token = driveFileManager.apiFetcher.currentToken {
driveFileManager.apiFetcher.performAuthenticatedRequest(token: token) { token, _ in
Expand All @@ -82,7 +83,10 @@ public final class VideoPlayer {
let headers = ["Authorization": "Bearer \(token.accessToken)"]
let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
Task { @MainActor in
self.currentTrackMetadata = await MediaMetadata.extractTrackMetadata(from: asset.url)
self.currentTrackMetadata = await MediaMetadata.extractTrackMetadata(
from: asset.url,
playableFileName: file.name
)
self.player = AVPlayer(playerItem: AVPlayerItem(asset: asset))
}
}
Expand Down

0 comments on commit 8722a62

Please sign in to comment.