]> kaliko git repositories - mpd-goodies.git/blob - nalbum
* Add next album command: nalbum
[mpd-goodies.git] / nalbum
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # Copyright (c) 2009, 2010 Efrim <efrim@azylum.org> {{{
5 #
6 #   This program is free software: you can redistribute it and/or modify
7 #   it under the terms of the GNU General Public License as published by
8 #   the Free Software Foundation, either version 3 of the License, or
9 #   (at your option) any later version.
10 #
11 #   This program is distributed in the hope that it will be useful,
12 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #   GNU General Public License for more details.
15 #
16 #   You should have received a copy of the GNU General Public License
17 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19 #  }}}
20
21
22 import sys
23
24 from lib.mpdclass import MPDClass
25 from lib.startop import StartOpt
26
27 NAME = 'nalbum'
28 VERSION = '0.1'
29
30 class Nalbum(StartOpt, MPDClass):
31     """
32     """
33     script_info = dict({
34         'version': VERSION,
35         'prog_name': NAME,
36         'description': 'Seek to next album in playlist.',
37         })
38
39     def __init__(self):
40         """"""
41         StartOpt.__init__(self, self.__class__.script_info, [])
42         MPDClass.__init__(self)
43         self._run()
44
45     def _get_next(self):
46         """Retrieve playlist from current song to the end."""
47         if 'song' not in self.client.status():
48             print "No current song set in MPD!"
49             self.client.disconnect()
50             sys.exit(0)
51         current_album = str(self.client.currentsong().get('album', 'TAG MISSING'))
52         current_song_pos = int(self.client.currentsong().get('pos'))
53         print 'Current album: "%s"' % current_album
54         next_album_pos = current_song_pos
55         album = current_album
56         while album == current_album:
57             next_album_pos += 1
58             pl_length = int(self.client.status().get('playlistlength')) - 1
59             if pl_length < next_album_pos:
60                 print 'Next album not found in the playlitst!'
61                 self.client.disconnect()
62                 sys.exit(0)
63             album = self.client.playlistinfo(next_album_pos)[0].get('album', 'TAG MISSING')
64         print 'Next album appears to be: "%s"' % album
65         return next_album_pos
66
67     def _run(self):
68         """"""
69         print 'Connecting %s:%i' % (self.cli_options.host, self.cli_options.port)
70         self.mpdConnect()
71         self.client.play(self._get_next())
72         self.client.disconnect()
73         sys.exit(0)
74
75
76 # Script starts here
77 if __name__ == '__main__':
78     try:
79         Nalbum()
80     except KeyboardInterrupt:
81         sys.stdout.write('exit')
82
83 # VIM MODLINE
84 # vim: ai ts=4 sw=4 sts=4 expandtab