webostv

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2019 License: MIT Imports: 11 Imported by: 1

README

webostv - Go package for controlling LG WebOS TV

GoDoc

This is Go library and a terminal application for remote control of LG WebOS smart televisions. Works on Linux and Windows and probably on OS X as well. It has been tested with LG 42LB650V-ZN television.

Installing and using the remote control application

Install Go compiler if you do not have it:

curl https://dl.google.com/go/go1.12.linux-amd64.tar.gz | sudo tar xzC /usr/local
PATH=$PATH:/usr/local/go/bin

(See https://golang.org/dl/ for newer version and more detailed instructions.)

Compile and install:

git clone https://github.com/snabb/webostv.git
cd webostv
go build ./cmd/webostvremote

The compiled binary webostvremote is produced in the current working directory.

The IP address or name of the TV can be given as a command line argument:

./webostvremote 192.0.2.123

If the address is not supplied, it will try to connect to the default address LGsmartTV.lan.

Simple example of using the library to turn off the TV

package main

import "github.com/snabb/webostv"

func main() {
	tv, err := webostv.DefaultDialer.Dial("LGsmartTV.lan")
	if err != nil {
		panic(err)
	}
	defer tv.Close()
	go tv.MessageHandler()

	_, err = tv.Register("")
	if err != nil {
		panic(err)
	}

	err = tv.SystemTurnOff()
	if err != nil {
		panic(err)
	}
}

Unimplemented / TODO

webostv library
  • Documentation.
  • Consider the method names, some could be shortened.
  • PIN based pairing.
  • UPnP discovery?
  • Add missing subscriptions?
  • Play media?
webostvremote
  • Documentation.
  • Volume mute.
  • Make "store" a separate generic package (or find pre-existing one).
  • Make it look better.
    • Colors.
    • Clarify channel + program info etc.
  • Error popup?
  • Program guide.
  • TV mouse control.
  • TV keyboard input.
  • Play media?

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Timeout               = time.Second * 5
	RegisterTimeout       = time.Second * 30
	ErrTimeout            = errors.New("timeout")
	ErrNoResponse         = errors.New("no response")
	ErrRegistrationFailed = errors.New("registration failed")
)
View Source
var DefaultDialer = Dialer{
	DisableTLS: false,
	WebsocketDialer: &websocket.Dialer{
		Proxy:            http.ProxyFromEnvironment,
		HandshakeTimeout: 10 * time.Second,
		TLSClientConfig: &tls.Config{
			InsecureSkipVerify: true,
		},
		NetDial: (&net.Dialer{
			Timeout:   time.Second * 5,
			KeepAlive: time.Second * 30,
		}).Dial,
	},
}

Functions

This section is empty.

Types

type App

type App struct {
	Id                         string      // "id": "com.webos.app.discovery",
	Title                      string      // "title": "LG Store",
	Version                    string      // "version": "1.0.19",
	Vendor                     string      // "vendor": "LGE",
	FolderPath                 string      // "folderPath": "/mnt/otncabi/usr/palm/applications/com.webos.app.discovery",
	DefaultWindowType          string      // "defaultWindowType": "card",
	MediumIcon                 string      // "mediumIcon": "lgstore_80x80.png",
	Miniicon                   string      // "miniicon": "http://lgsmarttv.lan:3000/r[..]e/miniicon.png",
	RequestedWindowOrientation string      // "requestedWindowOrientation": "",
	LargeIcon                  string      // "largeIcon": "lgstore_130x130.png",
	Icon                       string      // "icon": "http://lgsmarttv.lan:3000/r[..]9/lgstore_80x80.png",
	Category                   string      // "category": "",
	TrustLevel                 string      // "trustLevel": "default",
	SplashBackground           string      // "splashBackground": "lgstore_splash.png",
	DeeplinkingParams          string      // "deeplinkingParams": "{\"contentTarget\":\"$CONTENTID\"}",
	RequiredEULA               string      // "requiredEULA": "generalTerms",
	Main                       string      // "main": "index.html",
	Type                       string      // "type": "web",
	BgImage                    string      // "bgImage": "lgstore_preview.png",
	IconColor                  string      // "iconColor": "#cf0652",
	ImageForRecents            string      // "imageForRecents": "RECENTS.png",
	Resolution                 string      // "resolution": "1280x720",
	BgColor                    string      // "bgColor": "#8e191b",
	ContainerCSS               string      // "containerCSS": "build/app1.css",
	EnyoVersion                string      // "enyoVersion": "2.3.0",
	ContainerJS                string      // "containerJS": "build/app1.js",
	Splashicon                 string      // "splashicon": "http://lgsmarttv.lan:3000/r[..]2/splash.png",
	Appsize                    int         // "appsize": 0,
	HardwareFeaturesNeeded     int         // "hardwareFeaturesNeeded": 0,
	Age                        int         // "age": 0,
	BinId                      int         // "binId": 361092,
	RequiredMemory             int         // "requiredMemory": 160,
	Lockable                   bool        // "lockable": true,
	Transparent                bool        // "transparent": false,
	CheckUpdateOnLaunch        bool        // "checkUpdateOnLaunch": true,
	Launchinnewgroup           bool        // "launchinnewgroup": false,
	HandlesRelaunch            bool        // "handlesRelaunch": false,
	Inspectable                bool        // "inspectable": false,
	InAppSetting               bool        // "inAppSetting": false,
	PrivilegedJail             bool        // "privilegedJail": false,
	Visible                    bool        // "visible": true,
	NoWindow                   bool        // "noWindow": false,
	Removable                  bool        // "removable": true,
	DisableBackHistoryAPI      bool        // "disableBackHistoryAPI": true
	InternalInstallationOnly   bool        // "internalInstallationOnly": true,
	NoSplashOnLaunch           bool        // "noSplashOnLaunch": true,
	CustomPlugin               bool        // "customPlugin": true,
	Hidden                     bool        // "hidden": true,
	UIRevision                 interface{} // "uiRevision": 2, // "uiRevision": "2",
	MimeTypes                  []struct {
		Mime      string // "mime": "application/vnd.lge.appstore"
		Extension string // "extension": "html",
		Scheme    string // "scheme": "https"
		Stream    bool   // "stream": true,
	}
	Class struct {
		Hidden bool // "hidden": true
	}
	OnDeviceSource   map[string]string      // "onDeviceSource": {
	VendorExtension  map[string]interface{} // // "vendorExtension": {
	BootLaunchParams struct {
		BGMode string // "BGMode": "1"
		Boot   bool   // "boot": true
	}
}

type AudioStatus

type AudioStatus struct {
	Scenario string
	Volume   int
	Mute     bool
}

type CaseDetail

type CaseDetail struct {
	Code               int    // "code": 1,
	ServiceCountryCode string // "serviceCountryCode": "FIN",
	// "change": [], // ???
	LocaleCode           string // "localeCode": "en-GB",
	BroadcastCountryCode string // "broadcastCountryCode": "FIN"
}

type CurrentSWInformation

type CurrentSWInformation struct {
	ProductName   string `mapstructure:"product_name"`   // "product_name":"webOS"
	ModelName     string `mapstructure:"model_name"`     // "model_name":"HE_DTV_WT1M_AFAAABAA"
	SwType        string `mapstructure:"sw_type"`        // "sw_type":"FIRMWARE"
	MajorVer      string `mapstructure:"major_ver"`      // "major_ver":"05"
	MinorVer      string `mapstructure:"minor_ver"`      // "minor_ver":"05.35"
	Country       string `mapstructure:"country"`        // "country":"FI"
	DeviceId      string `mapstructure:"device_id"`      // "device_id":"3c:cd:93:7b:91:9e"
	AuthFlag      string `mapstructure:"auth_flag"`      // "auth_flag":"N"
	IgnoreDisable string `mapstructure:"ignore_disable"` // "ignore_disable":"N"
	EcoInfo       string `mapstructure:"eco_info"`       // "eco_info":"01"
	ConfigKey     string `mapstructure:"config_key"`     // "config_key":"00"
	LanguageCode  string `mapstructure:"language_code"`  // "language_code":"en-GB"}
}

type Dialer

type Dialer struct {
	DisableTLS      bool
	WebsocketDialer *websocket.Dialer
}

func (*Dialer) Dial

func (dialer *Dialer) Dial(address string) (tv *Tv, err error)

func (*Dialer) DialPointerSocket

func (dialer *Dialer) DialPointerSocket(address string) (ps *PointerSocket, err error)

type ForegroundAppInfo

type ForegroundAppInfo struct {
	AppId     string
	WindowId  string
	ProcessId string
}

func (*ForegroundAppInfo) IsLiveTv

func (i *ForegroundAppInfo) IsLiveTv() bool

type LaunchPoint

type LaunchPoint struct {
	Removable       bool              // "removable": false,
	LargeIcon       string            // "largeIcon": "/mnt/otncabi/usr/palm/applications/com.webos.app.discovery/lgstore_130x130.png",
	Vendor          string            // "vendor": "LGE",
	Id              string            // "id": "com.webos.app.discovery",
	Title           string            // "title": "LG Store",
	BgColor         string            // "bgColor": "#8e191b",
	VendorURL       string            // "vendorUrl": "",
	IconColor       string            // "iconColor": "#4b4b4b",
	AppDescription  string            // "appDescription": "",
	Params          map[string]string // "params": { //           "deviceId": "HDMI_2"
	Version         string            // "version": "1.0.19",
	BgImage         string            // "bgImage": "/mnt/otncabi/usr/palm/applications/com.webos.app.discovery/lgstore_preview.png",
	Icon            string            // "icon": "http://lgsmarttv.lan:3000/resources/e1a2afa2ee2c03b7e7c89247d3425a8af8657e5d/lgstore_80x80.png",
	LaunchPointId   string            // "launchPointId": "com.webos.app.discovery_default",
	ImageForRecents string            // "imageForRecents": "/media/cryptofs/apps/usr/palm/applications/netflix/RECENTS.png"
}

type Msg

type Msg struct {
	Type    string  `json:"type,omitempty"`
	Id      string  `json:"id,omitempty"`
	Uri     string  `json:"uri,omitempty"`
	Payload Payload `json:"payload,omitempty"`
	Error   string  `json:"error,omitempty"`
}

type Payload

type Payload map[string]interface{}

func (*Payload) UnmarshalJSON

func (p *Payload) UnmarshalJSON(b []byte) (err error)

type PointerSocket

type PointerSocket struct {
	Address string

	sync.Mutex
	// contains filtered or unexported fields
}

func (*PointerSocket) Click

func (ps *PointerSocket) Click() (err error)

func (*PointerSocket) Close

func (ps *PointerSocket) Close() (err error)

func (*PointerSocket) Input

func (ps *PointerSocket) Input(btype, bname string) (err error)

func (*PointerSocket) MessageHandler

func (ps *PointerSocket) MessageHandler() (err error)

func (*PointerSocket) Move

func (ps *PointerSocket) Move(dx, dy int) (err error)

func (*PointerSocket) Scroll

func (ps *PointerSocket) Scroll(dx, dy int) (err error)

type ServiceListEntry

type ServiceListEntry struct {
	Name    string
	Version int
}

type SystemInfo

type SystemInfo struct {
	// {"type":"response","id":"e8soy4EW","payload":{"features":{"3d":true,"dvr":true},"receiverType":"dvb","modelName":"42LB650V-ZN","returnValue":true}}
	Features     map[string]bool
	ReceiverType string
	ModelName    string
}

type Tv

type Tv struct {
	Address string
	// contains filtered or unexported fields
}

func (*Tv) ApiGetServiceList

func (tv *Tv) ApiGetServiceList() (list []ServiceListEntry, err error)

func (*Tv) ApplicationManagerGetAppInfo

func (tv *Tv) ApplicationManagerGetAppInfo(id string) (info App, err error)

func (*Tv) ApplicationManagerGetForegroundAppInfo

func (tv *Tv) ApplicationManagerGetForegroundAppInfo() (info ForegroundAppInfo, err error)

func (*Tv) ApplicationManagerLaunch

func (tv *Tv) ApplicationManagerLaunch(id string, params Payload) (processId string, err error)

func (*Tv) ApplicationManagerListApps

func (tv *Tv) ApplicationManagerListApps() (list []App, err error)

func (*Tv) ApplicationManagerListLaunchPoints

func (tv *Tv) ApplicationManagerListLaunchPoints() (launchPoints []LaunchPoint, caseDetail CaseDetail, err error)

func (*Tv) ApplicationManagerMonitorForegroundAppInfo

func (tv *Tv) ApplicationManagerMonitorForegroundAppInfo(process func(info ForegroundAppInfo) error, quit <-chan struct{}) error

func (*Tv) AudioGetMute

func (tv *Tv) AudioGetMute() (mute bool, err error)

func (*Tv) AudioGetStatus

func (tv *Tv) AudioGetStatus() (as AudioStatus, err error)

func (*Tv) AudioGetVolume

func (tv *Tv) AudioGetVolume() (scenario string, volume int, muted bool, err error)

func (*Tv) AudioMonitorStatus

func (tv *Tv) AudioMonitorStatus(process func(as AudioStatus) error, quit <-chan struct{}) error

func (*Tv) AudioSetMute

func (tv *Tv) AudioSetMute(mute bool) (err error)

func (*Tv) AudioSetVolume

func (tv *Tv) AudioSetVolume(volume int) (err error)

func (*Tv) AudioVolumeDown

func (tv *Tv) AudioVolumeDown() (err error)

func (*Tv) AudioVolumeUp

func (tv *Tv) AudioVolumeUp() (err error)

func (*Tv) Close

func (tv *Tv) Close() (err error)

func (*Tv) Get3DStatus

func (tv *Tv) Get3DStatus() (status bool, pattern string, err error)

func (*Tv) GetCurrentSWInformation

func (tv *Tv) GetCurrentSWInformation() (info CurrentSWInformation, err error)

func (*Tv) GetCurrentTime

func (tv *Tv) GetCurrentTime() (y, m, d, h, min, s int, err error)

func (*Tv) GetPointerInputSocket

func (tv *Tv) GetPointerInputSocket() (socketPath string, err error)

func (*Tv) ImeDeleteCharacters

func (tv *Tv) ImeDeleteCharacters(count int) (err error)

func (*Tv) ImeInsertText

func (tv *Tv) ImeInsertText(text string, replace bool) (err error)

func (*Tv) ImeSendEnterKey

func (tv *Tv) ImeSendEnterKey() (err error)

func (*Tv) LaunchNetflix

func (tv *Tv) LaunchNetflix(contentId string) (sessionId string, err error)

func (*Tv) LaunchYoutube

func (tv *Tv) LaunchYoutube(videoId string) (sessionId string, err error)

func (*Tv) MediaControlsFastForward

func (tv *Tv) MediaControlsFastForward() (err error)

func (*Tv) MediaControlsPause

func (tv *Tv) MediaControlsPause() (err error)

func (*Tv) MediaControlsPlay

func (tv *Tv) MediaControlsPlay() (err error)

func (*Tv) MediaControlsRewind

func (tv *Tv) MediaControlsRewind() (err error)

func (*Tv) MediaControlsStop

func (tv *Tv) MediaControlsStop() (err error)

func (*Tv) MediaViewerClose

func (tv *Tv) MediaViewerClose(sessionId string) (err error)

func (*Tv) MediaViewerOpen

func (tv *Tv) MediaViewerOpen(url, title, description, mimeType, iconSrc string, loop bool) (appId, sessionId string, err error)

func (*Tv) MessageHandler

func (tv *Tv) MessageHandler() (err error)

func (*Tv) MonitorStatus

func (tv *Tv) MonitorStatus(uri string, req Payload, processPayload func(Payload) error, quit <-chan struct{}) (err error)

func (*Tv) NewPointerSocket

func (tv *Tv) NewPointerSocket() (ps *PointerSocket, err error)

func (*Tv) Register

func (tv *Tv) Register(key string) (newKey string, err error)

func (*Tv) Request

func (tv *Tv) Request(uri string, req Payload) (resp Payload, err error)

func (*Tv) RequestResponseParam

func (tv *Tv) RequestResponseParam(uri string, req Payload, resp interface{}) (err error)

func (*Tv) SdxGetHttpHeaderForServiceRequest

func (tv *Tv) SdxGetHttpHeaderForServiceRequest() (resp map[string]string, err error)

func (*Tv) SecondscreenGatewayTestSecure

func (tv *Tv) SecondscreenGatewayTestSecure() (clearedForDuty bool, err error)

func (*Tv) Set3DOff

func (tv *Tv) Set3DOff() (err error)

func (*Tv) Set3DOn

func (tv *Tv) Set3DOn() (err error)

func (*Tv) SetDebug

func (tv *Tv) SetDebug(debugFunc func(string))

func (*Tv) Subscribe

func (tv *Tv) Subscribe(uri string, req Payload, msgCh chan<- Msg) (id string, err error)

func (*Tv) SystemGetSystemInfo

func (tv *Tv) SystemGetSystemInfo() (info SystemInfo, err error)

func (*Tv) SystemLauncherClose

func (tv *Tv) SystemLauncherClose(sessionId string) (err error)

func (*Tv) SystemLauncherGetAppState

func (tv *Tv) SystemLauncherGetAppState(sessionId string) (running, visible bool, err error)

func (*Tv) SystemLauncherLaunch

func (tv *Tv) SystemLauncherLaunch(appId string, params Payload) (sessionId string, err error)

func (*Tv) SystemLauncherOpen

func (tv *Tv) SystemLauncherOpen(url string) (appId, sessionId string, err error)

func (*Tv) SystemNotificationsCreateToast

func (tv *Tv) SystemNotificationsCreateToast(msg string) (toastId string, err error)

func (*Tv) SystemTurnOff

func (tv *Tv) SystemTurnOff() (err error)

func (*Tv) TvChannelDown

func (tv *Tv) TvChannelDown() (err error)

func (*Tv) TvChannelUp

func (tv *Tv) TvChannelUp() (err error)

func (*Tv) TvGetChannelCurrentProgramInfo

func (tv *Tv) TvGetChannelCurrentProgramInfo(channelId string) (info TvCurrentProgramInfo, err error)

func (*Tv) TvGetChannelList

func (tv *Tv) TvGetChannelList() (list []TvChannel, err error)

func (*Tv) TvGetChannelProgramInfo

func (tv *Tv) TvGetChannelProgramInfo(channelId string) (channel TvChannel, programlist []TvProgram, err error)

func (*Tv) TvGetCurrentChannel

func (tv *Tv) TvGetCurrentChannel() (cur TvCurrentChannel, err error)

func (*Tv) TvGetExternalInputList

func (tv *Tv) TvGetExternalInputList() (list []TvExternalInput, err error)

func (*Tv) TvMonitorCurrentChannel

func (tv *Tv) TvMonitorCurrentChannel(process func(cur TvCurrentChannel) error, quit <-chan struct{}) error

func (*Tv) TvOpenChannelId

func (tv *Tv) TvOpenChannelId(channelId string) (err error)

func (*Tv) TvOpenChannelNumber

func (tv *Tv) TvOpenChannelNumber(channelNumber string) (err error)

func (*Tv) TvSwitchInput

func (tv *Tv) TvSwitchInput(inputId string) (err error)

func (*Tv) Unsubscribe

func (tv *Tv) Unsubscribe(uri string, id string, req Payload) error

type TvChannel

type TvChannel struct {
	ChannelId       string // "channelId": "3_3_23_23_17_3291_0",
	ChannelMajMinNo string // "channelMajMinNo": "04-00023-000-003",
	ChannelName     string // "channelName": "MTV3 HD",
	ChannelNumber   string // "channelNumber": "23",
	ChannelType     string // "channelType": "Cable Digital TV",
	ChannelTypeId   int    // "channelTypeId": 4,
	ChannelMode     string // "channelMode": "Cable",
	ChannelModeId   int    // "channelModeId": 1,
	SignalChannelId string // "signalChannelId": "17_3291_0",
	ProgramId       string // "programId": "17_3291_0",
	FavoriteGroup   string // "favoriteGroup": "",
	SatelliteName   string // "satelliteName": " ",
	Frequency       int    // "Frequency": 130000,
	Bandwidth       int    // "Bandwidth": 0,
	SourceIndex     int    // "sourceIndex": 3,
	ServiceType     int    // "serviceType": 25,
	ShortCut        int    // "shortCut": 0,
	Handle          int    // "Handle": 0,
	ONID            int    // "ONID": 0,
	SVCID           int    // "SVCID": 3291,
	TSID            int    // "TSID": 17,
	ConfigurationId int    // "configurationId": 0,
	MajorNumber     int    // "majorNumber": 23,
	MinorNumber     int    // "minorNumber": 23,
	PhysicalNumber  int    // "physicalNumber": 3,
	ATV             bool   // "ATV": false,
	DTV             bool   // "DTV": true,
	Data            bool   // "Data": false,
	HDTV            bool   // "HDTV": true,
	Invisible       bool   // "Invisible": false,
	Numeric         bool   // "Numeric": false,
	PrimaryCh       bool   // "PrimaryCh": true,
	Radio           bool   // "Radio": false,
	TV              bool   // "TV": true,
	Descrambled     bool   // "descrambled": true,
	FineTuned       bool   // "fineTuned": false,
	Locked          bool   // "locked": false,
	SatelliteLcn    bool   // "satelliteLcn": false,
	Scrambled       bool   // "scrambled": false,
	Skipped         bool   // "skipped": false,
	SpecialService  bool   // "specialService": false
	GroupIdList     []TvChannelGroupId
}

type TvChannelGroupId

type TvChannelGroupId struct {
	Id_  string `mapstructure:"_id"`              // "_id": "7d81",
	Id   int    `mapstructure:"channelGroupId"`   // "channelGroupId": 1,
	Name string `mapstructure:"channelGroupName"` // "channelGroupName": "DTV"
}

type TvCurrentChannel

type TvCurrentChannel struct {
	ChannelId       string // "channelId":"3_32_24_24_31_13105_0"
	SignalChannelId string // "signalChannelId":"31_13105_0"
	ChannelModeId   int    // "channelModeId":1
	ChannelModeName string // "channelModeName":"Cable"
	ChannelTypeId   int    // "channelTypeId":4
	ChannelTypeName string // "channelTypeName":"Cable Digital TV"
	ChannelNumber   string // "channelNumber":"24"
	ChannelName     string // "channelName":"Nelonen HD"
	PhysicalNumber  int    // "physicalNumber":32
	IsSkipped       bool   // "isSkipped":false
	IsLocked        bool   // "isLocked":false
	IsDescrambled   bool   // "isDescrambled":true
	IsScrambled     bool   // "isScrambled":false
	IsFineTuned     bool   // "isFineTuned":false
	IsInvisible     bool   // "isInvisible":false

}

type TvCurrentProgramInfo

type TvCurrentProgramInfo struct {
	ProgramId      string // "programId": "0_31_13105_42559",
	ProgramName    string // "programName": "Keno ja Synttärit",
	Description    string // "description": "Illan Keno-arvonnan [..] visailuohjelma. (2')",
	StartTime      string // "startTime": "2018,04,03,17,58,00"
	EndTime        string // "endTime": "2018,04,03,18,00,00",
	LocalStartTime string // "localStartTime": "2018,04,03,20,58,00",
	LocalEndTime   string // "localEndTime": "2018,04,03,21,00,00",
	ChanelId       string // "channelId": "3_32_24_24_31_13105_0",
	ChannelName    string // "channelName": "Nelonen HD",
	ChannelNumber  string // "channelNumber": "24",
	ChannelMode    string // "channelMode": "Cable",
	Duration       int    // "duration": 120,
}

type TvExternalInput

type TvExternalInput struct {
	Id              string // "id": "SCART_1",
	Label           string // "label": "AV1",
	Port            int    // "port": 1,
	AppId           string // "appId": "com.webos.app.externalinput.scart",
	Icon            string // "icon": "http://lgsmarttv.lan:3000/resources/d8dd219500f8c1604e548d980c0f60979be5b5a5/scart.png",
	CurrentTVStatus string // "currentTVStatus": "",
	Modified        bool   // "modified": false,
	Autoav          bool   // "autoav": false,
	Connected       bool   // "connected": false,
	Favorite        bool   // "favorite": false

}

type TvProgram

type TvProgram struct {
	ProgramId       string            // "programId": "0_31_13105_42559",
	ProgramName     string            // "programName": "Keno ja Synttärit",
	Description     string            // "description": "Illan Keno-arvonnan [..] visailuohjelma. (2')",
	StartTime       string            // "startTime": "2018,04,03,17,58,00"
	EndTime         string            // "endTime": "2018,04,03,18,00,00",
	LocalStartTime  string            // "localStartTime": "2018,04,03,20,58,00",
	LocalEndTime    string            // "localEndTime": "2018,04,03,21,00,00",
	DSTStartTime    string            // "DSTStartTime": "2018,04,03,20,58,00",
	DSTEndTime      string            // "DSTEndTime": "2018,04,03,21,00,00",
	SignalChannelId string            // "signalChannelId": "31_13105_0",
	Duration        int               // "duration": 120,
	IsPresent       bool              // "isPresent": false,
	Rating          []TvProgramRating // "rating": [
}

type TvProgramRating

type TvProgramRating struct {
	Id           string `mapstructure:"_id"` // "_id": "157ac",
	RatingString string // "ratingString": "",
	RatingValue  int    // "ratingValue": 3,
	Region       int    // "region": 4606286
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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