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,