Compare commits

..

No commits in common. "1ea90d2d2b0af02f66ea22902f775999fe1cf25d" and "dc834e9b6fa4b455214626bf81783d3128b13e54" have entirely different histories.

6 changed files with 115 additions and 124 deletions

17
go.mod
View file

@ -2,7 +2,7 @@ module go.uploadedlobster.com/scotty
go 1.23.0
toolchain go1.24.2
toolchain go1.23.8
require (
github.com/Xuanwo/go-locale v1.1.3
@ -14,15 +14,15 @@ require (
github.com/go-resty/resty/v2 v2.16.5
github.com/jarcoal/httpmock v1.3.1
github.com/manifoldco/promptui v0.9.0
github.com/pelletier/go-toml/v2 v2.2.4
github.com/pelletier/go-toml/v2 v2.2.3
github.com/shkh/lastfm-go v0.0.0-20191215035245-89a801c244e0
github.com/spf13/cast v1.7.1
github.com/spf13/cobra v1.9.1
github.com/spf13/viper v1.20.1
github.com/stretchr/testify v1.10.0
github.com/vbauerster/mpb/v8 v8.9.3
go.uploadedlobster.com/mbtypes v0.4.0
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0
go.uploadedlobster.com/mbtypes v0.2.0
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
golang.org/x/oauth2 v0.29.0
golang.org/x/text v0.24.0
gorm.io/datatypes v1.2.5
@ -38,7 +38,7 @@ require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/glebarez/go-sqlite v1.22.0 // indirect
github.com/go-sql-driver/mysql v1.9.2 // indirect
github.com/go-sql-driver/mysql v1.9.1 // indirect
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
@ -57,11 +57,8 @@ require (
github.com/spf13/pflag v1.0.6 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.39.0 // indirect
golang.org/x/sync v0.13.0 // indirect
golang.org/x/net v0.38.0 // indirect
golang.org/x/sys v0.32.0 // indirect
golang.org/x/tools v0.32.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/mysql v1.5.7 // indirect
modernc.org/libc v1.62.1 // indirect
@ -69,5 +66,3 @@ require (
modernc.org/memory v1.9.1 // indirect
modernc.org/sqlite v1.37.0 // indirect
)
tool golang.org/x/text/cmd/gotext

28
go.sum
View file

@ -43,8 +43,8 @@ github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7b
github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI=
github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
@ -93,8 +93,8 @@ github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP
github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
@ -129,16 +129,16 @@ github.com/vbauerster/mpb/v8 v8.9.3 h1:PnMeF+sMvYv9u23l6DO6Q3+Mdj408mjLRXIzmUmU2
github.com/vbauerster/mpb/v8 v8.9.3/go.mod h1:hxS8Hz4C6ijnppDSIX6LjG8FYJSoPo9iIOcE53Zik0c=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uploadedlobster.com/mbtypes v0.4.0 h1:D5asCgHsRWufj4Yn5u0IuH2J9z1UuYImYkYIp1Z1Q7s=
go.uploadedlobster.com/mbtypes v0.4.0/go.mod h1:Bu1K1Hl77QTAE2Z7QKiW/JAp9KqYWQebkRRfG02dlZM=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
go.uploadedlobster.com/mbtypes v0.2.0 h1:sV9WM5fY8KnnKwKKVRaU3JBEKP4zD7aUX0XQfNZvEdo=
go.uploadedlobster.com/mbtypes v0.2.0/go.mod h1:/ZpwXc8oRpDa7EWeGI9xEY+nGhMIVHhTruikZWD4Krg=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
@ -152,8 +152,8 @@ golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View file

@ -42,56 +42,56 @@ var messageKeyToIndex = map[string]int{
"\tbackend: %v": 11,
"\texport: %s": 0,
"\timport: %s\n": 1,
"%v: %v": 47,
"%v: %v": 52,
"Aborted": 8,
"Access token": 19,
"Access token received, you can use %v now.\n": 33,
"Access token received, you can use %v now.\n": 28,
"Append to file": 21,
"Backend": 41,
"Check for duplicate listens on import (slower)": 24,
"Backend": 36,
"Check for duplicate listens on import (slower)": 45,
"Client ID": 15,
"Client secret": 16,
"Delete the service configuration \"%v\"?": 7,
"Directory path": 27,
"Disable auto correction of submitted listens": 25,
"Error: OAuth state mismatch": 32,
"Directory path": 47,
"Disable auto correction of submitted listens": 24,
"Error: OAuth state mismatch": 27,
"Failed reading config: %v": 2,
"File path": 20,
"From timestamp: %v (%v)": 43,
"Ignore listens in incognito mode": 28,
"Ignore skipped listens": 29,
"Ignored duplicate listen %v: \"%v\" by %v (%v)": 53,
"Import failed, last reported timestamp was %v (%s)": 44,
"Import log:": 46,
"Imported %v of %v %s into %v.": 45,
"Include skipped listens": 26,
"Latest timestamp: %v (%v)": 49,
"Minimum playback duration for skipped tracks (seconds)": 30,
"No": 38,
"From timestamp: %v (%v)": 38,
"Ignore listens in incognito mode": 48,
"Ignore skipped listens": 49,
"Ignored duplicate listen %v: \"%v\" by %v (%v)": 46,
"Import failed, last reported timestamp was %v (%s)": 39,
"Import log:": 51,
"Imported %v of %v %s into %v.": 40,
"Include skipped listens": 25,
"Latest timestamp: %v (%v)": 41,
"Minimum playback duration for skipped tracks (seconds)": 50,
"No": 33,
"Playlist title": 22,
"Saved service %v using backend %v": 5,
"Server URL": 17,
"Service": 40,
"Service": 35,
"Service \"%v\" deleted\n": 9,
"Service name": 3,
"The backend %v requires authentication. Authenticate now?": 6,
"Token received, you can close this window now.": 12,
"Transferring %s from %s to %s...": 42,
"Transferring %s from %s to %s...": 37,
"Unique playlist identifier": 23,
"Updated service %v using backend %v\n": 10,
"User name": 18,
"Visit the URL for authorization: %v": 31,
"Yes": 37,
"Visit the URL for authorization: %v": 26,
"Yes": 32,
"a service with this name already exists": 4,
"backend %s does not implement %s": 13,
"done": 36,
"exporting": 34,
"importing": 35,
"invalid timestamp string \"%v\"": 48,
"key must only consist of A-Za-z0-9_-": 51,
"no configuration file defined, cannot write config": 50,
"no existing service configurations": 39,
"no service configuration \"%v\"": 52,
"done": 31,
"exporting": 29,
"importing": 30,
"invalid timestamp string \"%v\"": 53,
"key must only consist of A-Za-z0-9_-": 43,
"no configuration file defined, cannot write config": 42,
"no existing service configurations": 34,
"no service configuration \"%v\"": 44,
"unknown backend \"%s\"": 14,
}
@ -103,18 +103,18 @@ var deIndex = []uint32{ // 55 elements
0x000001ac, 0x000001e7, 0x00000213, 0x00000233,
0x0000023d, 0x0000024b, 0x00000256, 0x00000263,
0x00000271, 0x0000027b, 0x0000028e, 0x000002a1,
0x000002b8, 0x000002ed, 0x00000321, 0x00000342,
0x00000352, 0x00000378, 0x0000039a, 0x000003d8,
0x000002b8, 0x000002ec, 0x0000030d, 0x00000333,
0x0000035d, 0x0000039d, 0x000003a8, 0x000003b3,
// Entry 20 - 3F
0x000003fe, 0x00000428, 0x00000468, 0x00000473,
0x0000047e, 0x00000485, 0x00000488, 0x0000048d,
0x000004b6, 0x000004be, 0x000004c6, 0x000004ef,
0x0000050d, 0x0000054a, 0x00000575, 0x00000580,
0x0000058d, 0x000005b1, 0x000005d4, 0x00000625,
0x0000065c, 0x00000683, 0x00000683,
0x000003ba, 0x000003bd, 0x000003c2, 0x000003eb,
0x000003f3, 0x000003fb, 0x00000424, 0x00000442,
0x0000047f, 0x000004aa, 0x000004cd, 0x0000051e,
0x00000555, 0x0000057c, 0x0000057c, 0x0000057c,
0x0000057c, 0x0000057c, 0x0000057c, 0x0000057c,
0x0000057c, 0x0000057c, 0x0000057c,
} // Size: 244 bytes
const deData string = "" + // Size: 1667 bytes
const deData string = "" + // Size: 1404 bytes
"\x04\x01\x09\x00\x0e\x02Export: %[1]s\x04\x01\x09\x01\x0a\x0e\x02Import:" +
" %[1]s\x02Fehler beim Lesen der Konfiguration: %[1]v\x02Servicename\x02e" +
"in Service mit diesem Namen existiert bereits\x02Service %[1]v mit dem B" +
@ -126,22 +126,18 @@ const deData string = "" + // Size: 1667 bytes
" geschlossen werden.\x02das backend %[1]s implementiert %[2]s nicht\x02u" +
"nbekanntes Backend „%[1]s“\x02Client-ID\x02Client-Secret\x02Server-URL" +
"\x02Benutzername\x02Zugriffstoken\x02Dateipfad\x02An Datei anhängen\x02T" +
"itel der Playlist\x02Eindeutige Playlist-ID\x02Beim Import auf Listen-Du" +
"plikate prüfen (langsamer)\x02Autokorrektur für übermittelte Titel deakt" +
"ivieren\x02Übersprungene Titel einbeziehen\x02Verzeichnispfad\x02Listens" +
" im Inkognito-Modus ignorieren\x02Übersprungene Listens ignorieren\x02Mi" +
"nimale Wiedergabedauer für übersprungene Titel (Sekunden)\x02URL für Aut" +
"orisierung öffnen: %[1]v\x02Fehler: OAuth-State stimmt nicht überein\x04" +
"\x00\x01\x0a;\x02Zugriffstoken erhalten, %[1]v kann jetzt verwendet werd" +
"en.\x02exportiere\x02importiere\x02fertig\x02Ja\x02Nein\x02keine bestehe" +
"nden Servicekonfigurationen\x02Service\x02Backend\x02Übertrage %[1]s von" +
" %[2]s nach %[3]s...\x02Ab Zeitstempel: %[1]v (%[2]v)\x02Import fehlgesc" +
"hlagen, letzter Zeitstempel war %[1]v (%[2]s)\x02%[1]v von %[2]v %[3]s i" +
"n %[4]v importiert.\x02Importlog:\x02%[1]v: %[2]v\x02ungültiger Zeitstem" +
"pel „%[1]v“\x02Letzter Zeitstempel: %[1]v (%[2]v)\x02keine Konfiguration" +
"sdatei definiert, Konfiguration kann nicht geschrieben werden\x02Schlüss" +
"el darf nur die Zeichen A-Za-z0-9_- beinhalten\x02keine Servicekonfigura" +
"tion „%[1]v“"
"itel der Playlist\x02Eindeutige Playlist-ID\x02Autokorrektur für übermit" +
"telte Titel deaktivieren\x02Übersprungene Titel einbeziehen\x02URL für A" +
"utorisierung öffnen: %[1]v\x02Fehler: OAuth-State stimmt nicht überein" +
"\x04\x00\x01\x0a;\x02Zugriffstoken erhalten, %[1]v kann jetzt verwendet " +
"werden.\x02exportiere\x02importiere\x02fertig\x02Ja\x02Nein\x02keine bes" +
"tehenden Servicekonfigurationen\x02Service\x02Backend\x02Übertrage %[1]s" +
" von %[2]s nach %[3]s...\x02Ab Zeitstempel: %[1]v (%[2]v)\x02Import fehl" +
"geschlagen, letzter Zeitstempel war %[1]v (%[2]s)\x02%[1]v von %[2]v %[3" +
"]s in %[4]v importiert.\x02Letzter Zeitstempel: %[1]v (%[2]v)\x02keine K" +
"onfigurationsdatei definiert, Konfiguration kann nicht geschrieben werde" +
"n\x02Schlüssel darf nur die Zeichen A-Za-z0-9_- beinhalten\x02keine Serv" +
"icekonfiguration „%[1]v“"
var enIndex = []uint32{ // 55 elements
// Entry 0 - 1F
@ -151,15 +147,15 @@ var enIndex = []uint32{ // 55 elements
0x00000170, 0x0000019f, 0x000001c6, 0x000001de,
0x000001e8, 0x000001f6, 0x00000201, 0x0000020b,
0x00000218, 0x00000222, 0x00000231, 0x00000240,
0x0000025b, 0x0000028a, 0x000002b7, 0x000002cf,
0x000002de, 0x000002ff, 0x00000316, 0x0000034d,
0x0000025b, 0x00000288, 0x000002a0, 0x000002c7,
0x000002e3, 0x00000316, 0x00000320, 0x0000032a,
// Entry 20 - 3F
0x00000374, 0x00000390, 0x000003c3, 0x000003cd,
0x000003d7, 0x000003dc, 0x000003e0, 0x000003e3,
0x00000406, 0x0000040e, 0x00000416, 0x00000440,
0x0000045e, 0x00000497, 0x000004c1, 0x000004cd,
0x000004da, 0x000004fb, 0x0000051b, 0x0000054e,
0x00000573, 0x00000594, 0x000005cd,
0x0000032f, 0x00000333, 0x00000336, 0x00000359,
0x00000361, 0x00000369, 0x00000393, 0x000003b1,
0x000003ea, 0x00000414, 0x00000434, 0x00000467,
0x0000048c, 0x000004ad, 0x000004dc, 0x00000515,
0x00000524, 0x00000545, 0x0000055c, 0x00000593,
0x0000059f, 0x000005ac, 0x000005cd,
} // Size: 244 bytes
const enData string = "" + // Size: 1485 bytes
@ -173,20 +169,20 @@ const enData string = "" + // Size: 1485 bytes
"eceived, you can close this window now.\x02backend %[1]s does not implem" +
"ent %[2]s\x02unknown backend \x22%[1]s\x22\x02Client ID\x02Client secret" +
"\x02Server URL\x02User name\x02Access token\x02File path\x02Append to fi" +
"le\x02Playlist title\x02Unique playlist identifier\x02Check for duplicat" +
"e listens on import (slower)\x02Disable auto correction of submitted lis" +
"tens\x02Include skipped listens\x02Directory path\x02Ignore listens in i" +
"ncognito mode\x02Ignore skipped listens\x02Minimum playback duration for" +
" skipped tracks (seconds)\x02Visit the URL for authorization: %[1]v\x02E" +
"rror: OAuth state mismatch\x04\x00\x01\x0a.\x02Access token received, yo" +
"u can use %[1]v now.\x02exporting\x02importing\x02done\x02Yes\x02No\x02n" +
"o existing service configurations\x02Service\x02Backend\x02Transferring " +
"%[1]s from %[2]s to %[3]s...\x02From timestamp: %[1]v (%[2]v)\x02Import " +
"failed, last reported timestamp was %[1]v (%[2]s)\x02Imported %[1]v of %" +
"[2]v %[3]s into %[4]v.\x02Import log:\x02%[1]v: %[2]v\x02invalid timesta" +
"mp string \x22%[1]v\x22\x02Latest timestamp: %[1]v (%[2]v)\x02no configu" +
"ration file defined, cannot write config\x02key must only consist of A-Z" +
"a-z0-9_-\x02no service configuration \x22%[1]v\x22\x02Ignored duplicate " +
"listen %[1]v: \x22%[2]v\x22 by %[3]v (%[4]v)"
"le\x02Playlist title\x02Unique playlist identifier\x02Disable auto corre" +
"ction of submitted listens\x02Include skipped listens\x02Visit the URL f" +
"or authorization: %[1]v\x02Error: OAuth state mismatch\x04\x00\x01\x0a." +
"\x02Access token received, you can use %[1]v now.\x02exporting\x02import" +
"ing\x02done\x02Yes\x02No\x02no existing service configurations\x02Servic" +
"e\x02Backend\x02Transferring %[1]s from %[2]s to %[3]s...\x02From timest" +
"amp: %[1]v (%[2]v)\x02Import failed, last reported timestamp was %[1]v (" +
"%[2]s)\x02Imported %[1]v of %[2]v %[3]s into %[4]v.\x02Latest timestamp:" +
" %[1]v (%[2]v)\x02no configuration file defined, cannot write config\x02" +
"key must only consist of A-Za-z0-9_-\x02no service configuration \x22%[1" +
"]v\x22\x02Check for duplicate listens on import (slower)\x02Ignored dupl" +
"icate listen %[1]v: \x22%[2]v\x22 by %[3]v (%[4]v)\x02Directory path\x02" +
"Ignore listens in incognito mode\x02Ignore skipped listens\x02Minimum pl" +
"ayback duration for skipped tracks (seconds)\x02Import log:\x02%[1]v: %[" +
"2]v\x02invalid timestamp string \x22%[1]v\x22"
// Total table size 3640 bytes (3KiB); checksum: 719A868A
// Total table size 3377 bytes (3KiB); checksum: 6715024

View file

@ -258,11 +258,11 @@
{
"id": "Check for duplicate listens on import (slower)",
"message": "Check for duplicate listens on import (slower)",
"translation": "Beim Import auf Listen-Duplikate prüfen (langsamer)"
"translation": ""
},
{
"id": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})",
"message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})",
"id": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"translation": "",
"placeholders": [
{
@ -290,12 +290,12 @@
"expr": "l.ArtistName()"
},
{
"id": "RecordingMBID",
"id": "RecordingMbid",
"string": "%[4]v",
"type": "go.uploadedlobster.com/mbtypes.MBID",
"type": "go.uploadedlobster.com/scotty/internal/models.MBID",
"underlyingType": "string",
"argNum": 4,
"expr": "l.RecordingMBID"
"expr": "l.RecordingMbid"
}
]
},
@ -312,22 +312,22 @@
{
"id": "Directory path",
"message": "Directory path",
"translation": "Verzeichnispfad"
"translation": ""
},
{
"id": "Ignore listens in incognito mode",
"message": "Ignore listens in incognito mode",
"translation": "Listens im Inkognito-Modus ignorieren"
"translation": ""
},
{
"id": "Ignore skipped listens",
"message": "Ignore skipped listens",
"translation": "Übersprungene Listens ignorieren"
"translation": ""
},
{
"id": "Minimum playback duration for skipped tracks (seconds)",
"message": "Minimum playback duration for skipped tracks (seconds)",
"translation": "Minimale Wiedergabedauer für übersprungene Titel (Sekunden)"
"translation": ""
},
{
"id": "Visit the URL for authorization: {Url}",
@ -525,12 +525,12 @@
{
"id": "Import log:",
"message": "Import log:",
"translation": "Importlog:"
"translation": ""
},
{
"id": "{Type}: {Message}",
"message": "{Type}: {Message}",
"translation": "{Type}: {Message}",
"translation": "",
"placeholders": [
{
"id": "Type",
@ -553,7 +553,7 @@
{
"id": "invalid timestamp string \"{FlagValue}\"",
"message": "invalid timestamp string \"{FlagValue}\"",
"translation": "ungültiger Zeitstempel „{FlagValue}“",
"translation": "",
"placeholders": [
{
"id": "FlagValue",

View file

@ -311,9 +311,9 @@
"fuzzy": true
},
{
"id": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})",
"message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})",
"translation": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})",
"id": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"translation": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"translatorComment": "Copied from source.",
"placeholders": [
{
@ -341,12 +341,12 @@
"expr": "l.ArtistName()"
},
{
"id": "RecordingMBID",
"id": "RecordingMbid",
"string": "%[4]v",
"type": "go.uploadedlobster.com/mbtypes.MBID",
"type": "go.uploadedlobster.com/scotty/internal/models.MBID",
"underlyingType": "string",
"argNum": 4,
"expr": "l.RecordingMBID"
"expr": "l.RecordingMbid"
}
],
"fuzzy": true

View file

@ -6,4 +6,4 @@ package are published under the conditions of CC0 1.0 Universal (CC0 1.0)
package translations
//go:generate go tool gotext -srclang=en update -out=catalog.go -lang=en,de go.uploadedlobster.com/scotty
//go:generate gotext -srclang=en update -out=catalog.go -lang=en,de go.uploadedlobster.com/scotty