160 lines
4.9 KiB
Python
160 lines
4.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
# -*- 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)
|