Author: dmeyer
Date: Sun Mar 26 18:46:17 2006
New Revision: 1355

Removed:
   trunk/beacon/test/
Modified:
   trunk/beacon/bin/beacon

Log:
add test client to beacon script

Modified: trunk/beacon/bin/beacon
==============================================================================
--- trunk/beacon/bin/beacon     (original)
+++ trunk/beacon/bin/beacon     Sun Mar 26 18:46:17 2006
@@ -19,6 +19,7 @@
 
 def usage(error_code):
     print 'beacon [options]'
+    print 'Server options:'
     print '--start            start beacon'
     print '--stop             stop running beacon'
     print '--daemon           detach for parent process'
@@ -27,12 +28,23 @@
     print '--loglevel level   log level (warning, info, debug)'
     print '--help | -h        this message'
     print
+    print 'Client options:'
+    print '--search args      search mode'
+    print '--monitor          do not exit after search and monitor for changes'
+    print
+    print 'Examples for client mode when a server is running:'
+    print '  beacon --search dirname=/local/video'
+    print '  beacon --search --monitor dirname=/local/video'
+    print '  beacon --search artist=Silbermond'
+    print '  beacon --search attr=album type=audio'
+    print '  beacon --search "keywords=Helden Blind"'
     sys.exit(error_code)
 
     
 try:
     # read arguments
-    opts = [ 'start', 'stop', 'daemon', 'autoshutdown', 'logfile=', 
'loglevel=', 'help' ]
+    opts = [ 'start', 'stop', 'daemon', 'autoshutdown', 'logfile=', 
'loglevel=',
+             'help', 'search', 'monitor' ]
     opts, args = getopt.getopt(sys.argv[1:], 'h', opts)
 except getopt.GetoptError:
     usage(1)
@@ -41,9 +53,10 @@
 mode     = None
 detach   = False
 shutdown = False
+monitor  = False
 
 for o, a in opts:
-    if o in ('--start', '--stop'):
+    if o in ('--start', '--stop', '--search'):
         if mode:
             usage(1)
         mode = o[2:]
@@ -59,6 +72,8 @@
         except:
             print 'invalid loglevel: %s' % a
             usage(1)
+    if o == '--monitor':
+        monitor = True
     if o in ('--help', '-h'):
         usage(0)
 
@@ -79,7 +94,67 @@
         print 'server not running'
     sys.exit(0)
 
+if mode == 'search':
+    # client search mode
+
+    import kaa.notifier
+    import kaa.beacon
+
+    def progress(cur, total, item):
+        n = 0
+        if total > 0:
+            n = int((cur / float(total)) * 50)
+        sys.stdout.write("|%51s| %d / %d\r" % (("="*n + ">").ljust(51), cur, 
total))
+        sys.stdout.flush()
+        if cur == total:
+            print
+
+    def changed(result):
+        for r in result:
+            print r
+
+    def uptodate():
+        print 'Beacon has finished the query and parsing'
+
+
+    query   = {}
+    for a in args:
+        key, value = a.split('=', 1)
+        if key in ('title', 'album', 'artist'):
+            value = unicode(value)
+        query[key] = value
+
+    try:
+        kaa.beacon.connect(os.path.expanduser("~/.beacon"))
+    except:
+        print 'beacon server not running'
+        sys.exit(1)
+    
+    if 'dirname' in query:
+        t1 = time.time()
+        result = kaa.beacon.get(query['dirname']).listdir()
+        t2 = time.time()
+    else:
+        t1 = time.time()
+        result = kaa.beacon.query(**query)
+        t2 = time.time()
+
+    for r in result:
+        print r
+    print 'Query took %s seconds' % (t2-t1)
+
+    if monitor:
+        result.signals['changed'].connect(changed, result)
+        result.signals['progress'].connect(progress)
+        result.signals['up-to-date'].connect(uptodate)
+        result.monitor()
+    else:
+        kaa.notifier.OneShotTimer(sys.exit, 0).start(0.1)
+
+    kaa.notifier.loop()
+    sys.exit(0)
 
+    
 # When we reach this point we need to start a new beacon server. If run
 # in daemon mode we fork and detach from the parent. After that a logger
 # is created and the thumbnail server will be forked out.
@@ -125,7 +200,10 @@
         log.error('thumbnail: %s' % e)
         time.sleep(0.1)
         sys.exit(0)
-        
+
+    # set nice level
+    os.nice(19)
+    
     # loop
     kaa.notifier.loop()
     log.info('stop thumbnail server')
@@ -177,7 +255,12 @@
 
 kaa.notifier.loop()
 log.info('stop beacon')
+
 try:
+    # try to kill thumbnailer
     os.kill(pid, 15)
 except OSError:
     pass
+
+#wait for dead thumbnailer
+os.waitpid(pid, 0)


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to