Skip to content

Commit 8f7e02d

Browse files
Refactor song management: move SongBloc to playlists feature and update dependencies
1 parent 2f75c61 commit 8f7e02d

11 files changed

Lines changed: 94 additions & 62 deletions

File tree

lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:meloplay/src/features/playlists/bloc/playlists/playlists_cubit.d
1212
import 'package:meloplay/src/features/playlists/bloc/recents/recents_bloc.dart';
1313
import 'package:meloplay/src/features/config/bloc/scan/scan_cubit.dart';
1414
import 'package:meloplay/src/features/home/bloc/search/search_bloc.dart';
15-
import 'package:meloplay/src/features/player/bloc/song/song_bloc.dart';
15+
import 'package:meloplay/src/features/playlists/bloc/song/song_bloc.dart';
1616
import 'package:meloplay/src/features/config/bloc/theme/theme_bloc.dart';
1717
import 'package:meloplay/src/core/di/service_locator.dart';
1818
import 'package:meloplay/src/core/services/music_player.dart';

lib/src/core/di/service_locator.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:meloplay/src/features/player/bloc/player/player_bloc.dart';
99
import 'package:meloplay/src/features/playlists/bloc/recents/recents_bloc.dart';
1010
import 'package:meloplay/src/features/config/bloc/scan/scan_cubit.dart';
1111
import 'package:meloplay/src/features/home/bloc/search/search_bloc.dart';
12-
import 'package:meloplay/src/features/player/bloc/song/song_bloc.dart';
12+
import 'package:meloplay/src/features/playlists/bloc/song/song_bloc.dart';
1313
import 'package:meloplay/src/features/config/bloc/theme/theme_bloc.dart';
1414

1515
import 'package:meloplay/src/features/home/data/repositories/home_repository.dart';
@@ -46,17 +46,17 @@ void init() {
4646
4747
sl.registerFactory(() => ThemeBloc());
4848

49-
sl.registerFactory(() => HomeBloc(repository: sl<HomeRepository>()));
49+
sl.registerFactory(() => HomeBloc(repository: sl()));
5050

51-
sl.registerFactory(() => PlayerBloc(sl<MusicPlayer>()));
51+
sl.registerFactory(() => PlayerBloc(sl()));
5252

53-
sl.registerFactory(() => SongBloc(repository: sl<SongRepository>()));
53+
sl.registerFactory(() => SongBloc(repository: sl()));
5454

55-
sl.registerFactory(() => FavoritesBloc(repository: sl<SongRepository>()));
55+
sl.registerFactory(() => FavoritesBloc(repository: sl()));
5656

57-
sl.registerFactory(() => RecentsBloc(repository: sl<SongRepository>()));
57+
sl.registerFactory(() => RecentsBloc(repository: sl()));
5858

59-
sl.registerFactory(() => SearchBloc(repository: sl<SearchRepository>()));
59+
sl.registerFactory(() => SearchBloc(repository: sl()));
6060

6161
/// -----------------------
6262
/// CUBITS

lib/src/core/shared/buttons/animated_favorite_button.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:just_audio_background/just_audio_background.dart';
4-
import 'package:meloplay/src/features/player/bloc/song/song_bloc.dart';
4+
import 'package:meloplay/src/features/playlists/bloc/song/song_bloc.dart';
55

66
class AnimatedFavoriteButton extends StatefulWidget {
77
final bool isFavorite;

lib/src/features/player/bloc/song/song_bloc.dart

Lines changed: 0 additions & 29 deletions
This file was deleted.

lib/src/features/player/presentation/player_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import 'package:meloplay/src/core/shared/buttons/repeat_button.dart';
1313
import 'package:meloplay/src/core/shared/buttons/shuffle_button.dart';
1414
import 'package:meloplay/src/core/shared/sleep_timer_dialog.dart';
1515
import 'package:on_audio_query/on_audio_query.dart';
16-
import 'package:meloplay/src/features/player/bloc/song/song_bloc.dart';
16+
import 'package:meloplay/src/features/playlists/bloc/song/song_bloc.dart';
1717
import 'package:meloplay/src/core/di/service_locator.dart';
1818
import 'package:meloplay/src/core/services/music_player.dart';
1919
import 'package:meloplay/src/features/playlists/data/repositories/song_repository.dart';
Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
1+
// favorites_bloc.dart
12
import 'package:bloc/bloc.dart';
23
import 'package:flutter/foundation.dart';
34
import 'package:meloplay/src/features/playlists/data/repositories/song_repository.dart';
4-
55
import 'package:on_audio_query/on_audio_query.dart';
66

77
part 'favorites_event.dart';
88
part 'favorites_state.dart';
99

1010
class FavoritesBloc extends Bloc<FavoritesEvent, FavoritesState> {
11+
final SongRepository _repository;
12+
1113
FavoritesBloc({required SongRepository repository})
12-
: super(FavoritesInitial()) {
13-
on<FetchFavorites>((event, emit) async {
14-
emit(FavoritesLoading());
15-
try {
16-
final favoriteSongs = await repository.getFavoriteSongs();
17-
emit(FavoritesLoaded(favoriteSongs));
18-
} catch (e) {
19-
emit(FavoritesError(e.toString()));
20-
}
21-
});
14+
: _repository = repository,
15+
super(FavoritesInitial()) {
16+
on<FetchFavorites>(_onFetchFavorites);
17+
}
18+
19+
Future<void> _onFetchFavorites(
20+
FetchFavorites event,
21+
Emitter<FavoritesState> emit,
22+
) async {
23+
emit(FavoritesLoading());
24+
try {
25+
final favoriteSongs = await _repository.getFavoriteSongs();
26+
emit(FavoritesLoaded(favoriteSongs));
27+
} catch (e) {
28+
emit(FavoritesError(e.toString()));
29+
}
2230
}
2331
}
Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
1+
// recents_bloc.dart
12
import 'package:bloc/bloc.dart';
23
import 'package:flutter/foundation.dart';
34
import 'package:meloplay/src/features/playlists/data/repositories/song_repository.dart';
4-
55
import 'package:on_audio_query/on_audio_query.dart';
66

77
part 'recents_event.dart';
88
part 'recents_state.dart';
99

1010
class RecentsBloc extends Bloc<RecentsEvent, RecentsState> {
11-
RecentsBloc({required SongRepository repository}) : super(RecentsInitial()) {
12-
on<FetchRecents>((event, emit) async {
13-
emit(RecentsLoading());
14-
try {
15-
final recentSongs = await repository.getRecentlyPlayedSongs();
16-
emit(RecentsLoaded(recentSongs));
17-
} catch (e) {
18-
emit(RecentsError(e.toString()));
19-
}
20-
});
11+
final SongRepository _repository;
12+
13+
RecentsBloc({required SongRepository repository})
14+
: _repository = repository,
15+
super(RecentsInitial()) {
16+
on<FetchRecents>(_onFetchRecents);
17+
}
18+
19+
Future<void> _onFetchRecents(
20+
FetchRecents event,
21+
Emitter<RecentsState> emit,
22+
) async {
23+
emit(RecentsLoading());
24+
try {
25+
final recentSongs = await _repository.getRecentlyPlayedSongs();
26+
emit(RecentsLoaded(recentSongs));
27+
} catch (e) {
28+
emit(RecentsError(e.toString()));
29+
}
2130
}
2231
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// song_bloc.dart
2+
import 'package:bloc/bloc.dart';
3+
import 'package:flutter/foundation.dart';
4+
import 'package:meloplay/src/features/playlists/data/repositories/song_repository.dart';
5+
6+
part 'song_event.dart';
7+
part 'song_state.dart';
8+
9+
class SongBloc extends Bloc<SongEvent, SongState> {
10+
final SongRepository _repository;
11+
12+
SongBloc({required SongRepository repository})
13+
: _repository = repository,
14+
super(PlayerInitial()) {
15+
on<ToggleFavorite>(_onToggleFavorite);
16+
on<AddToRecentlyPlayed>(_onAddToRecentlyPlayed);
17+
}
18+
19+
Future<void> _onToggleFavorite(
20+
ToggleFavorite event,
21+
Emitter<SongState> emit,
22+
) async {
23+
emit(ToggleFavoriteInProgress());
24+
try {
25+
await _repository.toggleFavorite(event.songId);
26+
emit(ToggleFavoriteSuccess());
27+
} catch (e) {
28+
emit(ToggleFavoriteFailure());
29+
}
30+
}
31+
32+
Future<void> _onAddToRecentlyPlayed(
33+
AddToRecentlyPlayed event,
34+
Emitter<SongState> emit,
35+
) async {
36+
emit(AddToRecentlyPlayedInProgress());
37+
try {
38+
await _repository.addToRecentlyPlayed(event.songId);
39+
emit(AddToRecentlyPlayedSuccess());
40+
} catch (e) {
41+
emit(AddToRecentlyPlayedError());
42+
}
43+
}
44+
}
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)