Guest User

Watched marking for The Trailers

a guest
Apr 30th, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 12.56 KB | None | 0 0
  1. diff -up ./addon.py.orig ./addon.py
  2. --- ./addon.py.orig 2012-04-29 20:17:43.972110762 +0200
  3. +++ ./addon.py  2012-04-29 20:32:51.802272625 +0200
  4. @@ -26,6 +26,9 @@ if ( __name__ == "__main__" ):
  5.      elif ( sys.argv[ 2 ].startswith( "?category=" ) ):
  6.          import resources.lib.trailers as plugin
  7.          plugin.Main()
  8. +    elif ( sys.argv[ 2 ].startswith( "?play=" ) ):
  9. +        import resources.lib.trailers as plugin
  10. +        plugin.Main()
  11.      elif ( sys.argv[ 2 ].startswith( "?showtimes=" ) ):
  12.          import resources.lib.showtimes as showtimes
  13.          s = showtimes.GUI( "plugin-AMTII-showtimes.xml", xbmc.translatePath(__addonpath__), "default" )
  14. diff -up ./resources/lib/trailers.py.orig ./resources/lib/trailers.py
  15. --- ./resources/lib/trailers.py.orig    2012-04-29 19:07:29.992998445 +0200
  16. +++ ./resources/lib/trailers.py 2012-04-29 21:57:45.533470811 +0200
  17. @@ -8,6 +8,7 @@ import xbmcaddon
  18.  import time
  19.  import re
  20.  import urllib
  21. +import urlparse
  22.  import datetime
  23.  import xbmcvfs
  24.  
  25. @@ -34,9 +35,10 @@ urllib._urlopener = _urlopener()
  26.  
  27.  class _Parser:
  28.      Addon = xbmcaddon.Addon()
  29. -    def __init__( self, settings, MediaWindow ):
  30. +    def __init__( self, settings, played, MediaWindow ):
  31.          self.success = True
  32.          self.settings = settings
  33. +        self.played = played
  34.          self.MediaWindow = MediaWindow
  35.          # get our regions format
  36.          self.date_format = xbmc.getRegion( "datelong" ).replace( "DDDD,", "" ).replace( "MMMM", "%B" ).replace( "D", "%d" ).replace( "YYYY", "%Y" ).strip()
  37. @@ -215,45 +217,67 @@ class _Parser:
  38.          try:
  39.              # get our media item
  40.              dirItem = DirectoryItem()
  41. +            # set up the item information
  42. +            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 ], ) }
  43. +            # set the thumbnail
  44. +            info[ "thumb" ] = video[ "poster" ]
  45.              # set the default icon
  46. -            icon = "DefaultVideo.png"
  47. +            info[ "icon" ] = "DefaultVideo.png"
  48.              # set an overlay if one is practical
  49. -            overlay = ( xbmcgui.ICON_OVERLAY_NONE, xbmcgui.ICON_OVERLAY_HD, )[ "720p." in video[ "trailer" ] or "1080p." in video[ "trailer" ] ]
  50. -            # only need to add label and thumbnail, setInfo() and addSortMethod() takes care of label2
  51. -            dirItem.listitem = xbmcgui.ListItem( video[ "title" ], iconImage=icon, thumbnailImage=video[ "poster" ] )
  52. +            if info[ "Title" ] in self.played:
  53. +                info[ "Overlay" ] = xbmcgui.ICON_OVERLAY_WATCHED
  54. +                info[ "PlayCount" ] = 1
  55. +            else:
  56. +                info[ "Overlay" ] = xbmcgui.ICON_OVERLAY_UNWATCHED
  57. +                info[ "PlayCount" ] = 0
  58.              # release date and year
  59.              try:
  60.                  # format the date
  61. -                release_date = datetime.date( int( video[ "releasedate" ].split( "-" )[ 0 ] ), int( video[ "releasedate" ].split( "-" )[ 1 ] ), int( video[ "releasedate" ].split( "-" )[ 2 ] ) ).strftime( self.date_format )
  62. +                info[ "releasedate" ] = datetime.date( int( video[ "releasedate" ].split( "-" )[ 0 ] ), int( video[ "releasedate" ].split( "-" )[ 1 ] ), int( video[ "releasedate" ].split( "-" )[ 2 ] ) ).strftime( self.date_format )
  63.                  # we need just year also
  64. -                year = int( video[ "releasedate" ].split( "-" )[ 0 ] )
  65. +                info[ "Year" ] = int( video[ "releasedate" ].split( "-" )[ 0 ] )
  66.              except:
  67. -                release_date = ""
  68. -                year = 0
  69. +                info[ "releasedate" ] = ""
  70. +                info[ "Year" ] = 0
  71. +            # only need to add label and thumbnail, setInfo() and addSortMethod() takes care of label2
  72. +            dirItem.listitem = xbmcgui.ListItem( info[ "Title" ], iconImage=info[ "icon" ], thumbnailImage=info[ "thumb" ] )
  73.              # set the key information
  74.              # "VideoCodec": "ac3", "AudioCodec": "h264", "VideoResolution": "1080",
  75. -            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 ], ) } )
  76. -            print video[ "studio" ]
  77. -            print video[ "resolution" ]
  78. +            dirItem.listitem.setInfo( "video", info )
  79.              # set release date property
  80. -            dirItem.listitem.setProperty( "releasedate", release_date )
  81. +            dirItem.listitem.setProperty( "releasedate", info[ "releasedate" ] )
  82. +            # needed to let us do setResolvedUrl later
  83. +            dirItem.listitem.setProperty( "IsPlayable", "true" )
  84.              # get filepath and tmp_filepath
  85.              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" ] )
  86.              # set couch potato menu item
  87.              if ( self.settings[ "cp_enable" ] ):
  88. -                dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30267 ), "XBMC.RunPlugin(%s?couchpotato=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( video[ "title" ] ) ), ) )
  89. +                dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30267 ), "XBMC.RunPlugin(%s?couchpotato=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( info[ "Title" ] ) ), ) )
  90.              # set theater showtimes menu item
  91. -            # dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30900 ), "XBMC.RunPlugin(%s?showtimes=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( video[ "title" ] ) ), ) )
  92. +            # dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30900 ), "XBMC.RunPlugin(%s?showtimes=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( repr( info[ "Title" ] ) ), ) )
  93.              # check if trailer already exists if user specified
  94.              if ( self.settings[ "play_existing" ] and xbmcvfs.exists( filepath.encode( "utf-8" ) ) ):
  95.                  dirItem.url = filepath
  96. +                info[ "path" ] = dirItem.url
  97.                  # just add play trailer if trailer exists and user preference to always play existing
  98. -                dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
  99. +                #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
  100. +                #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.RunPlugin(%s?play&%s)" % ( sys.argv[ 0 ], urllib.urlencode( info ) ) )
  101.              elif ( self.settings[ "play_mode" ] == 0 ):
  102. -                dirItem.url = video[ "trailer" ]
  103. +                info[ "path" ] = video[ "trailer" ]
  104. +
  105. +                params = {}
  106. +                for key in info.keys():
  107. +                    if type( info[ key ] ) == unicode:
  108. +                        params[ key ] = info[ key ].encode( "utf-8" )
  109. +                    else:
  110. +                        params[ key ] = info[ key ]
  111. +
  112. +                dirItem.url = "%s?play=1&%s)" % ( sys.argv[ 0 ], urllib.urlencode( params ) )
  113. +
  114.                  # we want both play and download if user preference is to stream
  115.                  dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30910 ), "XBMC.RunPlugin(%s?download=%s)" % ( sys.argv[ 0 ], urllib.quote_plus( video[ "trailer" ].split( "?|" )[ 0 ] ), ) )
  116. -                dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
  117. +                #dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.PlayMedia(%s,noresume)" % ( dirItem.url, ) )
  118. +                dirItem.addContextMenuItem( self.Addon.getLocalizedString( 30920 ), "XBMC.RunPlugin(%s)" % ( dirItem.url, ) )
  119.              else:
  120.                  dirItem.url = "%s?download=%s" % ( sys.argv[ 0 ], urllib.quote_plus( video[ "trailer" ].split( "?|" )[ 0 ] ) )
  121.                  # only add download if user prefernce is not stream
  122. @@ -287,6 +311,9 @@ class Main:
  123.                                   xbmcplugin.SORT_METHOD_MPAA_RATING, xbmcplugin.SORT_METHOD_STUDIO, )
  124.          # initialize buttons, we only need to set these once
  125.          buttons = None
  126. +        if ( params.has_key( "play" ) ):
  127. +            self.play( params )
  128. +            return
  129.          # fetch items
  130.          if ( params[ "category" ] is None ):
  131.              # skin buttons
  132. @@ -307,16 +334,33 @@ class Main:
  133.          # fetch videos
  134.          self.MediaWindow.end( self.fetch_trailers( params[ "category" ] ) )
  135.  
  136. +    def play( self, params ):
  137. +        info = {}
  138. +        for key in params.keys():
  139. +            try:
  140. +                info[ key ] = int( params[ key ] )
  141. +            except ValueError:
  142. +                info[ key ] = params[ key ].decode( "utf-8" )
  143. +
  144. +        listitem = xbmcgui.ListItem( info[ "Title" ], iconImage=info[ "icon" ], thumbnailImage=info[ "thumb" ], path=info[ "path" ] )
  145. +        listitem.setInfo( "video", info )
  146. +        listitem.setProperty( "releasedate", info[ "releasedate" ] )
  147. +
  148. +        xbmcplugin.setResolvedUrl( int( sys.argv[ 1 ] ), True, listitem )
  149. +
  150. +        self._set_played( info[ "Title" ] )
  151. +
  152.      def _parse_argv( self ):
  153. -        try:
  154. -            # parse sys.argv for params and return result
  155. -            params = dict( urllib.unquote_plus( arg ).split( "=" ) for arg in sys.argv[ 2 ][ 1 : ].split( "&" ) )
  156. -            # we need to do this as quote_plus and unicode do not work well together
  157. +        if len( sys.argv[ 2 ] ) <= 1:
  158. +            return { "category": None }
  159. +
  160. +        # parse sys.argv for params and return result
  161. +        params = urlparse.parse_qs( sys.argv[ 2 ][ 1 : ] )
  162. +        for key in params.keys():
  163. +            params[ key ] = params[ key ][ 0 ]
  164. +        # we need to do this as quote_plus and unicode do not work well together
  165. +        if params.has_key( "category" ):
  166.              params[ "category" ] = eval( params[ "category" ] )
  167. -        except:
  168. -            # no params passed
  169. -            params = { "category": None }
  170. -        # return params
  171.          return params
  172.  
  173.      def _get_settings( self ):
  174. @@ -339,6 +383,34 @@ class Main:
  175.          self.settings[ "fanart_image" ]     = self.Addon.getSetting( "fanart_image" )
  176.          self.settings[ "cp_enable" ]        = ( self.Addon.getSetting( "cp_enable" ) == "true" )
  177.  
  178. +    def _get_played( self ):
  179. +   try:
  180. +            f = open( os.path.join( self.BASE_CURRENT_SOURCE_PATH, "played"), "r" )
  181. +            data = f.read()
  182. +            f.close()
  183. +
  184. +            return data.splitlines()
  185. +        except IOError:
  186. +            return []
  187. +
  188. +    def _set_played( self, title ):
  189. +        played = self._get_played()
  190. +
  191. +   if type(title) != str:
  192. +       title = str(title)
  193. +
  194. +        if title in played:
  195. +            return
  196. +
  197. +   played.append( title )
  198. +
  199. +   try:
  200. +            f = open( os.path.join( self.BASE_CURRENT_SOURCE_PATH, "played" ), "w" )
  201. +            f.write( "\n".join( played ) )
  202. +            f.close()
  203. +        except IOError, e:
  204. +            log( str( e ), xbmc.LOGERROR )
  205. +
  206.      def fetch_trailers( self, category=None ):
  207.          # spam log file
  208.          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 )
  209. @@ -368,7 +440,6 @@ class Main:
  210.                  # get the source files date if it exists
  211.                  try:
  212.                      date = os.path.getmtime( base_path )
  213. -                    print date
  214.                  except:
  215.                      date = 0
  216.                  # we only refresh if it's been more than a day, 24hr * 60min * 60sec
  217. @@ -416,7 +487,7 @@ class Main:
  218.  
  219.      def _parse_xml_source( self, xmlSource, category ):
  220.          # Parse xmlSource for videos
  221. -        parser = _Parser( self.settings, self.MediaWindow )
  222. +        parser = _Parser( self.settings, self._get_played(), self.MediaWindow )
  223.          parser.parse_source( xmlSource, category )
  224.          # return result
  225.          return parser.success
Add Comment
Please, Sign In to add comment