v7.1.7
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
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...)
|
||||
}
|
||||
Reference in New Issue
Block a user