208 lines
7.2 KiB
Python
208 lines
7.2 KiB
Python
# ============================================================
|
|
# LowerThird Notifications - Forked by Oli Passey from:
|
|
# KODI Banners - Version 1.9 by D. Lanik (2016)
|
|
# ------------------------------------------------------------
|
|
# Display banners when playing any video
|
|
# ------------------------------------------------------------
|
|
# License: GPL (http://www.gnu.org/licenses/gpl-3.0.html)
|
|
# ============================================================
|
|
|
|
import xbmc
|
|
import xbmcaddon
|
|
import xbmcgui
|
|
import xbmcvfs
|
|
import urlparse
|
|
import os
|
|
import sys
|
|
from PIL import Image
|
|
from xml.dom import minidom
|
|
|
|
# ============================================================
|
|
# Define Overlay Class
|
|
# ============================================================
|
|
|
|
|
|
class OverlayText(object):
|
|
def __init__(self, windowid):
|
|
self.showing = False
|
|
self.window = xbmcgui.Window(windowid)
|
|
viewport_w, viewport_h = self._get_skin_resolution()
|
|
|
|
pos = "20,20".split(",")
|
|
pos_x = (viewport_w + int(pos[0]), int(pos[0]))[int(pos[0]) > 0]
|
|
pos_y = (viewport_h + int(pos[1]), int(pos[1]))[int(pos[1]) > 0]
|
|
self.imageTop = xbmcgui.ControlImage(pos_x, pos_y, 1240, 120, os.path.join("media", "banners", "generic_01.jpg"), aspectRatio=0)
|
|
|
|
pw = int((viewport_w - 1240) / 2)
|
|
ph = int((viewport_h - 60) / 2)
|
|
pp = "%3d,%3d" % (pw, ph)
|
|
pos = pp.split(",")
|
|
pos_x = (viewport_w + int(pos[0]), int(pos[0]))[int(pos[0]) > 0]
|
|
pos_y = (viewport_h + int(pos[1]), int(pos[1]))[int(pos[1]) > 0]
|
|
self.imageCenter = xbmcgui.ControlImage(pos_x, pos_y, 1240, 120, os.path.join("media", "banners", "generic_01.jpg"), aspectRatio=0)
|
|
|
|
pos = "20,-140".split(",")
|
|
pos_x = (viewport_w + int(pos[0]), int(pos[0]))[int(pos[0]) > 0]
|
|
pos_y = (viewport_h + int(pos[1]), int(pos[1]))[int(pos[1]) > 0]
|
|
self.imageBottom = xbmcgui.ControlImage(pos_x, pos_y, 1240, 120, os.path.join("media", "banners", "generic_01.jpg"), aspectRatio=0)
|
|
|
|
def scaleimage(self, width, height, yoffset):
|
|
viewport_w, viewport_h = self._get_skin_resolution()
|
|
|
|
if width > viewport_w:
|
|
if yoffset > 0:
|
|
width = viewport_w - (yoffset * 2)
|
|
xpos = yoffset
|
|
else:
|
|
width = viewport_w
|
|
xpos = 0
|
|
else:
|
|
xpos = (viewport_w - width) / 2
|
|
|
|
self.imageBottom.setHeight(height)
|
|
self.imageBottom.setWidth(width)
|
|
self.imageBottom.setPosition(xpos, viewport_h - height)
|
|
|
|
self.imageCenter.setHeight(height)
|
|
self.imageCenter.setWidth(width)
|
|
self.imageCenter.setPosition(xpos, (viewport_h - height) / 2 )
|
|
|
|
self.imageTop.setHeight(height)
|
|
self.imageTop.setWidth(width)
|
|
self.imageTop.setPosition(xpos, yoffset)
|
|
|
|
def show(self):
|
|
self.showing = True
|
|
self.window.addControl(self.imageBottom)
|
|
self.window.addControl(self.imageCenter)
|
|
self.window.addControl(self.imageTop)
|
|
|
|
def hide(self):
|
|
self.showing = False
|
|
self.window.removeControl(self.imageBottom)
|
|
self.window.removeControl(self.imageCenter)
|
|
self.window.removeControl(self.imageTop)
|
|
|
|
def _close(self):
|
|
if self.showing:
|
|
self.hide()
|
|
else:
|
|
pass
|
|
try:
|
|
self.window.clearProperties()
|
|
except Exception:
|
|
pass
|
|
|
|
# ============================================================
|
|
# Get resolution
|
|
# ============================================================
|
|
|
|
def _get_skin_resolution(self):
|
|
xmlFile = os.path.join(xbmc.translatePath("special://skin/"), "addon.xml")
|
|
xmldoc = minidom.parse(xmlFile)
|
|
|
|
res = xmldoc.getElementsByTagName("res")
|
|
xval = int(res[0].attributes["width"].value)
|
|
yval = int(res[0].attributes["height"].value)
|
|
|
|
return(xval, yval)
|
|
|
|
# ============================================================
|
|
# Display banner
|
|
# ============================================================
|
|
|
|
|
|
def displayBanner(imageloc, displaytime, position):
|
|
global myWidget
|
|
global intYOffset
|
|
global __addon__
|
|
|
|
__addon__ = xbmcaddon.Addon(id='service.lowerthird')
|
|
|
|
ActWin = xbmcgui.getCurrentWindowId()
|
|
myWidget = OverlayText(ActWin)
|
|
myWidget.show()
|
|
|
|
if position == 'top':
|
|
myWidget.imageBottom.setImage("")
|
|
myWidget.imageCenter.setImage("")
|
|
myWidget.imageTop.setImage(imageloc)
|
|
elif position == 'bottom':
|
|
myWidget.imageBottom.setImage(imageloc)
|
|
myWidget.imageCenter.setImage("")
|
|
myWidget.imageTop.setImage("")
|
|
else:
|
|
myWidget.imageBottom.setImage("")
|
|
myWidget.imageCenter.setImage(imageloc)
|
|
myWidget.imageTop.setImage("")
|
|
|
|
image = Image.open(open(imageloc, 'rb'))
|
|
width, height = image.size
|
|
myWidget.scaleimage(width, height, intYOffset)
|
|
|
|
xbmc.log('BANNERS >> STANDALONE INITIALIZING OVERLAY')
|
|
|
|
xbmc.sleep(displaytime)
|
|
|
|
try:
|
|
myWidget._close()
|
|
except Exception:
|
|
pass
|
|
|
|
myWidget = None
|
|
|
|
|
|
# ============================================================
|
|
# ------------------------------------------------------------
|
|
# Main
|
|
# ------------------------------------------------------------
|
|
# ============================================================
|
|
|
|
__addon__ = xbmcaddon.Addon(id='service.lowerthird')
|
|
__version__ = __addon__.getAddonInfo('version')
|
|
__addonwd__ = xbmc.translatePath(__addon__.getAddonInfo('path').decode("utf-8"))
|
|
|
|
myWidget = None
|
|
rt = None
|
|
intYOffset = int(__addon__.getSetting('yoffset'))
|
|
|
|
if __name__ == '__main__':
|
|
xbmc.log("BANNERS >> STANDALONE STARTED VERSION %s" % (__version__))
|
|
|
|
myWidget = None
|
|
|
|
try:
|
|
params = urlparse.parse_qs('&'.join(sys.argv[1:]))
|
|
|
|
imageloc = params.get('imageloc', None)[0]
|
|
displaytime = int(params.get('displaytime', None)[0])
|
|
position = params.get('position', None)[0]
|
|
except Exception:
|
|
imageloc = None
|
|
displaytime = None
|
|
position = None
|
|
|
|
if imageloc and displaytime and position:
|
|
success = xbmcvfs.exists(imageloc)
|
|
|
|
if success and displaytime > 1000 and displaytime < 60000 and (position == 'top' or position == 'bottom' or position == 'center'):
|
|
xbmc.log("BANNERS >> STANDALONE DISPLAY IMAGE: " + str(imageloc) + " >> TIMEOUT: " + str(displaytime) + " >> POSITION: " + str(position))
|
|
displayBanner(imageloc, displaytime, position)
|
|
else:
|
|
xbmc.log("BANNERS >> STANDALONE DISPLAY IMAGE ERROR: " + str(imageloc) + " >> TIMEOUT: " + str(displaytime) + " >> POSITION: " + str(position))
|
|
else:
|
|
__addon__.openSettings()
|
|
|
|
xbmc.log("BANNERS >> STANDALONE FINISHED")
|
|
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|
|
# ------------------------------------------------------------
|