replace zxq.co/ripple/hanayo
This commit is contained in:
82
vendor/github.com/osuripple/cheesegull/dbmirror/discover.go
generated
vendored
Normal file
82
vendor/github.com/osuripple/cheesegull/dbmirror/discover.go
generated
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
package dbmirror
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/osuripple/cheesegull/models"
|
||||
osuapi "github.com/thehowl/go-osuapi"
|
||||
)
|
||||
|
||||
// Discover discovers new beatmaps in the osu! database and adds them.
|
||||
func Discover(c *osuapi.Client, db *sql.DB) error {
|
||||
id, err := models.BiggestSetID(db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Println("[D] Starting discovery with ID", id)
|
||||
// failedAttempts is the number of consecutive failed attempts at fetching a
|
||||
// beatmap (by 'failed', in this case we mean exclusively when a request to
|
||||
// get_beatmaps returns no beatmaps)
|
||||
failedAttempts := 0
|
||||
for failedAttempts < 4096 {
|
||||
id++
|
||||
if id%64 == 0 {
|
||||
log.Println("[D]", id)
|
||||
}
|
||||
var (
|
||||
err error
|
||||
bms []osuapi.Beatmap
|
||||
)
|
||||
for i := 0; i < 5; i++ {
|
||||
bms, err = c.GetBeatmaps(osuapi.GetBeatmapsOpts{
|
||||
BeatmapSetID: id,
|
||||
})
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
if i >= 5 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(bms) == 0 {
|
||||
failedAttempts++
|
||||
continue
|
||||
}
|
||||
failedAttempts = 0
|
||||
|
||||
set := setFromOsuAPIBeatmap(bms[0])
|
||||
set.ChildrenBeatmaps = createChildrenBeatmaps(bms)
|
||||
set.HasVideo, err = hasVideo(bms[0].BeatmapSetID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = models.CreateSet(db, set)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DiscoverEvery runs Discover and waits for it to finish. If Discover returns
|
||||
// an error, then it will wait errorWait before running Discover again. If
|
||||
// Discover doesn't return any error, then it will wait successWait before
|
||||
// running Discover again.
|
||||
func DiscoverEvery(c *osuapi.Client, db *sql.DB, successWait, errorWait time.Duration) {
|
||||
for {
|
||||
err := Discover(c, db)
|
||||
if err == nil {
|
||||
time.Sleep(successWait)
|
||||
} else {
|
||||
logError(err)
|
||||
time.Sleep(errorWait)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user