Here is an example of real use from a function (rather long):
function ExtractArchives(scriptCmdData, selected_files, targetPath, extractEnclosed, deepInspect, deleteEnclosed, deleteList)
{
var warning = false;
var skipList = new Array();
var fsutil = DOpus.FSUtil;
var processedArchives = DOpus.Create.Vector();
var inspectArray = DOpus.Create.Map();
var itemToArchive = DOpus.Create.Map();
var cmd = scriptCmdData.func.command;
var DEBUG = false;
var cmdProg = DOpus.Create.Command();
var progress = cmdProg.progress;
var progressIndex = 0;
var progressTotal = 0;
progress.Init(scriptCmdData.func.sourcetab, "Smart Extract");
progress.pause = false;
progress.SetTitle("Smart Extract");
progress.Show();
logger.info("EXTRACT >>> START <<< ");
if (selected_files.length) logger.debug("length=" + selected_files.length);
if (selected_files.count) logger.debug("count=" + selected_files.count);
logger.debug("EXTRACT > " + (selected_files.length || selected_files.count) + " file(s) to process.");
logger.debug("EXTRACT > Target folder : '" + targetPath + "'.");
logger.debug("EXTRACT > Extract enclosed archives : '" + extractEnclosed + "'.");
logger.debug("EXTRACT > Delete enclosed archives after extract : '" + deleteEnclosed + "'.");
logger.debug("EXTRACT > Deep inspection requested : '" + deepInspect + "'.");
logger.info("EXTRACT >> Parsing files to extract.");
//+dout("**** Adding files to progress : " + selected_files.count);
if (selected_files.length) progressTotal = selected_files.length;
else if (selected_files.count) progressTotal = selected_files.count;
progress.AddFiles(progressTotal);
//DOpus.Delay(250);
for (var e = new Enumerator(selected_files); !e.atEnd(); e.moveNext()) {
var item = e.item();
// dout("");
logger.info(">>" + item.name + "<<<");
progressIndex++;
progress.SetName("[" + progressIndex + "/" + progressTotal + "] ▶ " + item.name);
// -------- Check Proper Archive (not archive file, folder, rxx, partN not first part)
if (!IsProperArchive(item, selected_files)) {
warning = true;
skipList.push(item.name);
progress.StepFiles(1);
logger.warn("Skipping file in progress");
continue;
}
// -------- Check Protected, and set clipboard to default password for user interaction
CheckProtectedArchive(item);
// -------- Parse Archive content to identify if archive root is only 1 folder
var archiveInFolder = GetContainedFolder(item);
logger.debug(" Archive is fully contained in a folder (Only 1 folder in root) = '" + archiveInFolder + "'");
// -------- Extracting Archive (Recursively calling ExtractArchive if extractEnclosed or deepInspect is true)
var itemPath = DOpus.FSUtil.NewPath(""+item.path);
logger.trace("Item Path = " + itemPath);
var thisItemTargetPath = targetPath;
if (itemPath.test_parent) itemPath.Parent;
logger.trace("Before comp : itemPath = " + itemPath);
logger.trace("Before comp : fsutil = " + fsutil.Resolve("/downloads/05_AudioToSort"));
if (""+itemPath == ""+fsutil.Resolve("/downloads/05_AudioToSort")) {
thisItemTargetPath += "\\" + item.path.filepart;
logger.info("Dealing with a 05_AudioToSort file, replicating folder structure. (thisItemTargetPath=" + thisItemTargetPath + ").");
}
else {
logger.info("Not in 05_AudioToSort ... processing as usual.");
logger.trace("test parent = " + itemPath.test_parent);
logger.trace("Parent = " + itemPath);
logger.trace("fsutil resolve = " + fsutil.Resolve("/downloads/05_AudioToSort"));
}
var extractFolder = thisItemTargetPath;
if (archiveInFolder != "") extractFolder += "\\" + archiveInFolder;
else extractFolder += "\\" + item.name_stem_m;
var containedArchives = RawExtract(scriptCmdData, item, archiveInFolder, extractFolder, thisItemTargetPath, processedArchives, extractEnclosed, deepInspect, deleteEnclosed, deleteList);
if (deepInspect) {
logger.info("Deep inspection into " + extractFolder);
var dirIter = DOpus.FSUtil.ReadDir(extractFolder, true);
while (!dirIter.complete) {
var itemInspect = dirIter.Next();
if (!itemInspect.InGroup("Archives") || itemInspect.is_dir) {
if (DEBUG)
logger.trace("Inspect | not an archive > " + itemInspect);
}
else {
logger.debug("Inspect | ARCHIVE FOUND > " + itemInspect);
if (arrayContainsText(containedArchives, itemInspect) || "" + itemInspect === "" + item)
logger.trace ("Inspect | ... already in extracted archives");
else if (arrayContainsText(processedArchives, itemInspect)) {
logger.trace("Inspect | ... already in processed archives");
}
else {
logger.debug ("Inspect | NEEDS TO BE PROCESSED");
logger.trace ("Name = " + itemInspect.name + " | Folder = " + itemInspect.path);
// Prepare user interaction
//if (!arrayContainsText(inspectArray, itemInspect.path))
if (! inspectArray.exists("" + itemInspect.path))
inspectArray("" + itemInspect.path) = DOpus.Create.Vector();
inspectArray("" + itemInspect.path).push_back(itemInspect);
itemToArchive("" + itemInspect) = item;
// If processed (whatever decision : extract or not), consider as processed
//processedArchives.push(itemInspect);
}
}
}
}
// -------- Deleting sub archives
if (!deleteEnclosed) continue;
logger.info("* Preparing deletion for enclosed archives for " + item.name + ". " + containedArchives.length + " archives found.");
GetFilesToDelete(item, containedArchives, deleteList);
logger.trace("<<Delete List -- Checking (after processing item '" + item + "' >>");
for(var i = 0; i < deleteList.length; i++)
{
var item = deleteList[i];
var sourceArch = item.archive;
var candidate = item.file;
logger.trace(" > Arch (#" + i + "): '" + sourceArch.display_name + "' | Candidate: '" + candidate.realpath + "'");
}
logger.trace("Stepping file in progress");
progress.StepFiles(1);
}
if (extractEnclosed) {
var confirmedList = ConfirmExtractList(inspectArray,scriptCmdData.func.sourcetab);
for (var f = new Enumerator(confirmedList); !f.atEnd(); f.moveNext()) {
var deepContainedArchives = DOpus.Create.Vector();
var insArray = f.item();
logger.debug("Confirmed Path = " + insArray);
for (var g = new Enumerator(confirmedList(insArray)); !g.atEnd(); g.moveNext()) {
var insItem = g.item();
logger.trace(" > Confirmed item = " + insItem);
deepContainedArchives.push_back(insItem);
if (itemToArchive.exists(insItem)) {
GetFilesToDelete(itemToArchive(insItem), deepContainedArchives, deleteList);
} else {
logger.error("** Error : unable to retrieve associated Archive for deep inspected item " + insItem);
}
}
var subProcessedArchives = ExtractArchives(scriptCmdData, confirmedList(insArray), insArray, extractEnclosed, deepInspect, deleteEnclosed, deleteList);
logger.info("*** extract Deep Enclosed processed new archives");
for (var g = new Enumerator(subProcessedArchives); !g.atEnd(); g.moveNext()) {
var subItem = g.item();
logger.trace("*** 1 item : " + subItem);
processedArchives.push_back(subItem);
}
}
logger.debug("<<'Final' Delete List -- Checking (after deep inspection resolution) >>");
for(var i = 0; i < deleteList.length; i++)
{
var item = deleteList[i];
var sourceArch = item.archive;
var candidate = item.file;
logger.trace(" > Arch (#" + i + "): '" + sourceArch.display_name + "' | Candidate: '" + candidate.realpath + "'");
}
}
// -------- Display warnings about skipped files
if (warning) {
logger.warn("** Warning : Some files have been skipped **");
logger.warn("** >> Skipped files : " + skipList.join(","));
logger.warn("**");
}
logger.info("EXTRACT > Exiting for targetPath = " + targetPath);
// dout("---");
progress.Hide();
return processedArchives;
}
The interesting parts are:
var cmdProg = DOpus.Create.Command();
var progress = cmdProg.progress;
var progressIndex = 0;
var progressTotal = 0;
progress.Init(scriptCmdData.func.sourcetab, "Smart Extract");
progress.pause = false;
progress.SetTitle("Smart Extract");
progress.Show();
- Then Adding the total number of files to process (once calculated):
progress.AddFiles(progressTotal);
- Changing the display when you're processing a specific file:
progress.SetName("[" + progressIndex + "/" + progressTotal + "] ▶ " + item.name);
- Incrementing the counter of processed files:
progress.StepFiles(1);
- Once you're done, hiding the window:
progress.Hide();