Skip to content

Commit 2896b13

Browse files
authored
Merge pull request #363 from avdept/album-description
Add overview for albums
2 parents 65acd70 + 8bcd6d1 commit 2896b13

7 files changed

Lines changed: 462 additions & 1 deletion

File tree

‎lib/src/data/api/subsonic/subsonic_api.dart‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ class SubsonicApi {
101101
),
102102
);
103103

104+
Future<SubsonicAlbumInfoDTO> getAlbumInfo2(String id) async =>
105+
SubsonicAlbumInfoDTO.fromJson(
106+
_section(await call('getAlbumInfo2', {'id': id}), 'albumInfo'),
107+
);
108+
104109
Future<SubsonicAlbumDTO> getAlbum(String id) async =>
105110
SubsonicAlbumDTO.fromJson(
106111
_section(await call('getAlbum', {'id': id}), 'album'),

‎lib/src/data/backend/subsonic/subsonic_client.dart‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,7 @@ class SubsonicClient implements MediaServerClient {
677677
ItemKind.song => (await _api.getSong(
678678
itemId,
679679
)).toLibraryItem(lyricsAvailable: capabilities.lyrics),
680-
ItemKind.album => (await _api.getAlbum(itemId)).toLibraryItem(),
680+
ItemKind.album => await _albumWithInfo(itemId),
681681
ItemKind.artist => await _artistWithInfo(itemId),
682682
ItemKind.playlist => (await _api.getPlaylist(itemId)).toLibraryItem(),
683683
ItemKind.genre => LibraryItem(
@@ -696,6 +696,19 @@ class SubsonicClient implements MediaServerClient {
696696
.toLibraryItem(),
697697
};
698698

699+
Future<LibraryItem> _albumWithInfo(String id) async {
700+
final results = await Future.wait<Object?>([
701+
_api.getAlbum(id),
702+
_api
703+
.getAlbumInfo2(id)
704+
.then<Object?>((info) => info, onError: (_) => null),
705+
]);
706+
final album = (results[0]! as SubsonicAlbumDTO).toLibraryItem();
707+
final info = results[1] as SubsonicAlbumInfoDTO?;
708+
final notes = subsonicPlainText(info?.notes);
709+
return notes == null ? album : album.copyWith(overview: notes);
710+
}
711+
699712
Future<LibraryItem> _artistWithInfo(String id) async {
700713
final results = await Future.wait<Object?>([
701714
_api.getArtist(id),

‎lib/src/data/dto/subsonic/subsonic_dto.dart‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,18 @@ abstract class SubsonicArtistInfoDTO with _$SubsonicArtistInfoDTO {
168168
_$SubsonicArtistInfoDTOFromJson(json);
169169
}
170170

171+
@freezed
172+
abstract class SubsonicAlbumInfoDTO with _$SubsonicAlbumInfoDTO {
173+
const factory SubsonicAlbumInfoDTO({
174+
String? notes,
175+
String? musicBrainzId,
176+
String? lastFmUrl,
177+
}) = _SubsonicAlbumInfoDTO;
178+
179+
factory SubsonicAlbumInfoDTO.fromJson(Map<String, dynamic> json) =>
180+
_$SubsonicAlbumInfoDTOFromJson(json);
181+
}
182+
171183
@freezed
172184
abstract class SubsonicIndexDTO with _$SubsonicIndexDTO {
173185
const factory SubsonicIndexDTO({

‎lib/src/data/dto/subsonic/subsonic_dto.freezed.dart‎

Lines changed: 269 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎lib/src/data/dto/subsonic/subsonic_dto.g.dart‎

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)