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

Problem beim aktualisieren Version build 1411

H_4

Geocacher
Hallo,
ich habe mit der neusten Version (1411) das Problem, das wenn ich auf
Anwendung -> Import -> Markierte aktualisieren
gehe, CW diesen Vorgang doppelt ausführt.
Das heißt, CW Aktualisiert, speichert, aktualisiert, speichert und ist erst dann fertig.

LG
Criss
 

MiK

Geoguru
Aus dem Kontextmenü heraus kann ich das Phänomen nicht beobachten. Aus dem Anwendungsmenü heraus habe ich manchmal "Aktualisieren->Speichern->Speichern" und manchmal "Aktualisieren->Speichern->Aktualisieren->Speichern". Reichtig anschauen, was da schief geht, kann ich aber erst heute abend.
 

MiK

Geoguru
Ich konnte nun doch eine mögliche Ursache finden. Ich verstehe es zwar noch nicht so ganz, aber der untige Patch scheint zu funktionieren.

@Dev: Bitte anschauen.
 

Anhänge

  • doubleUpdate.zip
    441 Bytes · Aufrufe: 3

Kappler

Geowizard
Das Problem kommt durch den zusätzlichen Aufruf des Kontextmenüs am Ende des Event-Handlers in MainMenu.java:
Code:
			// In case that the triggered event was due to one of the context menu items, process
			// the event by the context menu handler
			tbp.tc.popupMenuEvent(mev.selectedItem);

Der Mik-Patch ist hier nur ein Workaround, die Frage ist für mich, wozu überhaupt noch mal das Kontextmenü aufgerufen wird?
Liegt es eventuell daran, dass auch beim Kontextmenü-Aufruf der MainMenu-Eventhandler gestartet wird?
Ich kann etwas derartiges jedenfalls nicht nachstellen...
 

MiK

Geoguru
Das Kontextmenü wurde ja zusätzlich in das Hauptmenü eingehängt. Deswegen ist wohl dieser Aufruf am Ende. Was ich mich allerdings Frage: Warum reagiert der Eventhandler des Kontextmenüs auf einen Eintrag im Anwendungsmenü?

Ah... jetzt weiß ich es. Der Eventhandler im Kontextmenü vergleicht auf die Strings des Menüpunktes. Und diese Strings sind natürlich gleich (es geht ja um die gleiche Funktion). Die Frage ist jetzt: Muss im Kontextmenü auf den String verglichen werden, oder kann man das auch wie im Hauptmenü mit einem Objektvergleich machen?
 

MiK

Geoguru
Ich denke, das sollt auf jeden Fall gehen. Werde ich heute Mittag noch testen. Das Kontextmenü muss dazu nur anders konstruiert werden.

Trotzdem frage ich mich grundsätzlich, warum wir immer auf alles vergleichen und nicht beim ersten Match abbrechen.
 

Kappler

Geowizard
Könnte das Ganze nicht ohne Umbau des Kontextmenüs folgendermassen funktionieren:
Code:
...
else if(mev.selectedItem == loadOC){
	OCXMLImporter oc = new OCXMLImporter(pref,profile);
	oc.doIt();
	Filter.showBlacklisted=false;
	filtBlack.modifiers&=~MenuItem.Checked;
	tbp.resetModel();
}
else if (mev.selectedItem == update) {
	updateSelectedCaches(tbp);
}
else if(mev.selectedItem == mnuForceLogin) {
	mnuForceLogin.modifiers^=MenuItem.Checked;
	Global.getPref().forceLogin=(mnuForceLogin.modifiers&MenuItem.Checked)!=0;
	Global.getPref().savePreferences();
}
...
...
else{
	// In case that the triggered event was due to one of the context menu items, process
	// the event by the context menu handler
	tbp.tc.popupMenuEvent(mev.selectedItem);
}
Dann würde der Kontextmenü-Handler nur aufgerufen, falls nicht schon vorher reagiert wurde... Das wäre genau der Abbruch beim ersten Match, den du oben angesprochen hast.
(oder habe ich das mit dem else if... falsch verstanden?)
 

MiK

Geoguru
Ja, das meinte ich. Und das würde das Problem auch lösen. Trotzdem finde ich die Stringvergleiche im Kontextmenü doof. Vielleicht mache ich beides.
 

pfeffer

Geowizard
ich finde diese else-if - Dinger erschweren die Lesbarkeit des Codes erheblich. Darum bin ich für die Umstellung, wie MiK sie vorgescholagen hat (das ist ohnehin die saubere Lösung).

Gruß,
Pfeffer.
 

Kappler

Geowizard
Die sauberere Lösung auf jeden Fall... aber auch mehr Arbeit.
Und ich bin eben von Grund auf zunächst mal faul :D
 

MiK

Geoguru
So viel Aufwand ist die Umstellung des Menüs nicht (und jetzt komme ich hoffentlich auch dazu es zu testen.

Mit vielen Else if, wird es wirklich unschön. Wenn, dann hätte ich eher zu returns gegriffen. Die ich ja eigentlich auch nicht in mehrfacher Ausführung mag. Aber besser als ein ewig geschachteltes if.
 

Engywuck

Geowizard
MiK schrieb:
Ja, das meinte ich. Und das würde das Problem auch lösen. Trotzdem finde ich die Stringvergleiche im Kontextmenü doof. Vielleicht mache ich beides.
Warst Du nicht auch derjenige, der Schönheitsoperationen auf die Zeit nach 1.0 verschieben wollte? ;-)

E.
 

MiK

Geoguru
So. Hat doch noch etwas länger gedauert. Weniger wegen dem Umfang, als wegen meiner Blödheit...

Hier jedenfalls jetzt der neue Patch zum Review:
 

Anhänge

  • doubleUpdate.zip
    1,4 KB · Aufrufe: 10
OP
H

H_4

Geocacher
Danke, funktioniert.
Toll wie schnell hier ein Problem gelöst wird. Ein dickes Lob an die Entwickler
LG
Criss
 
Oben