Fragen zum DataService-Interface
-
- Junior Member
- Beiträge: 18
- Registriert: 16 Aug 2017, 20:12
Fragen zum DataService-Interface
Hi!
Ich versuche, ein eigenes Plugin für eine Datenquelle zu schreiben. Dabei stolpere ich im Moment an zwei Stellen:
1. loadProperties wird erst aufgerufen, nachdem zum ersten Mal getAvailableGroups aufgerufen wurde. Also liefere ich für den ersten Aufruf von getAvailableGroups 0 zurück. In loadProperties lade ich dann die Liste der verfügbaren Sender, die ich gecacht hatte, aber das ist offenbar zu spät. In der Liste der verfügbaren Sender im Einstellungsdialog taucht jedenfalls nichts vom Plugin auf, bevor ich die Liste nicht wieder aktualisieren lasse. Wie ist das denn gedacht mit dem Caching?
2. Sobald ich im Einstellungsdialog einen beliebigen Sender, den das Plugin zur Verfügung stellt, zur Liste der zu ladenden Sender hinzufüge, kann ich den Einstellungsdialog nicht mehr schließen. "OK" führt einfach zu überhaupt keiner erkennbaren Reaktion mehr, genau wie "Übernehmen". Sobald ich den Sender wieder aus der rechten Liste entferne, ist alles wie gewohnt.
Meine Hauptklasse ist von AbstractTvDataService abgeleitet und für Sendergruppen und Sender nehme ich eigene Klassen, die ChannelGroup implementieren, bzw. von Channel abgeleitet sind (eigentlich nur, um einen Konstruktor mit weniger Argumenten zu bekommen, der meine Defaults auffüllt für Channel). Die Metadaten und alles scheinen soweit richtig im Hauptprogramm anzukommen, soweit ich das überprüfen kann.
VG, Mark
Ich versuche, ein eigenes Plugin für eine Datenquelle zu schreiben. Dabei stolpere ich im Moment an zwei Stellen:
1. loadProperties wird erst aufgerufen, nachdem zum ersten Mal getAvailableGroups aufgerufen wurde. Also liefere ich für den ersten Aufruf von getAvailableGroups 0 zurück. In loadProperties lade ich dann die Liste der verfügbaren Sender, die ich gecacht hatte, aber das ist offenbar zu spät. In der Liste der verfügbaren Sender im Einstellungsdialog taucht jedenfalls nichts vom Plugin auf, bevor ich die Liste nicht wieder aktualisieren lasse. Wie ist das denn gedacht mit dem Caching?
2. Sobald ich im Einstellungsdialog einen beliebigen Sender, den das Plugin zur Verfügung stellt, zur Liste der zu ladenden Sender hinzufüge, kann ich den Einstellungsdialog nicht mehr schließen. "OK" führt einfach zu überhaupt keiner erkennbaren Reaktion mehr, genau wie "Übernehmen". Sobald ich den Sender wieder aus der rechten Liste entferne, ist alles wie gewohnt.
Meine Hauptklasse ist von AbstractTvDataService abgeleitet und für Sendergruppen und Sender nehme ich eigene Klassen, die ChannelGroup implementieren, bzw. von Channel abgeleitet sind (eigentlich nur, um einen Konstruktor mit weniger Argumenten zu bekommen, der meine Defaults auffüllt für Channel). Die Metadaten und alles scheinen soweit richtig im Hauptprogramm anzukommen, soweit ich das überprüfen kann.
VG, Mark
Re: Fragen zum DataService-Interface
In den Properties können Einstellungen des Plugins gespeichert werden, die Sender sollen davon unabhängig sein.
Am Besten ist es, wenn du dir ein existierendes Plugin im Quellcode ansiehst. z.B. https://sourceforge.net/p/tvbrowser/cod ... taservice/
Wenn es beim Speichern nicht weiter geht, dann ist in der Regel eine versteckte Exception die Ursache, die man auf der Konsole nicht sieht.
Am Besten ist es, wenn du dir ein existierendes Plugin im Quellcode ansiehst. z.B. https://sourceforge.net/p/tvbrowser/cod ... taservice/
Wenn es beim Speichern nicht weiter geht, dann ist in der Regel eine versteckte Exception die Ursache, die man auf der Konsole nicht sieht.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Junior Member
- Beiträge: 18
- Registriert: 16 Aug 2017, 20:12
Re: Fragen zum DataService-Interface
So bin ich ja überhaupt erst auf die Idee gekommen. Ich hatte mir das SchedulesDirectDataService-Plugin angeschaut, das direkt beim Code dabei ist. Da werden die Kanäle über store/load-Settings rumgereicht. Und in der größeren Auswahl (Danke für den Link!) habe ich einfach mal den DreamboxDataService rausgepickt, da ist es genauso.ds10 hat geschrieben: ↑12 Okt 2020, 21:58 In den Properties können Einstellungen des Plugins gespeichert werden, die Sender sollen davon unabhängig sein.
Am Besten ist es, wenn du dir ein existierendes Plugin im Quellcode ansiehst. z.B. https://sourceforge.net/p/tvbrowser/cod ... taservice/
Und hast Du da einen Tipp, wie ich die dann finde? Loglevel hochsetzen oder so? Ich hatte geschaut, Aufrufe in mein Plugin finden zu dem Zeitpunkt nicht statt, also einfach den Code dort redseliger machen wird nicht helfen.
Re: Fragen zum DataService-Interface
Lege einfach den gesamten Code in der Methode saveSettings() aus devplugin.SettingsTab in ein try{}catch(Throwable t){ t.printStacktrace();} dann müsste das jeden Fehler einfangen und auf der Konsole sichtbar machen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Junior Member
- Beiträge: 18
- Registriert: 16 Aug 2017, 20:12
Re: Fragen zum DataService-Interface
Ich glaube, hier reden wir aneinander vorbei. Mein Plugin hat selbst keinen Einstellungsdialog (hasSettingsPanel liefert false zurück). Ich verwende nur "Allgemeine Einstellungen => Sender", um einen "meiner" Sender von der linken "Verfügbare Sender"-Liste in die rechte "Im TV-Browser dargestellte Sender"-Liste zu kopieren. Sobald rechts einer meiner Sender drin ist, kann ich den Einstellungen-Dialog nicht mehr über "OK" schließen. Nehme ich ihn wieder raus, geht alles wieder.
Oder ich verstehe was falsch. SettingsTab ist ja ein Interface und nicht das, was getSettingsPanel zurückgeben sollte (SettingsPanel). Meinst Du, ich soll TV-Browser komplett selbst kompilieren und irgendwo das printStacktrace() einbauen?
Re: Fragen zum DataService-Interface
Grundsätzlich gibt es auch das TVBConsole-Plugin um bequem die Log-Meldungen anzugucken. Ob es im konkreten Fall weiterhilft, weiß ich aber nicht.
Biete selber TV-Daten an / Provide TV data yourself • Film-/Serienbeschreibungen → https://www.omdb.org
Re: Fragen zum DataService-Interface
Also wenn das Plugin keine Einstellungen hat, dann muss der Fehler irgendwo beim Sender liegen. Das Problem ist dann, dass die Exception in einem anderen Thread auftritt und daher nicht sichtbar ist. Da hilft dann wirklich nur noch TV-Browser im Quellcode zu benutzen und dort an den entsprechenden Stellen mit try{}catch(){} nach der Exception zu suchen. Wenn es an den Sendern liegt wäre da tvbrowser.ui.settings.ChannelsSettingsTab ein guter Anfang.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
Re: Fragen zum DataService-Interface
Ich habe einige Änderungen am Quellcode vorgenommen, so dass die Fehler beim Speichern der Einstellungen jetzt eingefangen werden sollten. Du musst also nur den aktuellen Quellcode aus dem SVN verwenden.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Junior Member
- Beiträge: 18
- Registriert: 16 Aug 2017, 20:12
Re: Fragen zum DataService-Interface
Danke! Das hat geholfen.
java.lang.NullPointerException
at tvbrowser/tvbrowser.ui.settings.ChannelsSettingsTab.saveChannels(ChannelsSettingsTab.java:1212)
at tvbrowser/tvbrowser.ui.settings.ChannelsSettingsTab.saveSettingsInternal(ChannelsSettingsTab.java:1194)
Code: Alles auswählen
if (!groups.contains(channels.get(channels.size()-1).getGroup().getId())) {
![Confused :?](./images/smilies/icon_confused.gif)