Was ist denn mit dir los?!? Verstehe hier null was du sagen möchtest nur das emm nicht richtig läuft bei dir bzw mit Fehlern?? Also ich habe jarvis und Emm im Einsatz und bei mir wird ALLES automatisch gescrapt und in die dB gepflegt wenn ein Client an ist
Ember Media Manager 1.4.8.0 Alpha - Diskussionsthread
-
DanCooper -
5. Februar 2016 um 13:07 -
Geschlossen -
Erledigt
-
-
@grieche47: Mam und Dan sind gerade in der Programmiererwelt. Nicht in unserer Userwelt. Einfach überlesen
-
-
Die TS Dateien? Nachdem ich sie in ISO gebrannt habe?
Aus deiner Angabe zuvor schien es mir so als hättest du da min 3 einzelne Video Dateien. Daher die Empfehlung diese zu einer zusammen zu fügen damit es als 1 Film durchgeht "wenn" du das ganze als Film anstatt Mini-Serie in Kodi nutzen willst.
-
Was ist denn mit dir los?!? Verstehe hier null was du sagen möchtest nur das emm nicht richtig läuft bei dir bzw mit Fehlern
Ja, merkt man, dass Dein Verständnis der Thematik arg eingeschränkt biszu gar nicht vorhanden ist.
Aber dann sollte man vielleicht erstmal den Ball flach halten und nicht gleich laut rumtönen?
Wie NadKP schon richtig erwähnt hatte, geht es hier um programminterne Dinge.
Ember benutzt ein Kodi Interface, dass nicht mehr so wirklich auf dem Laufenden ist und während des Übersetzungsvorgang fast 1500 böse Warnungen ausstösst. Aufgrund der Symmetrie der Warnungen hatte ich den Verdacht, als wenn das von niemandem Lebendigem programmiert worden sei, sondern maschinell von einem Code Generator ("ich schreibe Dir Dein Programm..") erzeugt worden ist.
Dann hatte ich den taktischen Fehler begangen, mich opfern zu wollen, die Warnungen zu beseitigen, angesichts der Masse schon eine böse, mehrwöchige, Fleißarbeit, aber der liebe Dannyboy hat mich "ganz harmlos" darum gebeten, den Code Generator selber zu "reparieren" und dabei so nebenbei "auf den aktuellen Stand" zu bringen.
Und eigentlich ist (war, vor der Rente) das auch genau mein Job, Compilerbau & Co sind meine Lieblingsprojekte.Das besagte Teil habe ich mir dann heute mal angeguckt, es wurde zum letzten Male 2012 "gepflegt", also müsste ich mal eben alle Änderungen von Kodi von 2012 bis heute dort einbauen, in einer Sprache, die nicht wirklich zu meinen sattelfesten zählt, mit einer Zielvorgabe, von der ich keine Ahnung habe (selbst, wenn das Dingen mal wirklich wieder irgendwann durchlaufen sollte, kann ich nicht beurteilen, ob das Ergebnis "richtig" ist, oder nicht).
Der originale Programmierer hat wohl die Lust verloren, oder war mit dem erreichten Stand zufrieden...
Statt einer Wochenbeschäftigung entpuppt sich das Ganze also mehr als Lebensaufgabe, und da ich davon ausgehen muß, dass der, der den "harmlosen" Auftrag gab nun breit grinsend in einer Ecke sitzt und sich totlacht, gibts von mir den . (ich glaub auch, sein Grinsen ist noch viel, viel breiter, weil er da bestimmt auch mal reingeguckt hat und es dann aufgegeben hat...)Also, reg Dich wieder ab, niemand hat von Ember geredet und grüss mir alle anderen Griechen
-
-
Daher schrieb ich ja auch "keine Ahnung" was du schreibst, aber nun hast du mich ja aufgeklärt und ich weiß, das ich keine Ahnung davon habe.
Aber mir ging es auch eher um die Art, mit der du den Text geschrieben hast. Kam mir ein wenig vorwurfsvoll vor und mir kamen deine Post ein wenig negativ rüber.
Und wenn ich mir überlege, das Dan den EMM nur vor einiger Zeit übernommen hat. Das Grundprogramm hat bestimmt schon mehr als 10 Jahre auf dem Buckel, daher finde ich es um so besser wie er derzeit läuft, und zwar relativ perfekt.So, und wenn da nun im code , etwas falsch programmiert ist wo man, wie du schreibst tage/Wochen , braucht um das zu ändern, frag ich mich wieso du das Dan an den Kopf wirst. Ich finde was er macht hat Hand und Fuß und, Bugs werden gemeldet und dann gefixt.
und grüss mir alle anderen Griechen
das ist natürlich nur mein nick aber ich schau was ich machen kann
@nadkp Okay dann bin ich ab sofort auch ruhig und "lass" die mal machen
-
So, und wenn da nun im code , etwas falsch programmiert ist wo man, wie du schreibst tage/Wochen , braucht um das zu ändern, frag ich mich wieso du das Dan an den Kopf wirst. Ich finde was er macht hat Hand und Fuß und, Bugs werden gemeldet und dann gefixt.
Ich werfe nicht, höchstens mit Wattebäuschen
Und Dan ist da die richtige Zielperson, denn bis heute morgen wusste ich nicht, dass dieser Teil aus einer ganz anderen Quelle stammt und gar nicht zu Ember gehört. Insofern hat ihn auch niemand beachtet, oder, Dan hat beachtet, für "zu schwer" befunden und links liegen lassen. Weis ich nicht, aber, wenn nicht er, wer sonst ? .Fakt ist aber, wenn ich mir die Mühe mache, es zum Laufen zu bekommen (bei sowas etwickle ich mit ausreichend Wut im Bauch einen sehr konstruktiven Ehrgeiz, das darf man nicht mit "sauer sein" verwechseln), dann wird einiges von dem, was Dan nun schon geändert hat, wieder hinfällig sein, und überarbeitet werden müssen. Auch nicht das Gelbe vom Ei.
DanCooper: (und alle Griechen wenden sich nun mit Grausen ab, denn nun wirds arg technisch !)
Kann es sein, dass jemand (aka DU) an den Ausgabedateien manuell rumgefuckelt hat?
Als Beispiel nehmen wir mal Addons.ExecuteAddons (ist so schön das allererste).In Kodi definiert als (ich schreibs mal in VB )
function Addon.ExecuteAddons(AddonID as string (REQUIRED), Params as object=NULL, wait as boolean = false) as stringIn Ember definiert als (C#)
public async Task<string> ExecuteAddon(XBMCRPC.Addons.ExecuteAddon_params1 params_arg, string addonid=null, bool wait=false)
+2 Überladungen
public async Task<string> ExecuteAddon(global::System.Collections.Generic.List<string> params_arg, string addonid=null, bool wait=false)
public async Task<string> ExecuteAddon(string params_arg, string addonid=null, bool wait=false)Das Tool spuckt aber aus:
async public Task<string> ExecuteAddon(string addonid=null, bool wait=false);
async public Task<string> ExecuteAddon2(string addonid=null, string[] params_arg=null, bool wait=false)
async public Task<string> ExecuteAddon2(string addonid=null, string params_arg=null, bool wait=false)Das hat ja nun so gar nichts miteinander zu tun...
Kann es sein, dass "jemand" die Ember Version manuell angepasst hat ?
Und wie soll ich die Funktionen "ExecuteAddon" und "ExecuteAddon2" jemals automatisch zusammenfassen ?
Irgendwas ist doch da gründlich verkehrt... klär mich auf!
-
-
Update: AAAARGHHHH!!!! nach viel Basteleien flutscht es nun endlich durch den Compiler, nur um zu offenbaren, dass es jahrhundertelang nicht gepflegt wurde und deshalb mit dem aktuellen Kodi GAR NICHTS MEHR anfangen kann. Nach ein paar harmlosen NULL Pointer Abstürzen bin ich nun soweit, dass man erkennen kann, dass selbst so einfache Typen wie "integer" oder "number" unbekannt sind, und bei strings nirgendwo damit gerechnet wird, dass derselbe auch leer sein könnte. Das Teil produziert zwar schon dutzende von Dateien und Unterverzeichnisse, aber der eigenliche Sinn erschliesst sich mir nicht (bin wohl erst beim Einsammeln der Schnittstelle, das, was da überbleibt hat noch nix mit inkludierbarem Code zu tun...)
Das sieht mehr nach Lebensaufgabe, als nach kurzfristiger Abhilfe aus. Bis zu welcher Kodi Version soll das Teil denn noch funktioniert haben???Genau soweit kam ich vor kurzem auch
Der eigetliche Sinn ist, dass die Software anhand der JSON Introspect-Ausgabe automatisch eine C# Interface generiert, das alle Funktionen enthält, die das Kodi Interface zur Zeit besitzt.
Das/der/die Introspect wiederspiegelt alle Funktionen des Kodi JSON-RPC Interfaces. Mehr dazu hier: LinkKann es sein, dass jemand (aka DU) an den Ausgabedateien manuell rumgefuckelt hat?
Ich hab nur ein paar Zeilen gefixt, die so nicht richtig funktioniert haben: Commit
Kann es sein, dass "jemand" die Ember Version manuell angepasst hat ?
Ich denke nicht. Das Ganze hatte damals @Cocotus mit Hilfe des Client Generators erstellt. Nur er kann dir sagen, ob er dafür noch etwas anpassen musste. Das komplette Interface wurde ca. am 07.07.2015 erstellt, sehr warscheinlich mit der damals aktuellen Kodi Version: Commit
Und wie soll ich die Funktionen "ExecuteAddon" und "ExecuteAddon2" jemals automatisch zusammenfassen ?
Müsste ich mir jetzt auch genauer ansehen.
Einerseits kann ich mir nicht vorstellen, dass sich in letzter Zeit etwas gravierendes am Kodi JSON Interface geändert hat, denn es sind ja hauptsächlich einfach neue Funktionen hinzugekommen. Andererseits kam auch ich bei meinen Versuchen zu keinem Ergebnis. Das letzte Update ist von 2012, also sehr warscheinlich noch aus XBMC Zeiten.
Das Projekt besteht ja vor allem aus JsonRpcGen, der alleinig dafür zuständig sein dürfte, dass aus dem Introspect die C# Klassen generiert werden. Im Projekt ist aber so wie ich das verstanden habe auch noch ein fertiges Kodi JSON-Abbild von 2012 vorhanden. Vielleicht hat Cocotus auch einfach dieses verwendet und gar kein eigenes erstellt.Frage ist nun, ob es eine neuere Version von JsonRpcGen gibt, die evtl. sogar funktionieren würde.
Wie gesagt, aktuell stören die Warnungen nur und produzieren keine Fehler. Man könnte es also so belassen. Für zukünftige Updates seitens Kodi wäre aber ein automatisch erstelltes Abbild schon toll.
Ich überlasse es dir, wieviel Zeit du dafür investieren willstEDIT: Für alles weitere würde ich dann PN vorschlagen.
-
Na ja, ich bin (natürlich?) schon ein wenig weiter, beisse aber jetzt langsam nur noch auf Granit
Die einfachen Syntaxprobleme und die bislang fehlenden Typen konnte ich ergänzen / umschiffen, aber dann traf mich der Oberhammer : "myExceptionNotYetImplemented".
Offensichtlich hat da jemand "dammals" aufgehört, als es anfing kompliziert zu werden. Bzw, Teile, die damals nicht erforderlich waren, wurden niemals umgesetzt.
Das Zeuch steckt gaaanz tief im Eingemachten, er schafft schon ein paar hundert Header einwandfrei zu generieren (na ja, "einwandfrei" ist noch etwas relativ, die neuen Typen setze ich erstmal als Kommentare ein und will dann sehen, ob sie überhaupt jemals benutzt werden, aber dafür muss der Kram ja zumindest ersmal komplett durchlaufen).Du wirst sicherlich nicht alle Funktionen benötigen, sondern das Kodi Interface auf einen bestimmten Befehlssatz begrenzen.
Leider gehört wohl die aktuelle Baustelle, die mich zur Verzweiflung treibt, sicherlich dazu:
Videolibrary.SetEpisodeDetails(mit einer Gazillion (aka 21) von Parametern)
Das Problem dabei ist wohl, das die Anzahl der Parameter ihm das Gnick brechen, denn er möchte gerne für jede Variation eine überladene Funktion generieren.
Das wären dann mal eben 2^17-1 also 2097151 Funktionen....
Außerdem geht das dann noch gnadenlos in die Hose, da die meisten davon nicht unterscheidbare Parameter enthalten (also String1, String2 usw... da kann es keine funktionierende Überladung geben).
Ab einer gewissen Schachtelungstiefe kommt dann die Notbremse mit besagter ExceptionNotYetImplemented...Vielleicht sollte man den ganzen Kram weglassen und stattdessen Deine so heißgeliebten (und, ich gebe zu, HIER MACHEN SIE WIRKLICH SINN!) Konstrukte "int?" usw verwenden?
Also keine Überladung, aber alle (bis auf die REQUIRED markierten) Parameter als nullable.
Dann hätten wir jeweils nur eine Funktion mit jeweils der maximalen Anzahl von Parameter.Wie sehen denn die Aufrufe in Ember aus (bin zu faul zum Suchen, da frag ich doch lieber einen, der es wissen muss ) ? Verwendest Du Überladungen oder immer MaxParam?
(ein kurzer Scan zeigte mir, dass da noch so ca 20 NotYetImplemented auf mich warten, keine Ahnung, ob die auch noch irgendwann hochpoppen und ich jeweils wieder erraten darf, was der Dichter uns damit sagen wollte. Aber wie heißt es so schön bei Murphy: "hinter jedem großen Problem in der Programmierung warten noch hundert kleine darauf, rausgelassen zu werden..."
Achso: die Frage mit ExecuteAddon() und ExecuteAddon2() hat sich aufgeklärt: der Generator setzt immer eine "2" ans Ende, wenn er eine überladene Funktion generiert. Ist zwar Quatsch, aber zumindest hab ich schon mal die Stelle gefunden und kann sie auskommentieren (keine Ahnung, was das soll, erst mühsam Überladungen definieren, dann den Namen so verhunzen, dass sie nicht benutzbar sind...)
-
-
Videolibrary.SetEpisodeDetails(mit einer Gazillion (aka 21) von Parametern)
Das Problem dabei ist wohl, das die Anzahl der Parameter ihm das Gnick brechen, denn er möchte gerne für jede Variation eine überladene Funktion generieren.
Das wären dann mal eben 2^17-1 also 2097151 Funktionen....
Außerdem geht das dann noch gnadenlos in die Hose, da die meisten davon nicht unterscheidbare Parameter enthalten (also String1, String2 usw... da kann es keine funktionierende Überladung geben).
Ab einer gewissen Schachtelungstiefe kommt dann die Notbremse mit besagter ExceptionNotYetImplemented...Vielleicht sollte man den ganzen Kram weglassen und stattdessen Deine so heißgeliebten (und, ich gebe zu, HIER MACHEN SIE WIRKLICH SINN!) Konstrukte "int?" usw verwenden?
Also keine Überladung, aber alle (bis auf die REQUIRED markierten) Parameter als nullable.
Dann hätten wir jeweils nur eine Funktion mit jeweils der maximalen Anzahl von Parameter.Wie sehen denn die Aufrufe in Ember aus (bin zu faul zum Suchen, da frag ich doch lieber einen, der es wissen muss ) ? Verwendest Du Überladungen oder immer MaxParam?
Das verstehe ich auch nicht... Videolibrary.SetEpisodeDetails braucht keine überladene Funktionen, das gibt's nur in der Variante mit allen Parametern, jedoch bis auf die Library.Id alles optional.
Hier denke hier ist NULL bei allen Parametern nötig, also int?, string? usw., denn die Klasse verhällt sich so:NULL = keine Änderung in der Kodi DB am bestehenden Eintrag/Parameter, da dieser Parameter gar nicht an Kodi übermittelt wird
String.Empty bzw. 0 oder Wert = Änderung am bestehenden Eintrag
So kann man z.B. einfach nur den Plot setzten und an Kodi wird dann nur der Plot übertragen. Das Ember-KI setzt natürlich immer alle Werte beim Sync, aber das spielt hier keine Rolle.
Und... jaaa, hier gibt's wirklich nur die Lösung mit type?, zumindest fällt mir keine andere einBei den meisten Videolibrary.Get*Details machen überladene Funktionen schon mehr sinn, denn dort gibt's ja auch diverse Filter und Limitierungen. Ob's die wirklich nötig sind kann ich dir nicht sagen, das müsste ich auch erstmal prüfen.
Zur Zeit benötigen wir nur einen kleinen Teil des ganzen Interfaces. Es wäre aber trotzdem wünschenswert, wenn das ganze Interface abbildbar wäre.
-
ich hab übrigens doch schon ein paar Erweiterungen gefunden, die derzeit NICHT im Interface enthalten sind. Vor allen Dingen bei den Filtern sind neue Abfragen hinzugekommen, z.B. "userscore". Ob man die ein Ember brauchen kann, steht auf einem anderen Blatt.
Na ja, von A bis V komme ich ja schon W bis Z wird sich auch noch ergeben... aber derzeit bin ich wirklich ratlos.
Locutus von Borg, ääh, Cocutus , hat übrigens doch reichlich Hand angelegt, fast bekommt man den Eindruck, als würden die ganzen Funktionen des Generators gar nicht verwendet, sondern er führt seinen eigenen Serializer ein stattdessen.
Zumindest habe ich bislang noch keinen einzigen Aufruf der in der API definierten Methoden entdecken können. Nur die Klassen und Typen kommen zum Einsatz. Aber vielleicht bin ich auch blind, ist ne ganze Menge Holz der Teil und zudem noch in verschiedenen Sprachen, da kann man schon ins Grübeln kommen... -
-
ich hab übrigens doch schon ein paar Erweiterungen gefunden, die derzeit NICHT im Interface enthalten sind. Vor allen Dingen bei den Filtern sind neue Abfragen hinzugekommen, z.B. "userscore". Ob man die ein Ember brauchen kann, steht auf einem anderen Blatt.
Na ja, von A bis V komme ich ja schon W bis Z wird sich auch noch ergeben... aber derzeit bin ich wirklich ratlos.
Locutus von Borg, ääh, Cocutus , hat übrigens doch reichlich Hand angelegt, fast bekommt man den Eindruck, als würden die ganzen Funktionen des Generators gar nicht verwendet, sondern er führt seinen eigenen Serializer ein stattdessen.
Zumindest habe ich bislang noch keinen einzigen Aufruf der in der API definierten Methoden entdecken können. Nur die Klassen und Typen kommen zum Einsatz. Aber vielleicht bin ich auch blind, ist ne ganze Menge Holz der Teil und zudem noch in verschiedenen Sprachen, da kann man schon ins Grübeln kommen...Diese Frage kann nur Herr @Cocotus beantworten. Er hatte mir damals den Link zum Projekt genannt und dann irgendwann das ganze auf Github gepush. Ich hab dann nur noch akzeptieren gedrückt
Wenn ich mir den bereits im SourceCode-ZIP enthaltenen Stand ansehe, dann tauchen dort schon ziemlich die selben Klassen wie bei uns auf. Bei uns sind sie einfach in anderen ordner gelistet und ein teil scheint zu fehlen... keine Ahnung ob da ein wenig "aufgeräumt" wurde seitens Cocotus. -
Ok, wer lange nagt, beißt endlich durch... Also der Kram hat sich jetzt vordringlich erstmal ergeben. Ich musste noch ein paar Stellen von NULL Pointern bewahren und liefere bei unbekannten (oder: nicht erkannten) Typen nun ganz braun "string" zurück, aber, zumindest läuft der Kram nun bis zum Ende durch und erzeugt alle Dateien.
Das muss erstmal noch nicht viel heißen, denn es kann ja auch großer Mist drinstehen. Wie also testen?
Hier mal ein Auszug (besagte böse Funktion, die dauernd ins Essen brach):
C
Alles anzeigenasync public Task<string> SetTVShowDetails(int tvshowid=0, string title=null, int? playcount=null, string[] studio=null, string plot=null, string[] genre=null, double? rating=null, string mpaa=null, string imdbnumber=null, string premiered=null, string votes=null, string lastplayed=null, string originaltitle=null, string sorttitle=null, string episodeguide=null, string thumbnail=null, string fanart=null, string[] tag=null, XBMCRPC.Media.Artwork.Set art=null, int? userrating=null) { var jArgs = new JObject(); if (tvshowid != null) { var jproptvshowid = JToken.FromObject(tvshowid, _client.Serializer); jArgs.Add(new JProperty("tvshowid", jproptvshowid)); } if (title != null) { var jproptitle = JToken.FromObject(title, _client.Serializer); jArgs.Add(new JProperty("title", jproptitle)); } if (playcount != null) { var jpropplaycount = JToken.FromObject(playcount, _client.Serializer); jArgs.Add(new JProperty("playcount", jpropplaycount)); } if (studio != null) { var jpropstudio = JToken.FromObject(studio, _client.Serializer); jArgs.Add(new JProperty("studio", jpropstudio)); } if (plot != null) { var jpropplot = JToken.FromObject(plot, _client.Serializer); jArgs.Add(new JProperty("plot", jpropplot)); } if (genre != null) { var jpropgenre = JToken.FromObject(genre, _client.Serializer); jArgs.Add(new JProperty("genre", jpropgenre)); } if (rating != null) { var jproprating = JToken.FromObject(rating, _client.Serializer); jArgs.Add(new JProperty("rating", jproprating)); } if (mpaa != null) { var jpropmpaa = JToken.FromObject(mpaa, _client.Serializer); jArgs.Add(new JProperty("mpaa", jpropmpaa)); } if (imdbnumber != null) { var jpropimdbnumber = JToken.FromObject(imdbnumber, _client.Serializer); jArgs.Add(new JProperty("imdbnumber", jpropimdbnumber)); } if (premiered != null) { var jproppremiered = JToken.FromObject(premiered, _client.Serializer); jArgs.Add(new JProperty("premiered", jproppremiered)); } if (votes != null) { var jpropvotes = JToken.FromObject(votes, _client.Serializer); jArgs.Add(new JProperty("votes", jpropvotes)); } if (lastplayed != null) { var jproplastplayed = JToken.FromObject(lastplayed, _client.Serializer); jArgs.Add(new JProperty("lastplayed", jproplastplayed)); } if (originaltitle != null) { var jproporiginaltitle = JToken.FromObject(originaltitle, _client.Serializer); jArgs.Add(new JProperty("originaltitle", jproporiginaltitle)); } if (sorttitle != null) { var jpropsorttitle = JToken.FromObject(sorttitle, _client.Serializer); jArgs.Add(new JProperty("sorttitle", jpropsorttitle)); } if (episodeguide != null) { var jpropepisodeguide = JToken.FromObject(episodeguide, _client.Serializer); jArgs.Add(new JProperty("episodeguide", jpropepisodeguide)); } if (thumbnail != null) { var jpropthumbnail = JToken.FromObject(thumbnail, _client.Serializer); jArgs.Add(new JProperty("thumbnail", jpropthumbnail)); } if (fanart != null) { var jpropfanart = JToken.FromObject(fanart, _client.Serializer); jArgs.Add(new JProperty("fanart", jpropfanart)); } if (tag != null) { var jproptag = JToken.FromObject(tag, _client.Serializer); jArgs.Add(new JProperty("tag", jproptag)); } if (art != null) { var jpropart = JToken.FromObject(art, _client.Serializer); jArgs.Add(new JProperty("art", jpropart)); } if (userrating != null) { var jpropuserrating = JToken.FromObject(userrating, _client.Serializer); jArgs.Add(new JProperty("userrating", jpropuserrating)); } var jRet = await _client.GetData<string>("VideoLibrary.SetTVShowDetails", jArgs); return jRet; }
Sieht m.E.n erstmal nicht total falsch aus, aber wer weis? (sind natürlich immer noch dieselben warnings drin, ich hab ja noch gar nix am output geändert sondern wäre erstmal froh, gesichert, dasselbe Ergebnis wie zuvor produzieren zu können).
Das es "neu" ist, erkennst Du am letzten Parameter "userrating", den gibts bislang in Ember noch nicht (bzw, den gabs im Output des Originaltools noch nicht, vielleicht wurde er ja manuell in Ember hinzugefügt? Hab ich nicht überprüft) -
-
@mam sieht doch schonmal gut aus! Und ja, userrating ist neu und in Ember noch nicht verfügbar.
Ich würde sagen, dass der ganze Code soweit passt, nur das hier sollte eigentlich zu einem Abbruch oder Return führen, wenn Null. Bring ja nicht's den Befehl weiter zu bearbeiten wenn keine tvshowid gegeben ist. Wobei ich jetzt auch nicht weiss, ob Null überhaupt möglich ist oder ob C# dann automatisch den Defaultwert 0 setzt. tvshowid ist ja nicht optional...
Theoretisch könnte ja tvshowid = 0 tatsächlich ein EIntrag in der Datenbank sein, dann sollte nicht einfach 0 verwendet werden wenn man (ich) Null als Wert sende. Aber vielleicht geht das auch gar nicht dank überprüfung in VS.Cif (tvshowid != null) { var jproptvshowid = JToken.FromObject(tvshowid, _client.Serializer); jArgs.Add(new JProperty("tvshowid", jproptvshowid)); }
Da du ja auf dem richtigen Weg bist erkläre ich hier auchmal, wieso der ganze Aufwand Sinn macht:
Aktuelles Problem: Ember kann zur Zeit immer nur eine Kodi JSON-API Version unterstützen. D.h., dass viele neue Funktionen auf der Strecke bleiben, da ich nicht immer nur die aktuellste Version von Kodi unterstützen möchte. OpenElec ist ja z.B. meistens etwas hinterher was aktuelle Builds betrifft. Da ich selbst OpenElec verwende will ich natürlich auch, dass ich das KI nutzen kann. Dies geht aber nur so lange wir nur die alten Funktionen und Parameter nutzen.Meine Idee war nun, dass wir eine Library aufbauen, die alle bzw. die aktuelle und vielleicht letzten zwei JSON-API Versionen von Kodi unterstützen. Dafür muss unsere Kodi-API (alles heisst hier irgendwie gleich...) beim Erstellen des Clients die API Version von Kodi liest und dann die entsprechenden Parameter entfernt, welche Kodi nicht erkennen und somit einen Fehler generieren würde. So kann ich im Kodi Interface immer alle Parameter setzen und die Kodi-API passt sie entsprechend der vom User verwendeten Kodi-Version an
Klingt erstmal kompliziert, ist aber relativ einfach mit Select Case API > 6.2 umsetzbar. Ich will aber nicht bei jedem JSON-API Update erstmal von Hand alle Calls prüfen, dafür soll dann eben "dein" Code Generator hinhalten Mann muss dann "halt" noch ein paar Vergleiche usw. einbauen
-
Ich hab da mal eine Frage, ich bearbeite alle meine Filme mit Ember Media Manager, und erstelle auch Film Sets.
Wenn ich in Kodi, nun Locale Infos auswähle, dann zeigt er mir zwar alles an, wenn ich aber in Ember nochmals die Cover wechsle, und danach den Film in Kodi aus der DB entferne und neu einlese, hat er wieder das alte Cover, obwohl im Ordner aber schon das neue liegt.
An was kann das denn liegen?
-
-
Ich hab da mal eine Frage, ich bearbeite alle meine Filme mit Ember Media Manager, und erstelle auch Film Sets.
Wenn ich in Kodi, nun Locale Infos auswähle, dann zeigt er mir zwar alles an, wenn ich aber in Ember nochmals die Cover wechsle, und danach den Film in Kodi aus der DB entferne und neu einlese, hat er wieder das alte Cover, obwohl im Ordner aber schon das neue liegt.
An was kann das denn liegen?
Kodi erneuert den Cache nicht immer sofort. Spätestens aber alle 12h oder 24h (weiss es nicht mehr genau).
Wenn Du mit der Ember Alpha arbeitest könntest Du aber auch das Kodi Interface einrichten, dann werden Änderungen beim Editieren/Scrapen direkt an Kodi übermittelt, ohne manuelles Neuladen in Kodi. Dabei wird auch der Cache für den Film gelöscht. Kodi ist dann beim erneuten Anzeigen gezwungen, die neuen Bilder zu cachen um sie anzeigen zu können. Notfalls muss du einfach ins Hauptmenü zurück und dann wieder in die Film/Serienliste, damit das Bild geladen wird.
-
Benutze noch die Beta.
ich lösche halt immer die textures.db und neustarte dann, was ich aber sehr umständlich finde, schade das es nicht einfach ein "Flush" Addon gibt für den Cache.
-
-
Benutze noch die Beta.
ich lösche halt immer die textures.db und neustarte dann, was ich aber sehr umständlich finde, schade das es nicht einfach ein "Flush" Addon gibt für den Cache.
Da gibt's sowas, jedoch nicht als Addon sondern als Script für den PC (soweit ich das verstanden habe): Link
-
Sag nicht "mein", bislang habe ich immer noch nicht wirklich Ahnung, wie das Teil irgendwas tut, alle Arbeit bislang gingen nur in die Stellen ein, DAMIT das Teil überhaupt etwas tut, und nun konzentriere ich mich darauf, zu überprüfen, ob es etwas Sinnvolles tut...
So kann ich im Kodi Interface immer alle Parameter setzen und die Kodi-API passt sie entsprechend der vom User verwendeten Kodi-Version an
Klingt erstmal kompliziert, ist aber relativ einfach mit Select Case API > 6.2 umsetzbar.
Nö, klingt nicht wirklich kompliziert, ist aber m.E.n unnötig.
Der ganze Kram wird ja serialisiert, und ich wette, dass die Kodiseite beim Auspacken ganz entspannt vorgeht. Unbkannte Parameter werden einfach ignoriert, genauso ist es beim Rücklesen, Felder, die die aktuelle API nicht kennt, werden bei einer Abfrage einfach nicht ausgeliefert. Käme auf einen einfachen Test an, probier doch mal aus, was passiert, wenn Du irgendeinen Unsinn mitsendest.Insofern sollte es völlig ausreichen, immer die neueste API für einen Aufruf zu nehmen, die alten sollten dabei nicht ins Essen brechen.
Mehrere APIs parallel zu betreiben wird heilloses Chaos mit den Namen bringen, es sei denn, wir einigen uns zügig auf eine Nomenklatur a la <Methode><Version> also z.B. "ExecuteAddon632". (Sieht hässlich aus und Du kannst Dich schon mal auf fleißige Änderungen vorbereiten, molto Tippolo... bei jedem API Wechsel)
Anders siehts natürlich aus, wenn neue Methoden hinzukommen, die erst ab einen gewissen API Stand verfügbar sind. Allerdings könnte das dann im Einzelfall schwierig werden, wenn Ember sich viel Mühe in der Gui und den internen Funktionen gibt, um irgendeinen "tollen" Menüpunkt zu realisieren und ganz am Ende der Kette kriegt der Usah dann die Messagbox "Sorry, aber Ihr Kodi kann das hier noch nicht...".
Aber ich entnehme Deinen Ausführungen, dass Du als erste "Verbesserung" die API Version auslesen können möchtest? hängt ganz hinten an den Daten dran und wird im Moment einfach weggeschmissen. >> "version": "6.32.5"
Genausogut werden im Moment die vorhandene Kommentare der API einfach weggeschmissen, ich will versuchen, sie bei den Funktionen mit in den Source Code einzubauen. Im Moment hat die ja jemand händisch hinzugefügt (an manchen Stellen), aber warum tippen, wenn man nur kopieren muss?
Es ist eigentlich kein großes Problem, den ersten Parameter auch nullable zu machen oder beim Wert 0 (den ich nicht wirklich als gültig betrachte) einfach ein Return einzubauen gleich oben am Beginn einer Methode.
-
-
Wollte mich auch nochmal melden, hab gestern mal die Alpha installiert, und ich weiß es heißt Alpha.
Aber beim Kodi Interface updatet sich bei mir garnichts Instant, ich kann aus der bibliotheksansicht rausgehen und wieder rein, das alte cover ist immer noch da, hab es auch mit datenbankakutalisierung probiert, oder den Film ganz raus geworfen.
-
Aber beim Kodi Interface updatet sich bei mir garnichts Instant,
Hmm, vielleicht ein kleines Verständnisproblem bei der Bedienung ?
Also:
* Kodi starten und in die Ecke legen (sprich: NICHTS DAMIT TUN)
* Ember starten und in den Einstellungen sicherstellen, dass sowas da vorhanden ist:
(wobei Deine Kodiverbindung garantiert nicht "OCTOWIN10" heißt, aber die Haken sollten dieselben sein)
Damit das Ganze auch wirkt, müssen ZUSÄTZLICH bei FILME und (!) TV Serien noch diese Haken gesetzt sein:So vorbereitet kann man einen ersten harmlosen Test starten:
* such Dir irgendwas (Film / Episode) in Ember aus, drück die rechte Maustaste, wähle Kodi Interface... und SYNCHRONISIEREN.
Ember wird Dir dann oben rechts einen "pending Task" anzeigen, aber bevor Du das lesen kannst, muss Kodi schon PLING! gemacht haben (und wenn man das Kodi Fenster gerade offen hatte steht da kurz ne Meldung "Ember Media Manager: akualisiert... <dein Film/Episodenname>"Wenn das klappt, ist alle ok. Ansonsten überprüfe, ob Du in den Einstellungen von Ember z.b. die falsche IP Adresse / Portnummer / Username / Passwort eingetragen hast, oder bei Kodi vergessen hast, das Webinterface zu starten. Im dümmsten Falle steht dann irgendwo noch ein Firewall auf der Leitung rum und verhindert die Kommunikation. Also, eins nach dem anderen checken und neu probiere, bis es PLING! macht...
Aber immer wieder dran denken: KODI MUSS LAUFEN, sonst kann Ember nicht synchronisieren.
-
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!