[gnome-music/wip/mschraal/core] player: Remove get_mpris_playlist usage
- From: Marinus Schraal <mschraal src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/mschraal/core] player: Remove get_mpris_playlist usage
- Date: Sat, 13 Jul 2019 22:42:42 +0000 (UTC)
commit d8583bf77062d2904efae18c7c8a717c1cffc0ce
Author: Jean Felder <jfelder src gnome org>
Date: Thu Jul 11 23:07:11 2019 +0200
player: Remove get_mpris_playlist usage
Use coremodel playlist_sort property directly.
gnomemusic/mpris.py | 39 ++++++++++++++++++++++++++++---
gnomemusic/player.py | 66 ----------------------------------------------------
2 files changed, 36 insertions(+), 69 deletions(-)
---
diff --git a/gnomemusic/mpris.py b/gnomemusic/mpris.py
index 11cb3c9d..13ff8da3 100644
--- a/gnomemusic/mpris.py
+++ b/gnomemusic/mpris.py
@@ -22,6 +22,7 @@
# code, but you are not obligated to do so. If you do not wish to do so,
# delete this exception statement from your version.
+from itertools import chain
import logging
import re
@@ -271,6 +272,8 @@ class MPRIS(DBusInterface):
MEDIA_PLAYER2_TRACKLIST_IFACE = 'org.mpris.MediaPlayer2.TrackList'
MEDIA_PLAYER2_PLAYLISTS_IFACE = 'org.mpris.MediaPlayer2.Playlists'
+ _playlist_nb_songs = 10
+
def __repr__(self):
return "<MPRIS>"
@@ -290,6 +293,8 @@ class MPRIS(DBusInterface):
self._player.connect(
'playlist-changed', self._on_player_playlist_changed)
+ self._player_model = app.props.coremodel.props.playlist_sort
+
self._playlists = Playlists.get_default()
self._playlists_model = None
self._playlists.connect('playlist-renamed', self._on_playlist_renamed)
@@ -416,9 +421,37 @@ class MPRIS(DBusInterface):
previous_path_list = self._path_list
self._path_list = []
self._metadata_list = []
- for index, song in self._player.get_mpris_playlist():
- path = self._get_song_dbus_path(song, index)
- metadata = self._get_metadata(song, index)
+ current_position = self._player.props.position
+ nb_songs = self._player_model.get_n_items()
+
+ index_min = current_position - self._playlist_nb_songs
+ index_max = current_position + self._playlist_nb_songs + 1
+ if self._player.get_playlist_type() == PlayerPlaylist.Type.ALBUM:
+ index_min = 0
+ index_max = self._player_model.get_n_items()
+
+ first_index = max(index_min, 0)
+ last_index = min(index_max, nb_songs)
+ positions = range(first_index, last_index)
+
+ nb_songs_max = 2 * self._playlist_nb_songs + 1
+ if (self._player.props.repeat_mode == RepeatMode.ALL
+ and (last_index - first_index) < nb_songs_max):
+ offset_sup = min(
+ self._playlist_nb_songs - last_index + current_position + 1,
+ first_index)
+ offset_inf = min(
+ self._playlist_nb_songs - current_position + first_index,
+ nb_songs - last_index)
+
+ positions = chain(
+ range(nb_songs - offset_inf, nb_songs), positions,
+ range(offset_sup))
+
+ for position in positions:
+ coresong = self._player_model.get_item(position)
+ path = self._get_song_dbus_path(coresong, position)
+ metadata = self._get_metadata(coresong, position)
self._path_list.append(path)
self._metadata_list.append(metadata)
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index 5116f50b..28193cf7 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -23,7 +23,6 @@
# delete this exception statement from your version.
from enum import IntEnum
-from itertools import chain
from random import randint, randrange
import logging
import time
@@ -336,58 +335,6 @@ class PlayerPlaylist(GObject.GObject):
"""
return self._type
- @log
- def get_mpris_playlist(self):
- """Get recent and next songs from the current playlist.
-
- If the playlist is an album, return all songs.
- Returned songs are sorted according to the repeat mode.
- This method is used by mpris to expose a TrackList.
-
- :returns: current playlist
- :rtype: list of index and Grl.Media
- """
- return []
- if not self.props.current_song:
- return []
-
- songs = []
- nb_songs = len(self._songs)
- current_index = self._position
- if self.props.repeat_mode == RepeatMode.SHUFFLE:
- current_index = self._shuffle_indexes.index(self._position)
-
- index_min = current_index - self._nb_songs_max
- index_max = current_index + self._nb_songs_max + 1
- if self._type == PlayerPlaylist.Type.ALBUM:
- index_min = 0
- index_max = nb_songs
-
- first_index = max(index_min, 0)
- last_index = min(index_max, nb_songs)
-
- if self.props.repeat_mode == RepeatMode.SHUFFLE:
- indexes = self._shuffle_indexes[first_index:last_index]
- else:
- indexes = range(first_index, last_index)
-
- if (self.props.repeat_mode == RepeatMode.ALL
- and (last_index - first_index) < (2 * self._nb_songs_max + 1)):
- offset_sup = min(
- self._nb_songs_max - last_index + current_index + 1,
- first_index)
- offset_inf = min(
- self._nb_songs_max - current_index + first_index,
- nb_songs - last_index)
-
- indexes = chain(
- range(nb_songs - offset_inf, nb_songs), indexes,
- range(offset_sup))
-
- songs = [[index, self._songs[index][PlayerField.SONG]]
- for index in indexes]
- return songs
-
class Player(GObject.GObject):
"""Main Player object
@@ -757,19 +704,6 @@ class Player(GObject.GObject):
if position_second <= duration_second:
self._gst_player.seek(position_second)
- @log
- def get_mpris_playlist(self):
- """Get recent and next songs from the current playlist.
-
- If the playlist is an album, return all songs.
- Returned songs are sorted according to the repeat mode.
- This method is used by mpris to expose a TrackList.
-
- :returns: current playlist
- :rtype: list of index and Grl.Media
- """
- return self._playlist.get_mpris_playlist()
-
@log
def _on_seek_finished(self, klass):
# FIXME: Just a proxy
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]