|
@@ -135,15 +135,14 @@ func (fs *GDriveFS) timedRefresh() {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-// Reload service files
|
|
|
|
|
|
+// Refresh service files
|
|
func (fs *GDriveFS) Refresh() {
|
|
func (fs *GDriveFS) Refresh() {
|
|
fs.nextRefresh = time.Now().Add(1 * time.Minute)
|
|
fs.nextRefresh = time.Now().Add(1 * time.Minute)
|
|
|
|
|
|
fileList := []*drive.File{}
|
|
fileList := []*drive.File{}
|
|
fileMap := map[string]*drive.File{} // Temporary map by google drive fileID
|
|
fileMap := map[string]*drive.File{} // Temporary map by google drive fileID
|
|
- //fileMap := map[string]*FileEntry{}
|
|
|
|
|
|
|
|
- gdFields := googleapi.Field("nextPageToken, files(id,name,size,mimeType,parents,createdTime,modifiedTime)")
|
|
|
|
|
|
+ gdFields := googleapi.Field("nextPageToken, files(id,name,size,quotaBytesUsed, mimeType,parents,createdTime,modifiedTime)")
|
|
log.Println("Loading file entries from gdrive")
|
|
log.Println("Loading file entries from gdrive")
|
|
r, err := fs.srv.Files.List().
|
|
r, err := fs.srv.Files.List().
|
|
OrderBy("createdTime").
|
|
OrderBy("createdTime").
|
|
@@ -301,6 +300,19 @@ func (fs *GDriveFS) ReadDir(ctx context.Context, op *fuseops.ReadDirOp) (err err
|
|
|
|
|
|
// SetInodeAttributes Not sure what attributes gdrive support we just leave this blank for now
|
|
// SetInodeAttributes Not sure what attributes gdrive support we just leave this blank for now
|
|
func (fs *GDriveFS) SetInodeAttributes(ctx context.Context, op *fuseops.SetInodeAttributesOp) (err error) {
|
|
func (fs *GDriveFS) SetInodeAttributes(ctx context.Context, op *fuseops.SetInodeAttributesOp) (err error) {
|
|
|
|
+
|
|
|
|
+ if op.Attributes.Size == 0 { // Request to truncate i supose?
|
|
|
|
+ f := fs.root.FindByInode(op.Inode, true)
|
|
|
|
+ err = fs.srv.Files.Delete(f.GFile.Id).Do() // XXX: Careful on this
|
|
|
|
+ createdFile, err := fs.srv.Files.Create(&drive.File{Name: f.GFile.Name}).Do()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return fuse.EINVAL
|
|
|
|
+ }
|
|
|
|
+ f.SetGFile(createdFile) // Set new file
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ // Hack to truncate file?
|
|
|
|
+
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
@@ -458,8 +470,7 @@ func (fs *GDriveFS) CreateFile(ctx context.Context, op *fuseops.CreateFileOp) (e
|
|
func (fs *GDriveFS) WriteFile(ctx context.Context, op *fuseops.WriteFileOp) (err error) {
|
|
func (fs *GDriveFS) WriteFile(ctx context.Context, op *fuseops.WriteFileOp) (err error) {
|
|
lf, ok := fs.fileHandles[op.Handle]
|
|
lf, ok := fs.fileHandles[op.Handle]
|
|
if !ok {
|
|
if !ok {
|
|
- err = fuse.EIO
|
|
|
|
- return
|
|
|
|
|
|
+ return fuse.EIO
|
|
}
|
|
}
|
|
|
|
|
|
localFile := lf.entry.Cache()
|
|
localFile := lf.entry.Cache()
|
|
@@ -477,16 +488,35 @@ func (fs *GDriveFS) WriteFile(ctx context.Context, op *fuseops.WriteFileOp) (err
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// FlushFile just returns no error, maybe upload should be handled here
|
|
|
|
+func (fs *GDriveFS) FlushFile(ctx context.Context, op *fuseops.FlushFileOp) (err error) {
|
|
|
|
+ lf, ok := fs.fileHandles[op.Handle]
|
|
|
|
+ if !ok {
|
|
|
|
+ return fuse.EIO
|
|
|
|
+ }
|
|
|
|
+ if lf.entry.tempFile == nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if lf.uploadOnDone { // or if content changed basically
|
|
|
|
+ err = lf.entry.Sync()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return fuse.EINVAL
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
// ReleaseFileHandle closes and deletes any temporary files, upload in case if changed locally
|
|
// ReleaseFileHandle closes and deletes any temporary files, upload in case if changed locally
|
|
func (fs *GDriveFS) ReleaseFileHandle(ctx context.Context, op *fuseops.ReleaseFileHandleOp) (err error) {
|
|
func (fs *GDriveFS) ReleaseFileHandle(ctx context.Context, op *fuseops.ReleaseFileHandleOp) (err error) {
|
|
lf := fs.fileHandles[op.Handle]
|
|
lf := fs.fileHandles[op.Handle]
|
|
|
|
|
|
- if lf.uploadOnDone {
|
|
|
|
|
|
+ /*if lf.uploadOnDone {
|
|
err = lf.entry.Sync()
|
|
err = lf.entry.Sync()
|
|
if err != nil {
|
|
if err != nil {
|
|
return fuse.EINVAL
|
|
return fuse.EINVAL
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
+ }*/
|
|
lf.entry.ClearCache()
|
|
lf.entry.ClearCache()
|
|
delete(fs.fileHandles, op.Handle)
|
|
delete(fs.fileHandles, op.Handle)
|
|
|
|
|
|
@@ -517,11 +547,6 @@ func (fs *GDriveFS) Unlink(ctx context.Context, op *fuseops.UnlinkOp) (err error
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
-// FlushFile just returns no error, maybe upload should be handled here
|
|
|
|
-func (fs *GDriveFS) FlushFile(ctx context.Context, op *fuseops.FlushFileOp) (err error) {
|
|
|
|
- return
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// MkDir creates a directory on a parent dir
|
|
// MkDir creates a directory on a parent dir
|
|
func (fs *GDriveFS) MkDir(ctx context.Context, op *fuseops.MkDirOp) (err error) {
|
|
func (fs *GDriveFS) MkDir(ctx context.Context, op *fuseops.MkDirOp) (err error) {
|
|
|
|
|