MediaMetadata: strings workaround ios

This commit is contained in:
gianlucaparadise 2022-07-31 16:15:00 +02:00
parent b02d66c7d5
commit a2ea319dd4
3 changed files with 207 additions and 1 deletions

View file

@ -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"
}
}

View file

@ -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:

View file

@ -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