syncdrive

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2024 License: Apache-2.0 Imports: 34 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 (
	// Upload 上传,即备份本地文件到云盘
	Upload SyncMode = "upload"
	// Download 下载,即备份云盘文件到本地
	Download SyncMode = "download"
	// SyncTwoWay 双向同步,本地和云盘文件完全保持一致
	SyncTwoWay SyncMode = "sync"

	// SyncPolicyExclusive 备份策略,排他备份,保证本地和云盘一比一备份,目标目录多余的文件会被删除
	SyncPolicyExclusive SyncPolicy = "exclusive"
	// SyncPolicyIncrement 备份策略,增量备份,只会增量备份文件,目标目录多余的(旧的)文件不会被删除
	SyncPolicyIncrement SyncPolicy = "increment"

	// CycleOneTime 只运行一次
	CycleOneTime CycleMode = "OneTime"
	// CycleInfiniteLoop 无限循环模式
	CycleInfiniteLoop CycleMode = "InfiniteLoop"
)
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 格式化文件路径

func GetLocalFileFullPathFromPanPath added in v0.3.0

func GetLocalFileFullPathFromPanPath(panFilePath, localRootPath, panRootPath string) string

GetLocalFileFullPathFromPanPath 获取本地文件的路径

func GetPanFileFullPathFromLocalPath added in v0.3.0

func GetPanFileFullPathFromLocalPath(localFilePath, localRootPath, panRootPath string) string

GetPanFileFullPathFromLocalPath 获取网盘文件的路径

func IsSymlinkFile added in v0.3.0

func IsSymlinkFile(file fs.FileInfo) bool

IsSymlinkFile 是否是软链接文件

func PromptPrint added in v0.3.0

func PromptPrint(msg string)

func PromptPrintln added in v0.3.0

func PromptPrintln(msg string)

PromptPrintln 输出提示消息到控制台

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 CycleMode added in v0.3.0

type CycleMode 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) InitMgr added in v0.3.0

func (f *FileActionTaskManager) InitMgr() error

InitMgr 初始化文件动作任务管理进程

func (*FileActionTaskManager) IsExecuteLoopIsDone added in v0.3.0

func (f *FileActionTaskManager) IsExecuteLoopIsDone() bool

IsExecuteLoopIsDone 获取文件执行进程状态

func (*FileActionTaskManager) StartFileActionTaskExecutor added in v0.3.0

func (f *FileActionTaskManager) StartFileActionTaskExecutor() error

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) IsFile added in v0.2.2

func (item *LocalFileItem) IsFile() bool

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"`
	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

type SyncOption added in v0.1.9

type SyncOption struct {
	FileDownloadParallel  int   // 文件下载并发数
	FileUploadParallel    int   // 文件上传并发数
	FileDownloadBlockSize int64 // 文件下载分片大小
	FileUploadBlockSize   int64 // 文件上传分片大小

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

	// 优先级选项
	SyncPriority SyncPriorityOption

	// 本地文件修改检测间隔
	LocalFileModifiedCheckIntervalSec int

	// 文件记录器
	FileRecorder *log.FileRecorder
}

SyncOption 同步选项

type SyncPolicy added in v0.3.1

type SyncPolicy string

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"`
	// UserId 账号ID
	UserId string `json:"userId"`
	// DriveName 网盘名称,backup-备份盘,resource-资源盘
	DriveName string `json:"driveName"`
	// DriveId 网盘ID,目前支持文件网盘
	DriveId string `json:"-"`
	// LocalFolderPath 本地目录
	LocalFolderPath string `json:"localFolderPath"`
	// PanFolderPath 云盘目录
	PanFolderPath string `json:"panFolderPath"`
	// Mode 备份模式
	Mode SyncMode `json:"mode"`
	// Policy 备份策略
	Policy SyncPolicy `json:"policy"`
	// CycleMode 循环模式,OneTime-运行一次,InfiniteLoop-无限循环模式
	CycleModeType CycleMode `json:"-"`
	// Priority 优先级选项
	Priority SyncPriorityOption `json:"-"`
	// LastSyncTime 上一次同步时间
	LastSyncTime string `json:"lastSyncTime"`
	// contains filtered or unexported fields
}

SyncTask 同步任务

func (*SyncTask) IsScanLoopDone added in v0.3.0

func (t *SyncTask) IsScanLoopDone() bool

IsScanLoopDone 获取文件扫描进程状态

func (*SyncTask) IsTaskCompletely added in v0.3.1

func (t *SyncTask) IsTaskCompletely() bool

IsTaskCompletely 任务是否已经完成

func (*SyncTask) NameLabel

func (t *SyncTask) NameLabel() string

func (*SyncTask) SetScanLoopFlag added in v0.3.0

func (t *SyncTask) SetScanLoopFlag(done bool)

SetScanLoopFlag 设置文件扫描进程状态标记

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

func (*SyncTask) WaitToStop added in v0.2.2

func (t *SyncTask) WaitToStop() error

WaitToStop 等待异步任务执行完成后停止

type SyncTaskManager

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

SyncTaskManager 同步任务管理器

func NewSyncTaskManager

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

func (*SyncTaskManager) ConfigFilePath

func (m *SyncTaskManager) ConfigFilePath() string

func (*SyncTaskManager) IsAllTaskCompletely added in v0.3.1

func (m *SyncTaskManager) IsAllTaskCompletely() bool

func (*SyncTaskManager) Start

func (m *SyncTaskManager) Start(tasks []*SyncTask, cycleMode CycleMode) (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