// 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> getAllPlaylists() async { final data = await _db.getAllPlaylists(); return data.map((e) => Playlist.fromJson(e)).toList(); } Future getPlaylist(String id) async { final data = await _db.getPlaylist(id); if (data == null) return null; return Playlist.fromJson(data); } Future createPlaylist(String name) async { final playlist = Playlist(id: _generateId(), name: name); await _db.insertPlaylist(playlist.toJson()); return playlist; } Future updatePlaylistName(String id, String newName) async { await _db.updatePlaylist(id, { 'name': newName, 'updated_at': DateTime.now().millisecondsSinceEpoch, }); } // ⭐ 新增:更新播放模式 Future 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 deletePlaylist(String id) async { await _db.deletePlaylist(id); } // ════════════════════════════════════════════════════════════ // 歌单歌曲操作 // ════════════════════════════════════════════════════════════ Future> getPlaylistSongIds(String playlistId) async { final data = await _db.getPlaylistSongs(playlistId); return data.map((e) => e['song_id'] as String).toList(); } Future addSong(String playlistId, String songId) async { await _db.addSongToPlaylist(playlistId, songId); } Future removeSong(String playlistId, String songId) async { await _db.removeSongFromPlaylist(playlistId, songId); } Future 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 clearPlaylist(String playlistId) async { await _db.clearPlaylist(playlistId); } // ════════════════════════════════════════════════════════════ // 收藏操作 // ════════════════════════════════════════════════════════════ Future> getFavorites() async { final data = await _db.getFavorites(); return data.map((e) => e['song_id'] as String).toList(); } Future isFavorite(String songId) async { return await _db.isFavorite(songId); } Future addFavorite(String songId) async { await _db.addFavorite(songId); } Future removeFavorite(String songId) async { await _db.removeFavorite(songId); } Future toggleFavorite(String songId) async { await _db.toggleFavorite(songId); } }