Co-authored-by: scott@signal.org
Co-authored-by: ken@signal.org
This commit is contained in:
Ken Powers 2019-05-16 15:32:11 -07:00 committed by Scott Nonnenberg
parent 8c8856785b
commit 29de50c12a
100 changed files with 7572 additions and 693 deletions

View file

@ -296,6 +296,24 @@
// Shut down the data interface cleanly
await window.Signal.Data.shutdown();
},
installStickerPack: async (id, key) => {
const status = window.Signal.Stickers.getStickerPackStatus(id);
if (status === 'installed') {
return;
}
if (status === 'advertised') {
await window.reduxActions.stickers.installStickerPack(id, key, {
fromSync: true,
});
} else {
await window.Signal.Stickers.downloadStickerPack(id, key, {
finalStatus: 'installed',
});
}
},
};
const currentVersion = window.getVersion();
@ -303,18 +321,23 @@
newVersion = !lastVersion || currentVersion !== lastVersion;
await storage.put('version', currentVersion);
if (newVersion) {
if (
lastVersion &&
window.isBeforeVersion(lastVersion, 'v1.15.0-beta.5')
) {
await window.Signal.Logs.deleteAll();
window.restart();
}
if (newVersion && lastVersion) {
window.log.info(
`New version detected: ${currentVersion}; previous: ${lastVersion}`
);
if (window.isBeforeVersion(lastVersion, 'v1.25.0')) {
// Stickers flags
await Promise.all([
storage.put('showStickersIntroduction', true),
storage.put('showStickerPickerHint', true),
]);
}
if (window.isBeforeVersion(lastVersion, 'v1.15.0-beta.5')) {
await window.Signal.Logs.deleteAll();
window.restart();
}
}
if (isIndexedDBPresent) {
@ -395,6 +418,7 @@
try {
await Promise.all([
ConversationController.load(),
Signal.Stickers.load(),
textsecure.storage.protocol.hydrateCaches(),
]);
} catch (error) {
@ -418,7 +442,11 @@
conversations: {
conversationLookup: Signal.Util.makeLookup(conversations, 'id'),
},
items: storage.getItemsState(),
stickers: Signal.Stickers.getInitialState(),
user: {
attachmentsPath: window.baseAttachmentsPath,
stickersPath: window.baseStickersPath,
regionCode: window.storage.get('regionCode'),
ourNumber: textsecure.storage.user.getNumber(),
i18n: window.i18n,
@ -437,10 +465,18 @@
Signal.State.Ducks.conversations.actions,
store.dispatch
);
actions.items = Signal.State.bindActionCreators(
Signal.State.Ducks.items.actions,
store.dispatch
);
actions.user = Signal.State.bindActionCreators(
Signal.State.Ducks.user.actions,
store.dispatch
);
actions.stickers = Signal.State.bindActionCreators(
Signal.State.Ducks.stickers.actions,
store.dispatch
);
const {
conversationAdded,
@ -759,6 +795,7 @@
messageReceiver.addEventListener('progress', onProgress);
messageReceiver.addEventListener('configuration', onConfiguration);
messageReceiver.addEventListener('typing', onTyping);
messageReceiver.addEventListener('sticker-pack', onStickerPack);
window.Signal.AttachmentDownloads.start({
getMessageReceiver: () => messageReceiver,
@ -770,6 +807,10 @@
PASSWORD
);
if (connectCount === 1) {
window.Signal.Stickers.downloadQueuedPacks();
}
// On startup after upgrading to a new version, request a contact sync
// (but only if we're not the primary device)
if (
@ -831,11 +872,34 @@
Whisper.events.trigger('contactsync');
});
const ourNumber = textsecure.storage.user.getNumber();
const { wrap, sendOptions } = ConversationController.prepareForSend(
ourNumber,
{ syncMessage: true }
);
const installedStickerPacks = window.Signal.Stickers.getInstalledStickerPacks();
if (installedStickerPacks.length) {
const operations = installedStickerPacks.map(pack => ({
packId: pack.id,
packKey: pack.key,
installed: true,
}));
wrap(
window.textsecure.messaging.sendStickerPackSync(
operations,
sendOptions
)
).catch(error => {
window.log.error(
'Failed to send installed sticker packs via sync message',
error && error.stack ? error.stack : error
);
});
}
if (Whisper.Import.isComplete()) {
const { wrap, sendOptions } = ConversationController.prepareForSend(
textsecure.storage.user.getNumber(),
{ syncMessage: true }
);
wrap(
textsecure.messaging.sendRequestConfigurationSyncMessage(sendOptions)
).catch(error => {
@ -942,6 +1006,42 @@
}
}
async function onStickerPack(ev) {
const packs = ev.stickerPacks || [];
packs.forEach(pack => {
const { id, key, isInstall, isRemove } = pack || {};
if (!id || !key || (!isInstall && !isRemove)) {
window.log.warn(
'Received malformed sticker pack operation sync message'
);
return;
}
const status = window.Signal.Stickers.getStickerPackStatus(id);
if (status === 'installed' && isRemove) {
window.reduxActions.stickers.uninstallStickerPack(id, key, {
fromSync: true,
});
} else if (isInstall) {
if (status === 'advertised') {
window.reduxActions.stickers.installStickerPack(id, key, {
fromSync: true,
});
} else {
window.Signal.Stickers.downloadStickerPack(id, key, {
finalStatus: 'installed',
fromSync: true,
});
}
}
});
ev.confirm();
}
async function onContactReceived(ev) {
const details = ev.contactDetails;