/usr/share/grilo-plugins/grl-lua-factory/grl-appletrailers.lua is in grilo-plugins-0.3 0.3.3-1+deb9u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | --[[
* Copyright (C) 2015 Grilo Project
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
--]]
---------------------------
-- Source initialization --
---------------------------
source = {
id = "grl-appletrailers-lua",
name = "Apple Movie Trailers",
description = "Apple Trailers",
supported_media = 'video',
supported_keys = { 'author', 'publication-date', 'description', 'duration', 'genre', 'id', 'thumbnail', 'title', 'url', 'certificate', 'studio', 'license', 'performer', 'size' },
config_keys = {
optional = { 'definition' },
},
icon = 'resource:///org/gnome/grilo/plugins/appletrailers/trailers.svg',
tags = { 'country:us', 'cinema', 'net:internet', 'net:plaintext' },
}
-- Global table to store config data
ldata = {}
-- Global table to store parse results
cached_xml = nil
function grl_source_init(configs)
ldata.hd = (configs.definition and configs.definition == 'hd')
return true
end
---------------------------------
-- Handlers of Grilo functions --
---------------------------------
APPLE_TRAILERS_CURRENT_SD = "http://trailers.apple.com/trailers/home/xml/current_480p.xml"
APPLE_TRAILERS_CURRENT_HD = "http://trailers.apple.com/trailers/home/xml/current_720p.xml"
function grl_source_browse()
local skip = grl.get_options("skip")
local count = grl.get_options("count")
-- Make sure to reset the cache when browsing again
if skip == 0 then
cached_xml = nil
end
if cached_xml then
parse_results(cached_xml)
else
local url = APPLE_TRAILERS_CURRENT_SD
if ldata.hd then
url = APPLE_TRAILERS_CURRENT_HD
end
grl.debug('Fetching URL: ' .. url .. ' (count: ' .. count .. ' skip: ' .. skip .. ')')
grl.fetch(url, fetch_results_cb)
end
end
---------------
-- Utilities --
---------------
function fetch_results_cb(results)
if not results then
grl.warning('Failed to fetch XML file')
grl.callback()
return
end
cached_xml = grl.lua.xml.string_to_table(results)
parse_results(cached_xml)
end
function parse_results(results)
local count = grl.get_options("count")
local skip = grl.get_options("skip")
for i, item in pairs(results.records.movieinfo) do
local media = {}
media.type = 'video'
media.id = item.id
if item.cast then
media.performer = {}
for j, cast in pairs(item.cast.name) do
table.insert(media.performer, cast.xml)
end
end
if item.genre then
media.genre = {}
for j, genre in pairs(item.genre.name) do
table.insert(media.genre, genre.xml)
end
end
media.license = item.info.copyright.xml
media.description = item.info.description.xml
media.director = item.info.director.xml
media.publication_date = item.info.releasedate.xml
media.certificate = item.info.rating.xml
media.studio = item.info.studio.xml
media.title = item.info.title.xml
media.thumbnail = item.poster.xlarge.xml
media.url = item.preview.large.xml
media.size = item.preview.large.filesize
local mins, secs = item.info.runtime.xml:match('(%d):(%d)')
media.duration = tonumber(mins) * 60 + tonumber(secs)
if skip > 0 then
skip = skip - 1
else
count = count - 1
grl.callback(media, count)
if count == 0 then
return
end
end
end
if count ~= 0 then
grl.callback()
end
end
|