docs: document fs watcher

fs-watch
sammyette 2024-12-22 12:39:15 -04:00
parent 459c9baa89
commit 6fa8eea5e2
Signed by: sammyette
GPG Key ID: 904FC49417B44DCD
2 changed files with 23 additions and 9 deletions

View File

@ -329,6 +329,12 @@ func fstat(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext1(t.Runtime, rt.TableValue(statTbl)), nil
}
// watch(path, callback)
// Watches a path for changes made to it. For example, to monitor
// new files created in a folder.
// The callback passed 2 string arguments, the `event` and the absolute `path`
// #param path string
// #param callback function
func fwatch(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
if err := c.CheckNArgs(2); err != nil {
return nil, err

View File

@ -7,7 +7,9 @@ import (
rt "github.com/arnodel/golua/runtime"
)
type pathWatcher struct{
// #type
// Watcher type describes a `fs` library file watcher.
type watcher struct{
path string
callback *rt.Closure
paused bool
@ -16,7 +18,7 @@ type pathWatcher struct{
notifyChan chan notify.EventInfo
}
func (w *pathWatcher) start() {
func (w *watcher) start() {
if w.callback == nil || w.started {
return
}
@ -38,11 +40,14 @@ func (w *pathWatcher) start() {
}()
}
func (w *pathWatcher) stop() {
func (w *watcher) stop() {
w.started = false
notify.Stop(w.notifyChan)
}
// #member
// start()
// Start/resume file watching.
func watcherStart(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
pw, err := watcherArg(c, 0)
if err != nil {
@ -54,6 +59,9 @@ func watcherStart(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.Next(), nil
}
// #member
// stop()
// Stops watching for changes. Effectively ignores changes.
func watcherStop(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
pw, err := watcherArg(c, 0)
if err != nil {
@ -65,8 +73,8 @@ func watcherStop(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.Next(), nil
}
func newWatcher(path string, callback *rt.Closure) *pathWatcher {
pw := &pathWatcher{
func newWatcher(path string, callback *rt.Closure) *watcher {
pw := &watcher{
path: path,
callback: callback,
}
@ -76,7 +84,7 @@ func newWatcher(path string, callback *rt.Closure) *pathWatcher {
return pw
}
func watcherArg(c *rt.GoCont, arg int) (*pathWatcher, error) {
func watcherArg(c *rt.GoCont, arg int) (*watcher, error) {
j, ok := valueToWatcher(c.Arg(arg))
if !ok {
return nil, fmt.Errorf("#%d must be a watcher", arg + 1)
@ -85,17 +93,17 @@ func watcherArg(c *rt.GoCont, arg int) (*pathWatcher, error) {
return j, nil
}
func valueToWatcher(val rt.Value) (*pathWatcher, bool) {
func valueToWatcher(val rt.Value) (*watcher, bool) {
u, ok := val.TryUserData()
if !ok {
return nil, false
}
j, ok := u.Value().(*pathWatcher)
j, ok := u.Value().(*watcher)
return j, ok
}
func watcherUserData(j *pathWatcher) *rt.UserData {
func watcherUserData(j *watcher) *rt.UserData {
watcherMeta := rtmm.Registry(watcherMetaKey)
return rt.NewUserData(j, watcherMeta.AsTable())
}