mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-15 00:25:17 +00:00
Incomplete Player PLaylist support
This commit is contained in:
parent
62fc89dd52
commit
d17a7e8b61
@ -1,8 +1,10 @@
|
|||||||
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:hotkey_manager/hotkey_manager.dart';
|
import 'package:hotkey_manager/hotkey_manager.dart';
|
||||||
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/PlayerControls.dart';
|
import 'package:spotube/components/PlayerControls.dart';
|
||||||
import 'package:spotube/helpers/artist-to-string.dart';
|
import 'package:spotube/helpers/artist-to-string.dart';
|
||||||
import 'package:spotube/models/GlobalKeyActions.dart';
|
import 'package:spotube/models/GlobalKeyActions.dart';
|
||||||
@ -36,7 +38,9 @@ class _PlayerState extends State<Player> {
|
|||||||
WidgetsBinding.instance?.addPostFrameCallback((timeStamp) async {
|
WidgetsBinding.instance?.addPostFrameCallback((timeStamp) async {
|
||||||
try {
|
try {
|
||||||
MPVPlayer player = context.read<PlayerDI>().player;
|
MPVPlayer player = context.read<PlayerDI>().player;
|
||||||
await player.start();
|
if (!player.isRunning()) {
|
||||||
|
await player.start();
|
||||||
|
}
|
||||||
double volume = await player.getProperty<double>("volume");
|
double volume = await player.getProperty<double>("volume");
|
||||||
setState(() {
|
setState(() {
|
||||||
_volume = volume / 100;
|
_volume = volume / 100;
|
||||||
@ -55,27 +59,52 @@ class _PlayerState extends State<Player> {
|
|||||||
|
|
||||||
player.on(MPVEvents.status, null, (ev, _) async {
|
player.on(MPVEvents.status, null, (ev, _) async {
|
||||||
Map data = ev.eventData as Map;
|
Map data = ev.eventData as Map;
|
||||||
|
print(
|
||||||
|
"\n======================\nEVENT $data\n=======================\n");
|
||||||
Playback playback = context.read<Playback>();
|
Playback playback = context.read<Playback>();
|
||||||
|
|
||||||
|
// that means a new playlist have been added
|
||||||
|
if (data["property"] == "playlist-count" && data["value"] > 0) {
|
||||||
|
var playlist = await player.getProperty("playlist");
|
||||||
|
}
|
||||||
|
|
||||||
if (data["property"] == "media-title" && data["value"] != null) {
|
if (data["property"] == "media-title" && data["value"] != null) {
|
||||||
var containsYtdl = (data["value"] as String).contains("ytsearch:");
|
// var containsYtdl = (data["value"] as String).contains("ytsearch:");
|
||||||
if (containsYtdl) {
|
// if (containsYtdl) {
|
||||||
var props = (data["value"] as String).split("-");
|
// var props = (data["value"] as String).split("-");
|
||||||
var mediaTitle = props.last.trim();
|
// var mediaTitle = props.last.trim();
|
||||||
var mediaArtists = props.first.split("ytsearch:").last.trim();
|
// var mediaArtists = props.first.split("ytsearch:").last.trim();
|
||||||
|
// setState(() {
|
||||||
|
// _isPlaying = true;
|
||||||
|
// });
|
||||||
|
|
||||||
|
// var matchedTracks = playback.currentPlaylist?.tracks.where(
|
||||||
|
// (track) {
|
||||||
|
// return track.name?.replaceAll("-", " ") == mediaTitle &&
|
||||||
|
// artistsToString(track.artists ?? []) == mediaArtists;
|
||||||
|
// },
|
||||||
|
// ) ??
|
||||||
|
// [];
|
||||||
|
// if (matchedTracks.isNotEmpty) {
|
||||||
|
// playback.setCurrentTrack = matchedTracks.first;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
int playlistCurrentPos;
|
||||||
|
if (_shuffled) {
|
||||||
|
await player.unshuffle();
|
||||||
|
playlistCurrentPos = await player.getPlaylistPosition();
|
||||||
|
await player.shuffle();
|
||||||
|
} else {
|
||||||
|
playlistCurrentPos = await player.getPlaylistPosition();
|
||||||
|
}
|
||||||
|
print("${data["value"]} $playlistCurrentPos");
|
||||||
|
Track? track =
|
||||||
|
playback.currentPlaylist?.tracks.elementAt(playlistCurrentPos);
|
||||||
|
if (track != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_isPlaying = true;
|
_isPlaying = true;
|
||||||
});
|
});
|
||||||
|
playback.setCurrentTrack = track;
|
||||||
var matchedTracks = playback.currentPlaylist?.tracks.where(
|
|
||||||
(track) {
|
|
||||||
return track.name?.replaceAll("-", " ") == mediaTitle &&
|
|
||||||
artistsToString(track.artists ?? []) == mediaArtists;
|
|
||||||
},
|
|
||||||
) ??
|
|
||||||
[];
|
|
||||||
if (matchedTracks.isNotEmpty) {
|
|
||||||
playback.setCurrentTrack = matchedTracks.first;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data["property"] == "duration" && data["value"] != null) {
|
if (data["property"] == "duration" && data["value"] != null) {
|
||||||
@ -143,15 +172,20 @@ class _PlayerState extends State<Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String playlistToStr(CurrentPlaylist playlist) {
|
String playlistToStr(CurrentPlaylist playlist) {
|
||||||
return playlist.tracks.map((track) {
|
var tracks = playlist.tracks.map((track) {
|
||||||
return "ytdl://ytsearch:${artistsToString(track.artists ?? [])} - ${track.name?.replaceAll("-", " ")}";
|
var artists = artistsToString(track.artists ?? []);
|
||||||
}).join("\n");
|
var title = track.name?.replaceAll("-", " ");
|
||||||
|
|
||||||
|
return "ytdl://ytsearch:$artists - $title";
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
return tracks.join("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future playPlaylist(MPVPlayer player, CurrentPlaylist playlist) async {
|
Future playPlaylist(MPVPlayer player, CurrentPlaylist playlist) async {
|
||||||
try {
|
try {
|
||||||
if (player.isRunning() && playlist.id != _currentPlaylistId) {
|
if (player.isRunning() && playlist.id != _currentPlaylistId) {
|
||||||
var playlistPath = "/tmp/playlist-${playlist.id}.txt";
|
var playlistPath = "/tmp/playlist-${playlist.id}.json";
|
||||||
File file = File(playlistPath);
|
File file = File(playlistPath);
|
||||||
var newPlaylist = playlistToStr(playlist);
|
var newPlaylist = playlistToStr(playlist);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user