# -*- coding: utf-8 -*- import threading try: from socketserver import ThreadingMixIn except ImportError: from SocketServer import ThreadingMixIn from wsgiref.simple_server import WSGIRequestHandler, WSGIServer, make_server from resources.lib.kodi import kodilogging from resources.lib.tubecast.dial import app import socket logger = kodilogging.get_logger("chromecast") class SilentWSGIRequestHandler(WSGIRequestHandler): """WSGI request handler with logging disabled""" def log_message(self, format, *args): logger.debug("{} - - {}".format(self.address_string(), format % args)) def handle(self): try: WSGIRequestHandler.handle(self) except socket.error: # Avoid garbage on the kodi log pass def address_string(self):
# -*- coding: utf-8 -*- import xbmc from resources.lib.kodi import kodilogging monitor = xbmc.Monitor() logger = kodilogging.get_logger("player") STATUS_PLAYING = 1 STATUS_PAUSED = 2 STATUS_LOADING = 3 STATUS_STOPPED = 4 class CastPlayer(xbmc.Player): def __init__(self, cast): # type: (YoutubeCastV1) -> None super(CastPlayer, self).__init__() self.cast = cast # auxiliary variable to know if the request came from the youtube background thread self.from_yt = False def play_from_youtube(self, url): # type: (str) -> None self.from_yt = True self.play(url) @property def status_code(self): # type: () -> int if xbmc.getCondVisibility("Player.Paused"): return STATUS_PAUSED if self.isPlaying():
# -*- coding: utf-8 -*- import json from resources.lib.kodi import kodilogging from resources.lib.tubecast.utils import PY3 import xbmc import xbmcaddon import xbmcgui # read settings ADDON = xbmcaddon.Addon() logger = kodilogging.get_logger() def yes_no(line1, line2=None, line3=None, nolabel=None, yeslabel=None): return xbmcgui.Dialog().yesno(heading=ADDON.getAddonInfo('name'), line1=line1, line2=line2, nolabel=nolabel, yeslabel=yeslabel) def notification(header=ADDON.getAddonInfo('name'), message='', time=5000, icon=ADDON.getAddonInfo('icon'), sound=True):
import socket import struct import threading from resources.lib.kodi import kodilogging from resources.lib.kodi.utils import get_setting_as_bool from resources.lib.tubecast.kodicast import Kodicast from resources.lib.tubecast.utils import build_template, str_to_bytes, PY3 if PY3: from socketserver import DatagramRequestHandler, ThreadingUDPServer else: from SocketServer import DatagramRequestHandler, ThreadingUDPServer logger = kodilogging.get_logger("ssdp") def get_interface_address(if_name): import fcntl # late import as this is only supported on Unix platforms. sciocgifaddr = 0x8915 with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) as s: return fcntl.ioctl(s.fileno(), sciocgifaddr, struct.pack(b'256s', if_name[:15]))[20:24] class ControlMixin(object): def __init__(self, handler, poll_interval): self._thread = None self.poll_interval = poll_interval self._handler = handler