Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -up ./addon.py.orig ./addon.py
- --- ./addon.py.orig 2012-04-29 20:17:43.972110762 +0200
- +++ ./addon.py 2012-04-29 20:32:51.802272625 +0200
- @@ -26,6 +26,9 @@ if ( __name__ == "__main__" ):
- elif ( sys.argv[ 2 ].startswith( "?category=" ) ):
- import resources.lib.trailers as plugin
- plugin.Main()
- + elif ( sys.argv[ 2 ].startswith( "?play=" ) ):
- + import resources.lib.trailers as plugin
- + plugin.Main()
- elif ( sys.argv[ 2 ].startswith( "?showtimes=" ) ):
- import resources.lib.showtimes as showtimes
- s = showtimes.GUI( "plugin-AMTII-showtimes.xml", xbmc.translatePath(__addonpath__), "default" )
- diff -up ./resources/lib/trailers.py.orig ./resources/lib/trailers.py
- --- ./resources/lib/trailers.py.orig 2012-04-29 19:07:29.992998445 +0200
- +++ ./resources/lib/trailers.py 2012-04-29 21:57:45.533470811 +0200
- @@ -8,6 +8,7 @@ import xbmcaddon
- import time
- import re
- import urllib
- +import urlparse
- import datetime
- import xbmcvfs
- @@ -34,9 +35,10 @@ urllib._urlopener = _urlopener()
- class _Parser:
- Addon = xbmcaddon.Addon()
- - def __init__( self, settings, MediaWindow ):
- + def __init__( self, settings, played, MediaWindow ):
- self.success = True
- self.settings = settings
- + self.played = played
- self.MediaWindow = MediaWindow
- # get our regions format
- self.date_format = xbmc.getRegion( "datelong" ).replace( "DDDD,", "" ).replace( "MMMM", "%B" ).replace( "D", "%d" ).replace( "YYYY", "%Y" ).strip()
- @@ -215,45 +217,67 @@ class _Parser:
- try:
- # get our media item
- dirItem = DirectoryItem()
- + # set up the item information
- + info = { "Title": video[ "title" ], "Size": video[ "size" ], "Plot": video[ "plot" ], "PlotOutline": video[ "plot" ], "MPAA": video[ "mpaa" ], "Genre": video[ "genre" ], "Studio": video[ "studio" ], "Director": video[ "director" ], "Duration": video[ "duration" ], "Cast": video[ "cast" ], "Date": "%s-%s-%s" % ( video[ "postdate" ][ 8 : ], video[ "postdate" ][ 5 : 7 ], video[ "postdate" ][ : 4 ], ) }
- + # set the thumbnail
- + info[ "thumb" ] = video[ "poster" ]
- # set the default icon
- - icon = "DefaultVideo.png"
- + info[ "icon" ] = "DefaultVideo.png"
- # set an overlay if one is practical
- - overlay = ( xbmcgui.ICON_OVERLAY_NONE, xbmcgui.ICON_OVERLAY_HD, )[ "720p." in video[ "trailer" ] or "1080p." in video[ "trailer" ] ]
- - # only need to add label and thumbnail, setInfo() and addSortMethod() takes care of label2
- - dirItem.listitem = xbmcgui.ListItem( video[ "title" ], iconImage=icon, thumbnailImage=video[ "poster" ] )
- + if info[ "Title" ] in self.played:
- + info[ "Overlay" ] = xbmcgui.ICON_OVERLAY_WATCHED
- + info[ "PlayCount" ] = 1
- + else:
- + info[ "Overlay" ] = xbmcgui.ICON_OVERLAY_UNWATCHED
- + info[ "PlayCount" ] = 0
- # release date and year
- try:
- # format the date
- - release_date = datetime.date( int( video[ "releasedate" ].split( "-" )[ 0 ] ), int( video[ "releasedate" ].split( "-" )[ 1 ] ), int( video[ "releasedate" ].split( "-" )[ 2 ] ) ).strftime( self.date_format )
- + info[ "releasedate" ] = datetime.date( int( video[ "releasedate" ].split( "-" )[ 0 ] ), int( video[ "releasedate" ].split( "-" )[ 1 ] ), int( video[ "releasedate" ].split( "-" )[ 2 ] ) ).strftime( self.date_format )
- # we need just year also
- - year = int( video[ "releasedate" ].split( "-" )[ 0 ] )
- + info[ "Year" ] = int( video[ "releasedate" ].split( "-" )[ 0 ] )
- except:
- - release_date = ""
- - year = 0
- + info[ "releasedate" ] = ""
- + info[ "Year" ] = 0
- + # only need to add label and thumbnail, setInfo() and addSortMethod() takes care of label2
- + dirItem.listitem = xbmcgui.ListItem( info[ "Title" ], iconImage=info[ "icon" ], thumbnailImage=info[ "thumb" ] )
- # set the key information
- # "VideoCodec": "ac3", "AudioCodec": "h264", "VideoResolution": "1080",
- - dirItem.listitem.setInfo( "video", { "Title": video[ "title" ], "Overlay": overlay, "Size": video[ "size" ], "Year": year, "Plot": video[ "plot" ], "PlotOutline": video[ "plot" ], "MPAA": video[ "mpaa" ], "Genre": video[ "genre" ], "Studio": video[ "studio" ], "Director": video[ "director" ], "Duration": video[ "duration" ], "Cast": video[ "cast" ], "Date": "%s-%s-%s" % ( video[ "postdate" ][ 8 : ], video[ "postdate" ][ 5 : 7 ], video[ "postdate" ][ : 4 ], ) } )
- - print video[ "studio" ]
- - print video[ "resolution" ]
- + dirItem.listitem.setInfo( "video", info )
- # set release date property
- - dirItem.listitem.setProperty( "releasedate", release_date )
- + dirItem.listitem.setProperty( "releasedate", info[ "releasedate" ] )
- + # needed to let us do setResolvedUrl later
- + dirItem.listitem.setProperty( "IsPlayable", "true" )
- # get filepath and tmp_filepath
- tmp_path, filepath = get_legal_filepath( video[ "title" ], video[ "trailer" ].split( "?|" )[ 0 ], 2, self.settings[ "download_path" ], self.settings[ "use_title" ], self.settings[ "use_trailer" ] )
- # set couch potato menu item
- if ( self.settings[ "cp_enable" ] ):
- - dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30267 ), "XBMC.RunPlugin(%s?couchpotato=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( video[ "title" ] ) ), ) )
- + dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30267 ), "XBMC.RunPlugin(%s?couchpotato=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( info[ "Title" ] ) ), ) )
- # set theater showtimes menu item
- - # dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30900 ), "XBMC.RunPlugin(%s?showtimes=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( video[ "title" ] ) ), ) )
- + # dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30900 ), "XBMC.RunPlugin(%s?showtimes=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( info[ "Title" ] ) ), ) )
- # check if trailer already exists if user specified
- if ( self.settings[ "play_existing" ] and xbmcvfs.exists( filepath.encode( "utf-8" ) ) ):
- dirItem.url = filepath
- + info[ "path" ] = dirItem.url
- # just add play trailer if trailer exists and user preference to always play existing
- - dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
- + #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
- + #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.RunPlugin(%s?play&%s)" % ( sys.argv[ 0 ], urllib.urlencode( info ) ) )
- elif ( self.settings[ "play_mode" ] == 0 ):
- - dirItem.url = video[ "trailer" ]
- + info[ "path" ] = video[ "trailer" ]
- +
- + params = {}
- + for key in info.keys():
- + if type( info[ key ] ) == unicode:
- + params[ key ] = info[ key ].encode( "utf-8" )
- + else:
- + params[ key ] = info[ key ]
- +
- + dirItem.url = "%s?play=1&%s)" % ( sys.argv[ 0 ], urllib.urlencode( params ) )
- +
- # we want both play and download if user preference is to stream
- dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30910 ), "XBMC.RunPlugin(%s?download=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( video[ "trailer" ].split( "?|" )[ 0 ] ), ) )
- - dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
- + #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
- + dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.RunPlugin(%s)" % ( dirItem.url, ) )
- else:
- dirItem.url = "%s?download=%s" % ( sys.argv[ 0 ], urllib.quote_plus( video[ "trailer" ].split( "?|" )[ 0 ] ) )
- # only add download if user prefernce is not stream
- @@ -287,6 +311,9 @@ class Main:
- xbmcplugin.SORT_METHOD_MPAA_RATING, xbmcplugin.SORT_METHOD_STUDIO, )
- # initialize buttons, we only need to set these once
- buttons = None
- + if ( params.has_key( "play" ) ):
- + self.play( params )
- + return
- # fetch items
- if ( params[ "category" ] is None ):
- # skin buttons
- @@ -307,16 +334,33 @@ class Main:
- # fetch videos
- self.MediaWindow.end( self.fetch_trailers( params[ "category" ] ) )
- + def play( self, params ):
- + info = {}
- + for key in params.keys():
- + try:
- + info[ key ] = int( params[ key ] )
- + except ValueError:
- + info[ key ] = params[ key ].decode( "utf-8" )
- +
- + listitem = xbmcgui.ListItem( info[ "Title" ], iconImage=info[ "icon" ], thumbnailImage=info[ "thumb" ], path=info[ "path" ] )
- + listitem.setInfo( "video", info )
- + listitem.setProperty( "releasedate", info[ "releasedate" ] )
- +
- + xbmcplugin.setResolvedUrl( int( sys.argv[ 1 ] ), True, listitem )
- +
- + self._set_played( info[ "Title" ] )
- +
- def _parse_argv( self ):
- - try:
- - # parse sys.argv for params and return result
- - params = dict( urllib.unquote_plus( arg ).split( "=" ) for arg in sys.argv[ 2 ][ 1 : ].split( "&" ) )
- - # we need to do this as quote_plus and unicode do not work well together
- + if len( sys.argv[ 2 ] ) <= 1:
- + return { "category": None }
- +
- + # parse sys.argv for params and return result
- + params = urlparse.parse_qs( sys.argv[ 2 ][ 1 : ] )
- + for key in params.keys():
- + params[ key ] = params[ key ][ 0 ]
- + # we need to do this as quote_plus and unicode do not work well together
- + if params.has_key( "category" ):
- params[ "category" ] = eval( params[ "category" ] )
- - except:
- - # no params passed
- - params = { "category": None }
- - # return params
- return params
- def _get_settings( self ):
- @@ -339,6 +383,34 @@ class Main:
- self.settings[ "fanart_image" ] = self.Addon.getSetting( "fanart_image" )
- self.settings[ "cp_enable" ] = ( self.Addon.getSetting( "cp_enable" ) == "true" )
- + def _get_played( self ):
- + try:
- + f = open( os.path.join( self.BASE_CURRENT_SOURCE_PATH, "played"), "r" )
- + data = f.read()
- + f.close()
- +
- + return data.splitlines()
- + except IOError:
- + return []
- +
- + def _set_played( self, title ):
- + played = self._get_played()
- +
- + if type(title) != str:
- + title = str(title)
- +
- + if title in played:
- + return
- +
- + played.append( title )
- +
- + try:
- + f = open( os.path.join( self.BASE_CURRENT_SOURCE_PATH, "played" ), "w" )
- + f.write( "\n".join( played ) )
- + f.close()
- + except IOError, e:
- + log( str( e ), xbmc.LOGERROR )
- +
- def fetch_trailers( self, category=None ):
- # spam log file
- log( ">>> fetch_trailers(category: %s, rating: %s, quality: %s)" % ( repr( category ), ( "G", "PG", "PG-13", "R", "NC-17", "No Limit", )[ self.settings[ "rating" ] ], self.Fanart, ), heading=True )
- @@ -368,7 +440,6 @@ class Main:
- # get the source files date if it exists
- try:
- date = os.path.getmtime( base_path )
- - print date
- except:
- date = 0
- # we only refresh if it's been more than a day, 24hr * 60min * 60sec
- @@ -416,7 +487,7 @@ class Main:
- def _parse_xml_source( self, xmlSource, category ):
- # Parse xmlSource for videos
- - parser = _Parser( self.settings, self.MediaWindow )
- + parser = _Parser( self.settings, self._get_played(), self.MediaWindow )
- parser.parse_source( xmlSource, category )
- # return result
- return parser.success
Add Comment
Please, Sign In to add comment