Synchronizace nastavení mezi instancemi Salamanderu

Vítáme všechny návrhy na nové funkce a vylepšení programu Altap Salamander. Pro každý návrh prosím vytvořte samostatný příspěvek.
User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Synchronizace nastavení mezi instancemi Salamanderu

Post by zarevak »

Dobrý den,
v diskuzi o Plánovaném odstranění volby Save configuration on exit jsem vyslovil přání Synchronizovat nastavení mezi instancemi Salamanderu. (Používám více instancí Salamanderu jako náhradu za taby)

Vyjádření Jana Ryšavého z 23. září 2009:
Jan Rysavy wrote:Zní to hezky, ale my to neumíme v rozumném čase naprogramovat. Probrali jsme to s Petrem ze všech stran a pokaždé jsme narazili na ošklivé implementační problémy.
Vlákno zakládám, abych tímto návrhem neunesl původní diskuzi a aby nápad nebyl zapomenut. Pravděpodobně bude dříve vyřešeno implementací tabů, protože užitečnost více spuštěných instancí Salamanderu výrazně klesne.

Petr Solin
ALTAP Staff
ALTAP Staff
Posts: 1111
Joined: 08 Dec 2005, 09:13
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Petr Solin »

Více instancí bude asi stále potřeba, minimálně dokud opravdu všechno nepřevedeme důsledně na běh na pozadí. Zkrátka cokoliv zablokuje hlavní okno, je dnes důvod ke spuštění další instance.

Přidávám ještě seznam nastavení, o které jde Zarevakovi:
- Asociace pluginů
- Hot Paths
- FTP/WinSCP Bookmarks
- nastavení povrzení různých dialogů (abych třeba zrušení potvrzení zavření okna pomocí Escape nemusel nastavovat ve všech instancích)
- další "systémová" nastavení (barvičky, fonty, jazyk, Icon Overlays, ...)

Co rozhodně nesynchronizovat:
- nastavení panelů (řazení, zobrazení, velikost Thumbnails)
- historie cest v panelu

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5197
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Jan Rysavy »

Z našeho pohledu je největší bolístkou absence synchronizace FTP bookmarks. V případě WinSCP se konfigurace "synchronizuje" při potvrzení okna, takže tam na to uživatelé nenarážejí.

Jsme schopni konkrétní vybrané oblasti synchronizovat mezi instancemi Salamandera s tím, že ostatní části konfigurace se budou přepisovat tak, jak se to děje nyní (poslední kdo ukládá vyhrává).

Půjde o hodně práce, protože je pro synchronizaci třeba vybudovat podporu:
-každý proces Salamandera musí dostat nové vlákno, pomocí kterého budou rozesílány a přijímány broadcasty o změnách
-API pro rozesílání a příjímání broadcastů musí být k dispozici vedle jádra také pluginům (Salamander SDK)

Po otevření více oken, jejichž data se mají synchronizovat (FTP Connect dialog například) se bude muset detekovat situace, kdy v jednom z oken došlo k editaci. V tu chvíli (pomocí zmíněného broadcast API) musíme v ostatních konkurenčních oknech zakázat (disable) editační prvky, aby nedošlo ke konfliktu díky konkurenční editaci. Po potvrzení (OK) dat v editovaném okně by se data opět pomocí broadcast API roznesla do ostatních instancí Salamandera. Zároveň by se v tu chvíli musela uložit konfigurace pluginu, aby nově načtené pluginy již obdržely aktuální verzi konfigurace. (To předpokládá, že konfigurace pluginu je autonomní a nevadí, že se uložila, aniž se uložila konfigurace Salamandera).

Disabled okna by pak ukazovala neaktuální (stará) data. Po jejich zavření by si díky přijatému broadcastu tyto instance vytáhly aktuální data a při dalším otevření okna by již uživatel viděl data aktuální. Kdyby nám celá věc přišla příliš jednoduchá, bylo by možné v disabled oknech za letu synchronizovat a případně po zavření editovaného okna uvolnit editaci v zakázaných oknech.

Z toho vidíte, že implementace nebude žádná legrace a realizovali bychom jí jenom na nejvíce bolavých místech. Zatím vidíme jako horkého kandidáta právě ten FTP Connect dialog.
Nápady, jak řešení problému zjednodušit, vítáme ;-)

User avatar
Ether
Posts: 1462
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Ether »

Jako jednodušší varianta mi připadá:
1) vytvoření speciálního mutexu pro FTP konfigurační dialog/proces, který by se staral o to, aby se dalo konfigurovat vždy pouze z jednoho místa;
2) znovunačítání konfigurace při každém požadavku, popř. malinkatý broadcast, který by informoval běžící instance o proběhlé změně a potřebě znovunačíst konfiguraci.

EDIT: Asi jsem to nevysvětlil moc dobře, ale hlavními změnami oproti předchozímu návrhu je nepovolit více instancí konfiguračního dialogu (odpadá nutnost disablovat prvky) a neposílat konfiguraci, ale přímo ji uložit a poslat notifikaci o změně. V souvislosti s prvním bodem by asi bylo nutné trochu přepracovat Connect ve dva dialogy, aby se dalo jedním připojovat (neomezeně) a druhým konfigurovat (pouze jedna instance).
Ελληνικά rulez.

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5197
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Jan Rysavy »

Tedy neumožnit otevřít dva a více FTP Connect dialogů v jeden okamžik. Při pokusu o otevření druhého dialogu zobrazit hlášku o tom, že je již jeden dialog otevřený.

Říkali jsme si, že by nás za to uživatelé nepochválili, ale nejsme si samozřejmě jistí. Nejčastější operace je pravděpodobně Connect, tedy read-only použití za předpokladu, že nebudeme synchronizovat index posledního zvoleného FTP serveru. Proto jsme řešení navrhli tak, aby v nejběžnější situaci uživatelé na omezení nenaráželi.

User avatar
stepand76
Plugin Developer
Plugin Developer
Posts: 455
Joined: 16 Apr 2007, 21:22
Location: Pardubice, Czech Republic

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by stepand76 »

Jan Rysavy wrote:Říkali jsme si, že by nás za to uživatelé nepochválili, ale nejsme si samozřejmě jistí.
Já bych vás nechválil :wink: Nenávidím, když mi program začne vyprávět něco o jiné instanci a já musím řešit, co je to za instanci, v jakém je sezení nebo ji hledám v kupě otevřených programů. Na druhou stranu pokud by to při implementaci výrazně ušetřilo čas tak bych se k tomu přiklonil. Osobně bych však byl raději kdyby se v AS řešili závažnější nedostatky, které trápí uživatele - Unicode, operace na pozadí, repozitář pro pluginy, ... ale to je už takový evegreen :|

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5197
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Jan Rysavy »

Pokud naše řešení přenesu na Options > Configuration > Hot Paths, vypadalo by následovně:
  • ve všech instancích Salamandera lze otevřít konfigurační dialog
  • pokud v jednom z konfiguračních dialogů začnu editovat Hot Paths, všechny ostatní instance musejí tuto záložku zakázat (read-only) a zároveň se v nich musí zakázat možnost nastavit Hot Paths z panelu (například pomocí Ctrl+Shift+1), dokud uživatel konfigurační dialog nezavře
  • pokud v jedné instanci Salamandera nastavím horkou cestu z panelu (například pomocí Ctrl+Shift+1), všechny ostatní instance, které mají zobrazený konfigurační dialog, musejí zakázat Hot Paths stránku
Varianta, kdy by nebylo možné otevřít ve dvou instancích Salamandera současně konfigurační dialog, by pravděpodobně nesklidila úspěch.

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5197
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Jan Rysavy »

stepand76 wrote:Osobně bych však byl raději kdyby se v AS řešili závažnější nedostatky, které trápí uživatele - Unicode, operace na pozadí, repozitář pro pluginy, ... ale to je už takový evegreen :|
Úplně bych tento problém z hlediska užitečnosti nepodceňoval. Konkrétně (ne)synchronizace FTP bookmarks je podle ohlasu uživatelů veliký nedostatek nebo přímo chyba (Total Commander ani WinSCP (plugin) tímto nedostatkem netrpí, alespoň zdánlivě, což 99% uživatelů zjevně stačí).

User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by zarevak »

Petr Solin wrote:...o které jde Zarevakovi
Zapomněl jsem v minulém příspěvku na možnost dlouhého á po písmenu v: tedy tvar Zarevákovi, což zní lépe česky - příspěvek byl zameřen hlavně proti přídávání háčků a čárek na nesprávná místa (někteří již vědí ;))

K tématu:
Můj první nápad na řešení synchronizace spočíval jen v rozesílání notifikací o změnách v nastevní napříč instancemi. Myslím, že by to pokrylo 95% případů, protože kdy bude uživatel editovat dvě shodná nastavení na dvou místech současně? FTP Bookmarky jsou asi jedinným takovým místem, ale i v těchto případech lze po uložení změny rozeslat notifikaci a v ostatních dialozích načíst nové nastavení. Pokud se nastavení bude ukládat dostatečně často, tak by uživatel o data neměl přijít, protože předpokládám, že když někdo začne zadávat informace o novém připojení, tak zadávání těchto informací dokončí, než začne zadávat další v jiném okně...

Zakazovat klávesovou zkratku Ctrl+Shift+1 při aktivaci editačního módu Hot Paths v jiném okně je špatná cesta. Hot Path vytvářím jenom těmito klávesovými zkratkami a VŽDY očekávám, že se otevře dialog s konfigurací. V této situaci by spíš měl vyběhnout dialog, zda Hot Path číslo 1 přepsat, přestože je editace Hot Paths právě uzamčena jinou instancí, čímž může hrozit ztráta dat připravených v jiné instanci. Uživatel by se mohl během zobrazení tohoto dialogu vrátit k původní instanci, dokončit změny a tím nastavení odemknout, nebo potvrzením dialogu zámek prolomit a přepsat Hot Path číslo 1.

Vím, že se jedná o komplikovanou věc, protože sám jsem ji řešil v DiskMapě: Některá nastavení se provedou jen v aktuálním okně, ale nastavení o potvrzení zavření DiskMapy pomocí klávesy Escape je sdílené. Avšak nastavení, které se uloží do Registry, není nastavení posledního zavřeného okna, ale hodnota po poslední provedené změně dané vlastnosti :(

Petr Solin
ALTAP Staff
ALTAP Staff
Posts: 1111
Joined: 08 Dec 2005, 09:13
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Petr Solin »

zarevak wrote:ale i v těchto případech lze po uložení změny rozeslat notifikaci a v ostatních dialozích načíst nové nastavení
Tady vidím problém v tom, že pokud dojde k editaci i v těch ostatních dialozích, uživatel o ně musí při tom načtení přijít a to už mi tedy přijde serioznější editaci vůbec nepovolit.
zarevak wrote:potvrzením dialogu zámek prolomit a přepsat Hot Path číslo 1
Prolomení zámku sice zajistí změnu, ovšem její životnost je jen do potvrzení dialogu. V dialogu jsou totiž zadány všechny hotpath a všechny se tedy i uloží a tu změnu zkrátka zase přemažou. Opět serioznější vidím tu druhou editaci nepovolit nebo ji alespoň oddálit až do ukončení editačního režimu v jiné instanci.

Hlavní předpoklad je shodný, k editaci ze dvou míst najednou často docházet nebude, nicméně počítat s tím musíme a chceme se k tomu postavit co nejkorektněji, pokud možno žádné ztráty dat a žádné překomplikovanosti typu okamžité změny ve všech otevřených dialozích ve všech instancích (bylo by to sice nejčistější, ale škoda práce).

User avatar
Ether
Posts: 1462
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Ether »

Další varianta (částečně pokrytá už v mém minulém příspěvku): sdílená konfigurace = sdílený proces. Myslím tím to, že by konfigurační dialog byl ve skutečnosti konfigurační program (helper) a všechny změny či vyvolání konfigurace (z menu, z klávesových zkratek) by se směrovaly do toho helperu, ten by se pak dále staral o posílání notifikací ostatním instancím. (Stále zůstává požadavek rozdělení Connectů do dvou dialogů - read-only na připojení v panelu + r/w konfigurační.)
Ελληνικά rulez.

Petr Solin
ALTAP Staff
ALTAP Staff
Posts: 1111
Joined: 08 Dec 2005, 09:13
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Petr Solin »

ether wrote:Stále zůstává požadavek rozdělení Connectů do dvou dialogů - read-only na připojení v panelu + r/w konfigurační.
To by nám obávám se neprošlo, je to komplikace a to uživatelé opravdu nesnáší dobře. :)

Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5197
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by Jan Rysavy »

Souhlas, to by uživatelé nepochválili. Navíc si neumím představit aplikaci na Hot Paths a další případné kandidáty pro synchronizaci.

User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by zarevak »

Dobrý den, oživuji toto vlákno, protože jsem zase řešil případ, kdy mám spuštěné 3 instance Salamanderu a v jedné přidán FTP Bookmark. Jak mám zajistit, aby tuto záložku při vypnutí ostatní instance nepřepsaly a nezrušily? Nakonec jsem to provedl tak, že jsem provedl okamžité uložení konfigurace a v ostatních instancích zakázal ukládání při vypnutí...

Napadlo mne při tom částečné řešení: Přidat do menu položku "Load Configuration", která by načetla konfiguraci právě uloženou v registry. Uživatel by tak měl možnost vrátit se ke stavu Salamanderu v době spuštění nebo sesynchronizovat nastavení pluginů a dalších věcí. Pokud možno, tato položka by neměla změnit aktuální cesty panelů.

xm
Posts: 67
Joined: 11 Dec 2007, 11:11

Re: Synchronizace nastavení mezi instancemi Salamanderu

Post by xm »

2 zarevak:
toto resim pres Help -> Task List... -> Terminate...

Post Reply