mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-28 12:16:48 +08:00
68 lines
1.5 KiB
Go
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
|
|
}
|
|
}
|