Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: VDR Portal. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Samstag, 4. Oktober 2008, 19:35

[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:

Quellcode

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:

Quellcode

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:

Quellcode

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

2

Samstag, 4. Oktober 2008, 20:01

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ü:

Quellcode

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« hat folgende Datei angehängt:
  • OSDServer.pm.diff (397 Byte - 190 mal heruntergeladen - zuletzt: 9. November 2016, 03:47)

3

Mittwoch, 8. Oktober 2008, 11:18

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

Mittwoch, 8. Oktober 2008, 18:57

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/

5

Sonntag, 15. Februar 2009, 15:19

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

Zitat

Originally posted by Keine_Ahnung

Zitat

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.

Zitat

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.

Zitat

Zitat

Originally posted by Urig

Zitat

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.

Zitat

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.

Zitat

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

Zitat

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

Sonntag, 15. Februar 2009, 15:34

Zitat

Originally posted by Urig

Zitat

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

7

Sonntag, 19. April 2009, 21:46

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:

Quellcode

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

Sonntag, 19. April 2009, 21:59

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

9

Montag, 8. Juni 2009, 11:16

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:

Quellcode

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

Immortal Romance Spielautomat