All pastes #628291 Raw Edit

pyobjc problem

public text v1 · immutable
·published 2007-07-20 21:35 UTC
rendered paste body
import os, sys,re 
import  time
from threading import Thread
from Queue import Queue



from AppKit import NSApplication, NSWorkspace, NSWorkspaceDidMountNotification, NSWorkspaceDidUnmountNotification, NSAutoreleasePool
from Foundation import NSObject
import objc

class NotificationHandler(NSObject):
    
    def _setQueueOut(self,queueOut):
        self.queueOut=queueOut

    def handleNotification(self, notification):
        path = notification.userInfo()['NSDevicePath']
        name = notification.name()
        if name == NSWorkspaceDidMountNotification:
            notificationName = "mounted"
        elif name == NSWorkspaceDidUnmountNotification:
            notificationName = "unmounted"
            
        print notificationName
        self.queueOut.put(["cd_"+notificationName,path])
        



class MacOsXCdNotification(Thread):
    
    def __init__(self,queueOut):
        Thread.__init__(self)
        self.queueOut = queueOut
        self.setDaemon(True)
    
    def run(self):
        # Create an instance of our notification handler, and ask the workspace 
        # notification center to tell us when a new volume is mounted.
        
        pool = NSAutoreleasePool.alloc().init()
        
                
        notifier = NotificationHandler.alloc().init()
        notifier._setQueueOut(self.queueOut)
        ws = NSWorkspace.sharedWorkspace()
        ns = ws.notificationCenter()
        ns.addObserver_selector_name_object_(notifier, notifier.handleNotification, NSWorkspaceDidMountNotification, None)
        ns.addObserver_selector_name_object_(notifier, notifier.handleNotification, NSWorkspaceDidUnmountNotification, None)
        print "start"
        self.queueOut.put(["cd_detect_start"])

        NSApplication.sharedApplication().run()

        

        del pool

           
if __name__ == "__main__":
    
    
    print "detection started"
    q = Queue(1000)

    c = MacOsXCdNotification(q)
    c.start()

    while True:
        print q.get()