Como Unificar Add-ons do Kodi em Python: Arquitetura, Rotas e Dependências

Trabalhar com o ecossistema do Kodi exige compreender a fundo sua arquitetura de plugins baseada em Python. Quando surge a necessidade de combinar recursos de dois complementos distintos — por exemplo, incorporar módulos de transmissão ao vivo de um complemento esportivo em uma estrutura já existente —, o desafio vai muito além de simplesmente descompactar dois arquivos ZIP na mesma pasta.

Neste artigo técnico, abordamos os passos de engenharia de software necessários para realizar a integração de add-ons Kodi em Python, prevenindo colisões de namespace, unificando endpoints e mantendo uma execução de alto desempenho.


O Problema: Conflitos de Estrutura e Incompatibilidade de Dependências

Todo add-on no Kodi é identificado por um manifesto (addon.xml) e possui pontos de entrada específicos (extension points). Ao tentar fundir dois projetos independentes, os principais gargalos são:

  1. Conflito de Identificadores: Dois IDs distintos não podem coexistir no mesmo pacote funcional.
  2. Colisão de Módulos: Bibliotecas internas com o mesmo nome (como utilitários de requisições ou parsers de regex) sobrescrevem umas às outras.
  3. Manipulação de Parâmetros de Rota: Cada complemento utiliza seu próprio esquema para construir e ler argumentos via sys.argv[2].

Passo 1: Unificação do Manifesto (addon.xml)

O primeiro passo prático é estabelecer uma raiz única. O arquivo addon.xml resultante deve declarar todas as bibliotecas necessárias declaradas em ambos os pacotes originais.

xml







video

Atenção: Certifique-se de consolidar as versões de APIs mínimas exigidas (Kodi Matrix/Nexus usam Python 3 exclusivamente).


Passo 2: Isolamento por Namespaces

Para evitar que funções utilitárias do add-on secundário interfiram na base de código original, isole os scripts legados em submódulos dedicados sob a pasta resources/lib/:

text
plugin.video.unified/
├── addon.xml
├── main.py
└── resources/
└── lib/
├── core/ # Código base original
└── imported_addon/ # Módulos adaptados do add-on importado

Dentro de cada script importado, refatore os imports relativos ou absolutos. Se o add-on importado fazia import utils, altere para from resources.lib.imported_addon import utils.


Passo 3: Roteamento Centralizado com Python

Para controlar a navegação no Kodi sem travar a interface, adote um despachante de rotas centralizado em main.py:

python
import sys
import urllib.parse
import xbmcgui
import xbmcplugin

HANDLE = int(sys.argv[1])
PARAMS = dict(urllib.parse.parse_qsl(sys.argv[2][1:]))

def build_url(query):
return f”{sys.argv[0]}?{urllib.parse.urlencode(query)}”

def mainmenu():
# Item do add-on original
item1 = xbmcgui.ListItem(label=”Biblioteca Principal”)
xbmcplugin.addDirectoryItem(handle=HANDLE, url=build
url({“action”: “core_menu”}), listitem=item1, isFolder=True)

# Item integrado (ex: módulo esportivo)
item2 = xbmcgui.ListItem(label="Módulos Esportivos")
xbmcplugin.addDirectoryItem(handle=HANDLE, url=build_url({"action": "imported_menu"}), listitem=item2, isFolder=True)

xbmcplugin.endOfDirectory(HANDLE)

def router():
action = PARAMS.get(“action”)
if not action:
mainmenu()
elif action == “core
menu”:
from resources.lib.core import navigator
navigator.showmenu(HANDLE)
elif action == “imported
menu”:
from resources.lib.importedaddon import runner
runner.show
streams(HANDLE)

if name == “main“:
router()


Passo 4: Otimização e Lazy Loading

Como especialista em IA e arquitetura de software, recomendo aplicar o padrão de lazy loading em complementos de mídia. No código acima, os módulos de cada seção só são importados em tempo de execução quando a rota correspondente é acionada (from ... import ... dentro do bloco condicional). Isso reduz o consumo de memória RAM do Kodi em dispositivos de baixa potência, como dongles de streaming e TV Boxes.

Além disso, tarefas de scraping dinâmico e extração de links de vídeo podem ser encapsuladas em workers assíncronos para evitar o bloqueio da interface do usuário.


Conclusão e Próximos Passos

Unificar complementos no Kodi exige rigor na gestão de dependências, isolamento de escopo e reescrita criteriosa de rotas. O resultado final é um único pacote robusto, fácil de distribuir e manter.

Se a sua empresa precisa de suporte técnico para arquitetar soluções em Python, modernizar add-ons legados ou criar integrações complexas de streaming, entre em contato para agendar uma consultoria técnica especializada.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.