syncdrive

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2022 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DownloadingFileSuffix 下载中文件后缀
	DownloadingFileSuffix string = ".aliyunpan"

	// TimeSecondsOf30Seconds 30秒
	TimeSecondsOf30Seconds int64 = 30

	// TimeSecondsOfOneMinute 一分钟秒数
	TimeSecondsOfOneMinute int64 = 60

	// TimeSecondsOf2Minute 2分钟秒数
	TimeSecondsOf2Minute int64 = 2 * TimeSecondsOfOneMinute

	// TimeSecondsOf5Minute 5分钟秒数
	TimeSecondsOf5Minute int64 = 5 * TimeSecondsOfOneMinute

	// TimeSecondsOf10Minute 10分钟秒数
	TimeSecondsOf10Minute int64 = 10 * TimeSecondsOfOneMinute

	// TimeSecondsOf30Minute 30分钟秒数
	TimeSecondsOf30Minute int64 = 30 * TimeSecondsOfOneMinute

	// TimeSecondsOf60Minute 60分钟秒数
	TimeSecondsOf60Minute int64 = 60 * TimeSecondsOfOneMinute
)
View Source
const (
	SyncFileStatusCreate      SyncFileStatus = "create"
	SyncFileStatusUploading   SyncFileStatus = "uploading"
	SyncFileStatusDownloading SyncFileStatus = "downloading"
	SyncFileStatusFailed      SyncFileStatus = "failed"
	SyncFileStatusSuccess     SyncFileStatus = "success"
	SyncFileStatusIllegal     SyncFileStatus = "illegal"
	SyncFileStatusNotExisted  SyncFileStatus = "notExisted"

	SyncFileActionDownload          SyncFileAction = "download"
	SyncFileActionUpload            SyncFileAction = "upload"
	SyncFileActionDeleteLocal       SyncFileAction = "delete_local"
	SyncFileActionDeletePan         SyncFileAction = "delete_pan"
	SyncFileActionCreateLocalFolder SyncFileAction = "create_local_folder"
	SyncFileActionCreatePanFolder   SyncFileAction = "create_pan_folder"

	// ScanStatusNormal 正常
	ScanStatusNormal ScanStatus = "normal"
	// ScanStatusDiscard 已过期,已删除
	ScanStatusDiscard ScanStatus = "discard"

	// SyncPriorityTimestampFirst 最新时间优先
	SyncPriorityTimestampFirst = "time"
	// SyncPriorityLocalFirst 本地文件优先
	SyncPriorityLocalFirst = "local"
	// SyncPriorityPanFirst 网盘文件优先
	SyncPriorityPanFirst = "pan"
)
View Source
const (
	DirBucketPrefix string = "##:@@"
)

Variables

View Source
var (
	ErrItemNotExisted error = fmt.Errorf("item is not existed")
)
View Source
var (
	ErrSyncTaskListEmpty error = fmt.Errorf("no sync task")
)
View Source
var (
	LogPrompt = false
)

Functions

func FormatFilePath

func FormatFilePath(filePath string) string

FormatFilePath 格式化文件路径

Types

type BoltDb

type BoltDb struct {
	Path string
	// contains filtered or unexported fields
}

BoltDb 存储本地文件信息的数据库

func NewBoltDb

func NewBoltDb(dbFilePath string) *BoltDb

func (*BoltDb) Add

func (b *BoltDb) Add(item *BoltItem) (bool, error)

Add 增加一个数据项

func (*BoltDb) AddItems

func (b *BoltDb) AddItems(items []*BoltItem) (bool, error)

AddItems 增加数据项

func (*BoltDb) Close

func (b *BoltDb) Close() (bool, error)

Close 关闭数据库

func (*BoltDb) Delete

func (b *BoltDb) Delete(filePath string) (bool, error)

Delete 删除一个数据项

func (*BoltDb) Get

func (b *BoltDb) Get(filePath string) (string, error)

Get 获取一个数据项,数据项不存在返回错误

func (*BoltDb) GetFileList

func (b *BoltDb) GetFileList(filePath string) ([]string, error)

func (*BoltDb) Open

func (b *BoltDb) Open() (bool, error)

func (*BoltDb) Update

func (b *BoltDb) Update(filePath string, data string) (bool, error)

Update 更新数据项,数据项不存在返回错误

type BoltItem

type BoltItem struct {
	FilePath string
	IsFolder bool
	Data     string
}

type FileAction

type FileAction string

type FileActionTask

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

func (*FileActionTask) DoAction

func (f *FileActionTask) DoAction(ctx context.Context) error

func (*FileActionTask) HashCode

func (f *FileActionTask) HashCode() string

type FileActionTaskList

type FileActionTaskList []*FileActionTask

type FileActionTaskManager

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

func NewFileActionTaskManager

func NewFileActionTaskManager(task *SyncTask) *FileActionTaskManager

func (*FileActionTaskManager) AddLocalFolderModifyCount added in v0.1.7

func (f *FileActionTaskManager) AddLocalFolderModifyCount()

func (*FileActionTaskManager) AddPanFolderModifyCount added in v0.1.7

func (f *FileActionTaskManager) AddPanFolderModifyCount()

func (*FileActionTaskManager) AddSyncActionModifyCount added in v0.1.7

func (f *FileActionTaskManager) AddSyncActionModifyCount()

func (*FileActionTaskManager) MinusLocalFolderModifyCount added in v0.1.7

func (f *FileActionTaskManager) MinusLocalFolderModifyCount()

func (*FileActionTaskManager) MinusPanFolderModifyCount added in v0.1.7

func (f *FileActionTaskManager) MinusPanFolderModifyCount()

func (*FileActionTaskManager) MinusSyncActionModifyCount added in v0.1.7

func (f *FileActionTaskManager) MinusSyncActionModifyCount()

func (*FileActionTaskManager) Start

func (f *FileActionTaskManager) Start() error

Start 启动文件动作任务管理进程 通过对本地数据库的对比,决策对文件进行下载、上传、删除等动作

func (*FileActionTaskManager) Stop

func (f *FileActionTaskManager) Stop() error

type LocalFileItem

type LocalFileItem struct {
	// FileName 文件名
	FileName string `json:"fileName"`
	// FileSize 文件大小
	FileSize int64 `json:"fileSize"`
	// 文件类别 folder / file
	FileType string `json:"fileType"`
	// 创建时间
	CreatedAt string `json:"createdAt"`
	// 最后修改时间
	UpdatedAt string `json:"updatedAt"`
	// 后缀名,例如:dmg
	FileExtension string `json:"fileExtension"`
	// 内容Hash值,只有文件才会有
	Sha1Hash string `json:"sha1Hash"`
	// FilePath 文件的完整路径
	Path string `json:"path"`
	// ScanTimeAt 扫描时间
	ScanTimeAt string `json:"scanTimeAt"`
	// ScanStatus 扫描状态
	ScanStatus ScanStatus `json:"scanStatus"`
}

LocalFileItem 本地文件信息

func (*LocalFileItem) FormatFileName

func (item *LocalFileItem) FormatFileName() string

func (*LocalFileItem) FormatFilePath

func (item *LocalFileItem) FormatFilePath() string

func (*LocalFileItem) HashCode

func (item *LocalFileItem) HashCode() string

func (*LocalFileItem) Id

func (item *LocalFileItem) Id() string

func (*LocalFileItem) IsFolder

func (item *LocalFileItem) IsFolder() bool

func (*LocalFileItem) ScanTime

func (item *LocalFileItem) ScanTime() time.Time

func (*LocalFileItem) ScanTimeUnix

func (item *LocalFileItem) ScanTimeUnix() int64

func (*LocalFileItem) UpdateTime

func (item *LocalFileItem) UpdateTime() time.Time

func (*LocalFileItem) UpdateTimeUnix

func (item *LocalFileItem) UpdateTimeUnix() int64

type LocalFileList

type LocalFileList []*LocalFileItem

func (LocalFileList) FindFileByPath

func (l LocalFileList) FindFileByPath(filePath string) *LocalFileItem

type LocalSyncDb

type LocalSyncDb interface {
	// Open 打开并准备数据库
	Open() (bool, error)
	// Add 存储一个数据项
	Add(item *LocalFileItem) (bool, error)
	// AddFileList 存储批量数据项
	AddFileList(items LocalFileList) (bool, error)
	// Get 获取一个数据项
	Get(filePath string) (*LocalFileItem, error)
	// GetFileList 获取文件夹下的所有的文件列表
	GetFileList(filePath string) (LocalFileList, error)
	// Delete 删除一个数据项,如果是文件夹,则会删除文件夹下面所有的文件列表
	Delete(filePath string) (bool, error)
	// Update 更新一个数据项数据
	Update(item *LocalFileItem) (bool, error)
	// Close 关闭数据库
	Close() (bool, error)
}

func NewLocalSyncDb

func NewLocalSyncDb(dbFilePath string) LocalSyncDb

type LocalSyncDbBolt

type LocalSyncDbBolt struct {
	Path string
	// contains filtered or unexported fields
}

LocalSyncDbBolt 存储本地文件信息的数据库

func (*LocalSyncDbBolt) Add

func (p *LocalSyncDbBolt) Add(item *LocalFileItem) (bool, error)

Add 增加一个数据项

func (*LocalSyncDbBolt) AddFileList

func (p *LocalSyncDbBolt) AddFileList(items LocalFileList) (bool, error)

AddFileList 增加批量数据项

func (*LocalSyncDbBolt) Close

func (p *LocalSyncDbBolt) Close() (bool, error)

Close 关闭数据库

func (*LocalSyncDbBolt) Delete

func (p *LocalSyncDbBolt) Delete(filePath string) (bool, error)

Delete 删除一个数据项

func (*LocalSyncDbBolt) Get

func (p *LocalSyncDbBolt) Get(filePath string) (*LocalFileItem, error)

Get 获取一个数据项,数据项不存在返回错误

func (*LocalSyncDbBolt) GetFileList

func (p *LocalSyncDbBolt) GetFileList(filePath string) (LocalFileList, error)

func (*LocalSyncDbBolt) Open

func (p *LocalSyncDbBolt) Open() (bool, error)

func (*LocalSyncDbBolt) Update

func (p *LocalSyncDbBolt) Update(item *LocalFileItem) (bool, error)

Update 更新数据项,数据项不存在返回错误

type PanFileItem

type PanFileItem struct {
	// 网盘ID
	DriveId string `json:"driveId"`
	// 域ID
	DomainId string `json:"domainId"`
	// FileId 文件ID
	FileId string `json:"fileId"`
	// FileName 文件名
	FileName string `json:"fileName"`
	// FileSize 文件大小
	FileSize int64 `json:"fileSize"`
	// 文件类别 folder / file
	FileType string `json:"fileType"`
	// 创建时间
	CreatedAt string `json:"createdAt"`
	// 最后修改时间
	UpdatedAt string `json:"updatedAt"`
	// 后缀名,例如:dmg
	FileExtension string `json:"fileExtension"`
	// 文件上传ID
	UploadId string `json:"uploadId"`
	// 父文件夹ID
	ParentFileId string `json:"parentFileId"`
	// 内容CRC64校验值,只有文件才会有
	Crc64Hash string `json:"crc64Hash"`
	// 内容Hash值,只有文件才会有
	Sha1Hash string `json:"sha1Hash"`
	// FilePath 文件的完整路径
	Path string `json:"path"`
	// Category 文件分类,例如:image/video/doc/others
	Category string `json:"category"`
	// ScanTimeAt 扫描时间
	ScanTimeAt string `json:"scanTimeAt"`
	// ScanStatus 扫描状态
	ScanStatus ScanStatus `json:"scanStatus"`
}

PanFileItem 网盘文件信息

func NewPanFileItem

func NewPanFileItem(fe *aliyunpan.FileEntity) *PanFileItem

func (*PanFileItem) FormatFileName

func (item *PanFileItem) FormatFileName() string

func (*PanFileItem) FormatFilePath

func (item *PanFileItem) FormatFilePath() string

func (*PanFileItem) HashCode

func (item *PanFileItem) HashCode() string

func (*PanFileItem) Id

func (item *PanFileItem) Id() string

func (*PanFileItem) IsFolder

func (item *PanFileItem) IsFolder() bool

func (*PanFileItem) ScanTime

func (item *PanFileItem) ScanTime() time.Time

func (*PanFileItem) ScanTimeUnix

func (item *PanFileItem) ScanTimeUnix() int64

func (*PanFileItem) UpdateTime

func (item *PanFileItem) UpdateTime() time.Time

func (*PanFileItem) UpdateTimeUnix

func (item *PanFileItem) UpdateTimeUnix() int64

type PanFileList

type PanFileList []*PanFileItem

func (PanFileList) FindFileByPath

func (p PanFileList) FindFileByPath(filePath string) *PanFileItem

type PanSyncDb

type PanSyncDb interface {
	// Open 打开并准备数据库
	Open() (bool, error)
	// Add 存储一个数据项
	Add(item *PanFileItem) (bool, error)
	// AddFileList 存储批量数据项
	AddFileList(items PanFileList) (bool, error)
	// Get 获取一个数据项
	Get(filePath string) (*PanFileItem, error)
	// GetFileList 获取文件夹下的所有的文件列表
	GetFileList(filePath string) (PanFileList, error)
	// Delete 删除一个数据项,如果是文件夹,则会删除文件夹下面所有的文件列表
	Delete(filePath string) (bool, error)
	// Update 更新一个数据项数据
	Update(item *PanFileItem) (bool, error)
	// Close 关闭数据库
	Close() (bool, error)
}

func NewPanSyncDb

func NewPanSyncDb(dbFilePath string) PanSyncDb

type PanSyncDbBolt

type PanSyncDbBolt struct {
	Path string
	// contains filtered or unexported fields
}

PanSyncDbBolt 存储网盘文件信息的数据库

func (*PanSyncDbBolt) Add

func (p *PanSyncDbBolt) Add(item *PanFileItem) (bool, error)

Add 增加一个数据项

func (*PanSyncDbBolt) AddFileList

func (p *PanSyncDbBolt) AddFileList(items PanFileList) (bool, error)

AddFileList 增加批量数据项

func (*PanSyncDbBolt) Close

func (p *PanSyncDbBolt) Close() (bool, error)

Close 关闭数据库

func (*PanSyncDbBolt) Delete

func (p *PanSyncDbBolt) Delete(filePath string) (bool, error)

Delete 删除一个数据项

func (*PanSyncDbBolt) Get

func (p *PanSyncDbBolt) Get(filePath string) (*PanFileItem, error)

Get 获取一个数据项,数据项不存在返回错误

func (*PanSyncDbBolt) GetFileList

func (p *PanSyncDbBolt) GetFileList(filePath string) (PanFileList, error)

func (*PanSyncDbBolt) Open

func (p *PanSyncDbBolt) Open() (bool, error)

func (*PanSyncDbBolt) Update

func (p *PanSyncDbBolt) Update(item *PanFileItem) (bool, error)

Update 更新数据项,数据项不存在返回错误

type ScanStatus

type ScanStatus string

ScanStatus 扫描状态

type SyncDriveConfig

type SyncDriveConfig struct {
	ConfigVer    string      `json:"configVer"`
	SyncTaskList []*SyncTask `json:"syncTaskList"`
}

SyncDriveConfig 同步盘配置文件

type SyncFileAction

type SyncFileAction string

type SyncFileDb

type SyncFileDb interface {
	// Open 打开并准备数据库
	Open() (bool, error)
	// Add 存储一个数据项
	Add(item *SyncFileItem) (bool, error)
	// Get 获取一个数据项
	Get(id string) (*SyncFileItem, error)
	// GetFileList 获取文件夹下的所有的文件列表
	GetFileList(Status SyncFileStatus) (SyncFileList, error)
	// Delete 删除一个数据项,如果是文件夹,则会删除文件夹下面所有的文件列表
	Delete(id string) (bool, error)
	// Update 更新一个数据项数据
	Update(item *SyncFileItem) (bool, error)
	// Close 关闭数据库
	Close() (bool, error)
}

func NewSyncFileDb

func NewSyncFileDb(dbFilePath string) SyncFileDb

type SyncFileDbBolt

type SyncFileDbBolt struct {
	Path string
	// contains filtered or unexported fields
}

SyncFileDbBolt 存储同步文件状态信息的数据库

func (*SyncFileDbBolt) Add

func (s *SyncFileDbBolt) Add(item *SyncFileItem) (bool, error)

Add 存储一个数据项

func (*SyncFileDbBolt) Close

func (s *SyncFileDbBolt) Close() (bool, error)

Close 关闭数据库

func (*SyncFileDbBolt) Delete

func (s *SyncFileDbBolt) Delete(id string) (bool, error)

Delete 删除一个数据项,如果是文件夹,则会删除文件夹下面所有的文件列表

func (*SyncFileDbBolt) Get

func (s *SyncFileDbBolt) Get(id string) (*SyncFileItem, error)

Get 获取一个数据项

func (*SyncFileDbBolt) GetFileList

func (s *SyncFileDbBolt) GetFileList(Status SyncFileStatus) (SyncFileList, error)

GetFileList 获取文件夹下的所有的文件列表

func (*SyncFileDbBolt) Open

func (s *SyncFileDbBolt) Open() (bool, error)

Open 打开并准备数据库

func (*SyncFileDbBolt) Update

func (s *SyncFileDbBolt) Update(item *SyncFileItem) (bool, error)

Update 更新一个数据项数据

type SyncFileItem

type SyncFileItem struct {
	Action    SyncFileAction `json:"action"`
	Status    SyncFileStatus `json:"status"`
	LocalFile *LocalFileItem `json:"localFile"`
	PanFile   *PanFileItem   `json:"panFile"`
	// LocalFolderPath 本地目录
	LocalFolderPath string `json:"localFolderPath"`
	// PanFolderPath 云盘目录
	PanFolderPath    string `json:"panFolderPath"`
	StatusUpdateTime string `json:"statusUpdateTime"`

	DriveId           string                            `json:"driveId"`
	UseInternalUrl    bool                              `json:"useInternalUrl"`
	DownloadRange     *transfer.Range                   `json:"downloadRange"`
	DownloadBlockSize int64                             `json:"downloadBlockSize"`
	UploadRange       *transfer.Range                   `json:"uploadRange"`
	UploadEntity      *aliyunpan.CreateFileUploadResult `json:"uploadEntity"`
	// UploadPartSeq 上传序号,从0开始
	UploadPartSeq   int   `json:"uploadPartSeq"`
	UploadBlockSize int64 `json:"uploadBlockSize"`
}

func (*SyncFileItem) HashCode

func (item *SyncFileItem) HashCode() string

func (*SyncFileItem) Id

func (item *SyncFileItem) Id() string

func (*SyncFileItem) StatusUpdateTimeUnix

func (item *SyncFileItem) StatusUpdateTimeUnix() int64

func (*SyncFileItem) String

func (item *SyncFileItem) String() string

type SyncFileList

type SyncFileList []*SyncFileItem

type SyncFileStatus

type SyncFileStatus string

type SyncMode

type SyncMode string
const (
	// UploadOnly 单向上传,即备份本地文件到云盘
	UploadOnly SyncMode = "upload"
	// DownloadOnly 只下载,即备份云盘文件到本地
	DownloadOnly SyncMode = "download"
	// SyncTwoWay 双向同步,本地和云盘文件完全保持一致
	SyncTwoWay SyncMode = "sync"
)

type SyncOption added in v0.1.9

type SyncOption struct {
	FileDownloadParallel  int   // 文件下载并发数
	FileUploadParallel    int   // 文件上传并发数
	FileDownloadBlockSize int64 // 文件下载分片大小
	FileUploadBlockSize   int64 // 文件上传分片大小
	UseInternalUrl        bool  // 是否使用阿里ECS内部链接

	MaxDownloadRate int64 // 限制最大下载速度
	MaxUploadRate   int64 // 限制最大上传速度

	// 优先级选项
	SyncPriority SyncPriorityOption
}

SyncOption 同步选项

type SyncPriorityOption added in v0.1.9

type SyncPriorityOption string

SyncPriorityOption 同步优先级选项

type SyncTask

type SyncTask struct {
	// Name 任务名称
	Name string `json:"name"`
	// Id 任务ID
	Id string `json:"id"`
	// DriveId 网盘ID,目前支持文件网盘
	DriveId string `json:"-"`
	// LocalFolderPath 本地目录
	LocalFolderPath string `json:"localFolderPath"`
	// PanFolderPath 云盘目录
	PanFolderPath string `json:"panFolderPath"`
	// Mode 同步模式
	Mode SyncMode `json:"mode"`
	// Priority 优先级选项
	Priority SyncPriorityOption `json:"priority"`
	// LastSyncTime 上一次同步时间
	LastSyncTime string `json:"lastSyncTime"`
	// contains filtered or unexported fields
}

SyncTask 同步任务

func (*SyncTask) NameLabel

func (t *SyncTask) NameLabel() string

func (*SyncTask) Start

func (t *SyncTask) Start() error

Start 启动同步任务 扫描本地和云盘文件信息并存储到本地数据库

func (*SyncTask) Stop

func (t *SyncTask) Stop() error

Stop 停止同步任务

func (*SyncTask) String

func (t *SyncTask) String() string

type SyncTaskManager

type SyncTaskManager struct {
	PanUser              *config.PanUser
	DriveId              string
	PanClient            *aliyunpan.PanClient
	SyncConfigFolderPath string
	// contains filtered or unexported fields
}

SyncTaskManager 同步任务管理器

func NewSyncTaskManager

func NewSyncTaskManager(user *config.PanUser, driveId string, panClient *aliyunpan.PanClient, syncConfigFolderPath string,
	option SyncOption) *SyncTaskManager

func (*SyncTaskManager) ConfigFilePath

func (m *SyncTaskManager) ConfigFilePath() string

func (*SyncTaskManager) Start

func (m *SyncTaskManager) Start(tasks []*SyncTask) (bool, error)

Start 启动同步进程

func (*SyncTaskManager) Stop

func (m *SyncTaskManager) Stop() (bool, error)

Stop 停止同步进程

Jump to

Keyboard shortcuts

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