summaryrefslogtreecommitdiffstats
path: root/src/app/recode.js
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2025-08-28 22:44:34 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2025-08-31 23:30:34 +0900
commitf9abd9d505434c9244c03eac708e29a0ca042f6b (patch)
tree30a197ab4c413849188bc131ff859212e636c821 /src/app/recode.js
parent14d42d284de233f9937becf3fc9ee0dabede3b21 (diff)
downloadkrusader-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.js202
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);
+ }*/
+}
+