Fixed storing last import timestamp

This commit is contained in:
Philipp Wolfer 2023-11-21 18:14:11 +01:00
parent fa7732c538
commit 1af484e0f6
No known key found for this signature in database
GPG key ID: 8FDF744D4919943B
3 changed files with 34 additions and 16 deletions

View file

@ -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()
}

View file

@ -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)

View file

@ -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)