Languages/Python/PyKDE Knotify Tutorial/MyJob.py

    From KDE TechBase
    Revision as of 13:06, 4 September 2011 by Macdems (talk | contribs) (Added the line setting job description)
    The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
    #! /usr/bin/python
    # -*- coding: utf-8 -*-
    from PyQt4.QtCore import QObject,QTimer,QString
    from PyKDE4.kdecore import KJob
    from PyKDE4.kio import KIO
     
    class MyJob(KJob):
        def __init__(self,parent=QObject()):
            KJob.__init__(self,parent)
            #We want to have a Suspenable and Killable Job
            self.setCapabilities(KJob.Capabilities(KJob.Suspendable|KJob.Killable))
     
            #Just a maximum Variable
            self.max=25
     
            #index
            self.i=0
     
        def start(self):
            #register the Job to the JobTracker
            KIO.getJobTracker().registerJob(self)
    
            #initalizing for work
            self.i=0
     
            #start the actual work in another thread
            #this function has to terminate, before the work is done
            QTimer().singleShot(0, self.doWork)
     
        def doWork(self):             
            #the actual work                                         
            try:            
                #if we are killed or suspended just return                                           
                if self.error() or self.isSuspended():                    
                    return
            except RuntimeError:
                #if this class is killed before a RuntimeError will raise
                return
     
            #do a peace of hard work
            self.i+=1
     
            #fortunately we have made a peace of work 
            #-> show this to everybody
            KJob.setPercent(self,self.i*4)
            self.description.emit(self, "Our Splendid Job", ("Source","counter"), ("Destination","dummy"))
     
            if self.i==self.max:
                #jeah we have done the bunch of work
                #send the result signal for showing, that we ended the work
                self.emitResult()
                return 
            #just go to sleep for 1000ms than go on
            QTimer().singleShot(1000, self.doWork)
     
        def doSuspend(self):
            #the surounding function from KJob makes the isSuspended() become True
            #returns True for signaling that this class supports to suspend
            return True
     
        def doResume(self):
            #start with work again
            QTimer().singleShot( 0, self.doWork )
            #return True for signaling that this class supports resuming
            return True
     
        def doKill(self):
            #return True for signaling that we support killing
            return True
    
    
    
    def handleResult(job):
        #handleResult Function
        #it is called when the job is terminating
        if job.error():
           print 'error happend'
        else:
           print 'job has terminated successfully'
        
        #termination the whole application
        sys.exit()
    
    if __name__ == "__main__":
        import sys
     
        from PyKDE4.kdecore import KCmdLineArgs, KAboutData, KLocalizedString, ki18n
        from PyKDE4.kdeui import KApplication    
     
        appName     = "default"
        catalog     = ""
        programName = ki18n ("default")  
        version     = "1.0"
        description = ki18n ("Default Example")  
        license     = KAboutData.License_GPL
        copyright   = ki18n ("(c) 2010 Sandro Knauß") 
        text        = ki18n ("none") 
        homePage    = "techbase.kde.org"
        bugEmail    = "[email protected]"
     
        aboutData   = KAboutData (appName, catalog, programName, version, description,
                                  license, copyright, text, homePage, bugEmail)
     
     
        KCmdLineArgs.init (sys.argv, aboutData)
     
        app = KApplication ()
        
        #create job
        job=MyJob(app)
    
        job.result.connect(handleResult)
    
        #start job
        job.start()
        
        #wait till all is done
        app.exec_()