mirror of
https://git.sr.ht/~phw/scotty
synced 2025-04-16 01:59:29 +02:00
Fixed storing last import timestamp
This commit is contained in:
parent
fa7732c538
commit
1af484e0f6
3 changed files with 34 additions and 16 deletions
|
@ -23,7 +23,6 @@ THE SOFTWARE.
|
|||
package spotify
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
|
@ -75,6 +74,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
|||
|
||||
p := models.Progress{Total: int64(totalDuration.Seconds())}
|
||||
|
||||
out:
|
||||
for {
|
||||
result, err := b.client.RecentlyPlayedAfter(minTime, MaxItemsPerGet)
|
||||
if err != nil {
|
||||
|
@ -83,6 +83,23 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
|||
return
|
||||
}
|
||||
|
||||
if result.Cursors.After == "" {
|
||||
break
|
||||
}
|
||||
|
||||
// Set minTime to the newest returned listen
|
||||
after, err := strconv.ParseInt(result.Cursors.After, 10, 64)
|
||||
if err != nil {
|
||||
progress <- p.Complete()
|
||||
results <- models.ListensResult{Error: err}
|
||||
return
|
||||
} else if after <= minTime.Unix() {
|
||||
// new cursor timestamp did not progress
|
||||
break
|
||||
}
|
||||
minTime = time.Unix(after, 0)
|
||||
remainingTime := startTime.Sub(minTime)
|
||||
|
||||
count := len(result.Items)
|
||||
if count == 0 {
|
||||
break
|
||||
|
@ -90,29 +107,24 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
|||
|
||||
listens := make(models.ListensList, 0, len(result.Items))
|
||||
|
||||
// Set minTime to the newest returned listen
|
||||
after, err := strconv.ParseInt(result.Cursors.After, 10, 64)
|
||||
if err != nil && after <= minTime.Unix() {
|
||||
err = errors.New("new cursor timestamp did not progress")
|
||||
}
|
||||
if err != nil {
|
||||
progress <- p.Complete()
|
||||
results <- models.ListensResult{Error: err}
|
||||
return
|
||||
}
|
||||
minTime = time.Unix(after, 0)
|
||||
remainingTime := startTime.Sub(minTime)
|
||||
|
||||
for _, listen := range result.Items {
|
||||
listens = append(listens, listen.ToListen())
|
||||
l := listen.ToListen()
|
||||
if l.ListenedAt.Unix() > oldestTimestamp.Unix() {
|
||||
listens = append(listens, l)
|
||||
} else {
|
||||
// result contains listens older then oldestTimestamp,
|
||||
// we can stop requesting more
|
||||
break out
|
||||
}
|
||||
}
|
||||
|
||||
sort.Sort(listens)
|
||||
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
|
||||
progress <- p
|
||||
results <- models.ListensResult{Listens: listens, OldestTimestamp: oldestTimestamp}
|
||||
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime}
|
||||
}
|
||||
|
||||
results <- models.ListensResult{OldestTimestamp: minTime}
|
||||
progress <- p.Complete()
|
||||
}
|
||||
|
||||
|
|
|
@ -102,6 +102,9 @@ var listensCmd = &cobra.Command{
|
|||
result.ImportCount, result.TotalCount, targetName)
|
||||
|
||||
// Update timestamp
|
||||
if result.LastTimestamp.Unix() < timestamp.Unix() {
|
||||
result.LastTimestamp = timestamp
|
||||
}
|
||||
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
||||
err = db.SetImportTimestamp(sourceName, targetName, "listens", result.LastTimestamp)
|
||||
cobra.CheckErr(err)
|
||||
|
|
|
@ -102,6 +102,9 @@ var lovesCmd = &cobra.Command{
|
|||
result.ImportCount, result.TotalCount, targetName)
|
||||
|
||||
// Update timestamp
|
||||
if result.LastTimestamp.Unix() < timestamp.Unix() {
|
||||
result.LastTimestamp = timestamp
|
||||
}
|
||||
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
||||
err = db.SetImportTimestamp(sourceName, targetName, "loves", result.LastTimestamp)
|
||||
cobra.CheckErr(err)
|
||||
|
|
Loading…
Add table
Reference in a new issue