VAVOO zeichnet sich durch Individualität aus
Dadurch, dass die Kunden beim ersten Gebrauch die Möglichkeit haben eine externe Quelle bei der Einrichtung einzugeben, kannst Du der Community ein exklusives User-Interface bereitstellen und somit Deine eigene VAVOO Fan-Base schaffen.
Wir nennen es VAVOO BUNDLE.
Nachfolgend findest Du die Anleitung zur Erstellung von einem VAVOO Bundle.
- Lade Dir VAVOO hier runter und installiere es.
- Starte mit den VAVOO Standardeinstellungen. Gib hierfür als Bundle-URL folgendes ein: vavoo.tv/repo
- Richte VAVOO vollständig nach Deinen Wünschen ein.
- Starte unser Bundle erstellen Tool. Für mehr Informationen hierzu siehe weiter unten.
Die Dateien werden in Deinem Home-Verzeichnis unter VAVOO abgelegt. - Stelle sicher das alle Informationen in der vavoo.json vavoo.json korrekt sind.
- Lade die vavoo.json auf einen Webserver und sorge dafür dass die Eingabe der URL so einfach wie möglich ist.
VAVOO ergänzt die eingegebene URL automatisch mit /vavoo.json.
So wird bei der Eingabe von http://deinserver.com/repo auch die URL http://deinserver.com/repo/vavoo.json abgefragt. - Lade ein Video Tutorial der Installation auf YouTube und nutze den Hashtag #VAVOOBUNDLE in Deiner Videobeschreibung.
Vergesse nicht Deine URL in der Videobeschreibung zu nennen.
VAVOO Bundle Domainumleitungen
Dies ist nützlich um zum Beispiel von einer sehr kurzen Domain auf eine längere, schwieriger zu schreibende Domain umzuleiten.
- Erstelle mit einem Texteditor eine Datei mit dem Namen vavoo.json mit dem folgenden Inhalt:
{ "redirect": "anotherdomain.com" }
Oder:{ "redirect": "http://anotherdomain.com/repo/" }
VAVOO Funktionen
- VAVOO bietet eine verbesserte Android API
- Wir haben die Kodi Kern Funktion StartAndroidActivity verbessert. Hier kannst Du jetzt nicht nur Android Apps starten, sondern auch direkt einzelne Activities.
- Der Syntax lautet wie folgt:
StartAndroidActivity("package.name!.SomeActivity")
- Geschlossener Addon Code
- Addons können im vorkompilierten Python Code ausgeliefert werden (Dateiendung .pyo).
Dies beschleundigt den start der Addons und erlaubt es auch geschlossene Addons auszuliefern.- VAVOO Addon Modul
- Das Modul vavoo_api bietet einige nützliche Funktionen:
import vavoo_api vavoo_api.restart() # Startet die VAVOO Software neu.
- Benutzer verifizieren
- Um diverse Dienste anbieten zu können für die eine Verifizierung des Benutzers notwendig ist, bietet VAVOO eine spimple API:
import vavoo_api # Liefert die Authentifizierungssignatur zurück. vavoo_api.getAuthSignature()
# Beispiel Addon Code: endpoint = "http://dein.service.com/api/endpoint" params = {"some": "value", "vavoo_auth": vavoo_api.getAuthSignature()} response = requests.post(endpoint, params=params)
- Serverseitig muss jetzt die Signatur via RSA-SHA256 überprüft werden. Hier ein kurzer Python Code:
import json from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from Crypto.Hash import SHA256 public_key = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYQ/yPjdNq0WHTyvYSqGBspT/e /dL9On1jW4TQ6cC1aXTtmGXwZvCRWAElFRItYps6Kh+oRzZmt2llfUhnYkC27Gzo V4sDzsnE6juA8mtJIC2PO28wnHwQXKYjBl7l6u+6uGsFhlUu+hCT8uKPPZtq5n26 SFOGVgxIL5m9P1tZawIDAQAB -----END PUBLIC KEY-----""" rsakey = RSA.importKey(public_key) signer = PKCS1_v1_5.new(rsakey) def verify_vavoo_auth(client_ip, data): data = data.decode("base64") data = json.loads(data) digest = SHA256.new() digest.update(data["data"]) if not signer.verify(digest, data["signature"].decode("base64")): raise ValueError("Invalid signature") data = json.loads(data["data"]) # Die haltbarkeit einer Signatur sollte nicht länger als maximal 15 Minuten sein. if time.time()*1000 - data["time"] > 10*60*1000: raise ValueError("Signature timed out") print data if client_ip not in data["ips"]: raise ValueError("Client IP not allowed") if data["error"]: raise ValueError(data["error"]) return data["ruleset"] @route("api/endpoint") def api_endpoint(): ruleset = verify_vavoo_auth(request.get_client_ip(), request.args["vavoo_auth"]) if ruleset == "pro": # Your protected VAVOO Premium code here elif ruleset == "free": # Your protected VAVOO free code here elif ruleset == "guest": # Your protected VAVOO guest code here return "success"
- Festlegen was vor einer Wiedergabe passieren soll (ab VAVOO Version 1.28)
- Pro Medieneintrag kann festgelegt werden was beim Klick auf einen Eintrag passieren soll.
import xbmcgui listItem = xbmcgui.ListItem() listItem.setProperty("selectaction", "play")
- Mögliche Werte für selectaction sind:
- play
Wiedergabe vom Anfang an. - resume
Immer fortsetzen wenn möglich - play_or_resume
Wiedergabe oder fortsetzen. - info
Informationsdialog anzeigen. - choose
Auswahl dem Benutzer überlassen. - more
Mehr Auswahlmöglichkeiten als bei choose anzeigen.
- Zusätzliche Skinning Variablen
- Um auf die verschiendenen Zustände von VAVOO zu reagieren stehen folgende neuen Skin Variablen zur Verfügung:
- Window(10000).Property(Vavoo_Device)
Boolean. true wenn das die Hardware eine VAVOO Box ist. - Window(10000).Property(Vavoo_InternetDisconnected)
Boolean. true wenn die Internetverbindung verloren gegangen ist. - Window(10000).Property(Vavoo_BundleInstalled)
Boolean. true wenn ein VAVOO Bundle installiert ist. - Window(10000).Property(Vavoo_Locked)
Boolean. true wenn gerade ein VAVOO Service Fenster im Vordergrund ist. - Window(10000).Property(Vavoo_Guest)
Boolean. true wenn es sich um eine Gast Session handelt. - Window(10000).Property(Vavoo_LoggedIn)
Boolean. true wenn es sich um einen Benutzer Account handelt. - Window(10000).Property(Vavoo_Token)
String. Der aktuelle VAVOO Token. - Window(10000).Property(Vavoo_Running)
Boolean. true wenn der VAVOO Bootstrap vollständig ist.
- VAVOO Service Funktionen
- RunScript(service.vavoo,ftp)
Startet den integrierten FTP Server. - RunScript(service.vavoo,install)
Startet den Bundle Installer. - RunScript(service.vavoo,snapshot)
Tool um eigene Bundles einfach zu erstellen. - RunScript(service.vavoo,logout)
Meldet den Benutzer von einer Gast oder Benutzersession ab.
Skinning
- Empfohlener Inhalt von Startup.xml
Hierfür musst Du die folgenden 2 Dateien in den media Ordner deines Skins kopieren:<?xml version="1.0" encoding="UTF-8"?> <window> <controls> <top>0</top> <left>0</left> <control type="image"> <left>0</left> <top>0</top> <width>100%</width> <height>100%</height> <texture>black.png</texture> </control> <control type="image"> <top>387</top> <left>471</left> <width>978</width> <height>326</height> <texture>vavoo-text.png</texture> </control> <control type="label"> <left>0</left> <top>800</top> <width>100%</width> <height>100</height> <font>font20_title</font> <align>center</align> <label>$LOCALIZE[39586]</label> </control> </controls> </window>
- Empfohlener Inhalt von Startup.xml
- Empfohlende Menüeinträge für DialogButtonMenu.xml
<item> <description>Login</description> <label>$LOCALIZE[39506]</label> <onclick>Dialog.Close(all,true)</onclick> <onclick>RunScript(service.vavoo,profile)</onclick> <visible>!String.isEmpty(Window(10000).Property(Vavoo_LoginEnabled)) + String.isEmpty(Window(10000).Property(Vavoo_Locked)) + !String.isEmpty(Window(10000).Property(Vavoo_Guest))</visible> </item> <item> <description>View profile</description> <label>$LOCALIZE[39607]</label> <onclick>Dialog.Close(all,true)</onclick> <onclick>RunScript(service.vavoo,profile)</onclick> <visible>!String.isEmpty(Window(10000).Property(Vavoo_LoginEnabled)) + String.isEmpty(Window(10000).Property(Vavoo_Locked)) + String.isEmpty(Window(10000).Property(Vavoo_Guest))</visible> </item> <item> <description>Settings</description> <label>$LOCALIZE[5]</label> <onclick>Dialog.Close(all,true)</onclick> <onclick>ActivateWindow(settings)</onclick> <visible>!String.isEmpty(Window(10000).Property(Vavoo_Ready))</visible> </item> <item> <description>VAVOO Box Internet Settings</description> <label>$LOCALIZE[39585]</label> <onclick>StartAndroidActivity("com.android.tv.settings!.connectivity.NetworkActivity")</onclick> <visible>String.isEmpty(Window(10000).Property(Vavoo_Ready)) + System.Platform.Android + !String.isEmpty(Window(10000).Property(Vavoo_Device))</visible> </item> <item> <description>Bundle Installer</description> <label>$LOCALIZE[39582]</label> <onclick>RunScript(service.vavoo,install)</onclick> <visible>String.isEmpty(Window(10000).Property(Vavoo_Locked)) + !String.isEmpty(Window(10000).Property(Vavoo_Ready))</visible> </item> <item> <description>Restart</description> <label>$LOCALIZE[13013]</label> <onclick>RunScript(service.vavoo,restart)</onclick> </item> <item> <description>Quit</description> <label>$LOCALIZE[13012]</label> <onclick>Quit()</onclick> <visible>String.isEmpty(Window(10000).Property(Vavoo_Device))</visible> </item>
- Empfohlende Menüeinträge für Settings.xml
<item> <description>VAVOO Box Internet Settings</description> <label>$LOCALIZE[443]</label> <onclick>StartAndroidActivity("com.android.tv.settings!.connectivity.NetworkActivity")</onclick> <visible>System.Platform.Android + !String.isEmpty(Window(10000).Property(Vavoo_Device))</visible> </item> <item> <description>VAVOO Box Display Settings</description> <label>$LOCALIZE[14220]</label> <onclick>StartAndroidActivity("com.android.tv.settings!.device.display.DisplayActivity")</onclick> <visible>System.Platform.Android + !String.isEmpty(Window(10000).Property(Vavoo_Device))</visible> </item> <item> <description>VAVOO Box System-Update</description> <label>$LOCALIZE[24069]</label> <onclick>StartAndroidActivity("tv.vavoo.base!.UpdateActivity")</onclick> <visible>System.Platform.Android + !String.isEmpty(Window(10000).Property(Vavoo_Device))</visible> </item> <item> <description>Login</description> <label>$LOCALIZE[39506]</label> <icon>icons/settings/profiles.png</icon> <onclick>RunScript(service.vavoo,profile)</onclick> <visible>!String.isEmpty(Window(10000).Property(Vavoo_LoginEnabled)) + !String.isEmpty(Window(10000).Property(Vavoo_Guest))</visible> </item> <item> <description>Display profile</description> <label>$LOCALIZE[39607]</label> <icon>icons/settings/profiles.png</icon> <onclick>RunScript(service.vavoo,profile)</onclick> <visible>!String.isEmpty(Window(10000).Property(Vavoo_LoginEnabled)) + String.isEmpty(Window(10000).Property(Vavoo_Guest))</visible> </item> <item> <description>Bundle Installer</description> <label>$LOCALIZE[39582]</label> <onclick>RunScript(service.vavoo,install)</onclick> </item> <item> <description>Bundle Snapshot</description> <label>$LOCALIZE[39583]</label> <onclick>RunScript(service.vavoo,snapshot)</onclick> <visible>!System.Platform.Android</visible> </item> <item> <description>VAVOO FTP Server</description> <label>$LOCALIZE[39584]</label> <onclick>RunScript(service.vavoo,ftp)</onclick> </item>
- Versionsupdate der Skinning-Engine.
Hierfür müssen unter umständen Teile vom Skin angepasst werden. Die aktuelle Version des Skins kann man via dem folgenden Code herausfinden:<control type="group"> <visible>String.Contains(System.BuildVersion,-addonv2)</visible> <!-- Code for the new skinning engine --> </control> <control type="group"> <visible>!String.Contains(System.BuildVersion,-addonv2)</visible> <!-- Code for the old and outdated skinning engine --> </control>
- Versionsupdate der Skinning-Engine.