Example #1
0
# -*- 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):
Example #2
0
# -*- 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():
Example #3
0
# -*- 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):
Example #4
0
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