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 go 1.23.0
toolchain go1.24.2 toolchain go1.23.8
require ( require (
github.com/Xuanwo/go-locale v1.1.3 github.com/Xuanwo/go-locale v1.1.3
@ -14,15 +14,15 @@ require (
github.com/go-resty/resty/v2 v2.16.5 github.com/go-resty/resty/v2 v2.16.5
github.com/jarcoal/httpmock v1.3.1 github.com/jarcoal/httpmock v1.3.1
github.com/manifoldco/promptui v0.9.0 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/shkh/lastfm-go v0.0.0-20191215035245-89a801c244e0
github.com/spf13/cast v1.7.1 github.com/spf13/cast v1.7.1
github.com/spf13/cobra v1.9.1 github.com/spf13/cobra v1.9.1
github.com/spf13/viper v1.20.1 github.com/spf13/viper v1.20.1
github.com/stretchr/testify v1.10.0 github.com/stretchr/testify v1.10.0
github.com/vbauerster/mpb/v8 v8.9.3 github.com/vbauerster/mpb/v8 v8.9.3
go.uploadedlobster.com/mbtypes v0.4.0 go.uploadedlobster.com/mbtypes v0.2.0
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
golang.org/x/oauth2 v0.29.0 golang.org/x/oauth2 v0.29.0
golang.org/x/text v0.24.0 golang.org/x/text v0.24.0
gorm.io/datatypes v1.2.5 gorm.io/datatypes v1.2.5
@ -38,7 +38,7 @@ require (
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/glebarez/go-sqlite v1.22.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/go-viper/mapstructure/v2 v2.2.1 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.1.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/spf13/pflag v1.0.6 // indirect
github.com/subosito/gotenv v1.6.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
golang.org/x/mod v0.24.0 // indirect golang.org/x/net v0.38.0 // indirect
golang.org/x/net v0.39.0 // indirect
golang.org/x/sync v0.13.0 // indirect
golang.org/x/sys v0.32.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 gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/mysql v1.5.7 // indirect gorm.io/driver/mysql v1.5.7 // indirect
modernc.org/libc v1.62.1 // indirect modernc.org/libc v1.62.1 // indirect
@ -69,5 +66,3 @@ require (
modernc.org/memory v1.9.1 // indirect modernc.org/memory v1.9.1 // indirect
modernc.org/sqlite v1.37.0 // 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 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA= 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.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.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI=
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= 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 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= 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= 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/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 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= 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.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= 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 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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= 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= 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 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 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.2.0 h1:sV9WM5fY8KnnKwKKVRaU3JBEKP4zD7aUX0XQfNZvEdo=
go.uploadedlobster.com/mbtypes v0.4.0/go.mod h1:Bu1K1Hl77QTAE2Z7QKiW/JAp9KqYWQebkRRfG02dlZM= go.uploadedlobster.com/mbtypes v0.2.0/go.mod h1:/ZpwXc8oRpDa7EWeGI9xEY+nGhMIVHhTruikZWD4Krg=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= 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 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 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.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= 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 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= 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/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 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 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.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= 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 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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 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, "\tbackend: %v": 11,
"\texport: %s": 0, "\texport: %s": 0,
"\timport: %s\n": 1, "\timport: %s\n": 1,
"%v: %v": 47, "%v: %v": 52,
"Aborted": 8, "Aborted": 8,
"Access token": 19, "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, "Append to file": 21,
"Backend": 41, "Backend": 36,
"Check for duplicate listens on import (slower)": 24, "Check for duplicate listens on import (slower)": 45,
"Client ID": 15, "Client ID": 15,
"Client secret": 16, "Client secret": 16,
"Delete the service configuration \"%v\"?": 7, "Delete the service configuration \"%v\"?": 7,
"Directory path": 27, "Directory path": 47,
"Disable auto correction of submitted listens": 25, "Disable auto correction of submitted listens": 24,
"Error: OAuth state mismatch": 32, "Error: OAuth state mismatch": 27,
"Failed reading config: %v": 2, "Failed reading config: %v": 2,
"File path": 20, "File path": 20,
"From timestamp: %v (%v)": 43, "From timestamp: %v (%v)": 38,
"Ignore listens in incognito mode": 28, "Ignore listens in incognito mode": 48,
"Ignore skipped listens": 29, "Ignore skipped listens": 49,
"Ignored duplicate listen %v: \"%v\" by %v (%v)": 53, "Ignored duplicate listen %v: \"%v\" by %v (%v)": 46,
"Import failed, last reported timestamp was %v (%s)": 44, "Import failed, last reported timestamp was %v (%s)": 39,
"Import log:": 46, "Import log:": 51,
"Imported %v of %v %s into %v.": 45, "Imported %v of %v %s into %v.": 40,
"Include skipped listens": 26, "Include skipped listens": 25,
"Latest timestamp: %v (%v)": 49, "Latest timestamp: %v (%v)": 41,
"Minimum playback duration for skipped tracks (seconds)": 30, "Minimum playback duration for skipped tracks (seconds)": 50,
"No": 38, "No": 33,
"Playlist title": 22, "Playlist title": 22,
"Saved service %v using backend %v": 5, "Saved service %v using backend %v": 5,
"Server URL": 17, "Server URL": 17,
"Service": 40, "Service": 35,
"Service \"%v\" deleted\n": 9, "Service \"%v\" deleted\n": 9,
"Service name": 3, "Service name": 3,
"The backend %v requires authentication. Authenticate now?": 6, "The backend %v requires authentication. Authenticate now?": 6,
"Token received, you can close this window now.": 12, "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, "Unique playlist identifier": 23,
"Updated service %v using backend %v\n": 10, "Updated service %v using backend %v\n": 10,
"User name": 18, "User name": 18,
"Visit the URL for authorization: %v": 31, "Visit the URL for authorization: %v": 26,
"Yes": 37, "Yes": 32,
"a service with this name already exists": 4, "a service with this name already exists": 4,
"backend %s does not implement %s": 13, "backend %s does not implement %s": 13,
"done": 36, "done": 31,
"exporting": 34, "exporting": 29,
"importing": 35, "importing": 30,
"invalid timestamp string \"%v\"": 48, "invalid timestamp string \"%v\"": 53,
"key must only consist of A-Za-z0-9_-": 51, "key must only consist of A-Za-z0-9_-": 43,
"no configuration file defined, cannot write config": 50, "no configuration file defined, cannot write config": 42,
"no existing service configurations": 39, "no existing service configurations": 34,
"no service configuration \"%v\"": 52, "no service configuration \"%v\"": 44,
"unknown backend \"%s\"": 14, "unknown backend \"%s\"": 14,
} }
@ -103,18 +103,18 @@ var deIndex = []uint32{ // 55 elements
0x000001ac, 0x000001e7, 0x00000213, 0x00000233, 0x000001ac, 0x000001e7, 0x00000213, 0x00000233,
0x0000023d, 0x0000024b, 0x00000256, 0x00000263, 0x0000023d, 0x0000024b, 0x00000256, 0x00000263,
0x00000271, 0x0000027b, 0x0000028e, 0x000002a1, 0x00000271, 0x0000027b, 0x0000028e, 0x000002a1,
0x000002b8, 0x000002ed, 0x00000321, 0x00000342, 0x000002b8, 0x000002ec, 0x0000030d, 0x00000333,
0x00000352, 0x00000378, 0x0000039a, 0x000003d8, 0x0000035d, 0x0000039d, 0x000003a8, 0x000003b3,
// Entry 20 - 3F // Entry 20 - 3F
0x000003fe, 0x00000428, 0x00000468, 0x00000473, 0x000003ba, 0x000003bd, 0x000003c2, 0x000003eb,
0x0000047e, 0x00000485, 0x00000488, 0x0000048d, 0x000003f3, 0x000003fb, 0x00000424, 0x00000442,
0x000004b6, 0x000004be, 0x000004c6, 0x000004ef, 0x0000047f, 0x000004aa, 0x000004cd, 0x0000051e,
0x0000050d, 0x0000054a, 0x00000575, 0x00000580, 0x00000555, 0x0000057c, 0x0000057c, 0x0000057c,
0x0000058d, 0x000005b1, 0x000005d4, 0x00000625, 0x0000057c, 0x0000057c, 0x0000057c, 0x0000057c,
0x0000065c, 0x00000683, 0x00000683, 0x0000057c, 0x0000057c, 0x0000057c,
} // Size: 244 bytes } // 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:" + "\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" + " %[1]s\x02Fehler beim Lesen der Konfiguration: %[1]v\x02Servicename\x02e" +
"in Service mit diesem Namen existiert bereits\x02Service %[1]v mit dem B" + "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" + " geschlossen werden.\x02das backend %[1]s implementiert %[2]s nicht\x02u" +
"nbekanntes Backend „%[1]s“\x02Client-ID\x02Client-Secret\x02Server-URL" + "nbekanntes Backend „%[1]s“\x02Client-ID\x02Client-Secret\x02Server-URL" +
"\x02Benutzername\x02Zugriffstoken\x02Dateipfad\x02An Datei anhängen\x02T" + "\x02Benutzername\x02Zugriffstoken\x02Dateipfad\x02An Datei anhängen\x02T" +
"itel der Playlist\x02Eindeutige Playlist-ID\x02Beim Import auf Listen-Du" + "itel der Playlist\x02Eindeutige Playlist-ID\x02Autokorrektur für übermit" +
"plikate prüfen (langsamer)\x02Autokorrektur für übermittelte Titel deakt" + "telte Titel deaktivieren\x02Übersprungene Titel einbeziehen\x02URL für A" +
"ivieren\x02Übersprungene Titel einbeziehen\x02Verzeichnispfad\x02Listens" + "utorisierung öffnen: %[1]v\x02Fehler: OAuth-State stimmt nicht überein" +
" im Inkognito-Modus ignorieren\x02Übersprungene Listens ignorieren\x02Mi" + "\x04\x00\x01\x0a;\x02Zugriffstoken erhalten, %[1]v kann jetzt verwendet " +
"nimale Wiedergabedauer für übersprungene Titel (Sekunden)\x02URL für Aut" + "werden.\x02exportiere\x02importiere\x02fertig\x02Ja\x02Nein\x02keine bes" +
"orisierung öffnen: %[1]v\x02Fehler: OAuth-State stimmt nicht überein\x04" + "tehenden Servicekonfigurationen\x02Service\x02Backend\x02Übertrage %[1]s" +
"\x00\x01\x0a;\x02Zugriffstoken erhalten, %[1]v kann jetzt verwendet werd" + " von %[2]s nach %[3]s...\x02Ab Zeitstempel: %[1]v (%[2]v)\x02Import fehl" +
"en.\x02exportiere\x02importiere\x02fertig\x02Ja\x02Nein\x02keine bestehe" + "geschlagen, letzter Zeitstempel war %[1]v (%[2]s)\x02%[1]v von %[2]v %[3" +
"nden Servicekonfigurationen\x02Service\x02Backend\x02Übertrage %[1]s von" + "]s in %[4]v importiert.\x02Letzter Zeitstempel: %[1]v (%[2]v)\x02keine K" +
" %[2]s nach %[3]s...\x02Ab Zeitstempel: %[1]v (%[2]v)\x02Import fehlgesc" + "onfigurationsdatei definiert, Konfiguration kann nicht geschrieben werde" +
"hlagen, letzter Zeitstempel war %[1]v (%[2]s)\x02%[1]v von %[2]v %[3]s i" + "n\x02Schlüssel darf nur die Zeichen A-Za-z0-9_- beinhalten\x02keine Serv" +
"n %[4]v importiert.\x02Importlog:\x02%[1]v: %[2]v\x02ungültiger Zeitstem" + "icekonfiguration „%[1]v“"
"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“"
var enIndex = []uint32{ // 55 elements var enIndex = []uint32{ // 55 elements
// Entry 0 - 1F // Entry 0 - 1F
@ -151,15 +147,15 @@ var enIndex = []uint32{ // 55 elements
0x00000170, 0x0000019f, 0x000001c6, 0x000001de, 0x00000170, 0x0000019f, 0x000001c6, 0x000001de,
0x000001e8, 0x000001f6, 0x00000201, 0x0000020b, 0x000001e8, 0x000001f6, 0x00000201, 0x0000020b,
0x00000218, 0x00000222, 0x00000231, 0x00000240, 0x00000218, 0x00000222, 0x00000231, 0x00000240,
0x0000025b, 0x0000028a, 0x000002b7, 0x000002cf, 0x0000025b, 0x00000288, 0x000002a0, 0x000002c7,
0x000002de, 0x000002ff, 0x00000316, 0x0000034d, 0x000002e3, 0x00000316, 0x00000320, 0x0000032a,
// Entry 20 - 3F // Entry 20 - 3F
0x00000374, 0x00000390, 0x000003c3, 0x000003cd, 0x0000032f, 0x00000333, 0x00000336, 0x00000359,
0x000003d7, 0x000003dc, 0x000003e0, 0x000003e3, 0x00000361, 0x00000369, 0x00000393, 0x000003b1,
0x00000406, 0x0000040e, 0x00000416, 0x00000440, 0x000003ea, 0x00000414, 0x00000434, 0x00000467,
0x0000045e, 0x00000497, 0x000004c1, 0x000004cd, 0x0000048c, 0x000004ad, 0x000004dc, 0x00000515,
0x000004da, 0x000004fb, 0x0000051b, 0x0000054e, 0x00000524, 0x00000545, 0x0000055c, 0x00000593,
0x00000573, 0x00000594, 0x000005cd, 0x0000059f, 0x000005ac, 0x000005cd,
} // Size: 244 bytes } // Size: 244 bytes
const enData string = "" + // Size: 1485 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" + "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" + "ent %[2]s\x02unknown backend \x22%[1]s\x22\x02Client ID\x02Client secret" +
"\x02Server URL\x02User name\x02Access token\x02File path\x02Append to fi" + "\x02Server URL\x02User name\x02Access token\x02File path\x02Append to fi" +
"le\x02Playlist title\x02Unique playlist identifier\x02Check for duplicat" + "le\x02Playlist title\x02Unique playlist identifier\x02Disable auto corre" +
"e listens on import (slower)\x02Disable auto correction of submitted lis" + "ction of submitted listens\x02Include skipped listens\x02Visit the URL f" +
"tens\x02Include skipped listens\x02Directory path\x02Ignore listens in i" + "or authorization: %[1]v\x02Error: OAuth state mismatch\x04\x00\x01\x0a." +
"ncognito mode\x02Ignore skipped listens\x02Minimum playback duration for" + "\x02Access token received, you can use %[1]v now.\x02exporting\x02import" +
" skipped tracks (seconds)\x02Visit the URL for authorization: %[1]v\x02E" + "ing\x02done\x02Yes\x02No\x02no existing service configurations\x02Servic" +
"rror: OAuth state mismatch\x04\x00\x01\x0a.\x02Access token received, yo" + "e\x02Backend\x02Transferring %[1]s from %[2]s to %[3]s...\x02From timest" +
"u can use %[1]v now.\x02exporting\x02importing\x02done\x02Yes\x02No\x02n" + "amp: %[1]v (%[2]v)\x02Import failed, last reported timestamp was %[1]v (" +
"o existing service configurations\x02Service\x02Backend\x02Transferring " + "%[2]s)\x02Imported %[1]v of %[2]v %[3]s into %[4]v.\x02Latest timestamp:" +
"%[1]s from %[2]s to %[3]s...\x02From timestamp: %[1]v (%[2]v)\x02Import " + " %[1]v (%[2]v)\x02no configuration file defined, cannot write config\x02" +
"failed, last reported timestamp was %[1]v (%[2]s)\x02Imported %[1]v of %" + "key must only consist of A-Za-z0-9_-\x02no service configuration \x22%[1" +
"[2]v %[3]s into %[4]v.\x02Import log:\x02%[1]v: %[2]v\x02invalid timesta" + "]v\x22\x02Check for duplicate listens on import (slower)\x02Ignored dupl" +
"mp string \x22%[1]v\x22\x02Latest timestamp: %[1]v (%[2]v)\x02no configu" + "icate listen %[1]v: \x22%[2]v\x22 by %[3]v (%[4]v)\x02Directory path\x02" +
"ration file defined, cannot write config\x02key must only consist of A-Z" + "Ignore listens in incognito mode\x02Ignore skipped listens\x02Minimum pl" +
"a-z0-9_-\x02no service configuration \x22%[1]v\x22\x02Ignored duplicate " + "ayback duration for skipped tracks (seconds)\x02Import log:\x02%[1]v: %[" +
"listen %[1]v: \x22%[2]v\x22 by %[3]v (%[4]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)", "id": "Check for duplicate listens on import (slower)",
"message": "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})", "id": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMBID})", "message": "Ignored duplicate listen {ListenedAt}: \"{TrackName}\" by {ArtistName} ({RecordingMbid})",
"translation": "", "translation": "",
"placeholders": [ "placeholders": [
{ {
@ -290,12 +290,12 @@
"expr": "l.ArtistName()" "expr": "l.ArtistName()"
}, },
{ {
"id": "RecordingMBID", "id": "RecordingMbid",
"string": "%[4]v", "string": "%[4]v",
"type": "go.uploadedlobster.com/mbtypes.MBID", "type": "go.uploadedlobster.com/scotty/internal/models.MBID",
"underlyingType": "string", "underlyingType": "string",
"argNum": 4, "argNum": 4,
"expr": "l.RecordingMBID" "expr": "l.RecordingMbid"
} }
] ]
}, },
@ -312,22 +312,22 @@
{ {
"id": "Directory path", "id": "Directory path",
"message": "Directory path", "message": "Directory path",
"translation": "Verzeichnispfad" "translation": ""
}, },
{ {
"id": "Ignore listens in incognito mode", "id": "Ignore listens in incognito mode",
"message": "Ignore listens in incognito mode", "message": "Ignore listens in incognito mode",
"translation": "Listens im Inkognito-Modus ignorieren" "translation": ""
}, },
{ {
"id": "Ignore skipped listens", "id": "Ignore skipped listens",
"message": "Ignore skipped listens", "message": "Ignore skipped listens",
"translation": "Übersprungene Listens ignorieren" "translation": ""
}, },
{ {
"id": "Minimum playback duration for skipped tracks (seconds)", "id": "Minimum playback duration for skipped tracks (seconds)",
"message": "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}", "id": "Visit the URL for authorization: {Url}",
@ -525,12 +525,12 @@
{ {
"id": "Import log:", "id": "Import log:",
"message": "Import log:", "message": "Import log:",
"translation": "Importlog:" "translation": ""
}, },
{ {
"id": "{Type}: {Message}", "id": "{Type}: {Message}",
"message": "{Type}: {Message}", "message": "{Type}: {Message}",
"translation": "{Type}: {Message}", "translation": "",
"placeholders": [ "placeholders": [
{ {
"id": "Type", "id": "Type",
@ -553,7 +553,7 @@
{ {
"id": "invalid timestamp string \"{FlagValue}\"", "id": "invalid timestamp string \"{FlagValue}\"",
"message": "invalid timestamp string \"{FlagValue}\"", "message": "invalid timestamp string \"{FlagValue}\"",
"translation": "ungültiger Zeitstempel „{FlagValue}“", "translation": "",
"placeholders": [ "placeholders": [
{ {
"id": "FlagValue", "id": "FlagValue",

View file

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

View file

@ -6,4 +6,4 @@ package are published under the conditions of CC0 1.0 Universal (CC0 1.0)
package translations 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