summaryrefslogtreecommitdiff
path: root/plugin.video.mediathekview/resources/lib/kodi
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.mediathekview/resources/lib/kodi')
-rw-r--r--plugin.video.mediathekview/resources/lib/kodi/KodiAddon.py52
-rw-r--r--plugin.video.mediathekview/resources/lib/kodi/KodiUI.py40
2 files changed, 73 insertions, 19 deletions
diff --git a/plugin.video.mediathekview/resources/lib/kodi/KodiAddon.py b/plugin.video.mediathekview/resources/lib/kodi/KodiAddon.py
index f9c0cd7..4081044 100644
--- a/plugin.video.mediathekview/resources/lib/kodi/KodiAddon.py
+++ b/plugin.video.mediathekview/resources/lib/kodi/KodiAddon.py
@@ -3,14 +3,19 @@
#
# -- Imports ------------------------------------------------
-import sys, urllib
-import xbmc, xbmcgui, xbmcaddon, xbmcplugin
+import os
+import sys
+import urllib
+
+import xbmc
+import xbmcgui
+import xbmcaddon
+import xbmcplugin
from resources.lib.kodi.KodiLogger import KodiLogger
# -- Classes ------------------------------------------------
class KodiAddon( KodiLogger ):
-
def __init__( self ):
self.addon = xbmcaddon.Addon()
self.addon_id = self.addon.getAddonInfo( 'id' )
@@ -29,6 +34,7 @@ class KodiAddon( KodiLogger ):
return self.addon.setSetting( setting_id, value )
def doAction( self, action ):
+ self.debug( 'Triggered action {}', action )
xbmc.executebuiltin( 'Action({})'.format( action ) )
class KodiService( KodiAddon ):
@@ -66,3 +72,43 @@ class KodiPlugin( KodiAddon ):
def endOfDirectory( self, succeeded = True, updateListing = False, cacheToDisc = True ):
xbmcplugin.endOfDirectory( self.addon_handle, succeeded, updateListing, cacheToDisc )
+
+
+class KodiInterlockedMonitor( xbmc.Monitor ):
+ def __init__( self, service, setting_id ):
+ super( KodiInterlockedMonitor, self ).__init__()
+ self.instance_id = ''.join( format( x, '02x' ) for x in bytearray( os.urandom( 16 ) ) )
+ self.setting_id = setting_id
+ self.service = service
+
+ def RegisterInstance( self, waittime = 1 ):
+ if self.BadInstance():
+ self.service.info( 'Found other instance with id {}', self.instance_id )
+ self.service.info( 'Startup delayed by {} second(s) waiting the other instance to shut down', waittime )
+ self.service.setSetting( self.setting_id, self.instance_id )
+ xbmc.Monitor.waitForAbort( self, waittime )
+ else:
+ self.service.setSetting( self.setting_id, self.instance_id )
+
+ def UnregisterInstance( self ):
+ self.service.setSetting( self.setting_id, '' )
+
+ def BadInstance( self ):
+ instance_id = self.service.getSetting( self.setting_id )
+ return len( instance_id ) > 0 and self.instance_id != instance_id
+
+ def abortRequested( self ):
+ return self.BadInstance() or xbmc.Monitor.abortRequested( self )
+
+ def waitForAbort( self, timeout = None ):
+ if timeout is None:
+ # infinite wait
+ while not self.abortRequested():
+ if xbmc.Monitor.waitForAbort( self, 1 ):
+ return True
+ return True
+ else:
+ for _ in range( timeout ):
+ if self.BadInstance() or xbmc.Monitor.waitForAbort( self, 1 ):
+ return True
+ return self.BadInstance()
diff --git a/plugin.video.mediathekview/resources/lib/kodi/KodiUI.py b/plugin.video.mediathekview/resources/lib/kodi/KodiUI.py
index dee8dbb..138af50 100644
--- a/plugin.video.mediathekview/resources/lib/kodi/KodiUI.py
+++ b/plugin.video.mediathekview/resources/lib/kodi/KodiUI.py
@@ -3,15 +3,21 @@
#
# -- Imports ------------------------------------------------
-import xbmc, xbmcgui
+import xbmc
+import xbmcgui
+import xbmcaddon
# -- Classes ------------------------------------------------
class KodiUI( object ):
def __init__( self ):
- self.bgdialog = None
+ self.addon = xbmcaddon.Addon()
+ self.language = self.addon.getLocalizedString
+ self.bgdialog = KodiBGDialog()
- def GetEnteredText( self, deftext = '', heading = '', hidden = False ):
+ def GetEnteredText( self, deftext = None, heading = None, hidden = False ):
+ heading = self.language( heading ) if isinstance( heading, int ) else heading if heading is not None else ''
+ deftext = self.language( deftext ) if isinstance( deftext, int ) else deftext if deftext is not None else ''
keyboard = xbmc.Keyboard( deftext, heading, 1 if hidden else 0 )
keyboard.doModal()
if keyboard.isConfirmed():
@@ -19,39 +25,39 @@ class KodiUI( object ):
return deftext
def ShowNotification( self, heading, message, icon = xbmcgui.NOTIFICATION_INFO, time = 5000, sound = True ):
+ heading = self.language( heading ) if isinstance( heading, int ) else heading
+ message = self.language( message ) if isinstance( message, int ) else message
xbmcgui.Dialog().notification( heading, message, icon, time, sound )
def ShowWarning( self, heading, message, time = 5000, sound = True ):
- xbmcgui.Dialog().notification( heading, message, xbmcgui.NOTIFICATION_WARNING, time, sound )
+ self.ShowNotification( heading, message, xbmcgui.NOTIFICATION_WARNING, time, sound )
def ShowError( self, heading, message, time = 5000, sound = True ):
- xbmcgui.Dialog().notification( heading, message, xbmcgui.NOTIFICATION_ERROR, time, sound )
+ self.ShowNotification( heading, message, xbmcgui.NOTIFICATION_ERROR, time, sound )
def ShowBGDialog( self, heading = None, message = None ):
- if self.bgdialog is None:
- self.bgdialog = xbmcgui.DialogProgressBG()
- self.bgdialog.create( heading, message )
- else:
- self.bgdialog.update( 0, heading, message )
+ self.bgdialog.Create( heading, message )
def UpdateBGDialog( self, percent, heading = None, message = None ):
- if self.bgdialog is not None:
- self.bgdialog.update( percent, heading, message )
+ self.bgdialog.Update( percent, heading, message )
+
+ def HookBGDialog( self, blockcount, blocksize, totalsize ):
+ self.bgdialog.UrlRetrieveHook( blockcount, blocksize, totalsize )
def CloseBGDialog( self ):
- if self.bgdialog is not None:
- self.bgdialog.close()
- del self.bgdialog
- self.bgdialog = None
+ self.bgdialog.Close()
class KodiBGDialog( object ):
def __init__( self ):
+ self.language = xbmcaddon.Addon().getLocalizedString
self.bgdialog= None
def __del__( self ):
self.Close()
def Create( self, heading = None, message = None ):
+ heading = self.language( heading ) if isinstance( heading, int ) else heading
+ message = self.language( message ) if isinstance( message, int ) else message
if self.bgdialog is None:
self.bgdialog = xbmcgui.DialogProgressBG()
self.bgdialog.create( heading, message )
@@ -60,6 +66,8 @@ class KodiBGDialog( object ):
def Update( self, percent, heading = None, message = None ):
if self.bgdialog is not None:
+ heading = self.language( heading ) if isinstance( heading, int ) else heading
+ message = self.language( message ) if isinstance( message, int ) else message
self.bgdialog.update( percent, heading, message )
def UrlRetrieveHook( self, blockcount, blocksize, totalsize ):