🐛 Bug fixes of libraries
This commit is contained in:
@@ -71,16 +71,22 @@ class PlaylistRepository extends _$PlaylistRepository {
|
||||
|
||||
Stream<List<AlbumData>> watchAllAlbums() {
|
||||
final db = ref.watch(databaseProvider);
|
||||
// Distinct albums by grouping
|
||||
// Distinct albums by grouping - group by album name only to prevent duplicates
|
||||
// when the same album has inconsistent artist metadata across tracks
|
||||
final query = db.selectOnly(db.tracks)
|
||||
..addColumns([db.tracks.album, db.tracks.artist, db.tracks.artUri])
|
||||
..groupBy([db.tracks.album, db.tracks.artist]);
|
||||
..addColumns([
|
||||
db.tracks.album,
|
||||
db.tracks.artist.min(), // Get the first non-null artist
|
||||
db.tracks.artUri.min(), // Get the first non-null art URI
|
||||
])
|
||||
..where(db.tracks.album.isNotNull())
|
||||
..groupBy([db.tracks.album]);
|
||||
|
||||
return query.map((row) {
|
||||
return AlbumData(
|
||||
album: row.read(db.tracks.album) ?? 'Unknown Album',
|
||||
artist: row.read(db.tracks.artist) ?? 'Unknown Artist',
|
||||
artUri: row.read(db.tracks.artUri),
|
||||
album: row.read(db.tracks.album)!,
|
||||
artist: row.read(db.tracks.artist.min()) ?? 'Various Artists',
|
||||
artUri: row.read(db.tracks.artUri.min()),
|
||||
);
|
||||
}).watch();
|
||||
}
|
||||
|
||||
@@ -24,13 +24,28 @@ class TrackRepository extends _$TrackRepository {
|
||||
}
|
||||
|
||||
Future<void> importFiles(List<String> filePaths) async {
|
||||
final db = ref.read(databaseProvider);
|
||||
final settings = ref.read(settingsProvider).value;
|
||||
final importMode = settings?.importMode ?? ImportMode.copy;
|
||||
|
||||
// Filter out files that are already indexed
|
||||
final existingPaths = await (db.select(
|
||||
db.tracks,
|
||||
)..where((t) => t.path.isIn(filePaths))).map((t) => t.path).get();
|
||||
|
||||
final existingPathsSet = existingPaths.toSet();
|
||||
final newFilePaths = filePaths
|
||||
.where((path) => !existingPathsSet.contains(path))
|
||||
.toList();
|
||||
|
||||
if (newFilePaths.isEmpty) {
|
||||
return; // All files already indexed
|
||||
}
|
||||
|
||||
if (importMode == ImportMode.copy) {
|
||||
await _importFilesWithCopy(filePaths);
|
||||
await _importFilesWithCopy(newFilePaths);
|
||||
} else {
|
||||
await _importFilesInPlace(filePaths);
|
||||
await _importFilesInPlace(newFilePaths);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user