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  }