source: lliurex-desktops-keeper/trunk/fuentes/install/usr/sbin/lliurex-desktops-db @ 2390

Last change on this file since 2390 was 2390, checked in by kbut, 3 years ago

new lliurex-desktops-keeper

  • Property svn:executable set to *
File size: 4.3 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import sys
5import os
6import re
7import threading
8import subprocess
9import shutil
10
11
12diversion_db="/var/lib/lliurex-desktops-keeper/lliurex-desktops.db"
13destination_path="/usr/share/applications/"
14db=[]
15
16
17#performs a full path search
18def lookup(path):
19        ret = -1
20
21        for c in db:
22                name,pvalue = c
23
24                if name==path:
25                        ret = pvalue
26
27        return int(ret)
28
29
30       
31#add command       
32def add(path,priority):     
33        must_save=False   
34       
35
36        initdb()
37
38       
39
40
41        for file in os.listdir(path):
42                match=re.match(".*\.desktop$",file)
43                if not match==None:
44       
45                        ret=lookup(path+os.sep+file)
46
47                        if ret==-1:
48                                #print "* Desktop not found in database, inserting: ",file
49                                must_save=True
50                                db.append((path+os.sep+file,priority))
51
52                                subprocess.call(["dpkg-divert","--package","lliurex-desktops-keepers","--rename","--quiet","--add","--divert", str(destination_path+file+".diverted"),str(destination_path+file)])
53                                shutil.copy(str(path+os.sep+file),str(destination_path+file))
54                        else:
55
56                                must_save=True
57                                db.append((path+os.sep+file,priority)) 
58
59                                if ret > priority:
60                                        #print "* Low priority, not diverted"
61                                        pass
62                               
63                                if ret < priority:
64                                        #print "* Inserting with a higher priority: ",file
65                                        subprocess.call(["dpkg-divert","--package","lliurex-desktops-keepers","--rename","--quiet","--add","--divert", str(destination_path+file+".diverted"),str(destination_path+file)])
66                                        shutil.copy(str(path+os.sep+file),str(destination_path+file))
67                                       
68                                if ret == priority:     
69                                        #simply update .desktop file
70                                        shutil.copy(str(path+os.sep+file),str(destination_path+file))
71                               
72
73                if must_save:
74                        #saving database
75                        dbfile=open(diversion_db,"w+")
76                        for c in db:
77                                dbfile.write(str(c[0]+":"+str(c[1])+"\n"))
78
79                        dbfile.close()
80
81        #print "* Terminating"       
82
83
84#performs a single name search
85def search(name):
86        max=-1
87        candidate=None
88       
89        for c in db:
90                pname,priority = c
91                match=re.match(".*\/"+name+"$",pname)
92                if not match==None:
93                        if priority>max:
94                                candidate = c
95                                max = priority
96                               
97        return candidate
98                       
99               
100#delete command
101def delete(path):
102        must_save = False
103        global db
104       
105        initdb()
106       
107       
108        for file in os.listdir(path):
109                                               
110                tmp=[]
111                for c in db:
112                        pname,priority = c
113                        if not pname==path+os.sep+file:
114                                tmp.append(c)
115               
116                db=tmp 
117                               
118                candidate = search(file)
119                if not candidate==None:
120                        cname,cpriority = candidate
121                        #print "* Copying :",cname
122                        shutil.copy(str(cname),str(destination_path+file))
123                       
124                else:
125                        if os.path.exists(destination_path+file):
126                                #print "* Removing :",destination_path+file
127                                os.remove(destination_path+file)
128                                #print "* Removing diversion"
129                                subprocess.call(["dpkg-divert","--package","lliurex-desktops-keepers","--rename","--quiet","--remove", str(destination_path+file)])
130                                # rm "destination_path $f"; dpkg-divert --package lliurex-desktops-keepers --rename --quiet --remove destination_path $f
131       
132
133       
134        #saving database
135        dbfile=open(diversion_db,"w+")
136        for c in db:
137                dbfile.write(str(c[0]+":"+str(c[1])+"\n"))
138        dbfile.close()
139
140
141#purge command
142def purge():
143        global db
144
145        initdb()
146
147        todel=[]
148
149        for c in db:
150                cname,cpriority = c
151                tmp = cname.split("/")
152                todel.append(tmp[len(tmp)-1])
153               
154
155        for file in todel:
156                if os.path.exists(destination_path+file+".diverted"):
157
158                        if os.path.exists(destination_path+file):
159                                #print "* Removing:",file
160                                os.remove(destination_path+file)
161                        #print "* Removing Diversion"
162                        subprocess.call(["dpkg-divert","--package","lliurex-desktops-keepers","--rename","--quiet","--remove",str(destination_path+file)])
163       
164        #print "* Removing db file"
165        os.remove(diversion_db)
166       
167
168       
169
170def initdb():
171        global db
172
173        #print "* Opening Database"
174        if not os.path.exists(diversion_db):
175                #print "* Database not found"
176                #exit(-1)
177                subprocess.call(["touch", str(diversion_db)])
178
179        dbfile=open(diversion_db,"r")
180        for line in dbfile:
181                tmp = line.split(":")
182                if(len(tmp)>1):
183                        db.append((tmp[0].strip(),int(tmp[1].strip())))
184
185        dbfile.close()
186
187
188           
189def main():
190
191        priority=25
192        path=""
193
194        if len(sys.argv)<2:
195                return
196               
197        if len(sys.argv)>3:
198                priority=int(sys.argv[3])
199               
200               
201       
202        order= sys.argv[1].upper()
203        if len(sys.argv)>2:
204                path = sys.argv[2].rstrip("/")
205
206        if order=="ADD":
207                add(path,priority)
208
209        if order=="DEL":
210                delete(path)
211               
212        if order=="PURGE":
213                purge() 
214                       
215       
216        exit(0)
217
218
219if __name__=="__main__":
220        main()
Note: See TracBrowser for help on using the repository browser.