Make the stop-sharing-data command work

This commit is contained in:
jonathandicarlo@jonathan-dicarlos-macbook-pro.local 2008-06-23 18:23:08 -07:00
Родитель 6f8cfd6329
Коммит c8ba0cdfff
3 изменённых файлов: 75 добавлений и 25 удалений

Просмотреть файл

@ -434,9 +434,13 @@ Engine.prototype = {
self.done();
},
/* TODO need a "stop sharing" function.
Actually, stopping an outgoing share and stopping an incoming share
are two different things. */
_stopSharing: function Engine__stopSharing(guid, username) {
let self = yield;
/* This should be overridden by the engine subclass for each datatype.
Stop sharing the data node identified by guid with the user identified
by username.*/
self.done();
},
sync: function Engine_sync(onComplete) {
return this._sync.async(this, onComplete);
@ -446,6 +450,10 @@ Engine.prototype = {
return this._share.async(this, onComplete, guid, username);
},
stopSharing: function Engine_share(onComplete, guid, username) {
return this._stopSharing.async(this, onComplete, guid, username);
},
resetServer: function Engimne_resetServer(onComplete) {
this._notify("reset-server", this._resetServer).async(this, onComplete);
},

Просмотреть файл

@ -190,8 +190,8 @@ BookmarksEngine.prototype = {
But since we don't have notification in place yet, I'm going to skip
right ahead to creating the incoming share.
*/
dump( "I was offered the directory " + dir + " from user " + dir );
_createIncomingShare( user, serverPath, folderName );
this._log.info("User " + user + " offered to share folder " + folderName);
this._createIncomingShare( user, serverPath, folderName );
},
_incomingShareWithdrawn: function BmkEngine__incomingShareStop(user,
@ -200,11 +200,9 @@ BookmarksEngine.prototype = {
/* Called when we receive a message telling us that a user who has
already shared a directory with us has chosen to stop sharing
the directory.
TODO Find the incomingShare in our bookmark tree that corresponds
to the shared directory, and delete it; add a notification to
the queue telling us what has happened.
*/
this._log.info("User " + user + " stopped sharing folder " + folderName);
this._stopIncomingShare(user, serverPath, folderName);
},
_sync: function BmkEngine__sync() {
@ -261,6 +259,36 @@ BookmarksEngine.prototype = {
this._log.info("Shared " + folderName +" with " + username);
ret = true;
self.done( ret );
},
_stopSharing: function BmkEngine__stopSharing( selectedFolder, username ) {
let self = yield;
let folderName = selectedFolder.getAttribute( "label" );
let serverPath = this._annoSvc.getItemAnnotation(folderNode,
SERVER_PATH_ANNO);
/* LONGTERM TODO: when we move to being able to share one folder with
* multiple people, this needs to be modified so we can stop sharing with
* one person but keep sharing with others.
*/
// Stop the outgoing share:
this._stopOutgoingShare.async( this, self.cb, selectedFolder);
yield;
// Send message to the share-ee, so they can stop their incoming share:
if ( this._xmppClient ) {
if ( this._xmppClient._connectionStatus == this._xmppClient.CONNECTED ) {
let msgText = "stop " + serverPath + " " + folderName;
this._log.debug( "Sending XMPP message: " + msgText );
this._xmppClient.sendMessage( username, msgText );
} else {
this._log.warn( "No XMPP connection for share notification." );
}
}
this._log.info("Stopped sharing " + folderName + "with " + username);
self.done( true );
},
@ -440,19 +468,7 @@ BookmarksEngine.prototype = {
this._annoSvc.EXPIRE_NEVER);
// TODO is there a way to remove the annotations entirely rather than
// setting it to an empty string??
// Send the message to the share-ee:
if ( this._xmppClient ) {
if ( this._xmppClient._connectionStatus == this._xmppClient.CONNECTED ) {
let folderName = folderNode.getAttribute( "label" );
let msgText = "stop " + serverPath + " " + folderName;
this._log.debug( "Sending XMPP message: " + msgText );
this._xmppClient.sendMessage( username, msgText );
} else {
this._log.warn( "No XMPP connection for share notification." );
}
}
self.done();
},
_createIncomingShare: function BookmarkEngine__createShare(user,
@ -576,6 +592,27 @@ BookmarksEngine.prototype = {
yield;
this._log.trace("Shared folder from " + user + " successfully synced!");
},
_stopIncomingShare: function BmkEngine__stopIncomingShare(user,
serverPath,
folderName)
{
/* Delete the incoming share folder. Since the update of incoming folders
* is triggered when the engine spots a folder with a certain annotation on
* it, just getting rid of this folder is all we need to do.
*/
let bms = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
let a = this._annoSvc.getItemsWithAnnotation(OUTGOING_SHARED_ANNO, {});
for (let i = 0; i < a.length; i++) {
let creator = this._annoSvc.getItemAnnotation(a[i], OUTGOING_SHARED_ANNO);
let path = this._annoSvc.getItemAnnotation(a[i], SERVER_PATH_ANNO);
if ( creator == user && path == serverPath ) {
bms.removeFolder( a[i]);
}
}
}
};
BookmarksEngine.prototype.__proto__ = new Engine();
@ -801,9 +838,6 @@ BookmarksStore.prototype = {
command.data.index);
break;
case "mounted-share":
// TODO this is to create the shared-items folder on another machine
// to duplicate the one that's on the first machine; we don't need that
// anymore. OR is it to create the folder on the sharee's computer?
this._log.debug(" -> creating share mountpoint \"" + command.data.title + "\"");
newId = this._bms.createFolder(parentId,
command.data.title,

Просмотреть файл

@ -691,6 +691,14 @@ WeaveSvc.prototype = {
Engines.get(dataType).share(self.cb, guid, username);
let ret = yield;
self.done(ret);
},
stopSharingData: function WeaveSync_stopSharingData(dataType,
onComplete,
guid,
username) {
}
};