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

Last change on this file since 7985 was 7985, checked in by mabarracus, 16 months ago

New desktop, plank, file plugins

File size: 5.7 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            # create element
76            entry=['[PlankDockItemPreferences]','Launcher=file://'+newitem]
77            entry=map(lambda x: x+'\n',entry)
78            with open(os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+basename_item+'.dockitem','w') as f:
79                f.writelines(entry)
80            return True,'Added {}'.format(item)
81
82        elif params['action']== 'add':
83            try:
84                where='applications'
85                #search into applications
86                file_name=self.search_item(where,params['option'])
87                if file_name == None or file_name == []:
88                    #if not found search into skel
89                    where='skel'
90                    file_name = self.search_item(where, params['option'])
91                    if not file_name:
92                        return True,'Not found '+params['option']
93
94                # check if already added
95                if self.search_item('plank',params['option']):
96                    return True,'Already added'
97
98                # create element
99                if where == 'applications':
100                    entry=['[PlankDockItemPreferences]','Launcher=file://'+file_name]
101                    entry=map(lambda x: x+'\n',entry)
102                else:
103                    with open(file_name,'r') as f:
104                        entry=f.readlines()
105                with open(os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+params['option']+'.dockitem','w') as f:
106                    f.writelines(entry)
107
108                return True,'Added {}'.format(file_name)
109            except Exception as e:
110                return True,'Not added, error is: {}'.format(str(e))
111        elif params['action'] == 'remove':
112            try:
113                if params['option'].lower() == 'all':
114                    filenames=self.search_item('plank','all')
115                    for x in filenames:
116                        os.remove(x)
117                    return True, "Removed {} elements".format(len(filenames))
118                else:
119                    file_name = self.search_item('plank',params['option'])
120                    if file_name == None:
121                        return False,'Not found '+os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+params['option']+'.dockitem'
122                    os.remove(file_name)
123
124                    return True,"Removed {}".format(file_name)
125            except Exception as e:
126                return False,str(e)
127        elif params['action'] == 'restore':
128            try:
129                i=0
130                for x in self.get_skel():
131                    i+=1
132                    destname=x.split('/')
133                    copyfile(x,os.path.expanduser('~')+'/.config/plank/dock1/launchers/'+destname[-1])
134                return True,'{} elements copied'.format(i)
135            except Exception as e:
136                return False,str(e)
137        elif params['action'] == 'reset':
138            try:
139                i=0
140                for x in self.get_locals():
141                    i+=1
142                    os.remove(x)
143                return True,'{} elements removed'.format(i)
144            except Exception as e:
145                return False,str(e)
146        else:
147            return False,'Invalid action'
Note: See TracBrowser for help on using the repository browser.