From 0e526d6fed1b01510534b0353d8ebcc2829e56cc Mon Sep 17 00:00:00 2001
From: Antoine Martin <dev@ayakael.net>
Date: Sat, 22 Mar 2025 23:53:51 -0400
Subject: [PATCH] testing/signal-desktop: upgrade to 7.47.0

---
 testing/signal-desktop/APKBUILD               |  53 +++--
 .../signal-rollback-locale-changes.patch      | 225 ++++++++++++++++++
 .../signal-use-system-sqlcipher.patch         |  13 -
 3 files changed, 253 insertions(+), 38 deletions(-)
 create mode 100644 testing/signal-desktop/signal-rollback-locale-changes.patch

diff --git a/testing/signal-desktop/APKBUILD b/testing/signal-desktop/APKBUILD
index fcfdca84162d..2a6e655131dc 100644
--- a/testing/signal-desktop/APKBUILD
+++ b/testing/signal-desktop/APKBUILD
@@ -2,8 +2,8 @@
 # Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
 # Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
 pkgname=signal-desktop
-pkgver=7.44.0
-pkgrel=1
+pkgver=7.47.0
+pkgrel=0
 pkgdesc="A messaging app for simple private communication with friends"
 url="https://github.com/signalapp/Signal-Desktop/"
 # same as electron
@@ -50,6 +50,7 @@ makedepends="
 	mesa-dev
 	nodejs
 	npm
+	pnpm
 	openh264-dev
 	openssl-dev
 	opus-dev
@@ -67,9 +68,9 @@ makedepends="
 options="net !check"
 
 # use _check_depends to validate this
-_libsignalver=0.66.2
-_ringrtcver=2.49.5
-_webrtcver=6834d
+_libsignalver=0.67.3
+_ringrtcver=2.50.2
+_webrtcver=6834f
 _stokenizerver=0.2.1
 
 source="
@@ -84,6 +85,7 @@ source="
 	signal-disable-updates.patch
 	signal-update-links.patch
 	signal-show-window-please.patch
+	signal-rollback-locale-changes.patch
 	ringrtc-webrtc-renamed.patch
 	webrtc-shared-libs.patch
 	webrtc-compiler.patch
@@ -124,9 +126,9 @@ _update_depends() {
 	#     downloading tarball generated with abuild snapshot (with gclient dependencies fetched)
 	# _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION
 
-	local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
-	local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
-	local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
+	local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
+	local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
+	local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1)
 	local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1)
 	local _extensionver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const EXTENSION_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' |  head -n 1)
 	local _extensionver=${_extensionver/-*}
@@ -197,7 +199,7 @@ prepare() {
 
 	cd "$builddir"/Signal-Desktop
 	msg "Installing signal-desktop JS dependencies"
-	npm ci --ignore-scripts
+	pnpm install --ignore-scripts
 
 	# remove shipped fonts for system-provided (part 1)
 	rm -rf fonts/
@@ -399,21 +401,17 @@ build() {
 	cd "$builddir"/Signal-Desktop
 
 	# from package.json postinstall
-	npm run build:acknowledgments
-	npm exec patch-package
+	pnpm run build:acknowledgments
 	rm -rf node_modules/dtrace-provider
 
 	# get esbuild installed (needed for next step)
-	npm rebuild esbuild
+	pnpm rebuild esbuild
 
 	# build front
 	NODE_ENV=production \
 	SIGNAL_ENV=production \
 	NODE_OPTIONS=--openssl-legacy-provider \
-	npm run build:dev
-
-	# purge non-production deps
-	npm prune --ignore-scripts --omit=dev
+	pnpm run build:dev
 
 	# use our libsignal
 	rm -rf node_modules/@signalapp/libsignal-client/
@@ -427,10 +425,14 @@ build() {
 	mv "$builddir"/Signal-FTS5-Extension/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/
 	mv "$builddir"/Signal-FTS5-Extension/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/
 
-	npm rebuild \
+	npm_config_nodedir=/usr/include/electron/node_headers \
+	npm_config_build_from_source=true \
+	pnpm rebuild \
 		sharp @signalapp/better-sqlite3 spellchecker websocket \
-		utf-8-validate bufferutil fs-xattr \
-		--nodedir=/usr/include/electron/node_headers --build-from-source
+		utf-8-validate bufferutil fs-xattr
+
+	# purge non-production deps
+	pnpm prune --ignore-scripts --prod
 
 	SIGNAL_ENV=production \
 	tasje pack
@@ -439,7 +441,7 @@ build() {
 check() {
 	cd "$builddir"/Signal-Desktop
 	# tests run against downloaded build of electron for glibc, probably can be patched
-	npm run test
+	pnpm run test
 }
 
 package() {
@@ -460,16 +462,17 @@ package() {
 }
 
 sha512sums="
-ee089f43ca96c3ac1bb35f469b28717760615c7448860829566ca34befec917e5a9d6137b82bfe5ae8b9d753e8df7a177f4fd6b99cf0f009944fc8c5984982a1  Signal-Desktop-7.44.0.tar.gz
-776eba9bc5eb6bbb9a73f7b768e46f11bbca91f8a797e345bef2aecd583b21f4ab9c574fa6e0a239bff416502b14d1d6019ade8755964ed73e04448aab82ba48  libsignal-0.66.2.tar.gz
-d5dada32132cc4742628f9ebb53c013767ac23c0dfecb70a82f6e2cbde423e08bc7caf73566f12a412d60edb1c6940fb0e8ed4ad533f4ce76189d85b8ded1f4d  ringrtc-2.49.5.tar.gz
-8587c3375130bedf3e995c82885fd1ffac8c61e60063734e070b3578c324bdd8cb1109bf3280c6329ba2411cc06c304e731ea11573b5b0f22880b9a9fe0d22c2  webrtc-6834d.tar.zst
+9b2926c9009cff31b6ad4b6e4eb8bb997b47a4f0cc171c54ae86122cc4aef547b233655378a9091c5f7b5a413f25b761a7b28efe32eac0d5872f01cb14479ab8  Signal-Desktop-7.47.0.tar.gz
+eaf5b9f69caa833df4116c354ff39a5df69b1f6f30262f9bd6ab566afd95d364718a220d3ae0b430550667bcf671ff462ef200348354d2cef56a3f76f45bb292  libsignal-0.67.3.tar.gz
+18229b313dbe755fd048470405dff12d11aba02f655c46500156545c8f9621d465bd9a843c25333d2ed7a036f10f4f41ab00225cd53cae54c9deabadee4a439a  ringrtc-2.50.2.tar.gz
+131b5a0b190106fabbeb8903bd35546c956562a18128c92cd8bd6b046a1c7ceb5fc2e6258ced106399f24bbfeba6d8a827f39114215fc1c8941a919359f6e300  webrtc-6834f.tar.zst
 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28  stokenizer-0.2.1.tar.gz
 8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f  libsignal-auditable.patch
-18d5a0208d75fa910b6c0d531997402bba83290dfc7d7ce903acdcd0ce1d88bd3026ace40ecd32a88c2e429e48530b4e40f207a3d15bd9c0d6ebc8c447fa8ff9  signal-use-system-sqlcipher.patch
+eed8371ccf478e6bf3ade04f93ed26b53ee141b6f786e7a2ae4483b1b962329b18034ec0bc3514eb218346e100044aeaf0fcf2b31028c87c41bd7ecc7e681848  signal-use-system-sqlcipher.patch
 fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569b560fde3cf8c02480666a9b01d804b0008f97c728005b1c7  signal-disable-updates.patch
 853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049  signal-update-links.patch
 882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265  signal-show-window-please.patch
+aca92e4de6cd005d660d7e8b99607de96ca2d7dc220e3465247d517e915e4d41a4b0eb519e85c5eca1c81cd8bac9821acd03ff57f1603918987829c6ea7757b4  signal-rollback-locale-changes.patch
 02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552  ringrtc-webrtc-renamed.patch
 98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1  webrtc-shared-libs.patch
 fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a  webrtc-compiler.patch
diff --git a/testing/signal-desktop/signal-rollback-locale-changes.patch b/testing/signal-desktop/signal-rollback-locale-changes.patch
new file mode 100644
index 000000000000..fce29a247e76
--- /dev/null
+++ b/testing/signal-desktop/signal-rollback-locale-changes.patch
@@ -0,0 +1,225 @@
+From a094a2ca2b6d8758b4aea24389c35fc4f142b715 Mon Sep 17 00:00:00 2001
+From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
+Date: Mon, 3 Mar 2025 19:10:01 -0800
+Subject: [PATCH] Compactify locales even more
+
+Rollback of Compactify locales even more. For some reason, (maybe tasje?),
+these new locales aren't working
+
+---
+ app/locale.ts                          | 56 ++++++++++++++++--
+ package.json                           |  2 +-
+ ts/scripts/generate-compact-locales.ts | 82 +++++++++++++++++++-------
+ 3 files changed, 112 insertions(+), 28 deletions(-)
+
+
+diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json
+index 04dd9f9200b..e7b69ef963f 100644
+--- a/Signal-Desktop/package.json.orig
++++ b/Signal-Desktop/package.json
+@@ -538,10 +538,7 @@
+       {
+         "from": "build/compact-locales",
+         "to": "_locales",
+-        "filter": [
+-          "**/values.json",
+-          "keys.json"
+-        ]
++	"filter": "**/messages.json"
+       },
+       "js/**",
+       "libtextsecure/**",
+diff --git a/Signal-Desktop/app/locale.ts.orig b/Signal-Desktop/app/locale.ts
+index a63eef4079d..2a959da4d0d 100644
+--- a/Signal-Desktop/app/locale.ts.orig
++++ b/Signal-Desktop/app/locale.ts
+@@ -1,9 +1,8 @@
+ // Copyright 2017 Signal Messenger, LLC
+ // SPDX-License-Identifier: AGPL-3.0-only
+ 
+-import { join } from 'node:path';
+-import { readFileSync } from 'node:fs';
+-import { app } from 'electron';
++import { join } from 'path';
++import { readFileSync } from 'fs';
+ import { merge } from 'lodash';
+ import * as LocaleMatcher from '@formatjs/intl-localematcher';
+ import { z } from 'zod';
+@@ -16,9 +15,6 @@ import type { LocalizerType } from '../ts/types/Util';
+ import * as Errors from '../ts/types/errors';
+ import { parseUnknown } from '../ts/util/schemas';
+ 
+-type CompactLocaleMessagesType = ReadonlyArray<string | null>;
+-type CompactLocaleKeysType = ReadonlyArray<string>;
+-
+ const TextInfoSchema = z.object({
+   direction: z.enum(['ltr', 'rtl']),
+ });
+@@ -29,17 +25,6 @@ function getLocaleMessages(locale: string): LocaleMessagesType {
+   return JSON.parse(readFileSync(targetFile, 'utf-8'));
+ }
+ 
+-function getCompactLocaleKeys(): CompactLocaleKeysType {
+-  const targetFile = join(__dirname, '..', '_locales', 'keys.json');
+-  return JSON.parse(readFileSync(targetFile, 'utf-8'));
+-}
+-
+-function getCompactLocaleValues(locale: string): CompactLocaleMessagesType {
+-  const targetFile = join(__dirname, '..', '_locales', locale, 'values.json');
+-
+-  return JSON.parse(readFileSync(targetFile, 'utf-8'));
+-}
+-
+ export type LocaleDisplayNames = Record<string, Record<string, string>>;
+ export type CountryDisplayNames = Record<string, Record<string, string>>;
+ 
+@@ -154,42 +139,13 @@ export function load({
+ 
+   logger.info(`locale: Matched locale: ${matchedLocale}`);
+ 
++  const matchedLocaleMessages = getLocaleMessages(matchedLocale);
++  const englishMessages = getLocaleMessages('en');
+   const localeDisplayNames = getLocaleDisplayNames();
+   const countryDisplayNames = getCountryDisplayNames();
+ 
+-  let finalMessages: LocaleMessagesType;
+-  if (app.isPackaged) {
+-    const matchedLocaleMessages = getCompactLocaleValues(matchedLocale);
+-    const englishMessages = getCompactLocaleValues('en');
+-    const keys = getCompactLocaleKeys();
+-    if (matchedLocaleMessages.length !== keys.length) {
+-      throw new Error(
+-        `Invalid "${matchedLocale}" entry count, ` +
+-          `${matchedLocaleMessages.length} != ${keys.length}`
+-      );
+-    }
+-    if (englishMessages.length !== keys.length) {
+-      throw new Error(
+-        `Invalid "en" entry count, ${englishMessages.length} != ${keys.length}`
+-      );
+-    }
+-
+-    // We start with english, then overwrite that with anything present in locale
+-    finalMessages = Object.create(null);
+-    for (const [i, key] of keys.entries()) {
+-      finalMessages[key] = {
+-        messageformat:
+-          matchedLocaleMessages[i] ?? englishMessages[i] ?? undefined,
+-      };
+-    }
+-  } else {
+-    const matchedLocaleMessages = getLocaleMessages(matchedLocale);
+-    const englishMessages = getLocaleMessages('en');
+-
+-    // We start with english, then overwrite that with anything present in locale
+-    finalMessages = merge(englishMessages, matchedLocaleMessages);
+-  }
+-
++  // We start with english, then overwrite that with anything present in locale
++  const finalMessages = merge(englishMessages, matchedLocaleMessages);
+   const i18n = setupI18n(matchedLocale, finalMessages, {
+     renderEmojify: shouldNeverBeCalled,
+   });
+diff --git a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig b/Signal-Desktop/ts/scripts/generate-compact-locales.ts
+index 7187d287acc..9a17d638f44 100644
+--- a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig
++++ b/Signal-Desktop/ts/scripts/generate-compact-locales.ts
+@@ -3,49 +3,6 @@
+ 
+ import { readdir, mkdir, readFile, writeFile } from 'node:fs/promises';
+ import { join, dirname } from 'node:path';
+-import pMap from 'p-map';
+-import { isLocaleMessageType } from '../util/setupI18nMain';
+-
+-async function compact({
+-  sourceDir,
+-  targetDir,
+-  locale,
+-  keys,
+-}: {
+-  sourceDir: string;
+-  targetDir: string;
+-  locale: string;
+-  keys: ReadonlyArray<string>;
+-}): Promise<ReadonlyArray<string>> {
+-  const sourcePath = join(sourceDir, locale, 'messages.json');
+-  const targetPath = join(targetDir, locale, 'values.json');
+-
+-  await mkdir(dirname(targetPath), { recursive: true });
+-
+-  const json = JSON.parse(await readFile(sourcePath, 'utf8'));
+-
+-  const result = new Array<string | null>();
+-  for (const key of keys) {
+-    if (json[key] == null) {
+-      // Pull English translation, or leave blank (string was deleted)
+-      result.push(null);
+-      continue;
+-    }
+-
+-    const value = json[key];
+-    if (!isLocaleMessageType(value)) {
+-      continue;
+-    }
+-    if (value.messageformat == null) {
+-      continue;
+-    }
+-    result.push(value.messageformat);
+-  }
+-
+-  await writeFile(targetPath, JSON.stringify(result));
+-
+-  return keys;
+-}
+ 
+ async function main(): Promise<void> {
+   const rootDir = join(__dirname, '..', '..');
+@@ -54,27 +11,30 @@ async function main(): Promise<void> {
+ 
+   const locales = await readdir(sourceDir);
+ 
+-  const allKeys = await pMap(
+-    locales,
+-    async locale => {
++  await Promise.all(
++    locales.map(async locale => {
+       const sourcePath = join(sourceDir, locale, 'messages.json');
+-      const json = JSON.parse(await readFile(sourcePath, 'utf8'));
+-      return Object.entries(json)
+-        .filter(([, value]) => isLocaleMessageType(value))
+-        .map(([key]) => key);
+-    },
+-    { concurrency: 10 }
+-  );
++      const targetPath = join(targetDir, locale, 'messages.json');
+ 
+-  // Sort keys alphabetically for better incremental updates.
+-  const keys = Array.from(new Set(allKeys.flat())).sort();
+-  await mkdir(targetDir, { recursive: true });
+-  await writeFile(join(targetDir, 'keys.json'), JSON.stringify(keys));
++      await mkdir(dirname(targetPath), { recursive: true });
+ 
+-  await pMap(
+-    locales,
+-    locale => compact({ sourceDir, targetDir, locale, keys }),
+-    { concurrency: 10 }
++      const json = JSON.parse(await readFile(sourcePath, 'utf8'));
++      for (const value of Object.values(json)) {
++        const typedValue = value as { description?: string };
++        delete typedValue.description;
++      }
++      delete json.smartling;
++
++      const entries = [...Object.entries(json)];
++
++      // Sort entries alphabetically for better incremental updates.
++      entries.sort(([a], [b]) => {
++        return a < b ? -1 : 1;
++      });
++
++      const result = Object.fromEntries(entries);
++      await writeFile(targetPath, JSON.stringify(result));
++    })
+   );
+ }
+ 
diff --git a/testing/signal-desktop/signal-use-system-sqlcipher.patch b/testing/signal-desktop/signal-use-system-sqlcipher.patch
index cc00ad4e79e6..7f46d55c1d16 100644
--- a/testing/signal-desktop/signal-use-system-sqlcipher.patch
+++ b/testing/signal-desktop/signal-use-system-sqlcipher.patch
@@ -28,16 +28,3 @@ index c370c30b309..bf0207e6fec 100644
            ],
          }],
        ],
-diff --git a/Signal-Desktop/node_modules/@signalapp/better-sqlite3/package.json.orig b/Signal-Desktop/node_modules/@signalapp/better-sqlite3/package.json
-index fbb9d360352..a9217039c01 100644
---- a/Signal-Desktop/node_modules/@signalapp/better-sqlite3/package.json.orig
-+++ b/Signal-Desktop/node_modules/@signalapp/better-sqlite3/package.json
-@@ -35,7 +35,7 @@
-   },
-   "scripts": {
-     "format": "xcrun clang-format --style=chromium -Werror --verbose -i src/*.cpp src/*.hpp",
--    "install": "npm run download && npm run build-release",
-+    "install": "npm run build-release",
-     "build-release": "node-gyp rebuild --release",
-     "build-debug": "node-gyp rebuild --debug",
-     "test": "mocha --exit --slow=75 --timeout=5000",
-- 
GitLab