Mercurial > libervia-backend
comparison frontends/src/primitivus/progress.py @ 538:2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
- added profile argument to askConfirmation, actionResult, actionResultExt, entityDataUpdated, confirmationAnswer, getProgress
- core, frontends: fixed calls/signals according to new bridge API
- user of proper profile namespace for progression indicators and dialogs
- memory: getParam* now return bool when param type is bool
- memory: added getStringParam* to return string instead of typed value
- core, memory, storage, quick_frontend: getHistory now manage properly multi-profiles
- plugins XEP-0047, XEP-0054, XEP-0065, XEP-0077, XEP-0096; multi-profiles proper handling
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 10 Nov 2012 16:38:16 +0100 |
parents | 2a072735e459 |
children | ca13633d3b6b |
comparison
equal
deleted
inserted
replaced
537:28cddc96c4ed | 538:2c4016921403 |
---|---|
19 along with this program. If not, see <http://www.gnu.org/licenses/>. | 19 along with this program. If not, see <http://www.gnu.org/licenses/>. |
20 """ | 20 """ |
21 | 21 |
22 import urwid | 22 import urwid |
23 from urwid_satext import sat_widgets | 23 from urwid_satext import sat_widgets |
24 from sat.tools.jid import JID | |
25 | 24 |
26 | 25 |
27 class Progress(urwid.WidgetWrap): | 26 class Progress(urwid.WidgetWrap): |
28 | 27 |
29 def __init__(self, host): | 28 def __init__(self, host): |
36 max_len = max([button.getSize() for button in buttons]) | 35 max_len = max([button.getSize() for button in buttons]) |
37 buttons_wid = urwid.GridFlow(buttons,max_len,1,0,'center') | 36 buttons_wid = urwid.GridFlow(buttons,max_len,1,0,'center') |
38 main_wid = sat_widgets.FocusFrame(listbox, footer=buttons_wid) | 37 main_wid = sat_widgets.FocusFrame(listbox, footer=buttons_wid) |
39 urwid.WidgetWrap.__init__(self, main_wid) | 38 urwid.WidgetWrap.__init__(self, main_wid) |
40 | 39 |
41 def addProgress(self, id, message): | 40 def addProgress(self, progress_id, message): |
41 profile = self.host.profile # TODO: manage multiple profiles | |
42 mess_wid = urwid.Text(message) | 42 mess_wid = urwid.Text(message) |
43 progr_wid = urwid.ProgressBar('progress_normal', 'progress_complete') | 43 progr_wid = urwid.ProgressBar('progress_normal', 'progress_complete') |
44 column = urwid.Columns([mess_wid, progr_wid]) | 44 column = urwid.Columns([mess_wid, progr_wid]) |
45 self.progress_dict[id] = {'full':column,'progress':progr_wid,'state':'init'} | 45 self.progress_dict[(progress_id, profile)] = {'full':column,'progress':progr_wid,'state':'init'} |
46 self.progress_list.append(column) | 46 self.progress_list.append(column) |
47 self.progressCB(self.host.loop, (id, message)) | 47 self.progressCB(self.host.loop, (progress_id, message, profile)) |
48 | 48 |
49 def progressCB(self, loop, data): | 49 def progressCB(self, loop, data): |
50 id, message = data | 50 progress_id, message, profile = data |
51 data = self.host.bridge.getProgress(id) | 51 data = self.host.bridge.getProgress(progress_id, profile) |
52 pbar = self.progress_dict[id]['progress'] | 52 pbar = self.progress_dict[(progress_id, profile)]['progress'] #FIXME: must manage profiles |
53 if data: | 53 if data: |
54 if self.progress_dict[id]['state'] == 'init': | 54 if self.progress_dict[(progress_id, profile)]['state'] == 'init': |
55 #first answer, we must construct the bar | 55 #first answer, we must construct the bar |
56 self.progress_dict[id]['state'] = 'progress' | 56 self.progress_dict[(progress_id, profile)]['state'] = 'progress' |
57 pbar.done = float(data['size']) | 57 pbar.done = float(data['size']) |
58 | 58 |
59 pbar.set_completion(float(data['position'])) | 59 pbar.set_completion(float(data['position'])) |
60 self.updateNotBar() | 60 self.updateNotBar() |
61 else: | 61 else: |
62 if self.progress_dict[id]['state'] == 'progress': | 62 if self.progress_dict[(progress_id, profile)]['state'] == 'progress': |
63 self.progress_dict[id]['state'] = 'done' | 63 self.progress_dict[(progress_id, profile)]['state'] = 'done' |
64 pbar.set_completion(pbar.done) | 64 pbar.set_completion(pbar.done) |
65 self.updateNotBar() | 65 self.updateNotBar() |
66 return | 66 return |
67 | 67 |
68 loop.set_alarm_in(1,self.progressCB, (id, message)) | 68 loop.set_alarm_in(1,self.progressCB, (progress_id, message, profile)) |
69 | 69 |
70 def __removeBar(self, id): | 70 def __removeBar(self, progress_id, profile): |
71 wid = self.progress_dict[id]['full'] | 71 wid = self.progress_dict[(progress_id, profile)]['full'] |
72 self.progress_list.remove(wid) | 72 self.progress_list.remove(wid) |
73 del(self.progress_dict[id]) | 73 del(self.progress_dict[(progress_id, profile)]) |
74 | 74 |
75 def __onClear(self, button): | 75 def __onClear(self, button): |
76 to_remove = [] | 76 to_remove = [] |
77 for id in self.progress_dict: | 77 for progress_id, profile in self.progress_dict: |
78 if self.progress_dict[id]['state'] == 'done': | 78 if self.progress_dict[(progress_id, profile)]['state'] == 'done': |
79 to_remove.append(id) | 79 to_remove.append((progress_id, profile)) |
80 for id in to_remove: | 80 for progress_id, profile in to_remove: |
81 self.__removeBar(id) | 81 self.__removeBar(progress_id, profile) |
82 self.updateNotBar() | 82 self.updateNotBar() |
83 | 83 |
84 def updateNotBar(self): | 84 def updateNotBar(self): |
85 if not self.progress_dict: | 85 if not self.progress_dict: |
86 self.host.setProgress(None) | 86 self.host.setProgress(None) |
87 return | 87 return |
88 progress = 0 | 88 progress = 0 |
89 nb_bars = 0 | 89 nb_bars = 0 |
90 for id in self.progress_dict: | 90 for progress_id, profile in self.progress_dict: |
91 pbar = self.progress_dict[id]['progress'] | 91 pbar = self.progress_dict[(progress_id, profile)]['progress'] |
92 progress += pbar.current/pbar.done*100 | 92 progress += pbar.current/pbar.done*100 |
93 nb_bars+=1 | 93 nb_bars+=1 |
94 av_progress = progress/float(nb_bars) | 94 av_progress = progress/float(nb_bars) |
95 self.host.setProgress(av_progress) | 95 self.host.setProgress(av_progress) |
96 | 96 |