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

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

WIP in gui. Add functions to manager GDrive profiles

  • Property svn:executable set to *
File size: 4.7 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.var=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):
82               
83                if os.path.exists(GDRIVE_CONFIG_DIR+profile):
84                        if self.check_config(profile):
85                                if profile in self.var:
86                                        mount_point=os.path.expanduser(self.var[profile]["mountpoint"])
87                                        print mount_point,type(mount_point)
88                                        #if type(mount_point)==type(u""):
89                                        if str(mount_point)!="":
90                                                self.dprint("Mounting '%s'..."%profile)
91                                                if not os.path.exists(mount_point):
92                                                        try:
93                                                                os.makedirs(mount_point)
94                                                        except:
95                                                                self.dprint("Unable to create '%s' mount destination"%mount_point)
96                                                                return False
97                                                               
98
99                                                if os.access(mount_point,os.W_OK):
100                                                        os.system(self.mount_cmd%(profile,mount_point))
101                                                        return True
102                                                else:
103                                                       
104                                                        self.dprint("'%s' mount destination is not owned by user"%mount_point)
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.var:
121                        self.dprint(profile)
122                        self.mount_drive(profile)
123               
124               
125        #def mount_drives
126
127        def dprint(self,msg):
128               
129                if DEBUG:
130                        print("[LGDM] %s"%msg)
131                       
132        #def dprint
133       
134       
135        def save_profiles(self,info):
136               
137                self.var=info
138               
139                f=open(self.config_file,"w")
140                data=unicode(json.dumps(info,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
141                f.write(data)
142                f.close()
143               
144        def create_profile(self,info,profile):
145
146                self.save_profiles(info)
147                profile=str(profile)
148
149                if not self.check_config(profile):
150                        os.system("google-drive-ocamlfuse -label %s"%profile)
151                        self.dprint("'%s' profile has been create"%profile)
152                        self.mount_drive(profile)
153
154                        # llx config file
155                        # clean cache google-drive-ocamlfuse -cc
156               
157               
158        #def save_profiles
159
160
161        def check_mountpoint_status(self,mountpoint):
162
163                mountpoint_size=""
164                mountpoint_used=""
165                mountpoint_available=""
166                mountpoint_per=""
167               
168                command='df -h | grep "google-ocamlfuse" | grep ' +str(mountpoint) 
169                p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE)
170                poutput,perror=p.communicate()
171
172                if len(poutput)>0:
173                        status=True
174                        mountpoint_size=poutput.split(" ")[4]
175                        mountpoint_used=poutput.split(" ")[8]
176                        mountpoint_available=poutput.split(" ")[11]
177                        mountpoint_per=poutput.split(" ")[14]
178
179                else:
180                        status=False
181
182                return {"status":status,"size":mountpoint_size,"used":mountpoint_used,"available":mountpoint_available,"Used%":mountpoint_per} 
183       
184
185
186        def delete_profile(self,info,profile):
187
188                profile=str(profile)
189                mountpoint=self.var[profile]["mountpoint"]
190
191
192                if os.path.exists(GDRIVE_CONFIG_DIR+profile):
193                       
194                        is_mountpoint_mounted=self.check_mountpoint_status(mountpoint)
195
196                        if is_mountpoint_mounted["status"]:
197                                cmd='fusermount -u '+str(mountpoint)
198                                os.command(cmd)
199                                self.dprint("'%s' mountpoint has been unmonted"%mounpoint)
200
201                        shutil.rmtree(os.path.join(GDRIVE_CONFIG_DIR+profile))
202                        self.dprint("'%s' profile has been delete"%profile)
203                        self.save_profiles(info)
204                        return True
205
206                else:
207                        self.save_profiles(var)
208                        self.dprint("'%s' GDrive profile path does not exist"%profile)
209                        return False
210
211        # delete_profile               
212
213if __name__=="__main__":
214
215        llxgd=LliurexGoogleDriveManager()
216        llxgd.mount_drives()
217       
218       
219       
220        #llxgd.save_profiles(llxgd.var)
221       
222
223
224
225
226
227
228
229
230
Note: See TracBrowser for help on using the repository browser.