]> kaliko git repositories - mpd-goodies.git/blobdiff - mfade
* rewrote mtopls
[mpd-goodies.git] / mfade
diff --git a/mfade b/mfade
index 3ed1756f6f4bfac5b128319bda25d8b199fce5be..de84f141dfc21be9cfc252af9bd885b179a2a0e8 100755 (executable)
--- a/mfade
+++ b/mfade
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009 Efrim <efrim@azylum.org> {{{
+# 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
@@ -29,96 +29,87 @@ import sys
 
 from time import sleep
 
-from lib.mpdutils import mconnect
+from lib.mpdclass import MPDClass
+from lib.startop import StartOpt
 
-USAGE = """Usage:
+NAME = 'mfade'
+VERSION = '0.1'
+USAGE = 'USAGE:  %prog [--help] | [ <time> [<final volume level>] ]'
+DESC = """Fade in/out to <final volume level> over <time>. Defaults are from 0%
+to 50% when paused or stopped and from current volume to 10th of it if playing,
+both over 10 minutes."""
 
-mfade [time [min|max]]
 
-   * time in seconds
-   * min|max in percentag
+class Sleep(StartOpt, MPDClass):
+    """"""
+    script_info = dict({
+        'version': VERSION,
+        'prog_name': NAME,
+        'description': DESC,
+        'usage': USAGE,
+        })
 
-when MPD is:
-- not palying: fade in from 0% to max over time
-               default 10 minutes / 50%
--    playing:  fade out from current volume to min over time
-               default 10 minutes / 1/10 of current vol
-
-Manual or any external volume change will abort the script.
-"""
-
-
-class Sleep(object):
-    """
-    """
-
-    def __init__(self):
+    def __init__(self):#{{{
         """"""
+        StartOpt.__init__(self, self.__class__.script_info, [])
+        MPDClass.__init__(self)
         self.tempo = int(10)
         self.volum = None
-        self._consume_sopt()
-        self.cli = mconnect()
-        self._run()
-        self.cli.disconnect()
+        self._consume_args()
+        self._run()#}}}
 
-    def _consume_sopt(self):
+    def _consume_args(self):#{{{
         """"""
-        # TODO: use optparse?
-        options = sys.argv
-        if len(sys.argv) > 1 and sys.argv[1] in ['-h', '--help']:
-            sys.stderr.write(USAGE)
-            sys.exit(1)
+        if (len(self.cli_args) < 1 or
+                len(self.cli_args) > 2):
+            self.parser.error('need at least an argument and no more than two!')
         try:
-            self.tempo = int(options.pop(1))
-            self.volum = int(options.pop(1))
+            self.tempo = int(self.cli_args[0])
+            self.volum = int(self.cli_args[1])
         except IndexError:
             pass
         except ValueError, err:
-            sys.stderr.write('Error: wrong option passed: %s' % err)
-            sys.stdout.write(USAGE)
-            sys.exit(1)
+            self.parser.error('wrong option passed (%s)' % err)#}}}
 
-    def _run(self):
+    def _run(self):#{{{
         """"""
-        self.mpd_state = str(self.cli.status().get('state'))
-        self.mpd_vol = int(self.cli.status().get('volume'))
+        self.mpdConnect()
+        self.mpd_state = str(self.client.status().get('state'))
+        self.mpd_vol = int(self.client.status().get('volume'))
         if self.mpd_state == 'play':
             if not self.volum:
                 self.volum = self.mpd_vol / 10
             if self.volum > self.mpd_vol:
-                sys.stderr.write('Error: specified min volume (%d%%) > to current volume (%d%%)' % (self.volum, self.mpd_vol))
-                sys.exit(1)
-            sys.stdout.write('fading down from %d%% to %d%% over %smin' % (self.mpd_vol,
-                    self.volum, self.tempo))
-            self.fade()
-            self.cli.stop()
+                self.parser.error('Error: specified min volume (%d%%) > to current volume (%d%%)' % (self.volum, self.mpd_vol))
+            print >> sys.stdout, 'fading down from %d%% to %d%% over %smin' % (self.mpd_vol, self.volum, self.tempo)
+            if self.fade():
+                self.client.stop()
         if self.mpd_state in ['stop', 'pause']:
             if not self.volum:
                 self.volum = int(50)
-            sys.stdout.write('fading up from 0%% to %d%% over %smin' % (self.volum,
-                    self.tempo))
-            self.cli.setvol(0)
+            print >> sys.stdout, 'fading up from 0%% to %d%% over %smin' % (self.volum, self.tempo)
+            self.client.setvol(0)
             self.mpd_vol = 0
-            self.cli.play()
+            self.client.play()
             self.fade()
-        sleep(1)
+        sleep(1)#}}}
 
-    def fade(self):
+    def fade(self):#{{{
         """"""
         # TODO: handle possible lost connections
         span = float(self.volum - self.mpd_vol)
         step = span / float(60 * self.tempo)
         vol = self.mpd_vol
         while 42:
-            if int(vol) != int(self.cli.status().get('volume')):
-                sys.stdout.write('Warning: external volume change, aborting!')
-                break
+            if int(vol) != int(self.client.status().get('volume')):
+                sys.stderr.write('Warning: external volume change, aborting!\n')
+                return False
             vol += step
-            self.cli.setvol(int(vol))
+            self.client.setvol(int(vol))
             if abs(vol - self.volum) < 1:
-                self.cli.setvol(self.volum)
-                break
-            sleep(1)
+                self.client.setvol(self.volum)
+                return True
+            sleep(1)#}}}
 
 
 # Script starts here