diff --git a/ios/Classes/FlutterEnumHelper.swift b/ios/Classes/FlutterEnumHelper.swift new file mode 100644 index 0000000..e2bc11f --- /dev/null +++ b/ios/Classes/FlutterEnumHelper.swift @@ -0,0 +1,71 @@ +// +// FlutterEnumHelper.swift +// flutter_cast_framework +// +// Created by Gianluca Paradiso on 02/08/22. +// + +import Foundation + +func getEnumLabelFor(key: MediaMetadataKey) -> String { + switch key { + case MediaMetadataKey.albumArtist: + return "albumArtist" + case MediaMetadataKey.albumTitle: + return "albumTitle" + case MediaMetadataKey.artist: + return "artist" + case MediaMetadataKey.bookTitle: + return "bookTitle" + case MediaMetadataKey.broadcastDate: + return "broadcastDate" + case MediaMetadataKey.chapterNumber: + return "chapterNumber" + case MediaMetadataKey.chapterTitle: + return "chapterTitle" + case MediaMetadataKey.composer: + return "composer" + case MediaMetadataKey.creationDate: + return "creationDate" + case MediaMetadataKey.discNumber: + return "discNumber" + case MediaMetadataKey.episodeNumber: + return "episodeNumber" + case MediaMetadataKey.height: + return "height" + case MediaMetadataKey.locationLatitude: + return "locationLatitude" + case MediaMetadataKey.locationLongitude: + return "locationLongitude" + case MediaMetadataKey.locationName: + return "locationName" + case MediaMetadataKey.queueItemId: + return "queueItemId" + case MediaMetadataKey.releaseDate: + return "releaseDate" + case MediaMetadataKey.seasonNumber: + return "seasonNumber" + case MediaMetadataKey.sectionDuration: + return "sectionDuration" + case MediaMetadataKey.sectionStartAbsoluteTime: + return "sectionStartAbsoluteTime" + case MediaMetadataKey.sectionStartTimeInContainer: + return "sectionStartTimeInContainer" + case MediaMetadataKey.sectionStartTimeInMedia: + return "sectionStartTimeInMedia" + case MediaMetadataKey.seriesTitle: + return "seriesTitle" + case MediaMetadataKey.studio: + return "studio" + case MediaMetadataKey.subtitle: + return "subtitle" + case MediaMetadataKey.title: + return "title" + case MediaMetadataKey.trackNumber: + return "trackNumber" + case MediaMetadataKey.width: + return "width" + @unknown default: + return "default" + } +} diff --git a/ios/Classes/FlutterMediaLoadRequestDataHelper.swift b/ios/Classes/FlutterMediaLoadRequestDataHelper.swift index a9358ad..433173c 100644 --- a/ios/Classes/FlutterMediaLoadRequestDataHelper.swift +++ b/ios/Classes/FlutterMediaLoadRequestDataHelper.swift @@ -208,8 +208,14 @@ func getFlutterMediaMetadata(mediaMetadata: GCKMediaMetadata?) -> MediaMetadata let result = MediaMetadata() result.mediaType = getFlutterMediaType(mediaType: mediaMetadata?.metadataType) + result.strings = [:] result.webImages = [] + mediaMetadata?.allKeys().forEach({ key in + let flutterKey = getFlutterMediaMetadataKey(mediaMetadataKey: key) + result.strings?[flutterKey] = mediaMetadata?.string(forKey: key) + }) + mediaMetadata?.images().forEach({ (imageAny: Any) in let image = imageAny as? GCKImage if (image == nil) { @@ -224,6 +230,69 @@ func getFlutterMediaMetadata(mediaMetadata: GCKMediaMetadata?) -> MediaMetadata return result } +func getFlutterMediaMetadataKey(mediaMetadataKey: String) -> String { + switch mediaMetadataKey { + case kGCKMetadataKeyAlbumArtist: + return getEnumLabelFor(key: MediaMetadataKey.albumArtist) + case kGCKMetadataKeyAlbumTitle: + return getEnumLabelFor(key: MediaMetadataKey.albumTitle) + case kGCKMetadataKeyArtist: + return getEnumLabelFor(key: MediaMetadataKey.artist) + case kGCKMetadataKeyBookTitle: + return getEnumLabelFor(key: MediaMetadataKey.bookTitle) + case kGCKMetadataKeyBroadcastDate: + return getEnumLabelFor(key: MediaMetadataKey.broadcastDate) + case kGCKMetadataKeyChapterNumber: + return getEnumLabelFor(key: MediaMetadataKey.chapterNumber) + case kGCKMetadataKeyChapterTitle: + return getEnumLabelFor(key: MediaMetadataKey.chapterTitle) + case kGCKMetadataKeyComposer: + return getEnumLabelFor(key: MediaMetadataKey.composer) + case kGCKMetadataKeyCreationDate: + return getEnumLabelFor(key: MediaMetadataKey.creationDate) + case kGCKMetadataKeyDiscNumber: + return getEnumLabelFor(key: MediaMetadataKey.discNumber) + case kGCKMetadataKeyEpisodeNumber: + return getEnumLabelFor(key: MediaMetadataKey.episodeNumber) + case kGCKMetadataKeyHeight: + return getEnumLabelFor(key: MediaMetadataKey.height) + case kGCKMetadataKeyLocationLatitude: + return getEnumLabelFor(key: MediaMetadataKey.locationLatitude) + case kGCKMetadataKeyLocationLongitude: + return getEnumLabelFor(key: MediaMetadataKey.locationLongitude) + case kGCKMetadataKeyLocationName: + return getEnumLabelFor(key: MediaMetadataKey.locationName) + case kGCKMetadataKeyQueueItemID: + return getEnumLabelFor(key: MediaMetadataKey.queueItemId) + case kGCKMetadataKeyReleaseDate: + return getEnumLabelFor(key: MediaMetadataKey.releaseDate) + case kGCKMetadataKeySeasonNumber: + return getEnumLabelFor(key: MediaMetadataKey.seasonNumber) + case kGCKMetadataKeySectionDuration: + return getEnumLabelFor(key: MediaMetadataKey.sectionDuration) + case kGCKMetadataKeySectionStartAbsoluteTime: + return getEnumLabelFor(key: MediaMetadataKey.sectionStartAbsoluteTime) + case kGCKMetadataKeySectionStartTimeInContainer: + return getEnumLabelFor(key: MediaMetadataKey.sectionStartTimeInContainer) + case kGCKMetadataKeySectionStartTimeInMedia: + return getEnumLabelFor(key: MediaMetadataKey.sectionStartTimeInMedia) + case kGCKMetadataKeySeriesTitle: + return getEnumLabelFor(key: MediaMetadataKey.seriesTitle) + case kGCKMetadataKeyStudio: + return getEnumLabelFor(key: MediaMetadataKey.studio) + case kGCKMetadataKeySubtitle: + return getEnumLabelFor(key: MediaMetadataKey.subtitle) + case kGCKMetadataKeyTitle: + return getEnumLabelFor(key: MediaMetadataKey.title) + case kGCKMetadataKeyTrackNumber: + return getEnumLabelFor(key: MediaMetadataKey.trackNumber) + case kGCKMetadataKeyWidth: + return getEnumLabelFor(key: MediaMetadataKey.width) + default: + return "default" + } +} + func getFlutterMediaType(mediaType: GCKMediaMetadataType?) -> MediaType { switch mediaType { case .generic: diff --git a/ios/Classes/HostMediaLoadRequestDataHelper.swift b/ios/Classes/HostMediaLoadRequestDataHelper.swift index f1742b4..f009292 100644 --- a/ios/Classes/HostMediaLoadRequestDataHelper.swift +++ b/ios/Classes/HostMediaLoadRequestDataHelper.swift @@ -75,7 +75,10 @@ func getMetadata(metadata: MediaMetadata?) -> GCKMediaMetadata? { let mediaType = getMediaType(mediaType: metadata?.mediaType) let result = GCKMediaMetadata.init(metadataType: mediaType) - // metadata.strings // TODO map this + metadata?.strings?.forEach({ (key: String, value: String) in + let resultKey = getMediaMetadataKey(key: key) + result.setString(value, forKey: resultKey) + }) metadata?.webImages?.forEach({ (img: WebImage) in if img.url == nil { @@ -113,6 +116,69 @@ func getMediaType(mediaType: MediaType?) -> GCKMediaMetadataType { } } +func getMediaMetadataKey(key: String) -> String { + switch key { + case getEnumLabelFor(key: MediaMetadataKey.albumArtist): + return kGCKMetadataKeyAlbumArtist + case getEnumLabelFor(key: MediaMetadataKey.albumTitle): + return kGCKMetadataKeyAlbumTitle + case getEnumLabelFor(key: MediaMetadataKey.artist): + return kGCKMetadataKeyArtist + case getEnumLabelFor(key: MediaMetadataKey.bookTitle): + return kGCKMetadataKeyBookTitle + case getEnumLabelFor(key: MediaMetadataKey.broadcastDate): + return kGCKMetadataKeyBroadcastDate + case getEnumLabelFor(key: MediaMetadataKey.chapterNumber): + return kGCKMetadataKeyChapterNumber + case getEnumLabelFor(key: MediaMetadataKey.chapterTitle): + return kGCKMetadataKeyChapterTitle + case getEnumLabelFor(key: MediaMetadataKey.composer): + return kGCKMetadataKeyComposer + case getEnumLabelFor(key: MediaMetadataKey.creationDate): + return kGCKMetadataKeyCreationDate + case getEnumLabelFor(key: MediaMetadataKey.discNumber): + return kGCKMetadataKeyDiscNumber + case getEnumLabelFor(key: MediaMetadataKey.episodeNumber): + return kGCKMetadataKeyEpisodeNumber + case getEnumLabelFor(key: MediaMetadataKey.height): + return kGCKMetadataKeyHeight + case getEnumLabelFor(key: MediaMetadataKey.locationLatitude): + return kGCKMetadataKeyLocationLatitude + case getEnumLabelFor(key: MediaMetadataKey.locationLongitude): + return kGCKMetadataKeyLocationLongitude + case getEnumLabelFor(key: MediaMetadataKey.locationName): + return kGCKMetadataKeyLocationName + case getEnumLabelFor(key: MediaMetadataKey.queueItemId): + return kGCKMetadataKeyQueueItemID + case getEnumLabelFor(key: MediaMetadataKey.releaseDate): + return kGCKMetadataKeyReleaseDate + case getEnumLabelFor(key: MediaMetadataKey.seasonNumber): + return kGCKMetadataKeySeasonNumber + case getEnumLabelFor(key: MediaMetadataKey.sectionDuration): + return kGCKMetadataKeySectionDuration + case getEnumLabelFor(key: MediaMetadataKey.sectionStartAbsoluteTime): + return kGCKMetadataKeySectionStartAbsoluteTime + case getEnumLabelFor(key: MediaMetadataKey.sectionStartTimeInContainer): + return kGCKMetadataKeySectionStartTimeInContainer + case getEnumLabelFor(key: MediaMetadataKey.sectionStartTimeInMedia): + return kGCKMetadataKeySectionStartTimeInMedia + case getEnumLabelFor(key: MediaMetadataKey.seriesTitle): + return kGCKMetadataKeySeriesTitle + case getEnumLabelFor(key: MediaMetadataKey.studio): + return kGCKMetadataKeyStudio + case getEnumLabelFor(key: MediaMetadataKey.subtitle): + return kGCKMetadataKeySubtitle + case getEnumLabelFor(key: MediaMetadataKey.title): + return kGCKMetadataKeyTitle + case getEnumLabelFor(key: MediaMetadataKey.trackNumber): + return kGCKMetadataKeyTrackNumber + case getEnumLabelFor(key: MediaMetadataKey.width): + return kGCKMetadataKeyWidth + default: + return "default" + } +} + func getMediaTracks(mediaTracks: [MediaTrack]?) -> [GCKMediaTrack]? { if mediaTracks == nil { return nil