source: lliurex-openmeetings/trunk/fuentes/client-install-files/usr/bin/lliurex-openmeetings-remote-startup @ 2046

Last change on this file since 2046 was 2046, checked in by Juanma, 3 years ago

Fix lliurex-openmeetings-remote-startup requires

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*
3
4import os
5import xmlrpclib
6import gi
7gi.require_version('Gtk','3.0')
8gi.require_version('PangoCairo','1.0')
9from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
10import threading
11import sys
12
13import signal
14signal.signal(signal.SIGINT, signal.SIG_DFL)
15
16import gettext
17gettext.textdomain('lliurex-openmeetings-remote')
18_ = gettext.gettext
19
20class LORemoteStartup:
21       
22        def __init__(self,ip=None):
23               
24                self.ip=ip
25               
26                if self.ip==None:
27                        self.ip="server"
28                               
29               
30                self.thread=threading.Thread()
31                self.force_state=True
32                self.start_gui()
33               
34               
35        #def init
36       
37        def start_gui(self):
38               
39                builder=Gtk.Builder()
40                builder.set_translation_domain("lliurex-openmeetings-remote")
41                #glade_path="/srv/svn/trusty/lliurex-openmeetings/trunk/fuentes/client-install-files/usr/share/lliurex-openmeetings-remote/rsrc/lliurex-openmeetings-remote-startup.glade"
42                glade_path="/usr/share/lliurex-openmeetings-remote/rsrc/lliurex-openmeetings-remote-startup.glade"
43                builder.add_from_file(glade_path)
44               
45                self.window=builder.get_object("window1")
46                self.status_label=builder.get_object("status_label")
47                self.status_switch=builder.get_object("status_switch")
48                self.image=builder.get_object("image")
49               
50               
51                       
52                self.login_window=builder.get_object("login_window")
53                self.user_entry=builder.get_object("user_entry")
54                self.pwd_entry=builder.get_object("pwd_entry")
55               
56                self.accept_button=builder.get_object("accept_button")
57                self.cancel_button=builder.get_object("cancel_button")
58                self.login_label=builder.get_object("login_label")
59               
60                self.progress_window=builder.get_object("progress_window")
61                self.progressbar=builder.get_object("progressbar")
62               
63               
64                self.window.connect("destroy",Gtk.main_quit)
65                self.login_window.connect("destroy",Gtk.main_quit)
66                self.accept_button.connect("clicked",self.accept_clicked)
67                self.cancel_button.connect("clicked",Gtk.main_quit)
68               
69                self.status_switch.connect("notify::active",self.status_changed)
70               
71                self.pwd_entry.connect("activate",self.accept_clicked)
72               
73               
74                self.login_window.show()
75               
76                Gtk.main()
77               
78        #def start_gui
79       
80       
81        def accept_clicked(self,widget):
82               
83                client=xmlrpclib.ServerProxy("https://%s:9779"%self.ip)
84                user=self.user_entry.get_text()
85                password=self.pwd_entry.get_text()
86               
87                ret=client.validate_user(user,password)
88               
89               
90                if ret[0]:
91                       
92                        letsgo=False
93                       
94                        for group in ["adm","admins","teachers"]:
95                                if group in ret[1]:
96                                        letsgo=True
97                                        break
98                       
99                        if letsgo:
100                                self.login_window.hide()
101                                self.user_info=(user,password)
102                               
103                                client=xmlrpclib.ServerProxy("https://%s:9779"%self.ip)
104                                ret=client.remote_service_is_running(self.user_info,"LliurexOpenmeetings")
105                                if ret[1]==-1:
106                                        self.open_dialog("Lliurex Lab",_("Lliurex Lab service is not initialized"))
107                                        sys.exit(0)
108                                self.service_status=ret[0]
109                                self.status_switch.set_active(self.service_status)
110                               
111                               
112                               
113                                if self.service_status:
114                                        self.status_label.set_text(_("Lliurex Lab service is running"))
115                                        self.image.set_from_icon_name("user-available",Gtk.IconSize.BUTTON)
116                                else:
117                                        self.status_label.set_text(_("Lliurex Lab service is stopped"))
118                                        self.image.set_from_icon_name("user-busy",Gtk.IconSize.BUTTON)
119                                self.force_state=False
120                               
121                                self.window.show()
122                               
123                               
124                        else:
125                       
126                                self.login_label.set_markup("<span foreground='red'>"+_("User is not allowed to use this application")+"</span>")
127                       
128                else:
129                       
130                        self.login_label.set_markup("<span foreground='red'>"+_("User or password not valid")+"</span>")
131               
132               
133        #def accept_clicked
134       
135        def status_changed(self,widget,state):
136               
137               
138                if not self.force_state:
139                        widget.get_active()
140                       
141                        self.progress_window.show()
142                        GLib.timeout_add(50,self.pulsating)
143                        self.thread=threading.Thread(target=self.enable_service,args=(widget.get_active(),))
144                        self.thread.daemon=True
145                        self.thread.start()
146                       
147                else:
148                        self.force_state=False
149               
150        #def status_changed
151       
152        def enable_service(self,state):
153               
154                c=xmlrpclib.ServerProxy("https://%s:9779"%self.ip)
155               
156                if state:
157                        c.remote_service_start(self.user_info,"LliurexOpenmeetings")
158                        self.service_status=True
159                else:
160                        c.remote_service_stop(self.user_info,"LliurexOpenmeetings")[0]
161                        self.service_status=False
162               
163               
164               
165               
166        #def enable_service
167       
168        def pulsating(self):
169               
170                self.progressbar.pulse()
171               
172                if not self.thread.is_alive():
173                        self.progress_window.hide()
174                        if self.service_status:
175                                self.status_label.set_text(_("Lliurex Lab service is running"))
176                                self.image.set_from_icon_name("user-available",Gtk.IconSize.BUTTON)
177                        else:
178                                self.status_label.set_text(_("Lliurex Lab service is stopped"))
179                                self.image.set_from_icon_name("user-busy",Gtk.IconSize.BUTTON)
180               
181                return self.thread.is_alive()
182               
183        def open_dialog(self,title,text,show_cancel=False):
184
185                label = Gtk.Label()
186                label.set_markup(text)
187                if show_cancel:
188                        dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT,Gtk.STOCK_CANCEL,Gtk.ResponseType.CANCEL))
189                else:
190                        dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
191                hbox = Gtk.HBox()
192                img=Gtk.Image.new_from_icon_name("emblem-important",Gtk.IconSize.DIALOG)
193                hbox.pack_start(img,True,True,5)
194                hbox.pack_start(label,True,True,10)
195                hbox.show_all()
196                dialog.vbox.pack_start(hbox,True,True,10)
197                dialog.set_border_width(6)
198                response = dialog.run()
199                dialog.destroy()
200                return response
201               
202        #def open_dialog
203       
204#class LORemoteStartup
205
206if __name__=="__main__":
207       
208        lo=LORemoteStartup()
209       
Note: See TracBrowser for help on using the repository browser.