-
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
|
||||
Copyright (C) 2011-2013 Martijn Kaijser
|
||||
Copyright (C) 2013-2014 Team-XBMC
|
||||
Copyright (C) 2014-2019 Team Kodi
|
||||
|
||||
This file is part of service.xbmc.versioncheck
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
See LICENSES/GPL-3.0-or-later.txt for more information.
|
||||
|
||||
"""
|
||||
|
||||
from contextlib import closing
|
||||
import os
|
||||
import sys
|
||||
|
||||
import xbmc # pylint: disable=import-error
|
||||
import xbmcaddon # pylint: disable=import-error
|
||||
import xbmcgui # pylint: disable=import-error
|
||||
import xbmcvfs # pylint: disable=import-error
|
||||
|
||||
_ADDON = xbmcaddon.Addon('service.xbmc.versioncheck')
|
||||
_ADDON_NAME = _ADDON.getAddonInfo('name')
|
||||
if sys.version_info[0] >= 3:
|
||||
_ADDON_PATH = _ADDON.getAddonInfo('path')
|
||||
else:
|
||||
_ADDON_PATH = _ADDON.getAddonInfo('path').decode('utf-8')
|
||||
_ICON = _ADDON.getAddonInfo('icon')
|
||||
|
||||
|
||||
class Viewer:
|
||||
""" Show user a text viewer (WINDOW_DIALOG_TEXT_VIEWER)
|
||||
Include the text file for the viewers body in the resources/ directory
|
||||
|
||||
usage:
|
||||
script_path = os.path.join(_ADDON_PATH, 'resources', 'lib', 'version_check', 'viewer.py')
|
||||
xbmc.executebuiltin('RunScript(%s,%s,%s)' % (script_path, 'Heading', 'notice.txt'))
|
||||
|
||||
:param heading: text viewer heading
|
||||
:type heading: str
|
||||
:param filename: filename to use for text viewers body
|
||||
:type filename: str
|
||||
"""
|
||||
WINDOW = 10147
|
||||
CONTROL_LABEL = 1
|
||||
CONTROL_TEXTBOX = 5
|
||||
|
||||
def __init__(self, heading, filename):
|
||||
self.heading = heading
|
||||
self.filename = filename
|
||||
# activate the text viewer window
|
||||
xbmc.executebuiltin('ActivateWindow(%d)' % (self.WINDOW,))
|
||||
# get window
|
||||
self.window = xbmcgui.Window(self.WINDOW)
|
||||
# give window time to initialize
|
||||
xbmc.sleep(100)
|
||||
# set controls
|
||||
self.set_controls()
|
||||
|
||||
def set_controls(self):
|
||||
""" Set the window controls
|
||||
"""
|
||||
# get text viewer body text
|
||||
text = self.get_text()
|
||||
# set heading
|
||||
self.window.getControl(self.CONTROL_LABEL).setLabel('%s : %s' % (_ADDON_NAME,
|
||||
self.heading,))
|
||||
# set text
|
||||
self.window.getControl(self.CONTROL_TEXTBOX).setText(text)
|
||||
xbmc.sleep(2000)
|
||||
|
||||
def get_text(self):
|
||||
""" Get the text viewers body text from self.filename
|
||||
|
||||
:return: contents of self.filename
|
||||
:rtype: str
|
||||
"""
|
||||
try:
|
||||
return self.read_file(self.filename)
|
||||
except Exception as error: # pylint: disable=broad-except
|
||||
xbmc.log(_ADDON_NAME + ': ' + str(error), xbmc.LOGERROR)
|
||||
return ''
|
||||
|
||||
@staticmethod
|
||||
def read_file(filename):
|
||||
""" Read the contents of the provided file, from
|
||||
os.path.join(_ADDON_PATH, 'resources', filename)
|
||||
|
||||
:param filename: name of file to read
|
||||
:type filename: str
|
||||
:return: contents of the provided file
|
||||
:rtype: str
|
||||
"""
|
||||
filename = os.path.join(_ADDON_PATH, 'resources', filename)
|
||||
with closing(xbmcvfs.File(filename)) as open_file:
|
||||
contents = open_file.read()
|
||||
return contents
|
||||
|
||||
|
||||
class WebBrowser:
|
||||
""" Display url using the default browser
|
||||
|
||||
usage:
|
||||
script_path = os.path.join(_ADDON_PATH, 'resources', 'lib', 'version_check', 'viewer.py')
|
||||
xbmc.executebuiltin('RunScript(%s,%s,%s)' % (script_path, 'webbrowser', 'https://kodi.tv/'))
|
||||
|
||||
:param url: url to open
|
||||
:type url: str
|
||||
"""
|
||||
|
||||
def __init__(self, url):
|
||||
self.url = url
|
||||
try:
|
||||
# notify user
|
||||
self.notification(_ADDON_NAME, self.url)
|
||||
xbmc.sleep(100)
|
||||
# launch url
|
||||
self.launch_url()
|
||||
except Exception as error: # pylint: disable=broad-except
|
||||
xbmc.log(_ADDON_NAME + ': ' + str(error), xbmc.LOGERROR)
|
||||
|
||||
@staticmethod
|
||||
def notification(heading, message, icon=None, time=15000, sound=True):
|
||||
""" Create a notification
|
||||
|
||||
:param heading: notification heading
|
||||
:type heading: str
|
||||
:param message: notification message
|
||||
:type message: str
|
||||
:param icon: path and filename for the notification icon
|
||||
:type icon: str
|
||||
:param time: time to display notification
|
||||
:type time: int
|
||||
:param sound: is notification audible
|
||||
:type sound: bool
|
||||
"""
|
||||
if not icon:
|
||||
icon = _ICON
|
||||
xbmcgui.Dialog().notification(heading, message, icon, time, sound)
|
||||
|
||||
def launch_url(self):
|
||||
""" Open self.url in the default web browser
|
||||
"""
|
||||
import webbrowser # pylint: disable=import-outside-toplevel
|
||||
webbrowser.open(self.url)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
if sys.argv[1] == 'webbrowser':
|
||||
WebBrowser(sys.argv[2])
|
||||
else:
|
||||
Viewer(sys.argv[1], sys.argv[2])
|
||||
except Exception as err: # pylint: disable=broad-except
|
||||
xbmc.log(_ADDON_NAME + ': ' + str(err), xbmc.LOGERROR)
|
||||
Reference in New Issue
Block a user