blob: 8588d8f0c0a7e6d54a8016c2659c369e6e80bf1e [file] [log] [blame]
// namespace -> FTPUI
// invoke the function,pass FTPUI into it, in the case that it doesn't exist, pass an object literal
var FTPUI = (function (FTPUI) {
FTPUI.remoteEntry = null;
FTPUI.localEntry = null;
FTPUI.curLocalDir = null;
FTPUI.createRemoteDir = function (session, directoryListing) {
console.log("in create remote dir");
this.session = session;
try {
FTPUI.listRemote(directoryListing);
}
catch (error) {
FTPUI.notifyUI("Could not access remote directory. " + error);
}
};
FTPUI.listRemote = function (directoryListing) {
try {
var $serverList = $('#remote-browser');
$serverList.prop('textContent', '');
var entries = FTPUtils.parseLsDirectoryListing(directoryListing);
for (var i = 0; i < entries.length; i++) {
var $li = $('<li>');
var $link = $('<a>');
var entryInfo = entries[i];
var entryName = entryInfo.name;
var filePerm = entryInfo.permissions;
var lastModDate = entryInfo.date;
var size = entryInfo.size;
if (!entryInfo.isFile) {
$link.addClass('listed-dir');
}
else if (entryInfo.isLink === 0) {
$link.addClass('link-file');
}
else {
$link.addClass('listed-file');
}
$link.prop('textContent', entryName);
$link.appendTo($li);
jQuery.data($link, 'size', entryInfo.size);
jQuery.data($link, 'fullPath', entryName);
$li.appendTo($serverList);
FTPUI.handleRemoteEntry($link);
}
}
catch (error) {
throw error;
}
};
FTPUI.handleRemoteEntry = function ($remoteEntry) {
var session = this.session;
var self = this;
$remoteEntry.dblclick(function () {
if ($remoteEntry.hasClass('listed-dir')) {
self.handleDirNavigation($remoteEntry);
}
});
$remoteEntry.click(function () {
if (FTPUI.remoteEntry) {
FTPUI.handleSelect(FTPUI.remoteEntry);
}
FTPUI.handleSelect($remoteEntry);
FTPUI.remoteEntry = $remoteEntry;
});
};
FTPUI.handleSelect = function(entry) {
entry.toggleClass('selected');
};
FTPUI.handleDirNavigation = function ($remoteEntry) {
var session = this.session;
console.log("We have clicked on a directory", $remoteEntry.text())
console.log($remoteEntry.text());
session.getCurrentDir().then(function (currentDir) {
session.changeWorkingDir($remoteEntry.text());
FTPUI.remoteEntry = null;
return currentDir;
}).then(function (currentDir) {
var dir = currentDir + $remoteEntry.text();
return session.listDir(dir);
}).then(function (dirListing){
console.log(dirListing);
FTPUI.listRemote(dirListing);
}).catch(function (error) {
FTPUI.notifyUI("Could not get directory listing. " + error);
});
};
//FTP COMMAND: CDUP -> recieve unixOutput from LIST
// listremote(directoryListing)
FTPUI.handleRemoteBackButton = function () {
var session = this.session;
$('#remote-back').click(function() {
session.changeToParentDir().then(function () {
return session.getCurrentDir();
}).then(function (currentDir) {
return session.listDir(currentDir);
}).then(function (dirListing) {
FTPUI.listRemote(dirListing);
}).catch(function (error) {
FTPUI.notifyUI('Could not move to parent directory. ' + error);
});
});
};
FTPUI.handleLocalButtons = function() {
$('#choose-directory').click(function() {
chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function (entry) {
if (entry) {
// if the user hits cancel, entry will be undefinied!
FTPUI.curLocalDir = entry;
FTPUI.listLocalDir(entry);
}
// local back button functionality
$('#local-back').click(function() {
try {
FTPUI.visitParent(FTPUI.curLocalDir);
} catch (error) {
console.log(err.message);
}
});
});
});
};
FTPUI.handleDownload = function() {
var session = this.session;
$('#download').click(function() {
console.log("handle download")
if (!FTPUI.remoteEntry || !FTPUI.curLocalDir) {
// local or remote entry not selected
return;
}
else {
FTPUI.handleSelect(FTPUI.remoteEntry);
if (!FTPUI.localEntry) {
//get local dir and download it ther
FTPUI.localEntry = FTPUI.curLocalDir;
}
if (FTPUI.localEntry.isFile) {
//output message
FTPUI.notifyUI('Can\'t Download to File');
return;
}
session.getCurrentDir().then(function (currentDir) {
var entrySize = jQuery.data(FTPUI.remoteEntry, 'size');
var fullPath = currentDir + FTPUI.remoteEntry.text();
jQuery.data(FTPUI.remoteEntry, 'fullPath', fullPath);
return session.download(FTPUI.remoteEntry, FTPUI.localEntry);
}).then(function (value) {
FTPUI.remoteEntry = null;
FTPUI.localEntry = null;
FTPUI.listLocalDir(FTPUI.curLocalDir);
});
}
});
};
FTPUI.getRemoteDirEntriesInfo = function(dirPath) {
var session = this.session;
return session.listDir(dirPath).then(function (directoryListing) {
return FTPUtils.parseLsDirectoryListing(directoryListing);
});
};
FTPUI.visitParent = function(entry) {
entry.getDirectory('..', {create: false}, FTPUI.listLocalDir);
};
FTPUI.listLocalDir = function (entry) {
FTPUI.curLocalDir = entry;
FileSystemUtils.getLocalDirContents(entry).then(function (dirContent) {
FTPUI.displayEntries(dirContent);
}).catch(function (error) {
throw error;
FTPUI.notifyUI("Cannot display local directory" + error);
});
};
FTPUI.displayEntries = function (entries) {
var $element = $('#local-browser');
// clear the current entries
$element.prop('textContent', '');
// Array.forEach paremeters (value of $element,index of $element, the arrayObject itself)
entries.forEach(function (entry, i, entries) {
var $li = $('<li>');
var $link = $('<a>');
if (entry.isDirectory) {
$link.prop('textContent', entry.name += '/');
$link.addClass('listed-dir');
} else {
$link.prop('textContent', entry.name);
$link.addClass('listed-file');
}
//add anchor tag to li $element
$link.appendTo($li);
//add li $element to un-ordered $element list
$li.appendTo($element);
FTPUI.handleLocalEntry($link, entry);
});
};
FTPUI.handleLocalEntry = function ($localEntry, entryObject) {
$localEntry.dblclick(function() {
if ($localEntry.hasClass('listed-dir')) {
FTPUI.listLocalDir(entryObject);
FTPUI.localEntry = null;
} else {
FTPUI.notifyUI('Selected Local File: ' + $localEntry.text());
}
});
$localEntry.click(function () {
FTPUI.handleSelect($localEntry);
FTPUI.localEntry = entryObject;
});
};
/* Send the User message updates */
/* @param Type: String or Error Object*/
FTPUI.notifyUI = function (notification) {
if(typeof notifcation === Error) notification.toString();
var $li = $('<li>');
$li.prop('textContent', notification);
$('#ui-message').append($li);
};
return FTPUI;
}(FTPUI || {}));