diff --git a/lib/globals.dart b/lib/globals.dart index c6e003e..e1a6476 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -1,7 +1,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -late String token; TextStyle globalTextStyle = TextStyle(color: Colors.grey[350]); const proxyHeader = kDebugMode || !kIsWeb ? 'https://' : 'http://127.0.0.1:8080/'; diff --git a/lib/main.dart b/lib/main.dart index 4476653..377e7f4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,13 +3,9 @@ import 'package:fipy/providers/player.dart'; import 'package:fipy/screens/home.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:kplayer/kplayer.dart'; -import 'package:kplayer_with_audioplayers/kplayer_with_audioplayers.dart' as kp; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - Player.boot(); - kp.Player.boot(); runApp(const FipyApp()); } diff --git a/lib/models/track.dart b/lib/models/track.dart index 0229954..47c1ada 100644 --- a/lib/models/track.dart +++ b/lib/models/track.dart @@ -8,6 +8,7 @@ class Track { String? image; String? imageUrl; String? id; + Duration? position; Duration? duration; File? file; @@ -18,6 +19,7 @@ class Track { this.album, this.id, this.duration, + this.position, this.file, this.image, this.imageUrl}); diff --git a/lib/providers/home.dart b/lib/providers/home.dart index 1e38b78..5cd3d31 100644 --- a/lib/providers/home.dart +++ b/lib/providers/home.dart @@ -6,23 +6,21 @@ import 'package:flutter/foundation.dart'; import 'package:universal_io/io.dart'; import 'package:fipy/models/track.dart'; import 'package:flutter/material.dart'; -import 'package:kplayer/kplayer.dart'; import 'package:path_provider/path_provider.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; import 'package:fipy/providers/player.dart'; import 'package:provider/provider.dart'; import 'package:http/http.dart'; import 'package:audioplayers/audioplayers.dart'; -import 'package:kplayer_with_audioplayers/kplayer_with_audioplayers.dart' as kp; class HomeProvider with ChangeNotifier { Track? currentTrack; - PlayerController? player; - AudioPlayer audioPlayer = AudioPlayer(); + AudioPlayer player = AudioPlayer(playerId: 'fipyPlayerID'); List trackList = []; int trackNbr = 0; int userPageNbr = 3; + double currentVolume = 1; Future> getTracks(String radio, {String cursor = ''}) async { int pageNbr = 0; @@ -82,10 +80,6 @@ class HomeProvider with ChangeNotifier { // track = trackList[track.number - 1]; currentTrack = track; - final currentVolume = player?.volume ?? 1; - if (player?.playing ?? false) player?.stop(); - Future.delayed(const Duration(milliseconds: 5)); - if (track.id == null) { final secondMatch = track.artiste == '' ? track.album : track.artiste; final resultUrl = await yt.search @@ -99,45 +93,35 @@ class HomeProvider with ChangeNotifier { 'invidious.fdn.fr', ]; - // audioPlayer.stop(); - // Future.delayed(const Duration(milliseconds: 5)); - // await audioPlayer.play(DeviceFileSource( - // "https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1")); - - final media = PlayerMedia( - type: PlayerMediaType.network, - resource: - "https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1"); - player = kp.Player(media: media); - // player = Player.network( - // "https://${invidiousUrl[0]}/latest_version?id=${track.id}&itag=140&local=true&listen=1"); // https://${invidiousUrl[0]}/embed/${track.id}?listen=1&raw=1&local=true - player!.init(); - print(player!.media.resource); - - player!.volume = currentVolume; + player.stop(); + Future.delayed(const Duration(milliseconds: 5)); try { - player!.play(); + final source = UrlSource( + "https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1"); + print('playyy'); + await player.play(source); } catch (e) { print('Play error: ' + e.toString()); } - 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 == 'end' && - currentTrack == track && - (currentTrack!.duration!.inSeconds - player!.position.inSeconds <= - 1)) { - var nextTrack = trackList - .firstWhere((element) => element.number == track.number + 1); - currentTrack = nextTrack; - playTrack(context, nextTrack); - } - }; + Future.delayed(const Duration(milliseconds: 50)); + + player.onDurationChanged.listen((event) async { + currentTrack!.duration = await player.getDuration(); + playerProvider.reload(); + }); + + player.onPositionChanged.listen((position) async { + currentTrack!.position = position; + playerProvider.reload(); + }); + + player.onPlayerComplete.listen((event) { + var nextTrack = + trackList.firstWhere((element) => element.number == track.number + 1); + currentTrack = nextTrack; + playTrack(context, nextTrack); + }); playerProvider.reload(); homeProvider.reload(); diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 078ae40..e0b70a2 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -34,8 +34,9 @@ class _HomeScreenState extends State { if (event.runtimeType == RawKeyDownEvent && event.data.logicalKey.keyId == 32) //Enter Key ID from keyboard { - print('tata'); - hp.player?.playing ?? false ? hp.player?.pause() : hp.player?.play(); + hp.player.state.name == 'playing' + ? hp.player.pause() + : hp.player.resume(); } }, child: Stack( @@ -256,13 +257,14 @@ class _HomeScreenState extends State { const SizedBox(width: 1), ElevatedButton( onPressed: () { - hp.player?.playing ?? false - ? hp.player?.pause() - : hp.player?.play(); + hp.player.state.name == 'playing' + ? hp.player.pause() + : hp.player.resume(); + // playerProvider.reload(); }, child: Icon( - hp.player?.playing ?? false + hp.player.state.name == 'playing' ? Icons.pause : Icons.play_arrow, color: Colors.grey[900], @@ -297,7 +299,7 @@ class _HomeScreenState extends State { Row(children: [ const SizedBox(width: 70), Text( - timeFormat(hp.player?.position ?? + timeFormat(hp.currentTrack?.position ?? const Duration(seconds: 0)), style: TextStyle(color: Colors.grey[500], fontSize: 12), @@ -314,16 +316,19 @@ class _HomeScreenState extends State { child: SizedBox( width: 300, child: Slider( - value: double.parse( - hp.player?.position.inSeconds.toString() ?? - '0'), - max: double.parse( - hp.player?.duration.inSeconds.toString() ?? - '2000'), + value: double.parse(hp + .currentTrack?.position?.inSeconds + .toString() ?? + '0'), + max: double.parse(hp + .currentTrack?.duration?.inSeconds + .toString() ?? + '2000'), onChanged: (double value) { - if (hp.player?.position != null) { - hp.player!.position = - Duration(seconds: value.toInt()); + if (hp.currentTrack?.position != null) { + hp.player.seek( + Duration(seconds: value.toInt()), + ); playerProvider.reload(); } }, @@ -334,7 +339,7 @@ class _HomeScreenState extends State { ), const SizedBox(width: 3), Text( - timeFormat(hp.player?.duration ?? + timeFormat(hp.currentTrack?.duration ?? const Duration(seconds: 0)), style: TextStyle(color: Colors.grey[500], fontSize: 12), @@ -354,13 +359,12 @@ class _HomeScreenState extends State { child: SizedBox( width: 130, child: Slider( - value: hp.player?.volume ?? 1, + value: hp.currentVolume, max: 1, - onChanged: (double value) { - if (hp.player?.volume != null) { - hp.player!.volume = value; - playerProvider.reload(); - } + onChanged: (double value) async { + hp.currentVolume = value; + await hp.player.setVolume(value); + playerProvider.reload(); }, activeColor: Colors.grey[400], inactiveColor: Colors.grey[700], diff --git a/pubspec.lock b/pubspec.lock index b5d2371..12b88f7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -22,22 +22,8 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.8.2" - audio_session: - dependency: transitive - description: - name: audio_session - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.6+1" - audio_video_progress_bar: - dependency: transitive - description: - name: audio_video_progress_bar - url: "https://pub.dartlang.org" - source: hosted - version: "0.10.0" audioplayers: - dependency: transitive + dependency: "direct main" description: name: audioplayers url: "https://pub.dartlang.org" @@ -134,20 +120,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.4" - dart_vlc: - dependency: transitive - description: - name: dart_vlc - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.9" - dart_vlc_ffi: - dependency: transitive - description: - name: dart_vlc_ffi - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.5+1" fake_async: dependency: transitive description: @@ -247,62 +219,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.5.0" - just_audio: - dependency: transitive - description: - name: just_audio - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.20" - just_audio_platform_interface: - dependency: transitive - description: - name: just_audio_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "4.1.0" - just_audio_web: - dependency: transitive - description: - name: just_audio_web - url: "https://pub.dartlang.org" - source: hosted - version: "0.4.7" - kplayer: - dependency: "direct main" - description: - name: kplayer - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.18" - kplayer_platform_interface: - dependency: transitive - description: - name: kplayer_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.12" - kplayer_with_audioplayers: - dependency: "direct main" - description: - name: kplayer_with_audioplayers - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.10" - kplayer_with_dart_vlc: - dependency: transitive - description: - name: kplayer_with_dart_vlc - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.10" - kplayer_with_just_audio: - dependency: transitive - description: - name: kplayer_with_just_audio - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.10" lints: dependency: transitive description: @@ -438,13 +354,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "6.0.2" - rxdart: - dependency: transitive - description: - name: rxdart - url: "https://pub.dartlang.org" - source: hosted - version: "0.27.3" sky_engine: dependency: transitive description: flutter @@ -556,5 +465,5 @@ packages: source: hosted version: "1.11.0" sdks: - dart: ">=2.17.0-266.5.beta <3.0.0" + dart: ">=2.17.0-0 <3.0.0" flutter: ">=2.8.1" diff --git a/pubspec.yaml b/pubspec.yaml index 439a56c..811a45e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,8 +16,8 @@ dependencies: # url: https://git.p2p.legal/poka/youtube_explode.git # ref: master http: ^0.13.4 - kplayer: ^0.1.18 - kplayer_with_audioplayers: ^0.0.10 + # kplayer: ^0.1.18 + # kplayer_with_audioplayers: ^0.0.10 miniplayer: #^1.0.1 git: url: https://git.p2p.legal/poka/flutter_miniplayer.git @@ -26,7 +26,7 @@ dependencies: path_provider: ^2.0.9 universal_io: ^2.0.4 # ffmpeg_cli: ^0.1.0 - # audioplayers: ^1.0.0-rc.2 + audioplayers: ^1.0.0-rc.2 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 7ffc1ef..09e8e2c 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -7,11 +7,8 @@ #include "generated_plugin_registrant.h" #include -#include void RegisterPlugins(flutter::PluginRegistry* registry) { AudioplayersWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); - DartVlcPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("DartVlcPlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 2847f49..375535c 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST audioplayers_windows - dart_vlc ) list(APPEND FLUTTER_FFI_PLUGIN_LIST