Sort channels by last used

This commit is contained in:
Midgard 2022-06-17 23:26:43 +02:00
parent c3a24ee300
commit 245cfae68a
Signed by: midgard
GPG key ID: 511C112F1331BBB4
4 changed files with 32 additions and 3 deletions

View file

@ -216,6 +216,8 @@ pubsub.subscribe("MESSAGES_NEW", post => {
} else { } else {
client.channelStore.increaseUnread(post); client.channelStore.increaseUnread(post);
} }
client.channelStore.updateLastPostTime(post.channel_id, post["create_at"]);
}); });
pubsub.subscribe("CHANNEL_READ", ({endpoint, channel_id}) => { pubsub.subscribe("CHANNEL_READ", ({endpoint, channel_id}) => {

View file

@ -6,6 +6,7 @@ const topics = [
"CHANNELS_RELOADED", // "CHANNELS_RELOADED", //
"CHANNEL_UPDATED", // {endpoint, channel} "CHANNEL_UPDATED", // {endpoint, channel}
"CHANNEL_UNREAD_UPDATED", // {endpoint, channel_id, unread, mentions} "CHANNEL_UNREAD_UPDATED", // {endpoint, channel_id, unread, mentions}
"CHANNEL_LAST_POST_TIME_UPDATED", // {endpoint, channel_id, time}
"USERS_NEW", "USERS_NEW",
"USERS_CHANGED", "USERS_CHANGED",
"CHANNEL_MEMBERS_NEW", "CHANNEL_MEMBERS_NEW",

View file

@ -98,6 +98,18 @@ class ChannelStore {
pubsub.publish("CHANNEL_UNREAD_UPDATED", {endpoint: this.client.endpoint, channel_id, unread, mentions}); pubsub.publish("CHANNEL_UNREAD_UPDATED", {endpoint: this.client.endpoint, channel_id, unread, mentions});
} }
async updateLastPostTime(channel_id, time) {
if (this._promise === null) {
// Data does not exist yet and is not being requested
return;
}
await this._promise;
this._channels[channel_id]["last_post_at"] = time;
pubsub.publish("CHANNEL_LAST_POST_TIME_UPDATED", {endpoint: this.client.endpoint, channel_id, time});
}
} }

View file

@ -25,8 +25,11 @@ function populateChannelList() {
let nodes = []; let nodes = [];
for (let channel_id in channels) { let sortedChannels = Object.values(channels).sort((a, b) =>
const channel = channels[channel_id]; b["last_post_at"] - a["last_post_at"]
);
for (const channel of sortedChannels) {
const team = teams[channel["team_id"]]; const team = teams[channel["team_id"]];
const chanUnread = unread[channel.id].unread; const chanUnread = unread[channel.id].unread;
@ -53,7 +56,14 @@ function populateChannelList() {
li.dataset["id"] = channel.id; li.dataset["id"] = channel.id;
li.dataset["server"] = client.endpoint; li.dataset["server"] = client.endpoint;
if (chanUnread > 0) li.className = "unread"; const curChan = currentChannel();
if (curChan.endpoint === client.endpoint && curChan.channel_id === channel.id) {
li.className = "active";
}
if (chanUnread > 0) {
li.className += " unread";
}
nodes.push(li); nodes.push(li);
} }
byId("channel_list").append(...nodes); byId("channel_list").append(...nodes);
@ -92,3 +102,7 @@ pubsub.subscribe("CHANNEL_UNREAD_UPDATED", ({endpoint, channel_id, unread, menti
pubsub.subscribe("CHANNELS_RELOADED", () => { pubsub.subscribe("CHANNELS_RELOADED", () => {
populateChannelList(); populateChannelList();
}); });
pubsub.subscribe("CHANNEL_LAST_POST_TIME_UPDATED", () => {
populateChannelList();
});