DownloadFile.py 2.22 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
from urllib2 import URLError
from urllib2 import HTTPError
import urllib2,os
import random
import time
from wx.lib.pubsub import pub
from threading import Thread



class DownloadFile():
     
    def __init__(self,url,nameFile):
        self.url = url
        self.nameFile = nameFile
        self.downloading = True

    def start(self):
        
        file_name = self.nameFile
        try:
            u = urllib2.urlopen(self.url)
            f = open(file_name, 'wb')
            meta = u.info()
            file_size = int(meta.getheaders("Content-Length")[0])
            
        except:
            
            return False
            
        block_sz = 8192    
        while self.downloading:
            buffer = u.read(block_sz)
            if not buffer:
                self.downloading = False
            f.write(buffer)

        return True



class DownloadFile2(Thread):
     
    def __init__(self,url,nameFile):
        self.url = url
        self.nameFile = nameFile
        self.downloading = True
        Thread.__init__(self)


    def stop(self):
        self.downloading = False
        
    
    def run(self):
        
        file_name = self.nameFile
        try:
            u = urllib2.urlopen(self.url)
            f = open(file_name, 'wb')
            meta = u.info()
            file_size = int(meta.getheaders("Content-Length")[0])
            
        except :
            wx.CallAfter(pub.sendMessage, "erroDeConexao", msg="Falha na conexao")
            self.downloading = False;
            return False
            
        
        file_size_dl = 0
        block_sz = 8192    
        while self.downloading:
            buffer = u.read(block_sz)
            if not buffer:
                break

            file_size_dl += len(buffer)
            f.write(buffer)
            status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
            status = status + chr(8)*(len(status)+1)
            
            wx.CallAfter(pub.sendMessage, "updateProgress", msg=(file_size_dl * 100. / file_size))
        if (file_size_dl * 100. / file_size) >=100:    
            wx.CallAfter(pub.sendMessage, "downloadSucess", msg="Download realizado")