Nemohol som si nevšimnúť, že máte v niektorých pluginoch urobený workaround pre vnorené archívy (alebo to tak aspoň vyzerá). Napríklad som sa snažil otvoriť archív rootfs.cpio.gz a Salamander automaticky otvoril strom adresárov a súborov. Podobne pri .tgz alebo tar.gz.
Moja otázka je, či sa nedá nejakým spôsobom zavolať z pluginu iný plugin, ktorý by otvoril daný súbor (v mojom prípade z pluginu na čítanie špeciálneho archívu otvoriť rootfs.cpio.gz). Niečo ako rozpakovanie do dočasného súboru a zavolanie nejakej funkcie daného pluginu?
Vďaka.
Dočasný workaround pre vnorené archívy
To je zajímavé zjištění. Překvapuje mě, že jsem na to nepřišel taky. Myslím, že dokud nebude plně funkční vrstvení filesystemových a/nebo archivních pluginů, tak použití dočasného rozbalení by mohlo být řešením, které by mnoho uživatelů uvítalo.
Přece jenom dneska už jsou počítače dost rychlé a kdybyste pořád váhali, jestli se má taková pomalá záležitost implementovat, tak můžete třeba před rozbalováním archivu vyplivnout potvrzovací dialog s varovnou hláškou.
Přece jenom dneska už jsou počítače dost rychlé a kdybyste pořád váhali, jestli se má taková pomalá záležitost implementovat, tak můžete třeba před rozbalováním archivu vyplivnout potvrzovací dialog s varovnou hláškou.
-
- Plugin Developer
- Posts: 707
- Joined: 08 Dec 2005, 14:33
- Location: Prague, Czech Republic
- Contact:
Re: Dočasný workaround pre vnorené archívy
V tomto konkretnim pripade TAR plugin provede rozbaleni vnejsiho gzipu (nebo compressu nebo bzip2u) a vnitrniho taru najednou. Zadny dalsi ci vnoreny plugin se nevola.Stybi wrote:Nemohol som si nevšimnúť, že máte v niektorých pluginoch urobený workaround pre vnorené archívy (alebo to tak aspoň vyzerá). Napríklad som sa snažil otvoriť archív rootfs.cpio.gz a Salamander automaticky otvoril strom adresárov a súborov. Podobne pri .tgz alebo tar.gz.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Zatím jsme veškeré pluginy v Salamanderu koncipovali tak, že jsou závislé pouze na jádře Salamandera, ale už ne na jiném pluginu. Jedním z mnoha důvodů je snaha o udržení interface (SDK) ve zvládnutelné podobě.
Pokud si porovnáte SDK Salamandera a TC, uvidíte obrovský (minimálně řádový) rozdíl v komplexitě. Důvodem je naše přesvědčení, že plugin by měl z hlediska uživatele být plnohodnotná součást aplikace, nabízející téměř stejný komfort a možnosti, jako funkce implementované v jádře.
Z tohoto důvodu bylo potřeba udělat jisté kompromisy a na jeden jste právě narazili. Pokud zaznamenáme větší množství žádostí na toto téma, jsme ochotni tímto směrem vynaložit další čas a žádané funkce se pokusit doplnit.
V současné době tento problém řešíme tak, že si každý plugin nese vše potřebné pro svůj chod (mimo RTL, které je pro úsporu místa sdílené se Salamanderem). Zde ještě zmíním další výhodu tohoto řešení: nemusíme řešit interakci různých verzí pluginů, nemusíme uživatelům vysvětlovat, že daná část pluginu nefunguje, protože nemají nainstalovaný zdánlivě naprosto nesouvisející plugin XYZ nebo ho mají ve staré verzi.
Pokud si porovnáte SDK Salamandera a TC, uvidíte obrovský (minimálně řádový) rozdíl v komplexitě. Důvodem je naše přesvědčení, že plugin by měl z hlediska uživatele být plnohodnotná součást aplikace, nabízející téměř stejný komfort a možnosti, jako funkce implementované v jádře.
Z tohoto důvodu bylo potřeba udělat jisté kompromisy a na jeden jste právě narazili. Pokud zaznamenáme větší množství žádostí na toto téma, jsme ochotni tímto směrem vynaložit další čas a žádané funkce se pokusit doplnit.
V současné době tento problém řešíme tak, že si každý plugin nese vše potřebné pro svůj chod (mimo RTL, které je pro úsporu místa sdílené se Salamanderem). Zde ještě zmíním další výhodu tohoto řešení: nemusíme řešit interakci různých verzí pluginů, nemusíme uživatelům vysvětlovat, že daná část pluginu nefunguje, protože nemají nainstalovaný zdánlivě naprosto nesouvisející plugin XYZ nebo ho mají ve staré verzi.
Děkuji za vyjádření, ovšem domnívám se, že můj návrh nebyl zcela pochopen. Nemyslel jsem tím vynucenou spolupráci pluginů, spíše jejich navázání. V aktuální verzi AS, když se pokusím otevřít archiv v archivu/v externím FS, Salamander se chová, jako by to byl jakýkoli jiný soubor, tj. rozbalí jej a otevře v externím programu/neudělá nic. Navrhuji tedy možnost, že se daný soubor rozbalí/zkopíruje do dočasného adresáře na lokální FS a poté otevře pluginem.
Plugin o ničem nemusí vědět, úpravy souborů v archivech máte již vyřešeny podobně a omezení plynoucí z nespolupráce pluginů se tímto obchází.
Plugin o ničem nemusí vědět, úpravy souborů v archivech máte již vyřešeny podobně a omezení plynoucí z nespolupráce pluginů se tímto obchází.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
-
- ALTAP Staff
- Posts: 1112
- Joined: 08 Dec 2005, 09:13
- Location: Novy Bor, Czech Republic
- Contact:
Re: Dočasný workaround pre vnorené archívy
Tato akce je relativne snadno dostupna, staci zavolat SalamanderGeneral->ChangePanelPathToArchive. Problem je, kdy tuto metodu zavolat. Idealni by bylo pri snaze o otevreni souboru ve vasem archivu (na klavesu Enter nebo dvojklikem mysi). Bohuzel toto neni podporeno (otevreni resi komplet Salamander, archivu si rekne jen o vybaleni souboru). Takze jako zatim jedina moznost me napada zavest prikaz do menu (da se mu i priradit klavesa), na ktery plugin zareaguje vybalenim vybraneho souboru do TEMPu a naslednym volanim SalamanderGeneral->ChangePanelPathToArchive. Dalsi otazka je, kdy by se mel soubor z TEMPu odstranit a jak zajistit, aby uzivatel archiv nemenil (protoze nebude zapakovan zpet, ale jen vymazan z TEMPu). I kdyz to by se vlastne tez dalo resit (vite co a z jakeho sveho archivu jste vybalil, tak to muzete po zmenach zase zabalit zpet).Stybi wrote:Moja otázka je, či sa nedá nejakým spôsobom zavolať z pluginu iný plugin, ktorý by otvoril daný súbor (v mojom prípade z pluginu na čítanie špeciálneho archívu otvoriť rootfs.cpio.gz). Niečo ako rozpakovanie do dočasného súboru a zavolanie nejakej funkcie daného pluginu?
Jeste me napada jedno "neciste" reseni: v metode UnpackOneFile si zjistite, ze se Salamander snazi vybalit .gz soubor, pres PostMenuExtCommand(waitForSalIdle=TRUE) si poslete svuj prikaz a z UnpackOneFile vratite chybu vybalovani. Salamander otevirani svou metodou prerusi a nasledne vam doruci vas prikaz poslany pres PostMenuExtCommand, na ktery muzete zareagovat vybalenim .gz souboru do TEMPu + volanim ChangePanelPathToArchive. Nevyhoda tohoto reseni: View (F3) a Edit (F4) prestanou fungovat (budou tez otvirat .gz soubor v panelu).
Vnorene archivy chceme resit, mame je na seznamu praci, ale zatim jsme vzdycky meli prioritnejsi ukoly a bohuzel jich mame nalozeno jeste na hodne dlouho dopredu.