Languages/Python/PyKDE Knotify Tutorial/MyJob.py

    From KDE TechBase
    Revision as of 00:12, 10 August 2010 by Hefee (talk | contribs) (Terimation)

    1. ! /usr/bin/python
    2. -*- 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)
    
           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_()