Kodi python addon windows events

1.1k Views Asked by At

I try to code a small python addon that detect the opening of a specific window then access to a custom control i added to the XML of the window.

I have modified the VideoOSD.xml and add a control slider. Now, i need to detect onWindowOpen to control the slider.

Here is where i am:

#!/usr/bin/python

import xbmc
import xbmcgui
import subprocess
import os.path
import re
import time


class XBMCPlayer( xbmc.Player ):

    def __init__( self, *args ):
        pass

    def onPlayBackStarted( self ):
        CurrentWindowID = 0
        while True :

            WindowID = xbmcgui.getCurrentWindowDialogId();

            if WindowID != CurrentWindowID:
                CurrentWindowID = WindowID
                if xbmcgui.getCurrentWindowDialogId() == 12901:

                    w = xbmcgui.WindowDialog(CurrentWindowID) # 12901 VideoOSD.xml id
                    c = w.getControl(9000) # 9000 ID of slider control
                    c.setPercent(50.0)


player = XBMCPlayer()


while(not xbmc.abortRequested):
    xbmc.sleep(100)

And VideoOSD.xml :

<?xml version="1.0" encoding="UTF-8"?>
<window>
    <!-- videoosd -->
    <defaultcontrol always="true">5</defaultcontrol>
            <animation type="WindowOpen">
                <effect type="zoom" start="90" end="100" center="auto" tween="back" easing="out" time="200"/>
                <effect type="fade" start="0" end="100" time="200"/>
            </animation>

    <controls>



        <!-- Player forwarding/rewinding -->
        <control type="group">
            <left>150</left>
            <top>795</top>
            <width>140</width>
            <height>60</height>
            <visible>!Window.IsVisible(VideoBookmarks) + !Window.IsVisible(DialogSettings.xml) + !Window.IsVisible(DialogConfirm.xml)</visible>
            <visible>player.forwarding | player.rewinding | player.paused | player.istempo</visible>
            <animation type="WindowOpen" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="90" end="100" center="auto" tween="back" easing="out" time="200"/>
                <effect type="fade" start="0" end="100" time="200"/>
            </animation>
            <animation type="WindowClose" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="100" end="90" center="auto" easing="in" time="200"/>
                <effect type="fade" start="100" end="0" time="200"/>
            </animation>

            <!-- Background -->
            <control type="image">
                <width>140</width>
                <height>60</height>
                <texture colordiffuse="$VAR[OverlayColor]">dialogs/Background.png</texture>
            </control>

            <!-- Status -->
            <control type="label">
                <width>140</width>
                <height>60</height>
                <font>Font36</font>
                <align>center</align>
                <label>$VAR[PlayerStatus]</label>
                <textcolor>DialogColor2</textcolor>
            </control>

            <!-- Pause -->
            <control type="image">
                <left>40</left>
                <width>60</width>
                <height>60</height>
                <texture colordiffuse="DialogColor1">osd/OSDPauseNF.png</texture>
                <visible>player.paused</visible>
            </control>

        </control>

        <!-- Player skipping -->
        <control type="group">
            <right>150</right>
            <top>795</top>
            <width>140</width>
            <height>60</height>
            <visible>!Window.IsVisible(VideoBookmarks) + !Window.IsVisible(DialogSettings.xml)</visible>
            <visible>[Player.DisplayAfterSeek + Integer.IsGreater(Player.ChapterCount,0)] | Integer.IsGreater(MusicPlayer.PlaylistLength,0) | !String.IsEmpty(Player.SeekStepSize)</visible>

            <!-- Background -->
            <control type="image">
                <width>140</width>
                <height>60</height>
                <texture colordiffuse="$VAR[OverlayColor]">dialogs/Background.png</texture>
            </control>

            <!-- Status -->
            <control type="label">
                <width>140</width>
                <height>60</height>
                <font>Font27</font>
                <align>center</align>
                <label>[B]$INFO[Player.Chapter,(,/]$INFO[Player.ChapterCount,,)][/B][B]$INFO[MusicPlayer.PlaylistPosition,(,/]$INFO[MusicPlayer.PlaylistLength,,)][/B]</label>
                <textcolor>DialogColor2</textcolor>
                <visible>!Window.IsVisible(visualisation) + String.IsEmpty(Player.SeekStepSize)</visible>
            </control>

            <!-- Status -->
            <control type="label">
                <width>140</width>
                <height>60</height>
                <font>Font27</font>
                <align>center</align>
                <label>[B]$INFO[MusicPlayer.PlaylistPosition,(,/]$INFO[MusicPlayer.PlaylistLength,,)][/B]</label>
                <textcolor>DialogColor2</textcolor>
                <visible>Window.IsVisible(visualisation) + String.IsEmpty(Player.SeekStepSize)</visible>
            </control>

            <!-- Status -->
            <control type="label">
                <width>140</width>
                <height>60</height>
                <font>Font27</font>
                <align>center</align>
                <visible>!String.IsEmpty(Player.SeekStepSize)</visible>
                <label>$INFO[Player.SeekStepSize]</label>
                <textcolor>DialogColor2</textcolor>
            </control>

        </control>

        <!-- Progress -->
        <control type="group">
            <visible>!Window.IsVisible(DialogSettings.xml)</visible>
            <left>150</left>
            <top>870</top>
            <width>1620</width>
            <height>60</height>

            <animation type="WindowOpen" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="90" end="100" center="auto" tween="back" easing="out" time="200"/>
                <effect type="fade" start="0" end="100" time="200"/>
            </animation>
            <animation type="WindowClose" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="100" end="90" center="auto" easing="in" time="200"/>
                <effect type="fade" start="100" end="0" time="200"/>
            </animation>

            <!-- Background -->
            <control type="image">
                <width>1620</width>
                <height>60</height>
                <texture colordiffuse="$VAR[OverlayColor]">dialogs/Background.png</texture>
            </control>

            <!--  Current position/Time remaining -->
            <control type="label">
                <left>20</left>
                <width>260</width>
                <height>60</height>
                <font>Font27</font>
                <textcolor>DialogColor2</textcolor>
                <label>$INFO[Player.Time] / $INFO[Player.Duration]</label>
            </control>

            <control type="slider" id="9000">
                <left>280</left>
                <top>20</top>
                <width>920</width>
                <height>20</height>
                <texturesliderbar border="10,0,10,0">osd/OSDSliderBack.png</texturesliderbar>
                <textureslidernib border="10,0,10,0">osd/OSDSliderNib.png</textureslidernib>
                <textureslidernibfocus border="10,0,10,0">osd/OSDSliderNib.png</textureslidernibfocus>
            </control> 

            <!-- Seek slider 
            <control type="slider">
                <left>280</left>
                <top>20</top>
                <width>920</width>
                <height>20</height>
                <texturesliderbar />
                <textureslidernib />
                <textureslidernibfocus />
                <action>seek</action>
            </control>
            -->

            <!--  Progress bar -->
            <control type="progress">
                <left>280</left>
                <top>20</top>
                <width>920</width>
                <height>20</height>
                <info>Player.Progress</info>
                <texturebg border="2" colordiffuse="DialogColor2">osd/OSDProgressBack.png</texturebg>
                <lefttexture>-</lefttexture>
                <midtexture border="2" colordiffuse="DialogColor1">osd/OSDProgressBar.png</midtexture>
                <righttexture>-</righttexture>
                <overlaytexture>-</overlaytexture>
            </control>

            <!--  Cache bar -->
            <control type="progress">
                <left>280</left>
                <top>20</top>
                <width>920</width>
                <height>20</height>
                <info>Player.ProgressCache</info>
                <texturebg colordiffuse="DialogColor2" border="2">osd/OSDProgressBack.png</texturebg>
                <lefttexture>-</lefttexture>
                <midtexture colordiffuse="OSDCache" border="2">osd/OSDProgressBar.png</midtexture>
                <righttexture>-</righttexture>
                <overlaytexture>-</overlaytexture>
            </control>

            <!-- Current Time/End Time -->
            <control type="label">
                <left>1001</left>
                <width>600</width>
                <height>60</height>
                <align>right</align>
                <font>Font27</font>
                <textcolor>DialogColor2</textcolor>
                <label>$INFO[System.Time,$LOCALIZE[142] , / ]$INFO[Player.FinishTime,$LOCALIZE[19081] ]</label>
            </control>

        </control>

        <control type="group">
            <left>150</left>
            <top>945</top>
            <width>1620</width>
            <height>60</height>
            <visible>!Window.IsVisible(VideoBookmarks) + !Window.IsVisible(DialogSettings.xml)</visible>
            <animation type="WindowOpen" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="90" end="100" center="auto" tween="back" easing="out" time="200"/>
                <effect type="fade" start="0" end="100" time="200"/>
            </animation>
            <animation type="WindowClose" condition="!Window.IsActive(seekbar) + !Window.IsActive(fullscreeninfo)">
                <effect type="zoom" start="100" end="90" center="auto" easing="in" time="200"/>
                <effect type="fade" start="100" end="0" time="200"/>
            </animation>

            <!-- Background -->
            <control type="image">
                <width>1620</width>
                <height>60</height>
                <texture colordiffuse="$VAR[OverlayColor]">dialogs/Background.png</texture>
            </control>

            <!-- Controls -->
            <control type="grouplist">
                <width>540</width>
                <height>60</height>
                <itemgap>0</itemgap>
                <onleft>20</onleft>
                <onright>12</onright>
                <onup>30</onup>
                <ondown>30</ondown>
                <orientation>horizontal</orientation>

                <!-- Spacer -->
                <control type="image" id="40">
                    <left>0</left>
                    <top>0</top>
                    <width>7</width>
                    <height>60</height>
                    <texture>transparent.png</texture>
                </control>

                <!-- Skip Back -->
                <control type="button" id="1">
                    <width>9</width>
                    <height>60</height>
                    <onleft>2</onleft>
                    <onright>4</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickBackwardEnd.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickBackwardEnd.png</texturenofocus>
                    <onclick>PlayerControl(Previous)</onclick>
                    <visible>!VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- Rewind -->
                <control type="togglebutton" id="2">
                    <width>18</width>
                    <height>60</height>
                    <onleft>8</onleft>
                    <onright>10</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickBackward.png</texturenofocus>
                    <alttexturefocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</alttexturefocus>
                    <alttexturenofocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</alttexturenofocus>
                    <usealttexture>Control.HasFocus(1)</usealttexture>
                    <onclick>PlayerControl(Rewind)</onclick>
                    <visible>Player.SeekEnabled</visible>
                </control>
                <!-- Tempo Down -->
                <control type="togglebutton" id="3">
                    <width>18</width>
                    <height>60</height>
                    <onleft>8</onleft>
                    <onright>10</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickBackward.png</texturenofocus>
                    <alttexturefocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</alttexturefocus>
                    <alttexturenofocus colordiffuse="DialogColor1">osd/OSDTrickBackward.png</alttexturenofocus>
                    <usealttexture>Control.HasFocus(1) | Control.HasFocus(2)</usealttexture>
                    <onclick>PlayerControl(TempoDown)</onclick>
                    <visible>Player.SeekEnabled</visible>
                    <enable>Player.TempoEnabled</enable>
                </control>

                <!-- Spacer -->
                <control type="image" id="41">
                    <left>0</left>
                    <top>0</top>
                    <width>7</width>
                    <height>60</height>
                    <texture>transparent.png</texture>
                </control>

                <!-- Up -->
                <control type="button" id="4">
                    <width>60</width>
                    <height>60</height>
                    <onleft>4</onleft>
                    <onright>6</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDUpNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDUpNF.png</texturenofocus>
                    <onclick>PlayerControl(Previous)</onclick>
                    <visible>VideoPlayer.Content(LiveTV)</visible>
                </control>

                <!-- Play/Pause -->
                <include condition="Player.PauseEnabled">OSDPlayStopButtons</include>
                <!-- Stop -->
                <include condition="!Player.PauseEnabled">OSDStopButton</include>

                <!-- Down -->
                <control type="button" id="7">
                    <width>60</width>
                    <height>60</height>
                    <onleft>5</onleft>
                    <onright>7</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDDownNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDDownNF.png</texturenofocus>
                    <onclick>PlayerControl(Next)</onclick>
                    <visible>VideoPlayer.Content(LiveTV)</visible>
                </control>

                <!-- Spacer -->
                <control type="image" id="42">
                    <left>0</left>
                    <top>0</top>
                    <width>7</width>
                    <height>60</height>
                    <texture>transparent.png</texture>
                </control>

                <!-- Tempo Up -->
                <control type="togglebutton" id="8">
                    <width>18</width>
                    <height>60</height>
                    <onleft>8</onleft>
                    <onright>10</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickForward.png</texturenofocus>
                    <alttexturefocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</alttexturefocus>
                    <alttexturenofocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</alttexturenofocus>
                    <usealttexture>Control.HasFocus(9) | Control.HasFocus(10)</usealttexture>
                    <onclick>PlayerControl(TempoUp)</onclick>
                    <visible>Player.SeekEnabled</visible>
                    <enable>Player.TempoEnabled</enable>
                </control>
                <!-- Fast Forward -->
                <control type="togglebutton" id="9">
                    <width>18</width>
                    <height>60</height>
                    <onleft>8</onleft>
                    <onright>10</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickForward.png</texturenofocus>
                    <alttexturefocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</alttexturefocus>
                    <alttexturenofocus colordiffuse="DialogColor1">osd/OSDTrickForward.png</alttexturenofocus>
                    <usealttexture>Control.HasFocus(10)</usealttexture>
                    <onclick>PlayerControl(Forward)</onclick>
                    <visible>Player.SeekEnabled</visible>
                </control>
                <!-- Next -->
                <control type="button" id="10">
                    <width>9</width>
                    <height>60</height>
                    <onleft>7</onleft>
                    <onright>9</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTrickForwardEnd.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTrickForwardEnd.png</texturenofocus>
                    <onclick>PlayerControl(Next)</onclick>
                    <visible>!VideoPlayer.Content(LiveTV)</visible>
                </control>

                <!-- Spacer -->
                <control type="image" id="43">
                    <left>0</left>
                    <top>0</top>
                    <width>7</width>
                    <height>60</height>
                    <texture>transparent.png</texture>
                </control>

                <!-- Record -->
                <control type="togglebutton" id="11">
                    <width>60</width>
                    <height>60</height>
                    <onleft>8</onleft>
                    <onright>10</onright>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDRecordOffNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDRecordOffNF.png</texturenofocus>
                    <alttexturefocus colordiffuse="DialogColor1">osd/OSDRecordOnNF.png</alttexturefocus>
                    <alttexturenofocus colordiffuse="DialogColor2">osd/OSDRecordOnNF.png</alttexturenofocus>
                    <usealttexture>Player.Recording</usealttexture>
                    <onclick>PlayerControl(Record)</onclick>
                    <visible>Player.CanRecord</visible>
                </control>

            </control>

            <!-- Options -->
            <control type="grouplist" id="30">
                <right>0</right>
                <width>360</width>
                <height>60</height>
                <align>right</align>
                <itemgap>0</itemgap>
                <onleft>11</onleft>
                <onright>1</onright>
                <onup>5</onup>
                <ondown>5</ondown>
                <orientation>horizontal</orientation>

                <!-- 3D mode -->
                <control type="button" id="12">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSD3DNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSD3DNF.png</texturenofocus>
                    <onclick>StereoMode</onclick>
                    <visible>VideoPlayer.IsStereoscopic</visible>
                </control>
                <!-- Video Settings -->
                <control type="button" id="13">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDVideoNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDVideoNF.png</texturenofocus>
                    <onclick>ActivateWindow(123)</onclick>
                </control>
                <!-- Audio Settings -->
                <control type="button" id="14">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDAudioNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDAudioNF.png</texturenofocus>
                    <onclick>ActivateWindow(124)</onclick>
                </control>
                <!-- Bookmarks -->
                <control type="button" id="15">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDBookmarksNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDBookmarksNF.png</texturenofocus>
                    <onclick>ActivateWindow(125)</onclick>
                    <visible>!VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- Subtitles -->
                <control type="button" id="16">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDSubtitlesNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDSubtitlesNF.png</texturenofocus>
                    <onclick>Close</onclick>
                    <onclick>ActivateWindow(SubtitleSearch)</onclick>
                    <visible>!VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- Channels -->
                <control type="button" id="17">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDChannelNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDChannelNF.png</texturenofocus>
                    <onclick>ActivateWindow(PVROSDChannels)</onclick>
                    <visible>VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- Channel EPG -->
                <control type="button" id="18">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDEPGNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDEPGNF.png</texturenofocus>
                    <onclick>ActivateWindow(PVROSDGuide)</onclick>
                    <visible>VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- Teletext -->
                <control type="button" id="19">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDTextNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDTextNF.png</texturenofocus>
                    <onclick>ActivateWindow(Teletext)</onclick>
                    <visible>VideoPlayer.Content(LiveTV)</visible>
                </control>
                <!-- DVD menu -->
                <control type="button" id="20">
                    <width>60</width>
                    <height>60</height>
                    <texturefocus colordiffuse="DialogColor1">osd/OSDDvdNF.png</texturefocus>
                    <texturenofocus colordiffuse="DialogColor2">osd/OSDDvdNF.png</texturenofocus>
                    <onclick>PlayerControl(ShowVideoMenu)</onclick>
                    <visible>VideoPlayer.HasMenu</visible>
                </control>

            </control>

        </control>

    </controls>

</window>

My log file says the control 9000 doesn't exist

0

There are 0 best solutions below