0.5.0 - Rewritten downloads, many bugfixes

This commit is contained in:
exttex 2020-10-09 20:52:45 +02:00
parent f7cbb09bc1
commit f2f6b202d1
38 changed files with 5176 additions and 1365 deletions

View file

@ -1,6 +1,7 @@
import 'package:connectivity/connectivity.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:freezer/api/cache.dart';
import 'package:freezer/api/deezer.dart';
import 'package:freezer/api/definitions.dart';
import 'package:freezer/api/player.dart';
@ -57,7 +58,7 @@ class LibraryScreen extends StatelessWidget {
body: ListView(
children: <Widget>[
Container(height: 4.0,),
if (downloadManager.stopped && downloadManager.queue.length > 0)
if (!downloadManager.running && downloadManager.queueSize > 0)
ListTile(
title: Text('Downloads'.i18n),
leading: Icon(Icons.file_download),
@ -70,7 +71,7 @@ class LibraryScreen extends StatelessWidget {
},
),
//Dirty if to not use columns
if (downloadManager.stopped && downloadManager.queue.length > 0)
if (!downloadManager.running && downloadManager.queueSize > 0)
Divider(),
ListTile(
@ -109,6 +110,15 @@ class LibraryScreen extends StatelessWidget {
);
},
),
ListTile(
title: Text('History'.i18n),
leading: Icon(Icons.history),
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => HistoryScreen())
);
},
),
Divider(),
ListTile(
title: Text('Import'.i18n),
@ -196,14 +206,49 @@ class _LibraryTracksState extends State<LibraryTracks> {
ScrollController _scrollController = ScrollController();
List<Track> tracks = [];
List<Track> allTracks = [];
int trackCount;
Playlist get _playlist => Playlist(id: deezerAPI.favoritesPlaylistId);
Future _load() async {
//Already loaded
if (trackCount != null && tracks.length >= trackCount) {
//Update tracks cache if fully loaded
if (cache.libraryTracks == null || cache.libraryTracks.length != trackCount) {
setState(() {
cache.libraryTracks = tracks.map((t) => t.id).toList();
});
await cache.save();
}
return;
}
ConnectivityResult connectivity = await Connectivity().checkConnectivity();
if (connectivity != ConnectivityResult.none) {
setState(() => _loading = true);
int pos = tracks.length;
if (trackCount == null || tracks.length == 0) {
//Load tracks as a playlist
Playlist favPlaylist;
try {
favPlaylist = await deezerAPI.playlist(deezerAPI.favoritesPlaylistId);
} catch (e) {}
//Error loading
if (favPlaylist == null) {
setState(() => _loading = false);
return;
}
//Update
setState(() {
trackCount = favPlaylist.trackCount;
tracks = favPlaylist.tracks;
_makeFavorite();
_loading = false;
});
return;
}
//Load another page of tracks from deezer
List<Track> _t;
try {
@ -216,6 +261,7 @@ class _LibraryTracksState extends State<LibraryTracks> {
}
setState(() {
tracks.addAll(_t);
_makeFavorite();
_loading = false;
});
@ -236,6 +282,12 @@ class _LibraryTracksState extends State<LibraryTracks> {
});
}
//Update tracks with favorite true
void _makeFavorite() {
for (int i=0; i<tracks.length; i++)
tracks[i].favorite = true;
}
@override
void initState() {
_scrollController.addListener(() {
@ -257,6 +309,7 @@ class _LibraryTracksState extends State<LibraryTracks> {
return Scaffold(
appBar: AppBar(title: Text('Tracks'.i18n),),
body: ListView(
controller: _scrollController,
children: <Widget>[
Card(
child: Column(
@ -554,7 +607,7 @@ class _LibraryPlaylistsState extends State<LibraryPlaylists> {
ListTile(
title: Text('Create new playlist'.i18n),
leading: Icon(Icons.playlist_add),
onTap: () {
onTap: () async {
if (settings.offlineMode) {
Fluttertoast.showToast(
msg: 'Cannot create playlists in offline mode'.i18n,
@ -563,7 +616,8 @@ class _LibraryPlaylistsState extends State<LibraryPlaylists> {
return;
}
MenuSheet m = MenuSheet(context);
m.createPlaylist();
await m.createPlaylist();
await _load();
},
),
Divider(),
@ -586,6 +640,7 @@ class _LibraryPlaylistsState extends State<LibraryPlaylists> {
},
onHold: () {
MenuSheet m = MenuSheet(context);
favoritesPlaylist.library = true;
m.defaultPlaylistMenu(favoritesPlaylist);
},
),
@ -600,9 +655,10 @@ class _LibraryPlaylistsState extends State<LibraryPlaylists> {
)),
onHold: () {
MenuSheet m = MenuSheet(context);
m.defaultPlaylistMenu(p, onRemove: () {
setState(() => _playlists.remove(p));
});
m.defaultPlaylistMenu(
p,
onRemove: () {setState(() => _playlists.remove(p));},
onUpdate: () {_load();});
},
);
}),
@ -653,3 +709,49 @@ class _LibraryPlaylistsState extends State<LibraryPlaylists> {
);
}
}
class HistoryScreen extends StatefulWidget {
@override
_HistoryScreenState createState() => _HistoryScreenState();
}
class _HistoryScreenState extends State<HistoryScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('History'.i18n),
actions: [
IconButton(
icon: Icon(Icons.delete_sweep),
onPressed: () {
setState(() => cache.history = []);
cache.save();
},
)
],
),
body: ListView.builder(
itemCount: (cache.history??[]).length,
itemBuilder: (BuildContext context, int i) {
Track t = cache.history[i];
return TrackTile(
t,
onTap: () {
playerHelper.playFromTrackList(cache.history, t.id, QueueSource(
id: null,
text: 'History'.i18n,
source: 'history'
));
},
onHold: () {
MenuSheet m = MenuSheet(context);
m.defaultTrackMenu(t);
},
);
},
),
);
}
}