source: zero-lliurex-jclic-biblio/trunk/fuentes/zero-lliurex-jclic-biblio.install-files/usr/bin/zero-lliurex-jclic-biblio-setup @ 3640

Last change on this file since 3640 was 3640, checked in by jrpelegrina, 2 years ago

WIP in rename to zero-lliurex-jclic-biblio

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*
3
4import os
5import sys
6import xmlrpclib
7import gi
8gi.require_version('Gtk', '3.0')
9gi.require_version('PangoCairo', '1.0')
10from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
11import threading
12import xmlrpclib
13import lliurex.net
14import subprocess
15
16import signal
17signal.signal(signal.SIGINT, signal.SIG_DFL)
18
19import gettext
20gettext.textdomain('zero-lliurex-jclic-biblio')
21_ = gettext.gettext
22
23
24DESKTOP=0
25SERVER=1
26CLIENT=2
27
28CLIENT_BASE_DIR=os.path.expanduser("~/JClic/projects/")
29SERVER_BASE_DIR="/net/server-sync/share/jclic-aula/"
30TEUMESTRE="elteumestre_JClic_Infantil_Primaria_13.7"
31MURCIA="Murcia"
32JAUME="ratoli"
33
34
35class JclicRsrc:
36       
37        def __init__(self):
38               
39                self.n4d=xmlrpclib.ServerProxy("https://server:9779")
40               
41                self.t=threading.Thread()
42                self.internet_status=False
43                self.where_am_i=DESKTOP
44               
45                self.start_gui()
46               
47        #def
48       
49        def start_gui(self):
50               
51                builder=Gtk.Builder()
52                glade_path="/usr/share/zero-lliurex-jclic-biblio/rsrc/zero-jclic-library-setup.glade"
53                builder.set_translation_domain("zero-lliurex-jclic-biblio")
54                builder.add_from_file(glade_path)
55               
56               
57                self.main_window=builder.get_object("main_window")
58                self.pbar=builder.get_object("progressbar")
59                self.content_window=builder.get_object("content_window")
60                self.cancel_button=builder.get_object("cancel_button")
61                self.apply_button=builder.get_object("apply_button")
62                self.msg_label=builder.get_object("msg_label")
63               
64                self.teumestre_checkbutton=builder.get_object("teumestre_checkbutton")
65                self.murcia_checkbutton=builder.get_object("murcia_checkbutton")
66                self.jaume_checkbutton=builder.get_object("jaume_checkbutton")
67               
68               
69                self.main_window.connect("destroy",self.quit)
70                self.content_window.connect("destroy",self.quit)
71                self.cancel_button.connect("clicked",self.quit)
72                self.apply_button.connect("clicked",self.apply_clicked)
73               
74               
75                self.main_window.set_name("WHITEWINDOW")
76                self.content_window.set_name("WHITEWINDOW")
77               
78                self.set_css_info()
79               
80                self.t=threading.Thread(target=self.check)
81                self.t.daemon=True
82                self.t.start()
83               
84
85                GLib.timeout_add(50,self.pulsate)
86               
87                self.main_window.show()
88                Gtk.main()
89               
90        #def start_gui
91       
92       
93        def set_css_info(self):
94               
95                css = """
96               
97                #WHITEWINDOW {
98                        background-image:-gtk-gradient (linear, left top, right top, from (#ceed85),  to (#dbf499));
99               
100                }
101               
102                GtkFrame{
103                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffdc5a),  to (#ffdc5a));
104                }
105               
106                #WHITEFONT {
107                        color: white;
108                        text-shadow: 0px 1px black;
109                }               
110               
111                """
112               
113                self.style_provider=Gtk.CssProvider()
114                self.style_provider.load_from_data(css)
115                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
116                               
117               
118               
119        #def set_css_info
120       
121       
122        def pulsate(self):
123               
124                if self.t.is_alive():
125               
126                        self.pbar.pulse()
127                else:
128                        self.pbar.set_fraction(1)
129                        self.main_window.hide()
130                        if self.internet_status:
131                               
132                               
133                               
134                                if self.where_am_i==SERVER:
135                                        self.mestre_dir=SERVER_BASE_DIR+TEUMESTRE
136                                        self.murcia_dir=SERVER_BASE_DIR+MURCIA
137                                        self.jaume_dir=SERVER_BASE_DIR+JAUME
138                                else:
139                                        self.mestre_dir=CLIENT_BASE_DIR+TEUMESTRE
140                                        self.murcia_dir=CLIENT_BASE_DIR+MURCIA
141                                        self.jaume_dir=CLIENT_BASE_DIR+JAUME
142                                       
143                               
144                                print self.mestre_dir
145                               
146                                if os.path.exists(self.mestre_dir):
147                                        self.teumestre_checkbutton.set_active(True)
148                                if os.path.exists(self.murcia_dir):
149                                        self.murcia_checkbutton.set_active(True)
150                                if os.path.exists(self.jaume_dir):
151                                        self.jaume_checkbutton.set_active(True)
152                               
153
154                                self.content_window.show()
155                        else:
156                                self.msg_label.set_markup("<span forground='red'>"+"There is no internet connection."+"</span>")
157               
158                return self.t.is_alive()
159               
160        #def pulsate
161       
162        def check(self):
163               
164                import time
165               
166               
167                if lliurex.net.get_ip_from_host("www.google.es")!=None:
168                        self.internet_status=True
169               
170                if os.path.exists("/var/lib/n4d/variables-dir/REMOTE_VARIABLES_SERVER"):
171                        self.where_am_i=CLIENT
172                        os.environ["http_proxy"]="proxy:3128"
173                       
174                if os.path.exists("/var/lib/n4d/variables-dir/LDAP_BASE_DN"):
175                        self.where_am_i=SERVER
176                       
177                       
178                time.sleep(2)
179                       
180        #def check
181       
182        def apply_clicked(self,widget):
183               
184                self.apply_button.set_sensitive(False)
185                t=threading.Thread(target=self._execute)
186                t.daemon=True
187                t.start()
188               
189               
190        #def apply
191       
192        def _execute(self):
193               
194                command="zero-lliurex-jclic-biblio-downloader"
195               
196                cmd="http_proxy='%s' %s %s elteumestre %s"%(["","proxy:3128"][self.where_am_i==2],command,["remove","install"][self.teumestre_checkbutton.get_active()],[CLIENT_BASE_DIR,SERVER_BASE_DIR][self.where_am_i==1])
197                print "[!] CALLING",cmd
198                subprocess.call(cmd,shell=True,preexec_fn=lambda: signal.signal(signal.SIGPIPE,signal.SIG_DFL))
199               
200                cmd="http_proxy='%s' %s %s murcia %s"%(["","proxy:3128"][self.where_am_i==2],command,["remove","install"][self.murcia_checkbutton.get_active()],[CLIENT_BASE_DIR,SERVER_BASE_DIR][self.where_am_i==1])
201                print "[!] CALLING",cmd
202                subprocess.call(cmd,shell=True,preexec_fn=lambda: signal.signal(signal.SIGPIPE,signal.SIG_DFL))
203               
204                cmd="http_proxy='%s' %s %s ratoli %s"%(["","proxy:3128"][self.where_am_i==2],command,["remove","install"][self.jaume_checkbutton.get_active()],[CLIENT_BASE_DIR,SERVER_BASE_DIR][self.where_am_i==1])
205                print "[!] CALLING",cmd
206                subprocess.call(cmd,shell=True,preexec_fn=lambda: signal.signal(signal.SIGPIPE,signal.SIG_DFL))
207               
208                print "DONE"
209               
210                self.quit(None)
211               
212               
213        #def _execute
214       
215       
216        def quit(self,widget):
217               
218                Gtk.main_quit()
219                sys.exit(0)
220               
221        #def quit
222       
223       
224#class JclicRsrc
225
226
227
228if __name__=="__main__":
229       
230        jclic=JclicRsrc()
231       
Note: See TracBrowser for help on using the repository browser.