Kodi Community Forum

Full Version: Retrospect v5.5.x Video Add-On
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
dafunks Wrote:Thanks for saying you will do zip/rar versions in the future.

But can anyone rezip a new version for me as I am dieing to use this but as i have no windows computer i cant Sad

If you are using Linux or so, just try 7-zip. It can also create zip files.
Actually on using the script I have a potential bug to report.

I am finding, intermittently, that sometimes I am unable to exit the script. The script remains responsive to moving around the current catagory, although will not change catagories. On pressing the thumb sticks still work - either taking a screenshot or bringing up the menu with the shutdown (which might have let me escape from it if I actually had some favourates set but since I don't I don't know).

This bug has cropped up several times recently and the only way I can find to exit it when this happens is restarting my xbox.

Wish I had more info I could give you on it Sad :/
TheBoxMan Wrote:Actually on using the script I have a potential bug to report.

I am finding, intermittently, that sometimes I am unable to exit the script. The script remains responsive to moving around the current catagory, although will not change catagories. On pressing the thumb sticks still work - either taking a screenshot or bringing up the menu with the shutdown (which might have let me escape from it if I actually had some favourates set but since I don't I don't know).

This bug has cropped up several times recently and the only way I can find to exit it when this happens is restarting my xbox.

Wish I had more info I could give you on it Sad :/

I was getting exactly the same problem so I went back to the b3 version and that seems better although sometimes it takes ages to go back a category.
TheBoxMan Wrote:Actually on using the script I have a potential bug to report.

I am finding, intermittently, that sometimes I am unable to exit the script. The script remains responsive to moving around the current catagory, although will not change catagories. On pressing the thumb sticks still work - either taking a screenshot or bringing up the menu with the shutdown (which might have let me escape from it if I actually had some favourates set but since I don't I don't know).

This bug has cropped up several times recently and the only way I can find to exit it when this happens is restarting my xbox.

Wish I had more info I could give you on it Sad :/

This is a know issue and is related to the absence of Multithreading in XBMC. The script seems to be unresponsive, but is in fact handling 2 url's at the same time. I am working on a work around, but the problem is that it is not reproducable on the XBMC_PC version.

So please be patient and in the mean time, use pageup-pagedown instead of scrolling through the lists one by one.
Basje Wrote:This is a know issue and is related to the absence of Multithreading in XBMC. The script seems to be unresponsive, but is in fact handling 2 url's at the same time. I am working on a work around, but the problem is that it is not reproducable on the XBMC_PC version.

Great. Glad to know you guys are on the case. Wink

Quote:So please be patient and in the mean time, use pageup-pagedown instead of scrolling through the lists one by one.

thanks for the tip on getting round it, and no hurry- You guys have to live a life as well as code Wink
have anyone tested the uitzendinggemist newest version that have TV-links support? I
realjobe Wrote:have anyone tested the uitzendinggemist newest version that have TV-links support? I

Yes I did, it works fine. But you have to be really patient and wait until all data had been loaded.
Bigfoot87 Wrote:Yes I did, it works fine. But you have to be really patient and wait until all data had been loaded.

hmm... I tested "Cartoons/Bugs bunny..." and nothing opened with uitzendinggemist but the same workd with the "real" TV links script..

there were many other clips that did the same thing... Smile
dominater01 Wrote:here u go da funks its in a .zip http://files.filefront.com/uitzendinggem...einfo.html

Hi dominater01,

That link is dead... ANy chance of a new one? I still dont have one of these Sad sadly Sad

Thanks for trying though Big Grin
Also, if I take the "\(\d+\)" out of line 56 (self.episodeItemRegex), the category listings have numbers next to them, but it shows EVERY link on the page.


I guess my main questions are:

With something like "_matches = common.DoRegexFindAll('/ <a href="([^"]+)">([^<]+)</a>', data)", is that creating an array of results, with a "/" in the [0] position? If so, what's that / being used for? Also, how are the array items being designated? Just by a space between them (like between the slash and the <?)

Any idea what I'm doing wrong? Smile

I'm probably just going to have to learn python. Always more fun to learn something when you can actually use it for a practical purpose.
This should have been before that last post. Don't know why it wasn't.

So, without knowing python, (or even regex. learning as i go), I'm trying to hack the included joox.net channel to work with pronshare, since the structure of both sites is fairly similar.

Didn't see what I need in the wiki.

This is what I've come up with so far (and yes, this is almost entirely the Joox.net channel code, so if that wa a stupid way to do it, let me know)

Code:
#===============================================================================
# Import the default modules
#===============================================================================
import xbmc, xbmcgui
import re, sys, os

#===============================================================================
# Make global object available
#===============================================================================
import common
import config
import controls
import contextmenu
import chn_class

logFile = sys.modules['__main__'].globalLogFile
uriHandler = sys.modules['__main__'].globalUriHandler

#===============================================================================
# register the channels
#===============================================================================
register = sys.modules['progwindow']
#register.channelButtonRegister.append(108)
register.channelRegister.append('chn_ps.Channel("uzg-channelwindow.xml", config.rootDir, config.skinFolder, channelCode="ps")')

#===============================================================================
# main Channel Class
#===============================================================================
class Channel(chn_class.Channel):
    """
    main class from which all channels inherit
    """
    
    #===============================================================================
    def InitialiseVariables(self):
        """
        Used for the initialisation of user defined parameters. All should be
        present, but can be adjusted
        """
        # call base function first to ensure all variables are there
        chn_class.Channel.InitialiseVariables(self)
        
        self.contextMenuEnabled = True
        self.icon = "psthumb.png"
        self.iconLarge = "pslarge.png"
        self.noImage = "psimage.png"
        self.channelName = "Pronshare.com"
        self.moduleName = "chn_ps.py"
        self.maxXotVersion = "2.7.0b4"
        
        self.initialUri = "http://pronshare.com"
        self.baseUrl = "http://pronshare.com"
        
        self.requiresLogon = False
        
        self.episodeItemRegex = '<a href="([^"]+)">([^<]+)\(\d+\)</a>' # used for the ParseMainList
        self.videoItemRegex = '<a href="/Watch\.aspx\?id=\w+-\w+-\w+-\w+-\w+">([^>]+)</a>'   # used for the CreateVideoItem
        self.folderItemRegex = '<a href="/Category\.aspx\?id=\w+-\w+-\w+-\w+-\w+">([^>]+)</a>'  # used for the CreateFolderItem
        self.mediaUrlRegex = '<param name="src" value="([^"]+)" />'    # used for the UpdateVideoItem
        
        #==========================================================================
        # non standard items
        
        return True
      
    #==============================================================================
    # ContextMenu functions
    #==============================================================================
    def onActionFromContextMenu(self):
        """
        Using of the ContextMenu. It is called
        """
        
        if not self.contextMenuEnabled:
            return None
        
        _position = self.getCurrentListPosition()
        _item = self.listItems[_position]
        
        if not _item.type == "video":
            logFile.warning("Cannot show contextmenu for folder")
            return None
        
        # build menuitems
        _menuItems = ("Download Item","Play using Mplayer","Play using DVDPlayer")
        _contextMenu = contextmenu.GUI(config.contextMenuSkin, config.rootDir, config.skinFolder, parent=self.getFocus(), menuItems = _menuItems)
        _selectedItem = _contextMenu.selectedItem
        del _contextMenu
        
        # handle function from items
        if ( _selectedItem is not None ):    
            logFile.debug("Selection from menu was %s", _selectedItem)
            if _selectedItem == 1:
                self.listItems[_position] = self.DownloadEpisode(_item)
            elif _selectedItem == 2:
                self.PlayVideoItem(_item)
            elif _selectedItem == 3:
                self.PlayVideoItem(_item,"dvdplayer")    
        return None
      
    #==============================================================================
    def CreateEpisodeItem(self, resultSet):
        """
        Accepts an arraylist of results. It returns an item.
        """
        #logFile.debug('starting CreateEpisodeItem for %s', self.channelName)
        
        # dummy class
        _item = common.clistItem(resultSet[1], self.baseUrl + resultSet[0])
        _item.icon = self.folderIcon

        _item.complete = True
        return _item
    
    #==============================================================================
    def PreProcessFolderList(self, data):
        """
        Accepts an data from the ProcessFolderList Methode, BEFORE the items are
        processed. Allows setting of parameters (like title etc). No return value!
        """
        
        _items = []
        #description
        _matches = common.DoRegexFindAll('/ <a href="([^"]+)">([^<]+)</a>', data)
        
        #initialise description
        if len(self.folderHistory) == 1:
            self.progTitle = _matches[0][1]
            logFile.debug("ProgramTitle = %s", self.progTitle)
            self.folderHistory[0].description = self.progTitle
        
        # now remove everything above the sidebar HTML to prevent problems with new
        # links on the site
        data = common.DoRegexFindAll('<div id="body-sidebar">(([\n\r]|.)*)', data)
        if len(data)>0:
            if len(data[0])>0:
                data = data[0][0]
        return (data, _items)
        
    
    #==============================================================================
    def CreateFolderItem(self, resultSet):
        """
        Accepts an arraylist of results. It returns an item.
        """
        #logFile.debug('starting CreateFolderItem for %s', self.channelName)
        item = common.clistItem(resultSet[4], self.baseUrl + resultSet[0]+resultSet[1]+resultSet[2])
        item.description = "%s\n%s" % (self.folderHistory[-1].description, item.name)
        item.icon = self.folderIcon
        item.thumb = self.noImage
        item.type = 'folder'
        
        item.complete = True
        return item
    
    #=============================================================================
    def CreateVideoItem(self, resultSet):
        """
        Accepts an arraylist of results. It returns an item.
        """
        #logFile.debug('starting CreateVideoItem for %s', self.channelName)
        item = common.clistItem(resultSet[4], self.baseUrl + resultSet[0]+resultSet[1]+resultSet[2])
        item.description = "%s\n%s" % (self.folderHistory[-1].description, item.name)
        item.icon = self.icon
        item.thumb = self.noImage
        item.type = 'video'
        
        # getting the URL is part of the PlayVideo
        item.complete = False
        return item
    
    #==============================================================================
    def DownloadEpisode(self, item):
        #check if data is already present and if video or folder
        if item.type == 'folder':
            logFile.warning("Cannot download a folder")
        elif item.type == 'video':
            if item.complete == False:
                logFile.info("Fetching MediaUrl for VideoItem")
                item = self.UpdateVideoItem(item)
            _destFilename = item.name + ".divx"
            if item.mediaurl=="":
                logFile.error("Cannot determine mediaurl")
                return item
            logFile.info("Going to download %s", _destFilename)
            _downLoader = uriHandler.Download(item.mediaurl, _destFilename)
            item.downloaded = True
            return item
        else:
            logFile.warning('Error determining folder/video type of selected item');


Now, when I use that code in "chn_ps.py" (the pronshare channel py script I "created" by copying the joox.net folder and editing the .py file), I can load a list of categories (with no numbers next to them), but selecting a category takes me to a blank page. The log shows the following at the end:

Code:
20070821 04:31:29 - CRITICAL - logger.py      - 163 - | Traceback (most recent call last):
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |   File "Q:\scripts\XOT\libs\chn_class.py", line 160, in onInit
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |     self.listItems = self.ProcessFolderList(self.initialUri)
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |   File "Q:\scripts\XOT\libs\chn_class.py", line 426, in ProcessFolderList
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |     (_data, _preItems) = self.PreProcessFolderList(_data)
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |   File "Q:\scripts\XOT\channels\ps\chn_ps.py", line 128, in PreProcessFolderList
20070821 04:31:29 - CRITICAL - logger.py      - 163 - |     self.progTitle = _matches[0][1]
20070821 04:31:29 - CRITICAL - logger.py      - 163 - | IndexError: list index out of range
What would cause a post to get deleted right away upon posting? It had code in it, and mentioned pornshare. Those are the only two things I can think of.

(There was a post preceding my last, so it actually DID make sense at one point).
dominater01 Wrote:http://www.zshare.net/download/32329509267293/ there u go da funks

Big thanks! I got it Big Grin yey

So will all updates now be in zip/rar and a 7z version?