Languages/Python/PyKDE Knotify Tutorial/MyJob.py

From KDE TechBase
Revision as of 00:12, 10 August 2010 by Hefee (talk | contribs) (Terimation)
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.

  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_()