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

Last change on this file since 8099 was 8099, checked in by mabarracus, 11 months ago

Added compatibility with old profiles

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