引入播放列表库,同时引入全新的播放控制器,以控制读库与播放模式的动作,但是功能仍在完善,需要确认部分边界问题
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
// lib/repositories/playlist_repository.dart
|
||||
import 'dart:math';
|
||||
import '../database/song_database.dart';
|
||||
import '../models/playlist.dart';
|
||||
import '../services/audio_service.dart';
|
||||
|
||||
class PlaylistRepository {
|
||||
final SongDatabase _db = SongDatabase();
|
||||
|
||||
String _generateId() {
|
||||
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||
final random = Random();
|
||||
return String.fromCharCodes(
|
||||
Iterable.generate(
|
||||
16, (_) => chars.codeUnitAt(random.nextInt(chars.length))),
|
||||
);
|
||||
}
|
||||
|
||||
// ════════════════════════════════════════════════════════════
|
||||
// 歌单操作
|
||||
// ════════════════════════════════════════════════════════════
|
||||
|
||||
Future<List<Playlist>> getAllPlaylists() async {
|
||||
final data = await _db.getAllPlaylists();
|
||||
return data.map((e) => Playlist.fromJson(e)).toList();
|
||||
}
|
||||
|
||||
Future<Playlist?> getPlaylist(String id) async {
|
||||
final data = await _db.getPlaylist(id);
|
||||
if (data == null) return null;
|
||||
return Playlist.fromJson(data);
|
||||
}
|
||||
|
||||
Future<Playlist> createPlaylist(String name) async {
|
||||
final playlist = Playlist(id: _generateId(), name: name);
|
||||
await _db.insertPlaylist(playlist.toJson());
|
||||
return playlist;
|
||||
}
|
||||
|
||||
Future<void> updatePlaylistName(String id, String newName) async {
|
||||
await _db.updatePlaylist(id, {
|
||||
'name': newName,
|
||||
'updated_at': DateTime.now().millisecondsSinceEpoch,
|
||||
});
|
||||
}
|
||||
|
||||
// ⭐ 新增:更新播放模式
|
||||
Future<void> updatePlaylistPlayMode(String id, PlayMode playMode) async {
|
||||
await _db.updatePlaylist(id, {
|
||||
// ⭐ 修改前:_playModeToString
|
||||
// 'play_mode': _playModeToString(playMode),
|
||||
|
||||
// ⭐ 修改后:用公开静态方法
|
||||
'play_mode': Playlist.playModeToString(playMode),
|
||||
'updated_at': DateTime.now().millisecondsSinceEpoch,
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> deletePlaylist(String id) async {
|
||||
await _db.deletePlaylist(id);
|
||||
}
|
||||
|
||||
// ════════════════════════════════════════════════════════════
|
||||
// 歌单歌曲操作
|
||||
// ════════════════════════════════════════════════════════════
|
||||
|
||||
Future<List<String>> getPlaylistSongIds(String playlistId) async {
|
||||
final data = await _db.getPlaylistSongs(playlistId);
|
||||
return data.map((e) => e['song_id'] as String).toList();
|
||||
}
|
||||
|
||||
Future<void> addSong(String playlistId, String songId) async {
|
||||
await _db.addSongToPlaylist(playlistId, songId);
|
||||
}
|
||||
|
||||
Future<void> removeSong(String playlistId, String songId) async {
|
||||
await _db.removeSongFromPlaylist(playlistId, songId);
|
||||
}
|
||||
|
||||
Future<void> reorderSongs(
|
||||
String playlistId, int oldIndex, int newIndex) async {
|
||||
if (oldIndex == newIndex) return;
|
||||
final songs = await _db.getPlaylistSongs(playlistId);
|
||||
if (oldIndex < 0 ||
|
||||
oldIndex >= songs.length ||
|
||||
newIndex < 0 ||
|
||||
newIndex >= songs.length) {
|
||||
return;
|
||||
}
|
||||
final items = songs.map((e) => e['song_id'] as String).toList();
|
||||
final item = items.removeAt(oldIndex);
|
||||
items.insert(newIndex, item);
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
await _db.removeSongFromPlaylist(playlistId, items[i]);
|
||||
await _db.addSongToPlaylist(playlistId, items[i], orderIndex: i);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> clearPlaylist(String playlistId) async {
|
||||
await _db.clearPlaylist(playlistId);
|
||||
}
|
||||
|
||||
// ════════════════════════════════════════════════════════════
|
||||
// 收藏操作
|
||||
// ════════════════════════════════════════════════════════════
|
||||
|
||||
Future<List<String>> getFavorites() async {
|
||||
final data = await _db.getFavorites();
|
||||
return data.map((e) => e['song_id'] as String).toList();
|
||||
}
|
||||
|
||||
Future<bool> isFavorite(String songId) async {
|
||||
return await _db.isFavorite(songId);
|
||||
}
|
||||
|
||||
Future<void> addFavorite(String songId) async {
|
||||
await _db.addFavorite(songId);
|
||||
}
|
||||
|
||||
Future<void> removeFavorite(String songId) async {
|
||||
await _db.removeFavorite(songId);
|
||||
}
|
||||
|
||||
Future<void> toggleFavorite(String songId) async {
|
||||
await _db.toggleFavorite(songId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user