import 'dart:async'; import 'package:aves/model/entry.dart'; import 'package:aves/services/services.dart'; import 'package:flutter/services.dart'; import 'package:streams_channel/streams_channel.dart'; abstract class MediaStoreService { Future> checkObsoleteContentIds(List knownContentIds); Future> checkObsoletePaths(Map knownPathById); // knownEntries: map of contentId -> dateModifiedSecs Stream getEntries(Map knownEntries); } class PlatformMediaStoreService implements MediaStoreService { static const platform = MethodChannel('deckers.thibault/aves/mediastore'); static final StreamsChannel _streamChannel = StreamsChannel('deckers.thibault/aves/mediastorestream'); @override Future> checkObsoleteContentIds(List knownContentIds) async { try { final result = await platform.invokeMethod('checkObsoleteContentIds', { 'knownContentIds': knownContentIds, }); return (result as List).cast(); } on PlatformException catch (e) { await reportService.recordChannelError('checkObsoleteContentIds', e); } return []; } @override Future> checkObsoletePaths(Map knownPathById) async { try { final result = await platform.invokeMethod('checkObsoletePaths', { 'knownPathById': knownPathById, }); return (result as List).cast(); } on PlatformException catch (e) { await reportService.recordChannelError('checkObsoletePaths', e); } return []; } @override Stream getEntries(Map knownEntries) { try { return _streamChannel.receiveBroadcastStream({ 'knownEntries': knownEntries, }).map((event) => AvesEntry.fromMap(event)); } on PlatformException catch (e) { reportService.recordChannelError('getEntries', e); return Stream.error(e); } } }