shuffleArtist, playAlbum
This commit is contained in:
parent
b612b343a4
commit
44b746e3df
8 changed files with 113 additions and 50 deletions
|
@ -6,6 +6,7 @@ abstract class MusicDataInfoRepository {
|
|||
Future<Song> getSongByPath(String path);
|
||||
Stream<List<Song>> get songStream;
|
||||
Stream<List<Song>> getAlbumSongStream(Album album);
|
||||
Stream<List<Song>> getArtistSongStream(Artist artist);
|
||||
|
||||
Stream<List<Album>> get albumStream;
|
||||
Stream<List<Album>> getArtistAlbumStream(Artist artist);
|
||||
|
|
25
lib/domain/usecases/play_album.dart
Normal file
25
lib/domain/usecases/play_album.dart
Normal file
|
@ -0,0 +1,25 @@
|
|||
import '../entities/album.dart';
|
||||
import '../entities/shuffle_mode.dart';
|
||||
import '../repositories/music_data_repository.dart';
|
||||
import 'play_songs.dart';
|
||||
import 'set_shuffle_mode.dart';
|
||||
|
||||
class PlayAlbum {
|
||||
PlayAlbum(
|
||||
this._musicDataRepository,
|
||||
this._playSongs,
|
||||
this._setShuffleMode,
|
||||
);
|
||||
|
||||
final PlaySongs _playSongs;
|
||||
final SetShuffleMode _setShuffleMode;
|
||||
|
||||
final MusicDataRepository _musicDataRepository;
|
||||
|
||||
Future<void> call(Album album) async {
|
||||
final songs = await _musicDataRepository.getAlbumSongStream(album).first;
|
||||
|
||||
await _setShuffleMode(ShuffleMode.none, updateQueue: false);
|
||||
_playSongs(songs: songs, initialIndex: 0);
|
||||
}
|
||||
}
|
29
lib/domain/usecases/play_artist.dart
Normal file
29
lib/domain/usecases/play_artist.dart
Normal file
|
@ -0,0 +1,29 @@
|
|||
import 'dart:math';
|
||||
|
||||
import '../entities/artist.dart';
|
||||
import '../entities/shuffle_mode.dart';
|
||||
import '../repositories/music_data_repository.dart';
|
||||
import 'play_songs.dart';
|
||||
import 'set_shuffle_mode.dart';
|
||||
|
||||
class PlayArtist {
|
||||
PlayArtist(
|
||||
this._musicDataRepository,
|
||||
this._playSongs,
|
||||
this._setShuffleMode,
|
||||
);
|
||||
|
||||
final PlaySongs _playSongs;
|
||||
final SetShuffleMode _setShuffleMode;
|
||||
|
||||
final MusicDataRepository _musicDataRepository;
|
||||
|
||||
Future<void> call(Artist artist) async {
|
||||
final songs = await _musicDataRepository.getArtistSongStream(artist).first;
|
||||
final rng = Random();
|
||||
final index = rng.nextInt(songs.length);
|
||||
|
||||
await _setShuffleMode(ShuffleMode.plus, updateQueue: false);
|
||||
_playSongs(songs: songs, initialIndex: index);
|
||||
}
|
||||
}
|
|
@ -18,23 +18,25 @@ class SetShuffleMode {
|
|||
|
||||
final QueueManagerModule _queueManagerModule;
|
||||
|
||||
Future<void> call(ShuffleMode shuffleMode) async {
|
||||
Future<void> call(ShuffleMode shuffleMode, {bool updateQueue = true}) async {
|
||||
_audioPlayerRepository.setShuffleMode(shuffleMode);
|
||||
|
||||
final currentIndex = _audioPlayerRepository.currentIndexStream.value;
|
||||
final originalIndex = _queueManagerModule.queue[currentIndex].originalIndex;
|
||||
if (updateQueue) {
|
||||
final currentIndex = _audioPlayerRepository.currentIndexStream.value;
|
||||
final originalIndex = _queueManagerModule.queue[currentIndex].originalIndex;
|
||||
|
||||
await _queueManagerModule.reshuffleQueue(shuffleMode, currentIndex);
|
||||
final queue = _queueManagerModule.queue;
|
||||
await _queueManagerModule.reshuffleQueue(shuffleMode, currentIndex);
|
||||
final queue = _queueManagerModule.queue;
|
||||
|
||||
final songList = queue.map((e) => e.song).toList();
|
||||
final splitIndex = shuffleMode == ShuffleMode.none ? originalIndex : 0;
|
||||
_audioPlayerRepository.replaceQueueAroundIndex(
|
||||
index: currentIndex,
|
||||
before: songList.sublist(0, splitIndex),
|
||||
after: songList.sublist(splitIndex + 1),
|
||||
);
|
||||
final songList = queue.map((e) => e.song).toList();
|
||||
final splitIndex = shuffleMode == ShuffleMode.none ? originalIndex : 0;
|
||||
_audioPlayerRepository.replaceQueueAroundIndex(
|
||||
index: currentIndex,
|
||||
before: songList.sublist(0, splitIndex),
|
||||
after: songList.sublist(splitIndex + 1),
|
||||
);
|
||||
|
||||
_platformIntegrationRepository.setQueue(songList);
|
||||
_platformIntegrationRepository.setQueue(songList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,54 +2,30 @@ import 'dart:math';
|
|||
|
||||
import '../entities/shuffle_mode.dart';
|
||||
import '../entities/song.dart';
|
||||
import '../modules/queue_manager.dart';
|
||||
import '../repositories/audio_player_repository.dart';
|
||||
import '../repositories/music_data_repository.dart';
|
||||
import '../repositories/persistent_player_state_repository.dart';
|
||||
import '../repositories/platform_integration_repository.dart';
|
||||
import 'play_songs.dart';
|
||||
import 'set_shuffle_mode.dart';
|
||||
|
||||
const SHUFFLE_MODE = ShuffleMode.plus;
|
||||
|
||||
class ShuffleAll {
|
||||
ShuffleAll(
|
||||
this._audioPlayerRepository,
|
||||
this._musicDataRepository,
|
||||
this._platformIntegrationRepository,
|
||||
this._playerStateRepository,
|
||||
this._queueGenerationModule,
|
||||
this._playSongs,
|
||||
this._setShuffleMode,
|
||||
);
|
||||
|
||||
final AudioPlayerRepository _audioPlayerRepository;
|
||||
final MusicDataRepository _musicDataRepository;
|
||||
final PlatformIntegrationRepository _platformIntegrationRepository;
|
||||
final PlayerStateRepository _playerStateRepository;
|
||||
final PlaySongs _playSongs;
|
||||
final SetShuffleMode _setShuffleMode;
|
||||
|
||||
final QueueManagerModule _queueGenerationModule;
|
||||
final MusicDataRepository _musicDataRepository;
|
||||
|
||||
Future<void> call() async {
|
||||
final List<Song> songs = await _musicDataRepository.songStream.first;
|
||||
final rng = Random();
|
||||
final index = rng.nextInt(songs.length);
|
||||
|
||||
_audioPlayerRepository.setShuffleMode(SHUFFLE_MODE);
|
||||
|
||||
await _queueGenerationModule.setQueue(
|
||||
SHUFFLE_MODE,
|
||||
songs,
|
||||
index,
|
||||
);
|
||||
|
||||
final queueItems = _queueGenerationModule.queue;
|
||||
final songList = queueItems.map((e) => e.song).toList();
|
||||
|
||||
await _audioPlayerRepository.loadQueue(
|
||||
initialIndex: 0,
|
||||
queue: songList,
|
||||
);
|
||||
_audioPlayerRepository.play();
|
||||
|
||||
_platformIntegrationRepository.setCurrentSong(songs[index]);
|
||||
// _platformIntegrationRepository.play();
|
||||
_platformIntegrationRepository.setQueue(songList);
|
||||
await _setShuffleMode(SHUFFLE_MODE, updateQueue: false);
|
||||
_playSongs(songs: songs, initialIndex: index);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ import 'domain/usecases/handle_playback_state.dart';
|
|||
import 'domain/usecases/move_queue_item.dart';
|
||||
import 'domain/usecases/pause.dart';
|
||||
import 'domain/usecases/play.dart';
|
||||
import 'domain/usecases/play_album.dart';
|
||||
import 'domain/usecases/play_artist.dart';
|
||||
import 'domain/usecases/play_next.dart';
|
||||
import 'domain/usecases/play_songs.dart';
|
||||
import 'domain/usecases/remove_queue_index.dart';
|
||||
|
@ -74,6 +76,8 @@ Future<void> setupGetIt() async {
|
|||
moveQueueItem: getIt(),
|
||||
pause: getIt(),
|
||||
play: getIt(),
|
||||
playAlbum: getIt(),
|
||||
playArtist: getIt(),
|
||||
playNext: getIt(),
|
||||
playSongs: getIt(),
|
||||
removeQueueIndex: getIt(),
|
||||
|
@ -126,6 +130,20 @@ Future<void> setupGetIt() async {
|
|||
getIt(),
|
||||
),
|
||||
);
|
||||
getIt.registerLazySingleton<PlayAlbum>(
|
||||
() => PlayAlbum(
|
||||
getIt(),
|
||||
getIt(),
|
||||
getIt(),
|
||||
),
|
||||
);
|
||||
getIt.registerLazySingleton<PlayArtist>(
|
||||
() => PlayArtist(
|
||||
getIt(),
|
||||
getIt(),
|
||||
getIt(),
|
||||
),
|
||||
);
|
||||
getIt.registerLazySingleton<PlayNext>(
|
||||
() => PlayNext(
|
||||
getIt(),
|
||||
|
@ -188,8 +206,6 @@ Future<void> setupGetIt() async {
|
|||
getIt(),
|
||||
getIt(),
|
||||
getIt(),
|
||||
getIt(),
|
||||
getIt(),
|
||||
),
|
||||
);
|
||||
getIt.registerLazySingleton<UpdateDatabase>(
|
||||
|
|
|
@ -11,6 +11,8 @@ import '../../domain/usecases/add_to_queue.dart';
|
|||
import '../../domain/usecases/move_queue_item.dart';
|
||||
import '../../domain/usecases/pause.dart';
|
||||
import '../../domain/usecases/play.dart';
|
||||
import '../../domain/usecases/play_album.dart';
|
||||
import '../../domain/usecases/play_artist.dart';
|
||||
import '../../domain/usecases/play_next.dart';
|
||||
import '../../domain/usecases/play_songs.dart';
|
||||
import '../../domain/usecases/remove_queue_index.dart';
|
||||
|
@ -29,6 +31,8 @@ class AudioStore extends _AudioStore with _$AudioStore {
|
|||
@required MoveQueueItem moveQueueItem,
|
||||
@required Pause pause,
|
||||
@required Play play,
|
||||
@required PlayAlbum playAlbum,
|
||||
@required PlayArtist playArtist,
|
||||
@required PlayNext playNext,
|
||||
@required PlaySongs playSongs,
|
||||
@required RemoveQueueIndex removeQueueIndex,
|
||||
|
@ -46,6 +50,8 @@ class AudioStore extends _AudioStore with _$AudioStore {
|
|||
audioPlayerInfoRepository,
|
||||
pause,
|
||||
play,
|
||||
playAlbum,
|
||||
playArtist,
|
||||
playNext,
|
||||
removeQueueIndex,
|
||||
seekToIndex,
|
||||
|
@ -65,6 +71,8 @@ abstract class _AudioStore with Store {
|
|||
this._audioPlayerInfoRepository,
|
||||
this._pause,
|
||||
this._play,
|
||||
this._playAlbum,
|
||||
this._playArtist,
|
||||
this._playNext,
|
||||
this._removeQueueIndex,
|
||||
this._seekToIndex,
|
||||
|
@ -96,6 +104,8 @@ abstract class _AudioStore with Store {
|
|||
final MoveQueueItem _moveQueueItem;
|
||||
final Pause _pause;
|
||||
final Play _play;
|
||||
final PlayAlbum _playAlbum;
|
||||
final PlayArtist _playArtist;
|
||||
final PlayNext _playNext;
|
||||
final PlaySongs _playSongs;
|
||||
final RemoveQueueIndex _removeQueueIndex;
|
||||
|
@ -182,10 +192,10 @@ abstract class _AudioStore with Store {
|
|||
}
|
||||
|
||||
Future<void> playAlbum(Album album) async {
|
||||
// _audioInterface.playAlbum(album);
|
||||
_playAlbum(album);
|
||||
}
|
||||
|
||||
Future<void> shuffleArtist(Artist artist) async {
|
||||
// _audioInterface.playArtist(artist, shuffleMode: ShuffleMode.plus);
|
||||
_playArtist(artist);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,10 @@ class MusicDataRepositoryImpl implements MusicDataRepository {
|
|||
Stream<List<Song>> getAlbumSongStream(Album album) =>
|
||||
_musicDataSource.getAlbumSongStream(album as AlbumModel);
|
||||
|
||||
@override
|
||||
Stream<List<Song>> getArtistSongStream(Artist artist) =>
|
||||
_musicDataSource.getArtistSongStream(artist as ArtistModel);
|
||||
|
||||
@override
|
||||
Stream<List<Album>> getArtistAlbumStream(Artist artist) =>
|
||||
_musicDataSource.getArtistAlbumStream(artist as ArtistModel);
|
||||
|
|
Loading…
Add table
Reference in a new issue