Fragen zum DataService-Interface

Hier haben Plugin-Entwickler die Möglichkeit, sich auszutauschen.
Antworten
Coffeejunkie
Junior Member
Beiträge: 18
Registriert: 16 Aug 2017, 20:12

Fragen zum DataService-Interface

Beitrag von Coffeejunkie »

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
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Fragen zum DataService-Interface

Beitrag von ds10 »

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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Coffeejunkie
Junior Member
Beiträge: 18
Registriert: 16 Aug 2017, 20:12

Re: Fragen zum DataService-Interface

Beitrag von Coffeejunkie »

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/
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 Wenn es beim Speichern nicht weiter geht, dann ist in der Regel eine versteckte Exception die Ursache, die man auf der Konsole nicht sieht.
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.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Fragen zum DataService-Interface

Beitrag von ds10 »

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
Coffeejunkie
Junior Member
Beiträge: 18
Registriert: 16 Aug 2017, 20:12

Re: Fragen zum DataService-Interface

Beitrag von Coffeejunkie »

ds10 hat geschrieben: 13 Okt 2020, 21:30 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.
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?
Jo
Site Admin
Beiträge: 11805
Registriert: 07 Apr 2006, 23:39

Re: Fragen zum DataService-Interface

Beitrag von Jo »

Grundsätzlich gibt es auch das TVBConsole-Plugin um bequem die Log-Meldungen anzugucken. Ob es im konkreten Fall weiterhilft, weiß ich aber nicht.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Fragen zum DataService-Interface

Beitrag von ds10 »

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
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Fragen zum DataService-Interface

Beitrag von ds10 »

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
Coffeejunkie
Junior Member
Beiträge: 18
Registriert: 16 Aug 2017, 20:12

Re: Fragen zum DataService-Interface

Beitrag von Coffeejunkie »

ds10 hat geschrieben: 14 Okt 2020, 14:02 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.
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())) {
Also gibt getGroup() null zurück. Das ist sogar halb absichtlich :? Ein Kanal kann nämlich in mehreren Gruppen sein. Also fange ich einfach mal mit der "Alles"-Gruppe an.
Antworten