You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/session/sending/PendingMessageCache.ts

142 lines
4.3 KiB
TypeScript

5 years ago
import _ from 'lodash';
import { createOrUpdateItem, getItemById } from '../../../ts/data/data';
import { PartialRawMessage, RawMessage } from '../types/RawMessage';
import { ContentMessage } from '../messages/outgoing';
5 years ago
import { PubKey } from '../types';
import { MessageUtils } from '../utils';
5 years ago
// This is an abstraction for storing pending messages.
// Ideally we want to store pending messages in the database so that
// on next launch we can re-send the pending messages, but we don't want
// to constantly fetch pending messages from the database.
// Thus we have an intermediary cache which will store pending messagesin
// memory and sync its state with the database on modification (add or remove).
export class PendingMessageCache {
public callbacks: Map<string, (message: RawMessage) => Promise<void>> = new Map();
5 years ago
protected loadPromise: Promise<void> | undefined;
protected cache: Array<RawMessage> = [];
5 years ago
public async getAllPending(): Promise<Array<RawMessage>> {
await this.loadFromDBIfNeeded();
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
// Get all pending from cache
return [...this.cache];
}
5 years ago
public async getForDevice(device: PubKey): Promise<Array<RawMessage>> {
const pending = await this.getAllPending();
return pending.filter(m => m.device === device.key);
5 years ago
}
5 years ago
public async getDevices(): Promise<Array<PubKey>> {
await this.loadFromDBIfNeeded();
5 years ago
// Gets all unique devices with pending messages
5 years ago
const pubkeyStrings = _.uniq(this.cache.map(m => m.device));
5 years ago
return pubkeyStrings.map(PubKey.from).filter((k): k is PubKey => !!k);
5 years ago
}
5 years ago
public async add(
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
destinationPubKey: PubKey,
message: ContentMessage,
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
sentCb?: (message: any) => Promise<void>,
isGroup = false
5 years ago
): Promise<RawMessage> {
5 years ago
await this.loadFromDBIfNeeded();
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
const rawMessage = await MessageUtils.toRawMessage(destinationPubKey, message, isGroup);
5 years ago
// Does it exist in cache already?
5 years ago
if (this.find(rawMessage)) {
5 years ago
return rawMessage;
}
this.cache.push(rawMessage);
if (sentCb) {
this.callbacks.set(rawMessage.identifier, sentCb);
}
5 years ago
await this.saveToDB();
5 years ago
return rawMessage;
}
public async remove(message: RawMessage): Promise<Array<RawMessage> | undefined> {
5 years ago
await this.loadFromDBIfNeeded();
5 years ago
// Should only be called after message is processed
// Return if message doesn't exist in cache
if (!this.find(message)) {
return;
}
// Remove item from cache and sync with database
const updatedCache = this.cache.filter(
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
cached => !(cached.device === message.device && cached.identifier === message.identifier)
5 years ago
);
this.cache = updatedCache;
this.callbacks.delete(message.identifier);
5 years ago
await this.saveToDB();
5 years ago
return updatedCache;
}
5 years ago
public find(message: RawMessage): RawMessage | undefined {
// Find a message in the cache
Session 1.7.2 (#1932) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable sending on enter while composing (#1909) Fixes #1899 #1497 * Speedup body update composition box (#1911) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * move drafts outside of redux to speedup body message writing * Ask confirm before delete account (#1910) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * use timestamp offset in for messages storage requests (#1892) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fix today for translated date break (#1915) * add using timestamp offset from network for sending part1 * remove MessageController as we now rely on the database * fix tests for message sending overriding timestamp * Fixs date break translations of today etc Relates #1913 * Fix video play lightbox autostart (#1920) * disable sending on enter while composing Fixes #1899 #1497 * ask confirmation before deleting account * fix app start delete db when passowrd error * fix double dialog issue with delete account * fixup login screen * Fix video autoplay start when not initialized Relates #1904 * do not overwrite sent_at with network time for synced messages (#1921) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Out of sync message sync (#1923) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * Fix select colors for sent messages and link text not selectable (#1924) * do not update sent_at for synced messages * reply to message context menu only visible if msg sent * Allow scrolling in mentioning people in composition box Relates #1849 * fix selection colors for sent messages and make link selectable Relates #1922 * Cleanup redux store (#1925) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * Unsend messages (only message hashes saving for now is enabled) (#1891) * WIP unsending message. * retrieving message with hash from db on receiving unsend request. * outgoing messages hashes updated on message sent success * unsend messaging * unsend message - deleting messages and marking as isDeleted. * add msg hash to unprocessed records. * Message unsending working for closed groups provided the message has been updated with a hash from server. * adding 2-stage confirmation modal for message deletion * adding rendering of removed incoming messages, disabling rendering of unsent outgoing messages in coversation screen. * Adding logging * debugging. * outgoing only saved for sync message instead of regular message. * deleting locally * adding post unsend deletioncode. * starting adding feature flag. * Added feature flag. * addding mandatory messageHash pollling pipeline methods swarm polling. * Conversation list item message preview showing deletion placeholder text if deleted. * add condition to drop unsend requests not send by message author * refactoring deleteMessage. Saving response hash for closed group message sending * running yarn ready * removing logging. * Adding PR fixes * Minor changes and running yarn ready * fix typo * Moved feature flag to lokiFeatureFlags. Fixing linting errors Co-authored-by: Audric Ackermann <audric@loki.network> * fix reply for incoming messages (#1930) * bump to 1.7.2 (#1926) * do not consider expire timer update unread messages #1881 * cleanup conversation props in redux to only have what cannot be derived * fix app not starting without the await on convo creation * cleanup props of message model * bump to 1.7.2 * Session 1.7.1 (#1908) (#1931) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * Fix path building (#1903) * Keep line breaks when message has some new lines Relates #1758 and #1898 and #1901 * fix link preview cropped when received * make sure we fetch from seed if we end up with not enough snodes * try to download recent previews if we just trusted a user * throw if we need to rebuild path while fetching snode list from snode * fixup no refecthing of snode list while we are fetching them already * added test for fetch from db or seed * fetch snode list from snode every hour also make sure the path building does not try to get more snodes. It just throws * do not drop a path if an opengroup room is down and we get errors back * do not throw an error if the snode in error in not in any path * fix tests * bump to v1.7.11 * disable unsend request on the UI for now (#1934) * disable unsend request on the UI too * do not stop propagation of events for message ctx menu Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
4 years ago
return this.cache.find(m => m.device === message.device && m.identifier === message.identifier);
}
5 years ago
public async clear() {
// Clears the cache and syncs to DB
this.cache = [];
this.callbacks = new Map();
5 years ago
await this.saveToDB();
}
5 years ago
5 years ago
protected async loadFromDBIfNeeded() {
if (!this.loadPromise) {
this.loadPromise = this.loadFromDB();
}
await this.loadPromise;
}
protected async loadFromDB() {
5 years ago
const messages = await this.getFromStorage();
this.cache = messages;
}
protected async getFromStorage(): Promise<Array<RawMessage>> {
5 years ago
const data = await getItemById('pendingMessages');
if (!data || !data.value) {
return [];
}
5 years ago
const barePending = JSON.parse(String(data.value)) as Array<PartialRawMessage>;
// Rebuild plainTextBuffer
return barePending.map((message: PartialRawMessage) => {
return {
...message,
plainTextBuffer: new Uint8Array(message.plainTextBuffer),
} as RawMessage;
});
5 years ago
}
protected async saveToDB() {
// For each plainTextBuffer in cache, save in as a simple Array<number> to avoid
// Node issues with JSON stringifying Buffer without strict typing
const encodedCache = [...this.cache].map(item => {
const plainTextBuffer = Array.from(item.plainTextBuffer);
return { ...item, plainTextBuffer };
});
const encodedPendingMessages = JSON.stringify(encodedCache) || '[]';
5 years ago
await createOrUpdateItem({
5 years ago
id: 'pendingMessages',
value: encodedPendingMessages,
});
5 years ago
}
5 years ago
}