Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d5a136dff | ||
|
|
580827f7ca | ||
|
|
6f33c7277a | ||
|
|
6f1dfedde2 | ||
|
|
c0774b5f58 | ||
|
|
4fdad89fa6 | ||
|
|
80fcf6c227 | ||
|
|
f4995e5882 | ||
|
|
e21a895390 | ||
|
|
c51b68194a | ||
|
|
6b0261d66c |
@@ -162,6 +162,10 @@ desktop_linux:
|
|||||||
MAX_GLIBC: "2.31"
|
MAX_GLIBC: "2.31"
|
||||||
USE_HARD_LINKS: "false"
|
USE_HARD_LINKS: "false"
|
||||||
SQLCIPHER_BUNDLED: "1"
|
SQLCIPHER_BUNDLED: "1"
|
||||||
|
# Eigene Build-Variante: Produktname ThreadNet statt Element. Ohne das nutzt
|
||||||
|
# electron-builder element.io/release/build.json und die Pakete heissen weiter
|
||||||
|
# "element-desktop" (real passiert 2026-08-02).
|
||||||
|
VARIANT_PATH: axion1337/build.json
|
||||||
script:
|
script:
|
||||||
- pnpm install --frozen-lockfile --filter element-desktop
|
- pnpm install --frozen-lockfile --filter element-desktop
|
||||||
- cp -r apps/web/webapp apps/desktop/webapp
|
- cp -r apps/web/webapp apps/desktop/webapp
|
||||||
@@ -201,6 +205,8 @@ desktop_windows:
|
|||||||
SQLCIPHER_BUNDLED: "1"
|
SQLCIPHER_BUNDLED: "1"
|
||||||
ELECTRON_CACHE: C:\electron-cache
|
ELECTRON_CACHE: C:\electron-cache
|
||||||
ELECTRON_BUILDER_CACHE: C:\eb-cache
|
ELECTRON_BUILDER_CACHE: C:\eb-cache
|
||||||
|
# Eigene Build-Variante (Produktname ThreadNet) - siehe desktop_linux
|
||||||
|
VARIANT_PATH: axion1337/build.json
|
||||||
script:
|
script:
|
||||||
- pnpm install --frozen-lockfile --filter element-desktop
|
- pnpm install --frozen-lockfile --filter element-desktop
|
||||||
# GitHub-CDN-Downloads (Electron-Binary, winCodeSign, NSIS) reissen im Gast
|
# GitHub-CDN-Downloads (Electron-Binary, winCodeSign, NSIS) reissen im Gast
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"appId": "im.riot.app",
|
||||||
|
"name": "threadnet-desktop",
|
||||||
|
"productName": "ThreadNet",
|
||||||
|
"description": "ThreadNet — powered by Element",
|
||||||
|
"protocols": ["io.element.desktop", "element"],
|
||||||
|
"mac.icon": "build/icon.icns",
|
||||||
|
"dmg.badgeIcon": "build/icon.icns"
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 395 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 395 KiB |
@@ -48,6 +48,8 @@ interface Variant extends Metadata {
|
|||||||
"appId": string;
|
"appId": string;
|
||||||
"linux.executableName"?: string;
|
"linux.executableName"?: string;
|
||||||
"linux.deb.name"?: string;
|
"linux.deb.name"?: string;
|
||||||
|
"mac.icon"?: string;
|
||||||
|
"dmg.badgeIcon"?: string;
|
||||||
"protocols": string[];
|
"protocols": string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,6 +204,31 @@ if (variant["linux.deb.name"]) {
|
|||||||
config.deb.fpm.push("--name", variant["linux.deb.name"]);
|
config.deb.fpm.push("--name", variant["linux.deb.name"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ThreadNet-Fork: Icon-Pfade fuer macOS ueberschreibbar machen.
|
||||||
|
*
|
||||||
|
* Upstream setzt `mac.icon` auf das Icon-Composer-Bundle `build/icon.icon`
|
||||||
|
* (macOS 26). Dessen Verarbeitung ruft `actool` auf, das es nur mit dem vollen
|
||||||
|
* Xcode gibt (~10 GB, App-Store-Login) - mit blossen CommandLineTools scheitert
|
||||||
|
* damit JEDER macOS-Build, nicht nur das DMG:
|
||||||
|
*
|
||||||
|
* ⨯ Failed to check actool version. Is Xcode 26 or higher installed?
|
||||||
|
*
|
||||||
|
* Ueber die Variante laesst sich stattdessen das klassische `.icns` waehlen.
|
||||||
|
* Bewusst hier als Variantenoption statt als Aenderung an den Defaults oben:
|
||||||
|
* So bleibt Upstreams Wert unberuehrt und ein Upstream-Merge erzeugt keinen
|
||||||
|
* Konflikt an dieser Zeile.
|
||||||
|
*
|
||||||
|
* Preis: kein macOS-26-Icon-Rendering. Ohne Xcode gaebe es ohnehin keinen Build.
|
||||||
|
*/
|
||||||
|
if (variant["mac.icon"]) {
|
||||||
|
config.mac.icon = variant["mac.icon"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (variant["dmg.badgeIcon"]) {
|
||||||
|
config.dmg.badgeIcon = variant["dmg.badgeIcon"];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow specifying windows signing cert via env vars
|
* Allow specifying windows signing cert via env vars
|
||||||
* @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME
|
* @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "element-desktop",
|
"name": "element-desktop",
|
||||||
"productName": "Element",
|
"productName": "ThreadNet",
|
||||||
"main": "lib/electron-main.js",
|
"main": "lib/electron-main.js",
|
||||||
"exports": "./lib/electron-main.js",
|
"exports": "./lib/electron-main.js",
|
||||||
"version": "1.12.17",
|
"version": "1.12.17",
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"disable_login_language_selector": false,
|
"disable_login_language_selector": false,
|
||||||
"disable_3pid_login": false,
|
"disable_3pid_login": false,
|
||||||
"force_verification": false,
|
"force_verification": false,
|
||||||
"brand": "Element",
|
"brand": "aXion1337.Chat",
|
||||||
"integrations_ui_url": "https://scalar.vector.im/",
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
"integrations_widgets_urls": [
|
"integrations_widgets_urls": [
|
||||||
|
|||||||
@@ -10,3 +10,12 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
.mx_HelpUserSettingsTab_accessTokenDetails {
|
.mx_HelpUserSettingsTab_accessTokenDetails {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ThreadNet-Fork: Attribution unter den Versionsangaben. Zurueckhaltend
|
||||||
|
gesetzt - sie soll auffindbar sein, nicht um Aufmerksamkeit konkurrieren
|
||||||
|
mit der Version darueber, die Nutzer hier tatsaechlich suchen. */
|
||||||
|
.mx_HelpUserSettingsTab_attribution {
|
||||||
|
margin-top: var(--cpd-space-2x);
|
||||||
|
color: var(--cpd-color-text-secondary);
|
||||||
|
font: var(--cpd-font-body-sm-regular);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "Element",
|
"name": "ThreadNet",
|
||||||
"short_name": "Element",
|
"short_name": "ThreadNet",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"theme_color": "#76CFA6",
|
"theme_color": "#ed4f4c",
|
||||||
"start_url": "index.html",
|
"start_url": "index.html",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
|
|||||||
|
After Width: | Height: | Size: 590 KiB |
|
Before Width: | Height: | Size: 596 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 395 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 829 B After Width: | Height: | Size: 901 B |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 54 KiB |
@@ -20,7 +20,11 @@ export const DEFAULTS: DeepReadonly<IConfigOptions> = {
|
|||||||
branding: {
|
branding: {
|
||||||
logo_link_url: "https://element.io",
|
logo_link_url: "https://element.io",
|
||||||
auth_header_logo_url: "themes/element/img/logos/element-logo.svg",
|
auth_header_logo_url: "themes/element/img/logos/element-logo.svg",
|
||||||
welcome_background_url: "themes/element/img/backgrounds/lake.jpg",
|
// ThreadNet-Fork: eigenes Titelbild statt Elements lake.jpg. Steht hier im
|
||||||
|
// Default und nicht in element-values.yaml, weil die Bilddatei ohnehin nur
|
||||||
|
// ueber einen Build in den Container kommt - eine zusaetzliche Config-Zeile
|
||||||
|
// waere eine zweite Stelle, die mitwandern muesste.
|
||||||
|
welcome_background_url: "themes/element/img/backgrounds/alpenglow.jpg",
|
||||||
},
|
},
|
||||||
help_url: "https://element.io/help",
|
help_url: "https://element.io/help",
|
||||||
help_encryption_url: "https://element.io/help#encryption",
|
help_encryption_url: "https://element.io/help#encryption",
|
||||||
@@ -44,9 +48,10 @@ export const DEFAULTS: DeepReadonly<IConfigOptions> = {
|
|||||||
// be preferred over their config.
|
// be preferred over their config.
|
||||||
desktopBuilds: {
|
desktopBuilds: {
|
||||||
available: true,
|
available: true,
|
||||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
// ThreadNet-Fork: eigene Marke und eigener Download-Pfad statt
|
||||||
logo: require("../res/img/element-desktop-logo.svg").default,
|
// element.io - wir liefern eigene Desktop-Builds aus.
|
||||||
url: "https://element.io/get-started",
|
logo: "vector-icons/512.png",
|
||||||
|
url: "https://git.lab/axion1337.chat/ThreadNet-Web/-/releases",
|
||||||
},
|
},
|
||||||
|
|
||||||
feedback: {
|
feedback: {
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ export const ErrorView: React.FC<IProps> = ({ title, messages, footer, children
|
|||||||
<img
|
<img
|
||||||
className="mx_ErrorView_logo"
|
className="mx_ErrorView_logo"
|
||||||
height="160"
|
height="160"
|
||||||
src="themes/element/img/logos/element-app-logo.png"
|
src="vector-icons/512.png"
|
||||||
alt="Element"
|
alt="ThreadNet"
|
||||||
/>
|
/>
|
||||||
<div className="mx_ErrorView_container">
|
<div className="mx_ErrorView_container">
|
||||||
<Heading size="md" weight="semibold">
|
<Heading size="md" weight="semibold">
|
||||||
|
|||||||
@@ -106,34 +106,42 @@ export default class HelpUserSettingsTab extends React.Component<EmptyObject, IS
|
|||||||
<SettingsSubsection heading={_t("common|credits")}>
|
<SettingsSubsection heading={_t("common|credits")}>
|
||||||
<SettingsSubsectionText>
|
<SettingsSubsectionText>
|
||||||
<ul>
|
<ul>
|
||||||
|
{/* ThreadNet-Fork: eigenes Titelbild, deshalb eigene Danksagung.
|
||||||
|
Bewusst OHNE _t(): der Schluessel credits|default_cover_photo
|
||||||
|
steckt in 32 Sprachdateien, 31 davon nennen Elements Fotografen
|
||||||
|
namentlich. Wuerden wir nur en/de anpassen, stuende in 29
|
||||||
|
Sprachen eine falsche Attribution — und die uebrigen 29 koennen
|
||||||
|
wir nicht pflegen, sie kommen aus Elements Uebersetzungsdienst.
|
||||||
|
Ein Fotografenname und eine Lizenzbezeichnung werden ohnehin
|
||||||
|
nicht uebersetzt. Der ungenutzte Schluessel bleibt in den
|
||||||
|
Sprachdateien stehen — ihn aus 32 Dateien zu entfernen waere
|
||||||
|
Laerm im naechsten Upstream-Merge. */}
|
||||||
<li>
|
<li>
|
||||||
{_t(
|
The{" "}
|
||||||
"credits|default_cover_photo",
|
<ExternalLink
|
||||||
{},
|
href="themes/element/img/backgrounds/alpenglow.jpg"
|
||||||
{
|
rel="noreferrer noopener"
|
||||||
photo: (sub) => (
|
target="_blank"
|
||||||
<ExternalLink
|
>
|
||||||
href="themes/element/img/backgrounds/lake.jpg"
|
default cover photo
|
||||||
rel="noreferrer noopener"
|
</ExternalLink>{" "}
|
||||||
target="_blank"
|
is by <ExternalLink href="https://unsplash.com/@heytowner">John Towner</ExternalLink> on{" "}
|
||||||
>
|
<ExternalLink
|
||||||
{sub}
|
href="https://unsplash.com/photos/JgOeRuGD_Y4"
|
||||||
</ExternalLink>
|
rel="noreferrer noopener"
|
||||||
),
|
target="_blank"
|
||||||
author: (sub) => (
|
>
|
||||||
<ExternalLink href="https://www.flickr.com/golan">{sub}</ExternalLink>
|
Unsplash
|
||||||
),
|
</ExternalLink>
|
||||||
terms: (sub) => (
|
, used under the{" "}
|
||||||
<ExternalLink
|
<ExternalLink
|
||||||
href="https://creativecommons.org/licenses/by-sa/4.0/"
|
href="https://unsplash.com/license"
|
||||||
rel="noreferrer noopener"
|
rel="noreferrer noopener"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
{sub}
|
Unsplash License
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
),
|
.
|
||||||
},
|
|
||||||
)}
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
{_t(
|
{_t(
|
||||||
@@ -259,6 +267,15 @@ export default class HelpUserSettingsTab extends React.Component<EmptyObject, IS
|
|||||||
{cryptoVersion}
|
{cryptoVersion}
|
||||||
<br />
|
<br />
|
||||||
</CopyableText>
|
</CopyableText>
|
||||||
|
{/* ThreadNet-Fork: Attribution an Element. Bewusst NICHT in
|
||||||
|
getVersionTextToCopy — der Text dort geht in Fehlerberichte,
|
||||||
|
dort ist die Herkunft des Forks nur Rauschen. Ebenso bewusst
|
||||||
|
ohne _t(): ein Markenhinweis wird nicht übersetzt, und jeder
|
||||||
|
zusätzliche i18n-Schlüssel ist Reibung beim Upstream-Merge. */}
|
||||||
|
<div className="mx_HelpUserSettingsTab_attribution">
|
||||||
|
ThreadNet — powered by{" "}
|
||||||
|
<ExternalLink href="https://element.io">Element</ExternalLink>
|
||||||
|
</div>
|
||||||
{updateButton}
|
{updateButton}
|
||||||
</SettingsSubsectionText>
|
</SettingsSubsectionText>
|
||||||
</SettingsSubsection>
|
</SettingsSubsection>
|
||||||
|
|||||||
@@ -2,19 +2,20 @@
|
|||||||
<html lang="en" style="height: 100%;">
|
<html lang="en" style="height: 100%;">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Element</title>
|
<title>ThreadNet</title>
|
||||||
<link rel="apple-touch-icon" sizes="120x120" href="<%= require('../../res/vector-icons/120.png') %>">
|
<link rel="apple-touch-icon" sizes="120x120" href="<%= require('../../res/vector-icons/120.png') %>">
|
||||||
<link rel="apple-touch-icon" sizes="144x144" href="<%= require('../../res/vector-icons/144.png') %>">
|
<link rel="apple-touch-icon" sizes="144x144" href="<%= require('../../res/vector-icons/144.png') %>">
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="<%= require('../../res/vector-icons/152.png') %>">
|
<link rel="apple-touch-icon" sizes="152x152" href="<%= require('../../res/vector-icons/152.png') %>">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="<%= require('../../res/vector-icons/180.png') %>">
|
<link rel="apple-touch-icon" sizes="180x180" href="<%= require('../../res/vector-icons/180.png') %>">
|
||||||
|
<link rel="icon" href="vector-icons/favicon.ico" sizes="any">
|
||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
<meta name="referrer" content="no-referrer">
|
<meta name="referrer" content="no-referrer">
|
||||||
<link rel="icon" type="image/png" sizes="24x24" href="<%= require('../../res/vector-icons/24.png') %>">
|
<link rel="icon" type="image/png" sizes="24x24" href="<%= require('../../res/vector-icons/24.png') %>">
|
||||||
<link rel="icon" type="image/png" sizes="144x144" href="<%= require('../../res/vector-icons/144.png') %>">
|
<link rel="icon" type="image/png" sizes="144x144" href="<%= require('../../res/vector-icons/144.png') %>">
|
||||||
<link rel="icon" type="image/png" sizes="512x512" href="<%= require('../../res/vector-icons/512.png') %>">
|
<link rel="icon" type="image/png" sizes="512x512" href="<%= require('../../res/vector-icons/512.png') %>">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="apple-mobile-web-app-title" content="Element">
|
<meta name="apple-mobile-web-app-title" content="ThreadNet">
|
||||||
<meta name="application-name" content="Element">
|
<meta name="application-name" content="ThreadNet">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
<meta property="og:image" content="<%= og_image_url %>" />
|
<meta property="og:image" content="<%= og_image_url %>" />
|
||||||
<meta http-equiv="Content-Security-Policy" content="
|
<meta http-equiv="Content-Security-Policy" content="
|
||||||
|
|||||||