drive

package
v0.2.8-arm-binary Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 27, 2015 License: Apache-2.0 Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Barely = iota
	AlmostExceeded
	HalfwayExceeded
	Exceeded
	Unknown
)
View Source
const (
	AboutNone = 1 << iota
	AboutQuota
	AboutFileSizes
	AboutFeatures
)
View Source
const (
	SelectSrc = 1 << iota
	SelectDest
)
View Source
const (
	FetchById = iota
	FetchMatches
	Fetch
)
View Source
const (
	AboutKey      = "about"
	AllKey        = "all"
	CopyKey       = "copy"
	DeleteKey     = "delete"
	DiffKey       = "diff"
	EmptyTrashKey = "emptytrash"
	FeaturesKey   = "features"
	HelpKey       = "help"
	InitKey       = "init"
	DeInitKey     = "deinit"
	LinkKey       = "Link"
	ListKey       = "list"
	MoveKey       = "move"
	OSLinuxKey    = "linux"
	PullKey       = "pull"
	PushKey       = "push"
	PubKey        = "pub"
	RenameKey     = "rename"
	QuotaKey      = "quota"
	ShareKey      = "share"
	StatKey       = "stat"
	TouchKey      = "touch"
	TrashKey      = "trash"
	UnshareKey    = "unshare"
	UntrashKey    = "untrash"
	UnpubKey      = "unpub"
	VersionKey    = "version"
	Md5sumKey     = "md5sum"
	NewKey        = "new"
	IndexKey      = "index"
	PruneKey      = "prune"

	CoercedMimeKeyKey     = "coerced-mime"
	DepthKey              = "depth"
	EmailsKey             = "emails"
	EmailMessageKey       = "emailMessage"
	ForceKey              = "force"
	QuietKey              = "quiet"
	QuitShortKey          = "q"
	YesShortKey           = "Y"
	QuitLongKey           = "quit"
	MatchesKey            = "matches"
	HiddenKey             = "hidden"
	Md5Key                = "md5"
	NoPromptKey           = "no-prompt"
	SizeKey               = "size"
	NameKey               = "name"
	OpenKey               = "open"
	OriginalNameKey       = "oname"
	ModTimeKey            = "modt"
	LastViewedByMeTimeKey = "lvt"
	RoleKey               = "role"
	TypeKey               = "type"
	TrashedKey            = "trashed"
	SkipMimeKeyKey        = "skip-mime"
	MatchMimeKeyKey       = "exact-mime"
	ExactTitleKey         = "exact-title"
	MatchOwnerKey         = "match-owner"
	ExactOwnerKey         = "exact-owner"
	NotOwnerKey           = "skip-owner"
	SortKey               = "sort"
	FolderKey             = "folder"
	MimeKey               = "mime-key"
	DriveRepoRelPath      = "github.com/odeke-em/drive"
	UrlKey                = "url"
)
View Source
const (
	DescAbout                 = "print out information about your Google drive"
	DescAll                   = "print out the entire help section"
	DescCopy                  = "copy remote paths to a destination"
	DescDelete                = "deletes the items permanently. This operation is irreversible"
	DescDiff                  = "compares local files with their remote equivalent"
	DescEmptyTrash            = "permanently cleans out your trash"
	DescExcludeOps            = "exclude operations"
	DescFeatures              = "returns information about the features of your drive"
	DescIndex                 = "fetch indices from remote"
	DescHelp                  = "Get help for a topic"
	DescInit                  = "initializes a directory and authenticates user"
	DescDeInit                = "removes the user's credentials and initialized files"
	DescList                  = "lists the contents of remote path"
	DescMove                  = "move files/folders"
	DescQuota                 = "prints out information related to your quota space"
	DescPublish               = "publishes a file and prints its publicly available url"
	DescRename                = "renames a file/folder"
	DescPull                  = "pulls remote changes from Google Drive"
	DescPruneIndices          = "remove stale indices"
	DescPush                  = "push local changes to Google Drive"
	DescShare                 = "share files with specific emails giving the specified users specifies roles and permissions"
	DescStat                  = "display information about a file"
	DescTouch                 = "updates a remote file's modification time to that currently on the server"
	DescTrash                 = "moves files to trash"
	DescUnshare               = "revoke a user's access to a file"
	DescUntrash               = "restores files from trash to their original locations"
	DescUnpublish             = "revokes public access to a file"
	DescVersion               = "prints the version"
	DescMd5sum                = "prints a list compatible with md5sum(1)"
	DescAccountTypes          = "\n\t* anyone.\n\t* user.\n\t* domain.\n\t* group"
	DescRoles                 = "\n\t* owner.\n\t* reader.\n\t* writer.\n\t* commenter."
	DescExplicitylPullExports = "explicitly pull exports"
	DescIgnoreChecksum        = "avoids computation of checksums as a final check." +
		"\nUse cases may include:\n\t* when you are low on bandwidth e.g SSHFS." +
		"\n\t* Are on a low power device"
	DescIgnoreConflict     = "turns off the conflict resolution safety"
	DescIgnoreNameClashes  = "ignore name clashes"
	DescSort               = "sort items in the order\n\t* md5.\n\t* name.\n\t* size.\n\t* type.\n\t* version"
	DescSkipMime           = "skip elements with mimeTypes derived from these extensison"
	DescMatchMime          = "get elements with the exact mimeTypes derived from extensisons"
	DescMatchTitle         = "elements with matching titles"
	DescExactTitle         = "get elements with the exact titles"
	DescMatchOwner         = "elements with matching owners"
	DescExactOwner         = "elements with the exact owner"
	DescNotOwner           = "ignore elements owned by these users"
	DescNew                = "create a new file/folder"
	DescAllIndexOperations = "perform all the index related operations"
	DescOpen               = "open a file in the appropriate filemanager or default browser"
	DescUrl                = "returns the url of each file"
	DescVerbose            = "show step by step information verbosely"
)
View Source
const (
	CLIOptionExplicitlyExport   = "explicitly-export"
	CLIOptionIgnoreChecksum     = "ignore-checksum"
	CLIOptionIgnoreConflict     = "ignore-conflict"
	CLIOptionIgnoreNameClashes  = "ignore-name-clashes"
	CLIOptionExcludeOperations  = "exclude-ops"
	CLIOptionId                 = "id"
	CLIOptionNoClobber          = "no-clobber"
	CLIOptionNotify             = "notify"
	CLIOptionSkipMime           = "skip-mime"
	CLIOptionMatchMime          = "exact-mime"
	CLIOptionExactTitle         = "exact-title"
	CLIOptionMatchTitle         = "match-mime"
	CLIOptionExactOwner         = "exact-owner"
	CLIOptionMatchOwner         = "match-owner"
	CLIOptionNotOwner           = "skip-owner"
	CLIOptionPruneIndices       = "prune"
	CLIOptionAllIndexOperations = "all-ops"
	CLIOptionVerboseKey         = "verbose"
	CLIOptionVerboseShortKey    = "v"
	CLIOptionOpen               = "open"
	CLIOptionWebBrowser         = "web-browser"
	CLIOptionFileBrowser        = "file-browser"
)
View Source
const (
	GoogleApiClientIdEnvKey     = "GOOGLE_API_CLIENT_ID"
	GoogleApiClientSecretEnvKey = "GOOGLE_API_CLIENT_SECRET"
	DriveGoMaxProcsKey          = "DRIVE_GOMAXPROCS"
	GoMaxProcsKey               = "GOMAXPROCS"
)
View Source
const (
	InTrash = 1 << iota
	Folder
	NonFolder
	Minimal
	Shared
	Owners
	CurrentVersion
)
View Source
const (
	MimeTypeJoiner      = "-"
	RemoteDriveRootPath = "My Drive"

	FmtTimeString = "2006-01-02T15:04:05.000Z"
)
View Source
const (
	// OAuth 2.0 OOB redirect URL for authorization.
	RedirectURL = "urn:ietf:wg:oauth:2.0:oob"

	// OAuth 2.0 full Drive scope used for authorization.
	DriveScope = "https://www.googleapis.com/auth/drive"

	// OAuth 2.0 access type for offline/refresh access.
	AccessType = "offline"

	// Google Drive webpage host
	DriveResourceHostURL = "https://googledrive.com/host/"

	// Google Drive entry point
	DriveResourceEntryURL = "https://drive.google.com"
)
View Source
const (
	OptNone = 1 << iota
	OptConvert
	OptOCR
	OptUpdateViewedDate
	OptContentAsIndexableText
	OptPinned
	OptNewRevision
)
View Source
const (
	UnknownAccountType = 1 << iota
	Anyone
	User
	Domain
	Group
)
View Source
const (
	UnknownRole = 1 << iota
	Owner
	Reader
	Writer
	Commenter
)
View Source
const (
	NoopOnShare = 1 << iota
	Notify
)
View Source
const (
	AttrUnknown = iota
	AttrSize
	AttrModTime
	AttrLastViewedByMeTime
	AttrVersion
	AttrIsDir
	AttrMd5Checksum
	AttrMimeType
	AttrName
)
View Source
const (
	DifferNone    = 0
	DifferDirType = 1 << iota
	DifferMd5Checksum
	DifferModTime
	DifferSize
)
View Source
const (
	Not fuzziness = 1 << iota
	Like
	NotIn
	Is
)
View Source
const (
	Or joiner = 1 << iota
	And
)
View Source
const (
	DesktopExtension = "desktop"
)
View Source
const (
	DriveFolderMimeType = "application/vnd.google-apps.folder"
)
View Source
const (
	DriveIgnoreSuffix = ".driveignore"
)
View Source
const (
	InfiniteDepth = -1
)
View Source
const (
	MaxFailedRetryCount = uint32(20) // Arbitrary value
)
View Source
const MaxFileSize = 50 * 1024 * 1024

MaxFileSize is the max number of bytes we can accept for diffing (Arbitrary value)

View Source
const Version = "0.2.8"

Variables

View Source
var (
	ErrPathNotExists                  = errors.New("remote path doesn't exist")
	ErrNetLookup                      = errors.New("net lookup failed")
	ErrClashesDetected                = fmt.Errorf("clashes detected. use `%s` to override this behavior", CLIOptionIgnoreNameClashes)
	ErrGoogleApiInvalidQueryHardCoded = errors.New("googleapi: Error 400: Invalid query, invalid")
)
View Source
var (
	UnescapedPathSep = fmt.Sprintf("%c", os.PathSeparator)
	EscapedPathSep   = url.QueryEscape(UnescapedPathSep)
)
View Source
var Aliases = map[string][]string{
	CopyKey: []string{"cp"},
	ListKey: []string{"ls"},
	MoveKey: []string{"mv"},
}
View Source
var BigFileSize = int64(1024 * 1024 * 400)

Arbitrary value. TODO: Get better definition of BigFileSize.

View Source
var BytesPerKB = float64(1024)
View Source
var DefaultMaxProcs = runtime.NumCPU()
View Source
var (
	ErrNoContext = errors.New("not in a drive context")
)
View Source
var ErrPathNotDir = errors.New("not a directory")
View Source
var Ruler = strings.Repeat("*", 4)

Functions

func NonEmptyStrings

func NonEmptyStrings(v ...string) (splits []string)

func NonEmptyTrimmedStrings added in v0.2.0

func NonEmptyTrimmedStrings(v ...string) (splits []string)

func ReadFullFile added in v0.2.7

func ReadFullFile(p string) (clauses []string, err error)

func RetrieveRefreshToken

func RetrieveRefreshToken(ctx context.Context, context *config.Context) (string, error)

func ShowAllDescriptions

func ShowAllDescriptions()

func ShowDescription

func ShowDescription(topic string)

func ShowDescriptions added in v0.2.4

func ShowDescriptions(topics ...string)

Types

type AccountType

type AccountType int

func (*AccountType) String

func (a *AccountType) String() string

type ByPrecedence

type ByPrecedence []*Change

func (ByPrecedence) Len

func (cl ByPrecedence) Len() int

func (ByPrecedence) Less

func (cl ByPrecedence) Less(i, j int) bool

func (ByPrecedence) Swap

func (cl ByPrecedence) Swap(i, j int)

type Change

type Change struct {
	Dest           *File
	Parent         string
	Path           string
	Src            *File
	Force          bool
	NoClobber      bool
	IgnoreConflict bool
	IgnoreChecksum bool
	// contains filtered or unexported fields
}

func (*Change) Op

func (c *Change) Op() Operation

func (*Change) Symbol

func (c *Change) Symbol() string

type Commands

type Commands struct {
	// contains filtered or unexported fields
}

func New

func New(context *config.Context, opts *Options) *Commands

func (*Commands) About

func (g *Commands) About(mask int) (err error)

func (*Commands) Copy

func (g *Commands) Copy(byId bool) error

func (*Commands) DeInit added in v0.2.6

func (g *Commands) DeInit() error

func (*Commands) Delete added in v0.2.0

func (g *Commands) Delete(byId bool) (err error)

func (*Commands) DeleteByMatch added in v0.2.0

func (g *Commands) DeleteByMatch() error

func (*Commands) Diff

func (g *Commands) Diff() (err error)

func (*Commands) EmptyTrash

func (g *Commands) EmptyTrash() error

func (*Commands) Fetch added in v0.2.5

func (g *Commands) Fetch() (err error)

func (*Commands) FetchById added in v0.2.5

func (g *Commands) FetchById() (err error)

func (*Commands) FetchMatches added in v0.2.5

func (g *Commands) FetchMatches() (err error)

func (*Commands) Init

func (g *Commands) Init() error

func (*Commands) List

func (g *Commands) List(byId bool) error

func (*Commands) ListMatches added in v0.1.7

func (g *Commands) ListMatches() error

func (*Commands) ListShared added in v0.2.1

func (g *Commands) ListShared() (err error)

func (*Commands) Move

func (g *Commands) Move(byId bool) (err error)

func (*Commands) NewFile added in v0.2.5

func (g *Commands) NewFile() (err error)

func (*Commands) NewFolder added in v0.2.5

func (g *Commands) NewFolder() (err error)

func (*Commands) Open added in v0.2.9

func (g *Commands) Open(ot OpenType) error

func (*Commands) Prune added in v0.2.5

func (g *Commands) Prune() (err error)

func (*Commands) Publish

func (c *Commands) Publish(byId bool) (err error)

func (*Commands) Pull

func (g *Commands) Pull(byId bool) error

Pull from remote if remote path exists and in a god context. If path is a directory, it recursively pulls from the remote if there are remote changes. It doesn't check if there are remote changes if isForce is set.

func (*Commands) PullMatches added in v0.1.7

func (g *Commands) PullMatches() (err error)

func (*Commands) PullPiped

func (g *Commands) PullPiped(byId bool) (err error)

func (*Commands) Push

func (g *Commands) Push() (err error)

Pushes to remote if local path exists and in a gd context. If path is a directory, it recursively pushes to the remote if there are local changes. It doesn't check if there are local changes if isForce is set.

func (*Commands) PushPiped

func (g *Commands) PushPiped() (err error)

func (*Commands) QuotaStatus

func (g *Commands) QuotaStatus(query int64) (status int, err error)

func (*Commands) Rename

func (g *Commands) Rename(byId bool) error

func (*Commands) Share

func (c *Commands) Share(byId bool) (err error)

func (*Commands) Stat

func (g *Commands) Stat() error

func (*Commands) StatById added in v0.2.2

func (g *Commands) StatById() error

func (*Commands) Touch

func (g *Commands) Touch(byId bool) (err error)

func (*Commands) TouchByMatch

func (g *Commands) TouchByMatch() (err error)

func (*Commands) Trash

func (g *Commands) Trash(byId bool) (err error)

func (*Commands) TrashByMatch

func (g *Commands) TrashByMatch() error

func (*Commands) Unpublish

func (c *Commands) Unpublish(byId bool) error

func (*Commands) Unshare

func (c *Commands) Unshare(byId bool) (err error)

func (*Commands) Untrash

func (g *Commands) Untrash(byId bool) (err error)

func (*Commands) UntrashByMatch

func (g *Commands) UntrashByMatch() error

func (*Commands) Url added in v0.2.9

func (g *Commands) Url(byId bool) error

type CrudValue added in v0.2.0

type CrudValue int
const (
	None   CrudValue = 0
	Create CrudValue = 1 << iota
	Read
	Update
	Delete
)
var (
	AllCrudOperations CrudValue = Create | Read | Update | Delete
)

func CrudAtoi added in v0.2.0

func CrudAtoi(ops ...string) CrudValue

type File

type File struct {
	// AlternateLink opens the file in a relevant Google editor or viewer
	AlternateLink string
	BlobAt        string
	// Copyable decides if the user has allowed for the file to be copied
	Copyable           bool
	ExportLinks        map[string]string
	Id                 string
	IsDir              bool
	Md5Checksum        string
	MimeType           string
	ModTime            time.Time
	LastViewedByMeTime time.Time
	Name               string
	Size               int64
	Etag               string
	Shared             bool
	// UserPermission contains the permissions for the authenticated user on this file
	UserPermission *drive.Permission
	// CacheChecksum when set avoids recomputation of checksums
	CacheChecksum bool
	// Monotonically increasing version number for the file
	Version int64
	// The onwers of this file.
	OwnerNames []string
	// Permissions contains the overall permissions for this file
	Permissions           []*drive.Permission
	LastModifyingUsername string
	OriginalFilename      string
	Labels                *drive.FileLabels
}

func DupFile

func DupFile(f *File) *File

func NewLocalFile

func NewLocalFile(absPath string, f os.FileInfo) *File

func NewRemoteFile

func NewRemoteFile(f *drive.File) *File

func (*File) ToIndex

func (f *File) ToIndex() *config.Index

func (*File) Url added in v0.2.9

func (f *File) Url() (url string)

type OpenType added in v0.2.9

type OpenType uint
const (
	OpenNone OpenType = 1 << iota
	FileManagerOpen
	BrowserOpen
	IdOpen
)

type Operation added in v0.1.8

type Operation int
const (
	OpNone Operation = 1 << iota
	OpAdd
	OpDelete
	OpIndexAddition
	OpMod
	OpModConflict
)

type Options

type Options struct {
	// Depth is the number of pages/ listing recursion depth
	Depth int
	// Exports contains the formats to export your Google Docs + Sheets to
	// e.g ["csv" "txt"]
	Exports []string
	// ExportsDir is the directory to put the exported Google Docs + Sheets.
	// If not provided, will export them to the same dir as the source files are
	ExportsDir string
	// Force once set always converts NoChange into an Addition
	Force bool
	// Hidden discovers hidden paths if set
	Hidden       bool
	IgnoreRegexp *regexp.Regexp
	// IgnoreChecksum when set avoids the step
	// of comparing checksums as a final check.
	IgnoreChecksum bool
	// IgnoreConflict when set turns off the conflict resolution safety.
	IgnoreConflict bool
	// Allows listing of content in trash
	InTrash bool
	Meta    *map[string][]string
	Mount   *config.Mount
	// NoClobber when set prevents overwriting of stale content
	NoClobber bool
	// NoPrompt overwrites any prompt pauses
	NoPrompt bool
	Path     string
	// PageSize determines the number of results returned per API call
	PageSize  int64
	Recursive bool
	// Sources is a of list all paths that are
	// within the scope/path of the current gd context
	Sources []string
	// TypeMask contains the result of setting different type bits e.g
	// Folder to search only for folders etc.
	TypeMask int
	// Piped when set means to infer content to or from stdin
	Piped bool
	// Quiet when set toggles only logging of errors to stderrs as
	// well as reading from stdin in this case stdout is not logged to
	Quiet             bool
	StdoutIsTty       bool
	IgnoreNameClashes bool
	ExcludeCrudMask   CrudValue
	ExplicitlyExport  bool
	Md5sum            bool

	Verbose bool
	// contains filtered or unexported fields
}

type Remote

type Remote struct {
	// contains filtered or unexported fields
}

func NewRemoteContext

func NewRemoteContext(context *config.Context) *Remote

func (*Remote) About

func (r *Remote) About() (about *drive.About, err error)

func (*Remote) Delete added in v0.2.0

func (r *Remote) Delete(id string) error

func (*Remote) Download

func (r *Remote) Download(id string, exportURL string) (io.ReadCloser, error)

func (*Remote) EmptyTrash

func (r *Remote) EmptyTrash() error

func (*Remote) FindById

func (r *Remote) FindById(id string) (file *File, err error)

func (*Remote) FindByParentId

func (r *Remote) FindByParentId(parentId string, hidden bool) chan *File

func (*Remote) FindByParentIdTrashed

func (r *Remote) FindByParentIdTrashed(parentId string, hidden bool) chan *File

func (*Remote) FindByPath

func (r *Remote) FindByPath(p string) (file *File, err error)

func (*Remote) FindByPathShared

func (r *Remote) FindByPathShared(p string) (chan *File, error)

func (*Remote) FindByPathTrashed

func (r *Remote) FindByPathTrashed(p string) (file *File, err error)

func (*Remote) FindMatches

func (r *Remote) FindMatches(mq *matchQuery) (chan *File, error)

func (*Remote) Publish

func (r *Remote) Publish(id string) (string, error)

func (*Remote) Touch

func (r *Remote) Touch(id string) (*File, error)

func (*Remote) Trash

func (r *Remote) Trash(id string) error

func (*Remote) Unpublish

func (r *Remote) Unpublish(id string) error

func (*Remote) Untrash

func (r *Remote) Untrash(id string) error

func (*Remote) UpsertByComparison

func (r *Remote) UpsertByComparison(args *upsertOpt) (f *File, err error)

type Role

type Role int

func (*Role) String

func (r *Role) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL