#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2009, 2010 Efrim {{{ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # }}} import sys from time import sleep from lib.mpdclass import MPDClass from lib.startop import StartOpt NAME = 'nalbum' VERSION = '0.1' NALBUM_OPTS = list([ { 'sw': ['-c', '--crossfade'], 'type': 'int', 'dest': 'time', 'metavar': 't', 'help': 'fade out/fade in over t seconds.'}, ]) class Nalbum(StartOpt, MPDClass): """ """ script_info = dict({ 'version': VERSION, 'prog_name': NAME, 'description': 'Jump to next album in playlist.', }) def __init__(self): """""" StartOpt.__init__(self, self.__class__.script_info, NALBUM_OPTS) MPDClass.__init__(self) self._run() def _fade(self, io='out'):#{{{ """ end_volum => End volume value mpd_vol => Start volume value """ mpd_vol = int(self.init_vol) if io == 'out': end_volum = mpd_vol / 10 mpd_vol = self.init_vol if io == 'in': end_volum = int(self.init_vol) mpd_vol = int(self.init_vol) / 10 span = float(end_volum - mpd_vol) step = span / float(10*self.cli_options.time) while 42: mpd_vol += step self.client.setvol(int(mpd_vol)) if abs(mpd_vol - end_volum) < 1: self.client.setvol(end_volum) return True sleep(0.1)#}}} def _get_next(self):#{{{ """Retrieve playlist from current song to the end.""" if 'song' not in self.client.status(): print "No current song set in MPD!" self.client.disconnect() sys.exit(0) current_album = str(self.client.currentsong().get('album', 'TAG MISSING')) current_song_pos = int(self.client.currentsong().get('pos')) print 'Current album: "%s"' % current_album next_album_pos = current_song_pos album = current_album while album == current_album: next_album_pos += 1 pl_length = int(self.client.status().get('playlistlength')) - 1 if pl_length < next_album_pos: print 'Next album not found in the playlitst!' self.client.disconnect() sys.exit(0) album = self.client.playlistinfo(next_album_pos)[0].get('album', 'TAG MISSING') print 'Next album appears to be: "%s"' % album return next_album_pos#}}} def _run(self): """""" print 'Connecting %s:%i' % (self.cli_options.host, self.cli_options.port) self.mpdConnect() self.init_vol = int(self.client.status().get('volume')) if self.cli_options.time: print 'Cross fading next album' self._fade() self.client.play(self._get_next()) if self.cli_options.time: self._fade(io='in') self.client.disconnect() sys.exit(0) # Script starts here if __name__ == '__main__': try: Nalbum() except KeyboardInterrupt: sys.stdout.write('exit') # VIM MODLINE # vim: ai ts=4 sw=4 sts=4 expandtab