@@ -20,22 +20,61 @@ Background routines (file watching and cleanup) only start when Start() is calle
2020can coexist but may conflict if configured with overlapping directories.
2121*/
2222
23- // Initialize sets up required directories
24- func (m * BackupManager ) Initialize () error {
23+ // Initialize checks for BackupDir and waits until it exists, then ensures SafeBackupDir exists.
24+ // It returns a channel that signals when initialization is complete or an error occurs.
25+ func (m * BackupManager ) Initialize () <- chan error {
2526 m .mu .Lock ()
2627 defer m .mu .Unlock ()
2728
28- if err := os .MkdirAll (m .config .BackupDir , os .ModePerm ); err != nil {
29- return err
30- }
31- return os .MkdirAll (m .config .SafeBackupDir , os .ModePerm )
29+ result := make (chan error , 1 )
30+
31+ go func () {
32+ const timeout = 90 * time .Minute
33+ const pollInterval = 1000 * time .Millisecond
34+ deadline := time .Now ().Add (timeout )
35+
36+ // Wait for BackupDir to exist
37+ for {
38+ if _ , err := os .Stat (m .config .BackupDir ); err == nil {
39+ // Directory exists, proceed
40+ break
41+ } else if ! os .IsNotExist (err ) {
42+ // An error other than "not exists" occurred
43+ result <- fmt .Errorf ("error checking backup directory %s: %v" , m .config .BackupDir , err )
44+ return
45+ }
46+
47+ if time .Now ().After (deadline ) {
48+ result <- fmt .Errorf ("timeout waiting for backup directory %s to be created" , m .config .BackupDir )
49+ return
50+ }
51+
52+ // Wait before checking again
53+ time .Sleep (pollInterval )
54+ //logger.Backup.Warn("Backup manager waiting for save folder to be created...")
55+ }
56+
57+ // Ensure SafeBackupDir exists, create it if it doesn't
58+ if err := os .MkdirAll (m .config .SafeBackupDir , os .ModePerm ); err != nil {
59+ result <- fmt .Errorf ("error creating safe backup directory %s: %v" , m .config .SafeBackupDir , err )
60+ return
61+ }
62+
63+ result <- nil // Signal successful initialization
64+ }()
65+
66+ return result
3267}
3368
3469// Start begins the backup monitoring and cleanup routines
3570func (m * BackupManager ) Start () error {
36- if err := m .Initialize (); err != nil {
37- return fmt .Errorf ("failed to initialize backup directories: %w" , err )
71+ // Wait for initialization to complete
72+ logger .Backup .Warn ("Backup manager waiting for save folder initialization..." )
73+ initResult := <- m .Initialize ()
74+ if initResult != nil {
75+ return fmt .Errorf ("failed to initialize backup manager: %w" , initResult )
3876 }
77+ logger .Backup .Warn ("Backup manager initialized" )
3978
4079 // Start file watcher
4180 watcher , err := newFsWatcher (m .config .BackupDir )
0 commit comments