-
Notifications
You must be signed in to change notification settings - Fork 0
/
miaosic.go
107 lines (87 loc) · 2.15 KB
/
miaosic.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package miaosic
type Picture struct {
Url string
Data []byte
}
func (p Picture) Exists() bool {
return p.Url != "" || p.Data != nil
}
type MetaData struct {
Provider string
Identifier string
}
func NewMetaData(provider, identifier string) MetaData {
return MetaData{
Provider: provider,
Identifier: identifier,
}
}
func (m MetaData) ID() string {
return m.Provider + "_" + m.Identifier
}
type Quality string
const (
QualityAny Quality = ""
QualityUnk Quality = "unknown"
Quality128k Quality = "128k"
Quality192k Quality = "192k"
Quality256k Quality = "256k"
Quality320k Quality = "320k"
)
type MediaUrl struct {
Url string
Quality Quality
Header map[string]string
}
func NewMediaUrl(url string, quality Quality) MediaUrl {
return MediaUrl{
Url: url,
Quality: quality,
Header: make(map[string]string),
}
}
type MediaInfo struct {
Title string
Artist string
Cover Picture
Album string
Meta MetaData
}
type Playlist struct {
Title string
Medias []*MediaInfo
Meta MetaData
}
type MediaProvider interface {
// GetName returns the name of the provider.
GetName() string
// Search returns a list of MetaData.
Search(keyword string, page, size int) ([]MediaInfo, error)
// ===== Media related =====
// MatchMedia returns a MetaData if the uri is matched, otherwise nil.
MatchMedia(uri string) (MetaData, bool)
GetMediaInfo(meta MetaData) (MediaInfo, error)
GetMediaUrl(meta MetaData, quality Quality) ([]MediaUrl, error)
GetMediaLyric(meta MetaData) ([]Lyrics, error)
// ===== Playlist related =====
// MatchPlaylist returns a MetaData if the uri is matched, otherwise nil.
MatchPlaylist(uri string) (MetaData, bool)
// GetPlaylist returns a Playlist, it fetches all data, so it might be slow.
GetPlaylist(meta MetaData) (*Playlist, error)
}
type QrLoginSession struct {
Url string
Key string
}
type QrLoginResult struct {
Success bool
Message string
}
type Loginable interface {
Login(username string, password string) error
Logout() error
QrLogin() (*QrLoginSession, error)
QrLoginVerify(qrlogin *QrLoginSession) (*QrLoginResult, error)
RestoreSession(session string) error
SaveSession() string
}