server

package
v1.1.103 Latest Latest
Warning

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

Go to latest
Published: Jul 1, 2024 License: Unlicense Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const ACTIVITY_PROFILE_PICKER = "com.amazon.ftv.profilepicker/com.amazon.ftv.profilepicker.ui.PickerActivity"
View Source
const ADS_PACKAGE = "com.amazon.wallpaper.LockscreenWallpaperService"
View Source
const BROWSER_ACTIVITY = "com.amazon.cloud9/com.amazon.slate.fire_tv.FireTvSlateActivity"

const FIREFOX_FOCUS_ACTIVITY = "org.mozilla.focus/org.mozilla.focus.activity.MainActivity" const FIREFOX_FOCUS_APP_NAME = "org.mozilla.focus" const FIREFOX_ACTIVITY = "org.mozilla.firefox/org.mozilla.fenix.customtabs.ExternalAppBrowserActivity" const FIREFOX_APP_NAME = "org.mozilla.firefox"

View Source
const BROWSER_APP_NAME = "com.amazon.cloud9"
View Source
const R_KEY_STATE_TWITCH_FOLLOWING_LIVE = "STATE.TWITCH.FOLLOWING.LIVE"

Variables

View Source
var APP_NAMES = []string{"twitch", "disney", "youtube", "spotify", "vlc", "hulu", "netflix"}
View Source
var BROWSER_READY_FRESH_MUTEX sync.Mutex
View Source
var BROWSER_READY_MUTEX sync.Mutex
View Source
var LAST_BROWSER_READY time.Time
View Source
var LAST_BROWSER_READY_FRESH time.Time
View Source
var RESET_COUNTER = 0

Functions

func HandleLogin

func HandleLogin(context *fiber.Ctx) error

POST http://localhost:5950/admin/login

func HandleLogout

func HandleLogout(context *fiber.Ctx) error

func RenderHomePage

func RenderHomePage(context *fiber.Ctx) error

func RenderLoginPage

func RenderLoginPage(context *fiber.Ctx) error

func SanitizeUsername

func SanitizeUsername(first_name string, last_name string) (username string)

weak attempt at sanitizing form input to build a "username"

func ServeLoginPage

func ServeLoginPage(context *fiber.Ctx) error

Types

type GenericInfo

type GenericInfo struct {
	ADBStatus           interface{} `json:"adb_status"`
	PlayerName          string      `json:"player_name"`
	Activity            string      `json:"activity"`
	Package             string      `json:"package"`
	PlayerState         string      `json:"player_state"`
	CachedPlayerName    string      `json:"cached_player_name"`
	CachedPlayerCommand string      `json:"cached_player_name"`
}

type Playlist

type Playlist []PlaylistItem

type PlaylistItem

type PlaylistItem struct {
	Type         string `json:"type"`
	SubType      string `json:"sub_type"`
	URL          string `json:"url"`
	URI          string `json:"uri"`
	Position     int    `json:"position"`
	Watched      bool   `json:"watched"`
	TimesWatched int    `json:"times_watched"`
	TimesSkipped int    `json:"times_skipped"`
	TimesPlayed  int    `json:"times_played"`
}

type Server

type Server struct {
	FiberApp    *fiber.App                `yaml:"fiber_app"`
	Config      types.ConfigFile          `yaml:"config"`
	DB          *redis.Client             `yaml:"-"`
	ADB         adb_wrapper.Wrapper       `json:"-"`
	TV          *tv_controller.Controller `json:"-"`
	Status      Status                    `json:"-"`
	StatusMutex sync.Mutex                `json:"-"`
}
var GlobalServer *Server

func New

func New(db *redis.Client, config types.ConfigFile) (server Server)

func (*Server) ADBConnect

func (s *Server) ADBConnect() (connection adb_wrapper.Wrapper)

func (*Server) ADBGetScreenshot

func (s *Server) ADBGetScreenshot(c *fiber.Ctx) error

func (*Server) ADBNext

func (s *Server) ADBNext(c *fiber.Ctx) error

func (*Server) ADBPause

func (s *Server) ADBPause(c *fiber.Ctx) error

func (*Server) ADBPlay

func (s *Server) ADBPlay(c *fiber.Ctx) error

func (*Server) ADBPrevious

func (s *Server) ADBPrevious(c *fiber.Ctx) error

func (*Server) ADBStop

func (s *Server) ADBStop(c *fiber.Ctx) error

func (*Server) ADBWakeup

func (s *Server) ADBWakeup()

func (*Server) BrowserAudioPlayerSetPosition

func (s *Server) BrowserAudioPlayerSetPosition(c *fiber.Ctx) error

func (*Server) BrowserOpenAudioPlayer

func (s *Server) BrowserOpenAudioPlayer(c *fiber.Ctx) error

func (*Server) BrowserOpenURL

func (s *Server) BrowserOpenURL(c *fiber.Ctx) error

func (*Server) BrowserOpenVideoPlayer

func (s *Server) BrowserOpenVideoPlayer(c *fiber.Ctx) error

func (*Server) BrowserReady

func (s *Server) BrowserReady(context *fiber.Ctx) error

func (*Server) BrowserReadyFresh

func (s *Server) BrowserReadyFresh(context *fiber.Ctx) error

func (*Server) BrowserReopenApp

func (s *Server) BrowserReopenApp()

func (*Server) BrowserWebSocketHandler

func (s *Server) BrowserWebSocketHandler(c *websocket.Conn)

https://docs.gofiber.io/contrib/websocket/

func (*Server) DisneyContinuousOpen

func (s *Server) DisneyContinuousOpen()

func (*Server) DisneyID

func (s *Server) DisneyID(c *fiber.Ctx) error

func (*Server) DisneyMovieNext

func (s *Server) DisneyMovieNext(c *fiber.Ctx) error

func (*Server) DisneyMoviePrevious

func (s *Server) DisneyMoviePrevious(c *fiber.Ctx) error

func (*Server) DisneyOpenID

func (s *Server) DisneyOpenID(sent_id string)

func (*Server) DisneyReopenApp

func (s *Server) DisneyReopenApp()

func (*Server) DisneySelectProfile

func (s *Server) DisneySelectProfile()

func (*Server) Get

func (s *Server) Get(key string) (result string)

func (*Server) GetBrowserAudioPlayer

func (s *Server) GetBrowserAudioPlayer(context *fiber.Ctx) error

func (*Server) GetJSON

func (s *Server) GetJSON(key string, target interface{})

var test = &types.ConfigFile{} s.GetJSON( "config" , test ) fmt.Println( test.BoltDBEncryptionKey ) https://redis.io/commands/json.get/

func (*Server) GetStatus

func (s *Server) GetStatus() (result Status)

func (*Server) GetStatusUrl

func (s *Server) GetStatusUrl(c *fiber.Ctx) error

func (*Server) GetTwitchLiveRefresh

func (s *Server) GetTwitchLiveRefresh(c *fiber.Ctx) error

func (*Server) GetTwitchLiveUpdate

func (s *Server) GetTwitchLiveUpdate(c *fiber.Ctx) error

func (*Server) GetTwitchLiveUser

func (s *Server) GetTwitchLiveUser(c *fiber.Ctx) error

func (*Server) GetYouTubeLiveUpdate

func (s *Server) GetYouTubeLiveUpdate(c *fiber.Ctx) error

func (*Server) Governor

func (s *Server) Governor()

func (*Server) HuluContinuousOpen

func (s *Server) HuluContinuousOpen()

func (*Server) HuluID

func (s *Server) HuluID(c *fiber.Ctx) error

func (*Server) HuluMovieNext

func (s *Server) HuluMovieNext(c *fiber.Ctx) error

func (*Server) HuluMoviePrevious

func (s *Server) HuluMoviePrevious(c *fiber.Ctx) error

func (*Server) HuluOpenURI

func (s *Server) HuluOpenURI(uri string)

func (*Server) HuluReopenApp

func (s *Server) HuluReopenApp()

func (*Server) HuluSelectProfile

func (s *Server) HuluSelectProfile()

func (*Server) HuluTVID

func (s *Server) HuluTVID(c *fiber.Ctx) error

func (*Server) HuluTVNext

func (s *Server) HuluTVNext(c *fiber.Ctx) error

func (*Server) HuluTVPrevious

func (s *Server) HuluTVPrevious(c *fiber.Ctx) error

func (*Server) Log

func (s *Server) Log(message string)

func (*Server) LogRequest

func (s *Server) LogRequest(context *fiber.Ctx) error

func (*Server) NetflixContinuousOpen

func (s *Server) NetflixContinuousOpen() (was_closed bool)

func (*Server) NetflixID

func (s *Server) NetflixID(c *fiber.Ctx) error

func (*Server) NetflixMovieNext

func (s *Server) NetflixMovieNext(c *fiber.Ctx) error

func (*Server) NetflixMoviePrevious

func (s *Server) NetflixMoviePrevious(c *fiber.Ctx) error

func (*Server) NetflixOpenID

func (s *Server) NetflixOpenID(sent_id string)

func (*Server) NetflixReopenApp

func (s *Server) NetflixReopenApp()

func (*Server) NetflixSelectProfile

func (s *Server) NetflixSelectProfile()

func (*Server) NetflixTVID

func (s *Server) NetflixTVID(c *fiber.Ctx) error

func (*Server) NetflixTVNext

func (s *Server) NetflixTVNext(c *fiber.Ctx) error

func (*Server) NetflixTVPrevious

func (s *Server) NetflixTVPrevious(c *fiber.Ctx) error

func (*Server) Next

func (s *Server) Next(c *fiber.Ctx) error

func (*Server) Off

func (s *Server) Off(c *fiber.Ctx) error

func (*Server) Pause

func (s *Server) Pause(c *fiber.Ctx) error

func (*Server) Play

func (s *Server) Play(c *fiber.Ctx) error

func (*Server) PlaylistAdd

func (s *Server) PlaylistAdd(c *fiber.Ctx) error

func (*Server) Previous

func (s *Server) Previous(c *fiber.Ctx) error

func (*Server) Printf

func (s *Server) Printf(format_string string, args ...interface{})

func (*Server) ReStreamRestart

func (s *Server) ReStreamRestart(c *fiber.Ctx) error

func (*Server) ReStreamStop

func (s *Server) ReStreamStop(c *fiber.Ctx) error

func (*Server) ReStreamURL

func (s *Server) ReStreamURL(c *fiber.Ctx) error

func (*Server) Resume

func (s *Server) Resume(c *fiber.Ctx) error

func (*Server) SelectFireCubeProfile

func (s *Server) SelectFireCubeProfile()

func (*Server) Set

func (s *Server) Set(key string, value interface{}) (result string)

func (*Server) SetupAdminRoutes

func (s *Server) SetupAdminRoutes()

func (*Server) SetupPublicRoutes

func (s *Server) SetupPublicRoutes()

func (*Server) SetupRoutes

func (s *Server) SetupRoutes()

func (*Server) SpotifyContinuousOpen

func (s *Server) SpotifyContinuousOpen() (was_open bool)

func (*Server) SpotifyGetActiveButtonIndex

func (s *Server) SpotifyGetActiveButtonIndex() (result int)

func (*Server) SpotifyGetActiveButtonIndexFromScreenshotBytes

func (s *Server) SpotifyGetActiveButtonIndexFromScreenshotBytes(screenshot_bytes *[]byte) (result int)

func (*Server) SpotifyID

func (s *Server) SpotifyID(c *fiber.Ctx) error

func (*Server) SpotifyIsShuffleOn

func (s *Server) SpotifyIsShuffleOn() (result bool)

func (*Server) SpotifyNavigateToUIIndexFromScreenshotBytes

func (s *Server) SpotifyNavigateToUIIndexFromScreenshotBytes(screenshot_bytes *[]byte, ui_button_index int)

func (*Server) SpotifyNextPlaylist

func (s *Server) SpotifyNextPlaylist()

func (*Server) SpotifyNextPlaylistWithShuffle

func (s *Server) SpotifyNextPlaylistWithShuffle(c *fiber.Ctx) error

func (*Server) SpotifyNextSong

func (s *Server) SpotifyNextSong(song_id string)

func (*Server) SpotifyOpenID

func (s *Server) SpotifyOpenID(sent_id string)

func (*Server) SpotifyPlaylist

func (s *Server) SpotifyPlaylist(c *fiber.Ctx) error

func (*Server) SpotifyPlaylistWithShuffle

func (s *Server) SpotifyPlaylistWithShuffle(c *fiber.Ctx) error

func (*Server) SpotifyPressPreviousButton

func (s *Server) SpotifyPressPreviousButton()

func (*Server) SpotifyPreviousPlaylist

func (s *Server) SpotifyPreviousPlaylist(playlist_id string)

func (*Server) SpotifyPreviousSong

func (s *Server) SpotifyPreviousSong(song_id string)

func (*Server) SpotifyReopenApp

func (s *Server) SpotifyReopenApp()

func (*Server) SpotifySetShuffle

func (s *Server) SpotifySetShuffle(c *fiber.Ctx) error

func (*Server) SpotifyShuffleOff

func (s *Server) SpotifyShuffleOff() (was_on bool)

func (*Server) SpotifyShuffleOn

func (s *Server) SpotifyShuffleOn() (was_on bool)

func (*Server) SpotifySong

func (s *Server) SpotifySong(c *fiber.Ctx) error

5Muvh0ooAJkSgBylFyI3su

func (*Server) SpotifyUpdate

func (s *Server) SpotifyUpdate()

func (*Server) SpotifyWaitOnNowPlaying

func (s *Server) SpotifyWaitOnNowPlaying()

func (*Server) Start

func (s *Server) Start()

func (*Server) Stop

func (s *Server) Stop(c *fiber.Ctx) error

func (*Server) StoreLibrary

func (s *Server) StoreLibrary()

func (*Server) StreamDeckAudioBook

func (s *Server) StreamDeckAudioBook(c *fiber.Ctx) error

func (*Server) StreamDeckDisney

func (s *Server) StreamDeckDisney(c *fiber.Ctx) error

func (*Server) StreamDeckEscapeRope

func (s *Server) StreamDeckEscapeRope(c *fiber.Ctx) error

func (*Server) StreamDeckHeart

func (s *Server) StreamDeckHeart(c *fiber.Ctx) error

func (*Server) StreamDeckHulu

func (s *Server) StreamDeckHulu(c *fiber.Ctx) error

func (*Server) StreamDeckHuluTVSeries added in v1.1.100

func (s *Server) StreamDeckHuluTVSeries(c *fiber.Ctx) error

func (*Server) StreamDeckNetflix

func (s *Server) StreamDeckNetflix(c *fiber.Ctx) error

func (*Server) StreamDeckSpotify

func (s *Server) StreamDeckSpotify(c *fiber.Ctx) error

func (*Server) StreamDeckTest

func (s *Server) StreamDeckTest(c *fiber.Ctx) error

func (*Server) StreamDeckTwitch

func (s *Server) StreamDeckTwitch(c *fiber.Ctx) error

func (*Server) StreamDeckTwitchBackground

func (s *Server) StreamDeckTwitchBackground(c *fiber.Ctx) error

func (*Server) StreamDeckTwitchUser

func (s *Server) StreamDeckTwitchUser(c *fiber.Ctx) error

func (*Server) StreamDeckYouTube

func (s *Server) StreamDeckYouTube(c *fiber.Ctx) error

func (*Server) TVGetInput

func (s *Server) TVGetInput(c *fiber.Ctx) error

func (*Server) TVGetVolume

func (s *Server) TVGetVolume(c *fiber.Ctx) error

func (*Server) TVIRSendCode

func (s *Server) TVIRSendCode(c *fiber.Ctx) error

func (*Server) TVMuteOff

func (s *Server) TVMuteOff(c *fiber.Ctx) error

func (*Server) TVMuteOn

func (s *Server) TVMuteOn(c *fiber.Ctx) error

func (*Server) TVPowerOff

func (s *Server) TVPowerOff(c *fiber.Ctx) error

func (*Server) TVPowerOn

func (s *Server) TVPowerOn(c *fiber.Ctx) error

func (*Server) TVPowerStatus

func (s *Server) TVPowerStatus(c *fiber.Ctx) error

func (*Server) TVPrepare

func (s *Server) TVPrepare(c *fiber.Ctx) error

func (*Server) TVSetInput

func (s *Server) TVSetInput(c *fiber.Ctx) error

func (*Server) TVSetVolume

func (s *Server) TVSetVolume(c *fiber.Ctx) error

func (*Server) TimeSinceLastStart

func (s *Server) TimeSinceLastStart() (result time.Duration)

func (*Server) TwitchContinuousOpen

func (s *Server) TwitchContinuousOpen()

func (*Server) TwitchFilterCurratedFollers

func (s *Server) TwitchFilterCurratedFollers(input_list []string) (result []string)

func (*Server) TwitchGetLiveFollowers

func (s *Server) TwitchGetLiveFollowers() (result []string)

func (*Server) TwitchGetUserInfo

func (s *Server) TwitchGetUserInfo(username string) (result Stream)

func (*Server) TwitchID

func (s *Server) TwitchID(c *fiber.Ctx) error

func (*Server) TwitchIsUserLive

func (s *Server) TwitchIsUserLive(username string) (result bool)

func (*Server) TwitchLiveNext

func (s *Server) TwitchLiveNext(c *fiber.Ctx) error

func (*Server) TwitchLivePrevious

func (s *Server) TwitchLivePrevious(c *fiber.Ctx) error

func (*Server) TwitchLiveRefresh

func (s *Server) TwitchLiveRefresh() (result []string)

func (*Server) TwitchLiveSetQualityMax

func (s *Server) TwitchLiveSetQualityMax(c *fiber.Ctx) error

literally trolling , we have to get pixel values to know where we are being bullied in the quality selection menu

func (*Server) TwitchLiveUpdate

func (s *Server) TwitchLiveUpdate() (result []string)

Update DB With List of Currated Live Followers

func (*Server) TwitchOpenID

func (s *Server) TwitchOpenID(sent_id string)

func (*Server) TwitchRefreshAuthToken

func (s *Server) TwitchRefreshAuthToken() (access_token string)

func (*Server) TwitchReopenApp

func (s *Server) TwitchReopenApp()

func (*Server) TwitchValidateToken

func (s *Server) TwitchValidateToken(access_token string) (result int)

Token Validation curl -X GET 'https://id.twitch.tv/oauth2/validate' \ -H 'Authorization: OAuth asdf'

func (*Server) VLCContinuousOpen

func (s *Server) VLCContinuousOpen() (was_open bool)

func (*Server) VLCID

func (s *Server) VLCID(c *fiber.Ctx) error

func (*Server) VLCNext

func (s *Server) VLCNext(c *fiber.Ctx) error

func (*Server) VLCOpenID

func (s *Server) VLCOpenID(sent_id string)

func (*Server) VLCPlayURL

func (s *Server) VLCPlayURL(c *fiber.Ctx) error

func (*Server) VLCPlaylistAddURL

func (s *Server) VLCPlaylistAddURL(c *fiber.Ctx) error

Custom Playlist Stuff

func (*Server) VLCPrevious

func (s *Server) VLCPrevious(c *fiber.Ctx) error

func (*Server) VLCReopenApp

func (s *Server) VLCReopenApp()

func (*Server) YouTubeContinuousOpen

func (s *Server) YouTubeContinuousOpen() (was_open bool)

func (*Server) YouTubeGetChannelId

func (s *Server) YouTubeGetChannelId(channel_name string) (result string)

or just goto dev console on youtube channel's /stream page and run `ytInitialData.metadata.channelMetadataRenderer.externalId`

func (*Server) YouTubeGetChannelsLiveVideos

func (s *Server) YouTubeGetChannelsLiveVideos(channel_id string) (result []YoutubeVideo)

https://developers.google.com/youtube/v3/docs/search/list

func (*Server) YouTubeGetPlaylistVideos

func (s *Server) YouTubeGetPlaylistVideos(playlist_id string) (result []YoutubeVideo)

func (*Server) YouTubeID

func (s *Server) YouTubeID(c *fiber.Ctx) error

func (*Server) YouTubeIsVideoIdAvailable

func (s *Server) YouTubeIsVideoIdAvailable(video_id string) (result bool)

func (*Server) YouTubeLiveNext

func (s *Server) YouTubeLiveNext(c *fiber.Ctx) error

func (*Server) YouTubeLivePrevious

func (s *Server) YouTubeLivePrevious(c *fiber.Ctx) error

func (*Server) YouTubeLiveUpdate

func (s *Server) YouTubeLiveUpdate() (result []string)

Update DB With List of Currated Live Followers fucking idiots with this god damn quota. bro

func (*Server) YouTubeOpenID

func (s *Server) YouTubeOpenID(sent_id string)

func (*Server) YouTubePlaylistAddPlaylist

func (s *Server) YouTubePlaylistAddPlaylist(c *fiber.Ctx) error

func (*Server) YouTubePlaylistAddVideo

func (s *Server) YouTubePlaylistAddVideo(c *fiber.Ctx) error

func (*Server) YouTubePlaylistDeleteVideo

func (s *Server) YouTubePlaylistDeleteVideo(c *fiber.Ctx) error

func (*Server) YouTubePlaylistGet

func (s *Server) YouTubePlaylistGet(c *fiber.Ctx) error

func (*Server) YouTubePlaylistGetIndex

func (s *Server) YouTubePlaylistGetIndex(c *fiber.Ctx) error

func (*Server) YouTubePlaylistGetNextAvailableVideoID

func (s *Server) YouTubePlaylistGetNextAvailableVideoID(playlist_key string) (video_id string)

func (*Server) YouTubePlaylistGetPreviousAvailableVideoID

func (s *Server) YouTubePlaylistGetPreviousAvailableVideoID(playlist_key string) (video_id string)

func (*Server) YouTubePlaylistNext

func (s *Server) YouTubePlaylistNext(c *fiber.Ctx) error

This is not a youtube playlist , this is our own "playlist" android youtube app still doesn't have intents for playlist loading

func (*Server) YouTubePlaylistPrevious

func (s *Server) YouTubePlaylistPrevious(c *fiber.Ctx) error

func (*Server) YouTubePlaylistSetIndex

func (s *Server) YouTubePlaylistSetIndex(c *fiber.Ctx) error

func (*Server) YouTubeReopenApp

func (s *Server) YouTubeReopenApp()

func (*Server) YouTubeVideo

func (s *Server) YouTubeVideo(c *fiber.Ctx) error

type Status

type Status struct {
	StartTime                        string               `json:"start_time"`
	StartTimeOBJ                     time.Time            `json:"-"`
	PlayerName                       string               `json:"player_name"`
	PlayerCommand                    string               `json:"player_command"`
	NowPlayingID                     string               `json:"now_playing_id"`
	NowPlayingText                   string               `json:"now_playing_text"`
	PreviousPlayerName               string               `json:"previous_player_name"`
	PreviousPlayerCommand            string               `json:"previous_player_command"`
	PreviousStartTime                string               `json:"previous_start_time"`
	PreviousStartTimeOBJ             time.Time            `json:"-"`
	PreviousStartTimeDuration        time.Duration        `json:"-"`
	PreviousStartTimeDurationSeconds float64              `json:"previous_start_time_duration_seconds"`
	ADB                              adb_wrapper.Status   `json:"adb"`
	TV                               tv_controller.Status `json:"tv"`
}

type Stream

type Stream struct {
	ID           string `json:"id"`
	UserID       string `json:"user_id"`
	UserLogin    string `json:"user_login"`
	UserName     string `json:"user_name"`
	GameID       string `json:"game_id"`
	GameName     string `json:"game_name"`
	Type         string `json:"type"`
	Title        string `json:"title"`
	ViewerCount  int    `json:"viewer_count"`
	StartedAt    string `json:"started_at"`
	Language     string `json:"language"`
	ThumbnailURL string `json:"thumbnail_url"`
	IsMature     bool   `json:"is_mature"`
}

curl -H 'Client-ID: your_client_id' \ -H 'Authorization: Bearer your_access_token' \ -X GET 'https://api.twitch.tv/helix/streams?user_login=user_login_name'

type YouTubeResponseItem

type YouTubeResponseItem struct {
	Id struct {
		VideoId string `json:"videoId"`
	} `json:"id"`
	Snippet struct {
		Title string `json:"title"`
	} `json:"snippet"`
}

type YoutubePlaylistResponse

type YoutubePlaylistResponse struct {
	NextPageToken string `json:"nextPageToken"`
	Items         []struct {
		Snippet struct {
			ResourceId struct {
				VideoId string `json:"videoId"`
			} `json:"resourceId"`
			Title string `json:"title"`
		} `json:"snippet"`
	} `json:"items"`
}

type YoutubeResponse

type YoutubeResponse struct {
	Items []YouTubeResponseItem `json:"items"`
}

type YoutubeVideo

type YoutubeVideo struct {
	Id   string
	Name string
}

type YoutubeVideoInfo

type YoutubeVideoInfo struct {
	Items []struct {
		ID string `json:"id"`
	} `json:"items"`
}

Jump to

Keyboard shortcuts

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