source: lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/LliurexGoogleDriveManager.py @ 3812

Last change on this file since 3812 was 3812, checked in by jrpelegrina, 3 years ago

WIP in gui. Improve create, edit, delete profiles functions

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1#!/usr/bin/env python
2import glob
3import ConfigParser
4import os
5import json
6import subprocess
7import shutil
8
9
10DEBUG=True
11GDRIVE_CONFIG_DIR=os.path.expanduser("~/.gdfuse/")
12
13class LliurexGoogleDriveManager:
14
15        def __init__(self):
16               
17                self.config_dir=os.path.expanduser("~/.config/lliurex-google-drive-profiles/")
18                self.config_file=self.config_dir+"config"
19               
20                self.mount_cmd="google-drive-ocamlfuse -label %s %s"
21               
22                self.read_conf()
23               
24
25        #def init
26
27        def create_conf(self):
28
29                self.dprint("Creating conf...")
30
31                if not os.path.exists(self.config_dir):
32                        os.makedirs(self.config_dir)
33
34                var={}
35                # var["default"]={}
36                # var["default"]["email"]=""
37                # var["default"]["mountpoint"]=""
38                # var["default"]["automount"]=""
39
40                f=open(self.config_file,"w")
41                data=unicode(json.dumps(var,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
42                f.write(data)
43                f.close()
44
45        #def create_conf
46       
47        def read_conf(self):
48               
49                if not os.path.exists(self.config_file):
50                        self.create_conf()
51                       
52                self.dprint("Reading conf...")
53                       
54                f=open(self.config_file)
55                self.profiles_config=json.load(f)
56                f.close()
57               
58        #def read_conf
59       
60        def check_config(self,profile):
61               
62                path=GDRIVE_CONFIG_DIR+profile+"/state"
63
64                if os.path.exists(path):
65                        f=open(path)
66                        line=f.readline()
67                        f.close()
68               
69                        if "1970-" in line:
70                                self.dprint("%s not configured"%profile)
71                                return False
72                       
73                        return True
74                else:
75                        self.dprint("%s not yet create"%profile)
76                        return False
77
78               
79        #def check_configuration
80       
81        def mount_drive(self,profile,mountpoint):
82               
83                if os.path.exists(GDRIVE_CONFIG_DIR+profile):
84                        if self.check_config(profile):
85                                #if profile in self.profiles_config:
86                                        #mount_point=os.path.expanduser(self.profiles_config[profile]["mountpoint"])
87                                        print mountpoint,type(mountpoint)
88                                        #if type(mount_point)==type(u""):
89                                        if str(mountpoint)!="":
90                                                self.dprint("Mounting '%s'..."%profile)
91                                                if not os.path.exists(mountpoint):
92                                                        try:
93                                                                os.makedirs(mountpoint)
94                                                        except:
95                                                                self.dprint("Unable to create '%s' mount destination"%mountpoint)
96                                                                return False
97                                                               
98
99                                                if os.access(mountpoint,os.W_OK):
100                                                        os.system(self.mount_cmd%(profile,mountpoint))
101                                                        return True
102                                                else:
103                                                       
104                                                        self.dprint("'%s' mount destination is not owned by user"%mountpoint)
105                                                       
106                                        else:
107                                                self.dprint("'%s' mountpoint not configured"%profile)
108                                #else:
109                                        #self.dprint("'%s' profile unknown"%profile)
110                else:
111                        self.dprint("'%s' GDrive profile path does not exist"%profile)
112                       
113                       
114                return False
115               
116        #def mount_drive
117       
118        def mount_drives(self):
119               
120                for profile in self.profiles_config:
121                        self.dprint(profile)
122                        automount=self.profiles_config[profile]["automount"]
123                       
124                        if automount:
125                                mountpoint=self.profiles_config[profile]["mountpoint"]
126                                self.mount_drive(profile,mountpoint)
127               
128               
129        #def mount_drives
130
131        def dprint(self,msg):
132               
133                if DEBUG:
134                        print("[LGDM] %s"%msg)
135                       
136        #def dprint
137       
138       
139        def save_profiles(self,info):
140               
141                self.profiles_config=info
142               
143                f=open(self.config_file,"w")
144                data=unicode(json.dumps(info,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
145                f.write(data)
146                f.close()
147
148
149        def check_mountpoint_status(self,mountpoint):
150
151                mountpoint_size=""
152                mountpoint_used=""
153                mountpoint_available=""
154                mountpoint_per=""
155               
156                command='df -h | grep "google-drive-ocamlfuse" | grep ' +str(mountpoint) 
157               
158                p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
159                poutput,perror=p.communicate()
160
161                if len(poutput)>0:
162                        status=True
163                        mountpoint_size=poutput.split(" ")[4]
164                        mountpoint_used=poutput.split(" ")[8]
165                        mountpoint_available=poutput.split(" ")[11]
166                        mountpoint_per=poutput.split(" ")[14]
167
168                else:
169                        status=False
170
171                return {"status":status,"size":mountpoint_size,"used":mountpoint_used,"available":mountpoint_available,"Used%":mountpoint_per}         
172               
173       
174        def create_profile(self,info,profile):
175
176                result=False
177
178                profile=str(profile)
179                mountpoint=info[profile]["mountpoint"]
180
181
182                if not self.check_config(profile):
183                        os.system("google-drive-ocamlfuse -label %s"%profile)
184                        self.dprint("'%s' profile has been create"%profile)
185                        result=self.mount_drive(profile,mountpoint)
186
187                if result:
188                        self.save_profiles(info)
189                else:
190                        shutil.rmtree(os.path.join(GDRIVE_CONFIG_DIR+profile))
191                        self.dprint("'%s' profile has been delete"%profile)
192                       
193                return result
194
195                        # llx config file
196                        # clean cache google-drive-ocamlfuse -cc
197               
198               
199        #def save_profiles
200
201
202        def delete_profile(self,info,profile):
203
204                result=True
205
206                profile=str(profile)
207                mountpoint=info[profile]["mountpoint"]
208
209
210                if os.path.exists(GDRIVE_CONFIG_DIR+profile):
211                       
212                        is_mountpoint_mounted=self.check_mountpoint_status(mountpoint)
213                       
214                        if is_mountpoint_mounted["status"]:
215                                cmd='fusermount -u ' + mountpoint
216                                os.system(cmd)
217                                self.dprint("'%s' mountpoint has been unmonted"%mountpoint)
218
219                        shutil.rmtree(os.path.join(GDRIVE_CONFIG_DIR+profile))
220                        self.dprint("'%s' profile has been delete"%profile)
221                       
222
223                else:
224                        self.save_profiles(info)
225                        self.dprint("'%s' GDrive profile path does not exist"%profile)
226                       
227                self.save_profiles(info)
228       
229        # delete_profile       
230
231       
232        def edit_profile(self,info,profile):
233
234                result=True
235                old_mountpoint=self.profiles_config[profile]["mountpoint"]
236                old_automount=self.profiles_config[profile]["automount"]
237                new_mountpoint=info[profile]["mountpoint"]
238                new_automount=info[profile]["automount"]
239
240
241                if old_mountpoint!=new_mountpoint:
242                        status=self.check_mountpoint_status(old_mountpoint)
243
244                        if status["status"]:
245                                cmd='fusermount -u ' + old_mountpoint
246                                os.system(cmd)
247                                self.dprint("'%s' mountpoint has been unmonted"%old_mountpoint) 
248                       
249                        result=self.mount_drive(profile,new_mountpoint)
250
251                if result:
252                        self.save_profiles(info)
253               
254                return result                           
255
256        def sync_profile(self,profile,mountpoint):
257
258                status=self.check_mountpoint_status(mountpoint)
259
260                if status["status"]:
261                        cmd='fusermount -u ' + mountpoint
262                       
263                        os.system(cmd)
264                       
265                        self.dprint("'%s' mountpoint has been unmonted"%mountpoint)     
266                        return False
267
268                else:
269                         return self.mount_drive(profile,mountpoint)
270
271if __name__=="__main__":
272
273        llxgd=LliurexGoogleDriveManager()
274        llxgd.mount_drives()
275       
276       
277       
278        #llxgd.save_profiles(llxgd.var)
279       
280
281
282
283
284
285
286
287
288
Note: See TracBrowser for help on using the repository browser.