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
|
package spotify
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
@ -75,6 +74,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
||||||
|
|
||||||
p := models.Progress{Total: int64(totalDuration.Seconds())}
|
p := models.Progress{Total: int64(totalDuration.Seconds())}
|
||||||
|
|
||||||
|
out:
|
||||||
for {
|
for {
|
||||||
result, err := b.client.RecentlyPlayedAfter(minTime, MaxItemsPerGet)
|
result, err := b.client.RecentlyPlayedAfter(minTime, MaxItemsPerGet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -83,6 +83,23 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
||||||
return
|
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)
|
count := len(result.Items)
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
break
|
break
|
||||||
|
@ -90,29 +107,24 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
||||||
|
|
||||||
listens := make(models.ListensList, 0, len(result.Items))
|
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 {
|
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)
|
sort.Sort(listens)
|
||||||
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
|
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
|
||||||
progress <- p
|
progress <- p
|
||||||
results <- models.ListensResult{Listens: listens, OldestTimestamp: oldestTimestamp}
|
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
results <- models.ListensResult{OldestTimestamp: minTime}
|
||||||
progress <- p.Complete()
|
progress <- p.Complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,9 @@ var listensCmd = &cobra.Command{
|
||||||
result.ImportCount, result.TotalCount, targetName)
|
result.ImportCount, result.TotalCount, targetName)
|
||||||
|
|
||||||
// Update timestamp
|
// Update timestamp
|
||||||
|
if result.LastTimestamp.Unix() < timestamp.Unix() {
|
||||||
|
result.LastTimestamp = timestamp
|
||||||
|
}
|
||||||
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
||||||
err = db.SetImportTimestamp(sourceName, targetName, "listens", result.LastTimestamp)
|
err = db.SetImportTimestamp(sourceName, targetName, "listens", result.LastTimestamp)
|
||||||
cobra.CheckErr(err)
|
cobra.CheckErr(err)
|
||||||
|
|
|
@ -102,6 +102,9 @@ var lovesCmd = &cobra.Command{
|
||||||
result.ImportCount, result.TotalCount, targetName)
|
result.ImportCount, result.TotalCount, targetName)
|
||||||
|
|
||||||
// Update timestamp
|
// Update timestamp
|
||||||
|
if result.LastTimestamp.Unix() < timestamp.Unix() {
|
||||||
|
result.LastTimestamp = timestamp
|
||||||
|
}
|
||||||
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
fmt.Printf("Latest timestamp: %v (%v)\n", result.LastTimestamp, result.LastTimestamp.Unix())
|
||||||
err = db.SetImportTimestamp(sourceName, targetName, "loves", result.LastTimestamp)
|
err = db.SetImportTimestamp(sourceName, targetName, "loves", result.LastTimestamp)
|
||||||
cobra.CheckErr(err)
|
cobra.CheckErr(err)
|
||||||
|
|
Loading…
Add table
Reference in a new issue