{"action":"created","issue":{"url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/100","labels_url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/100/labels{/name}","comments_url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/100/comments","events_url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/100/events","html_url":"https://github.com/tvalacarta/pelisalacarta/pull/100","id":123994639,"number":100,"title":"Limpieza y organización de código","user":{"login":"divadres","id":12673480,"avatar_url":"https://avatars.githubusercontent.com/u/12673480?v=3","gravatar_id":"","url":"https://api.github.com/users/divadres","html_url":"https://github.com/divadres","followers_url":"https://api.github.com/users/divadres/followers","following_url":"https://api.github.com/users/divadres/following{/other_user}","gists_url":"https://api.github.com/users/divadres/gists{/gist_id}","starred_url":"https://api.github.com/users/divadres/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/divadres/subscriptions","organizations_url":"https://api.github.com/users/divadres/orgs","repos_url":"https://api.github.com/users/divadres/repos","events_url":"https://api.github.com/users/divadres/events{/privacy}","received_events_url":"https://api.github.com/users/divadres/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":11,"created_at":"2015-12-27T20:09:44Z","updated_at":"2016-01-15T12:03:00Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/tvalacarta/pelisalacarta/pulls/100","html_url":"https://github.com/tvalacarta/pelisalacarta/pull/100","diff_url":"https://github.com/tvalacarta/pelisalacarta/pull/100.diff","patch_url":"https://github.com/tvalacarta/pelisalacarta/pull/100.patch"},"body":"## Reorganización y limpieza de código\r\nComo ya tenemos una rama “develop” me he decidido a subir unos cuantos cambios que tengo yo rodado por aquí. Los iré subiendo por partes, para ir viendo que todo funciona bien entre una y otra.\r\n\r\nEl objetivo de estos cambios es preparar el plugin para posteriormente subir la versión HTML, que necesita esos cambios, y para no duplicar tantos ficheros, y puesto que estos cambios ya van bien en KODI, he pensado que mejor cambiarlo de base.\r\n\r\nYa puestos en faena y puesto que hay algunos módulos como el launcher, xbmctools, y alguno más que con la acumulación de correcciones y mejoras se han ido convirtiendo en un lio con un montón de duplicidades, he decidido reorganizar un poco el código, eliminando duplicidades, y traspasando todo el código especifico de KODI a un solo modulo dentro de platformcode, y eliminarlo de módulos como el launcher, channeselector, etc…\r\n\r\n**Paso a detallar los cambios realizados:**\r\n**default.py:** \r\n* Modificada la llamada a laucnher.start(), ahora se inicia cada vez que entras a pelisalacarta.\r\n* Ahora el ítem se extrae de sys.argv en este modulo y no en el launcher, para intentar hacer el launcher lo mas independiente de la plataforma posible, y se pasa al launcher mediente launcher.run(item)\r\n* Modificada la forma en que se tratan los .strm de la biblioteca, de modo que ahora se pueden reproducir sin limitaciones como si lo ejecutaras desde dentro del plugin.\r\n\r\n**launcher.py:** \r\n* Modificada la función run(): reorganizado el código, se ha intentado modificar los modulos que faltaban para que respondan al formato genérico  “canal.action(item)”, eliminando asi un montón de if/else del código.\r\n* Las acciones que antes se ejecutaban dentro del launcher.py mediante \"if action==...\" se han movido a una función especifica para cada una en el launcher mediante \"def función(item)\".\r\n* Dentro de la función run() importa el canal del ítem, y comprueba si contiene la función del action para ejecutarla, en caso contrario, comprueba si existe el launcher para ejecutarla.\r\n\r\n**xbmctools.py**: \r\n* No lo he eliminado para preservar el código por si algo de lo nuevo no funciona bien, pero ya no se usa, se ha creado uno nuevo, llamado platformtools.py que gestiona todo lo relacionado con la plataforma, diálogos, play, renderItems, etc…\r\n\r\n**Item.py:** \r\n* Tanto se ha hablado de él, así que me he decidido a modificarlo, según la base que subí al foro pero mejorándolo un poco y tiene las siguientes funciones:\r\n * **Item.tojson():** Genera un json a partir del item\r\n * **Item.fromjson():** Genera el item a partir del json \r\n * **Item.tourl():** Genera la url a partir del item\r\n * **Item.fromurl():** Genera el item a partir de la url\r\n * **Item.tostring():** Genera una cadena para mostrarlo en el log\r\n * **ítem.clone():** Genera un nuevo ítem con los mismos valores que el original, los campos que se pasen como argumento serán modificados en el ítem nuevo\r\n* Se pueden añadir tantos campos como se quieran tanto al crearlo \r\n * Item(action=”lo que sea”, personal =”lo que sea”)\r\n * Como después item.campopersonal=”lo que sea”\r\n* Se puede comprobar si un campo personal existe con la función ‘if “nombredelcampo” in item:’\r\n\r\n**configuración.py:**\r\n* Modificadas las funciones al formato generico def función(item)\r\n\r\n**descargas.py y favoritos.py:** \r\n* Los pongo juntos porque los cambios son prácticamente los mismos para los dos:\r\n* Modificadas las funciones al formato generico def función(item)\r\n* Los archivos de favoritos y de lista de descargas, se guardan en formato JSON y no en TXT, guardando toda la información del item, \r\n* Actualiza automaticamente los archivos al nuevo formato al leerlos.\r\n\r\n**Trailertools.py:**\r\n* Modificadas las funciones al formato generico def función(item)\r\n\r\n**Library.py:** \r\n* Modificadas las funciones al formato generico def función(item)\r\n* Modificado para que guarde los strm con la nueva url, generada con item.tourl()\r\n* Creada una funcione para actualizar los strm viejos al nuevo formato\r\n\r\n\r\n**Consideraciones:**\r\n* Con todas estas modificaciones, sea intentado mantener el funcionamiento igual que antes, ni se añade ni se quita ninguna función, si algo ha cambiado, puede ser por algún error mío, pero no intencionado\r\n* Lo publico aquí para que se pruebe que todo vaya bien y no afecte al funcionamiento de otras plataformas y **me indiquéis si hay algún fallo**\r\n"},"comment":{"url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/comments/171944322","html_url":"https://github.com/tvalacarta/pelisalacarta/pull/100#issuecomment-171944322","issue_url":"https://api.github.com/repos/tvalacarta/pelisalacarta/issues/100","id":171944322,"user":{"login":"tvalacarta","id":5525238,"avatar_url":"https://avatars.githubusercontent.com/u/5525238?v=3","gravatar_id":"","url":"https://api.github.com/users/tvalacarta","html_url":"https://github.com/tvalacarta","followers_url":"https://api.github.com/users/tvalacarta/followers","following_url":"https://api.github.com/users/tvalacarta/following{/other_user}","gists_url":"https://api.github.com/users/tvalacarta/gists{/gist_id}","starred_url":"https://api.github.com/users/tvalacarta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tvalacarta/subscriptions","organizations_url":"https://api.github.com/users/tvalacarta/orgs","repos_url":"https://api.github.com/users/tvalacarta/repos","events_url":"https://api.github.com/users/tvalacarta/events{/privacy}","received_events_url":"https://api.github.com/users/tvalacarta/received_events","type":"User","site_admin":false},"created_at":"2016-01-15T12:03:00Z","updated_at":"2016-01-15T12:03:00Z","body":"Ya está publicada :)"}}