Пример #1
0
    def Conectar(self):
        streamdecks = DeviceManager().enumerate()

        # TODO: Cambiar metodo para cargar StreanDeks
        for index, deck in enumerate(streamdecks):
            try:
                self.Deck = deck
                self.Deck.open()
                self.Deck.reset()
                if self.Deck.get_serial_number() == self.Serial:
                    self.Conectado = True
                    self.Cantidad = self.Deck.key_count()
                    Brillo = ObtenerValor("data/streamdeck.json", "brillo")
                    self.Deck.set_brightness(Brillo)
                    self.DeckGif = DeckGif(self.Deck)
                    self.DeckGif.start()
                    self.Deck.set_key_callback(self.ActualizarBoton)
                    return
                else:
                    self.Deck.close()

            except TransportError as error:
                self.Conectado = False
                self.Deck = None
                logger.exception(f"Error 1 {error}")
            except Exception as error:
                self.Conectado = False
                self.Deck = None
                logger.exception(f"Error 2 {error}")
Пример #2
0
    def EstadoOBS(self, Opciones):
        conectado = ObtenerValor(self.archivoEstado, "obs_conectar")
        if conectado is None or not conectado:
            self.Notificar("OBS-No-Conectado")
        else:
            self.Notificar("OBS-Conectado")

        grabando = ObtenerValor(self.archivoEstado, "obs_grabar")
        if grabando is None or not grabando:
            self.Notificar("OBS-No-Grabando")
        else:
            self.Notificar("OBS-Grabando")

        enVivo = ObtenerValor(self.archivoEstado, "obs_envivo")
        if enVivo is None or not enVivo:
            self.Notificar("OBS-No-EnVivo")
        else:
            self.Notificar("OBS-EnVivo")
Пример #3
0
 def __init__(self, Deck):
     """Carga Configuraciones para usar gif."""
     self.Deck = Deck
     # self.lock = threading.RLock()
     self.ListaGif = []
     self.ListaGifCargar = []
     self.Activo = True
     self.EsperaGif = Fraction(
         1, ObtenerValor("data/streamdeck.json", "gif_fps"))
     self.SiquienteFrame = Fraction(time.monotonic())
     super(DeckGif, self).__init__()
Пример #4
0
def BuscarImagenOBS(NombreAccion, opcionesAccion):
    Estado = None

    ListaBasicas = [
        "obs_conectar",
        "obs_grabar",
        "obs_envivo",
    ]
    for Basica in ListaBasicas:
        if NombreAccion == Basica:
            Estado = ObtenerValor("data/obs.json", Basica)

    if NombreAccion == "obs_escena":
        if "escena" in opcionesAccion:
            EscenaActual = opcionesAccion["escena"]
            EscenaActiva = ObtenerValor("data/obs.json", "obs_escena")
            if EscenaActual == EscenaActiva:
                Estado = True
            else:
                Estado = False
    elif NombreAccion == "obs_fuente":
        if "fuente" in opcionesAccion:
            FuenteActual = opcionesAccion["fuente"]
            Estado = ObtenerValor("data/obs_fuente.json", FuenteActual)
    elif NombreAccion == "obs_filtro":
        if "fuente" in opcionesAccion:
            Fuente = opcionesAccion["fuente"]
        if "filtro" in opcionesAccion:
            Filtro = opcionesAccion["filtro"]
        if Fuente is not None and Filtro is not None:
            Estado = ObtenerValor("data/obs_filtro.json", [Fuente, Filtro])

    if Estado is None:
        Estado = False

    return Estado
Пример #5
0
    def DeckBrillo(self, opciones):
        Brillo = ObtenerValor("data/streamdeck.json", "brillo")

        def constrain(n, minn, maxn):
            return max(min(maxn, n), minn)

        if "cantidad" in opciones:
            cantidad = opciones["cantidad"]
        else:
            return
        Brillo += cantidad
        Brillo = constrain(Brillo, 0, 100)
        logger.info(f"Deck[Brillo]: {Brillo}")
        SalvarValor("data/streamdeck.json", "brillo", Brillo)
        for deck in self.ListaDeck:
            deck.Brillo(Brillo)
Пример #6
0
    def CambiarFuente(self, opciones=False, Fuente=None):
        """Envia solisitud de Cambia el estado de una fuente."""
        if Fuente is None:
            if "fuente" in opciones:
                Fuente = opciones["fuente"]

        if self.Conectado:
            Estado = ObtenerValor("data/obs_fuente.json", Fuente)

            if Estado is not None:
                Estado = not Estado
                logger.info(f"OBS[Fuente] {Fuente}={Estado}")
                self.OBS.call(requests.SetSceneItemProperties(Fuente, visible=Estado))
            else:
                logger.warning(f"No se encontro {Fuente[0]} o {Fuente[1]} en OBS")

        else:
            logger.info("OBS[no Conectado]")
            self.Notificar("OBS No Conectado")
Пример #7
0
    def CargarGif(self, accion):
        """Extra frame de un gif y los guarda en una lista."""
        # TODO: Errro con git con estado no se desactiva
        if "gif_cargado" in accion:
            self.ListaGif.append(accion)
            return

        DirecionGif = BuscarDirecionImagen(accion)

        if DirecionGif is not None and not DirecionGif.endswith("gif"):
            return

        Gif = list()
        ColorFondo = "black"
        if "imagen_opciones" in accion:
            opciones = accion["imagen_opciones"]
            if "fondo" in opciones:
                ColorFondo = opciones["fondo"]

        DirecionGif = RelativoAbsoluto(DirecionGif, self.Deck.Folder)
        DirecionGif = UnirPath(ObtenerFolderConfig(), DirecionGif)
        if os.path.exists(DirecionGif):
            GifArchivo = Image.open(DirecionGif)
            for frame in ImageSequence.Iterator(GifArchivo):
                Gif_frame = PILHelper.create_scaled_image(
                    self.Deck, frame, background=ColorFondo)

                if "cargar_titulo" in accion:
                    TextoCargar = accion["cargar_titulo"]
                    if "archivo" in TextoCargar and "atributo" in TextoCargar:
                        accion["titulo"] = ObtenerValor(
                            TextoCargar["archivo"], TextoCargar["atributo"])

                if "titulo" in accion:
                    PonerTexto(Gif_frame, accion, True)
                ImagenNativa = PILHelper.to_native_format(self.Deck, Gif_frame)

                Gif.append(ImagenNativa)
            accion["gif_cargado"] = itertools.cycle(Gif)
            self.ListaGif.append(accion)
        else:
            logger.warning(f"Deck[No Gifs] {DirecionGif}")
Пример #8
0
    def HiloFuenteArchivo(self):
        DataEscenaActual = self.OBS.call(requests.GetCurrentScene()).datain
        Refrescar = False
        for Fuente in DataEscenaActual["sources"]:
            NombreFuente = Fuente["name"]
            EstadoFuente = ObtenerValor("data/obs_fuente.json", NombreFuente, Depurar=False)
            EstadoFuenteActual = self.OBS.call(requests.GetSceneItemProperties(NombreFuente)).datain
            if "visible" in EstadoFuenteActual:
                EstadoFuenteActual = EstadoFuenteActual["visible"]
                if EstadoFuente is not None:
                    if EstadoFuente != EstadoFuenteActual:
                        self.CambiarFuente(Fuente=NombreFuente)
                        Refrescar = True
                else:
                    SalvarValor("data/obs_fuente.json", NombreFuente, EstadoFuenteActual)
                    Refrescar = True
            self.SalvarFiltroFuente(NombreFuente)

        if Refrescar:
            self.actualizarDeck()
Пример #9
0
def IniciarStreamDeck(Datas, FuncionEvento):
    streamdecks = DeviceManager().enumerate()
    logger.info(
        f"Cargando StreamDeck - {len(streamdecks) if len(streamdecks) > 0 else 'No Conectado'}")
    ListaDeck = []
    for Data in Datas:
        Data['Encontado'] = False

    for deck in streamdecks:
        DeckActual = deck
        DeckActual.open()
        DeckActual.reset()
        Brillo = ObtenerValor("data/streamdeck.json", "brillo")
        DeckActual.set_brightness(Brillo)

        for Data in Datas:
            if Data['serial'] == DeckActual.get_serial_number():
                logger.info(
                    f"Conectando: {Data['nombre']} - {DeckActual.get_serial_number()}")
                DeckActual.Serial = DeckActual.get_serial_number()
                DeckActual.Cantidad = DeckActual.key_count()
                DeckActual.ID = Data['id']
                DeckActual.Nombre = Data['nombre']
                DeckActual.File = Data['file']
                DeckActual.FuncionEvento = FuncionEvento
                DeckActual.set_key_callback(ActualizarBoton)
                ListaDeck.append(DeckActual)
                Data['encontado'] = True

    ListaDeck.sort(key=lambda x: x.ID, reverse=False)
    Cantidad_Base = 0
    for deck in ListaDeck:
        deck.Base = Cantidad_Base
        Cantidad_Base += deck.Cantidad

    for Data in Datas:
        if not Data['encontado']:
            logger.warning(
                f"No se encontro: {Data['nombre']} - {Data['serial']}")
    return ListaDeck
Пример #10
0
    def CambiarFiltro(self, opciones):
        """Envia solisitud de cambiar estado de filtro."""
        Filtro = None
        Fuente = None
        if "filtro" in opciones:
            Filtro = opciones["filtro"]
        if "fuente" in opciones:
            Fuente = opciones["fuente"]

        if Filtro is None or Fuente is None:
            logger.info("OBS[Falta Atributo]")
            return

        if self.Conectado:
            Estado = ObtenerValor("data/obs_filtro.json", [Fuente, Filtro])
            if Estado is not None:
                Estado = not Estado
                logger.info(f"OBS[Filtro] {Fuente}[{Filtro}]={Estado}")
                self.OBS.call(requests.SetSourceFilterVisibility(Fuente, Filtro, Estado))
        else:
            logger.info("OBS[no Conectado]")
            self.Notificar("OBS No Conectado")
Пример #11
0
def ActualizarIcono(Deck, indice, accion):
    global FuenteIcono
    global ImagenBase
    global ListaImagenes

    ColorFondo = "black"
    imagenFondo = None

    if "imagen_opciones" in accion:
        opciones = accion["imagen_opciones"]
        if "fondo" in opciones:
            ColorFondo = opciones["fondo"]
        if "imagen" in opciones:
            imagenFondo = opciones["imagen"]

    ImagenBoton = PILHelper.create_image(Deck, background=ColorFondo)

    if imagenFondo is not None:
        PonerImagen(ImagenBoton, imagenFondo, accion, Deck.Folder, True)

    DirecionImagen = BuscarDirecionImagen(accion)

    if DirecionImagen is not None:
        if DirecionImagen.endswith(".gif"):
            # TODO: Meter proceso gif adentro
            return None

    PonerImagen(ImagenBoton, DirecionImagen, accion, Deck.Folder)

    if "cargar_titulo" in accion:
        TextoCargar = accion["cargar_titulo"]
        if "archivo" in TextoCargar and "atributo" in TextoCargar:
            accion["titulo"] = ObtenerValor(TextoCargar["archivo"],
                                            TextoCargar["atributo"])

    if "titulo" in accion:
        PonerTexto(ImagenBoton, accion, DirecionImagen)

    Deck.set_key_image(indice, PILHelper.to_native_format(Deck, ImagenBoton))