View file File name : grl-appletrailers.lua Content :--[[ * 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 = tonumber(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