QueueAppend item pigeon

This commit is contained in:
gianlucaparadise 2022-02-02 06:55:16 +01:00
parent 370e0e6c8d
commit 1e8af8a46e
5 changed files with 249 additions and 9 deletions

View file

@ -435,6 +435,60 @@ public class PlatformBridgeApis {
}
}
/** Generated class from Pigeon that represents data sent in messages. */
public static class MediaQueueItem {
private Long itemId;
public Long getItemId() { return itemId; }
public void setItemId(Long setterArg) { this.itemId = setterArg; }
private Double playbackDuration;
public Double getPlaybackDuration() { return playbackDuration; }
public void setPlaybackDuration(Double setterArg) { this.playbackDuration = setterArg; }
private Double startTime;
public Double getStartTime() { return startTime; }
public void setStartTime(Double setterArg) { this.startTime = setterArg; }
private MediaInfo media;
public MediaInfo getMedia() { return media; }
public void setMedia(MediaInfo setterArg) { this.media = setterArg; }
private Boolean autoplay;
public Boolean getAutoplay() { return autoplay; }
public void setAutoplay(Boolean setterArg) { this.autoplay = setterArg; }
private Double preloadTime;
public Double getPreloadTime() { return preloadTime; }
public void setPreloadTime(Double setterArg) { this.preloadTime = setterArg; }
Map<String, Object> toMap() {
Map<String, Object> toMapResult = new HashMap<>();
toMapResult.put("itemId", itemId);
toMapResult.put("playbackDuration", playbackDuration);
toMapResult.put("startTime", startTime);
toMapResult.put("media", (media == null) ? null : media.toMap());
toMapResult.put("autoplay", autoplay);
toMapResult.put("preloadTime", preloadTime);
return toMapResult;
}
static MediaQueueItem fromMap(Map<String, Object> map) {
MediaQueueItem fromMapResult = new MediaQueueItem();
Object itemId = map.get("itemId");
fromMapResult.itemId = (itemId == null) ? null : ((itemId instanceof Integer) ? (Integer)itemId : (Long)itemId);
Object playbackDuration = map.get("playbackDuration");
fromMapResult.playbackDuration = (Double)playbackDuration;
Object startTime = map.get("startTime");
fromMapResult.startTime = (Double)startTime;
Object media = map.get("media");
fromMapResult.media = MediaInfo.fromMap((Map)media);
Object autoplay = map.get("autoplay");
fromMapResult.autoplay = (Boolean)autoplay;
Object preloadTime = map.get("preloadTime");
fromMapResult.preloadTime = (Double)preloadTime;
return fromMapResult;
}
}
/** Generated class from Pigeon that represents data sent in messages. */
public static class CastDevice {
private String deviceId;
@ -518,9 +572,12 @@ public class PlatformBridgeApis {
return MediaMetadata.fromMap((Map<String, Object>) readValue(buffer));
case (byte)134:
return MediaTrack.fromMap((Map<String, Object>) readValue(buffer));
return MediaQueueItem.fromMap((Map<String, Object>) readValue(buffer));
case (byte)135:
return MediaTrack.fromMap((Map<String, Object>) readValue(buffer));
case (byte)136:
return WebImage.fromMap((Map<String, Object>) readValue(buffer));
default:
@ -554,12 +611,16 @@ public class PlatformBridgeApis {
stream.write(133);
writeValue(stream, ((MediaMetadata) value).toMap());
} else
if (value instanceof MediaTrack) {
if (value instanceof MediaQueueItem) {
stream.write(134);
writeValue(stream, ((MediaQueueItem) value).toMap());
} else
if (value instanceof MediaTrack) {
stream.write(135);
writeValue(stream, ((MediaTrack) value).toMap());
} else
if (value instanceof WebImage) {
stream.write(135);
stream.write(136);
writeValue(stream, ((WebImage) value).toMap());
} else
{
@ -581,6 +642,7 @@ public class PlatformBridgeApis {
void stop();
void showTracksChooserDialog();
void skipAd();
void queueAppendItem(MediaQueueItem item);
/** The codec used by CastHostApi. */
static MessageCodec<Object> getCodec() {
@ -813,6 +875,30 @@ public class PlatformBridgeApis {
channel.setMessageHandler(null);
}
}
{
BasicMessageChannel<Object> channel =
new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastHostApi.queueAppendItem", getCodec());
if (api != null) {
channel.setMessageHandler((message, reply) -> {
Map<String, Object> wrapped = new HashMap<>();
try {
ArrayList<Object> args = (ArrayList<Object>)message;
MediaQueueItem itemArg = (MediaQueueItem)args.get(0);
if (itemArg == null) {
throw new NullPointerException("itemArg unexpectedly null.");
}
api.queueAppendItem(itemArg);
wrapped.put("result", null);
}
catch (Error | RuntimeException exception) {
wrapped.put("error", wrapError(exception));
}
reply.reply(wrapped);
});
} else {
channel.setMessageHandler(null);
}
}
}
}
private static class CastFlutterApiCodec extends StandardMessageCodec {

View file

@ -59,6 +59,7 @@ typedef NS_ENUM(NSUInteger, PlayerState) {
@class MediaStatus;
@class AdBreakStatus;
@class AdBreakClipInfo;
@class MediaQueueItem;
@class CastDevice;
@class CastMessage;
@ -122,6 +123,15 @@ typedef NS_ENUM(NSUInteger, PlayerState) {
@property(nonatomic, strong, nullable) NSNumber * whenSkippableMs;
@end
@interface MediaQueueItem : NSObject
@property(nonatomic, strong, nullable) NSNumber * itemId;
@property(nonatomic, strong, nullable) NSNumber * playbackDuration;
@property(nonatomic, strong, nullable) NSNumber * startTime;
@property(nonatomic, strong, nullable) MediaInfo * media;
@property(nonatomic, strong, nullable) NSNumber * autoplay;
@property(nonatomic, strong, nullable) NSNumber * preloadTime;
@end
@interface CastDevice : NSObject
@property(nonatomic, copy, nullable) NSString * deviceId;
@property(nonatomic, copy, nullable) NSString * friendlyName;
@ -148,6 +158,7 @@ NSObject<FlutterMessageCodec> *CastHostApiGetCodec(void);
- (void)stopWithError:(FlutterError *_Nullable *_Nonnull)error;
- (void)showTracksChooserDialogWithError:(FlutterError *_Nullable *_Nonnull)error;
- (void)skipAdWithError:(FlutterError *_Nullable *_Nonnull)error;
- (void)queueAppendItemItem:(MediaQueueItem *)item error:(FlutterError *_Nullable *_Nonnull)error;
@end
extern void CastHostApiSetup(id<FlutterBinaryMessenger> binaryMessenger, NSObject<CastHostApi> *_Nullable api);

View file

@ -54,6 +54,10 @@ static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error)
+ (AdBreakClipInfo *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
@end
@interface MediaQueueItem ()
+ (MediaQueueItem *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
@end
@interface CastDevice ()
+ (CastDevice *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
@ -272,6 +276,40 @@ static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error)
}
@end
@implementation MediaQueueItem
+ (MediaQueueItem *)fromMap:(NSDictionary *)dict {
MediaQueueItem *result = [[MediaQueueItem alloc] init];
result.itemId = dict[@"itemId"];
if ((NSNull *)result.itemId == [NSNull null]) {
result.itemId = nil;
}
result.playbackDuration = dict[@"playbackDuration"];
if ((NSNull *)result.playbackDuration == [NSNull null]) {
result.playbackDuration = nil;
}
result.startTime = dict[@"startTime"];
if ((NSNull *)result.startTime == [NSNull null]) {
result.startTime = nil;
}
result.media = [MediaInfo fromMap:dict[@"media"]];
if ((NSNull *)result.media == [NSNull null]) {
result.media = nil;
}
result.autoplay = dict[@"autoplay"];
if ((NSNull *)result.autoplay == [NSNull null]) {
result.autoplay = nil;
}
result.preloadTime = dict[@"preloadTime"];
if ((NSNull *)result.preloadTime == [NSNull null]) {
result.preloadTime = nil;
}
return result;
}
- (NSDictionary *)toMap {
return [NSDictionary dictionaryWithObjectsAndKeys:(self.itemId ? self.itemId : [NSNull null]), @"itemId", (self.playbackDuration ? self.playbackDuration : [NSNull null]), @"playbackDuration", (self.startTime ? self.startTime : [NSNull null]), @"startTime", (self.media ? [self.media toMap] : [NSNull null]), @"media", (self.autoplay ? self.autoplay : [NSNull null]), @"autoplay", (self.preloadTime ? self.preloadTime : [NSNull null]), @"preloadTime", nil];
}
@end
@implementation CastDevice
+ (CastDevice *)fromMap:(NSDictionary *)dict {
CastDevice *result = [[CastDevice alloc] init];
@ -337,9 +375,12 @@ static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error)
return [MediaMetadata fromMap:[self readValue]];
case 134:
return [MediaTrack fromMap:[self readValue]];
return [MediaQueueItem fromMap:[self readValue]];
case 135:
return [MediaTrack fromMap:[self readValue]];
case 136:
return [WebImage fromMap:[self readValue]];
default:
@ -378,14 +419,18 @@ static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error)
[self writeByte:133];
[self writeValue:[value toMap]];
} else
if ([value isKindOfClass:[MediaTrack class]]) {
if ([value isKindOfClass:[MediaQueueItem class]]) {
[self writeByte:134];
[self writeValue:[value toMap]];
} else
if ([value isKindOfClass:[WebImage class]]) {
if ([value isKindOfClass:[MediaTrack class]]) {
[self writeByte:135];
[self writeValue:[value toMap]];
} else
if ([value isKindOfClass:[WebImage class]]) {
[self writeByte:136];
[self writeValue:[value toMap]];
} else
{
[super writeValue:value];
}
@ -619,6 +664,26 @@ void CastHostApiSetup(id<FlutterBinaryMessenger> binaryMessenger, NSObject<CastH
[channel setMessageHandler:nil];
}
}
{
FlutterBasicMessageChannel *channel =
[FlutterBasicMessageChannel
messageChannelWithName:@"dev.flutter.pigeon.CastHostApi.queueAppendItem"
binaryMessenger:binaryMessenger
codec:CastHostApiGetCodec()];
if (api) {
NSCAssert([api respondsToSelector:@selector(queueAppendItemItem:error:)], @"CastHostApi api (%@) doesn't respond to @selector(queueAppendItemItem:error:)", api);
[channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
NSArray *args = message;
MediaQueueItem *arg_item = args[0];
FlutterError *error;
[api queueAppendItemItem:arg_item error:&error];
callback(wrapResult(nil, error));
}];
}
else {
[channel setMessageHandler:nil];
}
}
}
@interface CastFlutterApiCodecReader : FlutterStandardReader
@end

View file

@ -281,6 +281,39 @@ class AdBreakClipInfo {
}
}
class MediaQueueItem {
int? itemId;
double? playbackDuration;
double? startTime;
MediaInfo? media;
bool? autoplay;
double? preloadTime;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['itemId'] = itemId;
pigeonMap['playbackDuration'] = playbackDuration;
pigeonMap['startTime'] = startTime;
pigeonMap['media'] = media == null ? null : media!.encode();
pigeonMap['autoplay'] = autoplay;
pigeonMap['preloadTime'] = preloadTime;
return pigeonMap;
}
static MediaQueueItem decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
return MediaQueueItem()
..itemId = pigeonMap['itemId'] as int?
..playbackDuration = pigeonMap['playbackDuration'] as double?
..startTime = pigeonMap['startTime'] as double?
..media = pigeonMap['media'] != null
? MediaInfo.decode(pigeonMap['media']!)
: null
..autoplay = pigeonMap['autoplay'] as bool?
..preloadTime = pigeonMap['preloadTime'] as double?;
}
}
class CastDevice {
String? deviceId;
String? friendlyName;
@ -350,14 +383,18 @@ class _CastHostApiCodec extends StandardMessageCodec {
buffer.putUint8(133);
writeValue(buffer, value.encode());
} else
if (value is MediaTrack) {
if (value is MediaQueueItem) {
buffer.putUint8(134);
writeValue(buffer, value.encode());
} else
if (value is WebImage) {
if (value is MediaTrack) {
buffer.putUint8(135);
writeValue(buffer, value.encode());
} else
if (value is WebImage) {
buffer.putUint8(136);
writeValue(buffer, value.encode());
} else
{
super.writeValue(buffer, value);
}
@ -384,9 +421,12 @@ class _CastHostApiCodec extends StandardMessageCodec {
return MediaMetadata.decode(readValue(buffer)!);
case 134:
return MediaTrack.decode(readValue(buffer)!);
return MediaQueueItem.decode(readValue(buffer)!);
case 135:
return MediaTrack.decode(readValue(buffer)!);
case 136:
return WebImage.decode(readValue(buffer)!);
default:
@ -658,6 +698,29 @@ class CastHostApi {
return;
}
}
Future<void> queueAppendItem(MediaQueueItem arg_item) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.CastHostApi.queueAppendItem', codec, binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object>[arg_item]) as Map<Object?, Object?>?;
if (replyMap == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
details: null,
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error = (replyMap['error'] as Map<Object?, Object?>?)!;
throw PlatformException(
code: (error['code'] as String?)!,
message: error['message'] as String?,
details: error['details'],
);
} else {
return;
}
}
}
class _CastFlutterApiCodec extends StandardMessageCodec {

View file

@ -255,6 +255,17 @@ class AdBreakClipInfo {
//#endregion
//#region Queue
class MediaQueueItem {
int? itemId;
double? playbackDuration;
double? startTime;
MediaInfo? media;
bool? autoplay;
double? preloadTime;
}
//#endregion
class CastDevice {
String? deviceId;
String? friendlyName;
@ -283,6 +294,10 @@ abstract class CastHostApi {
void showTracksChooserDialog();
void skipAd();
//endregion
//region Queue
void queueAppendItem(MediaQueueItem item);
//endregion
}
/// APIs for Host-to-Flutter comunication