[NewAddon] service.lowerthird
forked from Lanik's Banners
This commit is contained in:
207
service.lowerthird/standalone.py
Normal file
207
service.lowerthird/standalone.py
Normal file
@@ -0,0 +1,207 @@
|
||||
# ============================================================
|
||||
# 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 - yoffset)
|
||||
|
||||
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")
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
# ------------------------------------------------------------
|
||||
Reference in New Issue
Block a user