* Add wakeup script.
authorkaliko <kaliko@azylum.org>
Sun, 8 Aug 2010 12:12:49 +0000 (12:12 +0000)
committerkaliko <kaliko@azylum.org>
Sun, 8 Aug 2010 12:12:49 +0000 (12:12 +0000)
wakeup [new file with mode: 0755]

diff --git a/wakeup b/wakeup
new file mode 100755 (executable)
index 0000000..7009081
--- /dev/null
+++ b/wakeup
@@ -0,0 +1,107 @@
+#!/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 random import choice
+
+from lib.mpdclass import MPDClass
+from lib.startop import StartOpt
+
+NAME = 'wakeup'
+VERSION = '0.1'
+USAGE = 'USAGE:  %prog --help | AlbumA AlbumB "The Album C" | -f file'
+
+WAKEUP_OPTS = list([
+    {
+        'sw': ['-f', '--file'],
+        'type': 'str',
+        'dest': 'file',
+        'metavar': 'filename',
+        'help': 'filemame to read album list from. An album name on each line'},
+    ])
+
+
+class WakeUp(StartOpt, MPDClass):
+    """
+    """
+    script_info = dict({
+        'version': VERSION,
+        'prog_name': NAME,
+        'description': 'Queue and play an album chosen at random from a list. Albums list provided from CLI or text file.',
+        'usage': USAGE,
+        })
+
+    def __init__(self):
+        """"""
+        StartOpt.__init__(self, self.__class__.script_info, WAKEUP_OPTS)
+        MPDClass.__init__(self)
+        self._get_arg()
+        self._run()
+
+    def _get_arg(self):
+        """"""
+        if self.cli_options.file:
+            # TODO: handle encoding reading file!
+            print 'reading from file, assuming %s encoding' % self.localencoding
+            try:
+                with open(self.cli_options.file) as f:
+                    self.albums_list = [line.rstrip('\n') for line in f.readlines()]
+                    return True
+            except IOError, err:
+                print 'ERROR: "%s": %s' % (self.cli_options.file, err[1])
+                sys.exit(1)
+            if self.cli_args:
+                print 'WARNING: ignoring "%s"' % self.cli_args
+                return True
+        if self.cli_args:
+            self.albums_list = self.cli_args
+            return True
+        self.parser.print_usage()
+        print "ERROR: Need at least an argument!"
+        sys.exit(1)
+
+    def _run(self):
+        """"""
+        print 'Connecting %s:%i' % (self.cli_options.host, self.cli_options.port)
+        self.mpdConnect()
+        album = choice(self.albums_list)
+        print 'Queueing "%s"' % album
+        tracks = self.client.find('album', self._u8_convert(album))
+        if not tracks:
+            print 'No tracks found for "%s"' % album
+            self.client.disconnect()
+            sys.exit(1)
+        for track in tracks:
+            self.client.add(track.get('file'))
+        self.client.disconnect()
+        sys.exit(0)
+
+
+# Script starts here
+if __name__ == '__main__':
+    try:
+        WakeUp()
+    except KeyboardInterrupt:
+        sys.stdout.write('exit')
+
+# VIM MODLINE
+# vim: ai ts=4 sw=4 sts=4 expandtab