Teams app improvements
This commit is contained in:
@@ -321,7 +321,16 @@ define([
|
||||
return void cb(true);
|
||||
}
|
||||
|
||||
if (invitedTo[content.team.channel]) { return void cb(true); }
|
||||
var invited = invitedTo[content.team.channel];
|
||||
if (invited) {
|
||||
console.log('removing old invitation');
|
||||
cb(false, invited);
|
||||
invitedTo[content.team.channel] = {
|
||||
type: box.type,
|
||||
hash: data.hash
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
var myTeams = Util.find(ctx, ['store', 'proxy', 'teams']) || {};
|
||||
var alreadyMember = Object.keys(myTeams).some(function (k) {
|
||||
@@ -330,7 +339,10 @@ define([
|
||||
});
|
||||
if (alreadyMember) { return void cb(true); }
|
||||
|
||||
invitedTo[content.team.channel] = true;
|
||||
invitedTo[content.team.channel] = {
|
||||
type: box.type,
|
||||
hash: data.hash
|
||||
};
|
||||
|
||||
cb(false);
|
||||
};
|
||||
@@ -349,6 +361,10 @@ define([
|
||||
return void cb(true);
|
||||
}
|
||||
|
||||
if (invitedTo[content.teamChannel] && content.pending) {
|
||||
return void cb(true, invitedTo[content.teamChannel]);
|
||||
}
|
||||
|
||||
cb(false);
|
||||
};
|
||||
|
||||
|
||||
@@ -258,6 +258,11 @@ proxy.mailboxes = {
|
||||
hash: hash
|
||||
};
|
||||
Handlers.add(ctx, box, message, function (dismissed, toDismiss) {
|
||||
if (toDismiss) { // List of other messages to remove
|
||||
dismiss(ctx, toDismiss, '', function () {
|
||||
console.log('Notification handled automatically');
|
||||
});
|
||||
}
|
||||
if (dismissed) { // This message should be removed
|
||||
dismiss(ctx, {
|
||||
type: type,
|
||||
@@ -267,11 +272,6 @@ proxy.mailboxes = {
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (toDismiss) { // List of other messages to remove
|
||||
dismiss(ctx, toDismiss, '', function () {
|
||||
console.log('Notification handled automatically');
|
||||
});
|
||||
}
|
||||
box.content[hash] = msg;
|
||||
showMessage(ctx, type, message, null, function (obj) {
|
||||
if (!box.ready) { return; }
|
||||
|
||||
@@ -477,6 +477,7 @@ define([
|
||||
sending: false,
|
||||
messages: [],
|
||||
clients: data.clients || [],
|
||||
onUserlistUpdate: data.onUserlistUpdate || function () {},
|
||||
mapId: {},
|
||||
};
|
||||
|
||||
@@ -584,10 +585,32 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
var getOnlineList = function (ctx, chanId) {
|
||||
var channel = ctx.channels[chanId];
|
||||
if (!channel) { return; }
|
||||
var online = []; // Store online members to avoid duplicates
|
||||
|
||||
// Add ourselves
|
||||
var myData = createData(ctx.store.proxy, false);
|
||||
online.push(myData.curvePublic);
|
||||
|
||||
channel.wc.members.forEach(function (nId) {
|
||||
if (nId === ctx.store.network.historyKeeper) { return; }
|
||||
var data = channel.mapId[nId] || {};
|
||||
if (!data.curvePublic) { return; }
|
||||
if (online.indexOf(data.curvePublic) !== -1) { return; }
|
||||
online.push(data.curvePublic);
|
||||
});
|
||||
return online;
|
||||
};
|
||||
|
||||
// Display green status if one member is not me
|
||||
var getStatus = function (ctx, chanId, cb) {
|
||||
var channel = ctx.channels[chanId];
|
||||
if (!channel) { return void cb('NO_SUCH_CHANNEL'); }
|
||||
if (channel.onUserlistUpdate) {
|
||||
channel.onUserlistUpdate();
|
||||
}
|
||||
var proxy = ctx.store.proxy;
|
||||
var online = channel.wc.members.some(function (nId) {
|
||||
if (nId === ctx.store.network.historyKeeper) { return; }
|
||||
@@ -781,7 +804,7 @@ define([
|
||||
openChannel(ctx, chanData);
|
||||
};
|
||||
|
||||
var openTeamChat = function (ctx, clientId, data, _cb) {
|
||||
var openTeamChat = function (ctx, clientId, data, onUpdate, _cb) {
|
||||
var chatData = data;
|
||||
var chanId = chatData.channel;
|
||||
var secret = chatData.secret;
|
||||
@@ -820,6 +843,7 @@ define([
|
||||
return encryptor.decrypt(msg, vKey);
|
||||
},
|
||||
clients: [clientId],
|
||||
onUserlistUpdate: onUpdate,
|
||||
onReady: cb
|
||||
};
|
||||
openChannel(ctx, chanData);
|
||||
@@ -927,6 +951,10 @@ define([
|
||||
onFriendRemoved(ctx, curvePublic, chanId);
|
||||
};
|
||||
|
||||
messenger.getOnlineList = function (chanId) {
|
||||
return getOnlineList(ctx, chanId);
|
||||
};
|
||||
|
||||
messenger.storeValidateKey = function (chan, key) {
|
||||
ctx.validateKeys[chan] = key;
|
||||
};
|
||||
@@ -945,8 +973,8 @@ define([
|
||||
});
|
||||
};
|
||||
|
||||
messenger.openTeamChat = function (data, cId, cb) {
|
||||
openTeamChat(ctx, cId, data, cb);
|
||||
messenger.openTeamChat = function (data, onUpdate, cId, cb) {
|
||||
openTeamChat(ctx, cId, data, onUpdate, cb);
|
||||
};
|
||||
|
||||
messenger.removeClient = function (clientId) {
|
||||
@@ -964,9 +992,6 @@ define([
|
||||
if (cmd === 'GET_USERLIST') {
|
||||
return void getUserList(ctx, data, cb);
|
||||
}
|
||||
if (cmd === 'OPEN_TEAM_CHAT') {
|
||||
return void openTeamChat(ctx, clientId, data, cb);
|
||||
}
|
||||
if (cmd === 'OPEN_PAD_CHAT') {
|
||||
return void openPadChat(ctx, clientId, data, cb);
|
||||
}
|
||||
|
||||
@@ -544,7 +544,18 @@ define([
|
||||
if (!team) { return void cb ({error: 'ENOENT'}); }
|
||||
if (!team.roster) { return void cb({error: 'NO_ROSTER'}); }
|
||||
var state = team.roster.getState() || {};
|
||||
cb(state.members || {});
|
||||
var members = state.members || {};
|
||||
|
||||
// Add online status (using messenger data)
|
||||
var chatData = team.getChatData();
|
||||
var online = ctx.store.messenger.getOnlineList(chatData.channel) || [];
|
||||
online.forEach(function (curve) {
|
||||
if (members[curve]) {
|
||||
members[curve].online = true;
|
||||
}
|
||||
});
|
||||
|
||||
cb(members);
|
||||
};
|
||||
|
||||
var getTeamMetadata = function (ctx, data, cId, cb) {
|
||||
@@ -635,13 +646,12 @@ define([
|
||||
|
||||
var state = team.roster.getState();
|
||||
var userData = state.members[data.curvePublic];
|
||||
console.error(userData);
|
||||
team.roster.remove([data.curvePublic], function (err) {
|
||||
if (err) { return void cb({error: err}); }
|
||||
// The user has been removed, send them a notification
|
||||
if (!userData || !userData.notifications) { return cb(); }
|
||||
console.log('send notif');
|
||||
ctx.store.mailbox.sendTo('KICKED_FROM_TEAM', {
|
||||
pending: data.pending,
|
||||
user: Messaging.createData(ctx.store.proxy, false),
|
||||
teamChannel: getInviteData(ctx, teamId).channel,
|
||||
teamName: getInviteData(ctx, teamId).metadata.name
|
||||
@@ -711,7 +721,10 @@ define([
|
||||
var openTeamChat = function (ctx, data, cId, cb) {
|
||||
var team = ctx.teams[data.teamId];
|
||||
if (!team) { return void cb({error: 'ENOENT'}); }
|
||||
ctx.store.messenger.openTeamChat(team.getChatData(), cId, cb);
|
||||
var onUpdate = function () {
|
||||
ctx.emit('ROSTER_CHANGE', data.teamId, team.clients);
|
||||
};
|
||||
ctx.store.messenger.openTeamChat(team.getChatData(), onUpdate, cId, cb);
|
||||
};
|
||||
|
||||
Team.init = function (cfg, waitFor, emit) {
|
||||
@@ -776,6 +789,17 @@ define([
|
||||
});
|
||||
|
||||
};
|
||||
team.updateMyData = function (data) {
|
||||
Object.keys(ctx.teams).forEach(function (id) {
|
||||
var team = ctx.teams[id];
|
||||
if (!team.roster) { return; }
|
||||
var obj = {};
|
||||
obj[data.curvePublic] = data;
|
||||
team.roster.describe(obj, function (err) {
|
||||
if (err) { console.error(err); }
|
||||
});
|
||||
});
|
||||
};
|
||||
team.removeClient = function (clientId) {
|
||||
removeClient(ctx, clientId);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user