Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add correct url for group v1 banner + more group fixes #42

Merged
merged 3 commits into from
Jan 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ts/components/conversation/SessionConversation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,7 @@ function OutdatedLegacyGroupBanner(props: {
<NoticeBanner
text={window.i18n('groupLegacyBanner', { date: '[Date]' })} // Remove after QA
onBannerClick={() => {
showLinkVisitWarningDialog('https://getsession.org/blog/session-groups-v2', dispatch);
showLinkVisitWarningDialog('https://getsession.org/groups', dispatch);
}}
icon="externalLink"
dataTestId="legacy-group-banner"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export class GroupUpdateDeleteMemberContentMessage extends GroupUpdateMessage {
public dataProto(): SignalService.DataMessage {
// If we have the secretKey, we can delete it for anyone `"DELETE_CONTENT" || timestamp || sessionId[0] || ... || messageHashes[0] || ...`

let adminSignature = new Uint8Array();
let adminSignature: Uint8Array | undefined;
if (this.secretKey && !_.isEmpty(this.secretKey) && this.sodium) {
adminSignature = this.sodium.crypto_sign_detached(
stringToUint8Array(
Expand Down
16 changes: 13 additions & 3 deletions ts/session/utils/job_runners/jobs/GroupSyncJob.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,19 @@ async function confirmPushedAndDump(
assertUnreachable(namespace, 'buildAndSaveDumpsToDB assertUnreachable');
}
}

await MetaGroupWrapperActions.metaConfirmPushed(...toConfirm);
return LibSessionUtil.saveDumpsToDb(groupPk);
try {
await MetaGroupWrapperActions.metaConfirmPushed(...toConfirm);
await LibSessionUtil.saveDumpsToDb(groupPk);
} catch (e) {
// The reason we catch exception here is because sometimes we can have a race condition where
// - we push a change to the group (req1 takes 10s)
// - while req1 is running, a poll merge results with the group marked as destroyed
// - this means we have free the wrapper
// - then, req finishes, and tries to metaConfirmPushed/saveDumpsToDb which fails as the wrapper was freed.
window.log.warn(
`metaConfirmPushed/saveDumpsToDb for group ${ed25519Str(groupPk)} failed with ${e.message}. This can safely be ignored` // I hope
);
}
}

async function pushChangesToGroupSwarmIfNeeded({
Expand Down
41 changes: 26 additions & 15 deletions ts/session/utils/libsession/libsession_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -345,21 +345,32 @@ function batchResultsToUserSuccessfulChange(
async function saveDumpsToDb(pubkey: PubkeyType | GroupPubkeyType) {
// first check if this is relating a group
if (PubKey.is03Pubkey(pubkey)) {
const metaNeedsDump = await MetaGroupWrapperActions.needsDump(pubkey);
// save the concatenated dumps as a single entry in the DB if any of the dumps had a need for dump
if (metaNeedsDump) {
window.log.debug(`About to make and save dumps for metagroup ${ed25519Str(pubkey)}`);

const dump = await MetaGroupWrapperActions.metaDump(pubkey);
await ConfigDumpData.saveConfigDump({
data: dump,
publicKey: pubkey,
variant: `MetaGroupConfig-${pubkey}`,
});

window.log.info(`Saved dumps for metagroup ${ed25519Str(pubkey)}`);
} else {
window.log.debug(`No need to update local dumps for metagroup ${ed25519Str(pubkey)}`);
try {
const metaNeedsDump = await MetaGroupWrapperActions.needsDump(pubkey);
// save the concatenated dumps as a single entry in the DB if any of the dumps had a need for dump
if (metaNeedsDump) {
window.log.debug(`About to make and save dumps for metagroup ${ed25519Str(pubkey)}`);

const dump = await MetaGroupWrapperActions.metaDump(pubkey);
await ConfigDumpData.saveConfigDump({
data: dump,
publicKey: pubkey,
variant: `MetaGroupConfig-${pubkey}`,
});

window.log.info(`Saved dumps for metagroup ${ed25519Str(pubkey)}`);
} else {
window.log.debug(`No need to update local dumps for metagroup ${ed25519Str(pubkey)}`);
}
} catch (e) {
// The reason we catch exception here is because sometimes we can have a race condition where
// - we push a change to the group (req1 takes 10s)
// - while req1 is running, a poll merge results with the group marked as destroyed
// - this means we have to free the wrapper
// - then, req finishes, and tries to saveDumpsToDb which fails as the wrapper was freed.
window.log.warn(
`saveDumpsToDb for group ${ed25519Str(pubkey)} failed with ${e.message}. This can safely be ignored` // I hope
);
}
return;
}
Expand Down
Loading