diff options
Diffstat (limited to 'abs')
| -rw-r--r-- | abs/core/mythtv/stable-0.25/mythtv/PKGBUILD | 12 | ||||
| -rw-r--r-- | abs/core/mythtv/stable-0.25/mythtv/mythtv.install | 4 | ||||
| -rwxr-xr-x | abs/core/mythtv/stable-0.25/mythtv/tmdb3.py | 278 | ||||
| -rwxr-xr-x | abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py | 8 | 
4 files changed, 297 insertions, 5 deletions
| diff --git a/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD b/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD index 95f2a12..873eb92 100644 --- a/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD +++ b/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD @@ -6,7 +6,7 @@  pkgname=mythtv  pkgver=0.25 -pkgrel=28 +pkgrel=29  commit_hash=`cat ../git_src/git_hash`  pkgdesc="A Homebrew PVR project $commit_hash"  arch=('i686' 'x86_64') @@ -77,7 +77,8 @@ optdepends=('xmltv: to download tv listings')  replaces=('mythvideo' 'myththemes')  conflicts=('mythvideo' 'myththemes')  source=('mythbackend' 'myth.sh' `echo ${patchs[@]:0}` -        'mythbackend.lr' 'mythfrontend.lr' 'pretty' ) +        'mythbackend.lr' 'mythfrontend.lr' 'pretty' +        'tmdb3.py' 'tmdb3_db_update.py')  build() { @@ -108,6 +109,9 @@ build() {      #Fix Python DepreciationWarning      sed -i 's/return super(Artwork, cls).__new__(cls, attr, parent, imagetype)/return super(Artwork, cls).__new__(cls)/' ${srcdir}/mythtv/bindings/python/MythTV/dataheap.py +    #Update tmdb3.py to v3.6 & add tmdb3_db_update.py script +    cp $srcdir/tmdb3*.py $srcdir/mythtv/programs/scripts/metadata/Movie/ +    ARCH=${CARCH/_/-}    ./configure --prefix=/usr --cpu=${ARCH} \                --disable-audio-jack \ @@ -162,4 +166,6 @@ md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'           'ae23e6a8cffbe335fa37bf59978bf7a2'           'f735805a80b0d1180dee01f9df1b7004'           'f407d6af23e74a49540755420f84fa58' -         '5469d9921b726db750b991c87d226158') +         '5469d9921b726db750b991c87d226158' +         '187be42b1ffca6badfa539260ffef65e' +         '561bc8552c9d1f146d02a6febea5e700') diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install b/abs/core/mythtv/stable-0.25/mythtv/mythtv.install index 3b44668..cc60916 100644 --- a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install +++ b/abs/core/mythtv/stable-0.25/mythtv/mythtv.install @@ -2,6 +2,7 @@  post_install() {          gen_is_xml.py          gen_lib_xml.py +        /usr/share/mythtv/metadata/Movie/tmdb3_db_update.py  }  pre_upgrade() { @@ -9,8 +10,7 @@ pre_upgrade() {  }  post_upgrade() { -        gen_is_xml.py -        gen_lib_xml.py +        post_install  } diff --git a/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py b/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py new file mode 100755 index 0000000..829f744 --- /dev/null +++ b/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +# ---------------------- +# Name: tmdb3.py +# Python Script +# Author: Raymond Wagner +# Purpose: This python script is intended to translate lookups between the +#          TheMovieDB.org V3 API and MythTV's internal metadata format. +#               http://www.mythtv.org/wiki/MythVideo_Grabber_Script_Format +#               http://help.themoviedb.org/kb/api/about-3 +#----------------------- +__title__ = "TheMovieDB.org V3" +__author__ = "Raymond Wagner" +__version__ = "0.3.6" +# 0.1.0 Initial version +# 0.2.0 Add language support, move cache to home directory +# 0.3.0 Enable version detection to allow use in MythTV +# 0.3.1 Add --test parameter for proper compatibility with mythmetadatalookup +# 0.3.2 Add --area parameter to allow country selection for release date and +#       parental ratings +# 0.3.3 Use translated title if available +# 0.3.4 Add support for finding by IMDB under -D (simulate previous version) +# 0.3.5 Add debugging mode +# 0.3.6 Add handling for TMDB site and library returning null results in +#       search. This should only need to be a temporary fix, and should be +#       resolved upstream. + +from optparse import OptionParser +import sys + +def buildSingle(inetref, opts): +    from MythTV.tmdb3 import Movie +    from MythTV import VideoMetadata +    from lxml import etree + +    import re +    if re.match('^0[0-9]{6}$', inetref): +        movie = Movie.fromIMDB(inetref) +    else: +        movie = Movie(inetref) + +    tree = etree.XML(u'<metadata></metadata>') +    mapping = [['runtime',      'runtime'],     ['title',       'originaltitle'], +               ['releasedate',  'releasedate'], ['tagline',     'tagline'], +               ['description',  'overview'],    ['homepage',    'homepage'], +               ['userrating',   'userrating'],  ['popularity',  'popularity'], +               ['budget',       'budget'],      ['revenue',     'revenue']] +    m = VideoMetadata() +    for i,j in mapping: +        if getattr(movie, j): +            setattr(m, i, getattr(movie, j)) + +    if movie.title: +        m.title = movie.title + +    releases = movie.releases.items() + +    if opts.country: +        try: +            # resort releases with selected country at top to ensure it +            # is selected by the metadata libraries +            index = zip(*releases)[0].index(opts.country) +            releases.insert(0, releases.pop(index)) +        except ValueError: +            pass +        else: +            m.releasedate = releases[0][1].releasedate + +    m.inetref = str(movie.id) +    if movie.collection: +        m.collectionref = str(movie.collection.id) +    if movie.releasedate: +        m.year = movie.releasedate.year +    for country, release in releases: +        if release.certification: +            m.certifications[country] = release.certification +    for genre in movie.genres: +        m.categories.append(genre.name) +    for studio in movie.studios: +        m.studios.append(studio.name) +    for country in movie.countries: +        m.countries.append(country.name) +    for cast in movie.cast: +        d = {'name':cast.name, 'character':cast.character, 'department':'Actors', +             'job':'Actor', 'url':'http://www.themoviedb.org/people/{0}'.format(cast.id)} +        if cast.profile: d['thumb'] = cast.profile.geturl() +        m.people.append(d) +    for crew in movie.crew: +        d = {'name':crew.name, 'job':crew.job, 'department':crew.department, +             'url':'http://www.themoviedb.org/people/{0}'.format(crew.id)} +        if crew.profile: d['thumb'] = crew.profile.geturl() +        m.people.append(d) +    for backdrop in movie.backdrops: +        m.images.append({'type':'fanart', 'url':backdrop.geturl(), +                        'thumb':backdrop.geturl(backdrop.sizes()[0])}) +    for poster in movie.posters: +        m.images.append({'type':'coverart', 'url':poster.geturl(), +                        'thumb':poster.geturl(poster.sizes()[0])}) +    tree.append(m.toXML()) +    sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True, +                                    xml_declaration=True)) +    sys.exit() + +def buildList(query, opts): +    # TEMPORARY FIX: +    # replace all dashes from queries to work around search behavior +    # as negative to all text that comes afterwards +    query = query.replace('-',' ') + +    from MythTV.tmdb3 import searchMovie +    from MythTV import VideoMetadata +    from lxml import etree +    results = searchMovie(query) +    tree = etree.XML(u'<metadata></metadata>') +    mapping = [['runtime',      'runtime'],     ['title',       'originaltitle'], +               ['releasedate',  'releasedate'], ['tagline',     'tagline'], +               ['description',  'overview'],    ['homepage',    'homepage'], +               ['userrating',   'userrating'],  ['popularity',  'popularity']] + +    count = 0 +    for res in results: +        if res is None: +            continue + +        m = VideoMetadata() +        for i,j in mapping: +            if getattr(res, j): +                setattr(m, i, getattr(res, j)) +        m.inetref = str(res.id) + +        if res.title: +            m.title = res.title + +        #TODO: +        # should releasedate and year be pulled from the country-specific data +        # or should it be left to the default information to cut down on +        # traffic from searches +        if res.releasedate: +            m.year = res.releasedate.year +        if res.backdrop: +            b = res.backdrop +            m.images.append({'type':'fanart', 'url':b.geturl(), +                             'thumb':b.geturl(b.sizes()[0])}) +        if res.poster: +            p = res.poster +            m.images.append({'type':'coverart', 'url':p.geturl(), +                             'thumb':p.geturl(p.sizes()[0])}) +        tree.append(m.toXML()) +        count += 1 +        if count >= 60: +            # page limiter, dont want to overload the server +            break + +    sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True, +                                    xml_declaration=True)) +    sys.exit(0) + +def buildCollection(inetref, opts): +    from MythTV.tmdb3 import Collection +    from MythTV import VideoMetadata +    from lxml import etree +    collection = Collection(inetref) +    tree = etree.XML(u'<metadata></metadata>') +    m = VideoMetadata() +    m.collectionref = str(collection.id) +    m.title = collection.name +    if collection.backdrop: +        b = collection.backdrop +        m.images.append({'type':'fanart', 'url':b.geturl(), +                  'thumb':b.geturl(b.sizes()[0])}) +    if collection.poster: +        p = collection.poster +        m.images.append({'type':'coverart', 'url':p.geturl(), +                  'thumb':p.geturl(p.sizes()[0])}) +    tree.append(m.toXML()) +    sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True, +                                    xml_declaration=True)) +    sys.exit() + +def buildVersion(): +    from lxml import etree +    version = etree.XML(u'<grabber></grabber>') +    etree.SubElement(version, "name").text = __title__ +    etree.SubElement(version, "author").text = __author__ +    etree.SubElement(version, "thumbnail").text = 'tmdb.png' +    etree.SubElement(version, "command").text = 'tmdb3.py' +    etree.SubElement(version, "type").text = 'movie' +    etree.SubElement(version, "description").text = \ +                                'Search and metadata downloads for themoviedb.org' +    etree.SubElement(version, "version").text = __version__ +    sys.stdout.write(etree.tostring(version, encoding='UTF-8', pretty_print=True, +                                    xml_declaration=True)) +    sys.exit(0) + +def performSelfTest(): +    err = 0 +    try: +        import MythTV +    except: +        err = 1 +        print ("Failed to import MythTV bindings. Check your `configure` output " +               "to make sure installation was not disabled due to external " +               "dependencies") +    try: +        import MythTV.tmdb3 +    except: +        err = 1 +        print ("Failed to import PyTMDB3 library. This should have been included " +               "with the python MythTV bindings.") +    try: +        import lxml +    except: +        err = 1 +        print "Failed to import python lxml library." + +    if not err: +        print "Everything appears in order." +    sys.exit(err) + +def main(): +    parser = OptionParser() + +    parser.add_option('-v', "--version", action="store_true", default=False, +                      dest="version", help="Display version and author") +    parser.add_option('-t', "--test", action="store_true", default=False, +                      dest="test", help="Perform self-test for dependencies.") +    parser.add_option('-M', "--movielist", action="store_true", default=False, +                      dest="movielist", help="Get Movies matching search.") +    parser.add_option('-D', "--moviedata", action="store_true", default=False, +                      dest="moviedata", help="Get Movie data.") +    parser.add_option('-C', "--collection", action="store_true", default=False, +                      dest="collectiondata", help="Get Collection data.") +    parser.add_option('-l', "--language", metavar="LANGUAGE", default=u'en', +                      dest="language", help="Specify language for filtering.") +    parser.add_option('-a', "--area", metavar="COUNTRY", default=u'US', +                      dest="country", help="Specify country for custom data.") +    parser.add_option('--debug', action="store_true", default=False, +                      dest="debug", help=("Disable caching and enable raw " +                                          "data output.")) + +    opts, args = parser.parse_args() + +    if opts.version: +        buildVersion() + +    if opts.test: +        performSelfTest() + +    from MythTV.tmdb3 import set_key, set_cache, set_locale +    set_key('c27cb71cff5bd76e1a7a009380562c62') + +    if opts.debug: +        import MythTV.tmdb3 +        MythTV.tmdb3.request.DEBUG = True +        set_cache(engine='null') +    else: +        set_cache(engine='file', filename='~/.mythtv/pytmdb3.cache') + +    if opts.language: +        set_locale(language=opts.language, fallthrough=True) +    if opts.country: +        set_locale(country=opts.country, fallthrough=True) + +    if (len(args) != 1) or (args[0] == ''): +        sys.stdout.write('ERROR: tmdb3.py requires exactly one non-empty argument') +        sys.exit(1) + +    if opts.movielist: +        buildList(args[0], opts) + +    if opts.moviedata: +        buildSingle(args[0], opts) + +    if opts.collectiondata: +        buildCollection(args[0], opts) + +if __name__ == '__main__': +    main() diff --git a/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py b/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py new file mode 100755 index 0000000..35f1b29 --- /dev/null +++ b/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python2 + +# This script will update the myth db to use tmdb3.py. + +from MythTV import MythDB +mythdb = MythDB() + +mythdb.settings.NULL.MovieGrabber = u'metadata/Movie/tmdb3.py' | 
