# -*- coding: utf-8 -*-
-# Copyright (c) 2009-2015 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2009-2019 Jack Kaliko <kaliko@azylum.org>
+# Copyright (c) 2019 sacha <sachahony@gmail.com>
#
# This file is part of sima
#
* not blacklisted
"""
artist = tracks[0].artist
- black_list = self.player.queue + self.to_add
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ black_list = self.player.playlist + self.to_add
+ else:
+ black_list = self.player.queue + self.to_add
not_in_hist = list(set(tracks) - set(self.get_history(artist=artist)))
if self.plugin_conf.get('queue_mode') != 'top' and not not_in_hist:
self.log.debug('All tracks already played for "%s"', artist)
if not self.player.playlist:
return
history = list(self.history)
- history = self.player.queue + history
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ history = self.player.playlist + history
+ else:
+ history = self.player.queue + history
history = deque(history)
last_trk = history.popleft() # remove
extra_arts = list()
if not ret:
self.log.warning('Got nothing from music library.')
return []
- queued_artists = MetaContainer([trk.Artist for trk in self.player.queue])
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ queued_artists = MetaContainer([trk.Artist for trk in self.player.playlist])
+ else:
+ queued_artists = MetaContainer([trk.Artist for trk in self.player.queue])
self.log.trace('Already queued: {}'.format(queued_artists))
self.log.trace('Candidate: {}'.format(ret))
if ret & queued_artists:
albums_not_in_hist = list(albums - albums_yet_in_hist)
# Get to next artist if there are no unplayed albums
if not albums_not_in_hist:
- self.log.info('No album found for "%s"' % artist)
+ self.log.info('No unplayed album found for "%s"' % artist)
continue
album_to_queue = str()
random.shuffle(albums_not_in_hist)
for album in albums_not_in_hist:
- tracks = self.player.find_album(artist, album)
- # Look if one track of the album is already queued
- # Good heuristic, at least enough to guess if the whole album is
- # already queued.
- if tracks[0] in self.player.queue:
- self.log.debug('"%s" already queued, skipping!', tracks[0].album)
+ # Controls the album found is not already queued
+ if album in {t.album for t in self.player.queue}:
+ self.log.debug('"%s" already queued, skipping!', album)
continue
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ if album in {t.album for t in self.player.playlist}:
+ self.log.debug('"%s" already in playlist, skipping!', album)
+ continue
album_to_queue = album
if not album_to_queue:
self.log.info('No album found for "%s"', artist)
continue
self.log.info('%s album candidate: %s - %s', self.ws.name, artist, album_to_queue)
nb_album_add += 1
- self.to_add.extend(self.player.find_album(artist, album_to_queue))
+ candidates = self.player.find_album(artist, album_to_queue)
+ if self.plugin_conf.getboolean('shuffle_album'):
+ random.shuffle(candidates)
+ # this allows to select a maximum number of track from the album
+ # a value of 0 (default) means keep all
+ nbtracks = self.plugin_conf.getint('track_to_add_from_album')
+ if nbtracks > 0:
+ candidates = candidates[0:nbtracks]
+ self.to_add.extend(candidates)
if nb_album_add == target_album_to_add:
return True