171 lines
4.6 KiB
Plaintext
171 lines
4.6 KiB
Plaintext
; Initialize variables if they don't exist
|
|
#if {%defined(ClientVersion)=0} {#var ClientVersion 0}
|
|
#if {%defined(AutomaticUpdate)=0} {#var AutomaticUpdate "disabled"}
|
|
#var SoundStatus {}
|
|
#var SoundStatusPrev {}
|
|
#var SyncUpdatePending 0
|
|
#file 4 sound_status.txt;
|
|
#write 4 { };
|
|
#close 4;
|
|
#file 4 sound_error.txt;
|
|
#write 4 { };
|
|
#close 4;
|
|
; Version Checking Triggers
|
|
|
|
; Captures lines like: "$soundpack vip last version: 13"
|
|
#trigger {$soundpack &SyncType last version: &SyncVer} {
|
|
#gagline all;
|
|
|
|
; Only check vip version
|
|
#if {@SyncType = "vip"} {
|
|
#say {Updator: Checking @SyncType version. Local: @ClientVersion, Remote: @SyncVer};
|
|
|
|
; Check if update needed
|
|
#if {@ClientVersion < @SyncVer} {
|
|
#say {Updator: Update available for @SyncType.};
|
|
#if {@AutomaticUpdate="enabled"} {PerformUpdate}
|
|
} {
|
|
#say {Updator: @SyncType is up to date.}
|
|
}
|
|
}
|
|
}
|
|
|
|
; Update Automation
|
|
|
|
#alias PerformUpdate {
|
|
#if {@SyncUpdatePending = 0} {
|
|
#var SyncUpdatePending 1;
|
|
; Force refresh
|
|
#var SoundStatusPrev {};
|
|
|
|
; Ensure monitor is running
|
|
StartSyncMonitor;
|
|
|
|
#say {Updator: Initiating script update sequence...};
|
|
|
|
; Step 1: Write command to sound_error.txt
|
|
#DelFile {sound_error.txt};
|
|
#file 4 sound_error.txt;
|
|
#write 4 {update_scripts};
|
|
#close 4;
|
|
|
|
; Step 2: Trigger the external updater
|
|
LaunchSoundSync;
|
|
|
|
#say {Updator: Update request sent to background process.};
|
|
|
|
; Reset pending flag after a delay
|
|
#alarm 30 {#var SyncUpdatePending 0}
|
|
} {
|
|
#say {Updator: Update already in progress.}
|
|
}
|
|
}
|
|
|
|
#alias FetchSound {
|
|
#var SoundFile %0;
|
|
; Force refresh so we see the status even if unchanged
|
|
#var SoundStatusPrev {};
|
|
|
|
; Ensure monitor is running
|
|
StartSyncMonitor;
|
|
|
|
#say {Updator: Requesting download for: @SoundFile};
|
|
|
|
#DelFile {sound_error.txt};
|
|
#file 4 sound_error.txt;
|
|
#write 4 {%RTrim(@SoundFile).wav};
|
|
#close 4;
|
|
|
|
LaunchSoundSync
|
|
}
|
|
|
|
#alias LaunchSoundSync {
|
|
#config editor {%homefolder\SoundSync.exe};
|
|
#edit sound_error.txt;
|
|
#config editor notepad.exe
|
|
}
|
|
|
|
; Sync Monitor Loop
|
|
|
|
#alias StartSyncMonitor {
|
|
#var SoundStatusPrev {};
|
|
|
|
; Clear existing status file to prevent catching stale "Finished" signals
|
|
#DelFile {sound_status.txt};
|
|
#file 10 sound_status.txt;
|
|
#write 10 { } 1;
|
|
#close 10;
|
|
#alarm SyncMonitor -0.1 {
|
|
CheckSyncStatus
|
|
}
|
|
}
|
|
|
|
#alias StopSyncMonitor {
|
|
#unalarm SyncMonitor;
|
|
}
|
|
|
|
#alias CheckSyncStatus {
|
|
; Read status file using handle 5 (Sequential)
|
|
#file 5 sound_status.txt;
|
|
#read 5 CurrentStatus;
|
|
#close 5;
|
|
|
|
; Guard against empty reads or EOF
|
|
#if {@CurrentStatus = "[EOF]" OR @CurrentStatus = ""} {
|
|
; parsing failed or empty, skip this cycle
|
|
} {
|
|
; Process only if status changed
|
|
#if {@CurrentStatus <> @SoundStatusPrev} {
|
|
; Update prev status IMMEDIATELY to prevent looping if subsequent commands error out
|
|
#var SoundStatusPrev @CurrentStatus;
|
|
|
|
#var StatusCode {%word(@CurrentStatus,"|",1)};
|
|
#var StatusMsg {%word(@CurrentStatus,"|",2)};
|
|
|
|
; Detailed Notification
|
|
#if {%pos("Downloading", "@StatusCode") > 0} {
|
|
#say {Updator: Downloading - @StatusMsg}
|
|
};
|
|
#if {%pos("Downloaded", "@StatusCode") > 0} {
|
|
#say {Updator: Completed - @StatusMsg}
|
|
};
|
|
#if {%pos("Extracting", "@StatusCode") > 0} {
|
|
#say {Updator: Extracting - @StatusMsg}
|
|
};
|
|
#if {%pos("Failed", "@StatusCode") > 0 OR %pos("404", "@StatusCode") > 0 OR %pos("Timeout", "@StatusCode") > 0} {
|
|
#say {Updator: Error - @StatusCode: @StatusMsg}
|
|
};
|
|
#if {%pos("Finished", "@StatusCode") > 0} {
|
|
#say {Updator: All downloads finished.};
|
|
StopSyncMonitor
|
|
};
|
|
|
|
; Handle specific states
|
|
#if {%pos("Downloaded", "@StatusCode") > 0} {
|
|
HandleDownloadSuccess @StatusMsg
|
|
};
|
|
|
|
#if {%pos("Failed", "@StatusCode") > 0 OR %pos("404", "@StatusCode") > 0 OR %pos("Timeout", "@StatusCode") > 0} {
|
|
#play {@sppath/general/misc/boop.wav} @vol
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
#alias HandleDownloadSuccess {
|
|
#var DownloadedFile %0;
|
|
|
|
; Use %pos for maximum robustness. It ignores spaces and underscores.
|
|
; Checking for "Scripts" anywhere in the name.
|
|
#if {%pos("Scripts", "@DownloadedFile") > 0} {
|
|
#say {Updator: Scripts successfully updated! Reloading...};
|
|
#play {@sppath/general/misc/spannouncement.wav} @vol;
|
|
StopSyncMonitor;
|
|
#var SyncUpdatePending 0;
|
|
spreload
|
|
} {
|
|
; It's a sound file
|
|
#say {Updator: NEW SOUND: @DownloadedFile};
|
|
echo @faildsound;
|
|
}
|
|
} |