11import path , { join , win32 } from "path" ;
22import fs from "fs" ;
33import { Watcher } from "./watcher/watcher" ;
4- import { ExtraCallbacks , InputSyncCallbacks } from "./types/callbacks.type" ;
4+ import { Callbacks } from "./types/callbacks.type" ;
55import { Status } from "./types/placeholder.type" ;
66import { IQueueManager } from "./queue/queueManager" ;
77
88import { createLogger } from "./logger" ;
99import { Addon } from "./addon-wrapper" ;
10+ import { getPlaceholderStates } from "./get-placeholder-states" ;
11+ import winston from "winston" ;
1012
1113const addon = new Addon ( ) ;
1214
13- type Callbacks = InputSyncCallbacks & ExtraCallbacks ;
15+ const PLACEHOLDER_ATTRIBUTES = {
16+ FILE_ATTRIBUTE_READONLY : 0x1 ,
17+ FILE_ATTRIBUTE_HIDDEN : 0x2 ,
18+ FOLDER_ATTRIBUTE_READONLY : 0x1 ,
19+ FILE_ATTRIBUTE_NORMAL : 0x1 ,
20+ } ;
21+
1422class VirtualDrive {
15- PLACEHOLDER_ATTRIBUTES : { [ key : string ] : number } ;
1623 syncRootPath : string ;
17- callbacks ?: Callbacks ;
18-
19- // private watcherBuilder: WatcherBuilder;
20- private watcher : Watcher ;
21-
22- constructor ( syncRootPath : string , loggerPath ?: string ) {
23- this . PLACEHOLDER_ATTRIBUTES = {
24- FILE_ATTRIBUTE_READONLY : 0x1 ,
25- FILE_ATTRIBUTE_HIDDEN : 0x2 ,
26- FOLDER_ATTRIBUTE_READONLY : 0x1 ,
27- FILE_ATTRIBUTE_NORMAL : 0x1 ,
28- } ;
24+ callbacks ! : Callbacks ;
25+ watcher = new Watcher ( ) ;
26+ logger : winston . Logger ;
2927
28+ constructor ( syncRootPath : string , loggerPath : string ) {
3029 // TODO: getPlaceholderStates in the beginning
3130
3231 this . watcher = new Watcher ( ) ;
3332
34- this . syncRootPath = syncRootPath ;
33+ this . syncRootPath = this . convertToWindowsPath ( syncRootPath ) ;
34+ loggerPath = this . convertToWindowsPath ( loggerPath ) ;
3535 this . createSyncRootFolder ( ) ;
36-
37- let pathElements = this . syncRootPath . split ( "\\\\" ) ;
38- pathElements . pop ( ) ;
39- let parentPath = pathElements . join ( "\\\\" ) ;
40-
41- this . addLoggerPath ( loggerPath ?? parentPath ) ;
36+ this . addLoggerPath ( loggerPath ) ;
37+ this . logger = createLogger ( loggerPath ) ;
4238 }
4339
4440 addLoggerPath ( logPath : string ) {
@@ -66,39 +62,6 @@ class VirtualDrive {
6662 return addon . getPlaceholderWithStatePending ( ) ;
6763 }
6864
69- getInputSyncCallbacks ( ) : InputSyncCallbacks {
70- if ( this . callbacks === undefined ) {
71- throw new Error ( "Callbacks are not defined" ) ;
72- }
73-
74- const inputSyncCallbackKeys : ( keyof InputSyncCallbacks ) [ ] = [
75- "fetchDataCallback" ,
76- "validateDataCallback" ,
77- "cancelFetchDataCallback" ,
78- "fetchPlaceholdersCallback" ,
79- "cancelFetchPlaceholdersCallback" ,
80- "notifyFileOpenCompletionCallback" ,
81- "notifyFileCloseCompletionCallback" ,
82- "notifyDehydrateCallback" ,
83- "notifyDehydrateCompletionCallback" ,
84- "notifyDeleteCallback" ,
85- "notifyDeleteCompletionCallback" ,
86- "notifyRenameCallback" ,
87- "notifyRenameCompletionCallback" ,
88- "noneCallback" ,
89- ] ;
90-
91- const result : InputSyncCallbacks = { } ;
92-
93- for ( const key of inputSyncCallbackKeys ) {
94- if ( this . callbacks [ key ] !== undefined ) {
95- result [ key ] = this . callbacks [ key ] ;
96- }
97- }
98-
99- return result ;
100- }
101-
10265 createSyncRootFolder ( ) {
10366 if ( ! fs . existsSync ( this . syncRootPath ) ) {
10467 fs . mkdirSync ( this . syncRootPath , { recursive : true } ) ;
@@ -117,8 +80,12 @@ class VirtualDrive {
11780 return addon . deleteFileSyncRoot ( { path : this . fixPath ( relativePath ) } ) ;
11881 }
11982
120- async connectSyncRoot ( ) : Promise < any > {
121- return addon . connectSyncRoot ( { callbacks : this . getInputSyncCallbacks ( ) } ) ;
83+ async connectSyncRoot ( ) {
84+ if ( this . callbacks === undefined ) {
85+ throw new Error ( "Callbacks are not defined" ) ;
86+ }
87+
88+ return addon . connectSyncRoot ( { callbacks : this . callbacks } ) ;
12289 }
12390
12491 createPlaceholderFile (
@@ -193,11 +160,18 @@ class VirtualDrive {
193160 this . callbacks = {
194161 ...callbacks ,
195162 fetchDataCallback : ( ...args ) => {
196- const path = args [ 0 ] ;
197- this . watcher . fileInDevice . add ( path ) ;
163+ const id = args [ 0 ] ;
164+ this . watcher . fileInDevice . add ( id ) ;
198165 return callbacks . fetchDataCallback ?.( ...args ) ;
199166 }
200167 } ;
168+
169+ try {
170+ await getPlaceholderStates ( { self : this , path : this . syncRootPath } ) ;
171+ } catch ( exc ) {
172+ this . logger . error ( "getPlaceholderStates" , exc )
173+ }
174+
201175 return addon . registerSyncRoot ( {
202176 syncRootPath : this . syncRootPath ,
203177 providerName,
@@ -227,7 +201,7 @@ class VirtualDrive {
227201
228202 this . watcher . queueManager = queueManager ;
229203
230- this . watcher . logger = createLogger ( loggerPath ) ;
204+ this . watcher . logger = this . logger ;
231205
232206 this . watcher . syncRootPath = path ;
233207 this . watcher . options = {
@@ -271,7 +245,7 @@ class VirtualDrive {
271245 path . basename ( fullPath ) ,
272246 itemId ,
273247 size ,
274- this . PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
248+ PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
275249 creationTime ,
276250 lastWriteTime ,
277251 Date . now ( ) ,
@@ -304,7 +278,7 @@ class VirtualDrive {
304278 itemId ,
305279 true ,
306280 size ,
307- this . PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
281+ PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
308282 creationTime ,
309283 lastWriteTime ,
310284 Date . now ( ) ,
@@ -338,7 +312,7 @@ class VirtualDrive {
338312 itemId ,
339313 true ,
340314 size ,
341- this . PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
315+ PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
342316 creationTime ,
343317 lastWriteTime ,
344318 Date . now ( ) ,
@@ -364,7 +338,7 @@ class VirtualDrive {
364338 itemId ,
365339 true ,
366340 0 ,
367- this . PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
341+ PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
368342 Date . now ( ) ,
369343 Date . now ( ) ,
370344 Date . now ( ) ,
@@ -378,7 +352,7 @@ class VirtualDrive {
378352 path . basename ( fullPath ) ,
379353 itemId ,
380354 size ,
381- this . PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
355+ PLACEHOLDER_ATTRIBUTES . FILE_ATTRIBUTE_NORMAL ,
382356 creationTime ,
383357 lastWriteTime ,
384358 Date . now ( ) ,
0 commit comments