diff --git a/plugin.video.alfa/channels/kbagi.json b/plugin.video.alfa/channels/kbagi.json
new file mode 100644
index 00000000..2f292d54
--- /dev/null
+++ b/plugin.video.alfa/channels/kbagi.json
@@ -0,0 +1,81 @@
+{
+ "id": "kbagi",
+ "name": "Kbagi/Diskokosmiko",
+ "language": ["cast", "lat"],
+ "active": true,
+ "adult": false,
+ "version": 1,
+ "thumbnail": "http://i.imgur.com/EjbfM7p.png?1",
+ "banner": "copiapop.png",
+ "categories": [
+ "movie",
+ "tvshow"
+ ],
+ "settings": [
+ {
+ "id": "include_in_global_search",
+ "type": "bool",
+ "label": "Incluir en busqueda global",
+ "default": false,
+ "enabled": true,
+ "visible": true
+ },
+ {
+ "id": "kbagiuser",
+ "type": "text",
+ "color": "0xFF25AA48",
+ "label": "Usuario Kbagi",
+ "enabled": true,
+ "visible": true
+ },
+ {
+ "id": "kbagipassword",
+ "type": "text",
+ "color": "0xFF25AA48",
+ "hidden": true,
+ "label": "Password Kbagi",
+ "enabled": "!eq(-1,'')",
+ "visible": true
+ },
+ {
+ "id": "diskokosmikouser",
+ "type": "text",
+ "color": "0xFFC52020",
+ "label": "Usuario Diskokosmiko",
+ "enabled": true,
+ "visible": true
+ },
+ {
+ "id": "diskokosmikopassword",
+ "type": "text",
+ "color": "0xFFC52020",
+ "hidden": true,
+ "label": "Password Diskokosmiko",
+ "enabled": "!eq(-1,'')",
+ "visible": true
+ },
+ {
+ "id": "adult_content",
+ "type": "bool",
+ "color": "0xFFd50b0b",
+ "label": "Mostrar contenido adulto en las búsquedas",
+ "default": false,
+ "enabled": true,
+ "visible": true
+ },
+ {
+ "id": "perfil",
+ "type": "list",
+ "label": "Perfil de color",
+ "default": 3,
+ "enabled": true,
+ "visible": true,
+ "lvalues": [
+ "Sin color",
+ "Perfil 3",
+ "Perfil 2",
+ "Perfil 1"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/plugin.video.alfa/channels/kbagi.py b/plugin.video.alfa/channels/kbagi.py
new file mode 100644
index 00000000..325c9547
--- /dev/null
+++ b/plugin.video.alfa/channels/kbagi.py
@@ -0,0 +1,426 @@
+# -*- coding: utf-8 -*-
+
+import re
+import threading
+
+from core import filetools
+from core import httptools
+from core import scrapertools
+from core.item import Item
+from platformcode import config, logger
+
+__perfil__ = config.get_setting('perfil', "kbagi")
+
+# Fijar perfil de color
+perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00', '0xFFFE2E2E', '0xFF088A08'],
+ ['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E', '0xFFFE2E2E', '0xFF088A08'],
+ ['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE', '0xFFFE2E2E', '0xFF088A08']]
+
+if __perfil__ - 1 >= 0:
+ color1, color2, color3, color4, color5 = perfil[__perfil__ - 1]
+else:
+ color1 = color2 = color3 = color4 = color5 = ""
+
+adult_content = config.get_setting("adult_content", "kbagi")
+
+
+def login(pagina):
+ logger.info()
+
+ try:
+ user = config.get_setting("%suser" % pagina.split(".")[0], "kbagi")
+ password = config.get_setting("%spassword" % pagina.split(".")[0], "kbagi")
+ if pagina == "kbagi.com":
+ if user == "" and password == "":
+ return False, "Para ver los enlaces de kbagi es necesario registrarse en kbagi.com"
+ elif user == "" or password == "":
+ return False, "kbagi: Usuario o contraseña en blanco. Revisa tus credenciales"
+ else:
+ if user == "" or password == "":
+ return False, "DiskoKosmiko: Usuario o contraseña en blanco. Revisa tus credenciales"
+
+ data = httptools.downloadpage("http://%s" % pagina).data
+ if re.search(r'(?i)%s' % user, data):
+ return True, ""
+
+ token = scrapertools.find_single_match(data, 'name="__RequestVerificationToken".*?value="([^"]+)"')
+ post = "__RequestVerificationToken=%s&UserName=%s&Password=%s" % (token, user, password)
+ headers = {'X-Requested-With': 'XMLHttpRequest'}
+ url_log = "http://%s/action/Account/Login" % pagina
+ data = httptools.downloadpage(url_log, post, headers).data
+ if "redirectUrl" in data:
+ logger.info("Login correcto")
+ return True, ""
+ else:
+ logger.error("Error en el login")
+ return False, "Nombre de usuario no válido. Comprueba tus credenciales"
+ except:
+ import traceback
+ logger.error(traceback.format_exc())
+ return False, "Error durante el login. Comprueba tus credenciales"
+
+
+def mainlist(item):
+ logger.info()
+ itemlist = []
+ item.text_color = color1
+
+ logueado, error_message = login("kbagi.com")
+
+ if not logueado:
+ itemlist.append(item.clone(title=error_message, action="configuracion", folder=False))
+ else:
+ item.extra = "http://kbagi.com"
+ itemlist.append(item.clone(title="kbagi", action="", text_color=color2))
+ itemlist.append(
+ item.clone(title=" Búsqueda", action="search", url="http://kbagi.com/action/SearchFiles"))
+ itemlist.append(item.clone(title=" Colecciones", action="colecciones",
+ url="http://kbagi.com/action/home/MoreNewestCollections?pageNumber=1"))
+ itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro",
+ url="http://kbagi.com/action/SearchFiles"))
+ itemlist.append(item.clone(title=" Mi cuenta", action="cuenta"))
+
+ item.extra = "http://diskokosmiko.mx/"
+ itemlist.append(item.clone(title="DiskoKosmiko", action="", text_color=color2))
+ itemlist.append(item.clone(title=" Búsqueda", action="search", url="http://diskokosmiko.mx/action/SearchFiles"))
+ itemlist.append(item.clone(title=" Colecciones", action="colecciones",
+ url="http://diskokosmiko.mx/action/home/MoreNewestCollections?pageNumber=1"))
+ itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro",
+ url="http://diskokosmiko.mx/action/SearchFiles"))
+ itemlist.append(item.clone(title=" Mi cuenta", action="cuenta"))
+ itemlist.append(item.clone(action="", title=""))
+
+ folder_thumb = filetools.join(config.get_data_path(), 'thumbs_kbagi')
+ files = filetools.listdir(folder_thumb)
+ if files:
+ itemlist.append(
+ item.clone(title="Eliminar caché de imágenes (%s)" % len(files), action="delete_cache", text_color="red"))
+ itemlist.append(item.clone(title="Configuración del canal", action="configuracion", text_color="gold"))
+
+ return itemlist
+
+
+def search(item, texto):
+ logger.info()
+ item.post = "Mode=List&Type=Video&Phrase=%s&SizeFrom=0&SizeTo=0&Extension=&ref=pager&pageNumber=1" % texto.replace(
+ " ", "+")
+ try:
+ return listado(item)
+ except:
+ import sys, traceback
+ for line in sys.exc_info():
+ logger.error("%s" % line)
+ logger.error(traceback.format_exc())
+ return []
+
+
+def configuracion(item):
+ from platformcode import platformtools
+ ret = platformtools.show_channel_settings()
+ platformtools.itemlist_refresh()
+ return ret
+
+
+def listado(item):
+ logger.info()
+ itemlist = []
+
+ data_thumb = httptools.downloadpage(item.url, item.post.replace("Mode=List", "Mode=Gallery")).data
+ if not item.post:
+ data_thumb = ""
+ item.url = item.url.replace("/gallery,", "/list,")
+
+ data = httptools.downloadpage(item.url, item.post).data
+ data = re.sub(r"\n|\r|\t|\s{2}| |
", "", data)
+
+ folder = filetools.join(config.get_data_path(), 'thumbs_kbagi')
+ patron = '
([^<]+)
') + scrapedurl, scrapedtitle = scrapertools.find_single_match(block, + '([^<]+)<')
+ except:
+ pass
+ else:
+ new_item.folderurl = item.url.rsplit("/", 1)[0]
+ new_item.foldername = item.foldername
+ new_item.fanart = item.thumbnail
+
+ itemlist.append(new_item)
+
+ next_page = scrapertools.find_single_match(data, ' (.*?)([^<]+)<\/h2>
([^<]+)<'
- matches = re.compile(patron, re.DOTALL).findall(data)
-
- for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
- url = host + scrapedurl
- title = scrapedtitle
- thumbnail = scrapedthumbnail
- plot = ''
- fanart = ''
- contentSeasonNumber = scrapedtitle.replace('Temporada ', '')
-
- itemlist.append(Item(channel=item.channel, action="episodiosxtemp", title=title, fulltitle=item.title, url=url,
- thumbnail=thumbnail, plot=plot, fanart=fanart, contentSerieName=item.contentSerieName,
- contentSeasonNumber=contentSeasonNumber))
-
- if item.extra == 'temporadas':
- for tempitem in itemlist:
- templist += episodiosxtemp(tempitem)
-
- if config.get_videolibrary_support() and len(itemlist) > 0:
- itemlist.append(
- Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url,
- action="add_serie_to_library", extra="episodios", contentSerieName=item.contentSerieName))
-
- return itemlist
-
-
-def episodios(item):
- logger.info()
- itemlist = []
- templist = temporadas(item)
- for tempitem in templist:
- itemlist += episodiosxtemp(tempitem)
-
- return itemlist
-
-
-def episodiosxtemp(item):
- logger.info()
- itemlist = []
- data = httptools.downloadpage(item.url).data
- patron = ''
- matches = re.compile(patron, re.DOTALL).findall(data)
- ep = 1
- for scrapedtitle in matches:
- scrapedtitle = scrapedtitle.replace(item.contentSeasonNumber + 'x' + '0' + str(ep), '')
- url = host + '/VerCapitulo/' + scrapedtitle.replace(' ', '-')
- title = item.contentSeasonNumber + 'x' + str(ep) + ' ' + scrapedtitle.strip('/')
-
- thumbnail = item.thumbnail
- plot = ''
- fanart = ''
- plot = ''
- contentEpisodeNumber = ep
-
- itemlist.append(Item(channel=item.channel, action="findvideos", title=title, fulltitle=item.title, url=url,
- thumbnail=thumbnail, plot=plot, fanart=fanart, extra='series',
- contentSerieName=item.contentSerieName, contentSeasonNumber=item.contentSeasonNumber,
- contentEpisodeNumber=contentEpisodeNumber))
- ep = ep + 1
-
- return itemlist
-
-
-def seccion(item):
- logger.info()
- itemlist = []
- data = httptools.downloadpage(item.url).data
- patron = '