mirror of
https://git.sr.ht/~phw/scotty
synced 2025-04-16 01:59:29 +02:00
Unified export result types
This commit is contained in:
parent
a4a05ea047
commit
ca3b8492b0
12 changed files with 35 additions and 37 deletions
|
@ -113,7 +113,7 @@ out:
|
|||
}
|
||||
|
||||
sort.Sort(listens)
|
||||
results <- models.ListensResult{Listens: listens, Total: totalCount}
|
||||
results <- models.ListensResult{Items: listens, Total: totalCount}
|
||||
p.Elapsed += int64(count)
|
||||
progress <- p
|
||||
|
||||
|
@ -180,7 +180,7 @@ out:
|
|||
}
|
||||
|
||||
sort.Sort(loves)
|
||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
||||
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||
p.Elapsed += int64(count)
|
||||
progress <- p
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ func (b *DumpBackend) StartImport() error { return nil }
|
|||
func (b *DumpBackend) FinishImport() error { return nil }
|
||||
|
||||
func (b *DumpBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, listen := range export.Listens {
|
||||
for _, listen := range export.Items {
|
||||
importResult.UpdateTimestamp(listen.ListenedAt)
|
||||
importResult.ImportCount += 1
|
||||
progress <- models.Progress{}.FromImportResult(importResult)
|
||||
|
@ -45,7 +45,7 @@ func (b *DumpBackend) ImportListens(export models.ListensResult, importResult mo
|
|||
}
|
||||
|
||||
func (b *DumpBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, love := range export.Loves {
|
||||
for _, love := range export.Items {
|
||||
importResult.UpdateTimestamp(love.Created)
|
||||
importResult.ImportCount += 1
|
||||
progress <- models.Progress{}.FromImportResult(importResult)
|
||||
|
|
|
@ -88,7 +88,7 @@ out:
|
|||
|
||||
sort.Sort(listens)
|
||||
progress <- p.Complete()
|
||||
results <- models.ListensResult{Listens: listens}
|
||||
results <- models.ListensResult{Items: listens}
|
||||
}
|
||||
|
||||
func (b *FunkwhaleApiBackend) ExportLoves(oldestTimestamp time.Time, results chan models.LovesResult, progress chan models.Progress) {
|
||||
|
@ -137,7 +137,7 @@ out:
|
|||
|
||||
sort.Sort(loves)
|
||||
progress <- p.Complete()
|
||||
results <- models.LovesResult{Loves: loves}
|
||||
results <- models.LovesResult{Items: loves}
|
||||
}
|
||||
|
||||
func (l Listening) AsListen() models.Listen {
|
||||
|
|
|
@ -52,7 +52,7 @@ func (b *JSPFBackend) FinishImport() error {
|
|||
}
|
||||
|
||||
func (b *JSPFBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, listen := range export.Listens {
|
||||
for _, listen := range export.Items {
|
||||
track := listenAsTrack(listen)
|
||||
b.tracks = append(b.tracks, track)
|
||||
importResult.ImportCount += 1
|
||||
|
@ -64,7 +64,7 @@ func (b *JSPFBackend) ImportListens(export models.ListensResult, importResult mo
|
|||
}
|
||||
|
||||
func (b *JSPFBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, love := range export.Loves {
|
||||
for _, love := range export.Items {
|
||||
track := loveAsTrack(love)
|
||||
b.tracks = append(b.tracks, track)
|
||||
importResult.ImportCount += 1
|
||||
|
|
|
@ -146,7 +146,7 @@ out:
|
|||
page -= 1
|
||||
|
||||
results <- models.ListensResult{
|
||||
Listens: listens,
|
||||
Items: listens,
|
||||
Total: result.Total,
|
||||
OldestTimestamp: minTime,
|
||||
}
|
||||
|
@ -160,9 +160,9 @@ out:
|
|||
}
|
||||
|
||||
func (b *LastfmApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
total := len(export.Listens)
|
||||
total := len(export.Items)
|
||||
for i := 0; i < total; i += MaxListensPerSubmission {
|
||||
listens := export.Listens[i:min(i+MaxListensPerSubmission, total)]
|
||||
listens := export.Items[i:min(i+MaxListensPerSubmission, total)]
|
||||
count := len(listens)
|
||||
if count == 0 {
|
||||
break
|
||||
|
@ -302,12 +302,12 @@ out:
|
|||
}
|
||||
|
||||
sort.Sort(loves)
|
||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
||||
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||
progress <- p.Complete()
|
||||
}
|
||||
|
||||
func (b *LastfmApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, love := range export.Loves {
|
||||
for _, love := range export.Items {
|
||||
err := b.client.Track.Love(lastfm.P{
|
||||
"track": love.TrackName,
|
||||
"artist": love.ArtistName(),
|
||||
|
|
|
@ -95,7 +95,7 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result
|
|||
sort.Sort(listens)
|
||||
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
|
||||
progress <- p
|
||||
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime}
|
||||
results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
|
||||
}
|
||||
|
||||
results <- models.ListensResult{OldestTimestamp: minTime}
|
||||
|
@ -103,9 +103,9 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result
|
|||
}
|
||||
|
||||
func (b *ListenBrainzApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
total := len(export.Listens)
|
||||
total := len(export.Items)
|
||||
for i := 0; i < total; i += MaxListensPerRequest {
|
||||
listens := export.Listens[i:min(i+MaxListensPerRequest, total)]
|
||||
listens := export.Items[i:min(i+MaxListensPerRequest, total)]
|
||||
count := len(listens)
|
||||
if count == 0 {
|
||||
break
|
||||
|
@ -184,7 +184,7 @@ out:
|
|||
|
||||
sort.Sort(loves)
|
||||
progress <- p.Complete()
|
||||
results <- models.LovesResult{Loves: loves}
|
||||
results <- models.LovesResult{Items: loves}
|
||||
}
|
||||
|
||||
func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
|
@ -197,13 +197,13 @@ func (b *ListenBrainzApiBackend) ImportLoves(export models.LovesResult, importRe
|
|||
}
|
||||
|
||||
// TODO: Store MBIDs directly
|
||||
b.existingMbids = make(map[string]bool, len(existingLoves.Loves))
|
||||
for _, love := range existingLoves.Loves {
|
||||
b.existingMbids = make(map[string]bool, len(existingLoves.Items))
|
||||
for _, love := range existingLoves.Items {
|
||||
b.existingMbids[string(love.RecordingMbid)] = true
|
||||
}
|
||||
}
|
||||
|
||||
for _, love := range export.Loves {
|
||||
for _, love := range export.Items {
|
||||
recordingMbid := string(love.RecordingMbid)
|
||||
|
||||
if recordingMbid == "" {
|
||||
|
|
|
@ -85,11 +85,11 @@ out:
|
|||
|
||||
sort.Sort(listens)
|
||||
progress <- p.Complete()
|
||||
results <- models.ListensResult{Listens: listens}
|
||||
results <- models.ListensResult{Items: listens}
|
||||
}
|
||||
|
||||
func (b *MalojaApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
for _, listen := range export.Listens {
|
||||
for _, listen := range export.Items {
|
||||
scrobble := NewScrobble{
|
||||
Title: listen.TrackName,
|
||||
Artists: listen.ArtistNames,
|
||||
|
|
|
@ -39,7 +39,7 @@ func ProcessListensImports(importer models.ListensImport, results chan models.Li
|
|||
if exportResult.Total > 0 {
|
||||
result.TotalCount = exportResult.Total
|
||||
} else {
|
||||
result.TotalCount += len(exportResult.Listens)
|
||||
result.TotalCount += len(exportResult.Items)
|
||||
}
|
||||
importResult, err := importer.ImportListens(exportResult, result, progress)
|
||||
if err != nil {
|
||||
|
@ -81,7 +81,7 @@ func ProcessLovesImports(importer models.LovesImport, results chan models.LovesR
|
|||
if exportResult.Total > 0 {
|
||||
result.TotalCount = exportResult.Total
|
||||
} else {
|
||||
result.TotalCount += len(exportResult.Loves)
|
||||
result.TotalCount += len(exportResult.Items)
|
||||
}
|
||||
importResult, err := importer.ImportLoves(exportResult, result, progress)
|
||||
if err != nil {
|
||||
|
|
|
@ -119,17 +119,17 @@ func (b *ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results c
|
|||
listens := log.Listens.NewerThan(oldestTimestamp)
|
||||
sort.Sort(listens)
|
||||
progress <- models.Progress{Elapsed: int64(len(listens))}.Complete()
|
||||
results <- models.ListensResult{Listens: listens}
|
||||
results <- models.ListensResult{Items: listens}
|
||||
}
|
||||
|
||||
func (b *ScrobblerLogBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
||||
lastTimestamp, err := Write(b.file, export.Listens)
|
||||
lastTimestamp, err := Write(b.file, export.Items)
|
||||
if err != nil {
|
||||
return importResult, err
|
||||
}
|
||||
|
||||
importResult.UpdateTimestamp(lastTimestamp)
|
||||
importResult.ImportCount += len(export.Listens)
|
||||
importResult.ImportCount += len(export.Items)
|
||||
progress <- models.Progress{}.FromImportResult(importResult)
|
||||
|
||||
return importResult, nil
|
||||
|
|
|
@ -137,7 +137,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
|||
sort.Sort(listens)
|
||||
p.Elapsed = int64(totalDuration.Seconds() - remainingTime.Seconds())
|
||||
progress <- p
|
||||
results <- models.ListensResult{Listens: listens, OldestTimestamp: minTime}
|
||||
results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
|
||||
}
|
||||
|
||||
results <- models.ListensResult{OldestTimestamp: minTime}
|
||||
|
@ -193,7 +193,7 @@ out:
|
|||
}
|
||||
|
||||
sort.Sort(loves)
|
||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
||||
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||
p.Elapsed += int64(count)
|
||||
progress <- p
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ func (b *SubsonicApiBackend) ExportLoves(oldestTimestamp time.Time, results chan
|
|||
}
|
||||
|
||||
progress <- models.Progress{Elapsed: int64(len(starred.Song))}.Complete()
|
||||
results <- models.LovesResult{Loves: b.filterSongs(starred.Song, oldestTimestamp)}
|
||||
results <- models.LovesResult{Items: b.filterSongs(starred.Song, oldestTimestamp)}
|
||||
}
|
||||
|
||||
func (b *SubsonicApiBackend) filterSongs(songs []*subsonic.Child, oldestTimestamp time.Time) models.LovesList {
|
||||
|
|
|
@ -147,18 +147,16 @@ func (l LovesList) Swap(i, j int) {
|
|||
l[i], l[j] = l[j], l[i]
|
||||
}
|
||||
|
||||
type ListensResult struct {
|
||||
type ExportResult[T LovesList | ListensList] struct {
|
||||
Items T
|
||||
Total int
|
||||
Listens ListensList
|
||||
OldestTimestamp time.Time
|
||||
Error error
|
||||
}
|
||||
|
||||
type LovesResult struct {
|
||||
Total int
|
||||
Loves LovesList
|
||||
Error error
|
||||
}
|
||||
type ListensResult ExportResult[ListensList]
|
||||
|
||||
type LovesResult ExportResult[LovesList]
|
||||
|
||||
type ImportResult struct {
|
||||
TotalCount int
|
||||
|
|
Loading…
Add table
Reference in a new issue