in each selected directory or currently selected files and/or directories in current folder#newcommand@script jscriptfunction isAudio(extension) { switch (extension.toLowerCase()) { case '.mp3': case '.wav': case '.ogg': case '.flac': case '.wma': case '.m4v': case '.m4a': case '.m4b': return true; } return false;}function collectAudioFiles(objEnum) { var objFiles = new Array(); var objT; var i = 0; while (!objEnum.atEnd()) { objT = objEnum.item(); if (isAudio(objT.ext) == true) { objFiles.push(objT); } ++i; objEnum.moveNext(); } objFiles.sort(); return objFiles;}function genM3U(objEnum, bAbsolute) { if (typeof bAbsolute === 'undefined') { bAbsolute = true; } // Original code here if (objEnum.atEnd()) { DOpus.Output("No Items Found"); return; } // build an array of the files so we can sort it var objFiles = collectAudioFiles(objEnum); //DOpus.Output("Length: "+objFiles.length); //DOpus.Output("Files: "+objFiles); //clickData.func.command.ClearFiles(); if (objFiles.length < 1) { DOpus.Output("No Audio Files Found"); return; } var audiobookFolderName = objFiles[0].path.filepart+".m3u"; var audiobookFolderPath = objFiles[0].path; var m3uName = audiobookFolderPath + '\\' + audiobookFolderName; var fso, f1; var ForWriting = 2; //var Dopus = DOpus.CreateCommand; fso = new ActiveXObject("Scripting.FileSystemObject"); var i = 0; if (typeof m3uName !== "undefined") { DOpus.Output("Creating M3U File with "+objFiles.length+" entries."); f1 = fso.CreateTextFile(m3uName, ForWriting); f1.Write("#EXTM3U"+'\r') } for (i; i < objFiles.length; i++) { if (objFiles[i] != null) { if (bAbsolute) { f1.Write((objFiles[i].RealPath) + '\r'); } else { f1.Write((objFiles[i].name) + '\r'); } } } f1.close(); delete objFiles; DOpus.Output("Created M3U File:"+m3uName); delete objEnum;}function filesFromDir(path) {}function OnClick(clickData) { var objCmd = clickData.Func.Command; // How to check if SHIFT was pressed? and set the absolute value to false // mine if (clickData.func.sourcetab.selected.count == 0) { DOpus.Output("Nothing Selected, Processing current directory"); genM3U(new Enumerator(objCmd.sourcetab.files)); // call original code to create m3u for currently selected tab } else { genM3U(new Enumerator(objCmd.sourcetab.selected_files)); //genM3U(new Enumerator(objCmd.sourcetab.selected_dirs)); //This doesn't work for (var eSel = new Enumerator(objCmd.sourcetab.selected_dirs); !eSel.atEnd(); eSel.moveNext()) { // collect files in a collection var objFiles = [] var objT; var eFolEnum = DOpus.FSUtil.ReadDir(eSel.item().RealPath) while(!eFolEnum.complete) { objT = eFolEnum.Next() if (!objT.is_dir) { objFiles.push(objT); } } eFolEnum.Close(); genM3U(new Enumerator(objFiles)); } }}