The branch, frodo has been updated
       via  3c5b4d44e8f10e2de248f8baaa07b30c0c5af231 (commit)
       via  b44880d52fb8c918c8ff91643c135e3f81a5b809 (commit)
      from  eb8a64d48c9c5c0b753da3bf183ffedad0ae82ec (commit)

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

commit 3c5b4d44e8f10e2de248f8baaa07b30c0c5af231
Author: sphere <[email protected]>
Date:   Thu May 15 11:07:51 2014 +0200

    [plugin.video.enemy.territory] marked as broken

diff --git a/plugin.video.enemy.territory/addon.xml 
b/plugin.video.enemy.territory/addon.xml
index a49a376..3f00b3b 100644
--- a/plugin.video.enemy.territory/addon.xml
+++ b/plugin.video.enemy.territory/addon.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.enemy.territory" name="Enemy Territory" 
provider-name="willforde" version="1.0.1">
+<addon id="plugin.video.enemy.territory" name="Enemy Territory" 
provider-name="willforde" version="1.0.2">
        <requires>
                <import addon="xbmc.python" version="2.1.0"/>
                <import addon="script.module.xbmcutil" version="2.0.2"/>
@@ -17,5 +17,6 @@
                <forum>http://forum.xbmc.org/showthread.php?tid=178789</forum>
                
<source>https://github.com/willforde/plugin.video.enemy.territory</source>
                <website>http://enemyterritory.sectornetwork.com</website>
+               <broken>Site no longer available</broken>
        </extension>
 </addon>
\ No newline at end of file
diff --git a/plugin.video.enemy.territory/changelog.txt 
b/plugin.video.enemy.territory/changelog.txt
index 4b377dd..afa46be 100644
--- a/plugin.video.enemy.territory/changelog.txt
+++ b/plugin.video.enemy.territory/changelog.txt
@@ -1,3 +1,6 @@
+[B]Version 1.0.2[/B]
+- Marked Addon ad broken sinse site is no longer available, and is unlikely to 
come back
+
 [B]Version 1.0.1[/B]
 - Added Full Unicode Support
 

http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=b44880d52fb8c918c8ff91643c135e3f81a5b809

commit b44880d52fb8c918c8ff91643c135e3f81a5b809
Author: sphere <[email protected]>
Date:   Thu May 15 11:05:55 2014 +0200

    [plugin.video.cinemassacre] updated to version 1.0.7

diff --git a/plugin.video.cinemassacre/addon.xml 
b/plugin.video.cinemassacre/addon.xml
index 6951370..9705ea2 100644
--- a/plugin.video.cinemassacre/addon.xml
+++ b/plugin.video.cinemassacre/addon.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.cinemassacre" name="cinemassacre" version="1.0.6" 
provider-name="dethfeet, Kr0nZ">
+<addon id="plugin.video.cinemassacre" name="cinemassacre" version="1.0.7" 
provider-name="dethfeet, Kr0nZ">
   <requires>
     <import addon="xbmc.python" version="2.1.0"/>
     <import addon="xbmc.gui" version="4.0.0"/>
-    <import addon="plugin.video.youtube" version="4.4.1"/>
-    <import addon="plugin.video.bliptv" version="1.8.1"/>
-    <import addon="script.module.parsedom" version="2.5.1" />
+    <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>
diff --git a/plugin.video.cinemassacre/changelog.txt 
b/plugin.video.cinemassacre/changelog.txt
index 6014aeb..a0757df 100644
--- a/plugin.video.cinemassacre/changelog.txt
+++ b/plugin.video.cinemassacre/changelog.txt
@@ -1,3 +1,4 @@
+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
 1.0.4 - Fix screenwave videos
diff --git a/plugin.video.cinemassacre/default.py 
b/plugin.video.cinemassacre/default.py
index 3d09304..375135f 100644
--- a/plugin.video.cinemassacre/default.py
+++ b/plugin.video.cinemassacre/default.py
@@ -1,215 +1,163 @@
-import xbmcplugin, xbmcgui, xbmcaddon
-import urllib, urllib2, re
-import showEpisode, sys, os#, random
-try: import StorageServer
-except: import storageserverdummy as StorageServer
+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
 
-cache = StorageServer.StorageServer("cinemassacre", 24)
-#cache.dbg = True
-#common.dbg = True
-addon = xbmcaddon.Addon(id='plugin.video.cinemassacre')
-
+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")
 
-baseLink = "http://cinemassacre.com/";
+cacheDb = cache(dbLocation)
 
-defaultsXML = os.path.join(addon.getAddonInfo('path'), 
'resources',"defaults.xml")
-dontShowTheseUrls = []
-defaultFolderIcons = {"default":os.path.join(addon.getAddonInfo('path'), 
"icon.png"),"list":[]}
+logo = {
+'default':'logo.png',
+'/category/avgn/':'avgn.png',
+'/category/boardjames/':'boardJ.png',
+'/category/ykwb/':'ykwbs.png'
+}
 
-def retFileAsString(fileName):
-    file = common.openFile(fileName, "r")
-    tmpContents = file.read()
-    file.close()
-    return tmpContents
-    
-def getDefaultIcons():
-    xmlContents = retFileAsString(defaultsXML)
-    iconList =  common2.parseDOM(xmlContents, "icons")
-    iconUrlList =  common2.parseDOM(iconList, "icon", ret="url")
-    iconImgList =  common2.parseDOM(iconList, "icon", ret="image")
-    
-    retList = []
-    for i in range(0,len(iconUrlList)):
-        retList.append({"url": iconUrlList[i], "image": 
os.path.join(addon.getAddonInfo('path'), 'resources', 'images', 
iconImgList[i])})
-    return retList
+class cine(object):
 
-def getNotShownUrls():
-    xmlContents = retFileAsString(defaultsXML)
-    exclList =  common2.parseDOM(xmlContents, "excludeUrls")
-    urlList =  common2.parseDOM(exclList, "url")
+  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
     
-    retList = []
-    for url in urlList:
-        retList.append(url)
-    return retList
+  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'])
 
-def excludeUrl(url):
-    for notUrl in dontShowTheseUrls:
-      if notUrl in url:
-        return True
-    return False
-
-def checkDefaultIcon(url):
-    possibleIcon = ""
-    for defaultIcon in defaultFolderIcons["list"]:
-        if (defaultIcon["url"] in url) and (len(defaultIcon["image"]) > 
len(possibleIcon)):
-            possibleIcon = defaultIcon["image"]
-    if len(possibleIcon) == 0:
-        possibleIcon = defaultFolderIcons["default"]
-    return possibleIcon
+    if 'image' in params.keys():
+      image = params['image']
     
-def addEpisodeListToDirectory(epList):
-    print "Adding Video List: %s" % epList
-    for episode in epList:
-        if not excludeUrl(episode['url']):
-            addDirectoryItem(remove_html_special_chars(episode['title']), 
{"action" : "episode", "link": episode['url']}, episode['thumb'], False)
-    xbmcplugin.endOfDirectory(thisPlugin)        
+    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=[]):
     
-def extractEpisodeImg(episode):
-    linkImage = common2.parseDOM(episode, "div", attrs={"class": 
"video-tnail"})
-    linkImage = common2.parseDOM(linkImage, "img", ret="src")
-    linkImageTmp = re.compile('src=([^&]*)', re.DOTALL).findall(linkImage[0])
-    if len(linkImageTmp)>0:
-        if linkImageTmp[0][:1] != "/":
-            linkImageTmp[0] = "/" + linkImageTmp[0]
-        linkImage = baseLink+linkImageTmp[0]
-    else:
-        if (len(linkImage[0]) > 0) and (baseLink in linkImage[0]):
-            linkImage = linkImage[0]
-        else:
-            linkImage = ""
-    return linkImage
-
-def pageInCache(episodeList,link):
-    storedList = cache.get(link)
-    try:
-        storedList = eval(storedList)
-    except:
-        storedList = []
-    if (len(storedList) >= len(episodeList)):
-        for i in range(0,len(episodeList)):
-            if episodeList[i] != storedList[i]:
-                return []
-        print "Using Stored Cache Page"
-        return storedList
-    return []
+    if len(offset) == 0:
+      self.addToDir('Recent Videos', {'action':'recent','url':'#'})
+      
+    navbar = self.getNav()
+    parent = {'url':'#'}
     
-def mainPage():
-    global thisPlugin
-    addDirectoryItem(addon.getLocalizedString(30000), {"action" : "recent", 
"link": ""}, defaultFolderIcons["default"])  
-    subMenu(baseLink)
-
-def subMenu(link,row='[]'):
-    global thisPlugin
-    link = urllib.unquote(link)
-    page = load_page(link)
-    mainMenu = extractMenu(page,urllib.unquote(row))
+    for a in offset:
+      parent = navbar[a]
+      navbar = navbar[a]['children']
+      
+    tmpOffset2 = 0
     
-    if not len(mainMenu):
-        return showPage(link) # If link has no sub categories then display 
video list
+    if parent['url'] != '#':
+      self.addToDir('All Videos', {'action':'display','url':parent['url']})
     
-    if len(link) != len(baseLink) and (link != '#'):
-      addDirectoryItem(addon.getLocalizedString(30001), {"action" : "show", 
"link": link}, defaultFolderIcons["default"]) # All Videos Link
+    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]))
     
-    for menuItem in mainMenu:
-        menu_name = remove_html_special_chars(menuItem['name']);
-        menu_link = menuItem['link'];
-        if excludeUrl(menu_link):
-           continue
-        menu_icon = checkDefaultIcon(menu_link)
-        addDirectoryItem(menu_name, {"action" : "submenu", "link": menu_link, 
"row": menuItem['row']}, menu_icon)
-        
-    xbmcplugin.endOfDirectory(thisPlugin)
-
-def recentPage():
-    global thisPlugin
-    pageUrl = baseLink + "wp-admin/admin-ajax.php"
-    pageData = "action=infinite_scroll&loop_file=loop"
-    page = load_page(pageUrl,pageData)
-    linkList = extractEpisodes(page)
-    newLinkList = []
-    pDialog = xbmcgui.DialogProgress(10101)
-    ret = pDialog.create('Cinemassacre', 'Loading Recent Videos', '', 
'Retrieved 0 Videos')
-    curItm = 0
-    for chk in linkList:
-      curItm = curItm + 1
-      link = urllib.unquote(chk['url'])
-      page = load_page(link)
-      if showEpisode.showEpisode(page,False) == True:
-        newLinkList.append(chk)
-      pDialog.update((curItm * 100) / len(linkList),'Loading Recent Videos', 
'', 'Retrieved '+str(len(newLinkList))+' Videos')
-    addEpisodeListToDirectory(newLinkList)
+  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])
     
-def extractMenu(page,row='[]'):
-    navList = common2.parseDOM(page, "div", attrs={"id": "navArea"})
-    navList = common2.parseDOM(navList[0], "ul", attrs={"id": 
"menu-main-menu"})
-    navList = common2.parseDOM(navList[0], "li")
-    row2 = eval(row)
-    tempCont = navList
-    for i in row2:
-        tempCont = common2.parseDOM(tempCont[i], "li")
-
-    retList = []
-    for i in range(0,len(tempCont)):
-        tmpRow = eval(row)
-        tmpRow.append(i)
-        testNav = re.compile('^<a 
href="([^\"\']*?)">([^<]*?)</a>').findall(tempCont[i])
-        try:
-            retList.append({"name": testNav[0][1],"link": testNav[0][0], 
"row":repr(tmpRow)})
-        except: print "extractMenu: list index out of range"
-    return retList
-
-def showPage(link):
-    global thisPlugin
-    link = urllib.unquote(link)
-    page = load_page(link)
-    # Some pages has the newest video in a "Featured Video" section
-    show = common2.parseDOM(page, "div", attrs={"id": "featuredImg"})
-    try:
-        fTitle = common2.parseDOM(show, "span", attrs={"id": 
"archiveCaption"})[0]
-        fTitle = common2.parseDOM(fTitle, "a")[0]
-        fLink = common2.parseDOM(show, "a", ret="href")[0]
-        fImg = common2.parseDOM(show, "img", ret="src")[0]
-    except: print "No featured video found"
-
-    show = common2.parseDOM(page, "div", attrs={"id": "postlist"})
-    episodeList = extractEpisodes(show)
-    episodeList.insert(0, {"title":fTitle, "url":fLink, "thumb":fImg})
-    #cache.delete(link)
+    return param
+  
+  def videoList(self, url, nextPage=1, pageCat=None, pageTotal=None):
     
-    ##Check first page against cache
-    cachedPage = pageInCache(episodeList,link) # Returns empty list if cache 
differs
-    if (len(cachedPage)>0):
-        episodeList = cachedPage
-        show = 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 = []
     
-    if (show != None):
-        curPage = int(re.compile('var count = (\d+?);').findall(page)[0])
-        pageTotal = int(re.compile('var total = (\d+?);').findall(page)[0])
-        pageCat = re.compile('var cat = (\d+?);').findall(page)[0]
-        nextPageUrl = baseLink + "wp-admin/admin-ajax.php"
-               
-        while (curPage <= pageTotal):
-            pageData = "action=infinite_scroll&page_no="+ str(curPage) + 
'&cat=' + pageCat + '&loop_file=loop'
-            page = load_page(nextPageUrl,pageData)
-            linkList = extractEpisodes(page)
-            episodeList = episodeList + linkList
-            curPage += 1
-
-    cache.set(link, repr(episodeList)) #update cache
-    addEpisodeListToDirectory(episodeList)
-
-def extractEpisodes(show):
-    episodes = common2.parseDOM(show, "div", attrs={"class": "archiveitem"})
+    
vidList.append(self.downloadPage(postUrl,postData.format(nextPage,pageCat)))
+      
     linkList = []
-    for episode in episodes:
+    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]
-        if excludeUrl(episode_link):
-            continue
         episode_title = common2.parseDOM(episode, "a")[0]
         episode_title = 
re.compile('<div>([^<]*?)</div>').findall(episode_title)[0]
         try:
@@ -217,76 +165,265 @@ def extractEpisodes(show):
         except:
             episode_img = ""
         linkList.append({"title":episode_title, "url":episode_link, 
"thumb":episode_img})
-    return linkList
+    
+    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
+                  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})
 
-def playEpisode(link):
-    link = urllib.unquote(link)
-    page = load_page(link)
-    showEpisode.showEpisode(page)
+    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])
 
-def load_page(url, data=None):
-    print "Getting page: " + url
-    if len(url)<5:
-        url = baseLink
-    if data!=None:
-      req = urllib2.Request(url,data)
-      req.add_header('Content-Type', 'application/x-www-form-urlencoded')
+    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)
+        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:
-      req = urllib2.Request(url)
-    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) 
Gecko/20100101 Firefox/14.0.1')
-    response = urllib2.urlopen(req)
-    link = response.read()
-    response.close()
+      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 addDirectoryItem(name, parameters={}, pic="", folder=True):
-    li = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", 
thumbnailImage=pic)
-    if not folder:
-        li.setProperty('IsPlayable', 'true')
-    url = sys.argv[0] + '?' + urllib.urlencode(parameters)# + "&randTok=" + 
str(random.randint(1000, 10000))
-    return xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, 
listitem=li, isFolder=folder)
-
-def remove_html_special_chars(inputStr):
+    
+  def remove_html_special_chars(self, inputStr):
     inputStr = common.replaceHTMLCodes(inputStr)
     inputStr=inputStr.strip()
     return common.makeAscii(inputStr)
     
-def get_params():
-    param = []
-    paramstring = sys.argv[2]
-    if len(paramstring) >= 2:
-        params = sys.argv[2]
-        cleanedparams = params.replace('?', '')
-        if (params[len(params) - 1] == '/'):
-            params = params[0:len(params) - 2]
-        pairsofparams = cleanedparams.split('&')
-        param = {}
-        for i in range(len(pairsofparams)):
-            splitparams = {}
-            splitparams = pairsofparams[i].split('=')
-            if (len(splitparams)) == 2:
-                param[splitparams[0]] = splitparams[1]
+  def playVideo(self, params):
+
+    link = params['url']
+    image = params['image']
+    name = self.remove_html_special_chars(params['name'])
     
-    return param
+    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)
 
-dontShowTheseUrls = getNotShownUrls()
-defaultFolderIcons["list"] = getDefaultIcons()
+    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
 
-if not sys.argv[2]:
-    mainPage()
-else:
-    params = get_params()
-    if params['action'] == "show":
-        print "Video List"
-        showPage(params['link'])
-    elif params['action'] == "submenu":
-        print "Menu"
-        subMenu(params['link'],params['row'])
-    elif params['action'] == "recent":
-        print "Recent list"
-        recentPage()
-    elif params['action'] == "episode":
-        print "Episode"
-        playEpisode(params['link'])
+    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]
+      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:
-        mainPage()
+      self.showNav()
+
+main = cine()
+main.main()

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

Summary of changes:
 plugin.video.cinemassacre/addon.xml                |    8 +-
 plugin.video.cinemassacre/cache.py                 |   65 ++
 plugin.video.cinemassacre/changelog.txt            |    1 +
 plugin.video.cinemassacre/default.py               |  639 ++++++++++++--------
 .../{icon.png => resources/images/logo.png}        |  Bin 56865 -> 56865 bytes
 plugin.video.cinemassacre/showEpisode.py           |  226 -------
 plugin.video.enemy.territory/addon.xml             |    3 +-
 plugin.video.enemy.territory/changelog.txt         |    3 +
 8 files changed, 463 insertions(+), 482 deletions(-)
 create mode 100644 plugin.video.cinemassacre/cache.py
 copy plugin.video.cinemassacre/{icon.png => resources/images/logo.png} (100%)
 delete mode 100644 plugin.video.cinemassacre/showEpisode.py


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