Files
2025-08-17 20:19:29 +10:00

68 lines
1.5 KiB
Go

package plg_search_sqlitefts
import (
"time"
. "github.com/mickael-kerjean/filestash/server/common"
"github.com/mickael-kerjean/filestash/server/plugin/plg_search_sqlitefts/indexer"
)
func (this *Crawler) Run() {
if this.CurrentPhase == "" {
this.CurrentPhase = PHASE_EXPLORE
}
Log.Debug("Search::indexing Execute %s", this.CurrentPhase)
cycleExecute := func(fn func(indexer.Manager) bool) {
op, err := this.State.Change()
if err != nil {
Log.Warning("search::index cycle_begin (%+v)", err)
time.Sleep(5 * time.Second)
}
stopTime := time.Now().Add(time.Duration(CYCLE_TIME()) * time.Second)
for {
if fn(op) == false {
break
}
if time.Now().After(stopTime) {
this.Next()
break
}
}
if err = op.Commit(); err != nil {
Log.Warning("search::index cycle_commit (%+v)", err)
}
}
if this.CurrentPhase == PHASE_EXPLORE {
cycleExecute(this.Discover)
return
} else if this.CurrentPhase == PHASE_INDEXING {
cycleExecute(this.Indexing)
return
} else if this.CurrentPhase == PHASE_MAINTAIN {
cycleExecute(this.Consolidate)
return
} else if this.CurrentPhase == PHASE_PAUSE {
time.Sleep(5 * time.Second)
this.Next()
}
return
}
func (this *Crawler) Close() error {
return this.State.Close()
}
func (this *Crawler) Next() {
switch this.CurrentPhase {
case PHASE_EXPLORE:
this.CurrentPhase = PHASE_INDEXING
case PHASE_INDEXING:
this.CurrentPhase = PHASE_MAINTAIN
case PHASE_MAINTAIN:
this.CurrentPhase = PHASE_PAUSE
case PHASE_PAUSE:
this.CurrentPhase = PHASE_EXPLORE
}
}