diff --git a/assets/plugin/js/download_handler.js.sample b/assets/plugin/js/download_handler.js.sample index 85d097e..fbd856b 100755 --- a/assets/plugin/js/download_handler.js.sample +++ b/assets/plugin/js/download_handler.js.sample @@ -12,12 +12,12 @@ // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -28,14 +28,14 @@ // // params - 文件下载前参数 // { -// "driveId": "19519221", -// "driveFileName": "token.bat", -// "driveFilePath": "/aliyunpan/Downloads/token.bat", -// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", -// "driveFileSize": 125330, -// "driveFileType": "file", -// "driveFileUpdatedAt": "2022-04-14 07:05:12", -// "localFilePath": "aliyunpan\\Downloads\\token.bat" +// "driveId": "19519221", +// "driveFileName": "token.bat", +// "driveFilePath": "/aliyunpan/Downloads/token.bat", +// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", +// "driveFileSize": 125330, +// "driveFileType": "file", +// "driveFileUpdatedAt": "2022-04-14 07:05:12", +// "localFilePath": "aliyunpan\\Downloads\\token.bat" // } // driveId - 网盘ID // driveFileName - 网盘文件名 @@ -48,8 +48,8 @@ // // 返回值说明 // { -// "downloadApproved": "yes", -// "localFilePath": "newfolder\\token.bat" +// "downloadApproved": "yes", +// "localFilePath": "newfolder\\token.bat" // } // downloadApproved - 该文件是否下载,yes-确认下载,no-取消下载 // localFilePath - 文件保存的本地路径,这个是相对路径,如果为空""代表保持原本的目标路径。 @@ -83,12 +83,12 @@ function downloadFilePrepareCallback(context, params) { // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -99,15 +99,15 @@ function downloadFilePrepareCallback(context, params) { // // params - 文件下载结束参数 // { -// "driveId": "19519221", -// "driveFileName": "token.bat", -// "driveFilePath": "/aliyunpan/Downloads/token.bat", -// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", -// "driveFileSize": 125330, -// "driveFileType": "file", -// "driveFileUpdatedAt": "2022-04-14 07:05:12", +// "driveId": "19519221", +// "driveFileName": "token.bat", +// "driveFilePath": "/aliyunpan/Downloads/token.bat", +// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", +// "driveFileSize": 125330, +// "driveFileType": "file", +// "driveFileUpdatedAt": "2022-04-14 07:05:12", // "downloadResult": "success", -// "localFilePath": "aliyunpan\\Downloads\\token.bat" +// "localFilePath": "aliyunpan\\Downloads\\token.bat" // } // driveId - 网盘ID // driveFileName - 网盘文件名 diff --git a/assets/plugin/js/sync_handler.js.sample b/assets/plugin/js/sync_handler.js.sample index 38b9fb4..d8bccd0 100644 --- a/assets/plugin/js/sync_handler.js.sample +++ b/assets/plugin/js/sync_handler.js.sample @@ -12,12 +12,12 @@ // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -28,12 +28,12 @@ // // params - 扫描本地文件前参数 // { -// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", -// "localFileName": "token.bat", -// "localFileSize": 125330, -// "localFileType": "file", -// "localFileUpdatedAt": "2022-04-14 07:05:12", -// "driveId": "19519221" +// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", +// "localFileName": "token.bat", +// "localFileSize": 125330, +// "localFileType": "file", +// "localFileUpdatedAt": "2022-04-14 07:05:12", +// "driveId": "19519221" // } // localFilePath - 本地文件绝对完整路径 // localFileName - 本地文件名 @@ -44,13 +44,13 @@ // // 返回值说明 // { -// "syncScanLocalApproved": "yes" +// "syncScanLocalApproved": "yes" // } // syncScanLocalApproved - 该文件是否确认扫描,yes-允许扫描,no-禁止扫描。 // 禁止扫描的文件不会执行后续的动作,例如上传,下载。 // ------------------------------------------------------------------------------------------ function syncScanLocalFilePrepareCallback(context, params) { - console.log(params); + console.log(params); var result = { "syncScanLocalApproved": "yes" }; @@ -60,7 +60,7 @@ function syncScanLocalFilePrepareCallback(context, params) { result["syncScanLocalApproved"] = "no"; } - // 禁止~$开头文件上传(office暂存临时文件) + // 禁止~$开头文件上传(office暂存临时文件) if (params["localFileName"].indexOf("~$") == 0) { result["syncScanLocalApproved"] = "no"; } @@ -74,9 +74,9 @@ function syncScanLocalFilePrepareCallback(context, params) { if (params["localFileName"] == "password.key") { result["syncScanLocalApproved"] = "no"; } - - // 禁止@eadir文件上传 - if (params["localFileName"] == "@eadir") { + + // 禁止@eadir文件上传 + if (params["localFileName"] == "@eadir") { result["syncScanLocalApproved"] = "no"; } return result; @@ -89,12 +89,12 @@ function syncScanLocalFilePrepareCallback(context, params) { // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -105,13 +105,13 @@ function syncScanLocalFilePrepareCallback(context, params) { // // params - 扫描云盘文件前参数 // { -// "driveId": "19519221", -// "driveFileName": "token.bat", -// "driveFilePath": "/aliyunpan/Downloads/token.bat", -// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", -// "driveFileSize": 125330, -// "driveFileType": "file", -// "driveFileUpdatedAt": "2022-04-14 07:05:12" +// "driveId": "19519221", +// "driveFileName": "token.bat", +// "driveFilePath": "/aliyunpan/Downloads/token.bat", +// "driveFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", +// "driveFileSize": 125330, +// "driveFileType": "file", +// "driveFileUpdatedAt": "2022-04-14 07:05:12" // } // driveId - 网盘ID // driveFileName - 网盘文件名 @@ -123,7 +123,7 @@ function syncScanLocalFilePrepareCallback(context, params) { // // 返回值说明 // { -// "syncScanPanApproved": "yes" +// "syncScanPanApproved": "yes" // } // syncScanPanApproved - 该文件是否确认扫描,yes-允许扫描,no-禁止扫描。 // 禁止扫描的文件不会执行后续的动作,例如上传,下载。 @@ -159,12 +159,12 @@ function syncScanPanFilePrepareCallback(context, params) { // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -175,15 +175,15 @@ function syncScanPanFilePrepareCallback(context, params) { // // params - 同步文件后的参数 // { -// "action": "upload", -// "actionResult": "success", -// "driveId": "19519221", -// "fileName": "1.txt", -// "filePath": "D:/goprojects/dev/upload/1.txt", -// "fileSha1": "294C8F24C56042710813E95C55A0B018299BA9A7", -// "fileSize": "28077", -// "fileType": "file", -// "fileUpdatedAt": "2022-03-04 15:19:47" +// "action": "upload", +// "actionResult": "success", +// "driveId": "19519221", +// "fileName": "1.txt", +// "filePath": "D:/goprojects/dev/upload/1.txt", +// "fileSha1": "294C8F24C56042710813E95C55A0B018299BA9A7", +// "fileSize": "28077", +// "fileType": "file", +// "fileUpdatedAt": "2022-03-04 15:19:47" // } // action - 同步动作, // download-下载文件, @@ -205,5 +205,54 @@ function syncScanPanFilePrepareCallback(context, params) { // (无) // ------------------------------------------------------------------------------------------ function syncFileFinishCallback(context, params) { - console.log(params) + console.log(params) +} + +// ------------------------------------------------------------------------------------------ +// 函数说明:同步备份-同步任务同步全部文件完成时的回调函数(目前只有"只运行一次备份"的任务模式才有该回调) +// +// 参数说明 +// context - 当前调用的上下文信息 +// { +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" +// } +// appName - 应用名称,当前固定为aliyunpan +// version - 版本号 +// userId - 当前登录用户的ID +// nickname - 用户昵称 +// fileDriveId - 用户文件网盘ID +// albumDriveId - 用户相册网盘ID +// +// params - 任务完成的回调参数 +// { +// "name": "备份相册", +// "id": "2e959a34-8435-4773-9a3e-687f2692ddc1", +// "userId": "4d001d48564f43b3bc5662874114bbe6", +// "driveName": "backup", +// "driveId": "19519221", +// "localFolderPath": "/Volumes/DataDisk3T/Games/Switch/图库备份", +// "panFolderPath": "/备份盘/Switch游戏/Album", +// "mode": "upload", +// "policy": "upload", +// } +// name - 任务名称 +// id - 任务ID +// userId - 登录的用户ID +// driveName - 网盘名称,backup-备份盘,resource-资源盘 +// driveId - 目标网盘ID +// localFolderPath - 本地目录 +// panFolderPath - 云盘目录 +// mode - 备份模式,upload-备份本地文件到云盘,download-备份云盘文件到本地 +// policy - 备份策略,increment-增量备份,exclusive-排他备份 +// +// 返回值说明 +// 无 +// ------------------------------------------------------------------------------------------ +function syncAllFileFinishCallback(context, params) { + console.log(params) } \ No newline at end of file diff --git a/assets/plugin/js/token_handler.js.sample b/assets/plugin/js/token_handler.js.sample index 578c5d9..9e5635c 100644 --- a/assets/plugin/js/token_handler.js.sample +++ b/assets/plugin/js/token_handler.js.sample @@ -12,12 +12,12 @@ // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -28,11 +28,11 @@ // // params - Token刷新参数 // { -// "result": "success", -// "message": "ok", -// "oldToken": "aa31fcc229c54d5ab6d8bfb17aff3711", -// "newToken": "bb31fcc229c54d5ab6d8bfb17aff3722", -// "updatedAt": "2022-04-14 07:05:12" +// "result": "success", +// "message": "ok", +// "oldToken": "aa31fcc229c54d5ab6d8bfb17aff3711", +// "newToken": "bb31fcc229c54d5ab6d8bfb17aff3722", +// "updatedAt": "2022-04-14 07:05:12" // } // result - Token刷新的结果,success-成功,fail-失败 // message - 消息说明,如果失败这里会有原因说明 diff --git a/assets/plugin/js/upload_handler.js.sample b/assets/plugin/js/upload_handler.js.sample index e50a61d..8840d53 100644 --- a/assets/plugin/js/upload_handler.js.sample +++ b/assets/plugin/js/upload_handler.js.sample @@ -12,12 +12,12 @@ // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -28,13 +28,13 @@ // // params - 文件上传前参数 // { -// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", -// "localFileName": "token.bat", -// "localFileSize": 125330, -// "localFileType": "file", -// "localFileUpdatedAt": "2022-04-14 07:05:12", -// "driveId": "19519221", -// "driveFilePath": "aliyunpan/Downloads/token.bat" +// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", +// "localFileName": "token.bat", +// "localFileSize": 125330, +// "localFileType": "file", +// "localFileUpdatedAt": "2022-04-14 07:05:12", +// "driveId": "19519221", +// "driveFilePath": "aliyunpan/Downloads/token.bat" // } // localFilePath - 本地文件绝对完整路径 // localFileName - 本地文件名 @@ -46,8 +46,8 @@ // // 返回值说明 // { -// "uploadApproved": "yes", -// "driveFilePath": "newfolder/token.bat" +// "uploadApproved": "yes", +// "driveFilePath": "newfolder/token.bat" // } // uploadApproved - 该文件是否确认上传,yes-允许上传,no-禁止上传 // driveFilePath - 文件保存的网盘路径,这个是相对路径,如果为空""代表保持原本的目标路径。 @@ -84,12 +84,12 @@ function uploadFilePrepareCallback(context, params) { // 参数说明 // context - 当前调用的上下文信息 // { -// "appName": "aliyunpan", -// "version": "v0.1.3", -// "userId": "11001d48564f43b3bc5662874f04bb11", -// "nickname": "tickstep", -// "fileDriveId": "19519111", -// "albumDriveId": "29519122" +// "appName": "aliyunpan", +// "version": "v0.1.3", +// "userId": "11001d48564f43b3bc5662874f04bb11", +// "nickname": "tickstep", +// "fileDriveId": "19519111", +// "albumDriveId": "29519122" // } // appName - 应用名称,当前固定为aliyunpan // version - 版本号 @@ -100,15 +100,15 @@ function uploadFilePrepareCallback(context, params) { // // params - 文件上传结束参数 // { -// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", -// "localFileName": "token.bat", -// "localFileSize": 125330, -// "localFileType": "file", -// "localFileUpdatedAt": "2022-04-14 07:05:12", -// "localFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", -// "uploadResult": "success", -// "driveId": "19519221", -// "driveFilePath": "/tmp/test/aliyunpan/Downloads/token.bat" +// "localFilePath": "D:\\Program Files\\aliyunpan\\Downloads\\token.bat", +// "localFileName": "token.bat", +// "localFileSize": 125330, +// "localFileType": "file", +// "localFileUpdatedAt": "2022-04-14 07:05:12", +// "localFileSha1": "08FBE28A5B8791A2F50225E2EC5CEEC3C7955A11", +// "uploadResult": "success", +// "driveId": "19519221", +// "driveFilePath": "/tmp/test/aliyunpan/Downloads/token.bat" // } // localFilePath - 本地文件绝对完整路径 // localFileName - 本地文件名 diff --git a/internal/command/sync.go b/internal/command/sync.go index 0dc7092..6332d23 100644 --- a/internal/command/sync.go +++ b/internal/command/sync.go @@ -398,6 +398,7 @@ func RunSync(defaultTask *syncdrive.SyncTask, cycleMode syncdrive.CycleMode, fil } time.Sleep(5 * time.Second) } + syncMgr.DoTaskSyncCompletelyPluginCallback() } } else { if cycleMode == syncdrive.CycleInfiniteLoop { @@ -423,6 +424,7 @@ func RunSync(defaultTask *syncdrive.SyncTask, cycleMode syncdrive.CycleMode, fil } time.Sleep(5 * time.Second) } + syncMgr.DoTaskSyncCompletelyPluginCallback() } } diff --git a/internal/plugins/idle_plugin.go b/internal/plugins/idle_plugin.go index 111aede..4f52810 100644 --- a/internal/plugins/idle_plugin.go +++ b/internal/plugins/idle_plugin.go @@ -44,6 +44,9 @@ func (p *IdlePlugin) SyncFileFinishCallback(context *Context, params *SyncFileFi return nil } +func (p *IdlePlugin) SyncAllFileFinishCallback(context *Context, params *SyncAllFileFinishParams) error { + return nil +} func (p *IdlePlugin) UserTokenRefreshFinishCallback(context *Context, params *UserTokenRefreshFinishParams) error { return nil } diff --git a/internal/plugins/js_plugin.go b/internal/plugins/js_plugin.go index 3a9d879..5f35020 100644 --- a/internal/plugins/js_plugin.go +++ b/internal/plugins/js_plugin.go @@ -223,6 +223,26 @@ func (js *JsPlugin) SyncFileFinishCallback(context *Context, params *SyncFileFin return nil } +// SyncAllFileFinishCallback 同步备份-同步全部文件完成时的回调函数 +func (js *JsPlugin) SyncAllFileFinishCallback(context *Context, params *SyncAllFileFinishParams) error { + var fn func(*Context, *SyncAllFileFinishParams) error + if !js.isHandlerFuncExisted("syncAllFileFinishCallback") { + return nil + } + err := js.vm.ExportTo(js.vm.Get("syncAllFileFinishCallback"), &fn) + if err != nil { + logger.Verboseln("Js函数映射到 Go 函数失败!") + return nil + } + er := fn(context, params) + if er != nil { + logger.Verboseln(er) + return nil + } + return nil +} + +// UserTokenRefreshFinishCallback 用户Token刷新完成后回调函数 func (js *JsPlugin) UserTokenRefreshFinishCallback(context *Context, params *UserTokenRefreshFinishParams) error { var fn func(*Context, *UserTokenRefreshFinishParams) error if !js.isHandlerFuncExisted("userTokenRefreshFinishCallback") { diff --git a/internal/plugins/plugin.go b/internal/plugins/plugin.go index 4f510b9..5b846f5 100644 --- a/internal/plugins/plugin.go +++ b/internal/plugins/plugin.go @@ -122,7 +122,7 @@ type ( SyncScanPanApproved string `json:"syncScanPanApproved"` } - // SyncFileFinishParams 同步备份-文件同步结束-回调参数 + // SyncFileFinishParams 同步备份-一个文件同步结束-回调参数 SyncFileFinishParams struct { Action string `json:"action"` ActionResult string `json:"actionResult"` @@ -135,6 +135,28 @@ type ( FileUpdatedAt string `json:"fileUpdatedAt"` } + // SyncAllFileFinishParams 同步备份-全部文件同步结束-回调参数 + SyncAllFileFinishParams 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:"driveId"` + // LocalFolderPath 本地目录 + LocalFolderPath string `json:"localFolderPath"` + // PanFolderPath 云盘目录 + PanFolderPath string `json:"panFolderPath"` + // Mode 备份模式 + Mode string `json:"mode"` + // Policy 备份策略 + Policy string `json:"policy"` + } + // UserTokenRefreshFinishParams 用户Token刷新完成后回调函数 UserTokenRefreshFinishParams struct { Result string `json:"result"` @@ -170,6 +192,9 @@ type ( // SyncFileFinishCallback 同步备份-同步一个文件完成时的回调函数 SyncFileFinishCallback(context *Context, params *SyncFileFinishParams) error + // SyncAllFileFinishCallback 同步备份-同步全部文件完成时的回调函数 + SyncAllFileFinishCallback(context *Context, params *SyncAllFileFinishParams) error + // UserTokenRefreshFinishCallback 用户Token刷新完成后回调函数 UserTokenRefreshFinishCallback(context *Context, params *UserTokenRefreshFinishParams) error diff --git a/internal/syncdrive/file_action_task_mgr.go b/internal/syncdrive/file_action_task_mgr.go index 037f580..b475824 100644 --- a/internal/syncdrive/file_action_task_mgr.go +++ b/internal/syncdrive/file_action_task_mgr.go @@ -271,7 +271,6 @@ func (f *FileActionTaskManager) doFileDiffRoutine(localFiles LocalFileList, panF // 本地文件和云盘文件SHA1不一样 // 不同模式同步策略不一样 if f.task.Mode == Upload { - // 不再这里计算SHA1,待到上传的时候再计算 //if localFile.Sha1Hash == "" { // // 计算本地文件SHA1 diff --git a/internal/syncdrive/sync_task.go b/internal/syncdrive/sync_task.go index ed50cf0..bad26f9 100644 --- a/internal/syncdrive/sync_task.go +++ b/internal/syncdrive/sync_task.go @@ -803,3 +803,24 @@ func (t *SyncTask) scanPanFile(ctx context.Context) { } } } + +// doAllFileSyncPluginCallback 全部文件同步完成回调方法 +func (t *SyncTask) doAllFileSyncPluginCallback() { + // 插件回调 + pluginParam := &plugins.SyncAllFileFinishParams{ + Name: t.Name, + Id: t.Id, + UserId: t.UserId, + DriveName: t.DriveName, + DriveId: t.DriveId, + LocalFolderPath: t.LocalFolderPath, + PanFolderPath: t.PanFolderPath, + Mode: string(t.Mode), + Policy: string(t.Policy), + } + t.pluginMutex.Lock() + defer t.pluginMutex.Unlock() + if er := t.plugin.SyncAllFileFinishCallback(plugins.GetContext(t.panUser), pluginParam); er == nil { + logger.Verboseln("成功调用同步任务完成插件回调方法:" + t.Id) + } +} diff --git a/internal/syncdrive/sync_task_mgr.go b/internal/syncdrive/sync_task_mgr.go index 37f244f..7538970 100644 --- a/internal/syncdrive/sync_task_mgr.go +++ b/internal/syncdrive/sync_task_mgr.go @@ -235,3 +235,12 @@ func (m *SyncTaskManager) IsAllTaskCompletely() bool { } return true } + +// DoTaskSyncCompletelyPluginCallback 调用任务同步完成的回调函数 +func (m *SyncTaskManager) DoTaskSyncCompletelyPluginCallback() { + for _, task := range m.syncDriveConfig.SyncTaskList { + if task.IsTaskCompletely() { + task.doAllFileSyncPluginCallback() + } + } +}