diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-28 22:44:34 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-31 23:30:34 +0900 |
commit | f9abd9d505434c9244c03eac708e29a0ca042f6b (patch) | |
tree | 30a197ab4c413849188bc131ff859212e636c821 /src/app/recode.js | |
parent | 14d42d284de233f9937becf3fc9ee0dabede3b21 (diff) | |
download | krusader-r14.1.x.tar.gz krusader-r14.1.x.zip |
Restructure source foldersr14.1.x
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9)
Diffstat (limited to 'src/app/recode.js')
-rw-r--r-- | src/app/recode.js | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/app/recode.js b/src/app/recode.js new file mode 100644 index 0000000..61cb5a3 --- /dev/null +++ b/src/app/recode.js @@ -0,0 +1,202 @@ +/* + This is an extension for the Krusader filemanager + http://krusader.sf.net/ + + Author: Vaclav Juza. + based on mount by Jonas B�r, http://www.jonas-baehr.de/ + + This script shows a dialog for recoding file names. The commandline which is + returned by this is executed by Krusader's UserAction-system + Krusader looks for the variable 'cmd'. + + scriptDir is a string-variable set by Krusader with the directory of the currently + executed script. This is usefull for relative path's inside scripts. +*/ + +var cmd = "@CANCEL@"; //FIXME: replace this with UserAction.cancel +//if an exception occurs, do not continue + +var charsetsRecode = ["UTF-8","UTF-7","ISO-8859-2","WINDOWS-1250","IBM852","Kamenicky","MacCentralEurope","ISO-8859-1"]; +var charsetsIconv = ["UTF-8","UTF-7","ISO_6937","ISO-8859-2","WINDOWS-1250","IBM852","ISO-8859-1"]; +var endLineTexts = ["UNIX","DOS","MAC"]; +var endLineVals = ["","/CR-LF","/CR"]; +var mimeTexts = ["NORMAL","BASE64","QUOTED-PRINTABLE"]; +var mimeVals = ["","/Base64","/Quoted-Printable"]; +var dumps = ["NORMAL","Hexadecimal-1","Hexadecimal-2","Hexadecimal-4","Decimal-1","Decimal-2","Decimal-4", + "Octal-1","Octal-2","Octal-4"]; +var methodTexts = ["Copy","Rename/move"]; + +if(dstDir.indexOf(srcDir) == 0 || srcDir.indexOf(dstDir) == 0){ //would do weird things + throw new Error("Destination directory inside the source directory is not supported"); +} + +var ui = Factory.loadui( scriptDir + 'recode.ui' ); + +var bc = [ ui.child('boxInCharset'), ui.child('boxOutCharset') ]; +var bl = [ ui.child('boxInLineend'), ui.child('boxOutLineend') ]; +var bm = [ ui.child('boxInMime'), ui.child('boxOutMime') ]; +var bd = [ ui.child('boxInDump'), ui.child('boxOutDump') ]; +var bMtd = ui.child('boxMethod'); +var cbName = ui.child('checkName'); +var cbContent = ui.child('checkContent'); +var cbDebug = ui.child('checkDebug'); +var loc = [ ui.child('locInput'), ui.child('locOutput') ]; + +function fillCombo(kcombo, texts) { + var t = kcombo.child('in-combo'); + for(i in texts) { + t.insertItem(texts[i]); + } + kcombo.currentItem = 0; +} + +if(useRecode==1){ + for(var d=0;d<=1;d++){ + fillCombo(bc[d],charsetsRecode); + fillCombo(bl[d],endLineTexts); + fillCombo(bm[d],mimeTexts); + fillCombo(bd[d],dumps); + bc[0].currentItem = 2; + } +}else{ + for(var d=0;d<=1;d++){ + fillCombo(bc[d],charsetsIconv); + bc[0].currentItem = 3; + bl[0].shown = 0; + bl[1].shown = 0; + bm[0].shown = 0; + bm[1].shown = 0; + bd[0].shown = 0; + bd[1].shown = 0; + } +} +fillCombo(bMtd,methodTexts); + +//defaults +loc[0].url = srcDir; +loc[1].url = dstDir; +cbName.checked=1; +cbContent.checked=0; +cbDebug.checked=0; + +function quoteString(str) { + return "'" + str.replace(/'/g,"'\\''") + "'"; +} + +function indentString(str) { + return str.replace(/(^|\n)([^$])/g,"$1 $2"); +} + +function debugString(str) { + return str.replace(/(<|>|\\|;)/g,"\\$1").replace(/"/g,"\\\"\""); +} + +bc[0].setFocus(); +var m = ui.exec(); + +if(m) { + var isMove = ( bMtd.currentItem == 1 ); + var rcName = cbName.checked; + var rcContent = cbContent.checked; + var debug = cbDebug.checked; + + srcDir = loc[0].url; + dstDir = loc[1].url; + if(dstDir.indexOf(srcDir) == 0 || srcDir.indexOf(dstDir) == 0){ //would do weird things + throw new Error("Destination directory inside the source directory is not supported"); + } + + var listCmd = + "for i in " + toProcess + "\n" + +"do\n" + +" find \"${i}\" -name '*'\n" + +"done"; + + //the following contains user input, must be quoted + var recodeCmd, recodeSmallCmd; + if(useRecode==1){ + var expr = new Array(2); + var smallExpr = new Array(2); + for(var d=0; d<=1; d++){ + var chs = ""; + chs = bc[d].currentText; + var le = endLineVals[ bl[d].currentItem ]; + var me = mimeVals[ bm[d].currentItem ]; + var du=""; + if( bd[d].currentItem > 0 ) { + du = "/" + bd[d].currentText; + } + expr[d] = chs + le + me + du; + smallExpr[d] = chs + me; + } + recodeCmd="recode " + quoteString(expr[0] + ".." + expr[1]); + recodeSmallCmd="recode " + quoteString(smallExpr[0] + ".." + smallExpr[1]); + }else{ + recodeCmd="iconv -f " + quoteString(bc[0].currentText) + " -t " + quoteString(bc[1].currentText); + recodeSmallCmd=recodeCmd; + } + + var setupVarsCmd; + if(rcName){ + setupVarsCmd = + "fnew=\"$(\n" + +" echo \"${forig}\" | " + recodeSmallCmd +"\n" + +")\""; + }else{ + setupVarsCmd = "fnew=\"${forig}\""; + } + var dstStr = dstDir + "/\"${fnew}\""; + var oneDirCmd = "mkdir " + dstStr; //create the directory in new location + var oneFileCmd; + var oneSpcCmd; + if(isMove){ + oneSpcCmd = "mv " + "\"${forig}\" " + dstStr; + }else{ + oneSpcCmd = "cp -dp " + "\"${forig}\" " + dstStr; + } + if(rcContent){ + oneFileCmd = recodeCmd + " \<\"${forig}\" \>"+dstStr; + if(isMove){ + oneFileCmd += "&& rm -f \"${forig}\""; + } + }else{ + oneFileCmd = oneSpcCmd; + } + oneDirCmdDbg="echo directory:" + debugString(oneDirCmd); + oneFileCmdDbg="echo file:" + debugString(oneFileCmd); + oneSpcCmdDbg="echo special:" + debugString(oneSpcCmd); + var oneItemCmd = + setupVarsCmd + "\n" + +"if [ ! -L \"${forig}\" ] && [ -d \"${forig}\" ]\n" + +"then\n" + +indentString(oneDirCmdDbg) + "\n" + + ( debug ? "" : indentString(oneDirCmd) + "\n" ) + +"elif [ -f \"${forig}\" ]\n" + +"then\n" + +indentString(oneFileCmdDbg) + "\n" + + ( debug ? "" : indentString(oneFileCmd) + "\n" ) + +"else\n" + +indentString(oneSpcCmdDbg) + "\n" + + ( debug ? "" : indentString(oneSpcCmd) + "\n" ) + +"fi"; + var processCmd = + "while read forig;\n" + +"do\n" + +indentString(oneItemCmd) + "\n" + +"done"; + if(isMove){ + var deleteOldCmd = + "for i in " + toProcess + "\n" + +"do\n" + +" [ / = \"$i\" ] || rm -rf \"${i}\"\n" + +"done"; + var realCmd = "(\n" + indentString(listCmd) + "\n) | (\n" + indentString(processCmd) + "\n)\n"+ deleteOldCmd; + }else{ + var realCmd = "(\n" + indentString(listCmd) + "\n) | (\n" + indentString(processCmd) + "\n)"; + } + cmd = "sh -c " + quoteString("LANG=C; cd " + quoteString(srcDir) + "; " + realCmd); + /*if(debug){ + cmd = "echo " + quoteString(cmd); + }*/ +} + |