You are not logged in.

Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Urig

Professional

  • "Urig" started this thread

Posts: 1,223

Location: Kassel

  • Send private message

1

Saturday, October 4th 2008, 7:35pm

[ANNOUNCE] OSD-Server 0.1.2 + Perl-Module

Hi,


Eine neue Version von OSDServer ist verfügbar. Die neue Version fixt einen Bug mit Edit-Menüitems, der erstaunlicherweise seit VDR 1.5.11 nicht aufgefallen ist...

Außerdem ist erstmals ein neues, experimentelles Perl-Modul dabei, das das Netzwerkprotokoll von OSDServer komplett kapselt, und ein objektorientiertes Interface zu OSDServer bereit stellt.

Download wie üblich:
http://www.udo-richter.de/vdr/osdserver.html


Noch ein paar einfache Beispiele als Appetizer:

Eine einfache Meldung in die Statuszeile von VDR bringen:

Source code

1
2
3
4
5
6
#!/usr/bin/perl
use OSDServer;

my $server = OSDServer->Open() or die "open";
$server->Message("Hello World!");
$server->Close();
Nett, aber das kann SVDRPSend ja einfacher.

Das kann SVDRPSend nicht mehr:

Source code

1
2
3
4
5
6
7
8
#!/usr/bin/perl
use OSDServer;

my $server = OSDServer->Open() or die "open";
if ($server->Message("Is this easy?") eq "keyOk") {
	print "This is easy!\n";
}
$server->Close();
Hier wird der if-Block nur durchlaufen, wenn der Benutzer die Meldung mit Ok weggedrückt hat. Damit wird die Sache schon interaktiver.

Und um gleich mit den praktischen Beispielen weiter zu machen, hier eine einfache Texteingabe:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use OSDServer;

my $server = OSDServer->Open() or die "open";
my $menu = $server->NewMenu("Hello World editing");
$menu->SetColumns(10);
$menu->EnableEvent(["keyOk"]);
my $input = $menu->AddNewEditStrItem("Edit Text", "Hello World");
$menu->Show();
my (undef,undef,$event) = $menu->SleepEvent();
if ($event eq "keyOk") {
	my $text = $input->GetValue();
	print "$text\n";
}
$server->Close();
Das Beispiel öffnet ein VDR-Menü mit einem Eingabe-Feld. Das Feld ist mit "Hallo Welt" vorbelegt und kann beliebig bearbeitet werden. Verlässt man das Menü mit Ok, wird der eingegebene Text ausgelesen und auf der Konsole ausgegeben.

Bei den Beispielen im examples-Ordner ist auch demo-pm.pl, eine Version des alten Beispiel-Menüs, das bereits in den vorigen Versionen als Shellscript und Perl-Script dabei war, nur diesmal halt auch vollständig auf dem neuen Perl-Modul basierend dabei ist.

Zumindest für Perl-Skripter ist OSDServer damit einfacher als je zuvor. Also: Überrascht mich, macht was vollkommen neues damit!


Gruß,

Udo

Urig

Professional

  • "Urig" started this thread

Posts: 1,223

Location: Kassel

  • Send private message

2

Saturday, October 4th 2008, 8:01pm

RE: [ANNOUNCE] OSD-Server 0.1.2 + Perl-Module

... Experimentell meint genau das. :)

Der angehängte Patch behebt einen Fehler mit $menu->GetCurrent().

Noch ein Beispiel: Ein klassisches Auswahl-Menü:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl
use OSDServer;

my $server = OSDServer->Open() or die "open";
my $menu = $server->NewMenu("Hello World selecting");
$menu->EnableEvent(["keyOk", "close"]);
my $one = $menu->AddNewOsdItem("Select one thing");
my $another = $menu->AddNewOsdItem("Select another thing");
my $different = $menu->AddNewOsdItem("Select something different");
$menu->Show();
my (undef,undef,$event) = $menu->SleepEvent();
my (undef, $item, undef) = $menu->GetCurrent();

if ($item eq $one and $event eq "keyOk") {
	print "One thing selected.\n";
} elsif ($item eq $another and $event eq "keyOk") {
	print "Another thing selected.\n";
} elsif ($item eq $different and $event eq "keyOk") {
	print "Something different selected.\n";
} elsif ($event eq "close") {
	print "Nothing selected.\n";
}
$server->Close();
Das Beispiel funktioniert natürlich nur mit dem Patch. ;)

Gruß,

Udo
Urig has attached the following file:
  • OSDServer.pm.diff (397 Byte - 163 times downloaded - latest: Jul 14th 2014, 2:27am)

3

Wednesday, October 8th 2008, 11:18am

RE: [ANNOUNCE] OSD-Server 0.1.2 + Perl-Module

Absolut der Hammer!!! Auf sowas habe ich schon lange gewartet. Gerade die Perlunterstützung ist genial. Ich werd die Sachen mal testen und dir Feedback geben. Jedenfalls klasse!!

4

Wednesday, October 8th 2008, 6:57pm

ah... da kommen ja die perl-coder :P
ich habs mal kurz angetestet, und finde es echt genial. perl-bindings für vdr. finally *freu*
allerdings werde ich in nächter zeit, wegen des mangels dieser, nix produktives damit anstellen.

bei den anwendungen dachte ich bisher hauptsächlich an 'convert' anwendungen (vdr2divx, dvd-burn), aber z.B. auch ein lan-manager, der samba-shares anzeigt und mountet wäre ne hübsche sache.
Meine Homepage mit VDR-Projekten: http://ca.rstenpresser.de/~cpresser/

Urig

Professional

  • "Urig" started this thread

Posts: 1,223

Location: Kassel

  • Send private message

5

Sunday, February 15th 2009, 3:19pm

OT-Post von hier:
[ANNOUNCE] vdr-scripting 0.0.1 - proof-of-concept release

Quoted

Originally posted by Keine_Ahnung

Quoted

Originally posted by Urig
... bisher nur zum GUI bietet - andere Dinge könnten integriert werden, wenn Bedarf besteht, nur fallen mir nicht allzu viele andere Dinge ein, die nicht schon per OSDServer oder SVDRP erreichbar sind.


Was ich bissher vermisste (nur so als Anregung falls es gefällt):

Ein Fenster für die simple Ausgabe von ASCII Text vermisse ich (so wie es nach der Befehlsausführung eines commands.conf Befehls kommt).
Man könnte das zwar auch zeilenweise in ein Menü schreiben, aber dann gibts ja wieder Probleme mit dem Zeilenumbruch.


Steht durchaus auf meiner Liste, zumal es ja eine entsprechende Klasse in VDR dafür gibt, die auch die commands.conf Ausgabe anzeigt.

Quoted

Und aus dem Bereich "wäre nett das zu habe" wäre es praktisch zu erfahlen wie breit eine Textzeile eigendlich ist (egal ob Pixel, Punkt oder was auch immer).

Dazu dann eine Möglichkeit zu erfahren wie breit eine Zeichenkette ist.
Das wäre z.B. für grafische Fortschrittbalken ganz nett. Dann müsste man nicht mit ausprobierten Konstanten arbeiten und die Scripte wären nicht so abhängig vom eigenen System.


Für Menüs ist das leider nicht so einfach, da die Darstellung Skin-Sache ist, und auch ein VDR-Plugin nicht so ohne weiteres an diese Information kommt. Als Extrem-Beispiel sei hier skincurses auf der Textkonsole genannt.

Quoted

Quoted

Originally posted by Urig

Quoted

Originally posted by Keine_Ahnung
Ist doch im Prinzip das selbe (oder verstehe ich da den Ansatz falsch?). Nur das der OSD Server nur ne Schnitstelle zur GUI bietet und gepollt werden will.

Außerdem pollt OSDServer nicht, dafür gibt es ein Event-System.


Habe ich mich wohl unglücklich ausgedrückt. Ich meinte, das Script kann den OSDServer nur fragen und dann reagieren. Der OSDServer selber kann nicht auf Ereignisse reagieren indem es dann entsprechend Funktionem vom Script aufruft.


Nun, es reagiert darauf mit dem Zurückkehren vom sleepevent-Befehl. So lange das Skript sich immer mit sleepevent schlafen legt, kann osdserver entsprechende Aktionen auslösen. Für die Perl-Bindings könnte man mal darüber nachdenken, ob es einen eleganten Weg gibt, direkt Callback-Funktionen an Events zu binden, das könnte angenehm komfortabel sein.

Quoted

Wobei das für die OSD Sache ja auch vollkommen OK ist. Nur weitere Funktionen (z.B. beim Housekeeping irgendwas machen, beim VDR Start irgendwas machen) liessen sich auf diese Weise wohl nicht realisieren.


Housekeeping darf das Skript alleine machen. Sleepevent hat absichtlich eine Timeout-Option, damit das Skript nicht ewig blockiert wird.

Quoted

Hier sind dann wohl die Unterschiede zwischen beiden Pluginis zu sehen.

Quoted

Originally posted by Urig
Ein wesentlicher Unterschied: OSDServer-Skripte sind extern: Sie werden per commands.conf oder ähnlich gestartet, und können (bisher) keinen Mainmenu-Eintrag haben.


Mit dem Menueorg-Plugin (Oder dem Setup-Plugin, eines von beiden hat wohl jeder um Submenues/Sortierte Menues zu haben) lassen sich Haupmenüeinträge auch Sripten zuordnen.
Ferner kann man die Fernbedienung auch so konfigurieren das auf Tastendruck ein Script gestartet wird (anstelle eines Plugins).

Also kann man mit dem OSDServer durchaus Scripte schreiben die sich später in der Benutzung nicht von normalen Plugins unterscheiden.
Ich sah hier bis jetzt jedenfalls kein Problem was einem daran hindert einfache Plugins (irgendwas per OSD machen und fertig) in Scriptsprachen zu schreiben.



Gruß,

Udo

6

Sunday, February 15th 2009, 3:34pm

Quoted

Originally posted by Urig

Quoted

Und aus dem Bereich "wäre nett das zu habe" wäre es praktisch zu erfahlen wie breit eine Textzeile eigendlich ist (egal ob Pixel, Punkt oder was auch immer).

Dazu dann eine Möglichkeit zu erfahren wie breit eine Zeichenkette ist.
Das wäre z.B. für grafische Fortschrittbalken ganz nett. Dann müsste man nicht mit ausprobierten Konstanten arbeiten und die Scripte wären nicht so abhängig vom eigenen System.


Für Menüs ist das leider nicht so einfach, da die Darstellung Skin-Sache ist, und auch ein VDR-Plugin nicht so ohne weiteres an diese Information kommt.


Aha, hatte schon vermutet das es nicht so einfach ist ;)

Aber evtl. wäre es generell sinnvoll wenn die Skin-Plugins sowas mal zu Verfügung stellen.
Irgendwie fällt es ja schon auf das man jedes Plugin erstmal auf die eigene OSD Grösse und Schriftart einrichten muß ehe die Darstellung passt.
Aber egal, ist ne andere Baustelle. Ist ja auch nichts was man jetzt unbeding haben müsste.


Das mit dem ASCII Viewer auf der ToDo freut mich auf jedenfall schonmal.
Als C Verweigerer bin ich über den OSDServer jedenfalls sehr glücklich :)

cu

Mein VDR

Mein VDR
Digitainer2xBouget DVB-SDebian Squeeze (Kernel 2.6.35.3 von kernel.org)Softdevice Ausgabepluginvdr 1.6.0-3 (Extensions Patch 72) und viele Plugins von SourceMedion X10 FernbedienungSDC-Megtron Display (240x128x1) mit GraphLCD-PluginFreevo 1.9.0
Vodcatcher Helper in ein freundliches DEB verpackt, Tester Willkommen: http://dl.dropbox.com/s/705bh6ydgisfrqu/index.htmlFingerprint: 8A104A00D5031773A9F72A19BAEE135EA7860149

Urig

Professional

  • "Urig" started this thread

Posts: 1,223

Location: Kassel

  • Send private message

7

Sunday, April 19th 2009, 9:46pm

Hallo an alle OSDServer-User,

Ein kleiner Fehler ist in OSDServer-0.1.2 aufgetaucht (thx @ Tobi): Die EditIntItem-Objekte liefern mit GetValue ihr Ergebnis nicht wie dokumentiert mit einem 500er Return-Code zurück, sondern mit einem 600er. Das Problem ist leicht behoben:

Source code

1
2
3
4
5
6
7
8
9
10
11
--- vdr-osdserver/interpreter.c	(revision 1093)
+++ vdr-osdserver/interpreter.c	(revision 1094)
@@ -1017,7 +1017,7 @@
 
     char str[20];
     sprintf(str, "%i", value);
-    Connection->ReplyTextGetValue(false, str);
+    Connection->ReplyTextGetValue(true, str);
     
     return true;
 }


Die Frage ist: Soll ich das in der nächsten Version stillschweigend ändern (bricht evtl. die Kompatibilität mit existierenden Skripten), oder soll ich dafür die Protokollversion auf 0.2 anheben und das alte, falsche Verhalten für Clients beibehalten, die sich mit Protokollversion 0.1 anmelden?

Das der Fehler erst jetzt auffällt, deutet ja eher darauf hin, dass EditIntItem's bisher nicht genutzt wurden...

Gruß,

Udo

8

Sunday, April 19th 2009, 9:59pm

Ich sehe das wie Du, ich würde das einfach ändern. Wenn wirklich jemand darüber stolpert ist das auch gefixt.

9

Monday, June 8th 2009, 11:16am

hallo,

erstmal vielen dank fuer die arbeit an diesem plugin...
...ich denke ich habe noch einen kleinen bug gefunden (hab aber noch nicht in den code gekuckt).

das loeschen des 1 items funktioniert nicht:

Source code

1
2
3
4
5
6
7
8
9
10
version 0.1

menu = new menu "test"
item1 = menu.addnew osditem "item1"
item2 = menu.addnew osditem "item2"
item3 = menu.addnew osditem "item3"
menu.show

item1.delete
menu.show


das loeschen des item2 und item3 objects funktioniert ohne probleme.


gruesse
herbsl