summaryrefslogtreecommitdiff
path: root/types/live_room.go
blob: 77588c53d03bb416bad46341d19d0110661adc2f (plain)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package types

type RoomUrlInfoResponse = BaseResponse[roomUrlInfo]

type roomUrlInfo struct {
	CurrentQuality       int                  `json:"current_quality"`
	AcceptQuality        []string             `json:"accept_quality"`
	CurrentQualityNumber int                  `json:"current_qn"`
	QualityDescription   []qualityDescription `json:"quality_description"`
	URLs                 []StreamingUrlInfo   `json:"durl"`
}

type qualityDescription struct {
	QualityNumber int    `json:"qn"`
	Description   string `json:"desc"`
}

type StreamingUrlInfo struct {
	URL        string `json:"url"`
	Length     int    `json:"length"`
	Order      int    `json:"order"`
	StreamType int    `json:"stream_type"`
	P2pType    int    `json:"p2p_type"`
}

type roomProfile struct {
	UID              int      `json:"uid"`
	RoomID           RoomId   `json:"room_id"`
	ShortID          int      `json:"short_id"`
	Attention        int      `json:"attention"`
	Online           int      `json:"online"`
	IsPortrait       bool     `json:"is_portrait"`
	Description      string   `json:"description"`
	LiveStatus       int      `json:"live_status"`
	AreaID           int      `json:"area_id"`
	ParentAreaID     int      `json:"parent_area_id"`
	ParentAreaName   string   `json:"parent_area_name"`
	OldAreaID        int      `json:"old_area_id"`
	Background       string   `json:"background"`
	Title            string   `json:"title"`
	UserCover        string   `json:"user_cover"`
	Keyframe         string   `json:"keyframe"`
	IsStrictRoom     bool     `json:"is_strict_room"`
	LiveTime         string   `json:"live_time"`
	Tags             string   `json:"tags"`
	IsAnchor         int      `json:"is_anchor"`
	RoomSilentType   string   `json:"room_silent_type"`
	RoomSilentLevel  int      `json:"room_silent_level"`
	RoomSilentSecond int      `json:"room_silent_second"`
	AreaName         string   `json:"area_name"`
	Pendants         string   `json:"pendants"`
	AreaPendants     string   `json:"area_pendants"`
	HotWords         []string `json:"hot_words"`
	HotWordsStatus   int      `json:"hot_words_status"`
	Verify           string   `json:"verify"`
	NewPendants      struct {
		Frame struct {
			Name       string `json:"name"`
			Value      string `json:"value"`
			Position   int    `json:"position"`
			Desc       string `json:"desc"`
			Area       int    `json:"area"`
			AreaOld    int    `json:"area_old"`
			BgColor    string `json:"bg_color"`
			BgPic      string `json:"bg_pic"`
			UseOldArea bool   `json:"use_old_area"`
		} `json:"frame"`
		Badge struct {
			Name     string `json:"name"`
			Position int    `json:"position"`
			Value    string `json:"value"`
			Desc     string `json:"desc"`
		} `json:"badge"`
		MobileFrame struct {
			Name       string `json:"name"`
			Value      string `json:"value"`
			Position   int    `json:"position"`
			Desc       string `json:"desc"`
			Area       int    `json:"area"`
			AreaOld    int    `json:"area_old"`
			BgColor    string `json:"bg_color"`
			BgPic      string `json:"bg_pic"`
			UseOldArea bool   `json:"use_old_area"`
		} `json:"mobile_frame"`
		MobileBadge interface{} `json:"mobile_badge"`
	} `json:"new_pendants"`
	UpSession            string `json:"up_session"`
	PkStatus             int    `json:"pk_status"`
	PkID                 int    `json:"pk_id"`
	BattleID             int    `json:"battle_id"`
	AllowChangeAreaTime  int    `json:"allow_change_area_time"`
	AllowUploadCoverTime int    `json:"allow_upload_cover_time"`
	StudioInfo           struct {
		Status     int           `json:"status"`
		MasterList []interface{} `json:"master_list"`
	} `json:"studio_info"`
}

type RoomProfileResponse = BaseResponse[roomProfile]

type LiveStatus int

const (
	Inactive  LiveStatus = 0
	Streaming LiveStatus = 1
	Playback  LiveStatus = 2
)

var liveStatusStringMap = map[LiveStatus]string{
	Inactive:  "inactive",
	Streaming: "streaming",
	Playback:  "inactive (playback)",
}

type roomPlayInfo struct {
	RoomID          uint64        `json:"room_id"`
	ShortID         uint          `json:"short_id"`
	UID             uint          `json:"uid"`
	IsHidden        bool          `json:"is_hidden"`
	IsLocked        bool          `json:"is_locked"`
	IsPortrait      bool          `json:"is_portrait"`
	LiveStatus      LiveStatus    `json:"live_status"` // 0: inactive 1: streaming 2: playback
	HiddenTill      int           `json:"hidden_till"`
	LockTill        int           `json:"lock_till"`
	Encrypted       bool          `json:"encrypted"`
	PwdVerified     bool          `json:"pwd_verified"`
	LiveTime        int           `json:"live_time"`
	RoomShield      int           `json:"room_shield"`
	AllSpecialTypes []interface{} `json:"all_special_types"`
	PlayurlInfo     interface{}   `json:"playurl_info"`
}

type RoomPlayInfoResponse = BaseResponse[roomPlayInfo]

func (s LiveStatus) IsStreaming() bool {
	return s == Streaming
}

func (s LiveStatus) String() string {
	return liveStatusStringMap[s]
}

type DanmakuServerInfoResponse = BaseResponse[danmakuInfo]

type danmakuInfo struct {
	Group            string  `json:"group"`
	BusinessID       int     `json:"business_id"`
	RefreshRowFactor float64 `json:"refresh_row_factor"`
	RefreshRate      int     `json:"refresh_rate"`
	MaxDelay         int     `json:"max_delay"`
	Token            string  `json:"token"`
	HostList         []struct {
		Host    string `json:"host"`
		Port    int    `json:"port"`
		WssPort int    `json:"wss_port"`
		WsPort  int    `json:"ws_port"`
	} `json:"host_list"`
}