193 lines · 5.4 KB · Go
RawDownload
// Package api has type definitions for pcloud//// Converted from the API docs with help from https://mholt.github.io/json-to-go/package api import (	"fmt"	"time") const (	// Sun, 16 Mar 2014 17:26:04 +0000	timeFormat = `"` + time.RFC1123Z + `"`) // Time represents represents date and time information for the// pcloud API, by using RFC1123Ztype Time time.Time // MarshalJSON turns a Time into JSON (in UTC)func (t *Time) MarshalJSON() (out []byte, err error) {	timeString := (*time.Time)(t).Format(timeFormat)	return []byte(timeString), nil} // UnmarshalJSON turns JSON into a Timefunc (t *Time) UnmarshalJSON(data []byte) error {	newT, err := time.Parse(timeFormat, string(data))	if err != nil {		return err	}	*t = Time(newT)	return nil} // Error is returned from pcloud when things go wrong//// If result is 0 then everything is OKtype Error struct {	Result      int    `json:"result"`	ErrorString string `json:"error"`} // Error returns a string for the error and satisfies the error interfacefunc (e *Error) Error() string {	return fmt.Sprintf("pcloud error: %s (%d)", e.ErrorString, e.Result)} // Update returns err directly if it was != nil, otherwise it returns// an Error or nil if no error was detectedfunc (e *Error) Update(err error) error {	if err != nil {		return err	}	if e.Result == 0 {		return nil	}	return e} // Check Error satisfies the error interfacevar _ error = (*Error)(nil) // Item describes a folder or a file as returned by Get Folder Items and otherstype Item struct {	Path           string `json:"path"`	Name           string `json:"name"`	Created        Time   `json:"created"`	IsMine         bool   `json:"ismine"`	Thumb          bool   `json:"thumb"`	Modified       Time   `json:"modified"`	Comments       int    `json:"comments"`	ID             string `json:"id"`	IsShared       bool   `json:"isshared"`	IsDeleted      bool   `json:"isdeleted"`	Icon           string `json:"icon"`	IsFolder       bool   `json:"isfolder"`	ParentFolderID int64  `json:"parentfolderid"`	FolderID       int64  `json:"folderid,omitempty"`	Height         int    `json:"height,omitempty"`	FileID         int64  `json:"fileid,omitempty"`	Width          int    `json:"width,omitempty"`	Hash           uint64 `json:"hash,omitempty"`	Category       int    `json:"category,omitempty"`	Size           int64  `json:"size,omitempty"`	ContentType    string `json:"contenttype,omitempty"`	Contents       []Item `json:"contents"`} // ModTime returns the modification time of the itemfunc (i *Item) ModTime() (t time.Time) {	t = time.Time(i.Modified)	if t.IsZero() {		t = time.Time(i.Created)	}	return t} // ItemResult is returned from the /listfolder, /createfolder, /deletefolder, /deletefile, etc. methodstype ItemResult struct {	Error	Metadata Item `json:"metadata"`} // Hashes contains the supported hashestype Hashes struct {	SHA1   string `json:"sha1"`	MD5    string `json:"md5"`	SHA256 string `json:"sha256"`} // UploadFileResponse is the response from /uploadfiletype UploadFileResponse struct {	Error	Items     []Item   `json:"metadata"`	Checksums []Hashes `json:"checksums"`	Fileids   []int64  `json:"fileids"`} // GetFileLinkResult is returned from /getfilelinktype GetFileLinkResult struct {	Error	Dwltag  string   `json:"dwltag"`	Hash    uint64   `json:"hash"`	Size    int64    `json:"size"`	Expires Time     `json:"expires"`	Path    string   `json:"path"`	Hosts   []string `json:"hosts"`} // IsValid returns whether the link is valid and has not expiredfunc (g *GetFileLinkResult) IsValid() bool {	if g == nil {		return false	}	if len(g.Hosts) == 0 {		return false	}	return time.Time(g.Expires).Sub(time.Now()) > 30*time.Second} // URL returns a URL from the Path and Hosts.  Check with IsValid// before calling.func (g *GetFileLinkResult) URL() string {	// FIXME rotate the hosts?	return "https://" + g.Hosts[0] + g.Path} // ChecksumFileResult is returned from /checksumfiletype ChecksumFileResult struct {	Error	Hashes	Metadata Item `json:"metadata"`} // PubLinkResult is returned from /getfilepublink and /getfolderpublinktype PubLinkResult struct {	Error	LinkID   int    `json:"linkid"`	Link     string `json:"link"`	LinkCode string `json:"code"`} // UserInfo is returned from /userinfotype UserInfo struct {	Error	Cryptosetup           bool   `json:"cryptosetup"`	Plan                  int    `json:"plan"`	CryptoSubscription    bool   `json:"cryptosubscription"`	PublicLinkQuota       int64  `json:"publiclinkquota"`	Email                 string `json:"email"`	UserID                int    `json:"userid"`	Quota                 int64  `json:"quota"`	TrashRevretentionDays int    `json:"trashrevretentiondays"`	Premium               bool   `json:"premium"`	PremiumLifetime       bool   `json:"premiumlifetime"`	EmailVerified         bool   `json:"emailverified"`	UsedQuota             int64  `json:"usedquota"`	Language              string `json:"language"`	Business              bool   `json:"business"`	CryptoLifetime        bool   `json:"cryptolifetime"`	Registered            string `json:"registered"`	Journey               struct {		Claimed bool `json:"claimed"`		Steps   struct {			VerifyMail    bool `json:"verifymail"`			UploadFile    bool `json:"uploadfile"`			AutoUpload    bool `json:"autoupload"`			DownloadApp   bool `json:"downloadapp"`			DownloadDrive bool `json:"downloaddrive"`		} `json:"steps"`	} `json:"journey"`}