-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprovider.go
82 lines (71 loc) · 1.66 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package streamnx
import (
"github.com/GeorgeGorbanev/streamnx/internal/apple"
"github.com/GeorgeGorbanev/streamnx/internal/spotify"
"github.com/GeorgeGorbanev/streamnx/internal/yandex"
"github.com/GeorgeGorbanev/streamnx/internal/youtube"
)
var (
Providers = []*Provider{
Apple,
Spotify,
Yandex,
Youtube,
}
Apple = &Provider{
name: "Apple",
сode: "ap",
regions: apple.ISO3166codes,
trackIDParser: apple.DetectTrackID,
albumIDParser: apple.DetectAlbumID,
}
Spotify = &Provider{
name: "Spotify",
сode: "sf",
trackIDParser: spotify.DetectTrackID,
albumIDParser: spotify.DetectAlbumID,
}
Yandex = &Provider{
name: "Yandex",
сode: "ya",
regions: yandex.Regions,
trackIDParser: yandex.DetectTrackID,
albumIDParser: yandex.DetectAlbumID,
}
Youtube = &Provider{
name: "Youtube",
сode: "yt",
trackIDParser: youtube.DetectTrackID,
albumIDParser: youtube.DetectAlbumID,
}
)
type Provider struct {
name string
сode string
regions []string
trackIDParser func(trackURL string) string
albumIDParser func(albumURL string) string
}
func (p *Provider) Name() string {
return p.name
}
func (p *Provider) Code() string {
return p.сode
}
func (p *Provider) Regions() []string {
return p.regions
}
func (p *Provider) DetectTrackID(trackURL string) string {
return p.trackIDParser(trackURL)
}
func (p *Provider) DetectAlbumID(albumURL string) string {
return p.albumIDParser(albumURL)
}
func FindProviderByCode(code string) *Provider {
for _, provider := range Providers {
if provider.сode == code {
return provider
}
}
return nil
}