~lidaobing/ubuntu-tweak/ubuntu-ubuntu-tweak

« back to all changes in this revision

Viewing changes to ubuntutweak/network/downloadmanager.py

  • Committer: LI Daobing
  • Date: 2010-07-31 10:10:26 UTC
  • mto: This revision was merged to the branch mainline in revision 13.
  • Revision ID: lidaobing@gmail.com-20100731101026-9o3m59258q5perbo
Tags: upstream-0.5.5
ImportĀ upstreamĀ versionĀ 0.5.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
import gobject
10
10
 
11
11
from xmlrpclib import ServerProxy, Error
12
 
from ubuntutweak.conf import settings
13
12
from ubuntutweak.widgets.dialogs import BusyDialog
14
13
 
15
 
#TODO old stuff
16
 
from ubuntutweak.common.consts import *
 
14
from ubuntutweak.common import consts
17
15
from ubuntutweak.common.config import TweakSettings
18
16
 
19
 
socket.setdefaulttimeout(10)
 
17
socket.setdefaulttimeout(60)
20
18
 
21
19
class Downloader(gobject.GObject):
22
20
    __gsignals__ = {
23
21
      'downloading': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_FLOAT,)),
24
22
      'downloaded': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
 
23
      'error': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()),
25
24
    }
26
25
 
27
 
    tempdir = os.path.join(settings.CONFIG_ROOT, 'temp')
 
26
    tempdir = os.path.join(consts.CONFIG_ROOT, 'temp')
28
27
 
29
28
    def __init__(self, url=None):
30
29
        if url:
33
32
 
34
33
    def create_tempdir(self):
35
34
        if not os.path.exists(self.tempdir):
36
 
            os.mkdir(self.tempdir)
 
35
            os.makedirs(self.tempdir)
37
36
        else:
38
37
            if not os.path.isdir(self.tempdir): 
39
38
                os.remove(self.tempdir)
40
 
                os.mkdir(self.tempdir)
 
39
                os.makedirs(self.tempdir)
41
40
 
42
41
    def clean_tempdir(self):
43
42
        for root, dirs, files in os.walk(self.tempdir, topdown=False):
55
54
            self.url = url
56
55
 
57
56
        self.save_to = os.path.join(self.tempdir, os.path.basename(self.url))
58
 
        urllib.urlretrieve(self.url, self.save_to, self.update_progress)
 
57
        try:
 
58
            urllib.urlretrieve(self.url, self.save_to, self.update_progress)
 
59
        except socket.timeout:
 
60
            self.emit('error')
59
61
 
60
62
    def update_progress(self, blocks, block_size, total_size):
61
63
        percentage = float(blocks*block_size)/total_size
62
 
        if percentage < 1:
63
 
            self.emit('downloading', percentage)
64
 
        elif percentage >= 1:
65
 
            self.emit('downloaded')
 
64
        if percentage >= 0:
 
65
            if percentage < 1:
 
66
                self.emit('downloading', percentage)
 
67
            elif percentage >= 1:
 
68
                self.emit('downloaded')
 
69
        else:
 
70
            self.emit('error')
66
71
 
67
72
    def get_downloaded_file(self):
68
73
        return self.save_to
70
75
class DownloadDialog(BusyDialog):
71
76
    time_count = 1
72
77
    downloaded = False
 
78
    error = False
73
79
 
74
80
    def __init__(self, url=None, title=None, parent=None):
75
81
        BusyDialog.__init__(self, parent=parent)
76
82
 
77
 
        self.set_default_size(320, -1)
 
83
        self.set_size_request(320, -1)
78
84
        self.set_title('')
 
85
        self.set_resizable(False)
79
86
        self.set_has_separator(False)
80
87
        self.set_border_width(8)
81
88
 
101
108
 
102
109
        self.downloader.connect('downloading', self.on_downloading)
103
110
        self.downloader.connect('downloaded', self.on_downloaded)
 
111
        self.downloader.connect('error', self.on_error_happen)
104
112
 
105
113
        self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
106
114
        self.show_all()
141
149
        self.response(gtk.RESPONSE_DELETE_EVENT)
142
150
        self.downloaded = True
143
151
 
 
152
    def on_error_happen(self, widget):
 
153
        self.progress_bar.set_text(_('Error happened!'))
 
154
        self.progress_bar.set_fraction(1)
 
155
        self.response(gtk.RESPONSE_DELETE_EVENT)
 
156
        self.downloaded = False
 
157
        self.error = True
 
158
 
144
159
    def _download_thread(self):
145
160
        self.downloader.start(self.url)
146
161