﻿<?xml version="1.0" encoding="UTF-8"?>
<button backcol="none" display="icon" textcol="none">
	<label>Unpack2</label>
	<template>MODE/K</template>
	<icon1>#usercommand</icon1>
	<function type="script">
		<instruction>@script JScript</instruction>
		<instruction>function OnClick(clickData)</instruction>
		<instruction>{</instruction>
		<instruction>	var arg=clickData.func.args.MODE;</instruction>
		<instruction>	var Mode=arg;</instruction>
		<instruction>	var cmd = clickData.func.command,stb=cmd.sourcetab,dtb=cmd.desttab;</instruction>
		<instruction>	var d=DOpus,df=d.Create(),dt=df.Date(),fs=d.FSUtil();</instruction>
		<instruction>	cmd.deselect = false;var sl=stb.selected;cmd.ClearFailed();</instruction>
		<instruction>	if(cmd.files.count==0){return;}</instruction>
		<instruction>	var time2=dt.Format(&quot;D#yyyy-MM-dd-T#HH-mm-ss-&quot;)+dt.ms;</instruction>
		<instruction>	cmd.AddLine(&apos;@set time2=&apos;+time2);</instruction>
		<instruction>	var sp=stb.path,spf=sp.filepart,spp=sp.pathpart,dp=dtb.path;</instruction>
		<instruction>	cmd.AddLine(&apos;@set sp=&apos;+sp);</instruction>
		<instruction>	cmd.AddLine(&apos;@set spp=&apos;+spp);</instruction>
		<instruction>	cmd.AddLine(&apos;@set spf=&apos;+spf);</instruction>
		<instruction>	cmd.AddLine(&apos;@set dp=&apos;+dp);</instruction>
		<instruction />
		<instruction>	var folders=df.Vector();folders.reserve(cmd.files.count);</instruction>
		<instruction>	for (var itms = new Enumerator(cmd.files);!itms.atEnd(); itms.moveNext()){</instruction>
		<instruction>		var x=itms.item();</instruction>
		<instruction>		if(x.is_dir){</instruction>
		<instruction>			folders.push_back(x);</instruction>
		<instruction>		}</instruction>
		<instruction>	}</instruction>
		<instruction>	cmd.ClearFiles();cmd.AddFiles(folders);if(cmd.files.count==0){return;}</instruction>
		<instruction />
		<instruction>	if(Mode==&quot;view&quot;){</instruction>
		<instruction>		var upackednam=&quot;Upacked&quot;;</instruction>
		<instruction>		cmd.AddLine(&apos;DOpusRT /col create &quot;&apos;+upackednam+&apos;&quot;&apos;);</instruction>
		<instruction>		var upackedcp=&quot;coll:\/\/&quot;+upackednam;</instruction>
		<instruction>		cmd.AddLine(&apos;@set upackedcp=&apos;+upackedcp);</instruction>
		<instruction>		cmd.AddLine(&apos;DOpusRT /col clear /full &quot;{$upackedcp}&quot;&apos;);</instruction>
		<instruction>		for (var itms = new Enumerator(cmd.files);!itms.atEnd(); itms.moveNext()){</instruction>
		<instruction>			var x=itms.item();</instruction>
		<instruction>			var itms2 = fs.ReadDir(&quot;&quot;+x);</instruction>
		<instruction>			while (!itms2.complete){</instruction>
		<instruction>				var x2 = itms2.Next();		</instruction>
		<instruction>				cmd.AddLine(&apos;Copy FILE=&quot;&apos;+x2+&apos;&quot; TO=&quot;{$upackedcp}&quot; COPYTOCOLL=member AUTOSELECT=yes&apos;);</instruction>
		<instruction>			}</instruction>
		<instruction>		}		</instruction>
		<instruction>		cmd.AddLine(&apos;Go PATH=&quot;{$upackedcp}&quot; NEWTAB=findexisting&apos;);</instruction>
		<instruction>	}else if(Mode==&quot;unpack&quot;){</instruction>
		<instruction>		var isdisk=!(stb.path.drive==0);</instruction>
		<instruction>		if (isdisk){	</instruction>
		<instruction>			var hasparent=sp.test_parent;</instruction>
		<instruction>			for (var itms = new Enumerator(cmd.files),fdsn=df.StringSetI();!itms.atEnd(); itms.moveNext()){</instruction>
		<instruction>				var x=itms.item();</instruction>
		<instruction>				fdsn.insert(x.name);</instruction>
		<instruction>			}		</instruction>
		<instruction>			var stbslchanged=false;</instruction>
		<instruction>			for (var itms = new Enumerator(cmd.files),slt=df.StringSetI();!itms.atEnd(); itms.moveNext()){</instruction>
		<instruction>				var x=itms.item();</instruction>
		<instruction>				var itms2 = fs.ReadDir(&quot;&quot;+x);</instruction>
		<instruction>				while (!itms2.complete){</instruction>
		<instruction>					var x2 = itms2.Next(),x2name=x2.name;</instruction>
		<instruction>					slt.insert(x2name);				</instruction>
		<instruction>					if(!stbslchanged &amp;&amp; fdsn.exists(x2name)){					</instruction>
		<instruction>						cmd.AddLine(&apos;Rename PATTERN=&quot;*&quot; TO=&quot;{file$}{$time2}&quot;&apos;);</instruction>
		<instruction>						stbslchanged=true;			</instruction>
		<instruction>					}</instruction>
		<instruction>				}</instruction>
		<instruction>			}</instruction>
		<instruction>			if(!hasparent){</instruction>
		<instruction>				cmd.AddLine(&apos;Copy MOVE FILE=&quot;{filepath$}*&quot; TO=&quot;{$sp}&quot; AUTOSELECT=yes&apos;);						</instruction>
		<instruction>				cmd.AddLine(&apos;Delete FILE=&quot;{filepath$}&quot;&apos;);						</instruction>
		<instruction>			}else{</instruction>
		<instruction>				cmd.AddLine(&apos;Copy MOVE TO=&quot;{$spp}&quot; AS=&quot;{$spf}&quot; WHENEXISTS=merge AUTOSELECT=yes&apos;);			</instruction>
		<instruction>			}</instruction>
		<instruction>			for (var itms = new Enumerator(slt);!itms.atEnd(); itms.moveNext()){</instruction>
		<instruction>				var x=itms.item();</instruction>
		<instruction>				cmd.AddLine(&apos;Select PATTERN=&quot;&apos;+x+&apos;&quot; EXACT&apos;);</instruction>
		<instruction>			}	</instruction>
		<instruction>		}else if(!isdisk){</instruction>
		<instruction>			if(stb.lister.dual==0){return;}</instruction>
		<instruction>			if(dtb.path.drive==0){return;}</instruction>
		<instruction>			cmd.AddLine(&apos;Copy FILE=&quot;{filepath$}*&quot; TO=&quot;{$dp}&quot; AUTOSELECT=yes&apos;);</instruction>
		<instruction>		}</instruction>
		<instruction>	}</instruction>
		<instruction>	</instruction>
		<instruction>	cmd.Run();//cmd.Clear();</instruction>
		<instruction>}</instruction>
	</function>
</button>
