github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/backend/googlephotos/api/types.go (about) 1 package api 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 // ErrorDetails in the internals of the Error type 9 type ErrorDetails struct { 10 Code int `json:"code"` 11 Message string `json:"message"` 12 Status string `json:"status"` 13 } 14 15 // Error is returned on errors 16 type Error struct { 17 Details ErrorDetails `json:"error"` 18 } 19 20 // Error satisfies error interface 21 func (e *Error) Error() string { 22 return fmt.Sprintf("%s (%d %s)", e.Details.Message, e.Details.Code, e.Details.Status) 23 } 24 25 // Album of photos 26 type Album struct { 27 ID string `json:"id,omitempty"` 28 Title string `json:"title"` 29 ProductURL string `json:"productUrl,omitempty"` 30 MediaItemsCount string `json:"mediaItemsCount,omitempty"` 31 CoverPhotoBaseURL string `json:"coverPhotoBaseUrl,omitempty"` 32 CoverPhotoMediaItemID string `json:"coverPhotoMediaItemId,omitempty"` 33 IsWriteable bool `json:"isWriteable,omitempty"` 34 } 35 36 // ListAlbums is returned from albums.list and sharedAlbums.list 37 type ListAlbums struct { 38 Albums []Album `json:"albums"` 39 SharedAlbums []Album `json:"sharedAlbums"` 40 NextPageToken string `json:"nextPageToken"` 41 } 42 43 // CreateAlbum creates an Album 44 type CreateAlbum struct { 45 Album *Album `json:"album"` 46 } 47 48 // MediaItem is a photo or video 49 type MediaItem struct { 50 ID string `json:"id"` 51 ProductURL string `json:"productUrl"` 52 BaseURL string `json:"baseUrl"` 53 MimeType string `json:"mimeType"` 54 MediaMetadata struct { 55 CreationTime time.Time `json:"creationTime"` 56 Width string `json:"width"` 57 Height string `json:"height"` 58 Photo struct { 59 } `json:"photo"` 60 } `json:"mediaMetadata"` 61 Filename string `json:"filename"` 62 } 63 64 // MediaItems is returned from mediaitems.list, mediaitems.search 65 type MediaItems struct { 66 MediaItems []MediaItem `json:"mediaItems"` 67 NextPageToken string `json:"nextPageToken"` 68 } 69 70 //Content categories 71 // NONE Default content category. This category is ignored when any other category is used in the filter. 72 // LANDSCAPES Media items containing landscapes. 73 // RECEIPTS Media items containing receipts. 74 // CITYSCAPES Media items containing cityscapes. 75 // LANDMARKS Media items containing landmarks. 76 // SELFIES Media items that are selfies. 77 // PEOPLE Media items containing people. 78 // PETS Media items containing pets. 79 // WEDDINGS Media items from weddings. 80 // BIRTHDAYS Media items from birthdays. 81 // DOCUMENTS Media items containing documents. 82 // TRAVEL Media items taken during travel. 83 // ANIMALS Media items containing animals. 84 // FOOD Media items containing food. 85 // SPORT Media items from sporting events. 86 // NIGHT Media items taken at night. 87 // PERFORMANCES Media items from performances. 88 // WHITEBOARDS Media items containing whiteboards. 89 // SCREENSHOTS Media items that are screenshots. 90 // UTILITY Media items that are considered to be utility. These include, but aren't limited to documents, screenshots, whiteboards etc. 91 // ARTS Media items containing art. 92 // CRAFTS Media items containing crafts. 93 // FASHION Media items related to fashion. 94 // HOUSES Media items containing houses. 95 // GARDENS Media items containing gardens. 96 // FLOWERS Media items containing flowers. 97 // HOLIDAYS Media items taken of holidays. 98 99 // MediaTypes 100 // ALL_MEDIA Treated as if no filters are applied. All media types are included. 101 // VIDEO All media items that are considered videos. This also includes movies the user has created using the Google Photos app. 102 // PHOTO All media items that are considered photos. This includes .bmp, .gif, .ico, .jpg (and other spellings), .tiff, .webp and special photo types such as iOS live photos, Android motion photos, panoramas, photospheres. 103 104 // Features 105 // NONE Treated as if no filters are applied. All features are included. 106 // FAVORITES Media items that the user has marked as favorites in the Google Photos app. 107 108 // Date is used as part of SearchFilter 109 type Date struct { 110 Year int `json:"year,omitempty"` 111 Month int `json:"month,omitempty"` 112 Day int `json:"day,omitempty"` 113 } 114 115 // DateFilter is uses to add date ranges to media item queries 116 type DateFilter struct { 117 Dates []Date `json:"dates,omitempty"` 118 Ranges []struct { 119 StartDate Date `json:"startDate,omitempty"` 120 EndDate Date `json:"endDate,omitempty"` 121 } `json:"ranges,omitempty"` 122 } 123 124 // ContentFilter is uses to add content categories to media item queries 125 type ContentFilter struct { 126 IncludedContentCategories []string `json:"includedContentCategories,omitempty"` 127 ExcludedContentCategories []string `json:"excludedContentCategories,omitempty"` 128 } 129 130 // MediaTypeFilter is uses to add media types to media item queries 131 type MediaTypeFilter struct { 132 MediaTypes []string `json:"mediaTypes,omitempty"` 133 } 134 135 // FeatureFilter is uses to add features to media item queries 136 type FeatureFilter struct { 137 IncludedFeatures []string `json:"includedFeatures,omitempty"` 138 } 139 140 // Filters combines all the filter types for media item queries 141 type Filters struct { 142 DateFilter *DateFilter `json:"dateFilter,omitempty"` 143 ContentFilter *ContentFilter `json:"contentFilter,omitempty"` 144 MediaTypeFilter *MediaTypeFilter `json:"mediaTypeFilter,omitempty"` 145 FeatureFilter *FeatureFilter `json:"featureFilter,omitempty"` 146 IncludeArchivedMedia *bool `json:"includeArchivedMedia,omitempty"` 147 ExcludeNonAppCreatedData *bool `json:"excludeNonAppCreatedData,omitempty"` 148 } 149 150 // SearchFilter is uses with mediaItems.search 151 type SearchFilter struct { 152 AlbumID string `json:"albumId,omitempty"` 153 PageSize int `json:"pageSize"` 154 PageToken string `json:"pageToken,omitempty"` 155 Filters *Filters `json:"filters,omitempty"` 156 } 157 158 // SimpleMediaItem is part of NewMediaItem 159 type SimpleMediaItem struct { 160 UploadToken string `json:"uploadToken"` 161 } 162 163 // NewMediaItem is a single media item for upload 164 type NewMediaItem struct { 165 Description string `json:"description"` 166 SimpleMediaItem SimpleMediaItem `json:"simpleMediaItem"` 167 } 168 169 // BatchCreateRequest creates media items from upload tokens 170 type BatchCreateRequest struct { 171 AlbumID string `json:"albumId,omitempty"` 172 NewMediaItems []NewMediaItem `json:"newMediaItems"` 173 } 174 175 // BatchCreateResponse is returned from BatchCreateRequest 176 type BatchCreateResponse struct { 177 NewMediaItemResults []struct { 178 UploadToken string `json:"uploadToken"` 179 Status struct { 180 Message string `json:"message"` 181 Code int `json:"code"` 182 } `json:"status"` 183 MediaItem MediaItem `json:"mediaItem"` 184 } `json:"newMediaItemResults"` 185 } 186 187 // BatchRemoveItems is for removing items from an album 188 type BatchRemoveItems struct { 189 MediaItemIds []string `json:"mediaItemIds"` 190 }