Skip to content

Commit

Permalink
Merge branch 'master' of http://github.com/Pita/etherpad-lite
Browse files Browse the repository at this point in the history
  • Loading branch information
Gared committed Feb 27, 2012
2 parents 0336526 + 0c77052 commit d2cd121
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 96 deletions.
2 changes: 1 addition & 1 deletion node/db/PadManager.js
Expand Up @@ -115,7 +115,7 @@ exports.doesPadExists = function(padId, callback)
db.get("pad:"+padId, function(err, value)
{
if(ERR(err, callback)) return;
callback(null, value != null);
callback(null, value != null && value.atext);
});
}

Expand Down
24 changes: 17 additions & 7 deletions node/handler/ImportHandler.js
Expand Up @@ -82,7 +82,7 @@ exports.doImport = function(req, res, padId)
//this allows us to accept source code files like .c or .java
function(callback)
{
var fileEnding = srcFile.split(".")[1].toLowerCase();
var fileEnding = (srcFile.split(".")[1] || "").toLowerCase();
var knownFileEndings = ["txt", "doc", "docx", "pdf", "odt", "html", "htm"];

//find out if this is a known file ending
Expand Down Expand Up @@ -115,7 +115,15 @@ exports.doImport = function(req, res, padId)
{
var randNum = Math.floor(Math.random()*0xFFFFFFFF);
destFile = tempDirectory + "eplite_import_" + randNum + ".txt";
abiword.convertFile(srcFile, destFile, "txt", callback);
abiword.convertFile(srcFile, destFile, "txt", function(err){
//catch convert errors
if(err){
console.warn("Converting Error:", err);
return callback("convertFailed");
} else {
callback();
}
});
},

//get the pad object
Expand Down Expand Up @@ -176,16 +184,18 @@ exports.doImport = function(req, res, padId)
}
], function(err)
{
//the upload failed, there is nothing we can do, send a 500
if(err == "uploadFailed")
var status = "ok";

//check for known errors and replace the status
if(err == "uploadFailed" || err == "convertFailed")
{
res.send(500);
return;
status = err;
err = null;
}

ERR(err);

//close the connection
res.send("ok");
res.send("<script>document.domain = document.domain; var impexp = window.top.require('/pad_impexp').padimpexp.handleFrameCall('" + status + "'); </script>", 200);
});
}
81 changes: 42 additions & 39 deletions node/utils/Abiword.js
Expand Up @@ -53,7 +53,7 @@ if(os.type().indexOf("Windows") > -1)
abiword.on('exit', function (code)
{
if(code != 0) {
throw "Abiword died with exit code " + code;
return callback("Abiword died with exit code " + code);
}

if(stdoutBuffer != "")
Expand All @@ -75,52 +75,54 @@ if(os.type().indexOf("Windows") > -1)
else
{
//spawn the abiword process
var abiword = spawn(settings.abiword, ["--plugin", "AbiCommand"]);

//append error messages to the buffer
abiword.stderr.on('data', function (data)
{
stdoutBuffer += data.toString();
});

//throw exceptions if abiword is dieing
abiword.on('exit', function (code)
{
throw "Abiword died with exit code " + code;
});
var abiword;
var stdoutCallback = null;
var spawnAbiword = function (){
abiword = spawn(settings.abiword, ["--plugin", "AbiCommand"]);
var stdoutBuffer = "";
var firstPrompt = true;

//delegate the processing of stdout to a other function
abiword.stdout.on('data',onAbiwordStdout);
//append error messages to the buffer
abiword.stderr.on('data', function (data)
{
stdoutBuffer += data.toString();
});

var stdoutCallback = null;
var stdoutBuffer = "";
var firstPrompt = true;
//abiword died, let's restart abiword and return an error with the callback
abiword.on('exit', function (code)
{
spawnAbiword();
stdoutCallback("Abiword died with exit code " + code);
});

function onAbiwordStdout(data)
{
//add data to buffer
stdoutBuffer+=data.toString();

//we're searching for the prompt, cause this means everything we need is in the buffer
if(stdoutBuffer.search("AbiWord:>") != -1)
//delegate the processing of stdout to a other function
abiword.stdout.on('data',function (data)
{
//filter the feedback message
var err = stdoutBuffer.search("OK") != -1 ? null : stdoutBuffer;

//reset the buffer
stdoutBuffer = "";
//add data to buffer
stdoutBuffer+=data.toString();

//call the callback with the error message
//skip the first prompt
if(stdoutCallback != null && !firstPrompt)
//we're searching for the prompt, cause this means everything we need is in the buffer
if(stdoutBuffer.search("AbiWord:>") != -1)
{
stdoutCallback(err);
stdoutCallback = null;
//filter the feedback message
var err = stdoutBuffer.search("OK") != -1 ? null : stdoutBuffer;

//reset the buffer
stdoutBuffer = "";

//call the callback with the error message
//skip the first prompt
if(stdoutCallback != null && !firstPrompt)
{
stdoutCallback(err);
stdoutCallback = null;
}

firstPrompt = false;
}

firstPrompt = false;
}
});
}
spawnAbiword();

doConvertTask = function(task, callback)
{
Expand All @@ -130,6 +132,7 @@ else
stdoutCallback = function (err)
{
callback();
console.log("queue continue");
task.callback(err);
};
}
Expand Down
65 changes: 16 additions & 49 deletions static/js/pad_impexp.js
Expand Up @@ -95,20 +95,13 @@ var padimpexp = (function()
}, 0);
$('#importarrow').stop(true, true).hide();
$('#importstatusball').show();

$("#import .importframe").load(function()
{
importDone();
});
}
return ret;
}

function importFailed(msg)
{
importErrorMessage(msg);
importDone();
addImportFrames();
}

function importDone()
Expand All @@ -120,6 +113,7 @@ var padimpexp = (function()
}, 0);
$('#importstatusball').hide();
importClearTimeout();
addImportFrames();
}

function importClearTimeout()
Expand All @@ -131,11 +125,19 @@ var padimpexp = (function()
}
}

function importErrorMessage(msg)
function importErrorMessage(status)
{
var msg="";

if(status === "convertFailed"){
msg = "We were not able to import this file. Please use a different document format or copy paste manually";
} else if(status === "uploadFailed"){
msg = "The upload failed, please try again";
}

function showError(fade)
{
$('#importmessagefail').html('<strong style="color: red">Import failed:</strong> ' + (msg || 'Please try a different file.'))[(fade ? "fadeIn" : "show")]();
$('#importmessagefail').html('<strong style="color: red">Import failed:</strong> ' + (msg || 'Please copy paste'))[(fade ? "fadeIn" : "show")]();
}

if ($('#importexport .importmessage').is(':visible'))
Expand Down Expand Up @@ -175,39 +177,6 @@ var padimpexp = (function()
importDone();
}

function importApplicationSuccessful(data, textStatus)
{
if (data.substr(0, 2) == "ok")
{
if ($('#importexport .importmessage').is(':visible'))
{
$('#importexport .importmessage').hide();
}
$('#importmessagesuccess').html('<strong style="color: green">Import successful!</strong>').show();
$('#importformfilediv').hide();
window.setTimeout(function()
{
$('#importmessagesuccess').fadeOut("slow", function()
{
$('#importformfilediv').show();
});
if (hidePanelCall)
{
hidePanelCall();
}
}, 3000);
}
else if (data.substr(0, 4) == "fail")
{
importErrorMessage("Couldn't update pad contents. This can happen if your web browser has \"cookies\" disabled.");
}
else if (data.substr(0, 4) == "msg:")
{
importErrorMessage(data.substr(4));
}
importDone();
}

///// export

function cantExport()
Expand Down Expand Up @@ -291,16 +260,14 @@ var padimpexp = (function()
$('#importform').submit(fileInputSubmit);
$('.disabledexport').click(cantExport);
},
handleFrameCall: function(callName, argsArray)
handleFrameCall: function(status)
{
if (callName == 'importFailed')
if (status !== "ok")
{
importFailed(argsArray[0]);
}
else if (callName == 'importSuccessful')
{
importSuccessful(argsArray[0]);
importFailed(status);
}

importDone();
},
disable: function()
{
Expand Down

0 comments on commit d2cd121

Please sign in to comment.