зеркало из https://github.com/mozilla/pjs.git
initial networking stuff for publishing (in progress); r=akkana; sr=kin
This commit is contained in:
Родитель
ac6edf8d1b
Коммит
8f02aa1136
|
@ -0,0 +1,141 @@
|
||||||
|
function EditorPublish(destinationDirectoryLocation, fileName, login, password)
|
||||||
|
{
|
||||||
|
post_current_editor_contents_to_server(destinationDirectoryLocation, fileName, login, password);
|
||||||
|
// PublishCopyFile(srcDirectoryLocation, destinationDirectoryLocation, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// this function takes a login and password and adds them to the destination url
|
||||||
|
function get_destination_channel(destinationDirectoryLocation, fileName, login, password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
|
||||||
|
if (!ioService)
|
||||||
|
{
|
||||||
|
dump("failed to get io service\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a channel for the destination location
|
||||||
|
destChannel = create_channel_from_url(ioService, destinationDirectoryLocation + fileName, login, password);
|
||||||
|
if (!destChannel)
|
||||||
|
{
|
||||||
|
dump("can't create dest channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// destChannel.SetNotificationCallbacks();
|
||||||
|
|
||||||
|
var ftpChannel = destChannel.QueryInterface(Components.interfaces.nsIFTPChannel);
|
||||||
|
return ftpChannel;
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function output_current_editor_to_stream()
|
||||||
|
{
|
||||||
|
var formatType = editorShell.editorType;
|
||||||
|
dump("formatType is " + formatType + "\n");
|
||||||
|
var flags = 256; // nsIDocumentEncoder::OutputEncodeEntities
|
||||||
|
var charset = editorShell.GetDocumentCharacterSet();
|
||||||
|
dump("charset is " + charset + "\n");
|
||||||
|
// XXX we need to create an nsIOutputStream here
|
||||||
|
var stream = editorShell.editor.OutputToStream('text/'+formatType, charset, flags);
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
function post_current_editor_contents_to_server(newLocation, fileName, login, password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var contentsStream = output_current_editor_to_stream();
|
||||||
|
if (!contentsStream)
|
||||||
|
{
|
||||||
|
dump("failed to get a stream\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var ftpChannel = get_destination_channel(newLocation, fileName, login, password);
|
||||||
|
if (!ftpChannel)
|
||||||
|
{
|
||||||
|
dump("failed to get a destination channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ftpChannel.uploadStream = contentsStream;
|
||||||
|
ftpChannel.asyncOpen(null, null);
|
||||||
|
dump("done\n");
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
dump("an error occurred: " + e + "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// this function takes a full url, creates an nsIURI, and then creates a channel from that nsIURI
|
||||||
|
function create_channel_from_url(ioService, aURL, aLogin, aPassword)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var nsiuri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
|
||||||
|
if (!nsiuri)
|
||||||
|
return null;
|
||||||
|
nsiuri.spec = aURL;
|
||||||
|
if (aLogin)
|
||||||
|
{
|
||||||
|
nsiuri.username = aLogin;
|
||||||
|
if (aPassword)
|
||||||
|
nsiuri.password = aPassword;
|
||||||
|
}
|
||||||
|
return ioService.newChannelFromURI(nsiuri);
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
dump(e+"\n");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function PublishCopyFile(srcDirectoryLocation, destinationDirectoryLocation, fileName, aLogin, aPassword)
|
||||||
|
{
|
||||||
|
// append '/' if it's not there; inputs should be directories so should end in '/'
|
||||||
|
if ( srcDirectoryLocation.charAt(srcDirectoryLocation.length-1) != '/' )
|
||||||
|
srcDirectoryLocation = srcDirectoryLocation + '/';
|
||||||
|
if ( destinationDirectoryLocation.charAt(destinationDirectoryLocation.length-1) != '/' )
|
||||||
|
destinationDirectoryLocation = destinationDirectoryLocation + '/';
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// grab an io service
|
||||||
|
var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
|
||||||
|
if (!ioService)
|
||||||
|
{
|
||||||
|
dump("failed to get io service\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a channel for the source location
|
||||||
|
srcChannel = create_channel_from_url(ioService, srcDirectoryLocation + fileName, null, null);
|
||||||
|
if (!srcChannel)
|
||||||
|
{
|
||||||
|
dump("can't create src channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a channel for the destination location
|
||||||
|
var ftpChannel = get_destination_channel(destinationDirectoryLocation, fileName, aLogin, aPassword);
|
||||||
|
if (!ftpChannel)
|
||||||
|
{
|
||||||
|
dump("failed to get ftp channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ftpChannel.uploadStream = srcChannel.open();
|
||||||
|
ftpChannel.asyncOpen(null, null);
|
||||||
|
dump("done\n");
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
dump("an error occurred: " + e + "\n");
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче