Changeset 6429 for hwdetector


Ignore:
Timestamp:
Dec 5, 2017, 12:59:03 PM (22 months ago)
Author:
mabarracus
Message:

Added gui

Location:
hwdetector/trunk/fuentes
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • hwdetector/trunk/fuentes/debian/changelog

    r6420 r6429  
    11hwdetector (0.1.6) xenial; urgency=medium
     2
     3  * Added gui
     4
     5 -- M.Angel Juan <m.angel.juan@gmail.com>  Tue, 05 Dec 2017 12:58:12 +0100
     6
     7hwdetector (0.1.5.1) unreleased; urgency=medium
    28
    39  * Fix type checks with unicode vars
  • hwdetector/trunk/fuentes/hwdetector.install/hwdetector/modules/llxhelpers.py

    r6420 r6429  
    169169            id=info.pw_uid
    170170            gid=info.pw_gid
     171            os.setgid(gid)
    171172            os.setuid(id)
    172             os.setgid(gid)
    173173        except Exception as e:
    174174            return False
  • hwdetector/trunk/fuentes/valentin.install/usr/bin/valentin

    r6413 r6429  
    1212import base64
    1313from ruleset import ruleset
     14
     15try:
     16    import threading
     17    import gi
     18    gi.require_version('Gtk','3.0')
     19    from gi.repository import Gtk,GObject
     20    GObject.threads_init()
     21except Exception as e:
     22    log.error('Unable to import Gtk libraries')
     23
    1424
    1525def run_in_debug():
     
    169179
    170180
     181class Handler:
     182    def __init__(self,gui):
     183        self.gui = gui
     184
     185    def destroy(self,*args,**kwargs):
     186        log.debug('Exitting gui')
     187        sys.exit(0)
     188
     189    def key_clicked(self,tselection,tpath,tviewcolumn,*args,**kwargs):
     190        model,lpaths=tselection.get_selected_rows()
     191        id_selected=model[lpaths][0]
     192        if self.gui.coldict[id_selected]['child']:
     193            tview=tselection.get_tree_view()
     194            for sel in lpaths:
     195                if tview.row_expanded(sel):
     196                    tview.collapse_row(sel)
     197                else:
     198                    tview.expand_row(sel,False)
     199        else:
     200            self.gui.showText(id_selected)
     201
     202class Gui:
     203    def __init__(self,*args,**kwargs):
     204        self._load_glade(**kwargs)
     205        self.handler = Handler(self)
     206        pass
     207
     208    def _store_data(self,data,id=[0]):
     209        if not self.store:
     210            return None
     211        me=id[0]
     212        if isinstance(data,dict):
     213            for key in data.keys():
     214                if key.startswith('HELPER'):
     215                    continue
     216                id[0]+=1
     217                id_child=id[0]
     218                col=self.store.append(self.coldict[me]['col'],[id_child,key])
     219                self.coldict[me]['child'].append(id_child)
     220                self.coldict[id_child]={'parent':me,'col':col,'data':data[key],'me':id_child,'child':[]}
     221                self._store_data(data=data[key],id=id)
     222        elif isinstance(data,list):
     223            if len(data) > 1:
     224                if len(data)==2 and data[0] == '__gz__':
     225                    self.coldict[me]['data']=zlib.decompress(base64.b64decode(data[1]))
     226                    self._store_data(data=self.coldict[me]['data'],id=id)
     227                else:
     228                    for x in data:
     229                        id[0]+=1
     230                        id_child=id[0]
     231                        col=self.store.append(self.coldict[me]['col'],[id_child,'[{}]'.format(str(data.index(x))).encode('utf-8').decode('utf-8')])
     232                        self.coldict[me]['child'].append(id_child)
     233                        self.coldict[id_child]={'parent':me,'col':col,'data':x,'me':id_child,'child':[]}
     234                        self._store_data(data=x,id=id)
     235            elif len(data) == 1:
     236                self.coldict[me]['data']=data[0]
     237                self._store_data(data=data[0],id=id)
     238        elif isinstance(data,tuple):
     239            self._store_data(data=list(data),id=id)
     240            pass
     241        elif isinstance(data,str):
     242            try:
     243                data=data.encode('utf-8').decode('utf-8')
     244                self.coldict[me]['data']=data
     245            except:
     246                pass
     247        elif isinstance(data,unicode):
     248            try:
     249                data.decode('utf-8')
     250            except:
     251                data=data.encode('utf-8').decode('utf-8')
     252                self.coldict[me]['data']=data
     253        else:
     254            self._store_data(data=str(data).encode('utf-8').decode('utf-8'),id=id)
     255        return True
     256
     257    def showData(self,data,*args,**kwargs):
     258        self.buffer=Gtk.TextBuffer()
     259        self.textview=self.builder.get_object('textview1')
     260        self.store=self.builder.get_object('treestore1')
     261        self.storesort=self.builder.get_object('treemodelsort1')
     262        self.storesort.set_sort_column_id(1,Gtk.SortType.ASCENDING)
     263        self.coldict={0:{'parent':0,'col':None,'data':data,'me':0,'child':[]}}
     264        self._store_data(data=data)
     265        self._show_window()
     266
     267    def showText(self,id=0,*args,**kwargs):
     268        if id == 0 or not isinstance(id,int):
     269            self.buffer=''
     270        else:
     271            coldata=self.coldict[id]
     272            self.buffer.set_text(str(coldata['data']))
     273
     274        self.textview.set_buffer(self.buffer)
     275        return True
     276
     277    def _show_window(self,*args,**kwargs):
     278        if not (self.builder):
     279            return
     280        self.mainwindow=self.builder.get_object('mainwindow')
     281        self.builder.connect_signals(self.handler)
     282        self.mainwindow.show_all()
     283        pass
     284
     285
     286    def _load_glade(self,*args,**kwargs):
     287        log.debug('Loading glade file')
     288        self.gladefile=kwargs.get('gladefile',None)
     289        if self.gladefile and os.path.exists(self.gladefile):
     290            try:
     291                self.builder=Gtk.Builder()
     292                self.builder.add_from_file(self.gladefile)
     293            except Exception as e:
     294                log.error('Can\'t load gladefile')
     295                self.builder=None
     296
     297
     298        pass
    171299if __name__ == '__main__':
    172300    try:
     
    179307        parser.add_argument('-o','--to-stdout',action='store_const',help='Output results to stdout',const=True)
    180308        parser.add_argument('-w','--to-stdout-raw',action='store_const',help='Output results to stdout in json format',const=True)
     309        parser.add_argument('-g','--graphical-mode',action='store_const',help='Show results in graphical mode',const=True)
    181310
    182311        parser.add_argument('-a','--analyze-file',metavar='filename',nargs=1,help='Filename to analyze')
     
    239368                if args.to_stdout:
    240369                    pr=indent_var(var=capabilities)
    241                 else:
     370                elif args.to_stdout_raw:
    242371                    for x in (x for x in capabilities.keys() if x.lower().startswith('helper')):
    243372                        del capabilities[x]
     
    268397                sys.stdout.write(pr.encode('utf-8'))
    269398                sys.stderr.write('\n')
     399            elif args.graphical_mode:
     400                GObject.threads_init()
     401                gui = Gui(gladefile=os.getcwd()+'/../lib/valentin/varviewer.glade')
     402                # gui.showData({
     403                #     'keya':{
     404                #         'keyaa':'aa'
     405                #             },
     406                #     'keyb':'b',
     407                #     'keyc':'keyc',
     408                #     'keyd':{
     409                #         'keydd':{
     410                #             'keyddd':'ddd'
     411                #         }
     412                #     },
     413                # })
     414                gui.showData(capabilities)
     415                sys.exit(Gtk.main())
    270416
    271417            if args.suggest:
Note: See TracChangeset for help on using the changeset viewer.