BALANDRO TEAM  Diciembre de 2023

DESARROLLO NORMAS GENERALES
============================

- Preferidos en bases de datos sqlite pero no integrada en el Media Center

- De cara a Kodi, el play se hace desde findvideos y no desde play. 
  O sea, findvideos no muestra un listado, sino una ventana emergente para escoger el enlace a reproducir.
  Lo devuelto por findvideos no necesita infoLabels, solamente server, url, y opcionalmente quality,language,age,etc.
  Los items de peliculas/episodios se consideran "playables".

- En la carpeta channels solo hay los canales que scrapean alguna web.
  Lo demás está en la carpeta modules (ej: search, mainmenu, downloads, tracking, ...)

- Acceso a los canales por peliculas y/o series (los canales requieren mainlist_pelis, mainlist_series)

- Retocada la estructura básica del addon en default.py (+/- equivale al launcher) y platformtools
- channeltools y servertools retocados
- search y downloads retocados

- minimos retoques en tmdb y tvdb
- dialog_find_and_set_infoLabels en tmdb para "desambiguar titulos" al guardarlos

- servers: solamente los free, pasando de premiums, debriders, etc
- canales: solamente si permiten acceso publico, y pasando de opciones para usuarios registrados

- canales para adultos (hay canales porno, pero además puede haber alguna seccion de adultos en algun canal)

- especifico para Kodi >= 17
- No se usan ninguno de los diálogos con xml
- No se usan ficheros de idioma

- 3 niveles de log: Standard (solo errores), Medio (errores+info), Debugger (errores+info+debug)
  Usar info() para informar por donde se pasa y algun mensaje de acciones realizadas.
  Usar debug() para comprobaciones a nivel de developer como mostrar items, data, etc.

- Las descargas de peliculas/series no tienen autodownload, y se fuerza seleccionar algun servidor.

- Todos los parámetros de Ajustes en un solo fichero (incluyendo canales y servidores).
  La gestion de valores propios de canales/servidores se hará en sus propios modulos si hace falta.

- Filtrado de enlaces por idioma a nivel general para todos los canales.
- Ordenacion por orden web o calidad a nivel general para todos los canales.
- Autoplay a nivel general para todos los canales.
- Desactivacion opcional de Tmdb para todos los canales.

- Reducidos los parámetros de los json de canales y servidores.
  Incorporados searchable=True/False y searchable_types=[] con 'all','movie','tvshow' para indicarlo en las busquedas.

- Conversion servers de Pelisalacarta/Alfa a balandro, casi iguales solamente hay que tener en cuenta:
  Substituir config.get_localized_string(...) por su string correspondiente
  Lo que se importe de lib necesita from lib
  No se usan thumbnails de servidores
  json: reducidas opciones
  En algunos casos se ofusca la resolucion del server para que tarde más en masificarse y dure más tiempo.
  No hay rutinas test_video_exists especificas pero desde get_video_url se puede devolver el mensaje de error.

- Conversion canales de Pelisalacarta/Alfa a balandro:
  Como hay que hacer algunos cambios, intentar dejarlos lo más simples y limpios posibles.
  Tiene que haber mainlist_pelis y/o mainlist_series a parte del mainlist.
  Eliminadas referencias a autoplay, filtertools, thumbnails, newest, 
  Intentar ir clonando los items en lugar de crearlos nuevos, excepto en findvideos sin infolabels.
  Eliminar configuraciones concretas, y de ser necesarias deberian formar parte de los Ajustes generales.
  En las funciones search, tener en cuenta search_type para buscar solamente peliculas, series o ambas a la vez.
  Generar el item.url para buscar en la propia rutina search para que funcione en las busquedas globales.
  Tener los thumbnails de los canales en local para no depender de webs externas.
  No usar fanart de canales (en algunos casos dificultan la lectura y no vale la pena).

- Funciones de Preferidos con tracking y trackingtools.
  - Se usan bases de datos sqlite para almacenar las peliculas/series que se van guardando.
  - Se pueden crear varias bases de datos (listas) para contener diferentes peliculas/series, solamente 1 está activa.
  - Los Preferidos no se integran en Kodi y se controlan integramente desde el addon.
    La unica excepcion son las marcas de visto/no visto para peliculas y episodios, que se usan las internas de Kodi.
  - En la bd hay tablas para guardar:
    - los infolabels (movies, shows, seasons, episodes)
    - los enlaces de diferentes canales (channels_*)
    - las preferencias de seguimiento de series (tracking_shows) para establecer cuando buscar nuevos episodios.
  - Se usa el id de tmdb como clave para todas las tablas. Si no está alli, no se puede guardar!
  - Una misma pelicula/serie se puede agregar desde diferentes canales.
  - Desde el menu contextual se accede a diferentes acciones que se pueden hacer segun sea pelicula, serie, temporada, episodio.
  - findvideos propio para modulo de tracking para ofrecer seleccion desde los diferentes canales guardados.
    En platformtools se genera un item minimo que es siempre igual para una pelicula (id) o episodio (id+season+episode)
    lo cual permite controlar las marcas de visto/no visto de Kodi.
  - Servicio de busqueda de nuevos episodios configurable cada n horas o ejecutable manualmente.


DESARROLLO CANALES
===================

- A parte del mainlist, hay que implementar mainlist_pelis y/o mainlist_series.
- Intentar que sean lo más simples y genericos posibles.
- Arrastrar items con clone, menos en findvideos que hay que crear items nuevos sin infolabels.
- No usar thumbnails especificos para los menus, al hacer clone ya se arrastra el thumb del canal.
- Evitar items usados como etiquetas (sin action) y colores personalizados.
- Los patrones con .*? son prácticos pero hay que ser cauto con ellos e intentar delimitarlos.
- Minimizar los parámetros de configuracion propios del canal. Si se necesitan, gestionarlos en el propio canal
- Llamar a tmdb.set_infoLabels(itemlist) en los listados para completar datos. (el usuario lo puede desactivar desde los Ajustes)

- Funcion search:
  - Capturar excepcion para no bloquear busquedas globales
  - Generar url de busqueda dentro de la propia rutina (no depender de item.url, solamente de search_type)
  - Tener en cuenta item.search_type si se puede buscar por peliculas, series o ambas a la vez.
  - Si se busca por ambas, diferenciar las series de las peliculas en el listado, rellenando fmt_sufijo con 'movie' o 'tvshow'.


- Si hay listado por generos, llamar generos a la funcion que muestra el listado de generos. Idem para years con anios.
  - Generar url de busqueda dentro de la propia rutina (no depender de item.url, solamente de search_type)
  - Tener en cuenta item.search_type si hay diferentes generos para peliculas y series.
  - Está unificada la manera de obtener los generos/years/categorias/etc. de cada canal.


- Listados de peliculas, series, documentales
  - Habria que poder resolver llamando a tmdb (titulo+year, titulo+thumbnail_imdb, ...). A las malas con year='-'
  - No hacer doble llamada a tmdb en una misma funcion para querer obtener más datos, pq es automático si el usuario lo habilita en los Ajustes.
  - Para series:
    - mostrar listado con las diferentes temporadas
    - mostrar los capitulos de una temporada concreta. (para que no haya listados enormes con series con muchas temporadas/capitulos)
    - si una misma url devuelve un listado de todos los episodios de todas las temporadas, crear rutina tracking_all_episodes
  - No formatear title con year, idiomas, calidades y colores pq se hace a nivel del addon.
    Informar languages y qualities de los items siempre que se pueda (como string con valores separados por , si hay varios).
    Usar fmt_sufijo para diferenciar peliculas/series en listados mixtos (por busquedas)
  - Si el listado tiene demasiados items (+ de 30?) controlar una paginacion interna (ej: canalpelis, etc.)


- Funcion findvideos:
  - No hacer ninguna llamada a tmdb ni obtener datos de la pelicula/serie, solamente rellenar los enlaces a videos.
  - Siempre que la web lo permita intentar obtener language, quality, age (cuando se modifico) y other (otras notas, como descarga directa, MB, ...)
  - El title de los enlaces no importa pq se sobrescribirá al formatear los enlaces si hay server, language, quality, etc.
  - No verificar enlaces ya que se hace a nivel del addon y no de los canales
  - No filtrar enlaces ya que se hace a nivel del addon y no de los canales
  - Adaptar language para que sea ['Esp', 'Lat', 'VO', 'Vose', 'Vos', 'Eng'].
    Importante indicar 'Esp' y 'Lat' para filtrado en servertools. Lo que no sea Esp ni Lat se engloba como VO en las preferencias.
  - Si hay "age" preferible que los enlaces esten ordenados por ese valor mostrando los más recientes primero (pq es más probable que funcionen).
    Luego en el filtrado de servertools se reordenarán por idioma manteniendo el orden previo.
  - Descartar enlaces de "descarga" ?


- Json del canal:
  - Para categories de momento solo se usa 'movie','tvshow'. TODO que hacer o que otras categorias definir...
  - Intentar escribir una minima descripcion del canal en 'notes'
  - Si un canal deja de funcionar y no se quiere mostrar, indicar "active": false
  - Si un canal se quiere desactivado por defecto, indicar "status": -1
    El status del canal se sobrescribirá con la configuracion del usuario si la hay (-1:desactivado, 0:activo (default), 1:preferido)
  - Rellenar searchable y search_types
    - searchable : True/False indica si el canal tiene buscador
    - search_types : Array con los diferentes tipos de busqueda contemplados.
      'all'    : busca sin tener en cuenta si es pelicula o serie
      'movie'  : limita la busqueda a peliculas
      'tvshow' : limita la busqueda a series
    - Si el canal solo tiene peliculas indicar ['movie']
    - Si el canal solo tiene series indicar ['tvshow']
    - Si tiene ambos:
      - ['all'] : si la busqueda no diferencia peliculas y series
      - ['movie','tvshow'] : si se puede buscar solo peliculas o solo series
      - ['all','movie','tvshow'] : si se puede buscar solo peliculas, solo series, o ambas a la vez.
  - Rellenar "clusters"
    - obligatorio y en funcion de las opciones del canal

- Canales que necesitan proxies: (ejemplos: gnula, etc.)

  Json canal:
      obligatorio en "notes"
      'Puede requerir el uso de proxies en funcion del pais/operadora desde el que se accede.'

  def configurar_proxies(item):
      from core import proxytools
      return proxytools.configurar_proxies_canal(item.channel, host)

  En mainlist_pelis, mainlist_series, mainlist_animes, mainlist_documentales la llamada para configurar los proxies:
      plot = 'Es posible que para poder utilizar este canal necesites configurar algun proxy, ya que no es accesible desde algunos paises/operadoras.'
      plot += '[CR]Si desde un navegador web no te funciona el sitio por ejemplo "canalseries.com" necesitarás un proxy.'
      itemlist.append(item.clone( title = 'Configurar proxies a usar ...', action = 'configurar_proxies', folder=False, plot=plot, text_color='red' ))

   y finalmente substituir las llamadas a httptools.downloadpage(...) por httptools.downloadpage_proxy(item.channel, ...)


CRITERIOS SELECCION NUEVAS WEBS/CANALES
=======================================

- que la web sea estable y no tarde demasiado en responder.
- que no se necesiten recaptchas.

Puntos a favor:
- que en los listados de peliculas este el year.
- que en los listados de peliculas este el idioma y la calidad.

- que se pueda listar para un idioma concreto (Esp, Lat, VO).
- que se pueda listar a traves de diferentes generos, years, ...

- que los enlaces a los videos funcionen en su mayoria, o al menos que lo haga alguno de los primeros enlaces disponibles.
- que no haya muchas peliculas que luego no tengan ningun enlace al acceder a ellas.
- que los videos tengan cierta calidad.

- que la informacion de la web sea correcta (que la calidad/idioma sea la que dicen, que los titulos sean identificables en tmdb, ...).
- que tenga material especifico que cueste más encontrar en otros canales.
- que la web se actualize con cierta regularidad.

- que no se requiera registro de usuario.

- que se pueda acceder a las distintas temporadas de las series.

Puntos en contra:
- que haya enlaces distintos a la misma pelicula. (por ejemplo urls diferentes segun calidad/idioma como pasa en algunos canales de torrents)
