ritchy
10 Posts
wrote on 06.08.12 at 12:09 last edited by ritchy on 06.08.12 at 12:16
Link to this post
Hallo,

ist es möglich über die Kommandozeile oder über das Microsoft COM streamwriter einen String zu übergeben, der als Titel zur Wunschliste hinzugefügt wird?
Wäre es auch möglich einen String zu übergeben und wenn dieser sich in der Wunschliste befindet, soll dieser Titel in der Wuschliste gelöscht werden?

Ich interessiere mich dafür, da bei mir streamwriter auf meinem Homeserver läuft und ich mich nicht immer über den Remotedesktop einloggen will, um einen Song hinzuzufügen. Ich würde dies lieber über ein Webinterface machen, das einen eingegebenen String als Kommandozeilen / COM Objekt an streamwriter übergibt.

Im Voraus vielen Dank,
ritchy
 
ritchy
10 Posts
wrote on 08.08.12 at 12:01 last edited by ritchy on 08.08.12 at 12:02
Link to this post
Ich habe mir den Code kurz angeschaut. Ich kann zwar kein Delphi, konnte aber sehen, dass meine gewünschten Kommandozeilenparamter nicht vorhanden sind. Ein Microsoft COM (Component Object Model) Server habe ich auch nicht gefunden. Also hat sich mein obriger Post erledigt.

Man müsste das Program erweitern. Die grobe Struktur habe ich schon geschrieben, da ich aber Delphi und das Program nicht so gut kenne, wäre es super super toll, wenn irgendjemand die grobe Struktur vervollständigt.

Dazu müsste in der Main.pas ab Zeile 1290 diese Codeteile hinzufügen:

Param := CmdLine.GetParam('-a'); //a(dd strings to whishlist)
if Param <> nil then
begin
for i := 0 to Param.Values.Count - 1 do
//füge einzelne Strings aus Parameterliste zur Wunschliste
// -a "Titel1 Song1" "Titel2 Song2"
//hier wäre das Problem, dass in diesem String Leerzeichen vorkommen würden, man
//bräuchte ein Trennungszeichen, z.B. Anführungsstriche, dass zwei unterschiedliche
//Strings trennt, bwz. man benutzt ein anderes Zeichen für ein Leerzeichen und wandelt
//dieses in ein Leerzeichen um
end;

Param := CmdLine.GetParam('-d'); // d(elete strings to whishlist)
if Param <> nil then
begin
for i := 0 to Param.Values.Count - 1 do
//suche ob einzelne Strings aus Parameterliste in Wunschliste
//wenn ja, lösche den String aus der Wunschliste
//-d "Titel1 Song1" "Titel2 Song2"
//selbes Problem wie bei Parameter '-a'
end;

Vielen Dank für das geniale Program streamwriter,
ritchy
 
alex
2470 Posts
wrote on 08.08.12 at 13:26
Link to this post
Respekt, du bist der erste, der sich traut, den Code anzuschauen:-)
Unter der Woche bin ich hier sehr passiv, ich werde hier (hoffentlich) am Wochenende etwas mehr zu schreiben.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
ritchy
10 Posts
wrote on 08.08.12 at 21:57 last edited by ritchy on 08.08.12 at 23:47
Link to this post
Wenn ich der erste bin, der sich traut, den Code anzuschauen, dann hast du ja das Programm komplett alleine geschrieben, dies verlangt Respekt.

Ich habe meine grobe Struktur weiter fortgesetzt und das Problem mit den Trennungen gelöst. Man kann zwar mit dieser Lösung nur ein Titel pro Argumentaufruf (-a bzw. -d) hinzufügen bzw. entfernen, sie ist aber hinsichtlich der Bedienung, der Codekomplexität, der Laufzeit und dass man nicht ein Zeichen als Trennzeichen verliert, optimaler als andere Lösungen.
Jetzt erhalte ich einen String s aus dem Aufruf, dieser müsste zur Wunschliste hinzugefügt bzw. entfernt werden. Hier stoße ich an meine Grenzen, da ich nicht weiß, wie du die Wunschliste implementiert hast, im Code habe ich hierfür addElementWishlist(s) bzw. deleteElementWishlist(s) geschrieben. Es wäre mega klasse, wenn du, wenn du mal Zeit hättest, den Code vollenden könntest.

Forum zeigt keine eckigen Klammern an: $ := [ and $ := ]

var s : String;
s := '';



Param := CmdLine.GetParam('-a'); // a(dd string to wishlist)
if Param <> nil then
begin

for i := 0 to Param.Values.Count - 1 do
begin
s.AppendStr(Param.Values$i$);
end;

addElementWishlist(s);
s := '';

end;



Param := CmdLine.GetParam('-d'); // d(elete string to wishlist)
if Param <> nil then
begin

for i := 0 to Param.Values.Count - 1 do
begin
s.AppendStr(Param.Values$i$);
end;

deleteElementWishlist(s);
s := '';

end;
 
alex
2470 Posts
wrote on 11.08.12 at 02:44 last edited by alex on 11.08.12 at 02:45
Link to this post
Wenn ich der erste bin, der sich traut, den Code anzuschauen, dann hast du ja das Programm komplett alleine geschrieben, dies verlangt Respekt.

Also, also, fast der erste. Ich habe ein wenig Unterstützung bei der Schneide-Ansicht bekommen, aber 99,x% müssten von mir sein.

Dein Anliegen ist mit der nächsten Build erledigt. Du kannst dort dann die Parameter "-wishadd" und "-wishremove" verwenden, zum Beispiel so:
streamwriter.exe -wishadd eintrag eintrag2 "eintrag mit leerzeichen"
streamwriter.exe -wishremove eintrag eintrag2 "eintrag mit leerzeichen"

Sachen wie dieses COM werde ich nicht einbauen, das ist mir zu Plattformspezifisch. Ausserdem habe ich die gewünschte Funktionalität nur einbaut, weil es dafür schon benutzbare Funktionen gab. Die GUI ist leider nicht so von der Logik getrennt, wie sie sein sollte, und deshalb wären weitere Wünsche, was die "Fernsteuerung" angeht, wohl nicht so einfach machbar, wie das hier.
In einer perfekten Welt würde mir ein reicher Mensch genug Geld geben um 24/7 hierfür opfern zu können - dann würde ich erstmal die GUI von dem "Kern" trennen, so dass eine komplette Fernsteuerung möglich wäre, z.B. über Sockets mit JSON als Protokoll oder so. Dann könnte man streamWriter vielleicht auch als Dienst installieren und die GUI ist nur noch eine Fernsteuerung für den Dienst. Aber die Zeit fehlt mir leider einfach. Und den Code total kaputtfrickeln, weil ich möglichst schnell möglichst jeden Wunsch einbauen möchte, möchte ich natürlich auch nicht.
Du hast quasi Glück gehabt;-)- falls es Probleme mit der neuen Funktionalität gibt, melde dich einfach.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
ritchy
10 Posts
wrote on 11.08.12 at 13:13
Link to this post
Vielen Dank Alex für die zwei neuen Kommandozeilenparameter. Etwas Glück gehört im Leben auch dazu;-)

Die Kommandozeilenparameter funktionieren sehr gut. Wenn ich jedoch einen Titel in diesem Format eingebe: -wishadd Interpret TitelTeil1 TitelTeil2; werden drei Einträge erzeugt. Bei dem manuellen Hinzufügen über die GUI wird jedoch nur ein Eintrag erzeugt. Gibt es irgendein Zeichen (hier _ als Platzhalter), dass streamwriter neutral, also wie ein Leerzeichen behandelt, sodass Interpret_TitelTeil1_TitelTeil2 intern genauso behandelt wird, wie die Eingabe über die GUI Interpret TitelTeil1 TitelTeil2. Falls es kein solches Zeichen gebe, wäre es nicht sinnvoller pro -wishadd nur einen Eintrag zu erzeugen (alle Parameter zu einem String zu konkatenieren und dann diesen tabChartsAddToWishlist zu übergeben) und -wishremove dann ebenfalls nach diesem Stil anzupassen?

Klar kann man immer etwas besser machen, aber für mich ist streamwriter nun perfekt. Vielen Dank nocheinmal für das Prgramm. Und dass man überhaupt etwas über die Kommandozeile fernsteuern kann, ist bei Windowsprogrammen nicht unbedingt Standard.
 
ritchy
10 Posts
wrote on 14.08.12 at 12:48
Link to this post
Mein letzer Post hat sich erledigt. Wenn man den Wunschstring in Anführungszeichen eingibt: -wishadd "Interpret Titel1 Titel2"; wird nur ein Eintrag erzeugt.

Vielleicht wäre ein Parameter '-help' noch gut. Dann würde man sofort sehen, welche Kommandozeilenparameter streamwriter anbietet:

-r streamURL records the supplied stream
-p streamURL plays the supplied stream
-wishadd "wish" adds the supplied wish to the wishlist
-wishremove "wish" removes the supplied wish from the wishlist

Man könnte alles direkt in "Main.pas" integrieren. Oder man macht die Ausgabe des "-help"-Parameters in die Sprachpakete und könnte so für jede Lokalisierung eine eigene Hilfeausgabe anzeigen. Wobei ich denke, dass jeder, der die Kommandozeile benutzt, die englische Ausgabe verstehen wird.