diff --git a/www/common/notifications.js b/www/common/notifications.js
index 6d921929d..b272e97cc 100644
--- a/www/common/notifications.js
+++ b/www/common/notifications.js
@@ -407,6 +407,28 @@ define([
}
};
+ handlers['SF_DELETED'] = function(common, data) {
+ var content = data.content;
+ var msg = content.msg;
+
+ // Display the notification
+ var title = Util.fixHTML(msg.content.title);
+ var teamName = Util.fixHTML(msg.content.teamName);
+
+ Messages.dph_sf_destroyed = "Your shared folder {0} has been destroyed by its owner."; // XXX
+ Messages.dph_sf_destroyed_team= "The shared folder {0} from your team {1} has been destroyed by its owner."; // XXX
+
+ content.getFormatText = function() {
+ if (teamName) {
+ return Messages._getKey('dph_sf_destroyed_team', [title, teamName]);
+ }
+ return Messages._getKey('dph_sf_destroyed', [title]);
+ };
+ if (!content.archived) {
+ content.dismissHandler = defaultDismiss(common, data);
+ }
+ };
+
handlers['MOVE_TODO'] = function(common, data) {
var content = data.content;
var msg = content.msg;
diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js
index 7c258bf9b..89821b842 100644
--- a/www/common/outer/async-store.js
+++ b/www/common/outer/async-store.js
@@ -639,6 +639,7 @@ define([
}
};
cb(JSON.parse(JSON.stringify(metadata)));
+ return metadata;
};
Store.onMaintenanceUpdate = function (uid) {
@@ -2726,6 +2727,7 @@ define([
loadSharedFolder: loadSharedFolder,
settings: proxy.settings,
removeOwnedChannel: function (channel, cb) { Store.removeOwnedChannel('', channel, cb); },
+ store: store,
Store: Store
}, {
outer: true,
diff --git a/www/common/outer/mailbox-handlers.js b/www/common/outer/mailbox-handlers.js
index 74ea68d7f..7ae77ce34 100644
--- a/www/common/outer/mailbox-handlers.js
+++ b/www/common/outer/mailbox-handlers.js
@@ -794,6 +794,29 @@ define([
cb(true);
};
+ var sfDeleted = {};
+ handlers['SF_DELETED'] = function (ctx, box, data, cb) {
+ var msg = data.msg;
+ var content = msg.content;
+ var teamId = content.team;
+ var sfId = content.sfId;
+
+ if (sfDeleted[sfId]) { return void cb(true); }
+ sfDeleted[sfId] = 1;
+
+ // If it's a team SF, add the team name here
+
+ if (!teamId) { return void cb(false); }
+
+ var team = ctx.store.proxy.teams[teamId];
+ content.teamName = team.metadata && team.metadata.name;
+ cb(false);
+ };
+ removeHandlers['SF_DELETED'] = function (ctx, box, data) {
+ var id = data.content.sfId;
+ delete sfDeleted[id];
+ };
+
return {
add: function (ctx, box, data, cb) {
/**
diff --git a/www/common/outer/team.js b/www/common/outer/team.js
index 641ec59ff..935d6eb6a 100644
--- a/www/common/outer/team.js
+++ b/www/common/outer/team.js
@@ -319,8 +319,10 @@ define([
}
ctx.Store.removeOwnedChannel('', data, cb);
},
- Store: ctx.Store
+ Store: ctx.Store,
+ store: ctx.store
}, {
+ teamId: team.id,
outer: true,
edPublic: keys.drive.edPublic,
loggedIn: true,
diff --git a/www/common/proxy-manager.js b/www/common/proxy-manager.js
index 71097864d..0aa58c5f8 100644
--- a/www/common/proxy-manager.js
+++ b/www/common/proxy-manager.js
@@ -70,6 +70,30 @@ define([
delete Env.folders[id];
};
+ var sendNotification = (Env, sfId, title) => {
+ var mailbox = Env.store.mailbox;
+ if (!mailbox) { return; }
+ var team = Env.cfg.teamId;
+ var box;
+ if (team) {
+ let teams = Env.store.modules['team'].getTeamsData();
+ box = teams[team];
+ } else {
+ let md = Env.Store.getMetadata(null, null, () => {});
+ box = md.user;
+ }
+ mailbox.sendTo('SF_DELETED', {
+ sfId: sfId,
+ team: team,
+ title: title
+ }, {
+ curvePublic: box.curvePublic,
+ channel: box.notifications
+ }, (err) => {
+ console.error(err);
+ });
+ };
+
// Password may have changed
var deprecateProxy = function (Env, id, channel, reason) {
if (Env.folders[id] && Env.folders[id].deleting) {
@@ -88,8 +112,12 @@ define([
// If it's explicitely a deletion, no need to deprecate, just delete
if (reason && reason !== "PASSWORD_CHANGE") {
- var temp = Util.find(Env, ['user', 'proxy', UserObject.SHARED_FOLDERS]);
+ let temp = Util.find(Env, ['user', 'proxy', UserObject.SHARED_FOLDERS]);
+ let title = temp[id] && temp[id].lastTitle;
+ if (title) { sendNotification(Env, id, title); }
+
delete temp[id];
+
if (Env.Store && Env.Store.refreshDriveUI) { Env.Store.refreshDriveUI(); }
return;
}
@@ -1317,6 +1345,7 @@ define([
unpinPads: data.unpin,
onSync: data.onSync,
Store: data.Store,
+ store: data.store,
removeOwnedChannel: data.removeOwnedChannel,
loadSharedFolder: data.loadSharedFolder,
cfg: uoConfig,