mirror of
https://github.com/oxen-io/session-desktop.git
synced 2023-12-14 02:12:57 +01:00
add back missing avatarAnnotation for now, move setLastRetrievedMessage to after multidevice processing, make getListOfMembers async, subscribe to the channel when it registers, partChannel(), getSubscribers(), fix avatar message object placement
This commit is contained in:
parent
95a94175c0
commit
6bd1227189
1 changed files with 109 additions and 13 deletions
|
@ -91,7 +91,21 @@ class LokiAppDotNetAPI extends EventEmitter {
|
|||
this.servers.splice(i, 1);
|
||||
}
|
||||
|
||||
getListOfMembers() {
|
||||
// shouldn't this be scoped per conversation?
|
||||
async getListOfMembers() {
|
||||
// enable in the next release
|
||||
/*
|
||||
let members = [];
|
||||
await Promise.all(this.servers.map(async server => {
|
||||
await Promise.all(server.channels.map(async channel => {
|
||||
const newMembers = await channel.getSubscribers();
|
||||
members = [...members, ...newMembers];
|
||||
}));
|
||||
}));
|
||||
const results = members.map(member => {
|
||||
return { authorPhoneNumber: member.username };
|
||||
});
|
||||
*/
|
||||
return this.allMembers;
|
||||
}
|
||||
|
||||
|
@ -118,18 +132,29 @@ class LokiAppDotNetServerAPI {
|
|||
}
|
||||
|
||||
// channel getter/factory
|
||||
findOrCreateChannel(channelId, conversationId) {
|
||||
async findOrCreateChannel(channelId, conversationId) {
|
||||
let thisChannel = this.channels.find(
|
||||
channel => channel.channelId === channelId
|
||||
);
|
||||
if (!thisChannel) {
|
||||
log.info(`LokiAppDotNetAPI creating channel ${conversationId}`);
|
||||
log.info(`LokiAppDotNetAPI registering channel ${conversationId}`);
|
||||
// make sure we're subscribed
|
||||
await this.serverRequest(`channels/${channelId}/subscribe`, {
|
||||
method: 'POST',
|
||||
});
|
||||
thisChannel = new LokiPublicChannelAPI(this, channelId, conversationId);
|
||||
this.channels.push(thisChannel);
|
||||
}
|
||||
return thisChannel;
|
||||
}
|
||||
|
||||
async partChannel(channelId) {
|
||||
await this.serverRequest(`channels/${channelId}/subscribe`, {
|
||||
method: 'DELETE',
|
||||
});
|
||||
this.unregisterChannel(channelId);
|
||||
}
|
||||
|
||||
// deallocate resources channel uses
|
||||
unregisterChannel(channelId) {
|
||||
let thisChannel;
|
||||
|
@ -393,6 +418,71 @@ class LokiAppDotNetServerAPI {
|
|||
return res.response.data.annotations || [];
|
||||
}
|
||||
|
||||
async getSubscribers(channelId, wantObjects) {
|
||||
if (!channelId) {
|
||||
log.warn('No channelId provided to getSubscribers!');
|
||||
return [];
|
||||
}
|
||||
|
||||
let res = {};
|
||||
if (!Array.isArray(channelId) && wantObjects) {
|
||||
res = await this.serverRequest(`channels/${channelId}/subscribers`, {
|
||||
method: 'GET',
|
||||
params: {
|
||||
include_user_annotations: 1,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// not implemented on backend yet
|
||||
res.err = 'array subscribers endpoint not yet implemented';
|
||||
/*
|
||||
var list = channelId;
|
||||
if (!Array.isArray(list)) {
|
||||
list = [channelId];
|
||||
}
|
||||
const idres = await this.serverRequest(`channels/subscribers/ids`, {
|
||||
method: 'GET',
|
||||
params: {
|
||||
ids: list.join(','),
|
||||
include_user_annotations: 1,
|
||||
},
|
||||
});
|
||||
if (wantObjects) {
|
||||
if (idres.err || !idres.response || !idres.response.data) {
|
||||
if (idres.err) {
|
||||
log.error(`Error ${idres.err}`);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
const userList = [];
|
||||
await Promise.all(idres.response.data.map(async channelId => {
|
||||
const channelUserObjs = await this.getUsers(idres.response.data[channelId]);
|
||||
userList.push(...channelUserObjs);
|
||||
}));
|
||||
res = {
|
||||
response: {
|
||||
meta: {
|
||||
code: 200,
|
||||
},
|
||||
data: userList
|
||||
}
|
||||
}
|
||||
} else {
|
||||
res = idres;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if (res.err || !res.response || !res.response.data) {
|
||||
if (res.err) {
|
||||
log.error(`Error ${res.err}`);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
return res.response.data || [];
|
||||
}
|
||||
|
||||
async getUsers(pubKeys) {
|
||||
if (!pubKeys) {
|
||||
log.warn('No pubKeys provided to getUsers!');
|
||||
|
@ -565,6 +655,10 @@ class LokiPublicChannelAPI {
|
|||
return this.serverAPI.serverRequest(endpoint, options);
|
||||
}
|
||||
|
||||
getSubscribers() {
|
||||
return this.serverAPI.getSubscribers(this.channelId, true);
|
||||
}
|
||||
|
||||
// get moderation actions
|
||||
async pollForModerators() {
|
||||
try {
|
||||
|
@ -886,6 +980,7 @@ class LokiPublicChannelAPI {
|
|||
params.since_id = this.lastGot;
|
||||
// Just grab the most recent 100 messages if you don't have a valid lastGot
|
||||
params.count = this.lastGot === 0 ? -100 : 20;
|
||||
// log.info(`Getting ${params.count} from ${this.lastGot} on ${this.baseChannelUrl}`);
|
||||
const res = await this.serverRequest(`${this.baseChannelUrl}/messages`, {
|
||||
params,
|
||||
});
|
||||
|
@ -921,12 +1016,7 @@ class LokiPublicChannelAPI {
|
|||
return false;
|
||||
}
|
||||
|
||||
const {
|
||||
timestamp,
|
||||
quote,
|
||||
attachments,
|
||||
preview,
|
||||
} = messengerData;
|
||||
const { timestamp, quote, attachments, preview } = messengerData;
|
||||
if (!timestamp) {
|
||||
return false; // Invalid message
|
||||
}
|
||||
|
@ -1016,7 +1106,7 @@ class LokiPublicChannelAPI {
|
|||
contact: [],
|
||||
preview,
|
||||
profile: {
|
||||
displayName: from
|
||||
displayName: from,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -1027,10 +1117,10 @@ class LokiPublicChannelAPI {
|
|||
return messageData;
|
||||
})
|
||||
);
|
||||
this.conversation.setLastRetrievedMessage(this.lastGot);
|
||||
|
||||
// do we really need this?
|
||||
if (!pendingMessages.length) {
|
||||
this.conversation.setLastRetrievedMessage(this.lastGot);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1076,7 +1166,8 @@ class LokiPublicChannelAPI {
|
|||
// pop primary device avatars in
|
||||
if (avatarMap[slavePrimaryMap[messageData.source]]) {
|
||||
// modify messageData for user's avatar
|
||||
messageData.profile.avatar=avatarMap[slavePrimaryMap[messageData.source]];
|
||||
messageData.message.profile.avatar =
|
||||
avatarMap[slavePrimaryMap[messageData.source]];
|
||||
}
|
||||
|
||||
// delay sending the message
|
||||
|
@ -1091,7 +1182,7 @@ class LokiPublicChannelAPI {
|
|||
// pop current device avatars in
|
||||
if (avatarMap[messageData.source]) {
|
||||
// modify messageData for user's avatar
|
||||
messageData.profile.avatar=avatarMap[messageData.source];
|
||||
messageData.message.profile.avatar = avatarMap[messageData.source];
|
||||
}
|
||||
|
||||
// send event now
|
||||
|
@ -1148,6 +1239,9 @@ class LokiPublicChannelAPI {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
// finally update our position
|
||||
this.conversation.setLastRetrievedMessage(this.lastGot);
|
||||
}
|
||||
|
||||
static getPreviewFromAnnotation(annotation) {
|
||||
|
@ -1251,6 +1345,8 @@ class LokiPublicChannelAPI {
|
|||
},
|
||||
...attachmentAnnotations,
|
||||
...previewAnnotations,
|
||||
// can remove after this release
|
||||
...avatarAnnotation,
|
||||
],
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue