2021-06-26 10:04:32 +00:00
function ItemGetPlaybackInfo(id as string, startTimeTicks = 0 as longinteger)
2021-07-09 20:08:32 +00:00
params = {
"UserId": get_setting("active_user"),
"StartTimeTicks": startTimeTicks,
"IsPlayback": true,
"AutoOpenLiveStream": true,
"MaxStreamingBitrate": "140000000"
}
resp = APIRequest(Substitute("Items/{0}/PlaybackInfo", id), params)
return getJson(resp)
2020-05-31 13:46:33 +00:00
end function
2021-07-09 20:08:32 +00:00
function ItemPostPlaybackInfo(id as string, mediaSourceId = "" as string, audioTrackIndex = -1 as integer, subtitleTrackIndex = -1 as integer, startTimeTicks = 0 as longinteger)
body = {
"DeviceProfile": getDeviceProfile()
}
params = {
"UserId": get_setting("active_user"),
"StartTimeTicks": startTimeTicks,
"IsPlayback": true,
"AutoOpenLiveStream": true,
"MaxStreamingBitrate": "140000000",
"MaxStaticBitrate": "140000000",
"SubtitleStreamIndex": subtitleTrackIndex
}
2021-06-12 15:03:47 +00:00
2021-07-09 20:08:32 +00:00
if mediaSourceId <> "" then params.MediaSourceId = mediaSourceId
2021-06-12 15:03:47 +00:00
2021-07-09 20:08:32 +00:00
if audioTrackIndex > -1 then params.AudioStreamIndex = audioTrackIndex
2021-06-12 15:03:47 +00:00
2021-07-09 20:08:32 +00:00
req = APIRequest(Substitute("Items/{0}/PlaybackInfo", id), params)
req.SetRequest("POST")
return postJson(req, FormatJson(body))
2020-02-15 01:47:06 +00:00
end function
2019-04-20 22:28:28 +00:00
2019-03-19 02:59:23 +00:00
' Search across all libraries
2019-10-11 19:01:46 +00:00
function SearchMedia(query as string)
2021-07-09 20:08:32 +00:00
' This appears to be done differently on the web now
' For each potential type, a separate query is done:
' varying item types, and artists, and people
resp = APIRequest(Substitute("Users/{0}/Items", get_setting("active_user")), {
"searchTerm": query,
"IncludePeople": true,
"IncludeMedia": true,
"IncludeShows": true,
"IncludeGenres": false,
"IncludeStudios": false,
"IncludeArtists": false,
"IncludeItemTypes": "TvChannel,Movie,BoxSet,Series,Episode,Video"
"EnableTotalRecordCount": false,
"ImageTypeLimit": 1,
"Recursive": true
})
2021-06-09 14:11:58 +00:00
2021-07-09 20:08:32 +00:00
data = getJson(resp)
results = []
for each item in data.Items
tmp = CreateObject("roSGNode", "SearchData")
tmp.image = PosterImage(item.id)
tmp.json = item
results.push(tmp)
end for
data.SearchHints = results
return data
2019-03-19 02:59:23 +00:00
end function
' MetaData about an item
2019-10-11 19:01:46 +00:00
function ItemMetaData(id as string)
2021-07-09 20:08:32 +00:00
url = Substitute("Users/{0}/Items/{1}", get_setting("active_user"), id)
resp = APIRequest(url)
data = getJson(resp)
if data = invalid then return invalid
imgParams = {}
if data.UserData.PlayedPercentage <> invalid
param = { "PercentPlayed": data.UserData.PlayedPercentage }
imgParams.Append(param)
end if
if data.type = "Movie"
tmp = CreateObject("roSGNode", "MovieData")
tmp.image = PosterImage(data.id, imgParams)
tmp.json = data
return tmp
else if data.type = "Series"
tmp = CreateObject("roSGNode", "SeriesData")
tmp.image = PosterImage(data.id)
tmp.json = data
return tmp
else if data.type = "Episode"
' param = { "AddPlayedIndicator": data.UserData.Played }
' imgParams.Append(param)
tmp = CreateObject("roSGNode", "TVEpisodeData")
tmp.image = PosterImage(data.id, imgParams)
tmp.json = data
return tmp
else if data.type = "BoxSet"
tmp = CreateObject("roSGNode", "CollectionData")
tmp.image = PosterImage(data.id, imgParams)
tmp.json = data
return tmp
else if data.type = "Season"
tmp = CreateObject("roSGNode", "TVSeasonData")
tmp.image = PosterImage(data.id)
tmp.json = data
return tmp
else if data.type = "Video"
tmp = CreateObject("roSGNode", "VideoData")
tmp.image = PosterImage(data.id)
tmp.json = data
return tmp
2021-12-18 06:03:33 +00:00
else if data.type = "TvChannel" or data.type = "Program"
2021-07-09 20:08:32 +00:00
tmp = CreateObject("roSGNode", "ChannelData")
tmp.image = PosterImage(data.id)
2022-05-14 10:13:28 +00:00
tmp.isFavorite = data.UserData.isFavorite
2021-07-09 20:08:32 +00:00
tmp.json = data
return tmp
2022-03-13 08:46:03 +00:00
else if data.type = "Person"
tmp = CreateObject("roSGNode", "PersonData")
tmp.image = PosterImage(data.id, { "MaxWidth": 300, "MaxHeight": 450 })
tmp.json = data
return tmp
2022-05-14 02:35:50 +00:00
else if data.type = "MusicArtist"
2022-05-14 21:14:15 +00:00
' User clicked on an artist and wants to see the list of their albums
2022-05-14 02:35:50 +00:00
tmp = CreateObject("roSGNode", "MusicArtistData")
tmp.image = PosterImage(data.id)
tmp.json = data
return tmp
2022-05-14 15:47:44 +00:00
else if data.type = "MusicAlbum"
2022-05-14 21:14:15 +00:00
' User clicked on an album and wants to see the list of songs
tmp = CreateObject("roSGNode", "MusicAlbumSongListData")
2022-05-14 15:47:44 +00:00
tmp.image = PosterImage(data.id)
tmp.json = data
return tmp
else if data.type = "Audio"
2022-05-14 21:14:15 +00:00
2021-07-09 20:08:32 +00:00
else
print "Items.brs::ItemMetaData processed unhandled type: " data.type
' Return json if we don't know what it is
return data
end if
2019-03-19 02:59:23 +00:00
end function
2022-05-14 21:14:15 +00:00
' Get list of albums belonging to an artist
function MusicAlbumList(id as string)
2022-05-14 02:35:50 +00:00
url = Substitute("Users/{0}/Items", get_setting("active_user"), id)
resp = APIRequest(url, {
"UserId": get_setting("active_user"),
"parentId": id,
2022-05-14 03:46:05 +00:00
"includeitemtypes": "MusicAlbum",
"sortBy": "SortName"
})
data = getJson(resp)
results = []
for each item in data.Items
2022-05-14 21:14:15 +00:00
tmp = CreateObject("roSGNode", "MusicAlbumData")
2022-05-14 03:46:05 +00:00
tmp.image = PosterImage(item.id)
tmp.json = item
results.push(tmp)
end for
data.Items = results
return data
end function
2022-05-14 21:14:15 +00:00
' Get Songs that are on an Album
function MusicSongList(id as string)
2022-05-14 03:46:05 +00:00
url = Substitute("Users/{0}/Items", get_setting("active_user"), id)
resp = APIRequest(url, {
"UserId": get_setting("active_user"),
"parentId": id,
"includeitemtypes": "Audio"
"sortBy": "SortName"
2022-05-14 02:35:50 +00:00
})
data = getJson(resp)
results = []
for each item in data.Items
2022-05-14 21:14:15 +00:00
tmp = CreateObject("roSGNode", "MusicSongData")
2022-05-14 02:35:50 +00:00
tmp.image = PosterImage(item.id)
tmp.json = item
results.push(tmp)
end for
data.Items = results
return data
end function
2019-03-19 02:59:23 +00:00
' Seasons for a TV Show
2019-10-11 19:01:46 +00:00
function TVSeasons(id as string)
2021-07-09 20:08:32 +00:00
url = Substitute("Shows/{0}/Seasons", id)
resp = APIRequest(url, { "UserId": get_setting("active_user") })
2019-03-19 02:59:23 +00:00
2021-07-09 20:08:32 +00:00
data = getJson(resp)
results = []
for each item in data.Items
imgParams = { "AddPlayedIndicator": item.UserData.Played }
if item.UserData.UnplayedItemCount > 0
param = { "UnplayedCount": item.UserData.UnplayedItemCount }
imgParams.Append(param)
end if
tmp = CreateObject("roSGNode", "TVEpisodeData")
tmp.image = PosterImage(item.id, imgParams)
tmp.json = item
results.push(tmp)
end for
data.Items = results
return data
2019-03-19 02:59:23 +00:00
end function
2019-10-11 19:01:46 +00:00
function TVEpisodes(show_id as string, season_id as string)
2021-07-09 20:08:32 +00:00
url = Substitute("Shows/{0}/Episodes", show_id)
2022-02-05 01:53:54 +00:00
resp = APIRequest(url, { "seasonId": season_id, "UserId": get_setting("active_user"), "fields": "MediaStreams" })
2019-04-14 04:47:27 +00:00
2021-07-09 20:08:32 +00:00
data = getJson(resp)
results = []
for each item in data.Items
imgParams = { "AddPlayedIndicator": item.UserData.Played, "maxWidth": 712, "maxheight": 400 }
if item.UserData.PlayedPercentage <> invalid
param = { "PercentPlayed": item.UserData.PlayedPercentage }
imgParams.Append(param)
end if
tmp = CreateObject("roSGNode", "TVEpisodeData")
tmp.image = PosterImage(item.id, imgParams)
if tmp.image <> invalid
tmp.image.posterDisplayMode = "scaleToFit"
end if
tmp.json = item
tmp.overview = ItemMetaData(item.id).overview
results.push(tmp)
end for
data.Items = results
return data
2019-04-14 04:47:27 +00:00
end function