Kodi Community Forum
Release Retrospect v5.5.x Video Add-On - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Support (https://forum.kodi.tv/forumdisplay.php?fid=33)
+--- Forum: Add-on Support (https://forum.kodi.tv/forumdisplay.php?fid=27)
+---- Forum: Video Add-ons (https://forum.kodi.tv/forumdisplay.php?fid=154)
+---- Thread: Release Retrospect v5.5.x Video Add-On (/showthread.php?tid=25522)



- idioteque - 2008-09-30

using windows XBMC hangs on playing a southpark episode:

14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: code, STRING: NetStream.Play.Start>
14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: description, STRING: Started playing comedystor/_!/com/sp/acts/Season10/E_1010/compressed/flv/1010_1_DI_640x480_500kbps.>
14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: clientid, STRING: JB8gEfVq>
14:07:15 T:1896 M:1094840320 DEBUG: END AMF Object Dump:
14:07:15 T:1896 M:1094840320 DEBUG: END AMF Object Dump:
14:07:15 T:1896 M:1094840320 DEBUG: RTMP_LIB::CRTMP::HandleInvoke, server invoking <onStatus>
14:07:18 T:1896 M:1094279168 DEBUG: CDVDDemuxFFmpeg::Open - av_find_stream_info starting
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094017024 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094008832 ERROR: ffmpeg: [flv] header damaged
14:07:19 T:1896 M:1093926912 DEBUG: unknown packet type received: 0x16
14:07:19 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093955584 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093898240 DEBUG: unknown packet type received: 0x16
14:07:21 T:1896 M:1093890048 DEBUG: unknown packet type received: 0x16
14:07:21 T:1896 M:1093931008 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093914624 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093984256 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093910528 DEBUG: Send bytes report. 0x96116 (614678 bytes)
14:07:23 T:1896 M:1093910528 DEBUG: unknown packet type received: 0x16
14:07:24 T:1896 M:1093902336 DEBUG: unknown packet type received: 0x16
14:07:24 T:1896 M:1093910528 DEBUG: unknown packet type received: 0x16
14:07:25 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:25 T:1896 M:1093865472 DEBUG: unknown packet type received: 0x16
14:07:26 T:1896 M:1093865472 DEBUG: unknown packet type received: 0x16
14:07:26 T:1896 M:1093873664 DEBUG: unknown packet type received: 0x16
14:07:28 T:1896 M:1093951488 DEBUG: unknown packet type received: 0x16
14:07:28 T:1896 M:1093881856 DEBUG: unknown packet type received: 0x16
14:07:29 T:1896 M:1093881856 DEBUG: unknown packet type received: 0x16
14:07:29 T:1896 M:1093914624 DEBUG: Send bytes report. 0x12c6d9 (1230553 bytes)


- Basje - 2008-09-30

idioteque Wrote:using windows XBMC hangs on playing a southpark episode:

14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: code, STRING: NetStream.Play.Start>
14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: description, STRING: Started playing comedystor/_!/com/sp/acts/Season10/E_1010/compressed/flv/1010_1_DI_640x480_500kbps.>
14:07:15 T:1896 M:1094840320 DEBUG: Property: <Name: clientid, STRING: JB8gEfVq>
14:07:15 T:1896 M:1094840320 DEBUG: END AMF Object Dump:
14:07:15 T:1896 M:1094840320 DEBUG: END AMF Object Dump:
14:07:15 T:1896 M:1094840320 DEBUG: RTMP_LIB::CRTMP::HandleInvoke, server invoking <onStatus>
14:07:18 T:1896 M:1094279168 DEBUG: CDVDDemuxFFmpeg::Open - av_find_stream_info starting
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094033408 ERROR: ffmpeg: [flv] header damaged
14:07:18 T:1896 M:1094017024 ERROR: ffmpeg: [flv] Bad picture start code
14:07:18 T:1896 M:1094008832 ERROR: ffmpeg: [flv] header damaged
14:07:19 T:1896 M:1093926912 DEBUG: unknown packet type received: 0x16
14:07:19 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093955584 DEBUG: unknown packet type received: 0x16
14:07:20 T:1896 M:1093898240 DEBUG: unknown packet type received: 0x16
14:07:21 T:1896 M:1093890048 DEBUG: unknown packet type received: 0x16
14:07:21 T:1896 M:1093931008 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093914624 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093984256 DEBUG: unknown packet type received: 0x16
14:07:23 T:1896 M:1093910528 DEBUG: Send bytes report. 0x96116 (614678 bytes)
14:07:23 T:1896 M:1093910528 DEBUG: unknown packet type received: 0x16
14:07:24 T:1896 M:1093902336 DEBUG: unknown packet type received: 0x16
14:07:24 T:1896 M:1093910528 DEBUG: unknown packet type received: 0x16
14:07:25 T:1896 M:1093922816 DEBUG: unknown packet type received: 0x16
14:07:25 T:1896 M:1093865472 DEBUG: unknown packet type received: 0x16
14:07:26 T:1896 M:1093865472 DEBUG: unknown packet type received: 0x16
14:07:26 T:1896 M:1093873664 DEBUG: unknown packet type received: 0x16
14:07:28 T:1896 M:1093951488 DEBUG: unknown packet type received: 0x16
14:07:28 T:1896 M:1093881856 DEBUG: unknown packet type received: 0x16
14:07:29 T:1896 M:1093881856 DEBUG: unknown packet type received: 0x16
14:07:29 T:1896 M:1093914624 DEBUG: Send bytes report. 0x12c6d9 (1230553 bytes)

Looks like your XBMC does not support RTMP 0x16! You can either apply the RTMP 0x16 patch yourself and compile XBMC or wait for the devs to merge it into the XBMC for Xbox sourcecode (I did write this on my homepage).


- anandus - 2008-11-01

Hi,

I was wondering if it's also possible to watch 'Journaal 24' with this?
(It's the live NOS stream)


- Basje - 2008-11-01

anandus Wrote:Hi,

I was wondering if it's also possible to watch 'Journaal 24' with this?
(It's the live NOS stream)

You can use the Kanalenkiezer channel for that.


- cloud79 - 2008-11-01

Have a question about this script. It doens't seem to be able to playback the tv streams in the SverigesTelevision channel. It lists all the programs but it doesn´t start playback.

I'm using atlantis beta 2 on xbmc live and your latest 3.2.1b1

//Linus, Sweden


- Basje - 2008-11-01

cloud79 Wrote:Have a question about this script. It doens't seem to be able to playback the tv streams in the SverigesTelevision channel. It lists all the programs but it doesn´t start playback.

I'm using atlantis beta 2 on xbmc live and your latest 3.2.1b1

//Linus, Sweden

Could you post an uzg.log file on pastbin.ca? Then I can have a look at it.


- cloud79 - 2008-11-02

Here it is! Smile

http://pastebin.com/m168539f9


- Basje - 2008-11-02

cloud79 Wrote:Here it is! Smile

http://pastebin.com/m168539f9

There are two problems:

First one is that your XBMC does not know how to play RealMedia video files. That is why the first playback does not start.

Second problem is the script, which tries to determine the url to a second time and fails because it already did that.

The first problem I cannot fix, the second I can and I just did. You can find a new channel with the Auto update function of XOT (contextmenu on the Channel overview).


- ^Mask^ - 2008-11-02

Hi Bas (hallo Smile),

I just LOVE your XOT-UZG script and have been trying to find a way to add all my other video-streaming scripts as channels under XOT-UZG. However, I have no experience with writing Python scripts at all! I know some basic scripting and coding, so picking up the skills or understanding the code shouldnt be too difficult. So, I've been trying to adjust one of the scripts (MyVideos.nl to be exact) to load the videos from commandn.typepad.com and eventually want to add others like twit.tv, diggnation.com crankygeeks.com and many others. Once done, I could share the channels with you to share on the server and offer through the update-channels option, but let's take one step at a time Smile

I read on your guide that you'll be expanding the guide to include more information, but I'm sure you haven't been getting to that. I would really love an update to the online channel-guide, or maybe a template channel that I can adjust. Better yet, if you were to have a simple RSS-template channel that I can use to specify the URL, the right tags to filter in the regex, etc, that would be amazing! Smile)

So far, what I was able to do (and I honestly still have no idea what the hell I'm doing Tongue) is this:

1. I was able to list just 1 entry after I click the channel. When I click it, it also actually is linked to the right video-file. Annoying thing is that when I click the program, it tries to load the entire file. So I think that somehow I'm telling it to try and filter that file for videos, rather than play the actual video itself.

2. When I totally had no idea what I was doing, I had a huge list (about 100+ to 200+ items) named 'h' and after some editing 'm' which were not linked to anything Tongue I think somehow, there I was not taking the right content out. But what I realized there is that I DID get 100 over entries like I was supposed to, whereas now I don't. I just get 1..

3. I tried creating a category that is linked directly to the RSS feed, but that doesnt list any items at all after I click the category, so that one is entirely screwed up.

4. Last thing I tried was to start from scratch: empty .py file, copy in whatever is in the guide and go step-by-step but that too became a huge mess and wouldnt work. In fact, first it would only list 1-2-3 channel, later it would just show "ChannelName" on the left and hang my XBMC Smile So, I gave up on that one.

To share with you what I have now (and yes, I know its a MESS, but I have been trying to edit the existing script and was worried I might still need some things) and really appreciate your help or hopefully something that I can use as a template Smile)

Code in next reply (too big) Smile


- ^Mask^ - 2008-11-02

Code:
from uriopener import UriHandler
import uriopener
import xbmc, xbmcgui
import sys, re, urllib, os.path, math
#===============================================================================
# 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
#===============================================================================
if (sys.modules.has_key('progwindow')):
    register = sys.modules['progwindow']
elif (sys.modules.has_key('plugin')):
    register = sys.modules['plugin']
#register.channelButtonRegister.append(105)
register.channelRegister.append('chn_commandn.Channel("uzg-channelwindow.xml", config.rootDir, config.skinFolder)')

#===============================================================================
# main Channel Class
#===============================================================================
class Channel(chn_class.Channel):
    #===============================================================================
    # define class variables
    #===============================================================================
    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.guid = "A6FF1534-42F3-11DD-8F18-08F555D89593"
        self.mainListUri = "http://feeds.feedburner.com/command-n/h264"
        self.baseUrl = ""
        self.icon = "commandnicon.png"
        self.iconLarge = "commandnlarge.png"
        self.noImage = "commandnimage.png"
        self.channelName = "Command-N"
        self.channelDescription = "Videos from Command-N"
        self.moduleName = "chn_commandn.py"
        self.maxXotVersion = "3.2.0"
        
        #self.backgroundImage = ""
        #self.backgroundImage16x9 = ""
        self.requiresLogon = False
        
        self.contextMenuItems = []
        self.contextMenuItems.append(contextmenu.ContextMenuItem("Download Item", "CtMnDownloadItem", itemTypes="video", completeStatus=True))
        self.contextMenuItems.append(contextmenu.ContextMenuItem("Play using Mplayer", "CtMnPlayMplayer", itemTypes="video", completeStatus=True))
        self.contextMenuItems.append(contextmenu.ContextMenuItem("Play using DVDPlayer", "CtMnPlayDVDPlayer", itemTypes="video", completeStatus=True))
        
        
        self.episodeItemRegex = "<item>.*<title>([^<]+).*<link>([^<]+).*</item>"
        self.videoItemRegex = "<item>.*<title>([^<]+).*<link>([^<]+).*</item>"
        self.folderItemRegex = ''
        self.mediaUrlRegex = ''
        
        # remove the &amp; from the url
        self.pageNavigationRegex = "<a class='pView pnNumbers'  href='([^?]+\?lpage=)(\d+)([^']+)"  
        self.pageNavigationRegexIndex = 1

        #==========================================================================
        # non standard items
        self.categoryName = ""
        
        return True
    
    #==============================================================================
    def ParseMainList(self):
        """
            Add some custom categories here
        """
        items = []
        
        item = common.clistItem("Command-N Video RSS", "http://feeds.feedburner.com/command-n/h264")
        item.icon = self.folderIcon
        items.append(item)
        
        #item = common.clistItem("Meest bekeken videos", "http://www.myvideo.nl/news.php?rubrik=tjyec")
        #item.icon = self.folderIcon
        #items.append(item)

        #item = common.clistItem("Meest besproken videos", "http://www.myvideo.nl/news.php?rubrik=vpjpr")
        #item.icon = self.folderIcon
        #items.append(item)        
        
        #item = common.clistItem("Best beoordeelde videos", "http://www.myvideo.nl/news.php?rubrik=xayvg")
        #item.icon = self.folderIcon
        #items.append(item)        
        
        #item = common.clistItem("Favoriete videos", "http://www.myvideo.nl/news.php?rubrik=pcvbc")
        #item.icon = self.folderIcon
        #items.append(item)        
        
        return items + chn_class.Channel.ParseMainList(self)
    
    #==============================================================================
    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!
        """
        logFile.info("Performing Pre-Processing")
        _items = []
        
        # extract the category name from the pagedata
        #results = common.DoRegexFindAll("in de categorie\W+<span class='[^']+'>[^;]+;([^<]+)&quot", data)
        
        if len(results)> 0:
            self.categoryName = common.ConvertHTMLEntities(results[0])
        
        logFile.debug("Pre-Processing finished")
        return (data, _items)
    
    #==============================================================================
    def CreateEpisodeItem(self, resultSet):
        """
        Accepts an arraylist of results. It returns an item.
        """
        #logFile.info('starting CreateEpisodeItem for %s', self.channelName)
        #<a class='nArrow' href='([^']+)' title='[^']*'>([^<]+)</a>
        #                            0                     1                                
        item = common.clistItem(resultSet[0],common.StripAmp("%s%s" % (self.baseUrl, resultSet[1])))
        item.icon = self.icon
        logFile.debug("%s (%s)", item.name, item.url)
        return item
    
    #=============================================================================
    def CreateVideoItem(self, resultSet):
        """
        Accepts an arraylist of results. It returns an item.
        """
#        logFile.debug('starting FormatVideoItem for %s', self.channelName)
        #<img id='([^']+)' src='([^']+)' class='vThumb' alt='[^']*'/></a></div></div><div class='sCenter vTitle'><span class='title'><a[^>]+title='([^']+)'>
        #            0            1                                                                                                                    2
#       name = common.ConvertHTMLEntities(resultSet[2])
        item = common.clistItem(name, common.StripAmp("%s%s" % (self.baseUrl, resultSet[0])))
        
   #     item.description = "%s\n%s" % (self.categoryName, resultSet[0])
        item.icon = self.icon
        item.thumb = self.noImage
        #item.thumbUrl = resultSet[1]
        
        # now create the video url using the
        # http://myvideo-550.vo.llnwd.net/nl/d3/movie7/4a/thumbs/3384551_1.jpg
        # http://myvideo-550.vo.llnwd.net/nl/d3/movie7/4a/3384551.flv
        
        # het script: http://myvideo-906.vo.llnwd.net/nl/d2/movie4/d93548906.flv
        # de pagina:  http://myvideo-906.vo.llnwd.net/nl/d2/movie4/d9/3548906.flv
        
        #urlResult = common.DoRegexFindAll("(http://myvideo[^_]+)/thumbs(/\d+)_\d+.jpg", item.thumbUrl)
        #item.mediaurl = ""
        #if len(urlResult)>0:
        #    for part in urlResult[0]:
        #        item.mediaurl = "%s%s" % (item.mediaurl, part)
      #  item.mediaurl = resultSet[1]
        
       # logFile.debug("Updated mediaurl for %s to: %s", item.name, item.mediaurl)
        item.type = 'video'
   #     item.complete = False
    
        return item
    
    #=============================================================================
    def UpdateVideoItem(self, item):
        """
        Accepts an item. It returns an updated item.
        """
        logFile.debug('starting UpdateVideoItem for %s (%s)',item.name, self.channelName)
        item.thumb = self.CacheThumb(item.thumbUrl)
        item.complete = True
        return item

    #==============================================================================
    # ContextMenu functions
    #==============================================================================
    def CtMnDownloadItem(self, selectedIndex):
        item = self.listItems[selectedIndex]
        self.listItems[selectedIndex] = self.DownloadEpisode(item)

    def CtMnPlayMplayer(self, selectedIndex):
        item = self.listItems[selectedIndex]
        self.PlayVideoItem(item, "mplayer")
    
    def CtMnPlayDVDPlayer(self, selectedIndex):
        item = self.listItems[selectedIndex]
        self.PlayVideoItem(item,"dvdplayer")    
    
    #==============================================================================
    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 + ".flv"
            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')



- ^Mask^ - 2008-11-02

* ^Mask^ hides (Don't kill me for the mess Tongue)

Looking forward to your suggestions!


- ^Mask^ - 2008-11-05

Hmmmz, hope I didnt scare you off! Appreciate it if you can take a look at my script Basje! Smile


- Basje - 2008-11-05

^Mask^ Wrote:Hmmmz, hope I didnt scare you off! Appreciate it if you can take a look at my script Basje! Smile

You didn't scare me. I am having a look as we speak. I will let you know the results. I can tell you that I don't have the time to update the documentation, but I will try to help you out anyway.


- Basje - 2008-11-05

^Mask^ Wrote:/me hides (Don't kill me for the mess Tongue)

Looking forward to your suggestions!

I looked at it, and from what I see, I have the impression dat you do not have no clue what happens in the current channels? Let me explain shortly:

XOT uses a Programs - Files/Folders - Files/Folders - ..............structure. That means that:

- ParseMainlists gives you a list of programs and does not need to be used, because you can define stuff in the CreateEpisodeItem method. It uses the results from the regex which are in the "resultSet" parameter that is passed on to the method.

When a program is selected

- CreateFolderItem creates a folder item using the regex and it's matching results, which are in the "resultSet" parameter that is passed on to the method.
- CreateVideoitem creates a video item using the regex and it's matching results, which are in the "resultSet" parameter that is passed on to the method.

- UpdateVideoItem is called when the Complete property of a videoItem is not set. It can for example determine the mediaUrl or download a thumb.

So to be short. A basic channel only needs:
- InitialiseVariables (with correct parameters, regexes and a unique GUID (so not a copied one).
- CreateEpisodeItem
- CreateVideoItem
- CreateFolderItem
- UpdateVideoItem

So using only those methods, try again and use the chn_net5.py as an example. That one is really basic and should help you out.


svt - freddeg - 2008-11-06

Hi I'm tying to play aktuelt but i cant get it to work.

Log:
Code:
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - Fetching info for 'Måndag 3 november'. Setting:
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - | Description: Start
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - | Nyheter
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - | Aktuellt
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - | Aktuellt 21
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - | Måndag 3 november
20081106 16:38:20 - DEBUG    - guicontroller.py - 127 - + Image: /home/fredde/.xbmc/scripts/test/channels/svt/svtimage.png
20081106 16:38:20 - DEBUG    - guicontroller.py - 146 - Showing rating: None
20081106 16:38:20 - DEBUG    - chn_svt.py       - 216 - Parsing ASX
20081106 16:38:20 - INFO     - uriopener.py     - 148 - Opening requested uri Async: http://www.svt.se/content/1/c6/32/93/31/081103aktuellt21.asx (already 1 threads)
20081106 16:38:21 - INFO     - uriopener.py     - 417 - Determining which Progessbar to use....
20081106 16:38:21 - INFO     - uriopener.py     - 422 - FileSize is known (fileSize=225)
20081106 16:38:21 - INFO     - uriopener.py     - 194 - Url http://www.svt.se/content/1/c6/32/93/31/081103aktuellt21.asx was opened successfully
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - On Click error showing episodes
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - | Traceback (most recent call last):
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |   File "/home/fredde/.xbmc/scripts/test/resources/libs/chn_class.py", line 365, in onClick
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |     self.PlayVideoItem(item)
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |   File "/home/fredde/.xbmc/scripts/test/channels/svt/chn_svt.py", line 206, in PlayVideoItem
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |     item.mediaurl = self.ReplaceMediaUrl(item.mediaurl)
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |   File "/home/fredde/.xbmc/scripts/test/channels/svt/chn_svt.py", line 220, in ReplaceMediaUrl
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - |     mediaurl = results[0]['href']
20081106 16:38:21 - CRITICAL - chn_class.py     - 409 - | TypeError: string indices must be integers
20081106 16:38:21 - DEBUG    - chn_class.py     - 241 - onAction (with buttonid=11 and id=7) detected (ThrdID=-1491080304)