@@ -15,6 +15,7 @@ import {
1515import ChromeStorage from "@App/pkg/config/chrome_storage" ;
1616import { CloudSyncConfig , SystemConfig } from "@App/pkg/config/config" ;
1717import { prepareScriptByCode } from "@App/pkg/utils/script" ;
18+ import { InfoNotification } from "@App/pkg/utils/utils" ;
1819import FileSystemFactory from "@Pkg/filesystem/factory" ;
1920import FileSystem , { File } from "@Pkg/filesystem/filesystem" ;
2021import Manager from "../manager" ;
@@ -64,7 +65,7 @@ export default class SynchronizeManager extends Manager {
6465 resourceManager : ResourceManager ,
6566 scriptManager : ScriptManager
6667 ) {
67- super ( center ) ;
68+ super ( center , "sync" ) ;
6869 this . systemConfig = systemConfig ;
6970 this . event = new SynchronizeEventListener ( this ) ;
7071 this . valueManager = valueManager ;
@@ -123,7 +124,10 @@ export default class SynchronizeManager extends Manager {
123124
124125 const freeFn : ( ( ) => void ) [ ] = [ ] ;
125126 // 监听脚本更新事件
126- const upsertFn = async ( script : Script ) => {
127+ const upsertFn = async ( script : Script , upsertBy : string ) => {
128+ if ( upsertBy === "sync" ) {
129+ return ;
130+ }
127131 await this . pushScript ( fs , script ) ;
128132 this . updateFileDigest ( fs ) ;
129133 } ;
@@ -139,14 +143,22 @@ export default class SynchronizeManager extends Manager {
139143 }
140144
141145 // 先设置死半小时同步一次吧
142- const ts = setInterval ( ( ) => {
143- this . syncOnce ( fs ) ;
146+ const ts = setInterval ( async ( ) => {
147+ try {
148+ await this . syncOnce ( fs ) ;
149+ } catch ( e : any ) {
150+ InfoNotification ( "同步失败,请检查同步配置" , e ) ;
151+ }
144152 } , 60 * 30 * 1000 ) ;
145153 freeFn . push ( ( ) => {
146154 clearInterval ( ts ) ;
147155 } ) ;
148156
149- this . syncOnce ( fs ) ;
157+ try {
158+ await this . syncOnce ( fs ) ;
159+ } catch ( e : any ) {
160+ InfoNotification ( "同步失败,请检查同步配置" , e ) ;
161+ }
150162 return Promise . resolve ( ( ) => {
151163 logger . info ( "stop cloud sync" ) ;
152164 // 当停止云同步时,移除监听
@@ -155,7 +167,7 @@ export default class SynchronizeManager extends Manager {
155167 }
156168
157169 // 同步一次
158- async syncOnce ( fs : FileSystem ) {
170+ async syncOnce ( fs : FileSystem ) : Promise < void > {
159171 this . logger . info ( "start sync once" ) ;
160172 // 首次同步
161173 const list = await fs . list ( ) ;
@@ -217,6 +229,7 @@ export default class SynchronizeManager extends Manager {
217229 // 重新获取文件列表,保存文件摘要
218230 this . logger . info ( "sync complete" ) ;
219231 await this . updateFileDigest ( fs ) ;
232+ return Promise . resolve ( ) ;
220233 }
221234
222235 async updateFileDigest ( fs : FileSystem ) {
@@ -285,12 +298,17 @@ export default class SynchronizeManager extends Manager {
285298 // 读取代码文件
286299 const r = await fs . open ( file . name ) ;
287300 const code = ( await r . read ( "string" ) ) as string ;
301+ // 读取meta文件
302+ const meta = await fs . open ( `${ uuid } .meta.json` ) ;
303+ const metaJson = ( await meta . read ( "string" ) ) as string ;
304+ const metaObj = JSON . parse ( metaJson ) as SyncMeta ;
288305 const newScript = await prepareScriptByCode (
289306 code ,
290- script ?. downloadUrl || "" ,
291- script ?. uuid || uuid || undefined
307+ script ?. downloadUrl || metaObj . downloadUrl || "" ,
308+ script ?. uuid || metaObj . uuid || undefined
292309 ) ;
293- this . scriptManager . event . upsertHandler ( newScript ) ;
310+ newScript . origin = newScript . origin || metaObj . origin ;
311+ this . scriptManager . event . upsertHandler ( newScript , "sync" ) ;
294312 logger . info ( "pull script success" ) ;
295313 } catch ( e ) {
296314 logger . error ( "pull script error" , Logger . E ( e ) ) ;
0 commit comments