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

Last change on this file since 635 was 635, checked in by jrpelegrina, 4 years ago

First release to xenial

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