Offline albums fix, adaptive icon, option to replace downloads

This commit is contained in:
exttex 2020-09-13 16:06:12 +02:00
parent a494601ab0
commit 24e598fe99
6 changed files with 80 additions and 7 deletions

View file

@ -30,7 +30,7 @@ class AlbumDetails extends StatelessWidget {
int get cdCount {
int c = 1;
for (Track t in album.tracks) {
if (t.diskNumber > c) c = t.diskNumber;
if ((t.diskNumber??1) > c) c = t.diskNumber;
}
return c;
}
@ -163,7 +163,7 @@ class AlbumDetails extends StatelessWidget {
),
),
...List.generate(cdCount, (cdi) {
List<Track> tracks = album.tracks.where((t) => t.diskNumber == cdi + 1).toList();
List<Track> tracks = album.tracks.where((t) => (t.diskNumber??1) == cdi + 1).toList();
return Column(
children: [
Padding(
@ -601,7 +601,11 @@ class _DiscographyScreenState extends State<DiscographyScreen> {
}
}
enum SortType {
DEFAULT,
ALPHABETIC,
ARTIST
}
class PlaylistDetails extends StatefulWidget {
@ -617,8 +621,25 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
Playlist playlist;
bool _loading = false;
bool _error = false;
SortType _sort = SortType.DEFAULT;
ScrollController _scrollController = ScrollController();
//Get sorted playlist
List<Track> get sorted {
List<Track> tracks = new List.from(playlist.tracks??[]);
switch (_sort) {
case SortType.ALPHABETIC:
tracks.sort((a, b) => a.title.compareTo(b.title));
return tracks;
case SortType.ARTIST:
tracks.sort((a, b) => a.artists[0].name.compareTo(b.artists[0].name));
return tracks;
case SortType.DEFAULT:
default:
return tracks;
}
}
//Load tracks from api
void _load() async {
if (playlist.tracks.length < playlist.trackCount && !_loading) {
@ -790,16 +811,40 @@ class _PlaylistDetailsState extends State<PlaylistDetails> {
onPressed: () {
downloadManager.addOfflinePlaylist(playlist, private: false);
},
)
),
PopupMenuButton(
child: Icon(Icons.sort, size: 32.0),
onSelected: (SortType s) => setState(() => _sort = s),
itemBuilder: (context) => <PopupMenuEntry<SortType>>[
const PopupMenuItem(
value: SortType.DEFAULT,
child: Text('Default'),
),
const PopupMenuItem(
value: SortType.ALPHABETIC,
child: Text('Alphabetic'),
),
const PopupMenuItem(
value: SortType.ARTIST,
child: Text('Artist'),
),
],
),
Container(width: 4.0)
],
),
),
...List.generate(playlist.tracks.length, (i) {
Track t = playlist.tracks[i];
Track t = sorted[i];
return TrackTile(
t,
onTap: () {
playerHelper.playFromPlaylist(playlist, t.id);
Playlist p = Playlist(
title: playlist.title,
id: playlist.id,
tracks: sorted
);
playerHelper.playFromPlaylist(p, t.id);
},
onHold: () {
MenuSheet m = MenuSheet(context);

View file

@ -567,6 +567,16 @@ class _GeneralSettingsState extends State<GeneralSettings> {
},
),
),
ListTile(
title: Text('Overwrite already downloaded files'),
leading: Switch(
value: settings.overwriteDownload,
onChanged: (v) {
setState(() => settings.overwriteDownload = v);
settings.save();
},
),
),
ListTile(
title: Text('Copy ARL'),
subtitle: Text('Copy userToken/ARL Cookie for use in other apps.'),