entity

package
v1.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2022 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUserNotFound はユーザが存在しないエラーを表します。
	ErrUserNotFound = errors.New("user not found")
	// ErrUserAlreadyExisted はユーザが既に存在しているエラーを表します。
	ErrUserAlreadyExisted = errors.New("user has already existed")

	// ErrSessionNotFound はセッションが存在しないエラーを表します。
	ErrSessionNotFound = errors.New("session not found")
	// ErrSessionAlreadyExisted はセッションが既に存在しているときのエラーを表します。
	ErrSessionAlreadyExisted = errors.New("session has already existed")
	// ErrSessionAllTracksFinished はセッションに追加された全てのトラックの再生が全て終了しているエラーを表します。
	ErrSessionAllTracksFinished = errors.New("all tracks has already finished")
	// ErrSessionPlayingDifferentTrack はキュー先頭の曲と異なる曲が再生されているエラーを表します。
	ErrSessionPlayingDifferentTrack = errors.New("session is playing different track from queue")
	// ErrSessionNotAllowToControlOthers は作成者以外のユーザの操作が許可されていないのに操作しようとしたときのエラーを表します。
	ErrSessionNotAllowToControlOthers = errors.New("session is not allowed to control by others")

	// ErrUserIsNotSessionCreator はユーザがセッションの作成者でないときのエラーを表します。
	ErrUserIsNotSessionCreator = errors.New("user is not session's creator")

	// ErrQueueTrackNotFound はセッションに紐付くQueueTrackが存在しないエラーを表します。
	ErrQueueTrackNotFound = errors.New("queue track not found")

	// ErrNextQueueTrackNotFound は次に再生すべきQueueTrackが存在しないエラーを表します。
	ErrNextQueueTrackNotFound = errors.New("next queue track not found")

	// ErrTokenNotFound はSpotifyのアクセストークンが存在しないエラーを表します。
	ErrTokenNotFound = errors.New("token not found")

	// ErrActiveDeviceNotFound は再生できるアクティブなデバイスが存在しないエラーを表します。
	ErrActiveDeviceNotFound = errors.New("active device not found")
	// ErrNonPremium はユーザがプレミアム会員ではないエラーを表します。
	ErrNonPremium = errors.New("non-premium user")

	// ErrInvalidStateType は不正なstate typeであるというエラーを表します。
	ErrInvalidStateType = errors.New("invalid state type")

	// ErrChangeSessionStateNotPermit はセッションのステートの状態遷移が許可されていない場合のエラーを表します。
	ErrChangeSessionStateNotPermit = errors.New("requested state is not allowed")

	// ErrLoginSessionNotFound はセッション(login)が存在しないエラーを表します。
	ErrLoginSessionNotFound = errors.New("loginSession not found")
	// ErrLoginSessionAlreadyExisted はセッション(login)が既に存在しているときのエラーを表します。
	ErrLoginSessionAlreadyExisted = errors.New("loginSession has already existed")
)
View Source
var (
	// EventAddTrack はセッションに曲が追加された際に発されるイベントです。
	EventAddTrack = &Event{
		Type: "ADDTRACK",
	}

	// EventPlay はセッションの再生が開始された際に発されるイベントです。
	EventPlay = &Event{
		Type: "PLAY",
	}

	// EventPause はセッションが一時停止された際に発されるイベントです。
	EventPause = &Event{
		Type: "PAUSE",
	}

	// EventStop は全ての曲の再生が終了した際に発されるイベントです。
	EventStop = &Event{
		Type: "STOP",
	}

	// EventInterrupt はSpotifyの本体アプリ側で操作されて、Relaym側との同期が取れなくなったタイミングで発されるイベントです。
	// セッションは一時停止状態になり、RESUMEを送ることで再開されます。
	EventInterrupt = &Event{
		Type: "INTERRUPT",
	}

	// EventArchived はセッションがアーカイブされた際に発されるイベントです。
	EventArchived = &Event{
		Type: "ARCHIVED",
	}

	// EventUnarchive はセッションのアーカイブが解除された際に発されるイベントです。
	EventUnarchive = &Event{
		Type: "UNARCHIVE",
	}
)

Functions

This section is empty.

Types

type Album

type Album struct {
	Name   string
	Images []*AlbumImage
}

type AlbumImage

type AlbumImage struct {
	URL    string
	Height int
	Width  int
}

type Artist

type Artist struct {
	Name string
}

type AuthState

type AuthState struct {
	State       string
	RedirectURL string
}

AuthState はSpotifyの認可時に一時的に保存しておく必要がある情報を表します。

type CurrentPlayingInfo

type CurrentPlayingInfo struct {
	Playing  bool
	Progress time.Duration
	Track    *Track
	Device   *Device
}

CurrentPlayingInfo は現在再生している情報を表します

func (*CurrentPlayingInfo) Remain

func (cpi *CurrentPlayingInfo) Remain() time.Duration

Remain は残りの再生時間を計算します。

type Device

type Device struct {
	ID           string
	IsRestricted bool
	Name         string
}

Device はデバイスを表す構造体です。

type Event

type Event struct {
	Type string `json:"type"`
	Head *int   `json:"head,omitempty"`
}

Event はクライアントに送信するイベントを表します。

func NewEventNextTrack

func NewEventNextTrack(head int) *Event

NewEventNextTrack はセッションの曲の再生が (正常に) 次の曲に移った際に発されるイベントを生成します。 キューの現在再生している曲の位置が含まれます。

type QueueTrack

type QueueTrack struct {
	Index     int
	URI       string
	SessionID string
}

QueueTrack はsessionに属するqueue内の曲を表します。

type QueueTrackToStore

type QueueTrackToStore struct {
	URI       string
	SessionID string
}

QueueTrackToStore はsessionに属するqueue内に曲を挿入する際に使用します

type Session

type Session struct {
	ID                     string
	Name                   string
	CreatorID              string
	DeviceID               string
	StateType              StateType
	QueueHead              int
	QueueTracks            []*QueueTrack
	ExpiredAt              time.Time
	AllowToControlByOthers bool
	ProgressWhenPaused     time.Duration
}

Session はセッションを表します。

func NewSession

func NewSession(name string, creatorID string, allowToControlByOthers bool) (*Session, error)

NewSession はSessionのポインタを生成する関数です。

func (*Session) GoNextTrack

func (s *Session) GoNextTrack() error

GoNextTrack 次の曲の状態に進めます。

func (*Session) HeadTrack added in v1.1.0

func (s *Session) HeadTrack() *QueueTrack

HeadTrack は現在のHeadの曲を返します。

func (*Session) IsCreator

func (s *Session) IsCreator(userID string) bool

IsCreator は指定されたユーザがセッションの作成者かどうか返します。

func (*Session) IsNextTrackExistWhenStateIsStop added in v1.2.0

func (s *Session) IsNextTrackExistWhenStateIsStop() bool

IsNextTrackExistWhenStateIsStop はstateがstopの時に次の曲が存在するかを調べます

func (*Session) IsPlaying

func (s *Session) IsPlaying() bool

IsPlaying は現在のStateTypeがPlayかどうか返します。

func (*Session) IsPlayingCorrectTrack

func (s *Session) IsPlayingCorrectTrack(playingInfo *CurrentPlayingInfo) error

IsPlayingCorrectTrack は現在の再生状況がセッションの状況と一致しているかチェックします。

func (*Session) IsResume

func (s *Session) IsResume(nextState StateType) bool

IsResume は次のStateTypeへの移行がポーズからの再開かどうかを返します。

func (*Session) IsValidNextStateFromAPI

func (s *Session) IsValidNextStateFromAPI(nextState StateType) bool

IsValidNextStateFromAPI は外部からリクエストされたstateの変更の正当性を評価します

func (*Session) MoveToArchived

func (s *Session) MoveToArchived()

MoveToArchived はセッションのStateTypeをArchivedに状態遷移します。

func (*Session) MoveToPause

func (s *Session) MoveToPause() error

MoveToPause はセッションのStateTypeをPauseに状態遷移します。

func (*Session) MoveToPlay

func (s *Session) MoveToPlay() error

MoveToPlay はセッションのStateTypeをPlayに状態遷移します。

func (*Session) MoveToStop

func (s *Session) MoveToStop()

MoveToStop はセッションのStateTypeをStopに状態遷移します。

func (*Session) SetProgressWhenPaused added in v1.1.0

func (s *Session) SetProgressWhenPaused(d time.Duration)

SetProgressWhenPaused はProgressWhenPausedに時間をセットします。

func (*Session) ShouldCallEnqueueAPINow

func (s *Session) ShouldCallEnqueueAPINow() bool

ShouldCallEnqueueAPINow は今すぐキューに追加するAPIを叩くかどうか判定します。 最後の曲もしくは最後から二番目の曲の再生中に曲を新たに追加された場合はSpotifyのキューに新たに追加したいので、それをチェックするために使います。

func (*Session) TrackURIShouldBeAddedWhenHandleTrackEnd

func (s *Session) TrackURIShouldBeAddedWhenHandleTrackEnd() string

TrackURIShouldBeAddedWhenHandleTrackEnd はある一曲の再生が終わったときにSpotifyのキューに追加するTrackURIを抽出します。

func (*Session) TrackURIsShouldBeAddedWhenStopToPlay

func (s *Session) TrackURIsShouldBeAddedWhenStopToPlay() ([]string, error)

TrackURIsShouldBeAddedWhenStopToPlay は再生を開始するときにSpotifyのキューに追加するTrackURIを抽出します。

func (*Session) UpdateExpiredAt added in v1.0.0

func (s *Session) UpdateExpiredAt()

UpdateExpiredAt はexpired_atを現在の時刻から3日後に設定します

type SessionWithUser

type SessionWithUser struct {
	*Session
	Creator *User
}

func NewSessionWithUser

func NewSessionWithUser(session *Session, creator *User) *SessionWithUser

NewSessionWithUser はSession(ポインタ)からSessionWithUser(ポインタ)を生成します

type SpotifyUser

type SpotifyUser struct {
	SpotifyUserID string
	DisplayName   string
	Product       string
}

SpotifyUser はSpotify APIのユーザ情報を表します。

func (*SpotifyUser) Premium

func (su *SpotifyUser) Premium() bool

Premium はプレイリスト会員かどうか判定します。

type StateType

type StateType string
const (
	Play     StateType = "PLAY"
	Pause    StateType = "PAUSE"
	Stop     StateType = "STOP"
	Archived StateType = "ARCHIVED"
)

func NewStateType

func NewStateType(stateType string) (StateType, error)

NewStateType はstringから対応するStateTypeを生成します。

func (StateType) String

func (st StateType) String() string

String はfmt.Stringerを満たすメソッドです。

type SyncCheckTimer

type SyncCheckTimer struct {
	// contains filtered or unexported fields
}

SyncCheckTimer はSpotifyとの同期チェック用のタイマーです。タイマーが止まったことを確認するためのstopチャネルがあります。 ref : http://okzk.hatenablog.com/entry/2015/12/01/001924

func (*SyncCheckTimer) ExpireCh

func (s *SyncCheckTimer) ExpireCh() <-chan time.Time

ExpireCh は指定設定された秒数経過したことを送るチャネルを返します。

func (*SyncCheckTimer) MakeIsTimerExpiredTrue added in v1.2.0

func (s *SyncCheckTimer) MakeIsTimerExpiredTrue()

MakeIsTimerExpiredTrue はisTimerExpiredをtrueに変更します <- s.ExpireCh でtimerから値を受け取った際に呼び出してください

func (*SyncCheckTimer) NextCh added in v1.2.0

func (s *SyncCheckTimer) NextCh() <-chan struct{}

NextCh は次の曲への遷移の指示を送るチャネルを返します。

func (*SyncCheckTimer) SetDuration added in v1.2.0

func (s *SyncCheckTimer) SetDuration(d time.Duration)

SetTimerはSyncCheckTimerにTimerをセットします

func (*SyncCheckTimer) StopCh

func (s *SyncCheckTimer) StopCh() <-chan struct{}

StopCh はタイマーがストップされたことを送るチャネルを返します。

type SyncCheckTimerManager

type SyncCheckTimerManager struct {
	// contains filtered or unexported fields
}

SyncCheckTimerManager はSpotifyとの同期チェック用のタイマーを一括して管理する構造体です。

func NewSyncCheckTimerManager

func NewSyncCheckTimerManager() *SyncCheckTimerManager

NewSyncCheckTimerManager はSyncCheckTimerManagerのポインタを生成します。

func (*SyncCheckTimerManager) CreateExpiredTimer added in v1.2.0

func (m *SyncCheckTimerManager) CreateExpiredTimer(sessionID string) *SyncCheckTimer

CreateExpiredTimer は与えられたセッションの同期チェック用のタイマーを作成します。 既存のタイマーが存在する場合はstopしてから新しいタイマーを作成します。

func (*SyncCheckTimerManager) DeleteTimer

func (m *SyncCheckTimerManager) DeleteTimer(sessionID string)

DeleteTimer は与えられたセッションのタイマーをマップから削除します。 既にタイマーがExpireして、そのチャネルの値を取り出してしまった後にマップから削除したいときに使います。

func (*SyncCheckTimerManager) GetTimer

func (m *SyncCheckTimerManager) GetTimer(sessionID string) (*SyncCheckTimer, bool)

GetTimer は与えられたセッションのタイマーを取得します。存在しない場合はfalseが返ります。

func (*SyncCheckTimerManager) IsTimerExpired added in v1.2.0

func (m *SyncCheckTimerManager) IsTimerExpired(sessionID string) (bool, error)

IsTimerExpired は与えられたセッションのisTimerExpiredの値を返します

func (*SyncCheckTimerManager) SendToNextCh added in v1.2.0

func (m *SyncCheckTimerManager) SendToNextCh(sessionID string) error

SendToNextCh は与えられたセッションのタイマーのNextChに通知を送ります

type Track

type Track struct {
	URI      string
	ID       string
	Name     string
	Duration time.Duration
	Artists  []*Artist
	URL      string // Spotifyのwebページ
	Album    *Album
}

Track は曲を表す構造体です。

type User

type User struct {
	ID            string // IDは外部のパッケージで書き換えられると困るのでprivateにする
	SpotifyUserID string
	DisplayName   string
}

User はログインしているユーザを表します。

func NewUser

func NewUser(spotifyUserID, displayName string) *User

NewUser はUserのポインタを生成する関数です。

func (*User) SpotifyURI

func (u *User) SpotifyURI() string

SpotifyURI はユーザを一位に識別するURIを返します。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL