mirror of
https://git.sr.ht/~phw/scotty
synced 2025-04-16 10:09:28 +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)
|
sort.Sort(listens)
|
||||||
results <- models.ListensResult{Listens: listens, Total: totalCount}
|
results <- models.ListensResult{Items: listens, Total: totalCount}
|
||||||
p.Elapsed += int64(count)
|
p.Elapsed += int64(count)
|
||||||
progress <- p
|
progress <- p
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(loves)
|
sort.Sort(loves)
|
||||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||||
p.Elapsed += int64(count)
|
p.Elapsed += int64(count)
|
||||||
progress <- p
|
progress <- p
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ func (b *DumpBackend) StartImport() error { return nil }
|
||||||
func (b *DumpBackend) FinishImport() 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) {
|
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.UpdateTimestamp(listen.ListenedAt)
|
||||||
importResult.ImportCount += 1
|
importResult.ImportCount += 1
|
||||||
progress <- models.Progress{}.FromImportResult(importResult)
|
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) {
|
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.UpdateTimestamp(love.Created)
|
||||||
importResult.ImportCount += 1
|
importResult.ImportCount += 1
|
||||||
progress <- models.Progress{}.FromImportResult(importResult)
|
progress <- models.Progress{}.FromImportResult(importResult)
|
||||||
|
|
|
@ -88,7 +88,7 @@ out:
|
||||||
|
|
||||||
sort.Sort(listens)
|
sort.Sort(listens)
|
||||||
progress <- p.Complete()
|
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) {
|
func (b *FunkwhaleApiBackend) ExportLoves(oldestTimestamp time.Time, results chan models.LovesResult, progress chan models.Progress) {
|
||||||
|
@ -137,7 +137,7 @@ out:
|
||||||
|
|
||||||
sort.Sort(loves)
|
sort.Sort(loves)
|
||||||
progress <- p.Complete()
|
progress <- p.Complete()
|
||||||
results <- models.LovesResult{Loves: loves}
|
results <- models.LovesResult{Items: loves}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l Listening) AsListen() models.Listen {
|
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) {
|
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)
|
track := listenAsTrack(listen)
|
||||||
b.tracks = append(b.tracks, track)
|
b.tracks = append(b.tracks, track)
|
||||||
importResult.ImportCount += 1
|
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) {
|
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)
|
track := loveAsTrack(love)
|
||||||
b.tracks = append(b.tracks, track)
|
b.tracks = append(b.tracks, track)
|
||||||
importResult.ImportCount += 1
|
importResult.ImportCount += 1
|
||||||
|
|
|
@ -146,7 +146,7 @@ out:
|
||||||
page -= 1
|
page -= 1
|
||||||
|
|
||||||
results <- models.ListensResult{
|
results <- models.ListensResult{
|
||||||
Listens: listens,
|
Items: listens,
|
||||||
Total: result.Total,
|
Total: result.Total,
|
||||||
OldestTimestamp: minTime,
|
OldestTimestamp: minTime,
|
||||||
}
|
}
|
||||||
|
@ -160,9 +160,9 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *LastfmApiBackend) ImportListens(export models.ListensResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
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 {
|
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)
|
count := len(listens)
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
break
|
break
|
||||||
|
@ -302,12 +302,12 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(loves)
|
sort.Sort(loves)
|
||||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||||
progress <- p.Complete()
|
progress <- p.Complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *LastfmApiBackend) ImportLoves(export models.LovesResult, importResult models.ImportResult, progress chan models.Progress) (models.ImportResult, error) {
|
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{
|
err := b.client.Track.Love(lastfm.P{
|
||||||
"track": love.TrackName,
|
"track": love.TrackName,
|
||||||
"artist": love.ArtistName(),
|
"artist": love.ArtistName(),
|
||||||
|
|
|
@ -95,7 +95,7 @@ func (b *ListenBrainzApiBackend) ExportListens(oldestTimestamp time.Time, result
|
||||||
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: minTime}
|
results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
|
||||||
}
|
}
|
||||||
|
|
||||||
results <- models.ListensResult{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) {
|
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 {
|
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)
|
count := len(listens)
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
break
|
break
|
||||||
|
@ -184,7 +184,7 @@ out:
|
||||||
|
|
||||||
sort.Sort(loves)
|
sort.Sort(loves)
|
||||||
progress <- p.Complete()
|
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) {
|
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
|
// TODO: Store MBIDs directly
|
||||||
b.existingMbids = make(map[string]bool, len(existingLoves.Loves))
|
b.existingMbids = make(map[string]bool, len(existingLoves.Items))
|
||||||
for _, love := range existingLoves.Loves {
|
for _, love := range existingLoves.Items {
|
||||||
b.existingMbids[string(love.RecordingMbid)] = true
|
b.existingMbids[string(love.RecordingMbid)] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, love := range export.Loves {
|
for _, love := range export.Items {
|
||||||
recordingMbid := string(love.RecordingMbid)
|
recordingMbid := string(love.RecordingMbid)
|
||||||
|
|
||||||
if recordingMbid == "" {
|
if recordingMbid == "" {
|
||||||
|
|
|
@ -85,11 +85,11 @@ out:
|
||||||
|
|
||||||
sort.Sort(listens)
|
sort.Sort(listens)
|
||||||
progress <- p.Complete()
|
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) {
|
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{
|
scrobble := NewScrobble{
|
||||||
Title: listen.TrackName,
|
Title: listen.TrackName,
|
||||||
Artists: listen.ArtistNames,
|
Artists: listen.ArtistNames,
|
||||||
|
|
|
@ -39,7 +39,7 @@ func ProcessListensImports(importer models.ListensImport, results chan models.Li
|
||||||
if exportResult.Total > 0 {
|
if exportResult.Total > 0 {
|
||||||
result.TotalCount = exportResult.Total
|
result.TotalCount = exportResult.Total
|
||||||
} else {
|
} else {
|
||||||
result.TotalCount += len(exportResult.Listens)
|
result.TotalCount += len(exportResult.Items)
|
||||||
}
|
}
|
||||||
importResult, err := importer.ImportListens(exportResult, result, progress)
|
importResult, err := importer.ImportListens(exportResult, result, progress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -81,7 +81,7 @@ func ProcessLovesImports(importer models.LovesImport, results chan models.LovesR
|
||||||
if exportResult.Total > 0 {
|
if exportResult.Total > 0 {
|
||||||
result.TotalCount = exportResult.Total
|
result.TotalCount = exportResult.Total
|
||||||
} else {
|
} else {
|
||||||
result.TotalCount += len(exportResult.Loves)
|
result.TotalCount += len(exportResult.Items)
|
||||||
}
|
}
|
||||||
importResult, err := importer.ImportLoves(exportResult, result, progress)
|
importResult, err := importer.ImportLoves(exportResult, result, progress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -119,17 +119,17 @@ func (b *ScrobblerLogBackend) ExportListens(oldestTimestamp time.Time, results c
|
||||||
listens := log.Listens.NewerThan(oldestTimestamp)
|
listens := log.Listens.NewerThan(oldestTimestamp)
|
||||||
sort.Sort(listens)
|
sort.Sort(listens)
|
||||||
progress <- models.Progress{Elapsed: int64(len(listens))}.Complete()
|
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) {
|
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 {
|
if err != nil {
|
||||||
return importResult, err
|
return importResult, err
|
||||||
}
|
}
|
||||||
|
|
||||||
importResult.UpdateTimestamp(lastTimestamp)
|
importResult.UpdateTimestamp(lastTimestamp)
|
||||||
importResult.ImportCount += len(export.Listens)
|
importResult.ImportCount += len(export.Items)
|
||||||
progress <- models.Progress{}.FromImportResult(importResult)
|
progress <- models.Progress{}.FromImportResult(importResult)
|
||||||
|
|
||||||
return importResult, nil
|
return importResult, nil
|
||||||
|
|
|
@ -137,7 +137,7 @@ func (b *SpotifyApiBackend) ExportListens(oldestTimestamp time.Time, results cha
|
||||||
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: minTime}
|
results <- models.ListensResult{Items: listens, OldestTimestamp: minTime}
|
||||||
}
|
}
|
||||||
|
|
||||||
results <- models.ListensResult{OldestTimestamp: minTime}
|
results <- models.ListensResult{OldestTimestamp: minTime}
|
||||||
|
@ -193,7 +193,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(loves)
|
sort.Sort(loves)
|
||||||
results <- models.LovesResult{Loves: loves, Total: totalCount}
|
results <- models.LovesResult{Items: loves, Total: totalCount}
|
||||||
p.Elapsed += int64(count)
|
p.Elapsed += int64(count)
|
||||||
progress <- p
|
progress <- p
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ func (b *SubsonicApiBackend) ExportLoves(oldestTimestamp time.Time, results chan
|
||||||
}
|
}
|
||||||
|
|
||||||
progress <- models.Progress{Elapsed: int64(len(starred.Song))}.Complete()
|
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 {
|
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]
|
l[i], l[j] = l[j], l[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
type ListensResult struct {
|
type ExportResult[T LovesList | ListensList] struct {
|
||||||
|
Items T
|
||||||
Total int
|
Total int
|
||||||
Listens ListensList
|
|
||||||
OldestTimestamp time.Time
|
OldestTimestamp time.Time
|
||||||
Error error
|
Error error
|
||||||
}
|
}
|
||||||
|
|
||||||
type LovesResult struct {
|
type ListensResult ExportResult[ListensList]
|
||||||
Total int
|
|
||||||
Loves LovesList
|
type LovesResult ExportResult[LovesList]
|
||||||
Error error
|
|
||||||
}
|
|
||||||
|
|
||||||
type ImportResult struct {
|
type ImportResult struct {
|
||||||
TotalCount int
|
TotalCount int
|
||||||
|
|
Loading…
Add table
Reference in a new issue