107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
package backend
|
|
|
|
type qobuzDownloadProvider interface {
|
|
Name() string
|
|
Attempts(trackID int64, quality string) []qobuzProviderAttempt
|
|
}
|
|
|
|
type qobuzProviderAttempt struct {
|
|
Name string
|
|
ID string
|
|
Download func() (string, error)
|
|
}
|
|
|
|
type QobuzProviderWJHE struct {
|
|
downloader *QobuzDownloader
|
|
}
|
|
|
|
func (p QobuzProviderWJHE) Name() string {
|
|
return "QobuzProviderWJHE"
|
|
}
|
|
|
|
func (p QobuzProviderWJHE) Attempts(trackID int64, quality string) []qobuzProviderAttempt {
|
|
return []qobuzProviderAttempt{
|
|
{
|
|
Name: p.Name(),
|
|
ID: GetQobuzWJHEStreamAPIURL(),
|
|
Download: func() (string, error) {
|
|
return p.downloader.DownloadFromWJHE(trackID, quality)
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
type QobuzProviderMusicDL struct {
|
|
downloader *QobuzDownloader
|
|
}
|
|
|
|
func (p QobuzProviderMusicDL) Name() string {
|
|
return "QobuzProviderMusicDL"
|
|
}
|
|
|
|
func (p QobuzProviderMusicDL) Attempts(trackID int64, quality string) []qobuzProviderAttempt {
|
|
return []qobuzProviderAttempt{
|
|
{
|
|
Name: p.Name(),
|
|
ID: GetQobuzMusicDLDownloadAPIURL(),
|
|
Download: func() (string, error) {
|
|
return p.downloader.DownloadFromMusicDL(trackID, quality)
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
type QobuzProviderGDStudio struct {
|
|
downloader *QobuzDownloader
|
|
}
|
|
|
|
func (p QobuzProviderGDStudio) Name() string {
|
|
return "QobuzProviderGDStudio"
|
|
}
|
|
|
|
func (p QobuzProviderGDStudio) Attempts(trackID int64, quality string) []qobuzProviderAttempt {
|
|
attempts := make([]qobuzProviderAttempt, 0, len(GetQobuzGDStudioAPIURLs()))
|
|
for _, apiURL := range GetQobuzGDStudioAPIURLs() {
|
|
currentAPIURL := apiURL
|
|
attempts = append(attempts, qobuzProviderAttempt{
|
|
Name: p.Name(),
|
|
ID: currentAPIURL,
|
|
Download: func() (string, error) {
|
|
return p.downloader.DownloadFromGDStudio(trackID, quality, currentAPIURL)
|
|
},
|
|
})
|
|
}
|
|
return attempts
|
|
}
|
|
|
|
func (q *QobuzDownloader) getQobuzDownloadProviders() []qobuzDownloadProvider {
|
|
return []qobuzDownloadProvider{
|
|
QobuzProviderWJHE{downloader: q},
|
|
QobuzProviderGDStudio{downloader: q},
|
|
QobuzProviderMusicDL{downloader: q},
|
|
}
|
|
}
|
|
|
|
func moveQobuzAttemptIDsLast(providerIDs []string, lastIDs ...string) []string {
|
|
if len(providerIDs) == 0 || len(lastIDs) == 0 {
|
|
return append([]string(nil), providerIDs...)
|
|
}
|
|
|
|
lastIDSet := make(map[string]struct{}, len(lastIDs))
|
|
for _, providerID := range lastIDs {
|
|
lastIDSet[providerID] = struct{}{}
|
|
}
|
|
|
|
ordered := make([]string, 0, len(providerIDs))
|
|
trailing := make([]string, 0, len(providerIDs))
|
|
for _, providerID := range providerIDs {
|
|
if _, ok := lastIDSet[providerID]; ok {
|
|
trailing = append(trailing, providerID)
|
|
continue
|
|
}
|
|
ordered = append(ordered, providerID)
|
|
}
|
|
|
|
return append(ordered, trailing...)
|
|
}
|