]> kaliko git repositories - mpd-goodies.git/blobdiff - src/nalbum
* reorganized source folders
[mpd-goodies.git] / src / nalbum
diff --git a/src/nalbum b/src/nalbum
new file mode 100755 (executable)
index 0000000..e48ad68
--- /dev/null
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009, 2010 Efrim <efrim@azylum.org> {{{
+#
+#   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 <http://www.gnu.org/licenses/>.
+#
+#  }}}
+
+
+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