The branch, frodo has been updated
       via  75b9dc95d1f170801dc55f70178e9c6468e08290 (commit)
      from  4d76b9c89f5689545fcfe7e1a71e6e519cad2384 (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=75b9dc95d1f170801dc55f70178e9c6468e08290

commit 75b9dc95d1f170801dc55f70178e9c6468e08290
Author: Martijn Kaijser <[email protected]>
Date:   Wed May 21 19:09:01 2014 +0200

    [plugin.video.cinemassacre] 1.0.9

diff --git a/plugin.video.cinemassacre/addon.xml 
b/plugin.video.cinemassacre/addon.xml
index be31140..3205c9d 100644
--- a/plugin.video.cinemassacre/addon.xml
+++ b/plugin.video.cinemassacre/addon.xml
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.cinemassacre" name="cinemassacre" version="1.0.8" 
provider-name="dethfeet, Kr0nZ">
+<addon id="plugin.video.cinemassacre" name="cinemassacre" version="1.0.9" 
provider-name="dethfeet, Kr0nZ">
   <requires>
     <import addon="xbmc.python" version="2.1.0"/>
     <import addon="script.module.parsedom" version="2.5.2" />
     <import addon="plugin.video.youtube" version="4.4.6" />
-    <import addon="script.module.urlresolver" version="2.2.0" />
   </requires>
   <extension point="xbmc.python.pluginsource" library="default.py">
     <provides>video</provides>
@@ -21,4 +20,3 @@
     <email>[email protected]</email>
   </extension>
 </addon>
-
diff --git a/plugin.video.cinemassacre/changelog.txt 
b/plugin.video.cinemassacre/changelog.txt
index a0757df..66c4d36 100644
--- a/plugin.video.cinemassacre/changelog.txt
+++ b/plugin.video.cinemassacre/changelog.txt
@@ -1,3 +1,4 @@
+1.0.9 - Removed UrlResolver dependency, added Error Reporting
 1.0.7 - Major refactor for Gotham release
 1.0.6 - Fix screenwave video playback again
 1.0.5 - Fix screenwave videos to support new player page
diff --git a/plugin.video.cinemassacre/default.py 
b/plugin.video.cinemassacre/default.py
index 375135f..5f7ef70 100644
--- a/plugin.video.cinemassacre/default.py
+++ b/plugin.video.cinemassacre/default.py
@@ -1,429 +1,470 @@
 import xbmcplugin, xbmcgui, xbmcaddon, xbmc
 import urllib, urllib2, re, os
-import CommonFunctions as common
-import thisCommonFunctions as common2
-import Queue
-import threading
-import copy
-import urlresolver
-import pickle
-from cache import cache
-
-addon = xbmcaddon.Addon()
-thisPlugin = int(sys.argv[1])
-BASEURL = 'http://cinemassacre.com/'
-USERAGENT = 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 
Firefox/14.0.1'
-DEFAULT_PARAMS = {
-  'action':'main',
-  'nav':[],
-  'url':''
-}
-addonDataFolder = 
xbmc.translatePath("special://profile/addon_data/{0}".format(addon.getAddonInfo('id')))
-if not os.path.isdir(addonDataFolder):
-  os.mkdir(addonDataFolder)
-dbLocation = os.path.join(addonDataFolder,"cache.db")
-
-cacheDb = cache(dbLocation)
-
-logo = {
-'default':'logo.png',
-'/category/avgn/':'avgn.png',
-'/category/boardjames/':'boardJ.png',
-'/category/ykwb/':'ykwbs.png'
-}
-
-class cine(object):
-
-  def downloadPage(self,url,data=None):
-    xbmc.log("downloading page: %s" % url, xbmc.LOGDEBUG)
-    retries = 0
-    page = None
-    while retries < 10:
-      retries = retries + 1
-      try:
-        if data == None:
-          req = urllib2.Request(url)
-        else:
-          req = urllib2.Request(url,data)
-          req.add_header('Content-Type', 'application/x-www-form-urlencoded')
-        req.add_header('User-Agent', USERAGENT)
-        response = urllib2.urlopen(req, timeout=30)
-        page = response.read()
-        response.close()
-        return page
-      except:
-        xbmc.log("Error downloading page. Attempt %s / 10" % str(retries))
-      
-  def extractNav(self,dom):
-    navItem = re.compile('^<a href="([^\"\']*?)">([^<]*?)</a>').findall(dom)[0]
-    navTmp = common2.parseDOM(dom, "ul", attrs={"class": "sub-menu"})
-    children = []
-    if len(navTmp) > 0:
-      navTmp = common2.parseDOM(navTmp[0], "li")
-      for a in navTmp:
-        children.append(self.extractNav(a))
-    ret = {'title':navItem[1], 'url':navItem[0], 'children':children}
-    return ret
-  
-  def getNav(self):
-    mainPage = self.downloadPage(BASEURL)
-    navList = common2.parseDOM(mainPage, "div", attrs={"id": "navArea"})
-    navList = common2.parseDOM(navList[0], "ul", attrs={"id": 
"menu-main-menu"})
-    navList = common2.parseDOM(navList[0], "li")
-    extracted = []
-    for a in navList:
-      extracted.append(self.extractNav(a))
-    return extracted
-    
-  def addToDir(self, title, params, folder=True):
-    #folder=True
-    title = self.remove_html_special_chars(title)
-    image = os.path.join(addon.getAddonInfo('path'), 'resources', 'images', 
logo['default'])
-
-    if 'image' in params.keys():
-      image = params['image']
-    
-    li = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image)
-    url = sys.argv[0] + '?' + urllib.urlencode(params)
-    xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=li, 
isFolder=folder)
-      
-  def showNav(self, offset=[]):
-    
-    if len(offset) == 0:
-      self.addToDir('Recent Videos', {'action':'recent','url':'#'})
-      
-    navbar = self.getNav()
-    parent = {'url':'#'}
-    
-    for a in offset:
-      parent = navbar[a]
-      navbar = navbar[a]['children']
-      
-    tmpOffset2 = 0
-    
-    if parent['url'] != '#':
-      self.addToDir('All Videos', {'action':'display','url':parent['url']})
-    
-    for a in navbar:
-      tmpOffset = []
-      for b in offset:
-        tmpOffset.append(b)
-      tmpOffset.append(tmpOffset2)
-      actionType = 'main'
-      if len(a['children']) == 0:
-        actionType = 'display'
-      params = {'action':actionType,'nav':repr(tmpOffset),'url':a['url']}
-      for q in logo.keys():
-        if q in a['url']:
-          params['image'] = os.path.join(addon.getAddonInfo('path'), 
'resources', 'images', logo[q])
-          break
-      self.addToDir(a['title'], params)
-      tmpOffset2 = tmpOffset2 + 1
-      
-    xbmcplugin.endOfDirectory(int(sys.argv[1]))
-    
-  def getParams(self):
-    param = DEFAULT_PARAMS
-    paramstring = sys.argv[2]
-    xbmc.log("Parameter String: %s" % paramstring, xbmc.LOGDEBUG)
-    if len(paramstring) >= 2:
-      paramstring = paramstring.replace('?', '')
-      parampairs = paramstring.split('&')
-      for i in range(len(parampairs)):
-        splitpair = parampairs[i].split('=')
-        if len(splitpair) == 2:
-          param[splitpair[0]] = urllib.unquote(splitpair[1].replace('+',' '))
-          if splitpair[0] == 'nav':
-            param['nav'] = eval(param['nav'])
-            for d in range(len(param['nav'])):
-              param['nav'][d] = int(param['nav'][d])
-    
-    return param
-  
-  def videoList(self, url, nextPage=1, pageCat=None, pageTotal=None):
-    
-    postUrl = BASEURL + 'wp-admin/admin-ajax.php'
-    postData = 'action=infinite_scroll&page_no={0}&cat={1}&loop_file=loop'
-    if pageCat == None:
-      vidPage = self.downloadPage(url)
-      pageTotal = re.compile('var total = (\d+?);').findall(vidPage)[0]
-      pageCat = re.compile('var cat = (\d+?);').findall(vidPage)[0]
-    vidList = []
-    
-    
vidList.append(self.downloadPage(postUrl,postData.format(nextPage,pageCat)))
-      
-    linkList = []
-    for a in vidList:
-      episodes = common2.parseDOM(a, "div", attrs={"class": "archiveitem"})
-      for episode in episodes:
-        episode = episode.encode('ascii', 'ignore')
-        episode_link = common2.parseDOM(episode, "a", ret="href")[0]
-        episode_title = common2.parseDOM(episode, "a")[0]
-        episode_title = 
re.compile('<div>([^<]*?)</div>').findall(episode_title)[0]
+try:
+  import CommonFunctions as common
+  import thisCommonFunctions as common2
+  import Queue
+  import threading
+  import copy
+  import pickle
+  from cache import cache
+
+  addon = xbmcaddon.Addon()
+  thisPlugin = int(sys.argv[1])
+  BASEURL = 'http://cinemassacre.com/'
+  USERAGENT = 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 
Firefox/14.0.1'
+  DEFAULT_PARAMS = {
+    'action':'main',
+    'nav':[],
+    'url':''
+  }
+  addonDataFolder = 
xbmc.translatePath("special://profile/addon_data/{0}".format(addon.getAddonInfo('id')))
+  if not os.path.isdir(addonDataFolder):
+    os.mkdir(addonDataFolder)
+  dbLocation = os.path.join(addonDataFolder,"cache.db")
+
+  cacheDb = cache(dbLocation)
+
+  logo = {
+  'default':'logo.png',
+  '/category/avgn/':'avgn.png',
+  '/category/boardjames/':'boardJ.png',
+  '/category/ykwb/':'ykwbs.png'
+  }
+
+  class cine(object):
+
+    def downloadPage(self,url,data=None):
+      xbmc.log("downloading page: %s" % url, xbmc.LOGDEBUG)
+      retries = 0
+      page = None
+      while retries < 10:
+        retries = retries + 1
         try:
-            episode_img = common2.parseDOM(episode, "img", ret="src")[0]
-        except:
-            episode_img = ""
-        linkList.append({"title":episode_title, "url":episode_link, 
"thumb":episode_img})
-    
-    links = self.vidLinks(linkList)
-    
-    for link in links:
-      if 'vidUrl' in link.keys():
-        self.addToDir(link['title'], 
{'action':'playVideo','url':link['vidUrl'], 
'name':link['title'],'image':link['thumb']}, False)
-      else:
-        xbmc.log("Skipping - NO Vid Url: %s" % str(repr(link)), xbmc.LOGDEBUG)
-    
-    if int(nextPage) < int(pageTotal):
-      self.addToDir("Next Page", 
{'action':'display','url':url,'nextPage':str(nextPage+1)}, True)
-      
-    xbmcplugin.endOfDirectory(int(sys.argv[1]))
-  
-  def vidLinks(self, links):
-    maxThreads = 10
-    inQ = Queue.Queue()
-    outQ = Queue.Queue()
-    
-    for link in links:
-      
-      inQ.put(link['url'])
-      
-    threadList = []
-    cacheLock = threading.Lock()
-    for i in range(maxThreads):
-      t = threading.Thread(target=self.checkVidLink, args = 
(inQ,outQ,cacheLock))
-      t.start()
-      threadList.append(t)
-      
-    for t in threadList:
-      t.join()
-      
-    modifiedLinks = []
-    while not outQ.empty():
-      checkedLink = outQ.get(False)
-
-      for i in range(len(links)):
-        if links[i]['url'] == checkedLink['url']:
-          if len(checkedLink['vidUrl']) == 1:
-            links[i]['vidUrl'] = checkedLink['vidUrl'][0]
+          if data == None:
+            req = urllib2.Request(url)
           else:
-            new = copy.deepcopy(links[i])
-            possibles = [
-              
{'inUrl':'screenwavemedia.com/play/','prefix':'[ScreenWaveMedia]','count':0},
-              {'inUrl':'youtube.com','prefix':'[YouTube]','count':0},
-              {'inUrl':'blip.tv','prefix':'[Blip.tv]','count':0},
-              {'inUrl':'gametrailers.com','prefix':'[GameTrailers]','count':0}
-            ]
-            newLinks = []
-            for a in checkedLink['vidUrl']:
-              tmp = copy.deepcopy(new)
-              tmp['vidUrl'] = a
-              for b in possibles:
-                if b['inUrl'] in a:
-                  cancelFor = False
-                  for c in newLinks:
-                    if a == c['vidUrl']:
-                      cancelFor = True
+            req = urllib2.Request(url,data)
+            req.add_header('Content-Type', 'application/x-www-form-urlencoded')
+          req.add_header('User-Agent', USERAGENT)
+          response = urllib2.urlopen(req, timeout=30)
+          page = response.read()
+          response.close()
+          return page
+        except:
+          xbmc.log("Error downloading page. Attempt %s / 10" % str(retries))
+
+    def extractNav(self,dom):
+      navItem = re.compile('^<a 
href="([^\"\']*?)">([^<]*?)</a>').findall(dom)[0]
+      navTmp = common2.parseDOM(dom, "ul", attrs={"class": "sub-menu"})
+      children = []
+      if len(navTmp) > 0:
+        navTmp = common2.parseDOM(navTmp[0], "li")
+        for a in navTmp:
+          children.append(self.extractNav(a))
+      ret = {'title':navItem[1], 'url':navItem[0], 'children':children}
+      return ret
+
+    def getNav(self):
+      mainPage = self.downloadPage(BASEURL)
+      navList = common2.parseDOM(mainPage, "div", attrs={"id": "navArea"})
+      navList = common2.parseDOM(navList[0], "ul", attrs={"id": 
"menu-main-menu"})
+      navList = common2.parseDOM(navList[0], "li")
+      extracted = []
+      for a in navList:
+        extracted.append(self.extractNav(a))
+      return extracted
+
+    def addToDir(self, title, params, folder=True):
+      #folder=True
+      title = self.remove_html_special_chars(title)
+      image = os.path.join(addon.getAddonInfo('path'), 'resources', 'images', 
logo['default'])
+
+      if 'image' in params.keys():
+        image = params['image']
+
+      li = xbmcgui.ListItem(title, iconImage=image, thumbnailImage=image)
+      url = sys.argv[0] + '?' + urllib.urlencode(params)
+      xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, 
listitem=li, isFolder=folder)
+
+    def showNav(self, offset=[]):
+
+      if len(offset) == 0:
+        self.addToDir('Recent Videos', {'action':'recent','url':'#'})
+
+      navbar = self.getNav()
+      parent = {'url':'#'}
+
+      for a in offset:
+        parent = navbar[a]
+        navbar = navbar[a]['children']
+
+      tmpOffset2 = 0
+
+      if parent['url'] != '#':
+        self.addToDir('All Videos', {'action':'display','url':parent['url']})
+
+      for a in navbar:
+        tmpOffset = []
+        for b in offset:
+          tmpOffset.append(b)
+        tmpOffset.append(tmpOffset2)
+        actionType = 'main'
+        if len(a['children']) == 0:
+          actionType = 'display'
+        params = {'action':actionType,'nav':repr(tmpOffset),'url':a['url']}
+        for q in logo.keys():
+          if q in a['url']:
+            params['image'] = os.path.join(addon.getAddonInfo('path'), 
'resources', 'images', logo[q])
+            break
+        self.addToDir(a['title'], params)
+        tmpOffset2 = tmpOffset2 + 1
+
+      xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+    def getParams(self):
+      param = DEFAULT_PARAMS
+      paramstring = sys.argv[2]
+      xbmc.log("Parameter String: %s" % paramstring, xbmc.LOGDEBUG)
+      if len(paramstring) >= 2:
+        paramstring = paramstring.replace('?', '')
+        parampairs = paramstring.split('&')
+        for i in range(len(parampairs)):
+          splitpair = parampairs[i].split('=')
+          if len(splitpair) == 2:
+            param[splitpair[0]] = urllib.unquote(splitpair[1].replace('+',' '))
+            if splitpair[0] == 'nav':
+              param['nav'] = eval(param['nav'])
+              for d in range(len(param['nav'])):
+                param['nav'][d] = int(param['nav'][d])
+
+      return param
+
+    def videoList(self, url, nextPage=1, pageCat=None, pageTotal=None):
+
+      postUrl = BASEURL + 'wp-admin/admin-ajax.php'
+      postData = 'action=infinite_scroll&page_no={0}&cat={1}&loop_file=loop'
+      if pageCat == None:
+        vidPage = self.downloadPage(url)
+        pageTotal = re.compile('var total = (\d+?);').findall(vidPage)[0]
+        pageCat = re.compile('var cat = (\d+?);').findall(vidPage)[0]
+      vidList = []
+
+      
vidList.append(self.downloadPage(postUrl,postData.format(nextPage,pageCat)))
+
+      linkList = []
+      for a in vidList:
+        episodes = common2.parseDOM(a, "div", attrs={"class": "archiveitem"})
+        for episode in episodes:
+          episode = episode.encode('ascii', 'ignore')
+          episode_link = common2.parseDOM(episode, "a", ret="href")[0]
+          episode_title = common2.parseDOM(episode, "a")[0]
+          episode_title = 
re.compile('<div>([^<]*?)</div>').findall(episode_title)[0]
+          try:
+              episode_img = common2.parseDOM(episode, "img", ret="src")[0]
+          except:
+              episode_img = ""
+          linkList.append({"title":episode_title, "url":episode_link, 
"thumb":episode_img})
+
+      links = self.vidLinks(linkList)
+
+      for link in links:
+        if 'vidUrl' in link.keys():
+          self.addToDir(link['title'], 
{'action':'playVideo','url':link['vidUrl'], 
'name':link['title'],'image':link['thumb']}, False)
+        else:
+          xbmc.log("Skipping - NO Vid Url: %s" % str(repr(link)), 
xbmc.LOGDEBUG)
+
+      if int(nextPage) < int(pageTotal):
+        self.addToDir("Next Page", 
{'action':'display','url':url,'nextPage':str(nextPage+1)}, True)
+
+      xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+    def vidLinks(self, links):
+      maxThreads = 10
+      inQ = Queue.Queue()
+      outQ = Queue.Queue()
+
+      for link in links:
+
+        inQ.put(link['url'])
+
+      threadList = []
+      cacheLock = threading.Lock()
+      for i in range(maxThreads):
+        t = threading.Thread(target=self.checkVidLink, args = 
(inQ,outQ,cacheLock))
+        t.start()
+        threadList.append(t)
+
+      for t in threadList:
+        t.join()
+
+      modifiedLinks = []
+      while not outQ.empty():
+        checkedLink = outQ.get(False)
+
+        for i in range(len(links)):
+          if links[i]['url'] == checkedLink['url']:
+            if len(checkedLink['vidUrl']) == 1:
+              links[i]['vidUrl'] = checkedLink['vidUrl'][0]
+            else:
+              new = copy.deepcopy(links[i])
+              possibles = [
+                
{'inUrl':'screenwavemedia.com/play/','prefix':'[ScreenWaveMedia]','count':0},
+                {'inUrl':'youtube.com','prefix':'[YouTube]','count':0},
+                {'inUrl':'blip.tv','prefix':'[Blip.tv]','count':0},
+                
{'inUrl':'gametrailers.com','prefix':'[GameTrailers]','count':0}
+              ]
+              newLinks = []
+              for a in checkedLink['vidUrl']:
+                tmp = copy.deepcopy(new)
+                tmp['vidUrl'] = a
+                for b in possibles:
+                  if b['inUrl'] in a:
+                    cancelFor = False
+                    for c in newLinks:
+                      if a == c['vidUrl']:
+                        cancelFor = True
+                        break
+                    if cancelFor:
                       break
-                  if cancelFor:
+                    prefix = b['prefix']
+                    if b['count'] > 0:
+                      prefix = prefix + ' [' + str(b['count']) + ']'
+                    tmp['title'] = prefix + tmp['title']
+                    newLinks.append(tmp)
+                    b['count'] = b['count'] + 1
                     break
-                  prefix = b['prefix']
-                  if b['count'] > 0:
-                    prefix = prefix + ' [' + str(b['count']) + ']'
-                  tmp['title'] = prefix + tmp['title']
-                  newLinks.append(tmp)
-                  b['count'] = b['count'] + 1
-                  break
-            modifiedLinks.append({'index': i, 'links': newLinks})
-
-    retLinks = []
-    for a in range(len(links)):
-      addedMod = False
-      for b in modifiedLinks:
-        if b['index'] == a:
-          for c in b['links']:
-            retLinks.append(c)
-          addedMod = True
-          break
-      if not addedMod:
-        retLinks.append(links[a])
-
-    return retLinks
-      
-  def checkVidLink(self,inQ,outQ, cacheLock):
-    
-    while not inQ.empty():
-      link = inQ.get(False)
-      cacheLock.acquire()
-      cacheTest = cacheDb.get(link)
-      cacheLock.release()
-      if cacheTest:
-        vidLink = pickle.loads(cacheTest)
-      else:
-        vidPage = self.downloadPage(link)
-        vidLink = self.getVidLink(vidPage)
+              modifiedLinks.append({'index': i, 'links': newLinks})
+
+      retLinks = []
+      for a in range(len(links)):
+        addedMod = False
+        for b in modifiedLinks:
+          if b['index'] == a:
+            for c in b['links']:
+              retLinks.append(c)
+            addedMod = True
+            break
+        if not addedMod:
+          retLinks.append(links[a])
+
+      return retLinks
+
+    def checkVidLink(self,inQ,outQ, cacheLock):
+
+      while not inQ.empty():
+        link = inQ.get(False)
         cacheLock.acquire()
-        cacheDb.save(link, pickle.dumps(vidLink))
+        cacheTest = cacheDb.get(link)
         cacheLock.release()
-        
-      if len(vidLink) > 0:
-        outQ.put({'url':link,'vidUrl':vidLink})
-        
-  def getVidLink(self,vidPage):
-    link = []
-    player = common2.parseDOM(vidPage, "div", attrs={"class": "videoarea"})
-    if player:
-      playerLink = common2.parseDOM(player, "iframe", ret='src')
-      if len(playerLink) > 0:
-        if type(playerLink) == type(''):
-          link.append(playerLink)
-        elif type(playerLink) == type([]):
+        if cacheTest:
+          vidLink = pickle.loads(cacheTest)
+        else:
+          vidPage = self.downloadPage(link)
+          vidLink = self.getVidLink(vidPage)
+          cacheLock.acquire()
+          cacheDb.save(link, pickle.dumps(vidLink))
+          cacheLock.release()
+
+        if len(vidLink) > 0:
+          outQ.put({'url':link,'vidUrl':vidLink})
+
+    def getVidLink(self,vidPage):
+      link = []
+      player = common2.parseDOM(vidPage, "div", attrs={"class": "videoarea"})
+      if player:
+        playerLink = common2.parseDOM(player, "iframe", ret='src')
+        if len(playerLink) > 0:
+          if type(playerLink) == type(''):
+            link.append(playerLink)
+          elif type(playerLink) == type([]):
+            for a in playerLink:
+              link.append(a)
+          else:
+            xbmc.log("##ERROR## Found div videoarea, but no valid link")
+        else:
+          xbmc.log("##ERROR## Found div videoarea, but no iframe")
+      else:
+        player = common2.parseDOM(vidPage, "div", attrs={"class": 
"entry-content"})
+        if player:
+          if type(player) == type([]):
+            player = player[0]
+          playerLink = 
re.compile('\=[\'\"]([^\'\"]*?gametrailers.com/video/[^\'\"]*)').findall(player)
           for a in playerLink:
             link.append(a)
-        else:
-          xbmc.log("##ERROR## Found div videoarea, but no valid link")
+          playerLink = 
re.compile('\=[\'\"]([^\'\"]*?blip.tv/play/[^\'\"]*)').findall(player)
+          for a in playerLink:
+            link.append(a)
+          playerLink = 
re.compile('\=[\'\"]([^\'\"]*?youtube.com/watch[^\'\"]*)').findall(player)
+          for a in playerLink:
+            link.append(a)
+      return link
+
+    def remove_html_special_chars(self, inputStr):
+      inputStr = common.replaceHTMLCodes(inputStr)
+      inputStr=inputStr.strip()
+      return common.makeAscii(inputStr)
+
+    def playVideo(self, params):
+
+      link = params['url']
+      image = params['image']
+      name = self.remove_html_special_chars(params['name'])
+
+      providers = (
+          {"function":self.showEpisodeBlip, "inurl":"blip.tv/play/"},
+          {"function":self.showEpisodeYoutube, "inurl":"youtube.com"},
+          {"function":self.showEpisodeGametrailers, 
"inurl":"gametrailers.com/video"},
+          {"function":self.showEpisodeScreenwave, 
"inurl":"screenwavemedia.com/"},
+      )
+      for a in providers:
+        if a['inurl'] in link:
+          stream_url = a['function'](link)
+          item = xbmcgui.ListItem(label=name, iconImage=image, 
thumbnailImage=image, path=stream_url)
+          xbmc.Player().play(stream_url, item)
+
+    def showEpisodeGametrailers(self, videoUrl):
+      _regex_extractVideoGametrailerId = re.compile("<meta 
property=\"og:video\" 
content=\"(http://media.mtvnservices.com/fb/mgid:arc:video:gametrailers.com:(.*?)\.swf)\"
 />");
+      _regex_extractVideoGametrailerStreamURL = re.compile("<rendition 
bitrate=\"(.*?)\".*?<src>(.*?)</src>.*?</rendition>",re.DOTALL)
+
+      videoPage = self.downloadPage(videoUrl)
+      swfUrl = _regex_extractVideoGametrailerId.search(videoPage).group(1)
+
+      #GET the 301 redirect URL
+      req = urllib2.Request(swfUrl)
+      response = urllib2.urlopen(req)
+      swfUrl = response.geturl()
+      videoId = _regex_extractVideoGametrailerId.search(videoPage).group(2)
+
+      feedUrl = 
"http://udat.mtvnservices.com/service1/dispatch.htm?feed=mediagen_arc_feed&account=gametrailers.com&mgid=mgid%3Aarc%3Acontent%3Agametrailers.com%3A"+videoId+"&site=gametrailers.com&segment=0&mgidOfMrssFeed=mgid%3Aarc%3Acontent%3Agametrailers.com%3A"+videoId
+
+      videoFeed = self.downloadPage(feedUrl)
+      videoStreamUrls = 
_regex_extractVideoGametrailerStreamURL.finditer(videoFeed)
+
+      curStream = None
+      curBitrate = 0
+      for stream in videoStreamUrls:
+          streamUrl = stream.group(2)
+          streamBitrate = int(stream.group(1))
+          if streamBitrate>curBitrate:
+              curStream = streamUrl.replace(" ","%20")
+              curBitrate = streamBitrate
+
+      swfUrl = swfUrl.replace("&geo=DE","&geo=US")
+      swfUrl = swfUrl.replace("geo%3dDE%26","geo%3dUS%26")
+
+      stream_url = curStream + " swfUrl="+swfUrl+" swfVfy=1"
+      if curStream is not None:
+        return stream_url
+
+    def showEpisodeYoutube(self, videoItem):
+      videoID = ''
+      if videoItem.find('?') > -1:
+        qry = videoItem.split('?')[1]
+        pairs = qry.split('&')
+        for a in pairs:
+          b = a.split('=')
+          if b[0] == 'v':
+            videoID = b[1]
+            break
       else:
-        xbmc.log("##ERROR## Found div videoarea, but no iframe")
-    else:
-      player = common2.parseDOM(vidPage, "div", attrs={"class": 
"entry-content"})
-      if player:
-        if type(player) == type([]):
-          player = player[0]
-        playerLink = 
re.compile('\=[\'\"]([^\'\"]*?gametrailers.com/video/[^\'\"]*)').findall(player)
-        for a in playerLink:
-          link.append(a)
-        playerLink = 
re.compile('\=[\'\"]([^\'\"]*?blip.tv/play/[^\'\"]*)').findall(player)
-        for a in playerLink:
-          link.append(a)
-        playerLink = 
re.compile('\=[\'\"]([^\'\"]*?youtube.com/watch[^\'\"]*)').findall(player)
-        for a in playerLink:
-          link.append(a)
-    return link
-    
-  def remove_html_special_chars(self, inputStr):
-    inputStr = common.replaceHTMLCodes(inputStr)
-    inputStr=inputStr.strip()
-    return common.makeAscii(inputStr)
-    
-  def playVideo(self, params):
-
-    link = params['url']
-    image = params['image']
-    name = self.remove_html_special_chars(params['name'])
-    
-    providers = (
-        {"function":self.showEpisodeBlip, "inurl":"blip.tv/play/"},
-        {"function":self.showEpisodeYoutube, "inurl":"youtube.com"},
-        {"function":self.showEpisodeGametrailers, 
"inurl":"gametrailers.com/video"},
-        {"function":self.showEpisodeScreenwave, 
"inurl":"screenwavemedia.com/"},
-    )
-    for a in providers:
-      if a['inurl'] in link:
-        stream_url = a['function'](link)
-        item = xbmcgui.ListItem(label=name, iconImage=image, 
thumbnailImage=image, path=stream_url)
-        xbmc.Player().play(stream_url, item)
-    
-  def showEpisodeGametrailers(self, videoUrl):
-    _regex_extractVideoGametrailerId = re.compile("<meta property=\"og:video\" 
content=\"(http://media.mtvnservices.com/fb/mgid:arc:video:gametrailers.com:(.*?)\.swf)\"
 />");
-    _regex_extractVideoGametrailerStreamURL = re.compile("<rendition 
bitrate=\"(.*?)\".*?<src>(.*?)</src>.*?</rendition>",re.DOTALL)
-
-    videoPage = self.downloadPage(videoUrl)
-    swfUrl = _regex_extractVideoGametrailerId.search(videoPage).group(1)
-
-    #GET the 301 redirect URL
-    req = urllib2.Request(swfUrl)
-    response = urllib2.urlopen(req)
-    swfUrl = response.geturl()
-    videoId = _regex_extractVideoGametrailerId.search(videoPage).group(2)
-
-    feedUrl = 
"http://udat.mtvnservices.com/service1/dispatch.htm?feed=mediagen_arc_feed&account=gametrailers.com&mgid=mgid%3Aarc%3Acontent%3Agametrailers.com%3A"+videoId+"&site=gametrailers.com&segment=0&mgidOfMrssFeed=mgid%3Aarc%3Acontent%3Agametrailers.com%3A"+videoId
-
-    videoFeed = self.downloadPage(feedUrl)
-    videoStreamUrls = 
_regex_extractVideoGametrailerStreamURL.finditer(videoFeed)
-
-    curStream = None
-    curBitrate = 0
-    for stream in videoStreamUrls:
-        streamUrl = stream.group(2)
-        streamBitrate = int(stream.group(1))
-        if streamBitrate>curBitrate:
-            curStream = streamUrl.replace(" ","%20")
-            curBitrate = streamBitrate
-
-    swfUrl = swfUrl.replace("&geo=DE","&geo=US")
-    swfUrl = swfUrl.replace("geo%3dDE%26","geo%3dUS%26")
-
-    stream_url = curStream + " swfUrl="+swfUrl+" swfVfy=1"
-    if curStream is not None:
-      return stream_url
-        
-  def showEpisodeYoutube(self, videoItem):
-
-    videoItem = videoItem.replace('https://','http://')
-    if videoItem.startswith('//'):
-      videoItem = 'http:' + videoItem
-      
-    media = urlresolver.HostedMediaFile(url=videoItem)
-    return media.resolve()
-    
-  def showEpisodeBlip(self, videoLink):
-    playerPage = self.downloadPage(videoLink)
-    video = re.compile('data-episode-id=[\'\"]([^\'\"]*?)[\'\"]', 
re.DOTALL).findall(playerPage)
-    rssUrl = ''
-    if video:
-      rssUrl = 'http://blip.tv/rss/flash/' + video[0]
-    else:
-      video = re.compile('config.embedParams = {[^}]*?}', 
re.DOTALL).findall(playerPage)
-      if len(video) > 0:
-        video = re.compile('[\'\"]file[\'\"]:[\'\"]([^\'\"]*?)[\'\"]', 
re.DOTALL).findall(video[0])[0]
+        r = re.findall('/([0-9A-Za-z_\-]+)', videoItem)
+        if r:
+          videoID = r[-1]
+      if videoID:
+        retUrl = 'plugin://plugin.video.youtube/?action=play_video&videoid=' + 
videoID
+        return retUrl
+
+    def showEpisodeBlip(self, videoLink):
+      playerPage = self.downloadPage(videoLink)
+      video = re.compile('data-episode-id=[\'\"]([^\'\"]*?)[\'\"]', 
re.DOTALL).findall(playerPage)
+      rssUrl = ''
+      if video:
+        rssUrl = 'http://blip.tv/rss/flash/' + video[0]
       else:
-        req = urllib2.Request(videoLink)
-        response = urllib2.urlopen(req)
-        fullURL = response.geturl()
-        video = re.compile('file=(.*?)$', re.DOTALL).findall(fullURL)[0]
-        if '&' in video:
-          video = video.split('&')[0]
-        
-      rssUrl = urllib.unquote(video)
-      
-    playerPage = self.downloadPage(rssUrl)
-    urlsGroup = common2.parseDOM(playerPage, "media:group")
-    #media:content
-    urlContent = common2.parseDOM(urlsGroup, "media:content", ret='isDefault')
-    defI = 0
-    for i in range(len(urlContent)):
-      if urlContent[i] == 'true':
-        defI = i
-    urlContent = common2.parseDOM(urlsGroup, "media:content", ret='url')
-
-    return urlContent[defI]
-    
-  def showEpisodeScreenwave(self, videoItem):
-    tmpContent = self.downloadPage(videoItem)
-
-    filesVal = re.compile('file(?:[\'|\"]*):(?:[\s|\'|\"]*)([^\'|\"]*)', 
re.DOTALL).findall(tmpContent)
-
-    for i in range(0,len(filesVal)):
-        if ("high" in filesVal[i]) and ("mp4" in filesVal[i]):
-            return filesVal[i]
-    
-  def main(self):
-    params = self.getParams()
-    if params['action'] == 'main':
-      self.showNav(params['nav'])
-    elif params['action'] == 'display':
-      nextPage = 1
-      if 'nextPage' in params.keys():
-        nextPage = int(params['nextPage'])
-      self.videoList(params['url'], nextPage)
-    elif params['action'] == 'recent':
-      self.videoList(None, 1, 0, 1)
-    elif params['action'] == 'playVideo':
-      self.playVideo(params)
-      xbmcplugin.endOfDirectory(int(sys.argv[1]))
-      
-    else:
-      self.showNav()
+        video = re.compile('config.embedParams = {[^}]*?}', 
re.DOTALL).findall(playerPage)
+        if len(video) > 0:
+          video = re.compile('[\'\"]file[\'\"]:[\'\"]([^\'\"]*?)[\'\"]', 
re.DOTALL).findall(video[0])[0]
+        else:
+          req = urllib2.Request(videoLink)
+          response = urllib2.urlopen(req)
+          fullURL = response.geturl()
+          video = re.compile('file=(.*?)$', re.DOTALL).findall(fullURL)[0]
+          if '&' in video:
+            video = video.split('&')[0]
+
+        rssUrl = urllib.unquote(video)
+
+      playerPage = self.downloadPage(rssUrl)
+      urlsGroup = common2.parseDOM(playerPage, "media:group")
+      #media:content
+      urlContent = common2.parseDOM(urlsGroup, "media:content", 
ret='isDefault')
+      defI = 0
+      for i in range(len(urlContent)):
+        if urlContent[i] == 'true':
+          defI = i
+      urlContent = common2.parseDOM(urlsGroup, "media:content", ret='url')
+
+      return urlContent[defI]
+
+    def showEpisodeScreenwave(self, videoItem):
+      tmpContent = self.downloadPage(videoItem)
+
+      filesVal = re.compile('file(?:[\'|\"]*):(?:[\s|\'|\"]*)([^\'|\"]*)', 
re.DOTALL).findall(tmpContent)
+
+      for i in range(0,len(filesVal)):
+          if ("high" in filesVal[i]) and ("mp4" in filesVal[i]):
+              return filesVal[i]
+
+    def main(self):
+      params = self.getParams()
+      if params['action'] == 'main':
+        self.showNav(params['nav'])
+      elif params['action'] == 'display':
+        nextPage = 1
+        if 'nextPage' in params.keys():
+          nextPage = int(params['nextPage'])
+        self.videoList(params['url'], nextPage)
+      elif params['action'] == 'recent':
+        self.videoList(None, 1, 0, 1)
+      elif params['action'] == 'playVideo':
+        self.playVideo(params)
+        xbmcplugin.endOfDirectory(int(sys.argv[1]))
+
+      else:
+        self.showNav()
+
+  main = cine()
+  main.main()
+except Exception, ex:
+  import traceback
+  excMsg = traceback.format_exc()
+  lineNo = re.findall(', line (\d*), in ',excMsg)[-1]
+  dialog = xbmcgui.Dialog()
+  dialog.notification('Error:', 'line: ' + str(lineNo) + ', ' + str(ex), 
xbmcgui.NOTIFICATION_ERROR)
+
+  doSubmit = dialog.yesno('Please Report This Error:', 'An Error was 
encountered on line: ' + str(lineNo), str(ex), 'Would you like to submit this 
error to the author?')
+
+  if doSubmit:
+    try:
+      import platform
+      import hashlib
+      (sysname, nodename, release, version, machine, processor) = 
platform.uname()
+      uuid = hashlib.md5(sysname + nodename + release + version + 
machine).hexdigest()
+    except:
+      from random import randrange
+      uuid = randrange(100000000,999999999)
+
+    data = {
+      'function':'report',
+      'uuid': uuid,
+      'plugin': 'plugin.video.cinemassacre',
+      'msg': urllib.quote_plus(str(ex)),
+      'trace': urllib.quote_plus(excMsg)
+    }
 
-main = cine()
-main.main()
+    req = 
urllib2.Request('http://kr0nz.0fees.us/bugs.php',urllib.urlencode(data))
+    req.add_header('Content-Type', 'application/x-www-form-urlencoded')
+    response = urllib2.urlopen(req, timeout=30)
+    page = response.read()
+    response.close()

-----------------------------------------------------------------------

Summary of changes:
 plugin.video.cinemassacre/addon.xml     |    4 +-
 plugin.video.cinemassacre/changelog.txt |    1 +
 plugin.video.cinemassacre/default.py    |  873 ++++++++++++++++---------------
 3 files changed, 459 insertions(+), 419 deletions(-)


hooks/post-receive
-- 
Plugins

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to