• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Garmin-Export unter Linux

UncleOwen

Geocacher
Moin,

ich hab eben mal mit dem Garmin-Export unter Linux rumgespielt. Neben dem (schon irgendwo hier im Forum erwähnten) Symlink
Code:
cachewolf/work/gpsbabel.exe => /usr/bin/gpsbabel
musste ich noch folgendes am Code ändern:

Code:
$ svn diff src/CacheWolf/MainMenu.java
Index: src/CacheWolf/MainMenu.java
===================================================================
--- src/CacheWolf/MainMenu.java (Revision 1675)
+++ src/CacheWolf/MainMenu.java (Arbeitskopie)
@@ -365,9 +365,9 @@
                                loc.doIt(LocExporter.MODE_AUTO);
                                ProgressBarForm.display(MyLocale.getMsg(950,"Transfer"),MyLocale.getMsg(951,"Sending to GPS"), null);
                                try{
-                                       pref.log("gpsbabel.exe "+pref.garminGPSBabelOptions+" -i geo -f \""+ tmpFileName +"\" -o garmin -F " +pref.garminConn +":");
+                                       pref.log("./gpsbabel.exe "+pref.garminGPSBabelOptions+" -i geo -f "+ tmpFileName +" -o garmin -F " + pref.garminConn +":");
                                        // this will *only* work with ewe.jar at the moment
-                                       ewe.sys.Process p = Vm.exec("gpsbabel.exe "+pref.garminGPSBabelOptions+" -i geo -f \""+ tmpFileName +"\" -o garmin -F " + pref.garminConn +":");
+                                       ewe.sys.Process p = Vm.exec("./gpsbabel.exe "+pref.garminGPSBabelOptions+" -i geo -f "+ tmpFileName +"-o garmin -F " + pref.garminConn +":");
                                        p.waitFor();
                                }catch(IOException ioex){
                                        Vm.showWait(false);
(hmpf, doofer Zeilenumbruch)

Also, 2 Änderungen:
  • gpsbabel.exe => ./gpsbabel.exe
    Wenn Linux im aktuellen Verzeichnis suchen soll, muss man ihm das auch explizit sagen. Sollte so auch unter Windows funktionieren. Oder am besten gleich nur gpsbabel schreiben (also ohne ./ und ohne .exe), dann braucht man auch (zumindest an der Stelle) den doofen Symlink nicht mehr.
  • Anführungszeichen um den tmpFileName weg. Normalerweise sagen die ja der der Shell, dass alles, was dazwischon ist, ein einziger Parameter ist. (Wichtig für Dateinamen mit z.B. Leerzeichen drin). Aber irgendwie wurden diese 1-zu-1 an gpsbabel weitergegeben - und der findet dann natürlich die Datei nicht. Nachzuvollziehen, indem man statt des symlinks ein kleines shell-skript hinpackt.
 

greiol

Geoguru
naja, das ist eine lösung die so vermutlich nur genau unter linux funktioniert während der symlink auch die anderen noch mit an board lässt ;)
 
OP
U

UncleOwen

Geocacher
Wie kommst Du da drauf? Zumindest die erste Änderung funktioniert ziemlich sicher auch unter Windows (in beiden von mir vorgeschlagenen Versionen) sowie allen POSIX-kompatiblen Systemen (also allem, auf dem gpsbabel läuft).

Bei der zweiten bin ich mir selber nichtmal sicher, warum das nur so bei mir funktioniert, also da erstmal kein Kommentar zu :) (Müsste man mal in die ewe-Doku oder den Source gucken, wie genau .exec Leerzeichen und Anführungszeichen handelt.)
 

pfeffer

Geowizard
zu dem exec unter linux hat vor wenigen Tagen jemand anders (Silas?) schon eine Lösung präsentiert. Bitte das Problem dort weiter diskutieren!

Gruß,
Pfeffer.
 
OP
U

UncleOwen

Geocacher
Du meinst hier? Ja, stimmt, das klingt ähnlich zu meiner zweiten Änderung.

Dann hier also nur weiter zur ersten Änderung. Und wenn man schon dabei ist, könnte man doch gleich versuchen, den Symlink ganz loszuwerden...
hier mein nächster Patch-Versuch
(Die Problematik mit dem " bleibt natürlich, aber darum geht's ja im anderen Thread.)

Altes Verhalten: Cachewolf ruft gpsbabel.exe auf.
Neues Verhalten: Cachewolf ruf gpsbabel auf.
Warum ist diese Änderung sinnvoll? Unter nicht-Windows-Betriebssystemen heisst das Programm nunmal nicht gpsbabel.exe. Deshalb war der Symlink notwendig. Unter Windows funktioniert dies weiterhin - ruft man unter Windows gpsbabel auf, wird automatisch das .exe angehängt.

Altes Verhalten: Cachewolf sucht im aktuellen Verzeichnis eine Datei namens gpsbabel.exe. Nur wenn diese vorhanden ist, wird der Menupunkt (Export -> to Garmin) aktiviert.
Neues Verhalten: Cachewolf versucht, gpsbabel -V (also ein Aufruf von gpsbabel, der nichts macht) auszuführen. Gelinkt dies nicht, wird der Menupunkt deaktiviert.
Warum ist diese Änderung sinnvoll? Die Tatsache, dass eine Datei vorhanden ist, heisst noch lange nicht, dass sie auch genau so ausführbar ist. Das hat zur Folge, dass in der alten Version der Menupunkt zwar aktiviert war, das starten aber trotzdem unter Linux nicht funktioniert hat (das aktuelle Verzeichnis liegt nunmal nicht im Pfad)

Positiver Nebeneffekt des ganzen: Wer gpsbabel schon auf dem Rechner hat, braucht jetzt nichts mehr umkopieren / symlinken. Es wird einfach die Version aus $PATH genommen.
 

greiol

Geoguru
wäre es nicht langfristig tragfähiger, wenn wir den pfad zu gpsbabel ähnlich wie den browser bei den präferenzen abfragen?
 

pfeffer

Geowizard
1. könntest Du Dich in dem von Dir gefundenen Thread, den ich meinte, äußern, ob Silas' Änderung auch bei Dir funktioniert?

2. Deine Idee erscheint mir sinnvoll. Ohne es angeguckt zu haben: ich nehme an, dass gpsbabel dann nicht bei jedem klick auf das Menü erst gestartet wird, sondern dies nur 1mal geschieht?

EDIT: kannst Du den exec-Aufruf noch so ändern, dass die CWWrapper-Klasse verwendet wird?

Gruß,
Pfeffer.
 

arbor95

Geoguru
auch wenn gpsbabel nicht ausführbar ist , wird trotzdem eine loc-Datei erzeugt, und die will ich vielleicht haben.
 
OP
U

UncleOwen

Geocacher
Ähm, genau dazu ist $PATH doch da... sowohl unter Windows als auch unter Posix (also Linux, BSD, OSX, ...). Natürlich kann man gerne zusätzlich noch eine Option dafür einbauen... aber warum soll der User einen Pfad angeben müssen, wenn es mit meiner Lösung einfach so funktioniert?

(edit: das bezog sich auf greiols letzten Beitrag)
 

pfeffer

Geowizard
araber95 schrieb:
auch wenn gpsbabel nicht ausführbar ist , wird trotzdem eine loc-Datei erzeugt, und die will ich vielleicht haben.
gibt es dafür keinen loc-export?

Außerdem: Der Menüpunkt wird auch jetzt ausgegraut, wenn gpsbabel.exe nicht in dem Verzeichnis liegt, oder?

Gruß,
Pfeffer.
 

arbor95

Geoguru
wen interessiert der path unter windows?

soweit ich mich erinnere , war da was , warum genau dieser loc-export verwendet werden sollte.


und einfach eine Datei/Neu gpsbabel.exe (oder Link dieses Namens) gibt unter Windows.
 
OP
U

UncleOwen

Geocacher
pfeffer schrieb:
2. Deine Idee erscheint mir sinnvoll. Ohne es angeguckt zu haben: ich nehme an, dass gpsbabel dann nicht bei jedem klick auf das Menü erst gestartet wird, sondern dies nur 1mal geschieht?
Wenn ich das richtig verstehe, ja. Passiert ja im Konstruktor.

EDIT: kannst Du den exec-Aufruf noch so ändern, dass die CWWrapper-Klasse verwendet wird?
Nein:
mirabilos in r1429 schrieb:
• change all calls *EXCEPT* for the gpsbabel.exe call to use
CWWrapper.exec instead of Vm.exec, because CWWrapper.exec
can take *only* the command name and *one* argument, whereas
gpsbabel.exe is called with more than one argument
Aber ich hab ja nebenan schon angedeutet, dass IMHO die CWWrapper-Klasse komplett überflüssig ist.
 
OP
U

UncleOwen

Geocacher
araber95 schrieb:
wen interessiert der path unter windows?
Denjenigen, der mit Kommandozeilentools wie gpsbabel arbeitet. Ansonsten funktioniert das alte "kopiers ins cw-Verzeichnis" natürlich weiterhin.

soweit ich mich erinnere , war da was , warum genau dieser loc-export verwendet werden sollte.


und einfach eine Datei/Neu gpsbabel.exe (oder Link dieses Namens) gibt unter Windows
Naja, dann bau'n wir halt noch 'nen zweiten Menupunkt für loc-export ohne gpsbabel ein...
http://www.uncleowen.de/patches/remove-gpsbabel-symlink-2.patch
(Da müsste nochmal wer die Lokalisierung nachschieben, keine Ahnung, wo ich das hätte eintragen müssen)
 

pfeffer

Geowizard
na Mensch, das ist der erste Patch, den ich ohne Probleme anwenden konnte *freu*

Hast Du den blind geschrieben? (es waren ein paar Anführungszeichen zu viel drin) - Alle Achtung!

Ich habe noch lokalisierung dazu gemacht und per r1677 committet. Danke für den Patch!

Leider kann ich das nicht selbst testen, weil ich kein Garmin hab.

Gruß,
Pfeffer.
 
OP
U

UncleOwen

Geocacher
pfeffer schrieb:
na Mensch, das ist der erste Patch, den ich ohne Probleme anwenden konnte *freu*
:gott:

Hast Du den blind geschrieben? (es waren ein paar Anführungszeichen zu viel drin) - Alle Achtung!
Jein. Ich hab erst ganz normal die Datei editiert, dann den patch erstellt, und dann die Änderungen, um die es hier nicht geht, von Hand rückgängig gemacht... kann sein, dass ich mich dabei vertan hab. Soll man ja auch nicht machen sowas...

Ich habe noch lokalisierung dazu gemacht und per r1677 committet. Danke für den Patch!
Danke!
 

MiK

Geoguru
pfeffer schrieb:
na Mensch, das ist der erste Patch, den ich ohne Probleme anwenden konnte *freu*
Wahrscheinlich hat er den Patch mit TortoiseSVN gemacht. Subclipse schreibt (immer?) irgendwelche lokalen Pfade rein, die dann bei anderen Probleme machen.
 

MiK

Geoguru
naja, TortoiseSVN beruht ja direkt auf dem SVN-Code. Nur Subclipse macht irgendwie seltsame Patches. Mit Subclipse selbst kann man die zwar mit den entsprechenden Optionen auch wieder einspielen. Aber mit anderen Programmen machen die Probleme. Naja, egal. Back to topic!
 

MiK

Geoguru
Ok, noch mal im richtigen Thread:
Ich habe GPSBabel unter Win im CW-Verzeichnis. Mit 1.0.1532 funktioniert der Erxport direkt auf das Garmin. In der aktuellen Version bleibt der Menüpunkt grau.
 
Oben