Exemple #1
0
class GriffithExtension(Base):
    name = 'MoviePosterDB'
    description = _('Fetch posters from MoviePosterDB.com')
    author = 'Michael Jahn'
    email = '*****@*****.**'
    version = 1
    api = 1
    enabled = True

    toolbar_icon = 'ge_movieposterdb.png'

    baseurltitle = 'http://www.movieposterdb.com/embed.inc.php?movie_title=%s'
    baseurltitleyear = 'http://www.movieposterdb.com/embed.inc.php?movie_title=%s[%s]'

    progress = None

    def toolbar_icon_clicked(self, widget, movie):
        log.info('fetching poster from MoviePosterDB.com...')
        self.movie = movie

        # correction of the movie name for the search
        o_title = None
        title = None
        if movie.o_title:
            if movie.o_title.endswith(', The'):
                o_title = u"The %s" % movie.o_title[:-5]
            else:
                o_title = movie.o_title
        if movie.title:
            if movie.title.endswith(', The'):
                title = u"The %s" % movie.title[:-5]
            else:
                title = movie.title

        # try to get an url to the large version of a poster for the movie
        # (requests are in the order:
        #  original title + year, original title only, title + year, title only)
        try:
            largeurl = None
            data = False
            if o_title:
                if movie.year:
                    url = self.baseurltitleyear % (o_title, movie.year)
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
                if not data or not largeurl:
                    url = self.baseurltitle % o_title
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
            if not data or not largeurl and title and title != o_title:
                if movie.year:
                    url = self.baseurltitleyear % (title, movie.year)
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
                if not data or not largeurl:
                    url = self.baseurltitle % title
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
        except:
            log.exception('')
            gutils.warning(_('No posters found for this movie.'))
            return

        if not data or not largeurl:
            gutils.warning(_('No posters found for this movie.'))
            return

        # got the url for a large poster, fetch the data, show preview and update the
        # movie entry if the user want it
        data = self._get(largeurl, self.widgets['window'], decode=False)
        if not data:
            gutils.warning(_('No posters found for this movie.'))
            return

        if self._show_preview(data):
            update_image_from_memory(self.app, movie.number, data)

    def _show_preview(self, data):
        loader = gtk.gdk.PixbufLoader()
        loader.write(data, len(data))
        loader.close()
        # show before set_from_pixbuf because it doesn't resize otherwise
        self.widgets['poster_window'].show()
        handler = self.widgets['big_poster'].set_from_pixbuf(loader.get_pixbuf())
        result = gutils.question(_("Do you want to use this poster instead?"), self.widgets['window'])
        self.widgets['poster_window'].hide()
        return result

    def _get(self, url, parent_window, decode=True):
        # initialize the progress dialog once for the following search process
        if not self.progress:
            self.progress = Progress(parent_window)

        data = None
        url = url.encode('utf-8', 'replace')
        log.debug('Using url <%s>', url)
        self.progress.set_data(parent_window, _('Searching'), _('Wait a moment'), True)
        try:
            retriever = Retriever(url, parent_window, self.progress)
            retriever.start()
            while retriever.isAlive():
                self.progress.pulse()
                if self.progress.status:
                    retriever.join()
                while gtk.events_pending():
                    gtk.main_iteration()
            try:
                if retriever.html:
                    ifile = file(retriever.html[0], 'rb')
                    try:
                        data = ifile.read()
                    finally:
                        ifile.close()
                    # check for gzip compressed pages before decoding to unicode
                    if len(data) > 2 and data[0:2] == '\037\213':
                        data = gutils.decompress(data)
                    if decode:
                        data = data.decode('utf-8', 'replace')
                    os.remove(retriever.html[0])
            except IOError:
                log.exception('')
        finally:
            self.progress.hide()
        urlcleanup()
        return data
class GriffithExtension(Base):
    name = 'MoviePosterDB'
    description = _('Fetch posters from MoviePosterDB.com')
    author = 'Michael Jahn'
    email = '*****@*****.**'
    version = 1
    api = 1
    enabled = True

    toolbar_icon = 'ge_movieposterdb.png'

    baseurltitle = 'http://www.movieposterdb.com/embed.inc.php?movie_title=%s'
    baseurltitleyear = 'http://www.movieposterdb.com/embed.inc.php?movie_title=%s[%s]'

    progress = None

    def toolbar_icon_clicked(self, widget, movie):
        log.info('fetching poster from MoviePosterDB.com...')
        self.movie = movie

        # correction of the movie name for the search
        o_title = None
        title = None
        if movie.o_title:
            if movie.o_title.endswith(', The'):
                o_title = u"The %s" % movie.o_title[:-5]
            else:
                o_title = movie.o_title
        if movie.title:
            if movie.title.endswith(', The'):
                title = u"The %s" % movie.title[:-5]
            else:
                title = movie.title

        # try to get an url to the large version of a poster for the movie
        # (requests are in the order:
        #  original title + year, original title only, title + year, title only)
        try:
            largeurl = None
            data = False
            if o_title:
                if movie.year:
                    url = self.baseurltitleyear % (o_title, movie.year)
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
                if not data or not largeurl:
                    url = self.baseurltitle % o_title
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
            if not data or not largeurl and title and title != o_title:
                if movie.year:
                    url = self.baseurltitleyear % (title, movie.year)
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
                if not data or not largeurl:
                    url = self.baseurltitle % title
                    data = self._get(url, self.widgets['window'])
                    if data and data.find('movie/0000000') < 0:
                        largeurl = gutils.trim(data, 'src=\\"', '\\"').replace('/t_', '/l_')
        except:
            log.exception('')
            gutils.warning(_('No posters found for this movie.'))
            return

        if not data or not largeurl:
            gutils.warning(_('No posters found for this movie.'))
            return

        # got the url for a large poster, fetch the data, show preview and update the
        # movie entry if the user want it
        data = self._get(largeurl, self.widgets['window'], decode=False)
        if not data:
            gutils.warning(_('No posters found for this movie.'))
            return

        if self._show_preview(data):
            update_image_from_memory(self.app, movie.number, data)

    def _show_preview(self, data):
        loader = gtk.gdk.PixbufLoader()
        loader.write(data, len(data))
        loader.close()
        # show before set_from_pixbuf because it doesn't resize otherwise
        self.widgets['poster_window'].show()
        handler = self.widgets['big_poster'].set_from_pixbuf(loader.get_pixbuf())
        result = gutils.question(_("Do you want to use this poster instead?"), self.widgets['window'])
        self.widgets['poster_window'].hide()
        return result

    def _get(self, url, parent_window, decode=True):
        # initialize the progress dialog once for the following search process
        if not self.progress:
            self.progress = Progress(parent_window)

        data = None
        url = url.encode('utf-8', 'replace')
        log.debug('Using url <%s>', url)
        self.progress.set_data(parent_window, _('Searching'), _('Wait a moment'), True)
        try:
            retriever = Retriever(url, parent_window, self.progress)
            retriever.start()
            while retriever.isAlive():
                self.progress.pulse()
                if self.progress.status:
                    retriever.join()
                while gtk.events_pending():
                    gtk.main_iteration()
            try:
                if retriever.html:
                    ifile = file(retriever.html[0], 'rb')
                    try:
                        data = ifile.read()
                    finally:
                        ifile.close()
                    # check for gzip compressed pages before decoding to unicode
                    if len(data) > 2 and data[0:2] == '\037\213':
                        data = gutils.decompress(data)
                    if decode:
                        data = data.decode('utf-8', 'replace')
                    os.remove(retriever.html[0])
            except IOError:
                log.exception('')
        finally:
            self.progress.hide()
        urlcleanup()
        return data