Skip to content
This repository has been archived by the owner on Apr 17, 2023. It is now read-only.

Commit

Permalink
Fixed file download and render bug
Browse files Browse the repository at this point in the history
  • Loading branch information
nialldonnellyfh committed Jun 6, 2014
1 parent c613f10 commit ca2f87c
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 64 deletions.
4 changes: 2 additions & 2 deletions src/appforms/src/core/021-web.js
Expand Up @@ -60,7 +60,7 @@ appForm.web = function (module) {

function success(fileEntry){
$fh.forms.log.d("File Download Completed Successfully. FilePath: " + fileEntry.fullPath);
return cb(null, fileEntry.fullPath);
return cb(null, fileEntry.toURL());
}

function fail(error){
Expand All @@ -71,7 +71,7 @@ appForm.web = function (module) {
if(fileMetaData.fileName){
$fh.forms.log.d("File name for file " + fileMetaData.fileName + " found. Starting download");
var fullPath = basePath + fileMetaData.fileName;
ft.download(encodeURI(url), fullPath, success, fail, {headers: {
ft.download(encodeURI(url), fullPath, success, fail, false, {headers: {
"Connection": "close"
}});
} else {
Expand Down
5 changes: 2 additions & 3 deletions src/appforms/src/core/030-Store02mbaas.js
Expand Up @@ -42,8 +42,7 @@ appForm.stores = function(module) {
} else {
var url = _getUrl(model);

// if(self.isFileTransfer(model) && self.isPhoneGap()){ //TODO Niall Investigate Error in device download
if(false){
if(self.isFileTransfer(model) && self.isPhoneGap()){
appForm.web.downloadFile(url, model.getFileMetaData(), cb);
}
else if(self.isFileTransfer(model)) {//Trying to download a file without phone. No need as the direct web urls can be used
Expand Down Expand Up @@ -135,7 +134,7 @@ appForm.stores = function(module) {
break;
case 'fileSubmissionDownload':
props.submissionId = model.getSubmissionId();
props.submissionId = model.getFileGroupId();
props.fileGroupId = model.getFileGroupId();
break;
case 'offlineTest':
return "http://127.0.0.1:8453";
Expand Down
2 changes: 1 addition & 1 deletion src/appforms/src/core/040-Model01config.js
Expand Up @@ -151,7 +151,7 @@ appForm.models = function(module) {
'base64fileSubmission': '/forms/:appId/:submissionId/:fieldId/:hashName/submitFormFileBase64',
'submissionStatus': '/forms/:appId/:submissionId/status',
'formSubmissionDownload': '/forms/:appId/submission/:submissionId',
'fileSubmissionDownload': '/mbaas/forms/:appId/submission/:submissionId/file/:fileGroupId',
'fileSubmissionDownload': '/forms/:appId/submission/:submissionId/file/:fileGroupId',
'completeSubmission': '/forms/:appId/:submissionId/completeSubmission',
'config': '/forms/:appid/config/:deviceId'
});
Expand Down
2 changes: 1 addition & 1 deletion src/appforms/src/core/040-Model04FileSubmissionDownload.js
Expand Up @@ -52,7 +52,7 @@ appForm.models = function (module) {
urlTemplate = urlTemplate.replace(":submissionId", submissionId);
urlTemplate = urlTemplate.replace(":fileGroupId", fileGroupId);
urlTemplate = urlTemplate.replace(":appId", appForm.config.get('appId', "notSet"));
return appForm.models.config.get("cloudHost", "notset") + urlTemplate;
return appForm.models.config.get("cloudHost", "notset") + "/mbaas" + urlTemplate;
} else {
return "notset";
}
Expand Down
133 changes: 76 additions & 57 deletions src/appforms/src/core/050-api.js
Expand Up @@ -230,82 +230,101 @@ appForm.api = function (module) {
}

/*
* Function for downloading a submission stored on the remote server.
*
* @param params {}
* @param {function} cb (err, downloadTask)
* */
function downloadSubmission(params, cb){
params = params ? params : {};
cb = cb ? cb : defaultFunction;
var submissionToDownload = null;


* Function for downloading a submission stored on the remote server.
*
* @param params {}
* @param {function} cb (err, downloadTask)
* */
function downloadSubmission(params, cb) {
params = params ? params : {};
//cb = cb ? cb : defaultFunction;
var submissionToDownload = null;

if(typeof(cb) !== 'function'){
return null;
}

function finishSubmissionDownload(err){
err = typeof(err) === "string" && err.length === 24 ? null : err;
$fh.forms.log.d("finishSubmissionDownload ", err, submissionToDownload);
var subCBId = submissionToDownload.getRemoteSubmissionId();
var subsCbsWatiting = waitOnSubmission[subCBId];
if(subsCbsWatiting){
var subCB = subsCbsWatiting.pop();
while(typeof(subCB) === 'function'){
subCB(err, submissionToDownload);
subCB = subsCbsWatiting.pop();
}
function finishSubmissionDownload(err) {
err = typeof(err) === "string" && err.length === 24 ? null : err;
$fh.forms.log.d("finishSubmissionDownload ", err, submissionToDownload);
var subCBId = submissionToDownload.getRemoteSubmissionId();
var subsCbsWatiting = waitOnSubmission[subCBId];
if (subsCbsWatiting) {
var subCB = subsCbsWatiting.pop();
while (typeof(subCB) === 'function') {
subCB(err, submissionToDownload);
subCB = subsCbsWatiting.pop();
}

if(submissionToDownload.clearEvents){
if (submissionToDownload.clearEvents) {
submissionToDownload.clearEvents();
}
} else {
submissionToDownload.clearEvents();
return cb(err, submissionToDownload);
}
} else {
submissionToDownload.clearEvents();
return cb(err, submissionToDownload);
}
}

$fh.forms.log.d("downloadSubmission called", params);
$fh.forms.log.d("downloadSubmission called", params);

if(params.submissionId){
$fh.forms.log.d("downloadSubmission SubmissionId exists" + params.submissionId);
var submissionAlreadySaved = appForm.models.submissions.findMetaByRemoteId(params.submissionId);
if (params.submissionId) {
$fh.forms.log.d("downloadSubmission SubmissionId exists" + params.submissionId);
var submissionAlreadySaved = appForm.models.submissions.findMetaByRemoteId(params.submissionId);

if(submissionAlreadySaved === null){
if (submissionAlreadySaved === null) {

$fh.forms.log.d("downloadSubmission submission does not exist, downloading", params);
submissionToDownload = new appForm.models.submission.newInstance(null, {submissionId: params.submissionId});
$fh.forms.log.d("downloadSubmission submission does not exist, downloading", params);
submissionToDownload = new appForm.models.submission.newInstance(null, {
submissionId: params.submissionId
});

submissionToDownload.on('error', finishSubmissionDownload);
submissionToDownload.on('error', finishSubmissionDownload);

submissionToDownload.on('downloaded', finishSubmissionDownload);
submissionToDownload.on('downloaded', finishSubmissionDownload);

if(typeof(params.updateFunction) === 'function'){
submissionToDownload.on('progress', params.updateFunction);
}

waitOnSubmission[params.submissionId] = waitOnSubmission[params.submissionId] ? waitOnSubmission[params.submissionId].push(cb) : [cb];
if (typeof(params.updateFunction) === 'function') {
submissionToDownload.on('progress', params.updateFunction);
}

submissionToDownload.download(function(err){
if(err){
$fh.forms.log.e("Error queueing submission for download " + err);
return cb(err);

if(typeof(cb) === "function"){
if(waitOnSubmission[params.submissionId]){
waitOnSubmission[params.submissionId].push(cb);
} else {
waitOnSubmission[params.submissionId] = [];
waitOnSubmission[params.submissionId].push(cb);
}
}
});
} else {
$fh.forms.log.d("downloadSubmission submission exists", params);

//Submission was created, but not finished downloading
if(submissionAlreadySaved.status !== "downloaded"){
waitOnSubmission[params.submissionId] = waitOnSubmission[params.submissionId] ? waitOnSubmission[params.submissionId].push(cb) : [cb];
submissionToDownload.download(function(err) {
if (err) {
$fh.forms.log.e("Error queueing submission for download " + err);
return cb(err);
}
});
} else {
appForm.models.submissions.getSubmissionByMeta(submissionAlreadySaved, cb);
}
$fh.forms.log.d("downloadSubmission submission exists", params);

//Submission was created, but not finished downloading
if (submissionAlreadySaved.status !== "downloaded") {
if(typeof(cb) === "function"){
if(waitOnSubmission[params.submissionId]){
waitOnSubmission[params.submissionId].push(cb);
} else {
waitOnSubmission[params.submissionId] = [];
waitOnSubmission[params.submissionId].push(cb);
}
}
} else {
appForm.models.submissions.getSubmissionByMeta(submissionAlreadySaved, cb);
}

}
} else {
$fh.forms.log.e("No submissionId passed to download a submission");
return cb("No submissionId passed to download a submission");
}
} else {
$fh.forms.log.e("No submissionId passed to download a submission");
return cb("No submissionId passed to download a submission");
}
}
return module;
}(appForm.api || {});
//mockup $fh apis for Addons.
Expand Down

0 comments on commit ca2f87c

Please sign in to comment.