QueueAppend item android, ios, flutter

This commit is contained in:
gianlucaparadise 2022-02-03 06:55:33 +01:00
parent 1e8af8a46e
commit 969bc2c51b
5 changed files with 50 additions and 5 deletions

View file

@ -13,8 +13,8 @@ import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaInfo import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaInfo
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaStatus import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaStatus
import com.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData import com.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData
import com.gianlucaparadise.flutter_cast_framework.media.getMediaQueueItem
import com.google.android.gms.cast.MediaError import com.google.android.gms.cast.MediaError
import com.google.android.gms.cast.MediaStatus
import com.google.android.gms.cast.MediaStatus.* import com.google.android.gms.cast.MediaStatus.*
import com.google.android.gms.cast.framework.CastContext import com.google.android.gms.cast.framework.CastContext
import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.cast.framework.CastSession
@ -341,6 +341,15 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
remoteMediaClient.skipAd() remoteMediaClient.skipAd()
} }
override fun queueAppendItem(item: PlatformBridgeApis.MediaQueueItem?) {
if (item == null) return
val remoteMediaClient: RemoteMediaClient = remoteMediaClient ?: return
val mediaQueueItem = getMediaQueueItem(item)
remoteMediaClient.queueAppendItem(mediaQueueItem, null)
}
override fun setMute(muted: Boolean?) { override fun setMute(muted: Boolean?) {
if (muted == null) return if (muted == null) return
val castSession = mCastSession ?: return val castSession = mCastSession ?: return

View file

@ -2,10 +2,7 @@ package com.gianlucaparadise.flutter_cast_framework.media
import android.net.Uri import android.net.Uri
import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis
import com.google.android.gms.cast.MediaInfo import com.google.android.gms.cast.*
import com.google.android.gms.cast.MediaLoadRequestData
import com.google.android.gms.cast.MediaMetadata
import com.google.android.gms.cast.MediaTrack
import com.google.android.gms.common.images.WebImage import com.google.android.gms.common.images.WebImage
import org.json.JSONObject import org.json.JSONObject
@ -140,3 +137,14 @@ fun getTrackSubtype(trackSubtype: PlatformBridgeApis.TrackSubtype): Int {
PlatformBridgeApis.TrackSubtype.metadata -> 5 PlatformBridgeApis.TrackSubtype.metadata -> 5
} }
} }
fun getMediaQueueItem(item: PlatformBridgeApis.MediaQueueItem?): MediaQueueItem? {
if (item?.media == null) return null
val mediaInfo = getMediaInfo(item.media)
return MediaQueueItem.Builder(mediaInfo)
.setAutoplay(item.autoplay)
.setPreloadTime(item.preloadTime)
.build()
}

View file

@ -183,3 +183,13 @@ func getCustomData(customDataAsString: String?) -> Any? {
let data = customDataAsString!.data(using: .utf8)! let data = customDataAsString!.data(using: .utf8)!
return try? JSONSerialization.jsonObject(with: data, options: []) return try? JSONSerialization.jsonObject(with: data, options: [])
} }
func getMediaQueueItem(item: MediaQueueItem) -> GCKMediaQueueItem {
let mediaQueueItemBuilder = GCKMediaQueueItemBuilder.init()
mediaQueueItemBuilder.mediaInformation = getMediaInfo(mediaInfo: item.media)
mediaQueueItemBuilder.autoplay = item.autoplay == 1
mediaQueueItemBuilder.preloadTime = item.preloadTime?.doubleValue ?? 0
return mediaQueueItemBuilder.build()
}

View file

@ -326,6 +326,19 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
public func skipAdWithError(_ error: AutoreleasingUnsafeMutablePointer<FlutterError?>) { public func skipAdWithError(_ error: AutoreleasingUnsafeMutablePointer<FlutterError?>) {
remoteMediaClient?.skipAd() remoteMediaClient?.skipAd()
} }
public func queueAppendItemItem(_ item: MediaQueueItem, error: AutoreleasingUnsafeMutablePointer<FlutterError?>) {
let remoteMediaClient = castSession?.remoteMediaClient
if remoteMediaClient == nil {
return
}
let mediaQueueItem = getMediaQueueItem(item: item)
// as per documentation: If beforeItemWithID is kGCKMediaQueueInvalidItemID, the inserted item will be appended to the end of the queue
remoteMediaClient?.queueInsert(mediaQueueItem, beforeItemWithID: kGCKMediaQueueInvalidItemID)
}
// MARK: - GCKSessionManagerListener // MARK: - GCKSessionManagerListener
// onSessionSuspended // onSessionSuspended

View file

@ -109,6 +109,11 @@ class RemoteMediaClient {
_hostApi.skipAd(); _hostApi.skipAd();
} }
/// Appends a new media item to the end of the queue.
void queueAppendItem(MediaQueueItem item) {
_hostApi.queueAppendItem(item);
}
/// Internal method that shouldn't be visible /// Internal method that shouldn't be visible
@internal @internal
void dispatchPlayerStateUpdate(PlayerState playerState) { void dispatchPlayerStateUpdate(PlayerState playerState) {