🐛 Bug fixes on playback
This commit is contained in:
@ -1,10 +1,12 @@
|
||||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
import 'package:media_kit/media_kit.dart' hide Track;
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:rhythm_box/platform.dart';
|
||||
import 'package:rhythm_box/services/local_track.dart';
|
||||
import 'package:rhythm_box/services/server/server.dart';
|
||||
import 'package:spotify/spotify.dart' hide Playlist;
|
||||
import 'package:rhythm_box/services/audio_player/custom_player.dart';
|
||||
import 'dart:async';
|
||||
@ -20,7 +22,7 @@ part 'audio_player_impl.dart';
|
||||
class RhythmMedia extends mk.Media {
|
||||
final Track track;
|
||||
|
||||
static int serverPort = 0;
|
||||
static int get serverPort => Get.find<PlaybackServerProvider>().port;
|
||||
|
||||
RhythmMedia(
|
||||
this.track, {
|
||||
|
@ -58,8 +58,8 @@ class ServerPlaybackRoutesProvider {
|
||||
},
|
||||
headers: res.headers.map,
|
||||
);
|
||||
} catch (e) {
|
||||
log('[PlaybackSever] Error: $e');
|
||||
} catch (e, stackTrace) {
|
||||
log('[PlaybackSever] Error: $e; Trace:\n $stackTrace');
|
||||
return Response.internalServerError();
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ import 'package:shelf/shelf_io.dart';
|
||||
import 'package:shelf_router/shelf_router.dart';
|
||||
|
||||
class PlaybackServerProvider extends GetxController {
|
||||
final int port = Random().nextInt(17500) + 5000;
|
||||
|
||||
HttpServer? _server;
|
||||
Router? _router;
|
||||
|
||||
@ -26,8 +28,6 @@ class PlaybackServerProvider extends GetxController {
|
||||
pipeline.addMiddleware(logRequests());
|
||||
}
|
||||
|
||||
final port = Random().nextInt(17500) + 5000;
|
||||
|
||||
RhythmMedia.serverPort = port;
|
||||
|
||||
_router = Router();
|
||||
|
@ -1,17 +1,36 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rhythm_box/providers/audio_player.dart';
|
||||
import 'package:rhythm_box/services/audio_player/audio_player.dart';
|
||||
import 'package:rhythm_box/services/local_track.dart';
|
||||
import 'package:rhythm_box/services/sourced_track/sourced_track.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
|
||||
class SourcedTrackProvider extends GetxController {
|
||||
Rx<SourcedTrack?> sourcedTrack = Rx(null);
|
||||
|
||||
Future<SourcedTrack?> fetch(RhythmMedia? media) async {
|
||||
final track = media?.track;
|
||||
if (track == null || track is LocalTrack) {
|
||||
sourcedTrack.value = null;
|
||||
return null;
|
||||
}
|
||||
|
||||
final sourcedTrack = await SourcedTrack.fetchFromTrack(track: track);
|
||||
final AudioPlayerProvider playback = Get.find();
|
||||
|
||||
return sourcedTrack;
|
||||
ever(playback.state.value.tracks.obs, (List<Track> tracks) {
|
||||
if (tracks.isEmpty || tracks.none((element) => element.id == track.id)) {
|
||||
invalidate();
|
||||
}
|
||||
});
|
||||
|
||||
sourcedTrack.value = await SourcedTrack.fetchFromTrack(track: track);
|
||||
|
||||
return sourcedTrack.value;
|
||||
}
|
||||
|
||||
void invalidate() {
|
||||
sourcedTrack.value = null;
|
||||
fetch(null);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user