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:
- Conflito de Identificadores: Dois IDs distintos não podem coexistir no mesmo pacote funcional.
- 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.
- 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
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=buildurl({“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 == “coremenu”:
from resources.lib.core import navigator
navigator.showmenu(HANDLE)
elif action == “importedmenu”:
from resources.lib.importedaddon import runner
runner.showstreams(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.


