From 149a5c922f86149e0f0321088c4aa2c0083f4d5f Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 2 May 2022 12:01:31 +0200 Subject: [PATCH] Remove bad quality streaming --- lib/providers/home.dart | 65 ++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/lib/providers/home.dart b/lib/providers/home.dart index 1388a16..89aa6ec 100644 --- a/lib/providers/home.dart +++ b/lib/providers/home.dart @@ -1,9 +1,7 @@ // ignore_for_file: avoid_print import 'dart:convert'; -import 'package:fip_parser_ui/globals.dart'; -import 'package:flutter/foundation.dart'; -import 'package:universal_io/io.dart'; +import 'dart:io'; import 'package:fip_parser_ui/models/track.dart'; import 'package:flutter/material.dart'; import 'package:kplayer/kplayer.dart'; @@ -27,12 +25,11 @@ class HomeProvider with ChangeNotifier { bool stop = false; while (pageNbr < userPageNbr && !stop) { final req = Uri.parse( - '${proxyHeader}www.radiofrance.fr:443/api/v1.7/stations/fip/webradios/$radio/songs?pageCursor=$cursor'); + 'https://www.radiofrance.fr/api/v1.7/stations/fip/webradios/$radio/songs?pageCursor=$cursor'); final res = await get(req, headers: { "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET, HEAD, POST, OPTIONS", - 'Content-Type': 'text/plain' + "Access-Control-Allow-Methods": "GET, HEAD, POST, OPTIONS" }); if (res.statusCode == 200) { Map body = jsonDecode(res.body); @@ -79,22 +76,22 @@ class HomeProvider with ChangeNotifier { currentTrack = track; final currentVolume = player?.volume ?? 1; - if (player?.playing ?? false) player?.stop(); + player?.dispose(); Future.delayed(const Duration(milliseconds: 5)); - if (track.id == null) { - final secondMatch = track.artiste == '' ? track.album : track.artiste; - final resultUrl = - await yt.search.search(track.title + ' ' + secondMatch!); - track.id = resultUrl.first.id.value; + if (track.file == null) { + if (track.id == null) { + final secondMatch = track.artiste == '' ? track.album : track.artiste; + final resultUrl = + await yt.search.search(track.title + ' ' + secondMatch!); + track.id = resultUrl.first.id.value; + } + player = Player.network( + "https://invidious.fdn.fr/embed/${track.id}?raw=1&listen=1"); + print(track.id); + } else { + player = Player.asset(track.file!.path); } - const invidiousUrl = - 'yewtu.be'; //yewtu.be vid.puffyan.us invidious.snopyta.org invidious.fdn.fr - - player = Player.network( - "https://$invidiousUrl/embed/${track.id}?raw=1&listen=1&quality=dash"); - print(track.id); - player!.volume = currentVolume; try { @@ -104,12 +101,11 @@ class HomeProvider with ChangeNotifier { } Future.delayed(const Duration(milliseconds: 500)); player!.callback = (PlayerEvent event) { - print(event.name); if (event.name == 'position') { currentTrack!.duration = player!.duration; playerProvider.reload(); } - if (event.name == 'status' && player!.position == player!.duration) { + if (event.name == 'status') { var nextTrack = trackList .firstWhere((element) => element.number == track.number + 1); playTrack(context, nextTrack); @@ -127,6 +123,8 @@ class HomeProvider with ChangeNotifier { var streamManifest = StreamManifest(manifest.streams); var streamInfo = streamManifest.audioOnly.withHighestBitrate(); var stream = yt.videos.streamsClient.get(streamInfo); + + final filePath = await getDownloadsDirectory(); final fileName = '${track.title} - ${track.artiste}' .replaceAll('\\', '') .replaceAll('/', '') @@ -137,25 +135,20 @@ class HomeProvider with ChangeNotifier { .replaceAll('<', '') .replaceAll('>', '') .replaceAll('|', ''); + var file = File('${filePath!.path}/$fileName.webm'); + var fileStream = file.openWrite(); - if (!kIsWeb) { - final filePath = Platform.isAndroid - ? Directory('/storage/emulated/0/Download') - : await getDownloadsDirectory(); + await stream.pipe(fileStream); - var file = File('${filePath!.path}/$fileName.webm'); - var fileStream = file.openWrite(); + await fileStream.flush(); + await fileStream.close(); + yt.close(); - await stream.pipe(fileStream); + // Play it + track.file = file; + // playTrack(context, track); - await fileStream.flush(); - await fileStream.close(); - yt.close(); - - track.file = file; - - print(file.path); - } + print(file.path); } List> get radioList {