source: syncer/trunk/fuentes/syncer.install/usr/lib/syncer/plugins/plank.py @ 4039

Last change on this file since 4039 was 4039, checked in by mabarracus, 3 years ago

First release

File size: 4.8 KB
Line 
1from lib.SyncerTypes import *
2import glob
3import fnmatch
4import os
5import re
6from shutil import copyfile
7
8class handler_plank(IPlugin):
9
10    def init_plugin(self):
11        self.typeplug = 'plank'
12        self.params = ['action','option']
13
14    def search_item(self,location,name):
15        if location == 'applications':
16            loc='/usr/share/applications/'
17            ext='[.]desktop'
18            file_re = re.compile(name + ext + '$', re.IGNORECASE)
19        elif location == 'plank':
20            loc=os.path.expanduser('~')+'/.config/plank/dock1/launchers/'
21            ext='[.]dockitem'
22            if name == 'all':
23                reg='\S+' +ext + '$'
24                file_re = re.compile(reg, re.IGNORECASE)
25            else:
26                file_re = re.compile(name + ext + '$', re.IGNORECASE)
27        elif location == 'skel':
28            loc='/etc/skel/.config/plank/dock1/launchers/'
29            ext='[.]dockitem'
30            file_re = re.compile(name + ext + '$', re.IGNORECASE)
31        else:
32            return None
33
34        try:
35            filelist=[]
36            for root,dirnames,filenames in os.walk(loc):
37                for file in filenames:
38                    if file_re.match(file):
39                        if name != 'all':
40                            return os.path.join(root,file)
41                        else:
42                            filelist.append(os.path.join(root,file))
43            return filelist
44
45        except:
46            return None
47
48    def get_skel(self):
49        try:
50            file_names = [filename for filename in glob.iglob('/etc/skel/.config/plank/dock1/launchers/*.dockitem', recursive=True)]
51        except:
52            return None
53        return file_names
54    def get_locals(self):
55        try:
56            file_names = [filename for filename in glob.iglob(os.path.expanduser('~')+'/.config/plank/dock1/launchers/*.dockitem', recursive=True)]
57        except:
58            return None
59        return file_names
60
61    def process(self,*args,**kwargs):
62        params = kwargs['params']
63        if params['action']== 'add':
64            try:
65                where='applications'
66                #search into applications
67                file_name=self.search_item(where,params['option'])
68                if file_name == None or file_name == []:
69                    #if not found search into skel
70                    where='skel'
71                    file_name = self.search_item(where, params['option'])
72                    if file_name == None:
73                        return True,'Not found '+params['option']
74                # check if already added
75                if self.search_item('plank',params['option']):
76                    return True,'Already added'
77                # create element
78                if where == 'applications':
79                    entry=['[PlankDockItemPreferences]','Launcher=file://'+file_name]
80                    entry=map(lambda x: x+'\n',entry)
81                else:
82                    with open(file_name,'r') as f:
83                        entry=f.readlines()
84                with open(os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+params['option']+'.dockitem','w') as f:
85                    f.writelines(entry)
86                return True,'Added {}'.format(file_name)
87            except Exception as e:
88                return False,str(e)
89        elif params['action'] == 'remove':
90            try:
91                if params['option'].lower() == 'all':
92                    filenames=self.search_item('plank','all')
93                    for x in filenames:
94                        os.remove(x)
95                    return True, "Removed {} elements".format(len(filenames))
96                else:
97                    file_name = self.search_item('plank',params['option'])
98                    if file_name == None:
99                        return False,'Not found '+os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+params['option']+'.dockitem'
100                    os.remove(file_name)
101
102                    return True,"Removed {}".format(file_name)
103            except Exception as e:
104                return False,str(e)
105        elif params['action'] == 'restore':
106            try:
107                i=0
108                for x in self.get_skel():
109                    i+=1
110                    destname=x.split('/')
111                    copyfile(x,os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+destname[-1])
112                return True,'{} elements copied'.format(i)
113            except Exception as e:
114                return False,str(e)
115        elif params['action'] == 'reset':
116            try:
117                i=0
118                for x in self.get_locals():
119                    i+=1
120                    os.remove(x)
121                return True,'{} elements removed'.format(i)
122            except Exception as e:
123                return False,str(e)
124        else:
125            return False,'Invalid action'
Note: See TracBrowser for help on using the repository browser.