Initial commit
This commit is contained in:
commit
02a6dabcfb
62 files changed
+15751
No files matched your search
@@ -0,0 +1,206 @@
|
||||
package ynison
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/ynison/proto"
|
||||
)
|
||||
|
||||
// CreatePlayingStatus creates a playing status
|
||||
func CreatePlayingStatus(progressMs, durationMs int64, paused bool, playbackSpeed float64, deviceID string) *proto.PlayingStatus {
|
||||
return &proto.PlayingStatus{
|
||||
ProgressMs: progressMs,
|
||||
DurationMs: durationMs,
|
||||
Paused: paused,
|
||||
PlaybackSpeed: playbackSpeed,
|
||||
Version: &proto.UpdateVersion{
|
||||
DeviceId: deviceID,
|
||||
Version: 1,
|
||||
TimestampMs: time.Now().UnixMilli(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreatePlayable creates a playable entity
|
||||
func CreatePlayable(playableID, albumID, from, title, coverURL string, playableType proto.PlayablePlayableType) *proto.Playable {
|
||||
return &proto.Playable{
|
||||
PlayableId: playableID,
|
||||
AlbumIdOptional: albumID,
|
||||
PlayableType: playableType,
|
||||
From: from,
|
||||
Title: title,
|
||||
CoverUrlOptional: coverURL,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateTrackPlayable creates a track playable
|
||||
func CreateTrackPlayable(playableID, albumID, from, title, coverURL string, trackSourceKey uint32, batchID string) *proto.Playable {
|
||||
return &proto.Playable{
|
||||
PlayableId: playableID,
|
||||
AlbumIdOptional: albumID,
|
||||
PlayableType: proto.PlayablePlayableType_PLAYABLE_TYPE_TRACK,
|
||||
From: from,
|
||||
Title: title,
|
||||
CoverUrlOptional: coverURL,
|
||||
TrackInfo: &proto.TrackInfo{
|
||||
TrackSourceKey: trackSourceKey,
|
||||
BatchIdOptional: batchID,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateVideoClipPlayable creates a video clip playable
|
||||
func CreateVideoClipPlayable(playableID, from, title, coverURL string, recommendationType proto.VideoClipInfoRecommendationType) *proto.Playable {
|
||||
return &proto.Playable{
|
||||
PlayableId: playableID,
|
||||
PlayableType: proto.PlayablePlayableType_PLAYABLE_TYPE_VIDEO_CLIP,
|
||||
From: from,
|
||||
Title: title,
|
||||
CoverUrlOptional: coverURL,
|
||||
VideoClipInfo: &proto.VideoClipInfo{
|
||||
RecommendationType: recommendationType,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreatePlayerQueue creates a player queue
|
||||
func CreatePlayerQueue(entityID string, entityType proto.PlayerQueueEntityType, playables []*proto.Playable, currentIndex int32, deviceID string) *proto.PlayerQueue {
|
||||
return &proto.PlayerQueue{
|
||||
EntityId: entityID,
|
||||
EntityType: entityType,
|
||||
CurrentPlayableIndex: currentIndex,
|
||||
PlayableList: playables,
|
||||
Options: &proto.PlayerStateOptions{
|
||||
RepeatMode: proto.PlayerStateOptionsRepeatMode_REPEAT_MODE_NONE,
|
||||
},
|
||||
Version: &proto.UpdateVersion{
|
||||
DeviceId: deviceID,
|
||||
Version: 1,
|
||||
TimestampMs: time.Now().UnixMilli(),
|
||||
},
|
||||
EntityContext: proto.PlayerQueueEntityContext_ENTITY_CONTEXT_BASED_ON_ENTITY_BY_DEFAULT,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateWaveQueue creates a wave queue
|
||||
func CreateWaveQueue(recommended []*proto.Playable, liveIndex int32, sessionID string, deviceID string) *proto.PlayerQueueQueue {
|
||||
// Build track sources from playables
|
||||
var trackSources []*proto.PlayerQueueQueueWaveQueueEntityOptionsTrackSourceWithKey
|
||||
for i := range recommended {
|
||||
trackSources = append(trackSources, &proto.PlayerQueueQueueWaveQueueEntityOptionsTrackSourceWithKey{
|
||||
Key: uint32(i + 1),
|
||||
WaveSource: &proto.PlayerQueueQueueWaveQueueEntityOptionsWaveSource{
|
||||
SourceType: proto.WaveSourceSourceType_WAVE_SOURCE_ONLINE_BY_DEFAULT,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return &proto.PlayerQueueQueue{
|
||||
WaveQueue: &proto.PlayerQueueQueueWaveQueue{
|
||||
RecommendedPlayableList: recommended,
|
||||
LivePlayableIndex: liveIndex,
|
||||
EntityOptions: &proto.PlayerQueueQueueWaveQueueEntityOptions{
|
||||
WaveEntityOptional: &proto.PlayerQueueQueueWaveQueueEntityOptionsWaveSession{
|
||||
SessionId: sessionID,
|
||||
},
|
||||
TrackSources: trackSources,
|
||||
},
|
||||
NavigationIdOptional: "",
|
||||
PlaybackActionIdOptional: "",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateGenerativeQueue creates a generative queue
|
||||
func CreateGenerativeQueue(id string) *proto.PlayerQueueQueue {
|
||||
return &proto.PlayerQueueQueue{
|
||||
GenerativeQueue: &proto.PlayerQueueQueueGenerativeQueue{
|
||||
Id: id,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateFMRadioQueue creates an FM radio queue
|
||||
func CreateFMRadioQueue(id string) *proto.PlayerQueueQueue {
|
||||
return &proto.PlayerQueueQueue{
|
||||
FmRadioQueue: &proto.PlayerQueueQueueFmRadioQueue{
|
||||
Id: id,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateVideoWaveQueue creates a video wave queue
|
||||
func CreateVideoWaveQueue(id string) *proto.PlayerQueueQueue {
|
||||
return &proto.PlayerQueueQueue{
|
||||
VideoWaveQueue: &proto.PlayerQueueQueueVideoWaveQueue{
|
||||
Id: id,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateLocalTracksQueue creates a local tracks queue
|
||||
func CreateLocalTracksQueue() *proto.PlayerQueueQueue {
|
||||
return &proto.PlayerQueueQueue{
|
||||
LocalTracksQueue: &proto.PlayerQueueQueueLocalTracksQueue{},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateDeviceInfo creates device info
|
||||
func CreateDeviceInfo(deviceID, title string, deviceType proto.DeviceType, appName, appVersion string) *proto.DeviceInfo {
|
||||
return &proto.DeviceInfo{
|
||||
DeviceId: deviceID,
|
||||
Title: title,
|
||||
Type: deviceType,
|
||||
AppName: appName,
|
||||
AppVersion: appVersion,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateDeviceCapabilities creates device capabilities
|
||||
func CreateDeviceCapabilities(canBePlayer, canBeRemote bool, volumeGranularity uint32) *proto.DeviceCapabilities {
|
||||
return &proto.DeviceCapabilities{
|
||||
CanBePlayer: canBePlayer,
|
||||
CanBeRemoteController: canBeRemote,
|
||||
VolumeGranularity: volumeGranularity,
|
||||
}
|
||||
}
|
||||
|
||||
// CreateDeviceVolume creates device volume
|
||||
func CreateDeviceVolume(volume float64, deviceID string) *proto.DeviceVolume {
|
||||
return &proto.DeviceVolume{
|
||||
Volume: volume,
|
||||
Version: &proto.UpdateVersion{
|
||||
DeviceId: deviceID,
|
||||
Version: 1,
|
||||
TimestampMs: time.Now().UnixMilli(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// CreateDevice creates a device
|
||||
func CreateDevice(deviceID, title string, deviceType proto.DeviceType, appName, appVersion string, volume float64) *proto.Device {
|
||||
return &proto.Device{
|
||||
Info: CreateDeviceInfo(deviceID, title, deviceType, appName, appVersion),
|
||||
Volume: volume,
|
||||
Capabilities: CreateDeviceCapabilities(true, true, 100),
|
||||
Session: &proto.Session{
|
||||
Id: time.Now().UnixNano(),
|
||||
},
|
||||
IsOffline: false,
|
||||
VolumeInfo: CreateDeviceVolume(volume, deviceID),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateUpdateFullState creates an UpdateFullState request
|
||||
func CreateUpdateFullState(deviceID string, isActive bool, playerState *proto.PlayerState) *proto.UpdateFullState {
|
||||
return &proto.UpdateFullState{
|
||||
PlayerState: playerState,
|
||||
IsCurrentlyActive: isActive,
|
||||
Device: &proto.UpdateDevice{
|
||||
Info: CreateDeviceInfo(deviceID, "Go Ynison Client", proto.DeviceType_DEVICE_TYPE_WEB_DESKTOP, "YandexMusicGo", "1.0.0"),
|
||||
Volume: 0.5,
|
||||
Capabilities: CreateDeviceCapabilities(true, true, 100),
|
||||
VolumeInfo: CreateDeviceVolume(0.5, deviceID),
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user