From c3ab378ac5980886afc9a8da3f07d58109e4d5f4 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Wed, 9 Nov 2022 16:19:33 +0800 Subject: [PATCH] feat(google_drive): support shortcut (close #2268) --- drivers/google_drive/types.go | 25 ++++++++++++++++++------- drivers/google_drive/util.go | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/google_drive/types.go b/drivers/google_drive/types.go index b5830dfb..796c1321 100644 --- a/drivers/google_drive/types.go +++ b/drivers/google_drive/types.go @@ -5,6 +5,7 @@ import ( "time" "github.com/alist-org/alist/v3/internal/model" + log "github.com/sirupsen/logrus" ) type TokenError struct { @@ -18,17 +19,22 @@ type Files struct { } type File struct { - Id string `json:"id"` - Name string `json:"name"` - MimeType string `json:"mimeType"` - ModifiedTime time.Time `json:"modifiedTime"` - Size string `json:"size"` - ThumbnailLink string `json:"thumbnailLink"` + Id string `json:"id"` + Name string `json:"name"` + MimeType string `json:"mimeType"` + ModifiedTime time.Time `json:"modifiedTime"` + Size string `json:"size"` + ThumbnailLink string `json:"thumbnailLink"` + ShortcutDetails struct { + TargetId string `json:"targetId"` + TargetMimeType string `json:"targetMimeType"` + } `json:"shortcutDetails"` } func fileToObj(f File) *model.ObjThumb { + log.Debugf("google file: %+v", f) size, _ := strconv.ParseInt(f.Size, 10, 64) - return &model.ObjThumb{ + obj := &model.ObjThumb{ Object: model.Object{ ID: f.Id, Name: f.Name, @@ -38,6 +44,11 @@ func fileToObj(f File) *model.ObjThumb { }, Thumbnail: model.Thumbnail{}, } + if f.MimeType == "application/vnd.google-apps.shortcut" { + obj.ID = f.ShortcutDetails.TargetId + obj.IsFolder = f.ShortcutDetails.TargetMimeType == "application/vnd.google-apps.folder" + } + return obj } type Error struct { diff --git a/drivers/google_drive/util.go b/drivers/google_drive/util.go index 5eaca9e0..5a23d8ed 100644 --- a/drivers/google_drive/util.go +++ b/drivers/google_drive/util.go @@ -81,7 +81,7 @@ func (d *GoogleDrive) getFiles(id string) ([]File, error) { } query := map[string]string{ "orderBy": orderBy, - "fields": "files(id,name,mimeType,size,modifiedTime,thumbnailLink),nextPageToken", + "fields": "files(id,name,mimeType,size,modifiedTime,thumbnailLink,shortcutDetails),nextPageToken", "pageSize": "1000", "q": fmt.Sprintf("'%s' in parents and trashed = false", id), //"includeItemsFromAllDrives": "true",