source: zero-center/trunk/fuentes/install-files/usr/share/zero-center/zero-center.py @ 8374

Last change on this file since 8374 was 8374, checked in by hectorgh, 6 weeks ago

enabling ctrl+f

  • Property svn:executable set to *
File size: 35.4 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*
3 
4
5import os
6import multiprocessing
7import time
8import random
9import xmlrpclib
10import cairo
11import grp
12import sys
13import subprocess
14import json
15
16try:
17        import gi
18        gi.require_version('Gtk', '3.0')
19        gi.require_version('PangoCairo', '1.0')
20        from gi.repository import Gtk, Gdk, GObject, GLib, PangoCairo, Pango
21       
22except Exception as e:
23        print e
24        #zero-server-wizard initialization forces me to do this
25
26import signal
27signal.signal(signal.SIGINT, signal.SIG_DFL)
28
29import gettext
30gettext.textdomain('zero-center')
31_ = gettext.gettext
32
33
34BAR_HEIGHT=90
35CONF_X=5
36
37if os.path.exists("/home/lliurex/banners/"):
38        BANNER_PATH="/home/lliurex/banners/"
39else:
40        BANNER_PATH="/usr/share/banners/lliurex-neu/"
41       
42
43class CategoriesParser:
44       
45        CATEGORIES_PATH="/usr/share/zero-center/categories/"
46       
47        def __init__(self):
48               
49                self.parse_categories()
50               
51        #def init
52       
53        def parse_categories(self,path=None):
54               
55                self.categories=[]
56               
57                if path==None:
58                        path=self.CATEGORIES_PATH
59                       
60                for item in os.listdir(path):
61                        file_path=path+item
62                       
63                        f=open(file_path)
64                        lines=f.readlines()
65                        f.close()
66                       
67                        cat={}
68                       
69                        for line in lines:
70                                key,value=line.split("=")
71                                cat[key]=value.strip("\n")
72                                if key=="level":
73                                        cat[key]=int(cat[key])
74                       
75                        self.categories.append(cat)
76                       
77                tmp=[]
78               
79                while len(self.categories)>0:
80                        selected_index=0
81                        index=0
82                        level=0
83                        for item in self.categories:
84                                if item["level"]>level:
85                                        level=item["level"]
86                                        selected_index=index
87                                       
88                               
89                                index+=1
90                       
91                        tmp.append(self.categories[selected_index])
92                        self.categories.pop(selected_index)
93                       
94                self.categories=tmp
95               
96        #def parse_categories
97               
98               
99#class CategoriesParser
100
101
102class AppParser:
103       
104        BASE_DIR="/usr/share/zero-center/"
105        APP_PATH=BASE_DIR+"applications/"
106        ZMD_PATH=BASE_DIR+"zmds/"
107       
108       
109        def __init__(self):
110               
111                self.categories=["ID","Name","Comment","Icon","Category","Icon","ScriptPath","Groups","Service","Locks"]
112                self.apps={}
113                self.app_list=[]
114                self.configured=[]
115                #print("[ZeroCenter] Parsing apps...")
116                self.parse_all()
117               
118        #def init
119
120       
121        def add_app(self,app):
122               
123                try:
124                        if app["Category"].lower() not in self.apps:
125                                self.apps[app["Category"].lower()]=[]
126                       
127                        self.apps[app["Category"].lower()].append(app)
128                        self.app_list.append(app["ID"])
129                except:
130                        pass
131                       
132        #def add_app
133       
134        def parse_all(self,dir=None):
135               
136                if dir==None:
137                        dir=self.APP_PATH
138       
139                for item in os.listdir(dir):
140                        file_path=self.APP_PATH+item
141                        app=self.parse_file(file_path)
142                        self.add_app(app)
143                       
144        #def parse_all
145
146       
147        def parse_file(self,file_path):
148               
149                f=open(file_path)
150                lines=f.readlines()
151                f.close()
152                id=file_path.split("/")[-1].split(".")[0]
153                app={}
154                for item in lines:
155                        try:
156                                key,value=item.split("=")
157                                app[key]=value.strip("\n")
158                        except:
159                                pass
160               
161                app["ID"]=id
162                app["configured"]=-1
163                app["custom_msg"]=""
164               
165                app["bar_height"]=BAR_HEIGHT
166                app["conf_alpha"]=1.0
167
168               
169                app["expanding"]=False
170                app["restoring"]=False
171
172                return app
173               
174        #def parse_file
175
176       
177#class AppParser
178
179
180class ZeroCenter:
181       
182        def __init__(self):
183               
184                self.client=xmlrpclib.ServerProxy("https://localhost:9779")
185                self.create_user_env()
186                self.categories_parser=CategoriesParser()
187                self.app_parser=AppParser()
188                self.configured_apps=[]
189                self.get_states()
190               
191                self.mprocess=multiprocessing.Process()
192                self.commands=["set-configured","set-non-configured","set-failed","set-custom-text","add-zero-center-notification","remove-zero-center-notification","help","add-pulsating-color","remove-pulsating-color","non-animated","animated"]
193                self.drawing_mode=True
194                self.msg_text=""
195                self.msg_x=0
196                self.scrolling=False
197               
198                try:
199                        self.msg_text=self.client.get_zc_messages("","ZCenterVariables",self.lang)
200                        if self.msg_text=="":
201                                txt=self.client.lliurex_version("","LliurexVersion")
202                                if type(txt)==type([]):
203                                        self.msg_text=str(txt[1])
204                                else:
205                                        f=open("/etc/lsb-release")
206                                        lines=f.readlines()
207                                        f.close()
208                                        for line in lines:
209                                                if "DISTRIB_DESCRIPTION" in line:
210                                                        self.msg_text=line.split("=")[1]
211                        #Load slave_blacklist
212                        self.blacklist=self.client.get_variable("","VariablesManager","SLAVE_BLACKLIST")
213
214                except:
215                        self.msg_text=""
216               
217                #self.msg_text="hi, i'm a long enough text so that it won't show in just one line. I wonder how many lines I can get inside the box. In my restless dreams I see that town, Silent Hill. I don't know what to type, but I have to keep typing"
218                #57
219               
220        #def init
221
222       
223        def get_states(self):
224               
225                try:
226                        var=self.client.get_all_states("","ZCenterVariables")
227                except:
228                        local_path="/var/lib/n4d/variables-dir/ZEROCENTER"
229                        if os.path.exists(local_path):
230                                f=open(local_path)
231                                var=json.load(f)["ZEROCENTER"]["value"]
232                                f.close()
233                        else:
234                                var={}
235                               
236                try:
237                        for cat in self.app_parser.apps:
238                       
239                                for app in self.app_parser.apps[cat]:
240                                        app["configured"]=0
241                                       
242                                        if app["ID"] in var:
243                                                for key in ["state","pulsating","time","custom_text"]:
244                                                        if key in var[app["ID"]]:
245                                                                app[key]=var[app["ID"]][key]
246               
247                                                       
248                                        if "state" in app:
249                                                app["configured"]=app["state"]
250                               
251                                        if app["configured"]==1:
252                                                self.configured_apps.append(app["ID"])
253                               
254                               
255                except Exception as e:
256                        print e
257                        pass
258                       
259        #def get_states
260
261       
262        def get_translation(self,text):
263               
264                for category in self.categories_parser.categories:
265                       
266                        if text.lower()==category["name"].lower():
267                                for lang in self.language:
268                                        try:
269                                                return category["name["+lang+"]"]
270                                        except Exception as e:
271                                                pass
272                                return category["name"]
273               
274                return text
275               
276        #def get_translation
277
278       
279        def get_name(self,app):
280               
281                for lang in self.language:
282                        try:
283                                return app["Name["+lang+"]"]
284                        except:
285                                pass
286                               
287                return app["Name"]
288               
289        #def get_name
290
291       
292        def get_comment(self,app):
293               
294                for lang in self.language:
295                        try:
296                                return app["Comment["+lang+"]"]
297                        except:
298                                pass
299                               
300                return app["Comment"]
301               
302        #def get_name
303
304       
305        def create_user_env(self):
306               
307                try:
308                        self.lang=os.environ["LANGUAGE"].replace(".UTF-8","").split(":")[0]
309                        self.language=os.environ["LANGUAGE"].replace(".UTF-8","").split(":")
310                        if "es_ES" in self.language and "es" not in self.language:
311                                self.language.insert(self.language.index("es_ES")+1,"es")
312                        self.lang=self.lang.split("_")[0]
313                       
314                        if "ca_ES@valencia" in self.language:
315                                self.language.insert(self.language.index("ca_ES@valencia"),"qcv")
316                except:
317                        try:
318                                self.lang=os.environ["LANG"].replace(".UTF-8","")
319                                self.language=[]
320                                self.language.append(self.lang)
321                                self.lang=self.lang.split("_")[0]
322                               
323                        except:
324                                self.lang="en"
325
326                       
327                groups={}
328               
329                for item in grp.getgrall():
330                        if len(item.gr_mem)>0:
331                                if item.gr_name not in groups:
332                                        groups[item.gr_name]=item.gr_mem
333                                else:
334                                        groups[item.gr_name]=list(groups[item.gr_name]+item.gr_mem)
335                       
336               
337                self.user_groups=[]
338                try:
339                        for item in groups:
340                                if os.environ["USER"] in groups[item]:
341                                        self.user_groups.append(item)
342                                       
343                        self.user_groups.append("*")
344                except:
345                        pass
346               
347        #def create_user_area
348
349       
350        def start_gui(self):
351               
352               
353                self.icon_theme=Gtk.IconTheme()
354                self.icon_theme.set_custom_theme("lliurex-neu")
355               
356                builder=Gtk.Builder()
357                if os.path.exists("/srv/svn/pandora/zero-center2/install-files/usr/share/zero-center/rsrc/zero-center.glade"):
358                        builder.add_from_file("/srv/svn/pandora/zero-center2/install-files/usr/share/zero-center/rsrc/zero-center.glade")
359                else:
360                        builder.add_from_file("/usr/share/zero-center/rsrc/zero-center.glade")
361                self.window=builder.get_object("window1")
362                self.window.connect("delete_event",self.close_window)
363                self.window.set_name("BLACK")
364                self.buttons_vbox=builder.get_object("buttons_vbox")
365                self.content_hbox=builder.get_object("main_box")
366                self.content_hbox.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0.2,0.2,0.2,1))
367                self.window_box=builder.get_object("window_box")
368                self.viewport=builder.get_object("viewport1")
369                self.viewport.set_name("ORANGE")
370                self.category_combobox=builder.get_object("category_combobox")
371                self.msg_label=builder.get_object("llx_label")
372                self.msg_label.connect("draw",self.drawing_label_event)
373                self.msg_label.set_tooltip_text(self.msg_text)
374               
375                self.hidden_button=builder.get_object("button1")
376                self.hidden_button.grab_focus()
377               
378                self.search_entry=builder.get_object("entry")
379                self.search_entry.connect("changed",self.entry_changed)
380               
381                self.progress_bar=builder.get_object("progressbar")
382                self.progress_label=builder.get_object("progress_label")
383                self.progress_label.set_name("WHITE")
384               
385                self.add_categories_to_window("All")
386                self.set_css_info()
387               
388                self.window.connect("key-press-event",self.on_key_press_event)
389               
390                self.window.show()
391                GObject.threads_init()
392                Gtk.main()
393               
394        #def start_gui
395       
396       
397        def on_key_press_event(self,window,event):
398               
399                ctrl=(event.state | Gdk.ModifierType.CONTROL_MASK)
400                if ctrl and event.keyval == Gdk.KEY_f:
401                        self.search_entry.grab_focus()
402               
403        #def on_key_press_event
404       
405       
406        def entry_changed(self,widget):
407                self.add_categories_to_window("",False)
408       
409        def scroll_me(self,img):
410               
411                if self.msg_x > (self.scroll_width)*-1:
412                        self.msg_x-=1
413                else:
414                        self.msg_x=401
415                img.queue_draw()
416                return self.scrolling
417               
418        #def scroll_me
419
420
421        def set_msg_label_text(self,txt):
422       
423                self.msg_text=txt
424                self.msg_label.queue_draw()
425               
426        #def set_msg_label_text()
427
428       
429        def drawing_label_event(self,widget,ctx):
430               
431                lg1 = cairo.LinearGradient(0.0,18.0, 400.0, 18.0)
432                lg1.add_color_stop_rgba(0, 0.38, 0.38, 0.38, 1)
433                lg1.add_color_stop_rgba(0.1, 0.2, 0.2, 0.2, 1)
434                lg1.add_color_stop_rgba(0.9, 0.2, 0.2, 0.2, 1)
435                lg1.add_color_stop_rgba(1, 0.38, 0.38, 0.38, 1)
436                ctx.rectangle(0, 0, 400, 18)
437                ctx.set_source(lg1)
438                ctx.fill()
439
440                tmp_text=self.msg_text
441
442                if len(tmp_text)>66:
443                        if self.drawing_mode:
444                                if not self.scrolling:
445                                        self.scrolling=True
446                                        self.msg_x=200
447                                        GLib.timeout_add(12,self.scroll_me,widget)
448                        else:
449                                tmp_text=tmp_text[:63]
450                                tmp_text="      " + tmp_text+u" …"
451                else:
452                        self.scrolling=False
453                        spaces=90-len(tmp_text)
454                        space="".join([" "]*(spaces/2))
455                        tmp_text=space+tmp_text+space
456                       
457               
458               
459                tmp_text=tmp_text.replace("[","<b>[")
460                tmp_text=tmp_text.replace("]","] </b>")
461               
462                x=self.msg_x
463                pctx = PangoCairo.create_layout(ctx)
464                desc = Pango.font_description_from_string ("Ubuntu 9")
465                pctx.set_font_description(desc)
466                ctx.set_source_rgb(0.9,0.9,0.9)
467                pctx.set_markup(tmp_text)
468                self.scroll_width=pctx.get_pixel_size()[0]
469                ctx.move_to(x,0)
470                PangoCairo.show_layout(ctx, pctx)
471               
472        #def set_msg_label
473       
474       
475        def set_css_info(self):
476               
477                css = """
478               
479               
480
481
482                /*@define-color arc-blue #3a87e2;*/
483                @define-color arc-blue #0062f5;
484                @define-color arc-blue-light #4accf5;
485                @define-color arc-black #2d323d;
486                @define-color arc-red #000000;
487                @define-color arc-blue-hover #629de2;
488                @define-color arc-blue-active #3aa3e2;
489                @define-color default-grey #666666;
490
491
492               
493                #BLACK {
494                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#1a1a1a),  to (#616161));
495                       
496                }
497
498                #ORANGE {
499                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#575757),  to (#373737));
500                       
501                }
502               
503                #BLACKEXPANDER {
504                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#1a1a1a),  to (#1a1a1a));
505                        color: white;
506                        box-shadow: 50px 50px;
507                       
508                }
509               
510                #WHITE {
511                        color: white;
512                        text-shadow: 0px 1px black;
513                }               
514               
515                #WHITE-15 {
516                        color: white;
517                        font-size: 15px;
518                        text-shadow: 1px 2px black;
519                }
520
521               
522                #BLACKBUTTON{
523                        background-image: -gtk-gradient (linear,        left top, left bottom, from (#2a2a2a),  to (#616161));
524                        color: #e0e0e0;
525                        border-color: #000;
526                        border-style: none;
527                        border-radius: 10px;
528                       
529                }
530               
531               
532               
533                #APPBUTTON{
534
535                        padding: 0px 0px;
536                        border:none;
537                        background-image: none;
538                        box-shadow: none;
539                        background-color: transparent;
540                        box-shadow: 0px 2px 5px rgba(0,0,0,0.8);
541
542                }
543
544                #APPBUTTON:hover{
545
546                       
547                        border-width: 0;
548                        border-radius: 0px;
549                        border-color: transparent;
550                        border: none;   
551                        box-shadow: 0px 1px 8px rgba(0,0,0,1);
552                }
553               
554                GtkSeparator {
555                        color: rgba(255,255,255,0.8);
556                }
557               
558
559                .entry
560                {
561                        color: rgba(255,255,255,0.8);
562                        border: none;
563                        /*border-radius: 5px;*/
564                        background-color: @arc-blue;
565                        border-bottom: 1px solid #888888;
566                        padding: 4px;
567                        background: #2d2d2d;
568                       
569                        /*border-bottom: 2px solid transparent;*/
570       
571                }
572               
573                .entry:selected
574                {
575                        color: white;
576                        background: @arc-blue;
577
578                }
579               
580                .entry:focus
581                {
582                        color: rgba(255,255,255,0.8);
583                        border-bottom: 1px solid rgba(255,255,255,1);
584                        /*border-bottom: 2px solid rgba(0,0,0,0);*/
585                        /*background-color: transparent;*/
586               
587       
588                }
589
590               
591                """
592               
593                self.style_provider=Gtk.CssProvider()
594                self.style_provider.load_from_data(css)
595               
596                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
597               
598        #def set_css_info       
599       
600       
601        def get_banner_image(self,app):
602
603                package_rsrc_path=BANNER_PATH
604                img_path=package_rsrc_path+"package.png"
605               
606                for item in os.listdir(package_rsrc_path):
607                        f,ext=item.split(".")
608                        if app["Icon"] == f:
609                                img_path=package_rsrc_path+item
610               
611               
612                img=cairo.ImageSurface.create_from_png(img_path)
613                ctx=cairo.Context(img)
614
615                if not self.check_app_dependences(app):
616                        ctx.set_source_rgba(0.5,0.5,0.5,0.7)
617                        ctx.rectangle(0,0,235,110)
618                        ctx.fill()
619               
620
621                ctx.set_source_rgba(0,0,0,0.8)
622                ctx.rectangle(0,90,235,110)
623                ctx.fill()
624
625
626                show_status=True
627                if "Depends" in app:
628
629                        if not self.check_app_dependences(app):
630                               
631                                lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
632                                lg1.add_color_stop_rgba(0, 0.7, 0, 0, 1)
633                                lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
634                                ctx.rectangle(0, 0, 200, 20)
635                                ctx.set_source(lg1)
636                                ctx.fill()
637                                                                                       
638                                ctx.select_font_face("Ubuntu")
639                                ctx.set_font_size(15)
640                                ctx.move_to(5,15)
641                                ctx.set_source_rgba(1,1,1,app["conf_alpha"])
642                                                                                       
643                                ctx.show_text(_("Unmet dependences"))
644                                ctx.stroke()
645                               
646                                show_status=False
647
648
649                if "Service" in app and show_status:
650
651                        if app["Service"].lower()=="true":
652
653                                if app["configured"]==1:
654
655                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
656                                                               
657                                        lg1.add_color_stop_rgba(0, 0, 0.2, 0, 1)
658                                        lg1.add_color_stop_rgba(1, 0, 1, 0, 0)
659                                        ctx.rectangle(0, 0, 200, 20)
660                                        ctx.set_source(lg1)
661                                        ctx.fill()
662                                                       
663                                        ctx.select_font_face("Ubuntu")
664                                        ctx.set_font_size(15)
665                                        ctx.move_to(5,15)
666                                        ctx.set_source_rgb(1,1,1)
667                                                       
668                                        ctx.show_text(_("Configured"))
669                                        ctx.stroke()
670
671
672                                elif app["configured"]==0:
673
674                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
675                                                               
676                                        lg1.add_color_stop_rgba(0, 0.7, 0, 0, 1)
677                                        lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
678                                        ctx.rectangle(0, 0, 200, 20)
679                                        ctx.set_source(lg1)
680                                        ctx.fill()
681                                                       
682                                        ctx.select_font_face("Ubuntu")
683                                        ctx.set_font_size(15)
684                                        ctx.move_to(5,15)
685                                        ctx.set_source_rgb(1,1,1)
686                                                       
687                                        ctx.show_text(_("Not configured"))
688                                        ctx.stroke()
689                                       
690                                else:
691                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
692                                        lg1.add_color_stop_rgba(0, 1, 0, 0, 1)
693                                        lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
694                                        ctx.rectangle(0, 0, 200, 20)
695                                        ctx.set_source(lg1)
696                                        ctx.fill()
697                                                               
698                                        ctx.select_font_face("Ubuntu")
699                                        ctx.set_font_size(15)
700                                        ctx.move_to(5,15)
701                                        ctx.set_source_rgba(1,1,1,app["conf_alpha"])
702                                                               
703                                        ctx.show_text(_("Failed"))
704                                        ctx.stroke()
705
706                ctx.select_font_face("Ubuntu")
707                ctx.set_font_size(15)
708                ctx.move_to(5,105)
709                ctx.set_source_rgb(1,1,1)
710                txt=""
711                fix=True
712               
713                text=self.get_name(app)
714               
715               
716                for char in range(30):
717                        try:
718                                txt+=text[char]
719                        except:
720                                fix=False
721                                break
722                                                       
723                if fix:
724                        txt+="…"
725               
726                ctx.show_text(txt)
727                ctx.stroke()
728
729                #img.write_to_png(self.user_rsrc_path+item)
730                image=Gtk.Image()
731                #image.set_from_file(self.user_rsrc_path+item)
732                image.set_from_pixbuf(Gdk.pixbuf_get_from_surface(img,0,0,235,110))
733                image.set_name("BIMAGE")
734                return image
735               
736        #def get_image
737
738       
739        def drawing_banner_event(self,widget,ctx,app):
740               
741                package_rsrc_path=BANNER_PATH
742                img_path=package_rsrc_path+"package.png"
743                for item in os.listdir(package_rsrc_path):
744                        f,ext=item.split(".")
745                        if app["Icon"] == f:
746                                img_path=package_rsrc_path+item
747               
748       
749                img=cairo.ImageSurface.create_from_png(img_path)
750                ctx.set_source_surface(img,0,0)
751               
752                if not self.check_app_dependences(app):
753                        ctx.paint_with_alpha(0.2)
754                        ctx.set_source_rgba(0.5,0.5,0.5,0.7)
755                        ctx.rectangle(0,0,235,110)
756                        ctx.fill()
757                else:
758                        ctx.paint()
759
760
761                if "pulsating" in app and app["pulsating"]:
762                       
763                        '''
764                        if app["pulsating"]:
765                                ctx.set_source_rgba(1,1,1,app["pulsating_alpha"])
766                                ctx.rectangle(0,0,235,110)
767                                ctx.fill()             
768                        '''
769                       
770                        app.setdefault("pulsating_alpha",0.0)
771       
772                        lg1 = cairo.LinearGradient(0.0,10.0, 235.0, 10.0)
773                        lg1.add_color_stop_rgba(0, 0, 0.0, 0.8, 0.7)
774                        lg1.add_color_stop_rgba(app["pulsating_alpha"], 0.1, 0.7, 0.9, 1)
775                        lg1.add_color_stop_rgba(1, 0, 0, 0.8, 0.5)
776                        ctx.rectangle(0,app["bar_height"],235,20)
777                        ctx.set_source(lg1)
778                        ctx.fill()
779                        ctx.set_source_rgba(0,0,0,0.8)
780                        ctx.rectangle(0,app["bar_height"]+20,235,110)
781                        ctx.fill()                     
782                       
783                else:
784                       
785                        ctx.set_source_rgba(0,0,0,0.7)
786                        ctx.rectangle(0,app["bar_height"],235,110)
787                        ctx.fill()
788               
789                show_status=True
790                if "Depends" in app:
791
792                        if not self.check_app_dependences(app):
793                               
794                                lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
795                                lg1.add_color_stop_rgba(0, 0.7, 0, 0, 1)
796                                lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
797                                ctx.rectangle(0, 0, 200, 20)
798                                ctx.set_source(lg1)
799                                ctx.fill()
800                                                                                       
801                                ctx.select_font_face("Ubuntu")
802                                ctx.set_font_size(15)
803                               
804                                ctx.move_to(6,16)
805                                ctx.set_source_rgba(0,0,0,app["conf_alpha"])
806                                ctx.show_text(_("Unmet dependences"))
807                                ctx.stroke()
808                               
809                               
810                                ctx.move_to(5,15)
811                                ctx.set_source_rgba(1,1,1,app["conf_alpha"])
812                                ctx.show_text(_("Unmet dependences"))
813                                ctx.stroke()
814                               
815                                show_status=False
816
817                if "Service" in app and show_status:
818                       
819                        if app["Service"].lower()=="true":
820
821                                if app["configured"]==1:
822
823                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
824                                        lg1.add_color_stop_rgba(0, 0, 0.2, 0, 1)
825                                        lg1.add_color_stop_rgba(1, 0, 1, 0, 0)
826                                        ctx.rectangle(0, 0, 200, 20)
827                                        ctx.set_source(lg1)
828                                        ctx.fill()
829                                                       
830                                        ctx.select_font_face("Ubuntu")
831                                        ctx.set_font_size(15)
832                                       
833                                        ctx.set_source_rgba(0,0,0,app["conf_alpha"])
834                                        ctx.move_to(6,16)               
835                                        ctx.show_text(_("Configured"))
836                                        ctx.stroke()
837                                       
838                                       
839                                        ctx.set_source_rgba(1,1,1,app["conf_alpha"])
840                                        ctx.move_to(5,15)               
841                                        ctx.show_text(_("Configured"))
842                                        ctx.stroke()
843                                                       
844                                elif app["configured"]==-1:
845
846                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
847                                        lg1.add_color_stop_rgba(0, 0.7, 0, 0, 1)
848                                        lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
849                                        ctx.rectangle(0, 0, 200, 20)
850                                        ctx.set_source(lg1)
851                                        ctx.fill()
852                                                       
853                                        ctx.select_font_face("Ubuntu")
854                                        ctx.set_font_size(15)
855                                       
856                                        ctx.set_source_rgba(0,0,0,app["conf_alpha"])
857                                        ctx.move_to(6,16)               
858                                        ctx.show_text(_("Failed"))
859                                        ctx.stroke()
860                                       
861                                       
862                                        ctx.move_to(5,15)
863                                        ctx.set_source_rgba(1,1,1,app["conf_alpha"])
864                                        ctx.show_text(_("Failed"))
865                                        ctx.stroke()
866                                       
867                                else:
868                                       
869                                        lg1 = cairo.LinearGradient(0.0,110.0, 200.0, 110.0)
870                                        lg1.add_color_stop_rgba(0, 0.8, 0, 0, 1)
871                                        lg1.add_color_stop_rgba(1, 1, 0.2, 0.2, 0)
872                                        ctx.rectangle(0, 0, 200, 20)
873                                        ctx.set_source(lg1)
874                                        ctx.fill()
875
876                                        ctx.select_font_face("Ubuntu")
877                                        ctx.set_font_size(15)
878                                       
879                                        ctx.set_source_rgba(0,0,0,app["conf_alpha"])
880                                        ctx.move_to(6,16)               
881                                        ctx.show_text(_("Not configured"))
882                                        ctx.stroke()                                   
883                                       
884                                        ctx.move_to(5,15)
885                                        ctx.set_source_rgba(1,1,1,app["conf_alpha"])
886                                        ctx.show_text(_("Not configured"))
887                                        ctx.stroke()                                   
888
889
890                txt=""
891                fix=True
892                for char in range(30):
893                        try:
894                                txt+=self.get_name(app)[char]
895                        except:
896                                fix=False
897                                break
898                                                       
899                if fix:
900                        txt+="…"
901
902
903                ctx.select_font_face("Ubuntu")
904                ctx.set_font_size(15)
905               
906                ctx.move_to(6,app["bar_height"]+16)
907                ctx.set_source_rgb(0,0,0)
908                ctx.show_text(txt)
909                ctx.stroke()           
910               
911                ctx.move_to(5,app["bar_height"]+15)
912                ctx.set_source_rgb(0.9,0.9,0.9)
913                ctx.show_text(txt)
914                ctx.stroke()           
915
916               
917               
918               
919                y=app["bar_height"]+30
920                pctx = PangoCairo.create_layout(ctx)
921                desc = Pango.font_description_from_string ("Ubuntu 8")
922                pctx.set_font_description(desc)
923                pctx.set_alignment(Pango.Alignment.LEFT)
924                pctx.set_justify(True)
925                pctx.set_width(225000)
926                pctx.set_height(10)
927                ctx.set_source_rgb(1,1,0.8)
928                pctx.set_text(self.get_comment(app),-1)
929               
930
931                ctx.move_to(6,y)
932                PangoCairo.show_layout (ctx, pctx)
933               
934                if "custom_text" in app:
935                       
936                        ctx.set_source_rgb(0.5,0.5,1)
937                        pctx.set_text(app["custom_text"],-1)
938                        ctx.move_to(6,y+60)
939                        PangoCairo.show_layout (ctx, pctx)
940                       
941               
942        #def drawing_event
943       
944
945        def mouse_over(self,widget,event,app,img):
946               
947                if not app["expanding"]:
948                        app["restoring"]=False
949                        app["expanding"]=True
950                        GLib.timeout_add(10,self.expand_black_area,app,img)
951               
952        #def mouse_over
953
954       
955        def mouse_left(self,widget,event,app,img):
956               
957                if not app["restoring"]:
958                        app["expanding"]=False
959                        app["restoring"]=True
960                        GLib.timeout_add(10,self.restore_black_area,app,img)
961               
962        #def mouse_left
963
964       
965        def expand_black_area(self,app,img):
966               
967                while app["bar_height"]>0 and app["expanding"]:
968                        app["bar_height"]-=2
969                        if app["conf_alpha"]>0.0:
970                                app["conf_alpha"]-=0.025
971                        img.queue_draw()
972                        return True
973                       
974                if not app["expanding"]:
975                        return False
976                       
977                app["expanding"]=False
978                app["conf_alpha"]=0.0
979                img.queue_draw()
980                return False
981               
982        #def expand_black_area
983       
984       
985        def restore_black_area(self,app,img):
986               
987                while app["bar_height"]<BAR_HEIGHT and app["restoring"]:
988                        app["bar_height"]+=2
989                        if app["conf_alpha"]<1.0:
990                                app["conf_alpha"]+=0.025
991                        img.queue_draw()
992                        return True
993                       
994                if not app["restoring"]:
995                        return False
996                       
997                app["restoring"]=False
998                app["conf_alpha"]=1.0
999                img.queue_draw()
1000                return False
1001               
1002        #def restore_black_area
1003       
1004       
1005        def check_app_groups(self,app,verbose=True):
1006               
1007                if verbose:
1008                        sys.stdout.write(" * Checking " + app["ID"] + " ... ")
1009                groups=[]
1010                if "Groups" not in app:
1011                        if verbose:
1012                                print("OK")
1013                        return True
1014               
1015                try:
1016                       
1017                        if os.environ["USER"]=="root":
1018                                if verbose:
1019                                        print("OK")
1020                                return True
1021                       
1022                        groups=app["Groups"].strip("\n").split(";")
1023                        for group in groups:
1024                                if group in self.user_groups:
1025                                        if verbose:
1026                                                print("OK")             
1027                                        return True
1028                       
1029                except Exception as e:
1030                        print e
1031                        pass
1032                       
1033                if verbose:
1034                        print "NOT ALLOWED"
1035                        print "\t[!] App groups: ",sorted(groups)
1036                return False
1037               
1038        #def check_app_groups
1039
1040       
1041        def add_pulsating(self,app,image):
1042               
1043                GLib.timeout_add(70,self.pulsate_color,app,image)
1044               
1045        #def add_pulsating
1046
1047
1048        def pulsate_color(self,app,image):
1049               
1050                app["pulsating_alpha"]+=app["pulsating_increment"]
1051               
1052                if app["pulsating_alpha"] >= 1.0 :
1053                       
1054                        app["pulsating_increment"]=-0.02
1055                       
1056                if app["pulsating_alpha"] <= 0.0 :
1057                       
1058                        app["pulsating_increment"]=0.02
1059                       
1060                image.queue_draw()
1061                return app["pulsating"]
1062               
1063        #def pulsate_color
1064               
1065               
1066        def check_app_dependences(self,app):
1067               
1068                if "Depends" in app:
1069                        depends=app["Depends"].split(";")
1070                        for dep in depends:
1071                               
1072                                if dep not in self.configured_apps:
1073                                        return False
1074                               
1075                return True
1076               
1077        #def check_app_dependences
1078
1079       
1080        def add_categories_to_window(self,category,verbose=True):
1081               
1082                for child in self.content_hbox.get_children():
1083                        self.content_hbox.remove(child)
1084               
1085                for category in self.categories_parser.categories:
1086                       
1087                        icon=category["icon"]
1088                        category=category["name"].lower()
1089                       
1090                        once=True
1091                        hbox=Gtk.FlowBox()
1092                        hbox.set_margin_left(5)
1093                        hbox.set_margin_right(5)
1094                        hbox.set_homogeneous(True)
1095                        hbox.set_column_spacing(5)
1096                        hbox.set_row_spacing(10)
1097                        hbox.set_halign(Gtk.Align.FILL)
1098                        hbox.set_valign(Gtk.Align.START)
1099                        hbox.set_selection_mode(Gtk.SelectionMode.NONE)
1100                        count=0
1101                        if category in self.app_parser.apps:
1102                                for app in sorted(self.app_parser.apps[category]):
1103                                       
1104                                        if self.check_app_groups(app,verbose):
1105
1106                                                search_txt=self.search_entry.get_text().lower().strip()
1107
1108                                                if search_txt not in app["ID"] and search_txt not in self.get_translation(app["Category"]).lower() and search_txt not in self.get_name(app).lower() and len(search_txt)>2:
1109                                                        continue
1110                                                button=Gtk.Button()
1111                                                button.set_name("APPBUTTON")
1112                                                button.set_size_request(235,110)
1113                                                #button.set_margin_top(10)
1114                                                button.set_halign(Gtk.Align.FILL)
1115                                                button.set_valign(Gtk.Align.FILL)
1116                                               
1117                                               
1118                                                if not self.drawing_mode:
1119                                                        image=self.get_banner_image(app)
1120                                                else:
1121                                                        image=Gtk.DrawingArea()
1122                                                       
1123                                                        image.show()
1124                                                        image.connect("draw",self.drawing_banner_event,app)
1125                                                       
1126                                                        if "pulsating" in app:
1127                                                                if app["pulsating"]:
1128                                                                        app["pulsating_alpha"]=0.0
1129                                                                        app["pulsating_increment"]=0.02
1130                                                                        self.add_pulsating(app,image)
1131                                                       
1132                                                       
1133                                                        button.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK)
1134                                                        button.connect("motion-notify-event",self.mouse_over,app,image)
1135                                                        button.connect("leave_notify_event",self.mouse_left,app,image)
1136                                                       
1137                                                        #button.set_size_request(245,120)
1138                                               
1139                                                button.add(image)
1140                                                if "Name["+self.lang+"]" in app:
1141                                                        button.set_tooltip_text(app["Name["+self.lang+"]"])
1142                                                else:
1143                                                        button.set_tooltip_text(app["Name"])
1144                                                button.connect("clicked",self.app_clicked,app)
1145                                                app["gtk_button"]=button
1146                                               
1147                                                child=Gtk.FlowBoxChild()
1148                                                child.set_border_width(10)
1149                                                child.set_halign(Gtk.Align.START)
1150                                                #child.set_size_request(235,110)
1151                                               
1152                                                child.add(button)
1153                                               
1154                                                hbox.add(child)
1155                                                count+=1
1156                                               
1157                        if count!=0:
1158                                hbox.show_all()
1159                                if once:
1160                                        self.add_label(self.get_translation(category),icon)
1161                                        once=False
1162                                hbox.set_margin_left(20)
1163                                self.content_hbox.pack_start(hbox,True,True,5)
1164               
1165                if len(self.content_hbox.get_children()) > 0:
1166                        self.content_hbox.get_children()[-1].set_margin_bottom(10)
1167               
1168        #def add_categories_to_window
1169       
1170       
1171       
1172       
1173        def add_label(self,label_name,icon_name=None):
1174               
1175                if icon_name==None:
1176                        icon_name="system"
1177                       
1178                tmpbox=Gtk.HBox()
1179                img=Gtk.Image()
1180                img.set_from_icon_name(icon_name,Gtk.IconSize.MENU)
1181                label=Gtk.Label(label_name)
1182                label.set_name("WHITE-15")
1183                expander=Gtk.HSeparator()
1184                expander.set_margin_right(15)
1185                tmpbox.set_margin_left(10)
1186                tmpbox.set_margin_top(5)
1187                tmpbox.pack_start(img,False,False,0)
1188                tmpbox.pack_start(label,False,False,10)
1189                tmpbox.pack_start(expander,True,True,5)
1190                tmpbox.show_all()
1191                self.content_hbox.pack_start(tmpbox,False,False,5)             
1192               
1193        #def add_label
1194       
1195       
1196        def app_clicked(self,widget,app):
1197
1198                try:
1199                        if  self.client.get_variable("","VariablesManager","MASTER_SERVER_IP"):
1200                                if app["ID"] in self.blacklist:
1201                                        result = self.open_dialog("Warning",_("We are in a center model and therefore should install this service on the master \n server to be accessible from any computer in the center, whether to continue \n with the installation on this computer the service is only available on computers \n that are in the internal network of this server."),True)
1202                                        if result == Gtk.ResponseType.CANCEL:
1203                                                return -1
1204                except:
1205                        # n4d is not alive. Let's pass this for now
1206                        pass
1207
1208                if app["ID"] in self.configured_apps:
1209                        ret=self.open_dialog("Warning",_("<b>%s</b> is already configured. Do you want to execute it again?")%self.get_name(app),True)
1210                        if ret==Gtk.ResponseType.CANCEL:
1211                                return -1
1212               
1213                if self.check_app_dependences(app):
1214               
1215                        cmd=""
1216                               
1217                        if "Using" in app:
1218                                cmd+=app["Using"].strip(" ").strip("\n") +" "
1219                                       
1220                        cmd+=self.app_parser.ZMD_PATH + app["ScriptPath"]
1221                       
1222                        gt=False
1223                        if "Gnome-terminal" in app:
1224                                if app["Gnome-terminal"].lower()=="true":
1225                                        cmd='gnome-terminal --command="'+cmd+'"'
1226                                        gt=True
1227                                       
1228                        if not gt:
1229                                if "gnome-terminal" in app:
1230                                        if app["gnome-terminal"].lower()=="true":
1231                                                cmd='gnome-terminal --command="'+cmd+'"'
1232                               
1233                               
1234                       
1235                        blocked=False
1236                        print(' * Executing "' + cmd + '" ...')
1237                        if "Modal" in app:
1238                                if app["Modal"].lower()=="true" and not self.mprocess.is_alive():
1239                                        GLib.timeout_add(250,self.pulse_progress)
1240                                        self.progress_bar.show()
1241                                       
1242                                        try:
1243                                                txt="Executing %s"%app["Name["+self.lang+"]"]
1244                                        except:
1245                                                txt="Executing %s"%app["Name"]
1246                                        self.progress_label.set_text(txt)
1247                                        self.progress_label.set_max_width_chars(32)
1248                                        self.progress_label.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
1249                                        self.progress_label.show()
1250                                        self.mprocess_app_name=app["Name"]
1251                                        blocked=True
1252                                else:
1253                                        self.open_dialog("Warning","<b>%s</b> is being executed. Please wait until it finishes."%self.mprocess_app_name )
1254                                        return -1
1255               
1256                        self.execute(cmd,blocked,app,widget)
1257                       
1258                else:
1259                       
1260                        self.open_dialog("Warning","<b>%s</b> dependences have not been configured."%self.get_name(app) +"\n[ %s ]"%app["Depends"])
1261               
1262        #def app_clicked
1263       
1264       
1265        def check_output(self,process,app,button):
1266               
1267                if not process.is_alive():
1268                       
1269                        print "[ZeroCenter] %s has ended"%app["ID"]
1270                       
1271                        if "Service" in app:
1272                                if app["Service"].lower()=="true":
1273                                       
1274                                        try:
1275                                                self.get_states()
1276                       
1277                                                for cat in self.app_parser.apps:
1278                                                        for item in self.app_parser.apps[cat]:
1279                                                                item["gtk_button"].get_child().queue_draw()
1280                                               
1281                                                darea=button.get_child()
1282                                                darea.queue_draw()
1283                                               
1284                                        except Exception as e:
1285                                                pass
1286                                       
1287                return process.is_alive()
1288               
1289        #def check_output
1290       
1291       
1292        def pulse_progress(self):
1293               
1294                self.progress_bar.pulse()
1295                if not self.mprocess.is_alive():
1296                        self.progress_bar.hide()
1297                        self.progress_label.hide()
1298                return self.mprocess.is_alive()
1299
1300        #def pulse_progress
1301
1302       
1303        def execute(self,cmd,blocked=False,app=None,widget=None):
1304               
1305                if not blocked:
1306                        p=multiprocessing.Process(target=self._execute,args=(cmd,))
1307                        #p.daemon=True
1308                        GLib.timeout_add(1000,self.check_output,p,app,widget)
1309                        p.start()
1310                       
1311                if blocked:
1312                       
1313                        if not self.mprocess.is_alive():
1314                                self.mprocess=multiprocessing.Process(target=self._execute,args=(cmd,))
1315                                #self.mprocess.daemon=True
1316                                self.mprocess.start()
1317                                GLib.timeout_add(1000,self.check_output,self.mprocess,app,widget)
1318                        else:
1319                                self.open_dialog("Warning",_("<b>%s</b> is being executed. Please wait until it finishes.")%self.mprocess_app_name )
1320               
1321        #def execute
1322
1323
1324        def _execute(self,cmd):
1325               
1326               
1327                subprocess.call(cmd,shell=True,preexec_fn=lambda: signal.signal(signal.SIGPIPE,signal.SIG_DFL))
1328               
1329                #os.system(cmd)
1330               
1331        #def _execute
1332
1333       
1334        def close_window(self,widget,data):
1335               
1336                if self.mprocess.is_alive():
1337                        ret=self.open_dialog("Warning",_("<b>%s</b> is being executed. Are you sure you want to exit?")%self.mprocess_app_name ,True)
1338               
1339                        if ret==Gtk.ResponseType.CANCEL:
1340                                return -1
1341                               
1342                        self.mprocess.terminate()
1343                        self.mprocess=multiprocessing.Process()
1344               
1345                Gtk.main_quit()
1346                print("")
1347               
1348        #def close_window
1349
1350               
1351        def open_dialog(self,title,text,show_cancel=False):
1352
1353                label = Gtk.Label()
1354                label.set_markup(text)
1355                if show_cancel:
1356                        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))
1357                else:
1358                        dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT))
1359                hbox = Gtk.HBox()
1360                img=Gtk.Image.new_from_icon_name("emblem-important",Gtk.IconSize.DIALOG)
1361                hbox.pack_start(img,True,True,5)
1362                hbox.pack_start(label,True,True,10)
1363                hbox.show_all()
1364                dialog.vbox.pack_start(hbox,True,True,10)
1365                dialog.set_border_width(6)
1366                response = dialog.run()
1367                dialog.destroy()
1368                return response
1369               
1370        #def open_dialog
1371
1372       
1373        def get_state(self,app):
1374
1375                try:
1376                        configured=self.client.get_state("","ZCenterVariables",app["ID"])
1377                        return configured
1378                except:
1379                        return 0
1380               
1381        #def get_state
1382
1383       
1384        def set_configured(self,app,key):
1385               
1386                if app in self.app_parser.app_list:
1387                       
1388                        try:
1389                                self.client.set_configured(key,"ZCenterVariables",app)
1390                        except Exception as e:
1391                                print e
1392                               
1393                else:
1394                        print("[!] %s is not installed"%app)
1395               
1396                sys.exit(0)
1397                               
1398        #def set_configured
1399
1400       
1401        def set_non_configured(self,app,key):
1402               
1403                if app in self.app_parser.app_list:
1404                       
1405                        try:
1406                                self.client.set_non_configured(key,"ZCenterVariables",app)
1407                        except:
1408                                pass
1409                               
1410                else:
1411                        print("\t[!] %s is not installed"%app)
1412               
1413                sys.exit(0)
1414               
1415        #def set_non_configured
1416       
1417        def set_failed(self,app,key):
1418               
1419                if app in self.app_parser.app_list:
1420                       
1421                        try:
1422                                self.client.set_failed(key,"ZCenterVariables",app)
1423                        except:
1424                                pass
1425                               
1426                else:
1427                        print("\t[!] %s is not installed"%app)
1428               
1429                sys.exit(0)
1430               
1431        #def set_non_configured
1432
1433       
1434        def set_custom_text(self,app,text,key):
1435               
1436                if app in self.app_parser.app_list:
1437                       
1438                        try:
1439                                self.client.set_custom_text(key,"ZCenterVariables",app,text)
1440                        except:
1441                                pass
1442                               
1443                else:
1444                        print("\t[!] %s is not installed"%app)
1445               
1446                sys.exit(0)
1447               
1448        #def set_custom_text
1449
1450       
1451        def add_pulsating_color(self,key,app):
1452               
1453                try:
1454                        self.client.add_pulsating_color(key,"ZCenterVariables",app)
1455                except:
1456                        pass
1457                       
1458                sys.exit(0)
1459               
1460        #def add_pulsating_color
1461
1462       
1463        def remove_pulsating_color(self,key,app):
1464               
1465                try:
1466                        self.client.remove_pulsating_color(key,"ZCenterVariables",app)
1467                except:
1468                        pass
1469               
1470                sys.exit(0)
1471               
1472        #def add_pulsating_color
1473
1474       
1475        def add_zc_notification(self,key,app,text,text_es="",text_qcv=""):
1476               
1477                try:
1478                        self.client.set_zc_message(key,"ZCenterVariables",app,text,text_es,text_qcv)
1479                except Exception as e:
1480                        print e
1481                       
1482                sys.exit(0)
1483               
1484        #def add_zc_notification
1485
1486       
1487        def remove_zc_notification(self,key,app):
1488               
1489                try:
1490                        self.client.remove_zc_message(key,"ZCenterVariables",app)
1491                except Exception as e:
1492                        print e
1493                       
1494                sys.exit(0)
1495               
1496        #def remove_zc_notification
1497
1498
1499        def usage(self):
1500               
1501                print("USAGE:")
1502                print("\tzero-center [ OPTION [ APP ] ]")
1503                print("Options:")
1504                print("\tset-configured APP") 
1505                print("\tset-non-configured APP") 
1506                print("\tset-custom-text APP TEXT") 
1507                print("\tadd-zero-center-notification APP TEXT_EN [TEXT_ES TEXT_QCV]") 
1508                print("\tremove-zero-center-notification APP") 
1509                print("\tadd-pulsating-color APP") 
1510                print("\tremove-pulsating-color APP") 
1511                print("\tnon-animated")
1512                print("\tanimated")
1513                print("\thelp")
1514                print("")
1515                sys.exit(0)
1516               
1517        #def usage
1518       
1519
1520def check_root():
1521        try:
1522                f=open("/etc/n4d/key","r")
1523                key=f.readline().strip("\n")
1524                f.close()
1525                return key
1526        except:
1527                print("[!] You need root privileges to execute this option [!]")
1528                sys.exit(1)
1529
1530if __name__=="__main__":
1531       
1532
1533        zc=ZeroCenter()
1534        zc.drawing_mode=True
1535
1536        if len(sys.argv)>=2:
1537               
1538                if sys.argv[1] not in zc.commands:
1539                        zc.usage()
1540                        sys.exit(1)
1541                       
1542                if sys.argv[1] == "help":
1543                        zc.usage()
1544                       
1545                if sys.argv[1] == "set-configured":
1546                        key=check_root()
1547                        zc.set_configured(sys.argv[2],key)
1548                       
1549                if sys.argv[1] == "set-non-configured":
1550                        key=check_root()
1551                        zc.set_non_configured(sys.argv[2],key)
1552                       
1553                if sys.argv[1] == "set-failed":
1554                        key=check_root()
1555                        zc.set_failed(sys.argv[2],key)
1556                       
1557                if sys.argv[1] == "set-custom-text":
1558                        key=check_root()
1559                        zc.set_custom_text(sys.argv[2],sys.argv[3],key)
1560                       
1561                if sys.argv[1] == "add-zero-center-notification":
1562                        key=check_root()
1563                       
1564                        try:
1565                                app=sys.argv[2]
1566                        except:
1567                                zc.usage()
1568                        try:
1569                                text=sys.argv[3]
1570                        except:
1571                                zc.usage()
1572                        try:
1573                                text_es=sys.argv[4]
1574                        except Exception as e:
1575                                print e
1576                                text_es=""
1577                        try:
1578                                text_qcv=sys.argv[5]
1579                        except Exception as e:
1580                                print e
1581                                text_qcv=""
1582                       
1583                        zc.add_zc_notification(key,app,text,text_es,text_qcv)
1584                       
1585                if sys.argv[1] == "remove-zero-center-notification":
1586                       
1587                        key=check_root()
1588                       
1589                        try:
1590                                app=sys.argv[2]
1591                        except:
1592                                zc.usage()
1593                               
1594                        zc.remove_zc_notification(key,app)
1595                       
1596                if sys.argv[1] == "add-pulsating-color":
1597                        key=check_root()
1598                        try:
1599                                app=sys.argv[2]
1600                        except:
1601                                zc.usage()
1602                               
1603                        zc.add_pulsating_color(key,app)
1604                               
1605                if sys.argv[1] == "remove-pulsating-color":
1606                        key=check_root()
1607                       
1608                        try:
1609                                app=sys.argv[2]
1610                        except:
1611                                zc.usage()
1612                               
1613                        zc.remove_pulsating_color(key,app)
1614                       
1615
1616                if sys.argv[1]=="animated":
1617                        zc.drawing_mode=True
1618                       
1619                if sys.argv[1]=="non-animated":
1620                        zc.drawing_mode=False
1621               
1622       
1623       
1624        zc.start_gui()
1625
Note: See TracBrowser for help on using the repository browser.