Versuche es mal mit Debug-Ausgaben ausgehend von svdrpservice/connection.c, Funktion cSvdrpConnection::Connect()
[gelöst] Remotetimers/lcars-Patch
-
-
Hab mal das Debugging aktiviert:
Wenn ich Blau drücke, sehe ich das:
CodeFeb 20 23:55:07 vdr vdr: [5247] READ 220 homeserver SVDRP VideoDiskRecorder 1.7.38; Wed Feb 20 23:55:15 2013; UTF-8 Feb 20 23:55:07 vdr vdr: [5247] SvdrpService: connected to 192.168.1.56:6419 Feb 20 23:55:07 vdr vdr: [5247] SEND LSTT id#015 Feb 20 23:55:07 vdr vdr: [5247] READ 250 1 1:S19.2E-133-14-124:2013-02-27:2135:2250:50:99:American Horror Story:<epgsearch><channel>163 - Fox HD</channel><searchtimer>American Horror</searchtimer><start>1361997300</start><stop>1362001800</stop><s-id>0</s-id><eventid>67196811</eventid></epgsearch> Feb 20 23:55:07 vdr vdr: [5247] timer 1 (163 2135-2250 'American Horror Story') set to event Mit 27.02.2013 21:50-22:35 'American Horror Story' Feb 20 23:55:07 vdr vdr: [5247] closing SVDRP connection
Wenn ich ins Hauptmenü gehe, verbindet er sich garnicht - weder mit dem LCARS-Patch, noch mit skinnopacity.
Feb 20 23:55:59 vdr vdr: [5247] connect from 127.0.0.1, port 34509 - accepted
Feb 20 23:56:00 vdr vdr: [5247] closing SVDRP connectionDas kommt daher, dass ich das menu per svdrp öffne, weil ich am Rechner sitze.
Also entweder gehen die Patches nicht, oder irgendwas anderes läuft schief. Was kann verursachen, dass er sich im Hauptmenü garnicht erst verbindet?
-
Ich hab mir nun in remotimers.c in die Funktion Service(...) ein paar Debug Ausgaben eingebaut.
Gehe ich nun ins Hauptmenu, wird Service(...) des remotetimers-Plugins garnicht aufgerufen.
Die Zeile hier funktioniert bei mir also nicht:
drawRemoteTimers = pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg);
Hmm....
-
So habs gelöst, nachdem ich mal geforscht habe, wie andere Plugins das machen:
Damit läufts bei mir (getestet mit skinnopacity):
Code- static cPlugin* pRemoteTimers = cPluginManager::CallFirstService("RemoteTimers::RefreshTimers-v1.0", NULL); + static cPlugin* pRemoteTimers = cPluginManager::GetPlugin("remotetimers");
Wenn ich die Funktion CallFirstService richtig deute, chect diese Funktion alle Plugins, ob der Serviceaufruf vorhanden ist und falls ja, gibt sie das Plugin zurück. Warum das bei mir nicht geht, weiß ich nicht. GetPlugin macht ja im Grunde nichts anderes, außer anstatt dem Service-Aufruf, den Pluginnamen zu vergleichen. RemoteTimers::RefreshTimers-v1.0" sollte ja eigentlich immer TRUE zurückliefern und somit CallFirstService das Plugin. Daher keine Ahnung, warum das hier nicht geht.
Im übrigen sind die remotetimers solange nicht verfügbar, wie epgsync noch läuft.
Grüsse
TheChief -
Im übrigen sind die remotetimers solange nicht verfügbar, wie epgsync noch läuft.
SVDRP kann ja auch nur einen Client gleichzeitig bedienen. -
Naja, ich dachte der Sinn von svdrpservice ist, dass sich mehrere Clients eine Verbindung teilen. Aber kann gut sein, dass epgsync erst alles abarbeiten muss und ich nicht zwischendurch einen anderen Befehl senden kann.
Zitat
So it is even possible to share a single SVDRP connection among multiple plugins on the same client. -
So habs gelöst, nachdem ich mal geforscht habe, wie andere Plugins das machen:
Damit läufts bei mir (getestet mit skinnopacity):
Code- static cPlugin* pRemoteTimers = cPluginManager::CallFirstService("RemoteTimers::RefreshTimers-v1.0", NULL); + static cPlugin* pRemoteTimers = cPluginManager::GetPlugin("remotetimers");
Wenn ich die Funktion CallFirstService richtig deute, chect diese Funktion alle Plugins, ob der Serviceaufruf vorhanden ist und falls ja, gibt sie das Plugin zurück. Warum das bei mir nicht geht, weiß ich nicht. GetPlugin macht ja im Grunde nichts anderes, außer anstatt dem Service-Aufruf, den Pluginnamen zu vergleichen. RemoteTimers::RefreshTimers-v1.0" sollte ja eigentlich immer TRUE zurückliefern und somit CallFirstService das Plugin. Daher keine Ahnung, warum das hier nicht geht.
So mache ich das mit den epgsearch services eigentlich auch, ich habe das bei remotetimers nur so gemacht, weil das im "original Patch" für LCARS auch so gemacht war...
@seahawk: du scheinst das ja auch zu benutzen, könntest du bitte mal testen, ob es mit dir bei dieser Änderung auch funktioniert? Dann würde ich das so im Skin einbauen, scheint ja so "allgemein verträglicher" zu sein.
Ciao Louis
-
Kann auch sein, dass hier das Problem hinter dem Keyboard sitzt, aber ich kann beim besten Willen nicht erkennen, warum CallFirstService bei mir nicht geht.
-
Hallo zusammen
So habs gelöst, nachdem ich mal geforscht habe, wie andere Plugins das machen:
Damit läufts bei mir (getestet mit skinnopacity):
Prima, damit funktioniert die Anzeige der Remote-Timers auch bei mir - ohne diese Änderung wurden sie bei mir auch nicht angezeigt.
Vielen Dank dafür,
Alex -
Na dann war ich ja doch nicht der einzige.
-
Hier geht es mit der Anpassung auch noch - prinzipiell finde ich es aber unschön die Versionsabfrage rauszunehmen...
-
Grundsätzlich bleibt die ja bestehen, denn "RemoteTimers::RefreshTimers-v1.0" wird ja ein paar Zeilen später nochmal aufgerufen.
Ich kann mir eigentlich nur vorstellen, dass hier aus irgendeinem Grund "return **errorMsg == NULL;" zurückgegeben wird, obwohl CallFirstService mit Data == NULL aufgerufen wird.
Code
Alles anzeigenif (strcmp(Id, "RemoteTimers::RefreshTimers-v1.0") == 0) { if (Data) { cString *errorMsg = (cString *) Data; if (svdrp->Connect() && RemoteTimers.Refresh() == rtsOk) { cSchedulesLock SchedulesLock; const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock); if (Schedules) { for (cRemoteTimer *timer = RemoteTimers.First(); timer; timer = RemoteTimers.Next(timer)) { timer->SetEventFromSchedule(Schedules); // make sure the event is current } } } else { *errorMsg = tr(MSG_UNAVAILABLE); } svdrp->Disconnect(); return **errorMsg == NULL; } return true; }
Vielleicht tuts ja auch ein:
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!