update GeDialog while download [SOLVED]



  • On 24/11/2014 at 13:14, xxxxxxxx wrote:

    hey I try to set a progress while downloading a file

      
    u = urlopen('http:/url/'+filename)
    ...
      
    while True:
    	...
    	self.SetString(1014,message)
    	self.LayoutChanged(1009)
    

    It update the dialog after the full download of the file .



  • On 25/11/2014 at 02:34, xxxxxxxx wrote:

    Hello,

    without knowing in which context you are using the above code it is hard to say anything. There are differences in PC and Mac when it comes to redrawing dialogs, please see this thread.

    So the most sophisticated solution would be to handle the download in a separate C4DThread. There you could use SpecialEventAdd() to trigger the redraw of the dialog.

    best wishes,
    Sebastian



  • On 26/11/2014 at 04:53, xxxxxxxx wrote:

    Hello Sebastian,

    thanks for you reply - I try that :

    class RB_Client(c4d.threading.C4DThread) :
                
                def Main(self) :
                    
                    u = urlopen('url')
                    ...
      
                        while True:
                            buffer = u.read(block_size)
                            if not buffer:
                                break
                            message2 = str(round(float(downloaded_bytes)/file_size*100-0.5))+" %"
                            UpdaterDialog.progressmessage = message2
                            c4d.SpecialEventAdd(betaupdatefunction_ID)
                        f.close()
                    
                    pass
                    
            Cthread = RB_Client()
            Cthread.Start(mode=c4d.THREADMODE_ASYNC, priority=c4d.THREADPRIORITY_NORMAL)
            
            Cthread.Wait(False)
      
     def CoreMessage(self, id, msg) :
              if id==betaupdatefunction_ID:
                  self.SetString(1005,self.progressmessage)
                  self.LayoutChanged(1006)
                  return True
              return gui.GeDialog.CoreMessage(self, id, msg)
      
    
    

    the dialog refresh after the end of the function not during the while



  • On 27/11/2014 at 02:23, xxxxxxxx wrote:

    Hello,

    maybe your thread works too fast for Cinema to send the messages. You could add a sleep() call from the time lib in your while loop to give Cinema a chance to send the message.

    Alternatively you can use SetTimer() and Timer() in your GeDialog so the dialog will update continuously independent from any thread message.

    Best wishes,
    Sebastian



  • On 05/12/2014 at 08:24, xxxxxxxx wrote:

    Hello conner,
    was your question answered?
    best wishes,
    Sebastian



  • On 06/12/2014 at 07:55, xxxxxxxx wrote:

    yes thanks


Log in to reply