86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
package watchers
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"sync"
|
|
|
|
"Moonshark/logger"
|
|
"Moonshark/router"
|
|
"Moonshark/runner"
|
|
|
|
"git.sharkk.net/Go/Color"
|
|
)
|
|
|
|
// Global watcher manager instance with explicit creation
|
|
var (
|
|
globalManager *WatcherManager
|
|
globalManagerOnce sync.Once
|
|
)
|
|
|
|
// GetWatcherManager returns the global watcher manager, creating it if needed
|
|
func GetWatcherManager() *WatcherManager {
|
|
globalManagerOnce.Do(func() {
|
|
globalManager = NewWatcherManager(DefaultPollInterval)
|
|
})
|
|
return globalManager
|
|
}
|
|
|
|
// ShutdownWatcherManager closes the global watcher manager if it exists
|
|
func ShutdownWatcherManager() {
|
|
if globalManager != nil {
|
|
globalManager.Close()
|
|
globalManager = nil
|
|
}
|
|
}
|
|
|
|
// WatchLuaRouter sets up a watcher for a LuaRouter's routes directory
|
|
func WatchLuaRouter(router *router.Router, runner *runner.Runner, routesDir string) (*DirectoryWatcher, error) {
|
|
manager := GetWatcherManager()
|
|
|
|
config := DirectoryWatcherConfig{
|
|
Dir: routesDir,
|
|
Callback: router.Refresh,
|
|
Recursive: true,
|
|
}
|
|
|
|
watcher, err := manager.WatchDirectory(config)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to watch directory: %w", err)
|
|
}
|
|
|
|
logger.Infof("Started watching Lua routes! %s", color.Yellow(routesDir))
|
|
return watcher, nil
|
|
}
|
|
|
|
// WatchLuaModules sets up watchers for Lua module directories
|
|
func WatchLuaModules(luaRunner *runner.Runner, libDirs []string) ([]*DirectoryWatcher, error) {
|
|
manager := GetWatcherManager()
|
|
watchers := make([]*DirectoryWatcher, 0, len(libDirs))
|
|
|
|
for _, dir := range libDirs {
|
|
config := DirectoryWatcherConfig{
|
|
Dir: dir,
|
|
EnhancedCallback: func(changes []FileChange) error {
|
|
for _, change := range changes {
|
|
if !change.IsDeleted && strings.HasSuffix(change.Path, ".lua") {
|
|
luaRunner.NotifyFileChanged(change.Path)
|
|
}
|
|
}
|
|
return nil
|
|
},
|
|
Recursive: true,
|
|
}
|
|
|
|
watcher, err := manager.WatchDirectory(config)
|
|
if err != nil {
|
|
// Error handling...
|
|
}
|
|
|
|
watchers = append(watchers, watcher)
|
|
logger.Infof("Started watching Lua modules! %s", color.Yellow(dir))
|
|
}
|
|
|
|
return watchers, nil
|
|
}
|