source: lliurex-homework-harvester/trunk/fuentes/install-files/usr/bin/lliurex-homework-sender @ 1863

Last change on this file since 1863 was 1863, checked in by daduve, 4 years ago

Adding new files

  • Property svn:executable set to *
File size: 7.2 KB
Line 
1#!/usr/bin/env python
2# coding = utf-8
3
4import gtk
5import gtk.gdk
6import gtk.glade
7import os
8import os.path
9import sys
10import base64                       
11import getpass
12import glib
13import threading
14import sys
15
16import locale
17import gettext
18
19from xmlrpclib import *
20
21
22locale.textdomain("lliurex-homework-harvester")
23gettext.textdomain("lliurex-homework-harvester")
24_=locale.gettext
25
26WINDOW_GLADE="ClientSide.glade"
27
28
29class SendToTeacher:
30       
31        def __init__(self,file_list=None):
32               
33                print "[SendToTeacher] INIT"
34                self.file_list=file_list
35                if self.file_list==None:
36                        self.file_list=[]
37                self.read_glade()
38                self.sending=False
39                self.sent_files=False
40                self.selected_teacher=None
41               
42
43        #def init
44       
45        def read_glade(self):
46               
47                if os.path.exists("/srv/svn/leia/llx-apps/trunk/lliurex-homework-harvester/install-files/usr/share/lliurex-homework-harvester/rsrc/" + WINDOW_GLADE):
48                        path="/srv/svn/leia/llx-apps/trunk/lliurex-homework-harvester/install-files/usr/share/lliurex-homework-harvester/rsrc/" + WINDOW_GLADE
49                else:
50                        path="/usr/share/lliurex-homework-harvester/rsrc/"+WINDOW_GLADE
51               
52                glade=gtk.glade.XML(path)
53               
54                self.window=glade.get_widget("window")
55                self.window.connect("destroy",self.window_destroy)
56                self.files_tv=glade.get_widget("FilesTreeview")
57                self.teachers_tv=glade.get_widget("TeachersTreeview")
58                self.teachers_tv.connect("button-release-event",self.teachers_tv_clicked)
59                self.send_button=glade.get_widget("SendButton")
60                self.send_button.connect("clicked",self.send_clicked)
61                self.cancel_button=glade.get_widget("CancelButton")
62                self.cancel_button.connect("clicked",self.cancel_clicked)
63                self.add_file_button=glade.get_widget("AddFileButton")
64                self.add_file_button.connect("clicked",self.add_file_clicked)
65                self.remove_file_button=glade.get_widget("RemoveFileButton")
66                self.remove_file_button.connect("clicked",self.remove_file_clicked)
67                self.msg_label=glade.get_widget("msgLabel")
68                self.progress_bar=glade.get_widget("sendProgressbar")
69               
70               
71                self.build_files_tv()
72                self.build_teachers_tv()
73                self.window.show_all()
74
75        #def read_glade
76       
77        def teachers_tv_clicked(self,widget,event):
78               
79                model,iter=self.teachers_tv.get_selection().get_selected()
80                if iter!=None:
81                        self.selected_teacher=self.teachers_store.get_value(iter,1)
82                       
83               
84               
85        #def teachers_tv_clicked
86       
87        def progress_pulse(self):
88               
89                self.send_button.set_sensitive(False)
90                self.progress_bar.set_text("")
91               
92                if self.sending:
93                        self.progress_bar.pulse()
94                else:
95                        if self.sent_files:
96                                self.progress_bar.set_fraction(1.0)
97                                self.progress_bar.set_text(_("Files have been sent to ") + " '" + self.teacher + "'")
98                        else:
99                                self.progress_bar.set_fraction(0)
100                                self.progress_bar.set_text("Error sending files")
101                        self.send_button.set_sensitive(True)
102                       
103                return self.sending
104               
105        #def progress_pulse
106       
107        def build_files_tv(self):
108               
109                self.files_store=gtk.ListStore(str)
110                self.files_tv.set_model(self.files_store)
111                self.files_tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
112                renderer=gtk.CellRendererText()
113                column=gtk.TreeViewColumn(_("File"),renderer)
114                column.add_attribute(renderer,"text",0)
115                self.files_tv.append_column(column)
116                for item in self.file_list:
117                        self.files_store.append([item])
118                       
119        #def build_files_tv
120               
121        def build_teachers_tv(self):
122               
123                self.teachers_store=gtk.ListStore(str,str,str,str)
124                self.teachers_tv.set_model(self.teachers_store)
125                uid_renderer=gtk.CellRendererText()
126                uid_column=gtk.TreeViewColumn(_("Where"),uid_renderer)
127                uid_column.add_attribute(uid_renderer,"text",0)
128                name_renderer=gtk.CellRendererText()
129                name_column=gtk.TreeViewColumn(_("Teacher"),name_renderer)
130                name_column.add_attribute(name_renderer,"text",1)
131                self.teachers_tv.append_column(uid_column)
132                self.teachers_tv.append_column(name_column)
133
134                try:
135                        server = ServerProxy ("https://server:9779")
136                       
137                        self.paths=server.get_paths("","TeacherShareManager")
138                       
139                        self.teachers_store.clear()
140                       
141                        for item in self.paths:
142                                path,name,ip,port=self.paths[item]
143                                self.teachers_store.append([name,item,ip,port])
144                               
145                       
146                except Exception as e:
147                        print e
148                        self.msg_label.set_text("Error connecting to server")
149
150               
151                glib.timeout_add(5000,self.populate_teachers_tv)
152               
153        #def build_teachers_tv
154       
155       
156        def window_destroy(self,args):
157               
158                gtk.main_quit()
159               
160        #def window_destroy
161               
162       
163        def populate_teachers_tv(self):
164               
165               
166               
167               
168               
169                self.teachers_store.clear()
170               
171                try:
172                       
173                        server = ServerProxy ("https://server:9779")
174                        self.paths=server.get_paths("","TeacherShareManager")
175                       
176                        for item in self.paths:
177                                path,name,ip,port=self.paths[item]
178                                #print ip
179                                self.teachers_store.append([name,item,ip,port])
180                               
181                        iter=self.teachers_store.get_iter_first()
182                        while iter:
183                                teacher=self.teachers_store.get_value(iter,1)
184                                if teacher==self.selected_teacher:
185                                        self.teachers_tv.set_cursor(self.teachers_store.get_path(iter))
186                                iter=self.teachers_store.iter_next(iter)
187                                       
188                       
189                        self.msg_label.set_text("")
190                       
191                       
192                except:
193                        self.msg_label.set_text("Error connecting to server")
194                       
195                return True
196               
197        #def populate_teachers_tv
198       
199       
200        def add_file_clicked(self,widget):
201               
202                dialog = gtk.FileChooserDialog(_("Open..."),    None, gtk.FILE_CHOOSER_ACTION_OPEN,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,      gtk.STOCK_OPEN, gtk.RESPONSE_OK))
203                dialog.set_default_response(gtk.RESPONSE_OK)
204                response = dialog.run()
205                if response == gtk.RESPONSE_OK:
206                        self.file_list.append(dialog.get_filename())
207                        self.files_store.append([dialog.get_filename()])
208                       
209                       
210                dialog.destroy()
211       
212        def remove_file_clicked(self,widget):
213               
214                selection,row=self.files_tv.get_selection().get_selected_rows()
215                for item in row:
216                        iter=self.files_store.get_iter(item)
217                        self.files_store.get_value(iter,0)
218                        self.files_store.remove(iter)
219                       
220               
221        #def remove_file_clicked
222
223        def to_base64(self,path):
224               
225                f=open(path,'rb')
226                list=f.readlines()
227                f.close()
228                buf="".join(list)
229                data=base64.b64encode(buf)
230                return data
231               
232        #def get_file
233
234
235        def send_clicked(self,widget):
236               
237                model,iter=self.teachers_tv.get_selection().get_selected()
238               
239                if iter!=None:
240
241                        self.sending=True
242                        teacher=self.teachers_store.get_value(iter,1)
243                        ip=self.teachers_store.get_value(iter,2)
244
245
246                        glib.timeout_add(100,self.progress_pulse)
247                        t=threading.Thread(target=self.send_files,args=(teacher,ip,))
248                        t.daemon=True
249                        t.start()
250                        #self.send_files(teacher,ip)
251
252                else:
253                        self.msg_label.set_text(_("Please, select a destination first."))
254                       
255        #def send_clicked
256
257
258
259        def send_files(self,teacher,ip):
260
261               
262                self.msg_label.set_text("")
263                ret=True
264               
265                user=getpass.getuser()
266
267                for item in self.files_store:
268                        file_name=item[0]
269                        server = ServerProxy ("https://localhost:9779")
270                        try:
271                                ret=server.send_to_teacher_net("","TeacherShare",user,teacher,file_name)
272                                if type(ret)!=type(True):
273                                        print ret
274                                        ret=False
275                                       
276                        except Exception as e:
277                                print e
278                                self.msg_label.set_text(e.strerror)
279                                ret=False
280                                f.write(e.strerror+"/n")
281                                break
282                       
283
284                self.sending=False
285                self.sent_files=ret
286                self.teacher=teacher
287               
288               
289                return self.sent_files
290               
291               
292                       
293        #def send_files
294                               
295
296        def cancel_clicked(self,widget):
297               
298                gtk.main_quit()
299               
300        #def cancel_clicked
301
302       
303       
304#class SendToTeacher
305
306if __name__=="__main__":
307       
308        gtk.gdk.threads_init()
309        gtk.gdk.threads_enter()
310
311
312        st=SendToTeacher(sys.argv[1:])
313        gtk.main()
314        gtk.gdk.threads_leave()
Note: See TracBrowser for help on using the repository browser.