diff --git a/src/android/app/src/main/res/drawable-hdpi/favorite_0.png b/src/android/app/src/main/res/drawable-hdpi/favorite_0.png new file mode 100644 index 0000000..4f8a431 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/favorite_0.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/favorite_1.png b/src/android/app/src/main/res/drawable-hdpi/favorite_1.png new file mode 100644 index 0000000..5ab6194 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/favorite_1.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/favorite_2.png b/src/android/app/src/main/res/drawable-hdpi/favorite_2.png new file mode 100644 index 0000000..fdc9247 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/favorite_2.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/favorite_3.png b/src/android/app/src/main/res/drawable-hdpi/favorite_3.png new file mode 100644 index 0000000..71f2368 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/favorite_3.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/ic_action_pause.png b/src/android/app/src/main/res/drawable-hdpi/ic_action_pause.png deleted file mode 100644 index 55f33b2..0000000 Binary files a/src/android/app/src/main/res/drawable-hdpi/ic_action_pause.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-hdpi/ic_action_play_arrow.png b/src/android/app/src/main/res/drawable-hdpi/ic_action_play_arrow.png deleted file mode 100644 index 326a6aa..0000000 Binary files a/src/android/app/src/main/res/drawable-hdpi/ic_action_play_arrow.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-hdpi/ic_action_stop.png b/src/android/app/src/main/res/drawable-hdpi/ic_action_stop.png deleted file mode 100644 index 5435114..0000000 Binary files a/src/android/app/src/main/res/drawable-hdpi/ic_action_stop.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-hdpi/pause.png b/src/android/app/src/main/res/drawable-hdpi/pause.png new file mode 100644 index 0000000..6ddb7c0 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/pause.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/play.png b/src/android/app/src/main/res/drawable-hdpi/play.png new file mode 100644 index 0000000..c33d6da Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/play.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/skip_next.png b/src/android/app/src/main/res/drawable-hdpi/skip_next.png new file mode 100644 index 0000000..7ad21fc Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/skip_next.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/skip_prev.png b/src/android/app/src/main/res/drawable-hdpi/skip_prev.png new file mode 100644 index 0000000..efd0ec5 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/skip_prev.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/favorite_0.png b/src/android/app/src/main/res/drawable-mdpi/favorite_0.png new file mode 100644 index 0000000..b623280 Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/favorite_0.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/favorite_1.png b/src/android/app/src/main/res/drawable-mdpi/favorite_1.png new file mode 100644 index 0000000..31383b5 Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/favorite_1.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/favorite_2.png b/src/android/app/src/main/res/drawable-mdpi/favorite_2.png new file mode 100644 index 0000000..7ec57c7 Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/favorite_2.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/favorite_3.png b/src/android/app/src/main/res/drawable-mdpi/favorite_3.png new file mode 100644 index 0000000..9f5df37 Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/favorite_3.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/ic_action_pause.png b/src/android/app/src/main/res/drawable-mdpi/ic_action_pause.png deleted file mode 100644 index e8ff072..0000000 Binary files a/src/android/app/src/main/res/drawable-mdpi/ic_action_pause.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-mdpi/ic_action_play_arrow.png b/src/android/app/src/main/res/drawable-mdpi/ic_action_play_arrow.png deleted file mode 100644 index 71fff1d..0000000 Binary files a/src/android/app/src/main/res/drawable-mdpi/ic_action_play_arrow.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-mdpi/ic_action_stop.png b/src/android/app/src/main/res/drawable-mdpi/ic_action_stop.png deleted file mode 100644 index 95e837d..0000000 Binary files a/src/android/app/src/main/res/drawable-mdpi/ic_action_stop.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-mdpi/pause.png b/src/android/app/src/main/res/drawable-mdpi/pause.png new file mode 100644 index 0000000..8c44a3b Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/pause.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/play.png b/src/android/app/src/main/res/drawable-mdpi/play.png new file mode 100644 index 0000000..dc2c3a9 Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/play.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/skip_next.png b/src/android/app/src/main/res/drawable-mdpi/skip_next.png new file mode 100644 index 0000000..d7be64e Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/skip_next.png differ diff --git a/src/android/app/src/main/res/drawable-mdpi/skip_prev.png b/src/android/app/src/main/res/drawable-mdpi/skip_prev.png new file mode 100644 index 0000000..0fb3d4c Binary files /dev/null and b/src/android/app/src/main/res/drawable-mdpi/skip_prev.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/favorite_0.png b/src/android/app/src/main/res/drawable-xhdpi/favorite_0.png new file mode 100644 index 0000000..fe12733 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/favorite_0.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/favorite_1.png b/src/android/app/src/main/res/drawable-xhdpi/favorite_1.png new file mode 100644 index 0000000..a13f288 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/favorite_1.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/favorite_2.png b/src/android/app/src/main/res/drawable-xhdpi/favorite_2.png new file mode 100644 index 0000000..088aa2d Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/favorite_2.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/favorite_3.png b/src/android/app/src/main/res/drawable-xhdpi/favorite_3.png new file mode 100644 index 0000000..2e43d23 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/favorite_3.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/ic_action_pause.png b/src/android/app/src/main/res/drawable-xhdpi/ic_action_pause.png deleted file mode 100644 index fbdee83..0000000 Binary files a/src/android/app/src/main/res/drawable-xhdpi/ic_action_pause.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/ic_action_play_arrow.png b/src/android/app/src/main/res/drawable-xhdpi/ic_action_play_arrow.png deleted file mode 100644 index 62d2067..0000000 Binary files a/src/android/app/src/main/res/drawable-xhdpi/ic_action_play_arrow.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/ic_action_stop.png b/src/android/app/src/main/res/drawable-xhdpi/ic_action_stop.png deleted file mode 100644 index 3f7f54d..0000000 Binary files a/src/android/app/src/main/res/drawable-xhdpi/ic_action_stop.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/pause.png b/src/android/app/src/main/res/drawable-xhdpi/pause.png new file mode 100644 index 0000000..5a98acc Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/pause.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/play.png b/src/android/app/src/main/res/drawable-xhdpi/play.png new file mode 100644 index 0000000..aec21bd Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/play.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/skip_next.png b/src/android/app/src/main/res/drawable-xhdpi/skip_next.png new file mode 100644 index 0000000..5013aba Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/skip_next.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/skip_prev.png b/src/android/app/src/main/res/drawable-xhdpi/skip_prev.png new file mode 100644 index 0000000..76b0e17 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/skip_prev.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/favorite_0.png b/src/android/app/src/main/res/drawable-xxhdpi/favorite_0.png new file mode 100644 index 0000000..23247b3 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/favorite_0.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/favorite_1.png b/src/android/app/src/main/res/drawable-xxhdpi/favorite_1.png new file mode 100644 index 0000000..956ec7c Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/favorite_1.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/favorite_2.png b/src/android/app/src/main/res/drawable-xxhdpi/favorite_2.png new file mode 100644 index 0000000..310848c Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/favorite_2.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/favorite_3.png b/src/android/app/src/main/res/drawable-xxhdpi/favorite_3.png new file mode 100644 index 0000000..e2f92c5 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/favorite_3.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_pause.png b/src/android/app/src/main/res/drawable-xxhdpi/ic_action_pause.png deleted file mode 100644 index 8ac598d..0000000 Binary files a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_pause.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_play_arrow.png b/src/android/app/src/main/res/drawable-xxhdpi/ic_action_play_arrow.png deleted file mode 100644 index 22e40a3..0000000 Binary files a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_play_arrow.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_stop.png b/src/android/app/src/main/res/drawable-xxhdpi/ic_action_stop.png deleted file mode 100644 index 17da4a3..0000000 Binary files a/src/android/app/src/main/res/drawable-xxhdpi/ic_action_stop.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/pause.png b/src/android/app/src/main/res/drawable-xxhdpi/pause.png new file mode 100644 index 0000000..c7b116b Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/pause.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/play.png b/src/android/app/src/main/res/drawable-xxhdpi/play.png new file mode 100644 index 0000000..6475501 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/play.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/skip_next.png b/src/android/app/src/main/res/drawable-xxhdpi/skip_next.png new file mode 100644 index 0000000..b848c24 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/skip_next.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/skip_prev.png b/src/android/app/src/main/res/drawable-xxhdpi/skip_prev.png new file mode 100644 index 0000000..017ce7c Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/skip_prev.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/favorite_0.png b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_0.png new file mode 100644 index 0000000..7866e75 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_0.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/favorite_1.png b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_1.png new file mode 100644 index 0000000..3131c05 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_1.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/favorite_2.png b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_2.png new file mode 100644 index 0000000..50e5609 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_2.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/favorite_3.png b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_3.png new file mode 100644 index 0000000..07c2d51 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/favorite_3.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_pause.png b/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_pause.png deleted file mode 100644 index 4343502..0000000 Binary files a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_pause.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_play_arrow.png b/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_play_arrow.png deleted file mode 100644 index e9f9281..0000000 Binary files a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_play_arrow.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_stop.png b/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_stop.png deleted file mode 100644 index 20ee1b7..0000000 Binary files a/src/android/app/src/main/res/drawable-xxxhdpi/ic_action_stop.png and /dev/null differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/pause.png b/src/android/app/src/main/res/drawable-xxxhdpi/pause.png new file mode 100644 index 0000000..df68a2e Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/pause.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/play.png b/src/android/app/src/main/res/drawable-xxxhdpi/play.png new file mode 100644 index 0000000..14a0af5 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/play.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/skip_next.png b/src/android/app/src/main/res/drawable-xxxhdpi/skip_next.png new file mode 100644 index 0000000..011718b Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/skip_next.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/skip_prev.png b/src/android/app/src/main/res/drawable-xxxhdpi/skip_prev.png new file mode 100644 index 0000000..f9c5fdc Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/skip_prev.png differ diff --git a/src/lib/domain/actors/platform_integration_actor.dart b/src/lib/domain/actors/platform_integration_actor.dart index 3f011b9..dae0696 100644 --- a/src/lib/domain/actors/platform_integration_actor.dart +++ b/src/lib/domain/actors/platform_integration_actor.dart @@ -1,4 +1,5 @@ import '../repositories/audio_player_repository.dart'; +import '../repositories/music_data_repository.dart'; import '../repositories/platform_integration_repository.dart'; import '../usecases/seek_to_next.dart'; @@ -7,17 +8,19 @@ class PlatformIntegrationActor { this._platformIntegrationInfoRepository, this._seekToNext, this._audioPlayerRepository, + this._musicDataRepository, ) { _platformIntegrationInfoRepository.eventStream .listen((event) => _handlePlatformIntegrationEvent(event)); } final AudioPlayerRepository _audioPlayerRepository; + final MusicDataRepository _musicDataRepository; final PlatformIntegrationInfoRepository _platformIntegrationInfoRepository; final SeekToNext _seekToNext; - void _handlePlatformIntegrationEvent(PlatformIntegrationEvent event) { + Future _handlePlatformIntegrationEvent(PlatformIntegrationEvent event) async { switch (event.type) { case PlatformIntegrationEventType.play: _audioPlayerRepository.play(); @@ -36,6 +39,13 @@ class PlatformIntegrationActor { case PlatformIntegrationEventType.seek: _seekToPosition(event.payload!['position'] as Duration); break; + case PlatformIntegrationEventType.like: + final path = event.payload?['path']; + if (path != null) { + final song = await _musicDataRepository.getSongByPath(path as String); + _musicDataRepository.incrementLikeCount(song); + } + break; } } diff --git a/src/lib/domain/repositories/music_data_repository.dart b/src/lib/domain/repositories/music_data_repository.dart index cf89a7c..e0564cf 100644 --- a/src/lib/domain/repositories/music_data_repository.dart +++ b/src/lib/domain/repositories/music_data_repository.dart @@ -62,6 +62,7 @@ abstract class MusicDataRepository extends MusicDataInfoRepository { Future resetSkipCount(Song song); Future setLikeCount(List songs, int count); + Future incrementLikeCount(Song song); Future incrementPlayCount(Song song); diff --git a/src/lib/domain/repositories/platform_integration_repository.dart b/src/lib/domain/repositories/platform_integration_repository.dart index 6f76cad..f44e474 100644 --- a/src/lib/domain/repositories/platform_integration_repository.dart +++ b/src/lib/domain/repositories/platform_integration_repository.dart @@ -2,12 +2,6 @@ import '../entities/event.dart'; import '../entities/playback_event.dart'; import '../entities/song.dart'; -/* - -- position -- controls (playbackState) - -*/ abstract class PlatformIntegrationInfoRepository { Stream get eventStream; @@ -16,7 +10,6 @@ abstract class PlatformIntegrationInfoRepository { abstract class PlatformIntegrationRepository extends PlatformIntegrationInfoRepository { void handlePlaybackEvent(PlaybackEvent playbackEvent); void setCurrentSong(Song? song); - // void setQueue(List queue); } class PlatformIntegrationEvent extends Event { @@ -32,4 +25,5 @@ enum PlatformIntegrationEventType { skipNext, skipPrevious, seek, + like, } diff --git a/src/lib/injection_container.dart b/src/lib/injection_container.dart index 78d3b34..1c60a48 100644 --- a/src/lib/injection_container.dart +++ b/src/lib/injection_container.dart @@ -349,6 +349,7 @@ Future setupGetIt() async { getIt(), getIt(), getIt(), + getIt(), ), ); diff --git a/src/lib/system/datasources/platform_integration_data_source_impl.dart b/src/lib/system/datasources/platform_integration_data_source_impl.dart index cdba9c1..780dcc0 100644 --- a/src/lib/system/datasources/platform_integration_data_source_impl.dart +++ b/src/lib/system/datasources/platform_integration_data_source_impl.dart @@ -9,6 +9,50 @@ import '../models/playback_event_model.dart'; import '../models/song_model.dart'; import 'platform_integration_data_source.dart'; +const favs = [ + MediaControl( + androidIcon: 'drawable/favorite_0', + label: 'Like', + action: MediaAction.rewind, + ), + MediaControl( + androidIcon: 'drawable/favorite_1', + label: 'Like', + action: MediaAction.rewind, + ), + MediaControl( + androidIcon: 'drawable/favorite_2', + label: 'Like', + action: MediaAction.rewind, + ), + MediaControl( + androidIcon: 'drawable/favorite_3', + label: 'Like', + action: MediaAction.rewind, + ), +]; + +const playCtrl = MediaControl( + androidIcon: 'drawable/play', + label: 'Play', + action: MediaAction.play, +); +const pauseCtrl = MediaControl( + androidIcon: 'drawable/pause', + label: 'Pause', + action: MediaAction.pause, +); +const nextCtrl = MediaControl( + androidIcon: 'drawable/skip_next', + label: 'Next', + action: MediaAction.skipToNext, +); +const prevCtrl = MediaControl( + androidIcon: 'drawable/skip_prev', + label: 'Previous', + action: MediaAction.skipToPrevious, +); + class PlatformIntegrationDataSourceImpl extends BaseAudioHandler implements PlatformIntegrationDataSource { PlatformIntegrationDataSourceImpl(); @@ -52,6 +96,13 @@ class PlatformIntegrationDataSourceImpl extends BaseAudioHandler )); } + @override + Future rewind() async { + _log.d('rewind -> like'); + _eventSubject.add(PlatformIntegrationEvent( + type: PlatformIntegrationEventType.like, payload: {'path': mediaItem.value?.id})); + } + @override Future click([MediaButton button = MediaButton.media]) async { _log.i(button.toString()); @@ -89,39 +140,45 @@ class PlatformIntegrationDataSourceImpl extends BaseAudioHandler @override Future handlePlaybackEvent(PlaybackEventModel pe) async { + final mi = mediaItem.value; + final int likeCount = mi == null ? 0 : mi.extras!['likeCount'] as int; + if (pe.processingState == ProcessingState.ready) { final timeDelta = DateTime.now().difference(pe.updateTime); if (pe.playing) { playbackState.add(playbackState.value.copyWith( - controls: [MediaControl.skipToPrevious, MediaControl.pause, MediaControl.skipToNext], + controls: [favs[likeCount], prevCtrl, pauseCtrl, nextCtrl], systemActions: const { MediaAction.seek, }, playing: true, processingState: AudioProcessingState.ready, updatePosition: pe.updatePosition + timeDelta, + androidCompactActionIndices: [0, 2, 3], )); } else { playbackState.add(playbackState.value.copyWith( - controls: [MediaControl.skipToPrevious, MediaControl.play, MediaControl.skipToNext], + controls: [favs[likeCount], prevCtrl, playCtrl, nextCtrl], systemActions: const { MediaAction.seek, }, processingState: AudioProcessingState.ready, updatePosition: pe.updatePosition + timeDelta, playing: false, + androidCompactActionIndices: [0, 2, 3], )); } } else if (pe.processingState == ProcessingState.completed) { final timeDelta = DateTime.now().difference(pe.updateTime); playbackState.add(playbackState.value.copyWith( - controls: [MediaControl.skipToPrevious, MediaControl.play, MediaControl.skipToNext], + controls: [favs[likeCount], prevCtrl, playCtrl, nextCtrl], systemActions: const { MediaAction.seek, }, processingState: AudioProcessingState.ready, updatePosition: pe.updatePosition + timeDelta, playing: false, + androidCompactActionIndices: [0, 2, 3], )); } else if (pe.processingState == ProcessingState.none) { stop(); @@ -133,6 +190,17 @@ class PlatformIntegrationDataSourceImpl extends BaseAudioHandler @override Future setCurrentSong(SongModel? songModel) async { mediaItem.add(songModel?.toMediaItem()); + + if (songModel != null) { + final state = playbackState.value; + final controls = state.controls.sublist(1); + final timeDelta = state.playing ? DateTime.now().difference(state.updateTime) : Duration.zero; + + playbackState.add(playbackState.value.copyWith( + controls: [favs[songModel.likeCount]] + controls, + updatePosition: state.updatePosition + timeDelta, + )); + } } } diff --git a/src/lib/system/repositories/music_data_repository_impl.dart b/src/lib/system/repositories/music_data_repository_impl.dart index 24afcbb..996f434 100644 --- a/src/lib/system/repositories/music_data_repository_impl.dart +++ b/src/lib/system/repositories/music_data_repository_impl.dart @@ -175,6 +175,12 @@ class MusicDataRepositoryImpl implements MusicDataRepository { } } + @override + Future incrementLikeCount(Song song) async { + final count = song.likeCount < MAX_LIKE_COUNT ? song.likeCount + 1 : 0; + await setLikeCount([song], count); + } + @override Future resetSkipCount(Song song) async { final newSong = (song as SongModel).copyWith(skipCount: 0);