Compare commits

...

78 Commits

Author SHA1 Message Date
c6286dafc7 Add dedicated linux-container-release make target
Windows targets should be compiled on windows natively
2024-10-20 17:15:27 +02:00
630f4f786e Fix webapp compile on Windows 2024-10-20 17:01:12 +02:00
a8eb3ece19 Stop requiring webapp symlink
Causes issues on Windows-native compile
2024-10-20 15:35:27 +02:00
85546de7b7 Fix rpm build with debian 2024-10-20 15:32:25 +02:00
8e8d874236 Prepare prerelease 2024-10-19 17:26:17 +02:00
70a053f7d9 Update containers and fix some release builds 2024-10-19 17:25:46 +02:00
a8f231f80f Remove outdated publish_release.sh
This script pushes branches in the old style, use
push_current_sc_branches.sh instead.
2024-10-19 15:35:40 +02:00
8069120847 Tweak dark theme text colors a bit more 2024-10-18 18:15:42 +02:00
915e74ae7a Enable custom emote rendering by default 2024-10-17 19:41:46 +02:00
d9984f6f40 Better dark theme secondary text color 2024-10-17 19:37:44 +02:00
f00efcb568 Switch to less aggressive hover color 2024-10-17 19:24:05 +02:00
8f8ba87d7c Keep naming it SchildiChatAlpha to separate .config dirs from old 2024-10-17 18:34:46 +02:00
c66d4c4371 push_current_sc_branches.sh: Allow passing arguments to git push 2024-10-17 18:34:16 +02:00
f9c56fa484 Don't welcome to Element 2024-10-17 18:21:24 +02:00
522095b79e Rebase to v1.11.81 2024-10-17 18:11:47 +02:00
dba9c78816 Rename binary to schildichat-desktop-alpha
This will be the official successor to old schildichat-desktop builds,
so drop "lite" from any user-facing naming.
2024-10-17 18:06:19 +02:00
7fbca648df Always show timestamps by default 2024-10-13 13:53:24 +02:00
a130372946 Fix missed element logo svg for icon_gen.sh 2024-10-13 13:46:34 +02:00
239da124ad Always round corners for message bubbles 2024-10-13 13:30:45 +02:00
3b246ff33f Update patches with more theme tweaks 2024-10-13 13:07:44 +02:00
0e85ad2ccb Try out some darker background 2024-10-13 13:03:21 +02:00
df81140151 Initial compound-based SC theme bringup 2024-10-13 12:33:26 +02:00
fc0edf9dca Update to 1.11.80 2024-10-09 08:04:03 +02:00
8de7f8f846 Some more tooling updates & Update to v1.11.79 2024-10-06 17:29:45 +02:00
4c8f9de4e8 Re-enable auto-commit for icons and theme 2024-10-06 17:11:27 +02:00
ebc3498510 Checkout release-specific branch names in our repos 2024-10-06 12:26:39 +02:00
c7181068c6 [TMP] Disable automatic commit for now
Need to revise how we do branches
2024-10-06 12:19:47 +02:00
055866f599 Update upstream remote for add_upstream 2024-10-06 12:16:19 +02:00
b214e8d568 Bump patches to 1.11.77 2024-09-10 17:59:46 +02:00
2ff1578a57 Automatic theme update 2024-09-10 17:58:07 +02:00
983cba224f [WIP] Add back theming 2024-09-01 21:15:31 +02:00
4696cee8c4 Add back icon generation 2024-08-30 19:54:55 +02:00
f3b47d4f38 Stop the search bar wobble to restore my sanity 2024-08-19 20:33:08 +02:00
642da40810 Update patches to v1.11.74 2024-08-18 11:51:12 +02:00
94c72f7f45 generate_patches.sh: Remove accidentally commited hardcoded value 2024-08-18 11:50:42 +02:00
a49c66538c Make merge_helpers.sh smarter if you have the commit around 2024-08-18 11:45:47 +02:00
a23614d3de Update patches to 1.11.73 2024-08-07 08:21:27 +02:00
b04c8cc063 Move apply_patches to its own script 2024-08-07 08:06:46 +02:00
977e955265 Do not add spaces spaces to breadcrumbs 2024-06-21 20:10:03 +02:00
2c65d8e567 Update README.md for the curious 2024-06-01 10:37:41 +02:00
1489beb322 Show space overview on space switch 2024-05-30 15:07:55 +02:00
34c14329f2 Add back wider width limit for text reactions 2024-05-29 20:05:42 +02:00
a670bf6bea Add back freeform reactions 2024-05-29 19:35:18 +02:00
108a76376c Include DMs in space unread counts 2024-05-26 11:59:51 +02:00
0fb8fa0931 Update patches 2024-05-10 19:03:54 +02:00
634049ce7a Exclude reactions from room previews 2024-05-09 09:39:30 +02:00
649a7f00bf Add FEATURES.md 2024-05-09 09:36:23 +02:00
511c1c8da8 Render captions 2024-05-09 09:33:20 +02:00
8b9c72584b merge_upstream.sh: Do not recreate patches by default 2024-05-09 09:31:24 +02:00
11adc81230 Do not sort muted chats at the bottom 2024-05-08 15:36:09 +02:00
9242672525 merge_upstream.sh: Add flag to skip patch generation
Also checkout upstream/master for all repos until we push our own again.
2024-05-07 08:33:48 +02:00
b0d22fba6b Update config overlays 2024-05-06 20:18:53 +02:00
6a6c997c1c Merge remote-tracking branch 'origin/sc' into lite 2024-05-05 16:39:14 +02:00
b059c2f83d Update setup.sh for seshat 2024-05-05 13:30:23 +02:00
8f70dea230 Automate rebase with patches 2024-05-05 11:29:58 +02:00
eb706739a9 Update patches: disable sticky rooms, bring back unified room list 2024-05-05 11:29:04 +02:00
f67822feab merge_upstream.sh --checkout: re-apply our patches 2024-05-05 09:32:17 +02:00
b353040947 Collect MVP patches for rebase 2024-05-05 09:07:33 +02:00
a95402e0a7 Import theme.sh from matrix-react-sdk
Original history:

    commit 3ac1d305c420a23cab13c4f1756742663dddfe5a
    Author: su-ex <codeworks@supercable.onl>

        Make linter happier

    commit 1cea13f3c55f353fd3bac1110214de54ba3d6ade
    Author: su-ex <codeworks@supercable.onl>

        Make linter happier

    commit a29fbec8465ed803e44c386395bf81945b417175
    Author: su-ex <codeworks@supercable.onl>

        Fix codeblock background and border

    commit 0f9478f023f050a46788a4cb8a988d7a80afe57b
    Merge: a1e6fe4d42 1f3ad86106
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.65.0' into sc

    commit ae33cfe40daa995ff4944b5a6d53a3fbfcd824e2
    Merge: be6ad48996 8219e44596
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.64.1' into sc

    commit 8126c80e45eefac0a2e42381c45461552ac7521f
    Merge: 4e56372068 cf36acaa41
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.63.0' into sc

    commit 98e270faeb43e823bb04d9ee75883fd41adfc1c4
    Author: su-ex <codeworks@supercable.onl>

        theme.sh: scss --> pcss

    commit 8513eaa1390922f05d498c8490737be95c6b5ce8
    Author: su-ex <codeworks@supercable.onl>

        Change red the second

    commit 002d1365346f53261cf67427f383aea85655b3b3
    Author: su-ex <codeworks@supercable.onl>

        Better pill and alert colors

    commit 1ad4250029b8c3a06d588d80b1e06a9a051e48e0
    Merge: 158486173b b5fdf11a03
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.45.0' into sc

    commit c1a277047410e74ae24d3737fe514c7579f98878
    Author: su-ex <codeworks@supercable.onl>

        Fix themes
        - Rebase on Element
        - Better pills

    commit 6e73e67e7e98b3b35804aafa1349b38ad66eac08
    Author: su-ex <codeworks@supercable.onl>

        Fix $presence-offline not visible with light theme if room tile selected

    commit 9092353573307888b64fa1d0b841b43520b26e20
    Author: su-ex <codeworks@supercable.onl>

        theme.sh: Move clean git state check inside correct folder

    commit 6dd1575cadda61502eb509757182377c06adfd27
    Merge: d30537548c cc296ef3da
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.42.1' into sc

    commit f3da66ac6aec0e726f37dc114466642e907b9cf5
    Author: su-ex <codeworks@supercable.onl>

        Allow theme.sh being run without commit

    commit 44fce0c9120bd29ac4d2673589c56d05f2dc5aeb
    Author: su-ex <codeworks@supercable.onl>

        More pill stuff:
        - Consider custom themes
        - Same colors for other users and rooms
        - Less lighter dark bg

    commit 0b012f748750db67f1618c4aeb1b16c87403fb41
    Author: su-ex <codeworks@supercable.onl>

        Make pill background actually lighter tham the background with the dark theme

    commit c1cde5ad305610245af6c155dbddfb17e2962e24
    Author: su-ex <codeworks@supercable.onl>

        Fix other user pills not visible with dark theme

    commit 973ddf8edc3fd4583961c65909bbc279dc36f847
    Merge: 56b7e84a4c b856083716
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.36.0' into sc

    commit 515ee58343ac057ccaea75476377078f5ff99bc0
    Merge: ae37a2dc79 bb55c76d81
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.35.1' into sc

    commit c6f67a0bce737e2d3f19bda4e07dab91e6b8fd33
    Merge: 9e709b6699 27e2faaf64
    Author: su-ex <codeworks@supercable.onl>

        Merge tag 'v3.34.0' into sc

    commit 3c6579e953662e46454b5e3140ad37262d34709c
    Author: su-ex <codeworks@supercable.onl>

        theme.sh update

    commit 7bf38e0802b549184158c049a3c2efc162cb4b8e
    Author: su-ex <codeworks@supercable.onl>

        Some after merge fixes

    commit e2d95dab547d944c4b4c04aac8c52cedcafddd4e
    Merge: 8ee39e7f15 e4f27f04b9
    Author: su-ex <codeworks@supercable.onl>

        Merge remote-tracking branch 'upstream/master' into sc

    commit 508e1653131481bde34b70c7737e5c1f09d5cb2a
    Merge: 351fd94451 e77f7319f2
    Author: su-ex <codeworks@supercable.onl>

        Merge remote-tracking branch 'upstream/master' into sc

    commit 525337fd829e5f778fcab8de68a5fcb078ab8c38
    Author: su-ex <codeworks@supercable.onl>

        Add some colors to theme.sh

    commit e918256a19bc195fd7bf3afa44144804390d6ff3
    Author: su-ex <codeworks@supercable.onl>

        Don't let automatic theme update fail if there was nothing to commit

    commit 09ce713cecd749c195264f8051572bb0db05b496
    Author: SpiritCroc <dev@spiritcroc.de>

        Fix some theme inconsistencies

    commit 196bed3bf5ce9b006005f32092e6dbc898ac30ce
    Author: SpiritCroc <dev@spiritcroc.de>

        Update theme.sh

    commit 53ad57e118b2c14b8dcc6bf6821dde80df980626
    Author: SpiritCroc <dev@spiritcroc.de>

        Update theme.sh

    commit be4d6751620d73a256337803ad5f9d9b47463c56
    Author: SpiritCroc <dev@spiritcroc.de>

        theme.sh: Improve unread badge bg color

    commit d91294f6ee0b92c37d7770f77f043f82fd1f2b58
    Author: SpiritCroc <dev@spiritcroc.de>

        Add theme.sh
2024-04-27 18:01:16 +02:00
a1458b136b New release v1.11.36-sc.3 2024-02-26 10:57:25 +01:00
4b0435ef3b Fix fedora container build
See: https://stackoverflow.com/a/74330717/4515820
2024-02-26 10:45:34 +01:00
48fb86093a New release v1.11.36-sc.2 2024-02-25 21:01:22 +01:00
4dcd73f083 Changed sqlcipher variable name 2024-02-25 20:56:48 +01:00
9f8bad4ea5 New release v1.11.36-sc.1 2024-02-25 20:36:56 +01:00
ab496f7977 Fully containerized release builds 2024-02-25 20:36:48 +01:00
9241a6d044 Use fully qualified name here as well 2024-02-24 22:29:48 +01:00
446b55792f This got lost while rebasing 2024-02-24 22:28:53 +01:00
1338cf0604 Fix containerbuilds, also always use host directory as project directory 2024-02-24 21:46:25 +01:00
90912a5d07 Fix debian container compile 2024-02-24 20:00:45 +01:00
e9faf9ab15 Bump node version from 16 to 18 2024-02-24 19:43:25 +01:00
aae0f2868e New test release v1.11.36-sc.0.test.2 2024-02-24 19:37:16 +01:00
5f41b4c654 New test release v1.11.36-sc.0.test.1 2024-02-24 19:21:05 +01:00
2597454e96 New test release v1.11.35-sc.0.test.1 2024-02-22 19:56:41 +01:00
cb6f6d9901 New test release v1.11.34-sc.0.test.1 2024-02-22 19:24:36 +01:00
8cf7414a85 New test release v1.11.33-sc.0.test.2 2023-12-13 02:28:15 +01:00
2c9f4caa8b New test release v1.11.33-sc.0.test.1 2023-12-13 02:28:08 +01:00
a2c3639112 Bootstrap schildi-lite 2023-12-03 11:45:56 +01:00
8a1b9ab40f Update flake.lock 2023-11-07 23:24:52 +01:00
52 changed files with 5923 additions and 147 deletions

View File

@ -1,5 +1,5 @@
ARG NODE_VERSION
FROM node:${NODE_VERSION}
FROM docker.io/node:${NODE_VERSION}-bookworm
RUN apt-get -qq update && apt-get -qq install --no-install-recommends -y \
curl \
@ -14,17 +14,15 @@ RUN apt-get -qq update && apt-get -qq install --no-install-recommends -y \
make \
openssl \
pkg-config \
python \
python3 \
rpm \
tcl \
vim
RUN ln -s /usr/bin/python3 /usr/bin/python
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal
COPY . /project
WORKDIR /project
# There might be remnants of the host which break the build
RUN make fixup

View File

@ -1,6 +1,6 @@
FROM fedora:latest
FROM docker.io/fedora:40
RUN dnf install -y openssl openssl-devel rust cargo llvm libsecret libsecret-devel g++ ruby-devel gcc make rpm-build libffi-devel tcl libxcrypt-compat
RUN dnf install -y openssl openssl-devel cargo llvm libsecret libsecret-devel sqlcipher sqlcipher-devel g++ ruby-devel gcc make rpm-build libffi-devel tcl libxcrypt-compat pkgconf perl
# node setup
ARG NODE_VERSION
@ -12,9 +12,11 @@ RUN npm install -g n
RUN npm install -g yarn
RUN npm install -g node-gyp
RUN gem install --no-user-install --no-document fpm
RUN ln -s /usr/bin/python3 /usr/bin/python
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal
COPY . /project
WORKDIR /project
# There might be remnants of the host which break the build
RUN make fixup

13
Containerfile.windows Normal file
View File

@ -0,0 +1,13 @@
ARG CONTAINER_IMAGE_DEBIAN
FROM ${CONTAINER_IMAGE_DEBIAN}:latest
RUN dpkg --add-architecture i386 && apt-get update && apt-get install --no-install-recommends -y \
wine \
wine32 \
wine64 \
libwine \
libwine:i386 \
fonts-wine \
zip
WORKDIR /project

28
FEATURES.md Normal file
View File

@ -0,0 +1,28 @@
# Features and changes compared to upstream
Note that this list may be incomplete or outdated.
## General UI
... TODO Schildi theme?
## Chat overview ("room list")
- Unified room list instead of separating DMs and groups (TODO: setting)
- Do not exclude currently selected room when updating room sort order
- Do not force muted rooms to be sorted at the bottom
- Hide reactions from room previews
- Show unread state of muted rooms
- Increase default visible tiles before collapsing each section
- Include DMs in space unread counts
- Show space overview rather then jumping to last opened room when switching space
- Do not add spaces to recently opened rooms list ("breadcrumbs")
## Conversation screen
- Render captions
- Allow sending freeform reactions
- Less restrictive width limit for rendering text reactions

View File

@ -1,8 +1,8 @@
.PHONY: all setup regenerate-i18n web desktop-common linux debian rpm pacman local-pkgbuild local-pkgbuild-install windows windows-portable
.PHONY: web-release debian-release rpm-release pacman-release windows-setup-release windows-unpacked-release windows-portable-release windows-release
.PHONY: macos-common macos macos-mas macos-release macos-mas-release icns
.PHONY: container-build-debian container-build-fedora
.PHONY: container-web-release container-debian-release container-rpm-release container-appimage-release
.PHONY: container-build-debian container-build-fedora container-build-windows
.PHONY: container-web-release container-debian-release container-rpm-release container-appimage-release container-windows-release container-release container-local-pkgbuild
.PHONY: clean undo_setup fixup
.PHONY: fix_yarn_cache
@ -12,10 +12,11 @@ all: web
YARN ?= yarnpkg
CONTAINER_ENGINE ?= podman
NODE_VERSION ?= 16
NODE_VERSION ?= 22
VERSION := $(shell grep version element-desktop/package.json | sed 's|.*: \"\(.*\)\",|\1|')
WEB_APP_NAME := $(shell grep '"name"' element-web/package.json | head -n 1 | sed 's|.*: \"\(.*\)\",|\1|')
#WEB_APP_NAME := $(shell grep '"name"' element-web/package.json | head -n 1 | sed 's|.*: \"\(.*\)\",|\1|')
WEB_APP_NAME := element
DESKTOP_APP_NAME := $(shell grep '"name"' element-desktop/package.json | head -n 1 | sed 's|.*: \"\(.*\)\",|\1|')
PRODUCT_NAME := $(shell grep '"productName"' element-desktop/package.json | sed 's|.*: \"\(.*\)\",|\1|')
@ -39,6 +40,7 @@ OUT_MACOS_MAS := $(DESKTOP_OUT)/mas-universal/$(PRODUCT_NAME).app
CONTAINER_IMAGE_DEBIAN := schildichat-desktop-containerbuild-debian
CONTAINER_IMAGE_FEDORA := schildichat-desktop-containerbuild-fedora
CONTAINER_IMAGE_WINDOWS := schildichat-desktop-containerbuild-windows
RELEASE_DIR := release
CURRENT_RELEASE_DIR := $(RELEASE_DIR)/$(VERSION)
@ -76,7 +78,7 @@ web: setup
desktop-common: web
$(YARN) --cwd element-desktop run fetch --cfgdir ''
SQLCIPHER_STATIC=1 $(YARN) --cwd element-desktop run build:native
SQLCIPHER_BUNDLED=1 $(YARN) --cwd element-desktop run build:native
macos-common: web icns
$(YARN) --cwd element-desktop run fetch --cfgdir ''
@ -162,22 +164,38 @@ macos-mas-release: macos-mas
cp $(OUT_MACOS_MAS) $(CURRENT_RELEASE_DIR)
container-build-debian:
$(CONTAINER_ENGINE) build -t $(CONTAINER_IMAGE_DEBIAN) -f Containerfile.debian --build-arg NODE_VERSION=$(NODE_VERSION) .
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_DEBIAN) -f Containerfile.debian --build-arg NODE_VERSION=$(NODE_VERSION) .
container-build-fedora:
$(CONTAINER_ENGINE) build -t $(CONTAINER_IMAGE_FEDORA) -f Containerfile.fedora --build-arg NODE_VERSION=$(NODE_VERSION) .
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_FEDORA) -f Containerfile.fedora --build-arg NODE_VERSION=$(NODE_VERSION) .
container-build-windows: container-build-debian
$(CONTAINER_ENGINE) build --security-opt seccomp=unconfined --security-opt label=disable -t $(CONTAINER_IMAGE_WINDOWS) -f Containerfile.windows --build-arg CONTAINER_IMAGE_DEBIAN=$(CONTAINER_IMAGE_DEBIAN) .
container-web-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make web-release
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make web-release
container-debian-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make debian-release
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make debian-release
container-rpm-release: container-build-fedora
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release
container-appimage-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD)/release:/project/release --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make appimage-release
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make appimage-release
container-windows-release: container-build-windows
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_WINDOWS):latest make windows-release
container-release: container-build-windows #container-build-fedora
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_WINDOWS):latest make web-release debian-release appimage-release rpm-release windows-setup-release windows-portable-release
#$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_FEDORA):latest make rpm-release
linux-container-release: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make web-release debian-release appimage-release rpm-release
container-local-pkgbuild: container-build-debian
$(CONTAINER_ENGINE) run --rm -ti -v $(PWD):/project --security-opt seccomp=unconfined --security-opt label=disable $(CONTAINER_IMAGE_DEBIAN):latest make local-pkgbuild
bom.lock: element-desktop/yarn.lock element-web/yarn.lock matrix-js-sdk/yarn.lock matrix-react-sdk/yarn.lock
./build-bom.sh
@ -191,7 +209,7 @@ clean:
$(YARN) --cwd matrix-react-sdk clean
$(YARN) --cwd element-web clean
$(YARN) --cwd element-desktop clean
rm -f element-desktop/webapp
rm -f element-desktop/webapp || true
rm -rf element-web/dist
rm -rf local-pkgbuild
rm -f bom.lock

View File

@ -1,32 +1,10 @@
# SchildiChat Web/Desktop
SchildiChat Web/Desktop is a fork of Element [Web](https://github.com/vector-im/element-web)/[Desktop](https://github.com/vector-im/element-desktop).
SchildiChat Web/Desktop is a fork of Element [Web](https://github.com/element-hq/element-web)/[Desktop](https://github.com/element-hq/element-desktop).
The most important changes of SchildiChat Web/Desktop compared to Element Web/Desktop are:
- Customizable room list style (compact single line, intermediate and roomy with two line preview)
- Option to show direct and group chats in a combined list
- Improved theming options
- Message bubbles
- &hellip; and more!
Desktop downloads with installation instructions are listed on our website: [https://schildi.chat/desktop](https://schildi.chat/desktop)
Hosted web variant: [https://app.schildi.chat/](https://app.schildi.chat/)
Feel free to [join the discussion on matrix](https://matrix.to/#/#schildichat-web:matrix.org).
<img src="https://raw.githubusercontent.com/SchildiChat/schildichat-desktop/sc/screenshots/1.png"/>
<details>
<summary>Public key used to sign the Debian packages</summary>
```
pub rsa4096 2020-12-08 [SC]
560BB70DA86A6633A39CEC6023358905FE294D01
uid Super apt repo key <apt@supercable.onl>
sub rsa4096 2020-12-08 [E]
```
</details>
## Old build instructions, to be revised in the future
## Building SchildiChat Web/Desktop
@ -95,7 +73,7 @@ To notarize a build with Apple set `NOTARIZE_APPLE_ID` to your AppleID and set t
As already noted above, **`master` contains the latest release** and **`sc` is the development branch**!
```
git clone -b master --recurse-submodules https://github.com/SchildiChat/schildichat-desktop.git
git clone -b lite --recurse-submodules https://github.com/SchildiChat/schildichat-desktop.git
cd schildichat-desktop
make setup # optional step if using the other make targets
```
@ -135,3 +113,13 @@ your-deploy-%: CFGDIR := $(YOUR_CFGDIR)
your-deploy-web: web
rsync --info=progress2 -rup --del element-web/webapp/ you@yourwebserver:/the/folder/served/for/schildi/
```
# Merge helpers
## Add upstream repo remotes
```
source merge_helpers.sh
forall_repos add_upstream
```

40
apply_patches.sh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
print_section() {
local msg="$1"
echo "##############################################################"
echo "# $msg"
echo "##############################################################"
}
pushd "$mydir" > /dev/null
source ./merge_helpers.sh
# Apply our patches
print_section "Apply patches to matrix-js-sdk"
apply_patches matrix-js-sdk
print_section "Apply patches to matrix-react-sdk"
apply_patches matrix-react-sdk
#print_section "Apply patches to element-web"
#apply_patches element-web
print_section "Apply patches to element-desktop"
apply_patches element-desktop
# Automatic adjustments
#print_section "Apply i18n"
#automatic_i18n_adjustment
print_section "Apply automatic package adjustments"
automatic_packagejson_adjustment
# Automatic theme and icon update
print_section "Apply automatic theme updates"
./theme.sh y
print_section "Generate icons"
./graphics/icon_gen.sh y
popd > /dev/null

View File

@ -10,12 +10,16 @@ set -e
version="$1"
releasepath="$2"
github_api_token=`cat ~/githubtoken`
if [ -z "$GITHUB_API_TOKEN" ]; then
github_api_token=`cat ~/githubtoken`
else
github_api_token="$GITHUB_API_TOKEN"
fi
release_notes_file="/tmp/scrn.md"
owner=SchildiChat
repo=schildichat-desktop
target=master
target=lite
# Define variables
GH_API="https://api.github.com"
@ -37,7 +41,7 @@ json_string=`jq -n --arg tag "v$version" --arg target "$target" --arg body "$rel
name: $tag,
body: $body,
draft: true,
prerelease: false
prerelease: true
}'`
# echo "$json_string"
res=`echo "$json_string" | curl -sH "$AUTH" $GH_REPO/releases -d @-`

6
flake.lock generated
View File

@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1633901457,
"narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=",
"lastModified": 1699380656,
"narHash": "sha256-H9kQH3J2Z15Ady3zVQsN/tXv8qnRr+p1B0eUkR1bKfE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "f358794824b4595d77fec93732485d329ed7b0e0",
"rev": "03e7a22654c44489a0a70ea0e237de3e512cd8a6",
"type": "github"
},
"original": {

43
generate_patches.sh Executable file
View File

@ -0,0 +1,43 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
pushd "$mydir" > /dev/null
source ./merge_helpers.sh
persist_patches() {
local repo="$(realpath "$1")"
local patch_dir="$SCHILDI_ROOT/patches/$(basename "$1")"
if [ ! -d "$repo" ]; then
echo "Unknown repo: $repo"
return 1
fi
pushd "$repo"
if [ -d "$patch_dir" ]; then
echo "Clearing old patches..."
rm "$patch_dir"/*
else
echo "Creating new patch dir $patch_dir..."
mkdir "$patch_dir"
fi
echo "Creating new patches"
git format-patch -k upstream/master.. -o "$patch_dir"
echo "Clearing automated commits from patches"
find "$patch_dir" -name "*-Automatic-package.json-adjustment.patch" -exec rm {} \;
find "$patch_dir" -name "*-Automatic-icon-update.patch" -exec rm {} \;
find "$patch_dir" -name "*-Automatic-theme-update.patch" -exec rm {} \;
find "$patch_dir" -name "*-Automatic-setup-commit.patch" -exec rm {} \;
find "$patch_dir" -name "*-Update-version-to-*.patch" -exec rm {} \;
popd
}
persist_patches element-desktop
#persist_patches element-web
persist_patches matrix-react-sdk
persist_patches matrix-js-sdk
popd > /dev/null

815
graphics/feature_image.svg Normal file
View File

@ -0,0 +1,815 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
sodipodi:docname="feature_image.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
id="svg1224"
version="1.1"
viewBox="0 0 270.93333 132.29167"
height="500"
width="1024"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs1218">
<linearGradient
id="linearGradient1"
inkscape:collect="always">
<stop
style="stop-color:#0a5c7c;stop-opacity:1;"
offset="0"
id="stop2" />
<stop
style="stop-color:#001a2a;stop-opacity:1;"
offset="1"
id="stop1" />
</linearGradient>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2036"
x="-0.13812872"
y="-0.16452942"
width="1.2762574"
height="1.3290588">
<feFlood
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2026" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2028" />
<feGaussianBlur
in="composite1"
stdDeviation="1.5"
result="blur"
id="feGaussianBlur2030" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2032" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2034" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2965-4"
x="-0.21722835"
y="-0.25923403"
width="1.4344567"
height="1.5184681">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2955-7" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2957-6" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2959-56" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2961-9" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2963-3" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2953-7"
x="-0.32309693"
y="-0.25279658"
width="1.6461939"
height="1.5055932">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2943-4" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2945-5" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2947-2" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2949-5" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2951-4" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2989-7"
x="-0.23252267"
y="-0.46413375"
width="1.4650453"
height="1.9282675">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2979-4" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2981-4" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2983-3" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2985-07" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2987-8" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2977-6"
x="-0.3235366"
y="-0.25277925"
width="1.6470732"
height="1.5055585">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2967-8" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2969-84" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2971-31" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2973-4" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2975-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter1778-20"
x="-0.071003587"
y="-0.3840027"
width="1.1420072"
height="1.7680054">
<feFlood
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1768-6" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite1770-8" />
<feGaussianBlur
in="composite1"
stdDeviation="5"
result="blur"
id="feGaussianBlur1772-9" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1774-2" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite1776-6" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="radialGradient2"
cx="58.048798"
cy="-112.54058"
fx="58.048798"
fy="-112.54058"
r="33.780365"
gradientTransform="matrix(-6.2100452,0.00407995,-0.0033846,-5.1506999,495.81504,-579.41311)"
gradientUnits="userSpaceOnUse" />
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2-3"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1-6" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1-7" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1-5" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1-3" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2-5" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4-6"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2-2" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2-9" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2-1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3-2" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4-7" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6-0"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4-9" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4-3" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4-6" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5-0" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6-6" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13-2"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12-6" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12-1" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12-8" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12-7" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2-3-5"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1-6-9" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1-7-2" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1-5-2" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1-3-8" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2-5-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4-6-7"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2-2-3" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2-9-6" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2-1-1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3-2-2" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4-7-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6-0-3"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4-9-1" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4-3-9" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4-6-4" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5-0-7" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6-6-8" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13-2-4"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12-6-5" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12-1-0" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12-8-3" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12-7-6" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13-9-1" />
</filter>
</defs>
<sodipodi:namedview
inkscape:window-maximized="0"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="2113"
inkscape:window-width="3840"
units="px"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="470.73109"
inkscape:cx="594.47477"
inkscape:zoom="0.98994949"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata1221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<rect
style="fill:url(#radialGradient2);stroke:none;stroke-width:2.93304;stroke-linejoin:round"
id="rect1"
width="270.93335"
height="132.29167"
x="0"
y="0" />
<g
id="g2-2"
transform="matrix(-1.594384,0,0,1.5943814,341.71584,-85.591264)">
<path
id="path1-2-6-0"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter2-3)"
d="m 131.95298,130.05572 -16.01513,5.95434 4.06075,12.18394 h 18 z m -66.03453,3.06114 c 0.591926,1.32709 -0.153511,3.3108 -2.919861,6.07714 L 53.999,148.19354 71.998589,148.194 84.06424,136.11351 Z"
sodipodi:nodetypes="ccccccscccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-2-7-2"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter4-6)"
d="m 151.8621,67.80338 c -7.31987,-0.24 -14.58332,5.39078 -16.86328,14.39062 -2.99994,11.999783 -3.0001,12.000123 -9,18.00001 -11.99978,11.9998 -30.00071,18.00011 -66.000018,24 -5.999894,0.95998 -8.997855,3.00041 -11.997802,6.00036 8.311322,0 16.615171,0.002 17.948974,2.99183 l 18.048836,3.00781 c 11.99979,5.99991 19.98068,5.99991 31.98048,0 l 16.01953,-6 c 0,0 6.00011,-24.0001 12,-30 5.99989,-5.999887 6.00011,0 12,0 5.99989,0 11.99805,-6.000167 11.99805,-15.00001 0,-2.99994 0.002,-9.0001 -8.99805,-15 -2.09997,-1.43997 -4.55682,-2.27062 -7.13672,-2.39062 z m -85.765642,65.87696 c 0.0048,0.0269 0.0079,0.0547 0.01172,0.082 -0.0038,-0.0273 -0.0069,-0.0551 -0.01172,-0.082 z m 0.0293,0.54883 c -0.0021,0.0384 -0.004,0.0761 -0.0078,0.11523 0.0038,-0.0391 0.0057,-0.0769 0.0078,-0.11523 z m -0.107422,0.65039 c -0.0073,0.0267 -0.01157,0.0512 -0.01953,0.0781 0.0079,-0.027 0.01231,-0.0515 0.01953,-0.0781 z m -0.654297,1.43555 c -0.222659,0.36603 -0.500167,0.7568 -0.828125,1.16797 0.327872,-0.41123 0.605727,-0.80194 0.828125,-1.16797 z m -1.085937,1.47851 c -0.372584,0.44383 -0.782042,0.90314 -1.279297,1.40039 0.496681,-0.49668 0.907296,-0.9571 1.279297,-1.40039 z"
sodipodi:nodetypes="cccccccccsssccccccccccccccccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-3"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter6-0)"
d="M 90,70.205078 A 35.999403,35.999385 0 0 0 54,106.20312 c 0,3.59995 0.780871,6.47968 1.380859,9.59961 35.51933,-5.87988 54.359411,-12.05918 64.199221,-21.95898 l 3,-3 C 116.64017,78.243986 103.91976,70.205078 90,70.205078 Z m 77.45117,19.535156 C 165.84103,96.15802 160.92131,100.19531 156,100.19531 c -5.99988,0 -6.00012,-5.999874 -12,0 -3.16399,3.164 -6.30176,11.2911 -8.58594,18.30664 h 0.004 c 2.28351,-7.01319 5.41893,-15.13572 8.58203,-18.29883 5.99988,-5.999869 6.00012,1e-5 12,0 4.9235,0 9.84339,-4.040099 11.45117,-10.462886 z"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
d="m 172.34987,97.828382 c -11.37062,-16.4492 -40.97915,4.018018 -40.97915,4.018018 0,0 -19.73895,13.64478 -23.02883,15.91894 -3.28981,2.27415 -4.30548,7.83811 -4.30548,7.83811 l -3.28987,2.27415 -9.09654,-13.15933 3.289881,-2.27415 c 0,0 5.563959,1.01566 8.853779,-1.25842 0.65795,-0.4548 2.30289,-1.5919 4.2768,-2.9564 -3.76897,0.17459 -7.00575,-0.99143 -8.825099,-3.6233 -4.09339,-5.921678 0.74423,-15.099988 11.271689,-22.377228 10.52745,-7.27725 20.82301,-8.55991 24.91646,-2.63823 1.3645,1.97392 1.74201,4.63002 1.23418,7.412 7.4165,-7.55762 15.21502,-18.78268 8.39257,-28.65213 l 3.28987,-2.27415 27.28962,39.47797 -3.28988,2.27415 m -58.87642,-11.32281 c -7.56662,5.23049 -11.66901,11.9558 -9.62231,14.916638 2.04675,2.96084 9.78772,1.49932 17.35434,-3.731228 7.56662,-5.23049 11.669,-11.9558 9.62231,-14.91664 -2.04675,-2.96084 -9.78773,-1.49926 -17.35434,3.73123 z"
id="path1-5-7"
style="fill:#fdd835;fill-opacity:1;stroke-width:3.99934;filter:url(#filter13-2)"
transform="matrix(0.256099,-0.0405621,0.0405621,0.256099,64.048763,73.297633)" />
</g>
<g
id="g2-2-0"
transform="matrix(1.594384,0,0,1.5943814,-70.782467,-85.591264)">
<path
id="path1-2-6-0-6"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter2-3-5)"
d="m 131.95298,130.05572 -16.01513,5.95434 4.06075,12.18394 h 18 z m -66.03453,3.06114 c 0.591926,1.32709 -0.153511,3.3108 -2.919861,6.07714 L 53.999,148.19354 71.998589,148.194 84.06424,136.11351 Z"
sodipodi:nodetypes="ccccccscccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-2-7-2-3"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter4-6-7)"
d="m 151.8621,67.80338 c -7.31987,-0.24 -14.58332,5.39078 -16.86328,14.39062 -2.99994,11.999783 -3.0001,12.000123 -9,18.00001 -11.99978,11.9998 -30.00071,18.00011 -66.000018,24 -5.999894,0.95998 -8.997855,3.00041 -11.997802,6.00036 8.311322,0 16.615171,0.002 17.948974,2.99183 l 18.048836,3.00781 c 11.99979,5.99991 19.98068,5.99991 31.98048,0 l 16.01953,-6 c 0,0 6.00011,-24.0001 12,-30 5.99989,-5.999887 6.00011,0 12,0 5.99989,0 11.99805,-6.000167 11.99805,-15.00001 0,-2.99994 0.002,-9.0001 -8.99805,-15 -2.09997,-1.43997 -4.55682,-2.27062 -7.13672,-2.39062 z m -85.765642,65.87696 c 0.0048,0.0269 0.0079,0.0547 0.01172,0.082 -0.0038,-0.0273 -0.0069,-0.0551 -0.01172,-0.082 z m 0.0293,0.54883 c -0.0021,0.0384 -0.004,0.0761 -0.0078,0.11523 0.0038,-0.0391 0.0057,-0.0769 0.0078,-0.11523 z m -0.107422,0.65039 c -0.0073,0.0267 -0.01157,0.0512 -0.01953,0.0781 0.0079,-0.027 0.01231,-0.0515 0.01953,-0.0781 z m -0.654297,1.43555 c -0.222659,0.36603 -0.500167,0.7568 -0.828125,1.16797 0.327872,-0.41123 0.605727,-0.80194 0.828125,-1.16797 z m -1.085937,1.47851 c -0.372584,0.44383 -0.782042,0.90314 -1.279297,1.40039 0.496681,-0.49668 0.907296,-0.9571 1.279297,-1.40039 z"
sodipodi:nodetypes="cccccccccsssccccccccccccccccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-3-2"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter6-0-3)"
d="M 90,70.205078 A 35.999403,35.999385 0 0 0 54,106.20312 c 0,3.59995 0.780871,6.47968 1.380859,9.59961 35.51933,-5.87988 54.359411,-12.05918 64.199221,-21.95898 l 3,-3 C 116.64017,78.243986 103.91976,70.205078 90,70.205078 Z m 77.45117,19.535156 C 165.84103,96.15802 160.92131,100.19531 156,100.19531 c -5.99988,0 -6.00012,-5.999874 -12,0 -3.16399,3.164 -6.30176,11.2911 -8.58594,18.30664 h 0.004 c 2.28351,-7.01319 5.41893,-15.13572 8.58203,-18.29883 5.99988,-5.999869 6.00012,1e-5 12,0 4.9235,0 9.84339,-4.040099 11.45117,-10.462886 z"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
d="m 172.34987,97.828382 c -11.37062,-16.4492 -40.97915,4.018018 -40.97915,4.018018 0,0 -19.73895,13.64478 -23.02883,15.91894 -3.28981,2.27415 -4.30548,7.83811 -4.30548,7.83811 l -3.28987,2.27415 -9.09654,-13.15933 3.289881,-2.27415 c 0,0 5.563959,1.01566 8.853779,-1.25842 0.65795,-0.4548 2.30289,-1.5919 4.2768,-2.9564 -3.76897,0.17459 -7.00575,-0.99143 -8.825099,-3.6233 -4.09339,-5.921678 0.74423,-15.099988 11.271689,-22.377228 10.52745,-7.27725 20.82301,-8.55991 24.91646,-2.63823 1.3645,1.97392 1.74201,4.63002 1.23418,7.412 7.4165,-7.55762 15.21502,-18.78268 8.39257,-28.65213 l 3.28987,-2.27415 27.28962,39.47797 -3.28988,2.27415 m -58.87642,-11.32281 c -7.56662,5.23049 -11.66901,11.9558 -9.62231,14.916638 2.04675,2.96084 9.78772,1.49932 17.35434,-3.731228 7.56662,-5.23049 11.669,-11.9558 9.62231,-14.91664 -2.04675,-2.96084 -9.78773,-1.49926 -17.35434,3.73123 z"
id="path1-5-7-0"
style="fill:#fdd835;fill-opacity:1;stroke-width:3.99934;filter:url(#filter13-2-4)"
transform="matrix(0.256099,-0.0405621,0.0405621,0.256099,64.048763,73.297633)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,784 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
sodipodi:docname="feature_image_transparent.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
id="svg1224"
version="1.1"
viewBox="0 0 270.93333 132.29167"
height="500"
width="1024"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs1218">
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2036"
x="-0.13812872"
y="-0.16452942"
width="1.2762574"
height="1.3290588">
<feFlood
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2026" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2028" />
<feGaussianBlur
in="composite1"
stdDeviation="1.5"
result="blur"
id="feGaussianBlur2030" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2032" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2034" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2965-4"
x="-0.21722835"
y="-0.25923403"
width="1.4344567"
height="1.5184681">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2955-7" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2957-6" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2959-56" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2961-9" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2963-3" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2953-7"
x="-0.32309693"
y="-0.25279658"
width="1.6461939"
height="1.5055932">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2943-4" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2945-5" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2947-2" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2949-5" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2951-4" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2989-7"
x="-0.23252267"
y="-0.46413375"
width="1.4650453"
height="1.9282675">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2979-4" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2981-4" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2983-3" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2985-07" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2987-8" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2977-6"
x="-0.3235366"
y="-0.25277925"
width="1.6470732"
height="1.5055585">
<feFlood
flood-opacity="0.8"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood2967-8" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite2969-84" />
<feGaussianBlur
in="composite1"
stdDeviation="8"
result="blur"
id="feGaussianBlur2971-31" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset2973-4" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite2975-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter1778-20"
x="-0.071003587"
y="-0.3840027"
width="1.1420072"
height="1.7680054">
<feFlood
flood-opacity="0.501961"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1768-6" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="out"
result="composite1"
id="feComposite1770-8" />
<feGaussianBlur
in="composite1"
stdDeviation="5"
result="blur"
id="feGaussianBlur1772-9" />
<feOffset
dx="0"
dy="0"
result="offset"
id="feOffset1774-2" />
<feComposite
in="offset"
in2="SourceGraphic"
operator="atop"
result="composite2"
id="feComposite1776-6" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2-3"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1-6" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1-7" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1-5" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1-3" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2-5" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4-6"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2-2" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2-9" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2-1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3-2" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4-7" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6-0"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4-9" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4-3" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4-6" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5-0" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6-6" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13-2"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12-6" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12-1" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12-8" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12-7" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter2-3-5"
x="-0.057143129"
y="-0.26463369"
width="1.1142863"
height="1.5292674">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood1-6-9" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur1-7-2" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset1-5-2" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite1-3-8" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite2-5-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter4-6-7"
x="-0.040001377"
y="-0.06584548"
width="1.0800028"
height="1.131691">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood2-2-3" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur2-9-6" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset2-1-1" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite3-2-2" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite4-7-9" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter6-0-3"
x="-0.042308918"
y="-0.099385318"
width="1.0846178"
height="1.1987706">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood4-9-1" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur4-3-9" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset4-6-4" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite5-0-7" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite6-6-8" />
</filter>
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter13-2-4"
x="-0.057149831"
y="-0.066851122"
width="1.1142997"
height="1.1337022">
<feFlood
result="flood"
in="SourceGraphic"
flood-opacity="0.258824"
flood-color="rgb(0,0,0)"
id="feFlood12-6-5" />
<feGaussianBlur
result="blur"
in="SourceGraphic"
stdDeviation="2.000000"
id="feGaussianBlur12-1-0" />
<feOffset
result="offset"
in="blur"
dx="0.000000"
dy="0.000000"
id="feOffset12-8-3" />
<feComposite
result="comp1"
operator="out"
in="flood"
in2="offset"
id="feComposite12-7-6" />
<feComposite
result="comp2"
operator="atop"
in="comp1"
in2="SourceGraphic"
id="feComposite13-9-1" />
</filter>
</defs>
<sodipodi:namedview
inkscape:window-maximized="0"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-height="2111"
inkscape:window-width="956"
units="px"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="-747.51288"
inkscape:cx="509.11688"
inkscape:zoom="0.24748737"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata1221">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<g
id="g2-2"
transform="matrix(-1.594384,0,0,1.5943814,341.71584,-85.591264)">
<path
id="path1-2-6-0"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter2-3)"
d="m 131.95298,130.05572 -16.01513,5.95434 4.06075,12.18394 h 18 z m -66.03453,3.06114 c 0.591926,1.32709 -0.153511,3.3108 -2.919861,6.07714 L 53.999,148.19354 71.998589,148.194 84.06424,136.11351 Z"
sodipodi:nodetypes="ccccccscccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-2-7-2"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter4-6)"
d="m 151.8621,67.80338 c -7.31987,-0.24 -14.58332,5.39078 -16.86328,14.39062 -2.99994,11.999783 -3.0001,12.000123 -9,18.00001 -11.99978,11.9998 -30.00071,18.00011 -66.000018,24 -5.999894,0.95998 -8.997855,3.00041 -11.997802,6.00036 8.311322,0 16.615171,0.002 17.948974,2.99183 l 18.048836,3.00781 c 11.99979,5.99991 19.98068,5.99991 31.98048,0 l 16.01953,-6 c 0,0 6.00011,-24.0001 12,-30 5.99989,-5.999887 6.00011,0 12,0 5.99989,0 11.99805,-6.000167 11.99805,-15.00001 0,-2.99994 0.002,-9.0001 -8.99805,-15 -2.09997,-1.43997 -4.55682,-2.27062 -7.13672,-2.39062 z m -85.765642,65.87696 c 0.0048,0.0269 0.0079,0.0547 0.01172,0.082 -0.0038,-0.0273 -0.0069,-0.0551 -0.01172,-0.082 z m 0.0293,0.54883 c -0.0021,0.0384 -0.004,0.0761 -0.0078,0.11523 0.0038,-0.0391 0.0057,-0.0769 0.0078,-0.11523 z m -0.107422,0.65039 c -0.0073,0.0267 -0.01157,0.0512 -0.01953,0.0781 0.0079,-0.027 0.01231,-0.0515 0.01953,-0.0781 z m -0.654297,1.43555 c -0.222659,0.36603 -0.500167,0.7568 -0.828125,1.16797 0.327872,-0.41123 0.605727,-0.80194 0.828125,-1.16797 z m -1.085937,1.47851 c -0.372584,0.44383 -0.782042,0.90314 -1.279297,1.40039 0.496681,-0.49668 0.907296,-0.9571 1.279297,-1.40039 z"
sodipodi:nodetypes="cccccccccsssccccccccccccccccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-3"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter6-0)"
d="M 90,70.205078 A 35.999403,35.999385 0 0 0 54,106.20312 c 0,3.59995 0.780871,6.47968 1.380859,9.59961 35.51933,-5.87988 54.359411,-12.05918 64.199221,-21.95898 l 3,-3 C 116.64017,78.243986 103.91976,70.205078 90,70.205078 Z m 77.45117,19.535156 C 165.84103,96.15802 160.92131,100.19531 156,100.19531 c -5.99988,0 -6.00012,-5.999874 -12,0 -3.16399,3.164 -6.30176,11.2911 -8.58594,18.30664 h 0.004 c 2.28351,-7.01319 5.41893,-15.13572 8.58203,-18.29883 5.99988,-5.999869 6.00012,1e-5 12,0 4.9235,0 9.84339,-4.040099 11.45117,-10.462886 z"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
d="m 172.34987,97.828382 c -11.37062,-16.4492 -40.97915,4.018018 -40.97915,4.018018 0,0 -19.73895,13.64478 -23.02883,15.91894 -3.28981,2.27415 -4.30548,7.83811 -4.30548,7.83811 l -3.28987,2.27415 -9.09654,-13.15933 3.289881,-2.27415 c 0,0 5.563959,1.01566 8.853779,-1.25842 0.65795,-0.4548 2.30289,-1.5919 4.2768,-2.9564 -3.76897,0.17459 -7.00575,-0.99143 -8.825099,-3.6233 -4.09339,-5.921678 0.74423,-15.099988 11.271689,-22.377228 10.52745,-7.27725 20.82301,-8.55991 24.91646,-2.63823 1.3645,1.97392 1.74201,4.63002 1.23418,7.412 7.4165,-7.55762 15.21502,-18.78268 8.39257,-28.65213 l 3.28987,-2.27415 27.28962,39.47797 -3.28988,2.27415 m -58.87642,-11.32281 c -7.56662,5.23049 -11.66901,11.9558 -9.62231,14.916638 2.04675,2.96084 9.78772,1.49932 17.35434,-3.731228 7.56662,-5.23049 11.669,-11.9558 9.62231,-14.91664 -2.04675,-2.96084 -9.78773,-1.49926 -17.35434,3.73123 z"
id="path1-5-7"
style="fill:#fdd835;fill-opacity:1;stroke-width:3.99934;filter:url(#filter13-2)"
transform="matrix(0.256099,-0.0405621,0.0405621,0.256099,64.048763,73.297633)" />
</g>
<g
id="g2-2-0"
transform="matrix(1.594384,0,0,1.5943814,-70.782467,-85.591264)">
<path
id="path1-2-6-0-6"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter2-3-5)"
d="m 131.95298,130.05572 -16.01513,5.95434 4.06075,12.18394 h 18 z m -66.03453,3.06114 c 0.591926,1.32709 -0.153511,3.3108 -2.919861,6.07714 L 53.999,148.19354 71.998589,148.194 84.06424,136.11351 Z"
sodipodi:nodetypes="ccccccscccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-2-7-2-3"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter4-6-7)"
d="m 151.8621,67.80338 c -7.31987,-0.24 -14.58332,5.39078 -16.86328,14.39062 -2.99994,11.999783 -3.0001,12.000123 -9,18.00001 -11.99978,11.9998 -30.00071,18.00011 -66.000018,24 -5.999894,0.95998 -8.997855,3.00041 -11.997802,6.00036 8.311322,0 16.615171,0.002 17.948974,2.99183 l 18.048836,3.00781 c 11.99979,5.99991 19.98068,5.99991 31.98048,0 l 16.01953,-6 c 0,0 6.00011,-24.0001 12,-30 5.99989,-5.999887 6.00011,0 12,0 5.99989,0 11.99805,-6.000167 11.99805,-15.00001 0,-2.99994 0.002,-9.0001 -8.99805,-15 -2.09997,-1.43997 -4.55682,-2.27062 -7.13672,-2.39062 z m -85.765642,65.87696 c 0.0048,0.0269 0.0079,0.0547 0.01172,0.082 -0.0038,-0.0273 -0.0069,-0.0551 -0.01172,-0.082 z m 0.0293,0.54883 c -0.0021,0.0384 -0.004,0.0761 -0.0078,0.11523 0.0038,-0.0391 0.0057,-0.0769 0.0078,-0.11523 z m -0.107422,0.65039 c -0.0073,0.0267 -0.01157,0.0512 -0.01953,0.0781 0.0079,-0.027 0.01231,-0.0515 0.01953,-0.0781 z m -0.654297,1.43555 c -0.222659,0.36603 -0.500167,0.7568 -0.828125,1.16797 0.327872,-0.41123 0.605727,-0.80194 0.828125,-1.16797 z m -1.085937,1.47851 c -0.372584,0.44383 -0.782042,0.90314 -1.279297,1.40039 0.496681,-0.49668 0.907296,-0.9571 1.279297,-1.40039 z"
sodipodi:nodetypes="cccccccccsssccccccccccccccccc"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
id="path1-3-2"
style="fill:#8bc34a;fill-opacity:1;stroke-width:5.99989;filter:url(#filter6-0-3)"
d="M 90,70.205078 A 35.999403,35.999385 0 0 0 54,106.20312 c 0,3.59995 0.780871,6.47968 1.380859,9.59961 35.51933,-5.87988 54.359411,-12.05918 64.199221,-21.95898 l 3,-3 C 116.64017,78.243986 103.91976,70.205078 90,70.205078 Z m 77.45117,19.535156 C 165.84103,96.15802 160.92131,100.19531 156,100.19531 c -5.99988,0 -6.00012,-5.999874 -12,0 -3.16399,3.164 -6.30176,11.2911 -8.58594,18.30664 h 0.004 c 2.28351,-7.01319 5.41893,-15.13572 8.58203,-18.29883 5.99988,-5.999869 6.00012,1e-5 12,0 4.9235,0 9.84339,-4.040099 11.45117,-10.462886 z"
transform="matrix(0.2561001,-0.04056227,0.04056227,0.2561001,77.322414,74.043198)" />
<path
d="m 172.34987,97.828382 c -11.37062,-16.4492 -40.97915,4.018018 -40.97915,4.018018 0,0 -19.73895,13.64478 -23.02883,15.91894 -3.28981,2.27415 -4.30548,7.83811 -4.30548,7.83811 l -3.28987,2.27415 -9.09654,-13.15933 3.289881,-2.27415 c 0,0 5.563959,1.01566 8.853779,-1.25842 0.65795,-0.4548 2.30289,-1.5919 4.2768,-2.9564 -3.76897,0.17459 -7.00575,-0.99143 -8.825099,-3.6233 -4.09339,-5.921678 0.74423,-15.099988 11.271689,-22.377228 10.52745,-7.27725 20.82301,-8.55991 24.91646,-2.63823 1.3645,1.97392 1.74201,4.63002 1.23418,7.412 7.4165,-7.55762 15.21502,-18.78268 8.39257,-28.65213 l 3.28987,-2.27415 27.28962,39.47797 -3.28988,2.27415 m -58.87642,-11.32281 c -7.56662,5.23049 -11.66901,11.9558 -9.62231,14.916638 2.04675,2.96084 9.78772,1.49932 17.35434,-3.731228 7.56662,-5.23049 11.669,-11.9558 9.62231,-14.91664 -2.04675,-2.96084 -9.78773,-1.49926 -17.35434,3.73123 z"
id="path1-5-7-0"
style="fill:#fdd835;fill-opacity:1;stroke-width:3.99934;filter:url(#filter13-2-4)"
transform="matrix(0.256099,-0.0405621,0.0405621,0.256099,64.048763,73.297633)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

2243
graphics/ic_launcher_sc.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 68 KiB

97
graphics/icon_gen.sh Executable file
View File

@ -0,0 +1,97 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
automatic_commit="$1"
SCHILDI_ROOT="$mydir/.."
source "$SCHILDI_ROOT/merge_helpers.sh"
if [[ "$automatic_commit" == [Yy]* ]]; then
forelement_repos check_clean_git
fi
export_rect() {
w="$1"
h="$2"
in="$3"
out="$4"
inkscape -w "$w" -h "$h" --export-filename="$out" -C "$in"
}
export_square() {
size="$1"
in="$2"
out="$3"
export_rect "$1" "$size" "$in" "$out"
}
repo_dir="$SCHILDI_ROOT/element-web"
base_out="$repo_dir/res/vector-icons"
for i in 1024 120 150 152 180 24 300 44 48 50 76 88; do
export_square "$i" "$mydir/ic_launcher_sc.svg" "$base_out/$i.png"
done
for i in 114 120 144 152 180 57 60 72 76; do
export_square "$i" "$mydir/store_icon.svg" "$base_out/apple-touch-icon-$i.png"
done
for i in 150 310 70; do
export_square "$i" "$mydir/store_icon.svg" "$base_out/mstile-$i.png"
done
# TODO fix measures of input to have correct measures for export here again
export_rect 1024 500 "$mydir/feature_image_transparent.svg" "$base_out/1240x600.png"
export_rect 512 250 "$mydir/feature_image_transparent.svg" "$base_out/620x300.png"
export_rect 256 125 "$mydir/feature_image.svg" "$base_out/mstile-310x150.png"
magick "$base_out/48.png" "$base_out/favicon.ico"
rm "$base_out/48.png" # this was only created for favicon.ico
for f in "$base_out"/*.png; do
pngcrush -ow "$f"
done
cp "$mydir/ic_launcher_sc.svg" "$repo_dir/res/themes/element/img/logos/element-logo.svg"
repo_dir="$SCHILDI_ROOT/element-desktop"
base_out="$repo_dir/res/img"
export_square 256 "$mydir/ic_launcher_sc.svg" "$base_out/element.png"
magick "$base_out/element.png" "$base_out/element.ico"
for f in "$base_out"/*.png; do
pngcrush -ow "$f"
done
base_out="$repo_dir/build"
for i in 16 24 48 64 96 128 256 512 1024; do
export_square "$i" "$mydir/ic_launcher_sc.svg" "$base_out/icons/$i"x"$i.png"
done
export_square "320" "$mydir/ic_launcher_sc.svg" "$base_out/install-spinner.png"
pngcrush "$base_out/install-spinner.png"
magick "$base_out/install-spinner.png" "$base_out/install-spinner.gif"
rm "$base_out/install-spinner.png"
magick "$base_out/icons/256x256.png" "$base_out/icon.ico"
magick "$base_out/icons/1024x1024.png" "$base_out/icon.icns"
rm "$base_out/icons/1024x1024.png"
for f in "$base_out/icons"/*.png; do
pngcrush -ow "$f"
done
if [[ "$automatic_commit" == [Yy]* ]]; then
forelement_repos commit_if_dirty "Automatic icon update"
fi

1
graphics/store_icon.svg Symbolic link
View File

@ -0,0 +1 @@
ic_launcher_sc.svg

View File

@ -1 +1,3 @@
{}
{
"Welcome to SchildiChat": "Welcome to SchildiChat"
}

View File

@ -1,8 +1,10 @@
#!/bin/bash
SCHILDI_ROOT="$(dirname "$(realpath "$0")")"
if [ -z "$SCHILDI_ROOT" ]; then
SCHILDI_ROOT="$(dirname "$(realpath "$0")")"
fi
branch=${BRANCH:-"sc"}
branch=${BRANCH:-"lite"}
i18n_helper_path="$SCHILDI_ROOT/i18n-helper/index.js"
i18n_path="src/i18n/strings"
@ -12,16 +14,16 @@ yarn=yarnpkg
add_upstream() {
if git remote | grep -q upstream; then
echo "Remote named upstream already exists!"
return 1
echo "Remote named upstream already exists, deleting..."
git remote remove upstream
fi
local sc_remote="$(git remote -v|grep origin|grep fetch|sed 's|.*\t\(.*\) (fetch)|\1|')"
if echo "$sc_remote" | grep -q matrix; then
if echo "$sc_remote" | grep -q matrix-js-sdk; then
# matrix.org repo
local upstream_remote="$(echo "$sc_remote" | sed 's|SchildiChat|matrix-org|')"
elif echo "$sc_remote" | grep -q element; then
elif echo "$sc_remote" | grep -q "element\\|matrix-react-sdk"; then
# vector-im repo
local upstream_remote="$(echo "$sc_remote" | sed 's|SchildiChat|vector-im|')"
local upstream_remote="$(echo "$sc_remote" | sed 's|SchildiChat|element-hq|')"
else
echo "Don't know upstream repo for $sc_remote"
return 1
@ -32,36 +34,24 @@ add_upstream() {
}
forall_repos() {
pushd "$SCHILDI_ROOT/matrix-js-sdk" > /dev/null
"$@"
popd > /dev/null
pushd "$SCHILDI_ROOT/matrix-react-sdk" > /dev/null
"$@"
popd > /dev/null
pushd "$SCHILDI_ROOT/element-web" > /dev/null
"$@"
popd > /dev/null
pushd "$SCHILDI_ROOT/element-desktop" > /dev/null
"$@"
popd > /dev/null
for repo in "matrix-js-sdk" "matrix-react-sdk" "element-web" "element-desktop"; do
pushd "$SCHILDI_ROOT/$repo" > /dev/null
"$@"
popd > /dev/null
done
}
forelement_repos() {
pushd "$SCHILDI_ROOT/element-web" > /dev/null
"$@"
popd > /dev/null
pushd "$SCHILDI_ROOT/element-desktop" > /dev/null
"$@"
popd > /dev/null
for repo in "element-web" "element-desktop"; do
pushd "$SCHILDI_ROOT/$repo" > /dev/null
"$@"
popd > /dev/null
done
}
ensure_yes() {
read -e -p "$1 [y/N] " choice
if [[ "$choice" != [Yy]* ]]; then
exit 1
fi
@ -217,10 +207,10 @@ revert_packagejson_changes() {
apply_packagejson_overlay() {
local orig_path="$1"
local overlay_path="$2"
local overlay_path="../overlay/$(basename "$PWD")/package.json"
# see: https://stackoverflow.com/a/24904276
new_content=`jq -s '.[0] * .[1]' "$orig_path" "$overlay_path"`
new_content=`jq -s '.[0] * .[1]' "$orig_path" "$overlay_path" | sed 's| | |g'`
echo "$new_content" > "$orig_path"
git add "$orig_path"
@ -240,7 +230,7 @@ automatic_packagejson_adjustment() {
local versions
get_current_versions
forelement_repos apply_packagejson_overlay "package.json" "overlay-package.json"
forelement_repos apply_packagejson_overlay "package.json"
forelement_repos write_version "package.json"
}
@ -261,3 +251,51 @@ get_current_mxsdk_tags() {
current_mxreactsdk_tag="v$(cat "$SCHILDI_ROOT/element-web/package.json" | jq '.dependencies["matrix-react-sdk"]' -r)"
current_mxjssdk_tag="v$(cat "$SCHILDI_ROOT/element-web/package.json" | jq '.dependencies["matrix-js-sdk"]' -r)"
}
apply_patches() {
local repo="$(realpath "$1")"
local patch_dir="$SCHILDI_ROOT/patches/$(basename "$1")"
if [ ! -d "$repo" ]; then
echo "Unknown repo: $repo"
return 1
fi
if [ ! -d "$patch_dir" ]; then
echo "No patches found at $patch_dir"
return 1
fi
pushd "$repo"
for patch in "$patch_dir"/*; do
echo "Applying $patch to $repo..."
git am "$patch" || on_apply_patch_fail_try_original_commit "$patch" "$repo"
done
popd
}
on_apply_patch_fail_try_original_commit() {
local patch="$1"
local repo="$2"
local orig_commit="$(head -n 1 "$patch"|sed 's|From ||;s| .*||')"
echo "Applying $patch failed, trying with original commit $orig_commit..."
git am --abort
git cherry-pick "$orig_commit" || on_apply_patch_fail "$patch" "$repo" "$orig_commit"
}
on_apply_patch_fail() {
local patch="$1"
local repo="$2"
local orig_commit="$3"
echo "----------------------------------"
echo "Applying patch failed, please commit manually!"
echo "Patch: $patch"
echo "Repo: $repo"
echo "Original commit: $(head -n 1 "$patch"|sed 's|From ||;s| .*||')"
echo "----------------------------------"
read -p "Press enter after committing resolved conflicts: "
}
commit_if_dirty() {
local message="$1"
# see: https://devops.stackexchange.com/a/5443
git add -A
git diff-index --quiet HEAD || git commit -m "$message"
}

View File

@ -4,55 +4,56 @@ set -e
mydir="$(dirname "$(realpath "$0")")"
# Update patches?
if [ "$1" = "-u" ]; then
keep_patches=0
shift
else
keep_patches=1
fi
pushd "$mydir" > /dev/null
source ./merge_helpers.sh
# Check branch
check_branch $branch
forall_repos check_branch $branch
# Persist current state
if [ "$keep_patches" = 0 ]; then
./generate_patches.sh
fi
# Ensure clean git state
forall_repos check_clean_git
# Abandon all local submodule state
forall_repos git reset --hard
git submodule update -f --recursive
# Fetch upstream
forall_repos git fetch upstream
# Automatic reversions
automatic_i18n_reversion
automatic_packagejson_reversion
# Merge upstream
# Check if specific version to merge passed
if [ -z "$1" ]; then
get_latest_upstream_tag
else
latest_upstream_tag="$1"
fi
forelement_repos git merge "$latest_upstream_tag"
sc_branch_name="sc_$latest_upstream_tag"
forelement_repos git checkout "$latest_upstream_tag" -B "$sc_branch_name"
get_current_mxsdk_tags
pushd "matrix-js-sdk" > /dev/null
git merge "$current_mxjssdk_tag"
git checkout "$current_mxjssdk_tag" -B "$sc_branch_name"
popd > /dev/null
pushd "matrix-react-sdk" > /dev/null
git merge "$current_mxreactsdk_tag"
git checkout "$current_mxreactsdk_tag" -B "$sc_branch_name"
popd > /dev/null
# Refresh environment
make clean
make setup
forall_repos commit_if_dirty "Automatic setup commit"
# Automatic adjustments
automatic_i18n_adjustment
automatic_packagejson_adjustment
# Automatic theme update
pushd "matrix-react-sdk" > /dev/null
./theme.sh y
popd > /dev/null
./apply_patches.sh
popd > /dev/null

View File

@ -0,0 +1,10 @@
{
"name": "schildichat-desktop-alpha",
"productName": "SchildiChatAlpha",
"description": "A Matrix Client based on Element with some changes and tweaks",
"author": "SchildiChat",
"repository": {
"url": "https://github.com/SchildiChat/schildichat-desktop"
},
"homepage": "https://schildi.chat/"
}

View File

@ -0,0 +1,8 @@
{
"name": "schildichat-web-alpha",
"description": "A Matrix Client based on Element with some changes and tweaks",
"author": "SchildiChat",
"repository": {
"url": "https://github.com/SchildiChat/schildichat-desktop"
}
}

View File

@ -0,0 +1,62 @@
From e326039d1acbc5da0cdd95dc235646202264d3c3 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sat, 2 Dec 2023 12:57:26 +0100
Subject: Add back schildi fetch-package.ts modifications
---
scripts/fetch-package.ts | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/scripts/fetch-package.ts b/scripts/fetch-package.ts
index 54da3f3..354f039 100644
--- a/scripts/fetch-package.ts
+++ b/scripts/fetch-package.ts
@@ -55,6 +55,7 @@ async function main(): Promise<number | undefined> {
let filename: string | undefined;
let url: string | undefined;
let setVersion = false;
+ const sc = true;
while (process.argv.length > 2) {
switch (process.argv[2]) {
@@ -83,7 +84,9 @@ async function main(): Promise<number | undefined> {
process.argv.shift();
}
- if (targetVersion === undefined) {
+ if (sc) {
+ // nothing
+ } else if (targetVersion === undefined) {
targetVersion = "v" + riotDesktopPackageJson.version;
} else if (targetVersion !== "develop") {
setVersion = true; // version was specified
@@ -93,7 +96,7 @@ async function main(): Promise<number | undefined> {
filename = "develop.tar.gz";
url = DEVELOP_TGZ_URL;
verify = false; // develop builds aren't signed
- } else if (targetVersion.includes("://")) {
+ } else if (targetVersion?.includes("://")) {
filename = targetVersion.substring(targetVersion.lastIndexOf("/") + 1);
url = targetVersion;
verify = false; // manually verified
@@ -145,12 +148,15 @@ async function main(): Promise<number | undefined> {
}
let haveDeploy = false;
- let expectedDeployDir = path.join(deployDir, path.basename(filename).replace(/\.tar\.gz/, ""));
+ let expectedDeployDir = sc ? "../element-web/webapp" : path.join(deployDir, path.basename(filename).replace(/\.tar\.gz/, ""));
try {
await fs.opendir(expectedDeployDir);
console.log(expectedDeployDir + "already exists");
haveDeploy = true;
- } catch (e) {}
+ } catch (e) {
+ console.log("Not a valid webapp dir: " + expectedDeployDir, e);
+ return 1;
+ }
if (!haveDeploy) {
const outPath = path.join(pkgDir, filename);
--
2.47.0

View File

@ -0,0 +1,56 @@
From 63901825c14da3ec6f59017d2696ad98be91d2e0 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Thu, 9 May 2024 09:21:21 +0200
Subject: Add fields for media caption support
---
src/@types/media.ts | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/@types/media.ts b/src/@types/media.ts
index 1128b40d3..d85526642 100644
--- a/src/@types/media.ts
+++ b/src/@types/media.ts
@@ -189,6 +189,9 @@ export interface FileContent extends BaseContent {
* One of: [m.file].
*/
msgtype: MsgType.File;
+
+ format?: string;
+ formatted_body?: string;
}
/**
@@ -205,6 +208,9 @@ export interface ImageContent extends BaseContent {
* One of: [m.image].
*/
msgtype: MsgType.Image;
+
+ format?: string;
+ formatted_body?: string;
}
/**
@@ -221,6 +227,9 @@ export interface AudioContent extends BaseContent {
* One of: [m.audio].
*/
msgtype: MsgType.Audio;
+
+ format?: string;
+ formatted_body?: string;
}
/**
@@ -237,6 +246,9 @@ export interface VideoContent extends BaseContent {
* One of: [m.video].
*/
msgtype: MsgType.Video;
+
+ format?: string;
+ formatted_body?: string;
}
/**
--
2.47.0

View File

@ -0,0 +1,29 @@
From 913772283fd2b9f682a11a594061a6a1189b7869 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Tue, 18 Jan 2022 13:28:22 +0100
Subject: Disable sticky rooms
---
src/stores/room-list/algorithms/Algorithm.ts | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts
index c3450d70cf..e296676149 100644
--- a/src/stores/room-list/algorithms/Algorithm.ts
+++ b/src/stores/room-list/algorithms/Algorithm.ts
@@ -159,8 +159,10 @@ export class Algorithm extends EventEmitter {
this.recalculateActiveCallRooms(tagId);
}
- private updateStickyRoom(val: Room | null): void {
- this.doUpdateStickyRoom(val);
+ private updateStickyRoom(val: Room) {
+ // Schildi: we don't want it sticky
+ this.doUpdateStickyRoom(null);
+ //this.doUpdateStickyRoom(val);
this._lastStickyRoom = null; // clear to indicate we're done changing
}
--
2.47.0

View File

@ -0,0 +1,263 @@
From e2045dd5dcbd82f7b5c4f98d89b258cc304d3e26 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 5 May 2024 10:12:17 +0200
Subject: Bring back unified room list
Remaining TODO:
- Hook up setting to UI again (better with own SC-specific screen?)
Co-authored-by: su-ex <codeworks@supercable.onl>
---
src/components/views/rooms/RoomList.tsx | 39 +++++++++++++++++++-
src/settings/Settings.tsx | 8 ++++
src/stores/room-list/RoomListStore.ts | 19 +++++++++-
src/stores/room-list/algorithms/Algorithm.ts | 20 ++++++++--
src/stores/room-list/models.ts | 2 +
5 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx
index e27b2ca03f..311a54d9d8 100644
--- a/src/components/views/rooms/RoomList.tsx
+++ b/src/components/views/rooms/RoomList.tsx
@@ -72,11 +72,13 @@ interface IState {
sublists: ITagMap;
currentRoomId?: string;
suggestedRooms: ISuggestedRoom[];
+ unifiedRoomList: boolean;
}
export const TAG_ORDER: TagID[] = [
DefaultTagID.Invite,
DefaultTagID.Favourite,
+ DefaultTagID.Unified,
DefaultTagID.DM,
DefaultTagID.Untagged,
DefaultTagID.Conference,
@@ -89,6 +91,7 @@ export const TAG_ORDER: TagID[] = [
// but we'd have to make sure that rooms you weren't in were hidden.
];
const ALWAYS_VISIBLE_TAGS: TagID[] = [DefaultTagID.DM, DefaultTagID.Untagged];
+const ALWAYS_VISIBLE_UNIFIED_TAGS: TagID[] = [DefaultTagID.Unified];
interface ITagAesthetics {
sectionLabel: TranslationKey;
@@ -366,6 +369,17 @@ const UntaggedAuxButton: React.FC<IAuxButtonProps> = ({ tabIndex }) => {
return null;
};
+const UnifiedAuxButton: React.FC<IAuxButtonProps> = (iAuxButtonProps: IAuxButtonProps) => {
+ return (
+ <>
+ {/* eslint-disable-next-line new-cap */}
+ {DmAuxButton(iAuxButtonProps)}
+ {/* eslint-disable-next-line new-cap */}
+ {UntaggedAuxButton(iAuxButtonProps)}
+ </>
+ );
+};
+
const TAG_AESTHETICS: TagAestheticsMap = {
[DefaultTagID.Invite]: {
sectionLabel: _td("action|invites_list"),
@@ -383,6 +397,12 @@ const TAG_AESTHETICS: TagAestheticsMap = {
defaultHidden: false,
AuxButtonComponent: DmAuxButton,
},
+ [DefaultTagID.Unified]: {
+ sectionLabel: _td("Normal priority"),
+ isInvite: false,
+ defaultHidden: false,
+ AuxButtonComponent: UnifiedAuxButton,
+ },
[DefaultTagID.Conference]: {
sectionLabel: _td("voip|metaspace_video_rooms|conference_room_section"),
isInvite: false,
@@ -421,6 +441,7 @@ const TAG_AESTHETICS: TagAestheticsMap = {
export default class RoomList extends React.PureComponent<IProps, IState> {
private dispatcherRef?: string;
+ private readonly unifiedRoomListWatcherRef: string;
private treeRef = createRef<HTMLDivElement>();
public static contextType = MatrixClientContext;
@@ -432,7 +453,14 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
this.state = {
sublists: {},
suggestedRooms: SpaceStore.instance.suggestedRooms,
+ unifiedRoomList: SettingsStore.getValue("unifiedRoomList"),
};
+
+ this.unifiedRoomListWatcherRef = SettingsStore.watchSetting(
+ "unifiedRoomList",
+ null,
+ this.onUnifiedRoomListChange,
+ );
}
public componentDidMount(): void {
@@ -447,9 +475,16 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
SpaceStore.instance.off(UPDATE_SUGGESTED_ROOMS, this.updateSuggestedRooms);
RoomListStore.instance.off(LISTS_UPDATE_EVENT, this.updateLists);
if (this.dispatcherRef) defaultDispatcher.unregister(this.dispatcherRef);
+ SettingsStore.unwatchSetting(this.unifiedRoomListWatcherRef);
SdkContextClass.instance.roomViewStore.off(UPDATE_EVENT, this.onRoomViewStoreUpdate);
}
+ private onUnifiedRoomListChange = (): void => {
+ this.setState({
+ unifiedRoomList: SettingsStore.getValue("unifiedRoomList"),
+ });
+ };
+
private onRoomViewStoreUpdate = (): void => {
this.setState({
currentRoomId: SdkContextClass.instance.roomViewStore.getRoomId() ?? undefined,
@@ -590,7 +625,9 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
const aesthetics = TAG_AESTHETICS[orderedTagId];
if (!aesthetics) throw new Error(`Tag ${orderedTagId} does not have aesthetics`);
- let alwaysVisible = ALWAYS_VISIBLE_TAGS.includes(orderedTagId);
+ let alwaysVisible = (
+ this.state.unifiedRoomList ? ALWAYS_VISIBLE_UNIFIED_TAGS : ALWAYS_VISIBLE_TAGS
+ ).includes(orderedTagId);
if (
(this.props.activeSpace === MetaSpace.Favourites && orderedTagId !== DefaultTagID.Favourite) ||
(this.props.activeSpace === MetaSpace.People && orderedTagId !== DefaultTagID.DM) ||
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx
index 76bb109cac..7aea53ceea 100644
--- a/src/settings/Settings.tsx
+++ b/src/settings/Settings.tsx
@@ -191,6 +191,14 @@ export interface IFeature extends Omit<IBaseSetting<boolean>, "isFeature"> {
export type ISetting = IBaseSetting | IFeature;
export const SETTINGS: { [setting: string]: ISetting } = {
+ // SC settings start
+ "unifiedRoomList": {
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ displayName: _td("Show people and rooms in a combined list"),
+ default: true,
+ controller: new ReloadOnChangeController(),
+ },
+ // SC settings end
"feature_video_rooms": {
isFeature: true,
labsGroup: LabGroup.VoiceAndVideo,
diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts
index 53377e0a01..381187b85c 100644
--- a/src/stores/room-list/RoomListStore.ts
+++ b/src/stores/room-list/RoomListStore.ts
@@ -500,6 +500,9 @@ export class RoomListStoreClass extends AsyncStoreWithClient<IState> implements
this.setAndPersistListOrder(tag, listOrder);
}
}
+
+ // SC: Unified list for DMs and groups
+ this.algorithm.setUnifiedRoomList(SettingsStore.getValue("unifiedRoomList"));
}
private onAlgorithmListUpdated = (forceUpdate: boolean): void => {
@@ -613,7 +616,21 @@ export class RoomListStoreClass extends AsyncStoreWithClient<IState> implements
*/
public getTagsForRoom(room: Room): TagID[] {
const algorithmTags = this.algorithm.getTagsForRoom(room);
- if (!algorithmTags) return [DefaultTagID.Untagged];
+ if (!algorithmTags) {
+ if (SettingsStore.getValue("unifiedRoomList")) {
+ return [DefaultTagID.Unified];
+ } else {
+ return [DefaultTagID.Untagged];
+ }
+ }
+ const dmTagIndex = algorithmTags.indexOf(DefaultTagID.DM);
+ if (dmTagIndex !== -1) {
+ algorithmTags[dmTagIndex] = DefaultTagID.Unified;
+ }
+ const untaggedTagIndex = algorithmTags.indexOf(DefaultTagID.Untagged);
+ if (untaggedTagIndex !== -1) {
+ algorithmTags[untaggedTagIndex] = DefaultTagID.Unified;
+ }
return algorithmTags;
}
diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts
index e296676149..06147137b3 100644
--- a/src/stores/room-list/algorithms/Algorithm.ts
+++ b/src/stores/room-list/algorithms/Algorithm.ts
@@ -75,6 +75,7 @@ export class Algorithm extends EventEmitter {
* Set to true to suspend emissions of algorithm updates.
*/
public updatesInhibited = false;
+ private unifiedRoomList: boolean = true;
public start(): void {
CallStore.instance.on(CallStoreEvent.ConnectedCalls, this.onConnectedCalls);
@@ -106,6 +107,10 @@ export class Algorithm extends EventEmitter {
return this._cachedRooms;
}
+ public setUnifiedRoomList(unifiedRoomList: boolean): void {
+ this.unifiedRoomList = unifiedRoomList;
+ }
+
/**
* Awaitable version of the sticky room setter.
* @param val The new room to sticky.
@@ -513,7 +518,10 @@ export class Algorithm extends EventEmitter {
}
if (!inTag) {
- if (DMRoomMap.shared().getUserIdForRoomId(room.roomId)) {
+ if (this.unifiedRoomList) {
+ // SC: Unified room list for DMs and groups
+ newTags[DefaultTagID.Unified].push(room);
+ } else if (DMRoomMap.shared().getUserIdForRoomId(room.roomId)) {
newTags[DefaultTagID.DM].push(room);
} else {
newTags[DefaultTagID.Untagged].push(room);
@@ -557,7 +565,13 @@ export class Algorithm extends EventEmitter {
tags.push(...this.getTagsOfJoinedRoom(room));
}
- if (!tags.length) tags.push(DefaultTagID.Untagged);
+ if (!tags.length) {
+ if (this.unifiedRoomList) {
+ tags.push(DefaultTagID.Unified);
+ } else {
+ tags.push(DefaultTagID.Untagged);
+ }
+ }
return tags;
}
@@ -567,7 +581,7 @@ export class Algorithm extends EventEmitter {
if (tags.length === 0) {
// Check to see if it's a DM if it isn't anything else
- if (DMRoomMap.shared().getUserIdForRoomId(room.roomId)) {
+ if (DMRoomMap.shared().getUserIdForRoomId(room.roomId) && !this.unifiedRoomList) {
tags = [DefaultTagID.DM];
}
}
diff --git a/src/stores/room-list/models.ts b/src/stores/room-list/models.ts
index 50cecda665..8efc2d040d 100644
--- a/src/stores/room-list/models.ts
+++ b/src/stores/room-list/models.ts
@@ -13,6 +13,7 @@ export enum DefaultTagID {
LowPriority = "m.lowpriority",
Favourite = "m.favourite",
DM = "im.vector.fake.direct",
+ Unified = "chat.schildi.fake.unified",
Conference = "im.vector.fake.conferences",
ServerNotice = "m.server_notice",
Suggested = "im.vector.fake.suggested",
@@ -21,6 +22,7 @@ export enum DefaultTagID {
export const OrderedDefaultTagIDs = [
DefaultTagID.Invite,
DefaultTagID.Favourite,
+ DefaultTagID.Unified,
DefaultTagID.DM,
DefaultTagID.Conference,
DefaultTagID.Untagged,
--
2.47.0

View File

@ -0,0 +1,25 @@
From 1d3847da55e91dfc5e555e69fbadcbc1d033a8d9 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 17 Dec 2023 11:11:58 +0100
Subject: Don't sort muted rooms to bottom, I still want to see them.
---
.../room-list/algorithms/list-ordering/OrderingAlgorithm.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts
index 67ee1ca084..67dcaa3855 100644
--- a/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts
+++ b/src/stores/room-list/algorithms/list-ordering/OrderingAlgorithm.ts
@@ -38,7 +38,7 @@ export abstract class OrderingAlgorithm {
}
public get isMutedToBottom(): boolean {
- return this.sortingAlgorithm === SortAlgorithm.Recent;
+ return this.sortingAlgorithm === SortAlgorithm.Recent && false;
}
/**
--
2.47.0

View File

@ -0,0 +1,104 @@
From ac0fb82339fc580da9db60c183a39d72e6fba3ea Mon Sep 17 00:00:00 2001
From: Tulir Asokan <tulir@maunium.net>
Date: Tue, 12 Jul 2022 15:34:57 +0300
Subject: Add support for rendering captions in media messages
---
src/components/views/messages/IBodyProps.ts | 2 ++
src/components/views/messages/MessageEvent.tsx | 15 +++++++++++++++
src/components/views/messages/TextualBody.tsx | 11 +++++++++++
src/utils/FileUtils.ts | 4 +++-
4 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/src/components/views/messages/IBodyProps.ts b/src/components/views/messages/IBodyProps.ts
index e48ba96b56..3caeff225c 100644
--- a/src/components/views/messages/IBodyProps.ts
+++ b/src/components/views/messages/IBodyProps.ts
@@ -51,4 +51,6 @@ export interface IBodyProps {
// Set to `true` to disable interactions (e.g. video controls) and to remove controls from the tab order.
// This may be useful when displaying a preview of the event.
inhibitInteraction?: boolean;
+
+ OrigBodyType?: React.ComponentType<Partial<IBodyProps>>;
}
diff --git a/src/components/views/messages/MessageEvent.tsx b/src/components/views/messages/MessageEvent.tsx
index 1a5d09e415..bfe908aacc 100644
--- a/src/components/views/messages/MessageEvent.tsx
+++ b/src/components/views/messages/MessageEvent.tsx
@@ -175,6 +175,15 @@ export default class MessageEvent extends React.Component<IProps> implements IMe
}
}
+ // @ts-ignore
+ const hasCaption = [MsgType.Image, MsgType.File, MsgType.Audio, MsgType.Video].includes(msgtype)
+ && content.filename && content.filename !== content.body;
+ let OrigBodyType;
+ if (hasCaption) {
+ OrigBodyType = BodyType
+ BodyType = CaptionBody
+ }
+
if (SettingsStore.getValue("feature_mjolnir")) {
const key = `mx_mjolnir_render_${this.props.mxEvent.getRoomId()}__${this.props.mxEvent.getId()}`;
const allowRender = localStorage.getItem(key) === "true";
@@ -208,7 +217,13 @@ export default class MessageEvent extends React.Component<IProps> implements IMe
getRelationsForEvent={this.props.getRelationsForEvent}
isSeeingThroughMessageHiddenForModeration={this.props.isSeeingThroughMessageHiddenForModeration}
inhibitInteraction={this.props.inhibitInteraction}
+ OrigBodyType={OrigBodyType}
/>
) : null;
}
}
+
+const CaptionBody: React.FunctionComponent<IBodyProps & {OrigBodyType: React.ComponentType<Partial<IBodyProps>>}> = ({OrigBodyType, ...props}) => (<div className="mx_EventTile_content">
+ <OrigBodyType {...props}/>
+ <TextualBody {...{...props, ref: undefined}}/>
+</div>)
diff --git a/src/components/views/messages/TextualBody.tsx b/src/components/views/messages/TextualBody.tsx
index 8b7bfb9a5a..a8890303f8 100644
--- a/src/components/views/messages/TextualBody.tsx
+++ b/src/components/views/messages/TextualBody.tsx
@@ -557,6 +557,9 @@ export default class TextualBody extends React.Component<IBodyProps, IState> {
const isNotice = content.msgtype === MsgType.Notice;
const isEmote = content.msgtype === MsgType.Emote;
+ // @ts-ignore
+ const isCaption = [MsgType.Image, MsgType.File, MsgType.Audio, MsgType.Video].includes(content.msgtype);
+
const willHaveWrapper =
this.props.replacingEventId || this.props.isSeeingThroughMessageHiddenForModeration || isEmote;
@@ -635,6 +638,14 @@ export default class TextualBody extends React.Component<IBodyProps, IState> {
</div>
);
}
+ if (isCaption) {
+ return (
+ <div className="mx_MTextBody mx_EventTile_caption" onClick={this.onBodyLinkClick}>
+ { body }
+ { widgets }
+ </div>
+ );
+ }
return (
<div className="mx_MTextBody mx_EventTile_content" onClick={this.onBodyLinkClick}>
{body}
diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts
index 194cb31d20..0c0aec2138 100644
--- a/src/utils/FileUtils.ts
+++ b/src/utils/FileUtils.ts
@@ -38,7 +38,9 @@ export function presentableTextForFile(
shortened = false,
): string {
let text = fallbackText;
- if (content.body?.length) {
+ if (content.filename?.length) {
+ text = content.filename
+ } else if (content.body?.length) {
// The content body should be the name of the file including a
// file extension.
text = content.body;
--
2.47.0

View File

@ -0,0 +1,29 @@
From 0f0f80d270be5c88b0b762b51fe570c11b0bea7f Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Thu, 14 Dec 2023 10:32:10 +0100
Subject: Don't preview reactions
---
src/stores/room-list/MessagePreviewStore.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/stores/room-list/MessagePreviewStore.ts b/src/stores/room-list/MessagePreviewStore.ts
index e0e06ec980..7ee27f8402 100644
--- a/src/stores/room-list/MessagePreviewStore.ts
+++ b/src/stores/room-list/MessagePreviewStore.ts
@@ -57,10 +57,12 @@ const PREVIEWS: Record<
isState: false,
previewer: new StickerEventPreview(),
},
+ /*
"m.reaction": {
isState: false,
previewer: new ReactionEventPreview(),
},
+ */
[M_POLL_START.name]: {
isState: false,
previewer: new PollStartEventPreview(),
--
2.47.0

View File

@ -0,0 +1,30 @@
From bc49b8d30cf7e0da038fac992ee2ff04c9dc91aa Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Wed, 17 Nov 2021 12:50:25 +0100
Subject: Hide the "mute" notification state the same way as the other states
This can get in the way of the "marked as unread" icon otherwise.
Furthermore, I didn't really like it showing there persistently either
way.
---
src/components/views/rooms/RoomTile.tsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx
index 93fb42f447..09df8eaac9 100644
--- a/src/components/views/rooms/RoomTile.tsx
+++ b/src/components/views/rooms/RoomTile.tsx
@@ -304,7 +304,9 @@ export class RoomTile extends React.PureComponent<ClassProps, State> {
// Only show the icon by default if the room is overridden to muted.
// TODO: [FTUE Notifications] Probably need to detect global mute state
- mx_RoomTile_notificationsButton_show: state === RoomNotifState.Mute,
+ //mx_RoomTile_notificationsButton_show: state === RoomNotifState.Mute,
+ // SchildiChat: never show the icon by default. This gets in the way of the "marked as unread" icon.
+ mx_RoomTile_notificationsButton_show: false,
});
return (
--
2.47.0

View File

@ -0,0 +1,25 @@
From 10b23f715bf5115715dca07676ca467a6433c9c9 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Fri, 10 May 2024 18:58:32 +0200
Subject: Allow muted rooms to render as unread
---
src/RoomNotifs.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/RoomNotifs.ts b/src/RoomNotifs.ts
index cc027c9682..c4c31a51cb 100644
--- a/src/RoomNotifs.ts
+++ b/src/RoomNotifs.ts
@@ -255,7 +255,7 @@ export function determineUnreadState(
return { symbol: "!", count: 1, level: NotificationLevel.Highlight };
}
- if (getRoomNotifsState(room.client, room.roomId) === RoomNotifState.Mute) {
+ if (false && getRoomNotifsState(room.client, room.roomId) === RoomNotifState.Mute) {
return { symbol: null, count: 0, level: NotificationLevel.None };
}
--
2.47.0

View File

@ -0,0 +1,25 @@
From 641cd216c155318e35eabef30761613706e36c87 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 30 Aug 2020 15:33:01 +0200
Subject: Increase default visible tiles
---
src/stores/room-list/ListLayout.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts
index ff60309e08..275b6d330b 100644
--- a/src/stores/room-list/ListLayout.ts
+++ b/src/stores/room-list/ListLayout.ts
@@ -74,7 +74,7 @@ export class ListLayout {
public get defaultVisibleTiles(): number {
// This number is what "feels right", and mostly subject to design's opinion.
- return 8;
+ return 50;
}
public tilesWithPadding(n: number, paddingPx: number): number {
--
2.47.0

View File

@ -0,0 +1,92 @@
From 2203554625f7c8d924981b3cd03b1389dc6873d9 Mon Sep 17 00:00:00 2001
From: su-ex <codeworks@supercable.onl>
Date: Sun, 26 May 2024 10:43:36 +0200
Subject: Bring back showSpaceDMBadges setting, force-enabled for now
TODO settings UI
Co-authored-by: SpiritCroc <dev@spiritcroc.de>
---
src/settings/Settings.tsx | 5 +++++
src/stores/spaces/SpaceStore.ts | 25 +++++++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx
index 7aea53ceea..b668c65dfd 100644
--- a/src/settings/Settings.tsx
+++ b/src/settings/Settings.tsx
@@ -198,6 +198,11 @@ export const SETTINGS: { [setting: string]: ISetting } = {
default: true,
controller: new ReloadOnChangeController(),
},
+ "Spaces.showSpaceDMBadges": {
+ displayName: _td("Show notification badges for People in Spaces"),
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ default: true,
+ },
// SC settings end
"feature_video_rooms": {
isFeature: true,
diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts
index 90358f3310..60df05478a 100644
--- a/src/stores/spaces/SpaceStore.ts
+++ b/src/stores/spaces/SpaceStore.ts
@@ -154,9 +154,17 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
/** Whether the feature flag is set for MSC3946 */
private _msc3946ProcessDynamicPredecessor: boolean = SettingsStore.getValue("feature_dynamic_room_predecessors");
+ // SC start
+ private _showSpaceDMBadges = true;
+ // SC end
+
public constructor() {
super(defaultDispatcher, {});
+ // SC start
+ SettingsStore.monitorSetting("Spaces.showSpaceDMBadges", null);
+ // SC end
+
SettingsStore.monitorSetting("Spaces.allRoomsInHome", null);
SettingsStore.monitorSetting("Spaces.enabledMetaSpaces", null);
SettingsStore.monitorSetting("Spaces.showPeopleInSpace", null);
@@ -192,6 +200,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
return this._allRoomsInHome;
}
+ public get showSpaceDMBadges(): boolean { // SC
+ return this._showSpaceDMBadges;
+ }
+
public setActiveRoomInSpace(space: SpaceKey): void {
if (!isMetaSpace(space) && !this.matrixClient?.getRoom(space)?.isSpaceRoom()) return;
if (space !== this.activeSpace) this.setActiveSpace(space, false);
@@ -701,6 +713,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
if (room.isSpaceRoom() || !flattenedRoomsForSpace.has(room.roomId)) return false;
+ if (this.showSpaceDMBadges) { // SC
+ return true;
+ }
+
if (dmBadgeSpace && DMRoomMap.shared().getUserIdForRoomId(room.roomId)) {
return s === dmBadgeSpace;
}
@@ -1277,6 +1293,15 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
break;
}
+ case "Spaces.showSpaceDMBadges": { // SC
+ const newValue = SettingsStore.getValue("Spaces.showSpaceDMBadges");
+ if (this.showSpaceDMBadges !== newValue) {
+ this._showSpaceDMBadges = newValue;
+ this.rebuildSpaceHierarchy(); // rebuild everything
+ }
+ break;
+ }
+
case "Spaces.enabledMetaSpaces": {
const newValue = SettingsStore.getValue("Spaces.enabledMetaSpaces");
const enabledMetaSpaces = metaSpaceOrder.filter((k) => newValue[k]);
--
2.47.0

View File

@ -0,0 +1,134 @@
From 961ee28392810973057a0c8af410e1067a15547a Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Wed, 29 May 2024 19:32:42 +0200
Subject: Squashed: Freeform reactions from tadzik/freeform-reactions-upstream
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
commit 9eea56b0080db3720efa49b457707bcde3be6474
Merge: 06f81c9662 8570f16e31
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Tue Jun 20 09:57:19 2023 +0200
Merge branch 'develop' into tadzik/freeform-reactions-upstream
commit 06f81c9662fbe033b4eac859d7e14e0ab24a6e91
Merge: ad4fef85b1 0d6a550c33
Author: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed Aug 31 09:06:49 2022 +0100
Merge branch 'develop' into tadzik/freeform-reactions
commit ad4fef85b160087b8017b9ae9cf9aebfd5348f41
Merge: 689b57c0b9 5aae974e93
Author: Tadeusz Sośnierz <tadzik@tadzik.net>
Date: Sun Aug 28 10:11:48 2022 +0200
Merge branch 'develop' into tadzik/freeform-reactions
commit 689b57c0b91e12907a8dbc3fac3ed10302a11e4a
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Fri May 20 10:35:06 2022 +0200
Fix conflict resolution fail in EmojiPicker
commit 70a8e212b748584949b37bc99b72acffce2fd148
Merge: 215df55f13 a0cdc93642
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Fri May 20 10:25:17 2022 +0200
Merge branch 'develop' into tadzik/freeform-reactions-upstream
commit 215df55f13162bdc8eb13da5219763c56f560dd0
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Tue Aug 17 16:30:06 2021 +0200
Disable freeform emoji reactions in the message composer
commit 6bb8263007e077d22929fcc1fb439d94a4f15c6f
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Tue Aug 17 12:12:28 2021 +0200
Add more typing to EmojiPicker
commit b2a1728318a8a5496345797995c1ec09ae3f88e6
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Tue Aug 17 11:52:35 2021 +0200
Make free-form reaction button translatable
commit f4adaf00b805baba454fbceb41cc5c081ec886a7
Author: Tadeusz Sośnierz <tadeusz@sosnierz.com>
Date: Tue Aug 17 11:29:22 2021 +0200
Allow sending free-form reactions
Signed-off-by: Tadeusz Sośnierz <tadeusz@sosnierz.com>
---
src/components/views/emojipicker/EmojiPicker.tsx | 15 +++++++++++++++
.../views/emojipicker/ReactionPicker.tsx | 1 +
2 files changed, 16 insertions(+)
diff --git a/src/components/views/emojipicker/EmojiPicker.tsx b/src/components/views/emojipicker/EmojiPicker.tsx
index 4806ad4216..7d4a4353e2 100644
--- a/src/components/views/emojipicker/EmojiPicker.tsx
+++ b/src/components/views/emojipicker/EmojiPicker.tsx
@@ -17,6 +17,7 @@ import Header from "./Header";
import Search from "./Search";
import Preview from "./Preview";
import QuickReactions from "./QuickReactions";
+import AccessibleButton from '../elements/AccessibleButton';
import Category, { CategoryKey, ICategory } from "./Category";
import { filterBoolean } from "../../../utils/arrays";
import {
@@ -37,6 +38,7 @@ export const EMOJIS_PER_ROW = 8;
const ZERO_WIDTH_JOINER = "\u200D";
interface IProps {
+ allowUnlisted?: boolean;
selectedEmojis?: Set<string>;
onChoose(unicode: string): boolean;
onFinished(): void;
@@ -341,6 +343,10 @@ class EmojiPicker extends React.Component<IProps, IState> {
}
};
+ private reactWith = (reaction: string): void => {
+ this.props.onChoose(reaction);
+ };
+
private static categoryHeightForEmojiCount(count: number): number {
if (count === 0) {
return 0;
@@ -396,6 +402,15 @@ class EmojiPicker extends React.Component<IProps, IState> {
return categoryElement;
})}
</AutoHideScrollbar>
+ {
+ (this.props.allowUnlisted && this.state.filter) &&
+ <AccessibleButton
+ kind="link"
+ onClick={() => this.reactWith(this.state.filter)}
+ >
+ { _t('React with "%(reaction)s"', { reaction: this.state.filter }) }
+ </AccessibleButton>
+ }
{this.state.previewEmoji ? (
<Preview emoji={this.state.previewEmoji} />
) : (
diff --git a/src/components/views/emojipicker/ReactionPicker.tsx b/src/components/views/emojipicker/ReactionPicker.tsx
index 2c2eb442a0..62bfd2ea0f 100644
--- a/src/components/views/emojipicker/ReactionPicker.tsx
+++ b/src/components/views/emojipicker/ReactionPicker.tsx
@@ -123,6 +123,7 @@ class ReactionPicker extends React.Component<IProps, IState> {
public render(): React.ReactNode {
return (
<EmojiPicker
+ allowUnlisted={true}
onChoose={this.onChoose}
isEmojiDisabled={this.isEmojiDisabled}
onFinished={this.props.onFinished}
--
2.47.0

View File

@ -0,0 +1,32 @@
From 794b8d3b7ccfbea95cba180b13de0ed42e7fc6c2 Mon Sep 17 00:00:00 2001
From: su-ex <codeworks@supercable.onl>
Date: Sat, 22 Apr 2023 12:15:18 +0200
Subject: Allow reactions to take more space
---
res/css/views/messages/_ReactionsRowButton.pcss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/res/css/views/messages/_ReactionsRowButton.pcss b/res/css/views/messages/_ReactionsRowButton.pcss
index f2e3885de4..2a8bb9224e 100644
--- a/res/css/views/messages/_ReactionsRowButton.pcss
+++ b/res/css/views/messages/_ReactionsRowButton.pcss
@@ -14,6 +14,7 @@ Please see LICENSE files in the repository root for full details.
background-color: $secondary-hairline-color;
user-select: none;
align-items: center;
+ max-width: calc(100% - 40px);;
&:hover {
border-color: $quinary-content;
@@ -29,7 +30,6 @@ Please see LICENSE files in the repository root for full details.
}
.mx_ReactionsRowButton_content {
- max-width: 100px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
--
2.47.0

View File

@ -0,0 +1,79 @@
From b43bf7e8a183f36e30e9b79e3fc2dcd14afc6823 Mon Sep 17 00:00:00 2001
From: su-ex <codeworks@supercable.onl>
Date: Thu, 30 May 2024 14:35:16 +0200
Subject: On space switch don't automatically show last opened room
---
src/components/structures/MatrixChat.tsx | 18 +++++++++++++++++-
src/settings/Settings.tsx | 6 ++++++
src/stores/spaces/SpaceStore.ts | 1 +
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx
index 1726c8462d..150f29d0b8 100644
--- a/src/components/structures/MatrixChat.tsx
+++ b/src/components/structures/MatrixChat.tsx
@@ -1448,7 +1448,15 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
if (this.screenAfterLogin && this.screenAfterLogin.screen) {
this.showScreen(this.screenAfterLogin.screen, this.screenAfterLogin.params);
this.screenAfterLogin = undefined;
- } else if (localStorage && localStorage.getItem("mx_last_room_id")) {
+ } else if (
+ !SettingsStore.getValue("Spaces.returnToPreviouslyOpenedRoom") &&
+ localStorage &&
+ localStorage.getItem("mx_active_space") &&
+ localStorage.getItem("mx_active_space")[0] === "!"
+ ) {
+ // SC: Show the last viewed space
+ this.viewLastSpace();
+ } else if (SettingsStore.getValue("Spaces.returnToPreviouslyOpenedRoom") && localStorage && localStorage.getItem("mx_last_room_id")) {
// Before defaulting to directory, show the last viewed room
this.viewLastRoom();
} else {
@@ -1460,6 +1468,14 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
}
}
+ private viewLastSpace(): void { // SC
+ // SC-ToDo: Make this work for meta spaces
+ dis.dispatch({
+ action: Action.ViewRoom,
+ room_id: localStorage.getItem("mx_active_space"),
+ });
+ }
+
private viewLastRoom(): void {
dis.dispatch<ViewRoomPayload>({
action: Action.ViewRoom,
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx
index b668c65dfd..be4433e1bc 100644
--- a/src/settings/Settings.tsx
+++ b/src/settings/Settings.tsx
@@ -203,6 +203,12 @@ export const SETTINGS: { [setting: string]: ISetting } = {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
default: true,
},
+ "Spaces.returnToPreviouslyOpenedRoom": {
+ displayName: _td("Return to the room previously opened in a space"),
+ description: _td("If disabled, the space overview will be shown when switching to another space."),
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ default: false,
+ },
// SC settings end
"feature_video_rooms": {
isFeature: true,
diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts
index 60df05478a..0be7ba190a 100644
--- a/src/stores/spaces/SpaceStore.ts
+++ b/src/stores/spaces/SpaceStore.ts
@@ -265,6 +265,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
// else if the last viewed room in this space is joined then view that
// else view space home or home depending on what is being clicked on
if (
+ SettingsStore.getValue("Spaces.returnToPreviouslyOpenedRoom") &&
roomId &&
cliSpace?.getMyMembership() !== KnownMembership.Invite &&
this.matrixClient.getRoom(roomId)?.getMyMembership() === KnownMembership.Join &&
--
2.47.0

View File

@ -0,0 +1,24 @@
From 3aa2246c56ae3e5b7703003ef785d6e3ad77b844 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Tue, 9 Aug 2022 09:32:19 +0200
Subject: Exclude spaces from breadcrumbs
---
src/stores/BreadcrumbsStore.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts
index 9859f24015..957b54286c 100644
--- a/src/stores/BreadcrumbsStore.ts
+++ b/src/stores/BreadcrumbsStore.ts
@@ -137,6 +137,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient<IState> {
}
private async appendRoom(room: Room): Promise<void> {
+ if (room.isSpaceRoom()) return;
let updated = false;
const rooms = (this.state.rooms || []).slice(); // cheap clone
const msc3946ProcessDynamicPredecessor = SettingsStore.getValue("feature_dynamic_room_predecessors");
--
2.47.0

View File

@ -0,0 +1,24 @@
From 288aa3cf8e56a4ca60810eac98fb6f692b154f61 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Mon, 19 Aug 2024 20:27:33 +0200
Subject: Stop the search bar wobble
---
res/css/_common.pcss | 1 +
1 file changed, 1 insertion(+)
diff --git a/res/css/_common.pcss b/res/css/_common.pcss
index 05a3dac067..7861af6381 100644
--- a/res/css/_common.pcss
+++ b/res/css/_common.pcss
@@ -181,6 +181,7 @@ input[type="search"].mx_textinput_icon {
padding-left: 36px;
background-repeat: no-repeat;
background-position: 10px center;
+ min-height: 33px;
}
/* FIXME THEME - Tint by CSS rather than referencing a duplicate asset */
--
2.47.0

View File

@ -0,0 +1,34 @@
From a4bca41b7371c42499fd8c805482066514a9edc2 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 13 Oct 2024 11:23:54 +0200
Subject: Import SC compound theme overrides
---
res/css/_common.pcss | 1 +
res/css/sc-cpd-overrides.css | 1 +
2 files changed, 2 insertions(+)
create mode 120000 res/css/sc-cpd-overrides.css
diff --git a/res/css/_common.pcss b/res/css/_common.pcss
index 7861af6381..f7a660a339 100644
--- a/res/css/_common.pcss
+++ b/res/css/_common.pcss
@@ -11,6 +11,7 @@ Please see LICENSE files in the repository root for full details.
@import url("@vector-im/compound-design-tokens/assets/web/css/compound-design-tokens.css") layer(compound);
@import url("@vector-im/compound-web/dist/style.css");
+@import "./sc-cpd-overrides.css";
@import "./_font-sizes.pcss";
@import "./_animations.pcss";
@import "./_spacing.pcss";
diff --git a/res/css/sc-cpd-overrides.css b/res/css/sc-cpd-overrides.css
new file mode 120000
index 0000000000..532e96fddc
--- /dev/null
+++ b/res/css/sc-cpd-overrides.css
@@ -0,0 +1 @@
+../../../res/css/sc-cpd-overrides.css
\ No newline at end of file
--
2.47.0

View File

@ -0,0 +1,26 @@
From fc577303d8c2d290f1c17e13deaf442822af68a1 Mon Sep 17 00:00:00 2001
From: su-ex <codeworks@supercable.onl>
Date: Tue, 7 Sep 2021 19:41:52 +0200
Subject: No damn avatar background in room list
---
src/components/structures/BackdropPanel.tsx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/components/structures/BackdropPanel.tsx b/src/components/structures/BackdropPanel.tsx
index 80c21235cc..a9c464f4b2 100644
--- a/src/components/structures/BackdropPanel.tsx
+++ b/src/components/structures/BackdropPanel.tsx
@@ -13,6 +13,9 @@ interface IProps {
}
export const BackdropPanel: React.FC<IProps> = ({ backgroundImage, blurMultiplier }) => {
+ // SC: no damn avatar background in room list
+ return null;
+
if (!backgroundImage) return null;
const styles: CSSProperties = {};
--
2.47.0

View File

@ -0,0 +1,29 @@
From e4a7ea01c2fd9f7d67660402c20bfdc5969f28c4 Mon Sep 17 00:00:00 2001
From: su-ex <codeworks@supercable.onl>
Date: Tue, 22 Dec 2020 19:16:28 +0100
Subject: No red messages in 1:1 chats Close SchildiChat/schildichat-desktop#13
---
src/components/views/rooms/EventTile.tsx | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/components/views/rooms/EventTile.tsx b/src/components/views/rooms/EventTile.tsx
index 746cceabd8..3e5879f7ad 100644
--- a/src/components/views/rooms/EventTile.tsx
+++ b/src/components/views/rooms/EventTile.tsx
@@ -685,6 +685,12 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
return false;
}
+ // don't show highlights in 1:1 rooms
+ const room = cli.getRoom(this.props.mxEvent.getRoomId());
+ if (room && room.currentState.getJoinedMemberCount() === 2) {
+ return false;
+ }
+
return !!(actions?.tweaks.highlight || previousActions?.tweaks.highlight);
}
--
2.47.0

View File

@ -0,0 +1,61 @@
From a37ca889b832578a9201a5b45b059f58eb781bc5 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 13 Oct 2024 13:26:16 +0200
Subject: Always apply corner radius to all edges of the bubble
---
res/css/views/rooms/_EventBubbleTile.pcss | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/res/css/views/rooms/_EventBubbleTile.pcss b/res/css/views/rooms/_EventBubbleTile.pcss
index ec443c44de..8e0f3cf1b6 100644
--- a/res/css/views/rooms/_EventBubbleTile.pcss
+++ b/res/css/views/rooms/_EventBubbleTile.pcss
@@ -277,6 +277,8 @@ Please see LICENSE files in the repository root for full details.
margin-inline: var(--EventTile_bubble_line-margin-inline-start) var(--EventTile_bubble_line-margin-inline-end);
border-top-left-radius: var(--cornerRadius);
border-top-right-radius: var(--cornerRadius);
+ border-bottom-left-radius: var(--cornerRadius);
+ border-bottom-right-radius: var(--cornerRadius);
/* the selector here is quite weird because timestamps can appear linked & unlinked and in different places */
/* in the DOM depending on the specific rendering context */
@@ -371,7 +373,7 @@ Please see LICENSE files in the repository root for full details.
}
&.mx_EventTile_continuation[data-self="false"] .mx_EventTile_line {
- border-top-left-radius: 0;
+ //border-top-left-radius: 0;
.mx_MImageBody .mx_MImageBody_thumbnail_container,
.mx_MVideoBody .mx_MVideoBody_container,
@@ -379,7 +381,7 @@ Please see LICENSE files in the repository root for full details.
.mx_MediaBody,
.mx_MLocationBody_map,
.mx_MBeaconBody {
- border-top-left-radius: 0;
+ //border-top-left-radius: 0;
}
}
&.mx_EventTile_lastInSection[data-self="false"] .mx_EventTile_line {
@@ -396,7 +398,7 @@ Please see LICENSE files in the repository root for full details.
}
&.mx_EventTile_continuation[data-self="true"] .mx_EventTile_line {
- border-top-right-radius: 0;
+ //border-top-right-radius: 0;
.mx_MImageBody .mx_MImageBody_thumbnail_container,
.mx_MVideoBody .mx_MVideoBody_container,
@@ -404,7 +406,7 @@ Please see LICENSE files in the repository root for full details.
.mx_MediaBody,
.mx_MLocationBody_map,
.mx_MBeaconBody {
- border-top-right-radius: 0;
+ //border-top-right-radius: 0;
}
}
&.mx_EventTile_lastInSection[data-self="true"] .mx_EventTile_line {
--
2.47.0

View File

@ -0,0 +1,25 @@
From 57942189da5f80069ee4b03dc2fbeb24ce6b4f7b Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 13 Oct 2024 13:53:07 +0200
Subject: Always show timestamps by default
---
src/settings/Settings.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx
index be4433e1bc..1052bca0c9 100644
--- a/src/settings/Settings.tsx
+++ b/src/settings/Settings.tsx
@@ -662,7 +662,7 @@ export const SETTINGS: { [setting: string]: ISetting } = {
"alwaysShowTimestamps": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td("settings|always_show_message_timestamps"),
- default: false,
+ default: true,
},
"userTimezone": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
--
2.47.0

View File

@ -0,0 +1,25 @@
From 47bcb08e971256fe94a0b07fb553b75400e648ed Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Thu, 17 Oct 2024 19:40:51 +0200
Subject: Enable custom emote rendering by default
---
src/settings/Settings.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx
index 1052bca0c9..f5fcb5d7a5 100644
--- a/src/settings/Settings.tsx
+++ b/src/settings/Settings.tsx
@@ -514,7 +514,7 @@ export const SETTINGS: { [setting: string]: ISetting } = {
description: _td("labs|render_reaction_images_description"),
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG_PRIORITISED,
supportedLevelsAreOrdered: true,
- default: false,
+ default: true,
},
/**
* With the transition to Compound we are moving to a base font size
--
2.47.0

View File

@ -0,0 +1,32 @@
From 16fe0fe8d0068e4c5da3fa5516c5578d2ffaabc7 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sun, 20 Oct 2024 17:00:19 +0200
Subject: Don't symlink css to fix Windows-native build
---
.gitignore | 2 ++
res/css/sc-cpd-overrides.css | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
delete mode 120000 res/css/sc-cpd-overrides.css
diff --git a/.gitignore b/.gitignore
index 3137cd555b..5345301b97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+res/css/sc-*.css
+
/.npmrc
/*.log
package-lock.json
diff --git a/res/css/sc-cpd-overrides.css b/res/css/sc-cpd-overrides.css
deleted file mode 120000
index 532e96fddc..0000000000
--- a/res/css/sc-cpd-overrides.css
+++ /dev/null
@@ -1 +0,0 @@
-../../../res/css/sc-cpd-overrides.css
\ No newline at end of file
--
2.47.0

View File

@ -1,31 +0,0 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
pushd "$mydir" > /dev/null
source ./merge_helpers.sh
# Check branch
check_branch $branch
forall_repos check_branch $branch
# Ensure clean git state
forall_repos check_clean_git
git fetch origin
git branch -D master || true
git checkout -b master --track origin/master
git merge --ff-only sc
git push
git checkout sc
forall_repos git fetch origin
forall_repos git branch -D master || true
forall_repos git checkout -b master --track origin/master
forall_repos git merge --ff-only sc
forall_repos git push
forall_repos git checkout sc
popd > /dev/null

40
push_current_sc_branches.sh Executable file
View File

@ -0,0 +1,40 @@
#!/bin/bash
set -e
mydir="$(dirname "$(realpath "$0")")"
pushd "$mydir" > /dev/null
source ./merge_helpers.sh
get_branch_of() {
local repo="$1"
pushd "$repo" > /dev/null
local b=`git branch --show-current`
if [[ "$b" = sc_v* ]]; then
echo "$b"
else
>&2 echo "Unexpected branch name for $repo: $b"
exit 1
fi
popd > /dev/null
}
b_js=`get_branch_of matrix-js-sdk`
b_react=`get_branch_of matrix-react-sdk`
b_web=`get_branch_of element-web`
b_desktop=`get_branch_of element-desktop`
if [ "$b_js" != "$b_react" ] || [ "$b_react" != "$b_web" ] || [ "$b_web" != "$b_desktop" ]; then
echo "Detected branch name mismatch!"
echo "js-sdk: $b_js"
echo "react-sdk: $b_react"
echo "element-web: $b_web"
echo "element-desktop: $b_desktop"
exit 1
fi
branch="$b_js"
echo "Pushing to all repos: $branch"
forall_repos git push --set-upstream origin "$branch" "$@"

View File

@ -0,0 +1,174 @@
/*
* Upstream file for reference:
* - Dark: https://github.com/element-hq/compound-design-tokens/blob/main/assets/web/css/cpd-theme-dark-base.css
* - Light: https://github.com/element-hq/compound-design-tokens/blob/main/assets/web/css/cpd-theme-light-base.css
*/
.cpd-theme-dark.cpd-theme-dark {
--cpd-color-text-primary: rgba(255, 255, 255, 0.9);
--cpd-color-text-secondary: rgba(255, 255, 255, 0.65);
/* TODO?
--cpd-color-alpha-green-1400: hsla(152, 88%, 94%, 0.96);
--cpd-color-alpha-green-1300: hsla(152, 93%, 88%, 0.91);
--cpd-color-alpha-green-1200: hsla(156, 97%, 76%, 0.83);
--cpd-color-alpha-green-1100: hsla(162, 98%, 57%, 0.74);
--cpd-color-alpha-green-1000: hsla(163, 99%, 55%, 0.65);
--cpd-color-alpha-green-900: hsla(164, 98%, 53%, 0.58);
--cpd-color-alpha-green-800: hsl(168, 100%, 24%, 1);
--cpd-color-alpha-green-700: hsl(165, 100%, 18%, 1);
--cpd-color-alpha-green-600: hsl(162, 100%, 14%, 1);
--cpd-color-alpha-green-500: hsl(160, 100%, 12%, 1);
--cpd-color-alpha-green-400: hsl(155, 100%, 9%, 1);
--cpd-color-alpha-green-300: hsl(151, 100%, 7%, 1);
--cpd-color-alpha-green-200: hsl(147, 100%, 6%, 1);
--cpd-color-alpha-green-100: hsl(144, 100%, 6%, 1);
--cpd-color-alpha-gray-1400: hsla(214, 78%, 98%, 0.95);
--cpd-color-alpha-gray-1300: hsla(213, 73%, 97%, 0.89);
--cpd-color-alpha-gray-1200: hsla(215, 74%, 96%, 0.79);
--cpd-color-alpha-gray-1100: hsla(215, 92%, 95%, 0.68);
--cpd-color-alpha-gray-1000: hsla(213, 93%, 94%, 0.61);
--cpd-color-alpha-gray-900: hsla(211, 94%, 94%, 0.54);
--cpd-color-alpha-gray-800: hsla(216, 100%, 94%, 0.41);
--cpd-color-alpha-gray-700: hsla(213, 85%, 95%, 0.27);
--cpd-color-alpha-gray-600: hsla(225, 46%, 95%, 0.2);
--cpd-color-alpha-gray-500: hsla(214, 41%, 97%, 0.15);
--cpd-color-alpha-gray-400: hsla(270, 37%, 93%, 0.1);
--cpd-color-alpha-gray-200: hsla(286, 31%, 82%, 0.04);
--cpd-color-alpha-gray-100: hsla(214, 10%, 86%, 0.02);
*/
/* Hover of room list items, search bar bg, space icon bg */
--cpd-color-alpha-gray-300: rgba(255, 255, 255, 0.06);
/* TODO more accent variants? */
--cpd-color-green-1400: #F1F8E9;
--cpd-color-green-1300: #DCEDC8;
--cpd-color-green-1200: #C5E1A5;
--cpd-color-green-1100: #AED581;
--cpd-color-green-1000: #9CCC65;
--cpd-color-green-900: #8BC34A;
--cpd-color-green-800: #8BC34A;
--cpd-color-green-700: #8BC34A;
--cpd-color-green-600: #8BC34A;
--cpd-color-green-500: #8BC34A;
--cpd-color-green-400: #689F38;
--cpd-color-green-300: #33691E;
--cpd-color-green-200: #33691E;
--cpd-color-green-100: #33691E;
/* TODO
--cpd-color-red-1400: #ffe9e6;
--cpd-color-red-1300: #ffd4cd;
--cpd-color-red-1200: #ffaea4;
--cpd-color-red-1100: #ff877c;
--cpd-color-red-1000: #ff665d;
--cpd-color-red-900: #fd3e3c;
--cpd-color-red-800: #d1212a;
--cpd-color-red-700: #9f0d1e;
--cpd-color-red-600: #830009;
--cpd-color-red-500: #710000;
--cpd-color-red-400: #590000;
--cpd-color-red-300: #470000;
--cpd-color-red-200: #3e0000;
--cpd-color-red-100: #370000;
*/
--cpd-color-gray-1400: #eeeeee;
--cpd-color-gray-1300: #e0e0e0;
--cpd-color-gray-1200: #b3b3b3;
--cpd-color-gray-1100: #aaaaaa;
--cpd-color-gray-1000: #9e9e9e;
--cpd-color-gray-900: #808080;
--cpd-color-gray-800: #757575;
--cpd-color-gray-700: #424242;
--cpd-color-gray-600: #424242;
--cpd-color-gray-500: #424242;
--cpd-color-gray-400: #303030;
--cpd-color-gray-300: #212121;
--cpd-color-gray-200: #212121;
--cpd-color-gray-100: #171717;
--cpd-color-theme-bg: #171717;
}
.cpd-theme-light.cpd-theme-light {
/* TODO?
--cpd-color-alpha-gray-1400: hsla(223, 64%, 2%, 0.9);
--cpd-color-alpha-gray-1300: hsla(225, 57%, 3%, 0.84);
--cpd-color-alpha-gray-1200: hsla(213, 73%, 3%, 0.77);
--cpd-color-alpha-gray-1100: hsla(215, 74%, 5%, 0.71);
--cpd-color-alpha-gray-1000: hsla(218, 79%, 6%, 0.66);
--cpd-color-alpha-gray-900: hsla(213, 83%, 7%, 0.61);
--cpd-color-alpha-gray-800: hsla(213, 87%, 9%, 0.5);
--cpd-color-alpha-gray-700: hsla(215, 96%, 10%, 0.35);
--cpd-color-alpha-gray-600: hsla(212, 97%, 12%, 0.26);
--cpd-color-alpha-gray-500: hsla(212, 87%, 15%, 0.2);
--cpd-color-alpha-gray-400: hsla(213, 90%, 20%, 0.12);
--cpd-color-alpha-gray-300: hsla(216, 89%, 18%, 0.06);
--cpd-color-alpha-gray-200: hsla(200, 41%, 36%, 0.04);
--cpd-color-alpha-gray-100: hsla(210, 48%, 41%, 0.02);
--cpd-color-alpha-green-1400: hsl(149, 100%, 7%, 1);
--cpd-color-alpha-green-1300: hsl(157, 100%, 10%, 1);
--cpd-color-alpha-green-1200: hsl(162, 100%, 14%, 1);
--cpd-color-alpha-green-1100: hsl(165, 100%, 18%, 1);
--cpd-color-alpha-green-1000: hsl(166, 100%, 21%, 1);
--cpd-color-alpha-green-900: hsl(168, 100%, 24%, 1);
--cpd-color-alpha-green-800: hsl(166, 100%, 30%, 1);
--cpd-color-alpha-green-700: hsla(163, 99%, 38%, 0.96);
--cpd-color-alpha-green-600: hsla(156, 99%, 36%, 0.56);
--cpd-color-alpha-green-500: hsla(154, 96%, 37%, 0.41);
--cpd-color-alpha-green-400: hsla(151, 93%, 37%, 0.23);
--cpd-color-alpha-green-300: hsla(150, 100%, 36%, 0.11);
--cpd-color-alpha-green-200: hsla(150, 79%, 41%, 0.06);
--cpd-color-alpha-green-100: hsla(156, 79%, 41%, 0.03);
*/
/* TODO accent variants? */
--cpd-color-green-1400: #33691E;
--cpd-color-green-1300: #33691E;
--cpd-color-green-1200: #33691E;
--cpd-color-green-1100: #33691E;
--cpd-color-green-1000: #33691E;
--cpd-color-green-900: #33691E;
--cpd-color-green-800: #33691E;
--cpd-color-green-700: #8BC34A;
--cpd-color-green-600: #8BC34A;
--cpd-color-green-500: #8BC34A;
--cpd-color-green-400: #8BC34A;
--cpd-color-green-300: #C5E1A5;
--cpd-color-green-200: #DCEDC8;
--cpd-color-green-100: #F1F8E9;
/* TODO
--cpd-color-red-1400: #450000;
--cpd-color-red-1300: #620000;
--cpd-color-red-1200: #850006;
--cpd-color-red-1100: #a4041d;
--cpd-color-red-1000: #bc0f22;
--cpd-color-red-900: #d51928;
--cpd-color-red-800: #ff3d3d;
--cpd-color-red-700: #ff8c81;
--cpd-color-red-600: #ffafa5;
--cpd-color-red-500: #ffc5bc;
--cpd-color-red-400: #ffdfda;
--cpd-color-red-300: #ffefec;
--cpd-color-red-200: #fff7f6;
--cpd-color-red-100: #fffaf9;
*/
--cpd-color-gray-1400: #212121;
--cpd-color-gray-1300: #212121;
--cpd-color-gray-1200: #424242;
--cpd-color-gray-1100: #424242;
--cpd-color-gray-1000: #616161;
--cpd-color-gray-900: #616161;
--cpd-color-gray-800: #808080;
--cpd-color-gray-700: #b3b3b3;
--cpd-color-gray-600: #b3b3b3;
--cpd-color-gray-500: #cdd3da;
--cpd-color-gray-400: #e0e0e0;
--cpd-color-gray-300: #f5f5f5;
--cpd-color-gray-200: #f5f5f5;
--cpd-color-gray-100: #fafafa;
--cpd-color-theme-bg: #ffffff;
}

View File

@ -25,9 +25,15 @@ popd
pushd element-desktop
$yarn install
ln -s ../element-web/webapp ./ || true
# Seshat: compare https://github.com/element-hq/element-desktop/blob/develop/docs/native-node-modules.md#adding-seshat-for-search-in-e2e-encrypted-rooms
$yarn add matrix-seshat
#$yarn add electron-build-env
#$yarn run electron-build-env -- --electron "$electron_version" -- neon build matrix-seshat --release
popd
pushd i18n-helper
$yarn install
popd
# CSS overrides
cp res/css/* matrix-react-sdk/res/css/

189
theme.sh Executable file
View File

@ -0,0 +1,189 @@
#!/bin/bash
set -e
shopt -s globstar
mydir="$(dirname "$(realpath "$0")")"
automatic_commit="$1"
pushd "$mydir/matrix-react-sdk" > /dev/null
if [[ "$automatic_commit" == [Yy]* ]]; then
# Require clean git state
uncommitted=`git status --porcelain`
if [ ! -z "$uncommitted" ]; then
echo "Uncommitted changes are present, please commit first!"
exit 1
fi
fi
M_ACCENT="#8bc34a"
M_ACCENT_DEC="139, 195, 74"
M_ACCENT_DARK="#33691e"
M_ACCENT_LIGHT="#dcedc8"
M_ALERT="#e53935"
M_LINK="#368bd6"
replace_colors() {
local f="$1"
if [[ "$f" =~ "dark" ]]; then
echo "Replacing colors (dark) for $f..."
BG_ACCENT="$M_ACCENT_DARK"
CODEBLOCK_BORDER_COLOR="#121212"
CODEBLOCK_BACKGROUND_COLOR="#121212"
PILL_COLOR="rgba(255, 255, 255, 0.15)"
PILL_HOVER_COLOR="rgba(255, 255, 255, 0.18)"
PRESENCE_OFFLINE="#e0e0e0" # not applied because not existing specifically for dark
MESSAGE_BUBBLE_BACKGROUND="#424242"
MESSAGE_BUBBLE_BACKGROUND_SELF="#303030"
MESSAGE_BUBBLE_BACKGROUND_SELECTED="#212121"
ROOMLIST_BG_COLOR="#303030"
SPACELIST_BG_COLOR="#424242"
else
echo "Replacing colors (light) for $f..."
BG_ACCENT="$M_ACCENT_LIGHT"
CODEBLOCK_BORDER_COLOR="#00000010"
CODEBLOCK_BACKGROUND_COLOR="#00000010"
PILL_COLOR="rgba(0, 0, 0, 0.13)"
PILL_HOVER_COLOR="rgba(0, 0, 0, 0.1)"
PRESENCE_OFFLINE="#bdbdbd" # for light this should actually be darker
MESSAGE_BUBBLE_BACKGROUND="#eeeeee"
MESSAGE_BUBBLE_BACKGROUND_SELF="#f1f8e9"
MESSAGE_BUBBLE_BACKGROUND_SELECTED="#e0e0e0"
ROOMLIST_BG_COLOR="#eeeeee"
SPACELIST_BG_COLOR="#fafafa"
fi
# Neutral colors
sed -i 's|#15171b|#212121|gi' "$f"
sed -i 's|#15191E|#212121|gi' "$f"
sed -i 's|#2e2f32|#212121|gi' "$f"
sed -i 's|#232f32|#212121|gi' "$f"
sed -i 's|#27303a|#212121|gi' "$f"
sed -i 's|#17191C|#212121|gi' "$f"
sed -i 's|#181b21|#303030|gi' "$f"
sed -i 's|#1A1D23|#303030|gi' "$f"
sed -i 's|#20252B|#303030|gi' "$f"
sed -i 's|#20252c|#303030|gi' "$f"
sed -i 's|#21262c|#383838|gi' "$f" # selection/hover color
sed -i 's|#238cf5|#303030|gi' "$f"
sed -i 's|#25271F|#303030|gi' "$f"
sed -i 's|#272c35|#303030|gi' "$f"
sed -i 's|#2a3039|#303030|gi' "$f"
sed -i 's|#343a46|#424242|gi' "$f"
sed -i 's|#3c4556|#424242|gi' "$f"
sed -i 's|#3d3b39|#424242|gi' "$f"
sed -i 's|#45474a|#424242|gi' "$f"
sed -i 's|#454545|#424242|gi' "$f"
sed -i 's|#2e3649|#424242|gi' "$f"
sed -i 's|#4e5054|#424242|gi' "$f"
sed -i 's|#394049|#424242|gi' "$f"
sed -i 's|#3e444c|#424242|gi' "$f"
sed -i 's|#61708b|#616161|gi' "$f"
sed -i 's|#616b7f|#616161|gi' "$f"
sed -i 's|#5c6470|#616161|gi' "$f"
sed -i 's|#545a66|#616161|gi' "$f" # pill hover bg color
sed -i 's|#737D8C|#757575|gi' "$f"
sed -i 's|#6F7882|#757575|gi' "$f"
sed -i 's|#91A1C0|#757575|gi' "$f" # icon in button color
sed -i 's|#8D99A5|#808080|gi' "$f"
sed -i 's|#8E99A4|#808080|gi' "$f" # maybe use #9e9e9e instead
sed -i 's|#8D97A5|#808080|gi' "$f"
sed -i 's|#a2a2a2|#9e9e9e|gi' "$f"
sed -i 's|#9fa9ba|#aaaaaa|gi' "$f" # maybe use #9e9e9e instead
sed -i 's|#acacac|#aaaaaa|gi' "$f" # maybe use #9e9e9e instead
sed -i 's|#B9BEC6|#b3b3b3|gi' "$f" # maybe use #bdbdbd instead
sed -i 's|#a1b2d1|#b3b3b3|gi' "$f"
sed -i 's|#A9B2BC|#b3b3b3|gi' "$f"
sed -i 's|#C1C6CD|#bdbdbd|gi' "$f"
sed -i 's|#c1c9d6|#bdbdbd|gi' "$f"
sed -i 's|#c8c8cd|#cccccc|gi' "$f" # maybe use #bdbdbd instead
# sed -i 's|#dddddd|#e0e0e0|gi' "$f" # really?
sed -i 's|#e7e7e7|#e0e0e0|gi' "$f"
sed -i 's|#e3e8f0|#e0e0e0|gi' "$f"
sed -i 's|#e9e9e9|#e0e0e0|gi' "$f"
sed -i 's|#e9edf1|#e0e0e0|gi' "$f"
sed -i 's|#e8eef5|#e0e0e0|gi' "$f"
sed -i 's|#deddfd|#e0e0e0|gi' "$f" # $location-live-secondary-color, what to use really?
sed -i 's|#edf3ff|#eeeeee|gi' "$f"
sed -i 's|#f4f6fa|#f5f5f5|gi' "$f"
sed -i 's|#f6f7f8|#f5f5f5|gi' "$f"
sed -i 's|#f2f5f8|#f5f5f5|gi' "$f"
sed -i 's|#f5f8fa|#f5f5f5|gi' "$f"
sed -i 's|#f3f8fd|#fafafa|gi' "$f"
sed -i 's|rgba(33, 38, 34,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(33, 38, 44,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(34, 38, 46,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(38, 39, 43,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(38, 40, 45,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(46, 48, 51,|rgba(48, 48, 48,|gi' "$f"
sed -i 's|rgba(92, 100, 112,|rgba(97, 97, 97,|gi' "$f"
sed -i 's|rgba(141, 151, 165,|rgba(144, 144, 144,|gi' "$f"
sed -i 's|rgba(242, 245, 248,|rgba(248, 248, 248,|gi' "$f"
sed -i "s|\\(\$event-highlight-bg-color: \\).*;|\\1transparent;|gi" "$f"
sed -i "s|\\(\$preview-widget-bar-color: \\).*;|\\1#bdbdbd;|gi" "$f"
sed -i "s|\\(\$blockquote-bar-color: \\).*;|\\1#bdbdbd;|gi" "$f"
sed -i "s|\\(\$pill-bg-color: \\).*;|\\1$PILL_COLOR;|gi" "$f"
sed -i "s|\\(\$pill-hover-bg-color: \\).*;|\\1$PILL_HOVER_COLOR;|gi" "$f"
sed -i "s|\\(\$inlinecode-border-color: \\).*;|\\1$CODEBLOCK_BORDER_COLOR;|gi" "$f"
sed -i "s|\\(\$inlinecode-background-color: \\).*;|\\1$CODEBLOCK_BACKGROUND_COLOR;|gi" "$f"
sed -i "s|\\(\$codeblock-background-color: \\).*;|\\1$CODEBLOCK_BACKGROUND_COLOR;|gi" "$f"
sed -i "s|\\(\$presence-offline: \\).*;|\\1$PRESENCE_OFFLINE;|gi" "$f"
sed -i "s|\\(\$roomlist-bg-color: \\).*;|\\1$ROOMLIST_BG_COLOR;|gi" "$f"
sed -i "s|\\(\$spacePanel-bg-color: \\).*;|\\1$SPACELIST_BG_COLOR;|gi" "$f"
# Accent colors
sed -i "s|#368bd6|$M_ACCENT|gi" "$f"
sed -i "s|#ac3ba8|$M_ACCENT|gi" "$f"
sed -i "s|#0DBD8B|$M_ACCENT|gi" "$f"
sed -i "s|#e64f7a|$M_ACCENT|gi" "$f"
sed -i "s|#ff812d|$M_ACCENT|gi" "$f"
sed -i "s|#2dc2c5|$M_ACCENT|gi" "$f"
sed -i "s|#5c56f5|$M_ACCENT|gi" "$f"
sed -i "s|#74d12c|$M_ACCENT|gi" "$f"
sed -i "s|#76CFA6|$M_ACCENT|gi" "$f"
sed -i "s|#03b381|$M_ACCENT|gi" "$f"
sed -i "s|rgba(3, 179, 129,|rgba($M_ACCENT_DEC,|gi" "$f"
sed -i "s|#03b381|$M_ACCENT|gi" "$f"
sed -i "s|#FF5B55|$M_ALERT|gi" "$f"
sed -i "s|\\(\$accent-alt: \\).*;|\\1$M_LINK;|gi" "$f"
#sed -i "s|\\(\$accent-darker: \\).*;|\\1$M_ACCENT_DARK;|gi" "$f"
sed -i "s|\\(\$roomtile-default-badge-bg-color: \\).*;|\\1$M_ACCENT;|gi" "$f"
#sed -i "s|\\(\$input-focused-border-color: \\).*;|\\1\$accent;|gi" "$f" # not existing anymore, need replacement?
sed -i "s|\\(\$reaction-row-button-selected-bg-color: \\).*;|\\1$BG_ACCENT;|gi" "$f"
# e2e colors
sed -i "s|\\(\$e2e-verified-color: \\).*;|\\1$M_ACCENT;|gi" "$f"
sed -i "s|\\(\$e2e-unknown-color: \\).*;|\\1#ffc107;|gi" "$f"
sed -i "s|\\(\$e2e-unverified-color: \\).*;|\\1#ffc107;|gi" "$f"
sed -i "s|\\(\$e2e-warning-color: \\).*;|\\1$M_ALERT;|gi" "$f"
# Message bubbles
sed -i "s|\\(\$eventbubble-self-bg: \\).*;|\$eventbubble-self-bg: $MESSAGE_BUBBLE_BACKGROUND_SELF;|gi" "$f"
sed -i "s|\\(\$eventbubble-others-bg: \\).*;|\$eventbubble-others-bg: $MESSAGE_BUBBLE_BACKGROUND;|gi" "$f"
sed -i "s|\\(\$eventbubble-bg-hover: \\).*;|\$eventbubble-bg-hover: $MESSAGE_BUBBLE_BACKGROUND_SELECTED;|gi" "$f"
#sed -i "s|\\(\$eventbubble-reply-color: \\).*;$||gi" "$f"
}
replace_colors res/themes/light/css/light.pcss
replace_colors res/themes/light/css/_light.pcss
replace_colors res/themes/legacy-light/css/legacy-light.pcss
replace_colors res/themes/legacy-light/css/_legacy-light.pcss
replace_colors res/themes/dark/css/dark.pcss
replace_colors res/themes/dark/css/_dark.pcss
replace_colors res/themes/legacy-dark/css/legacy-dark.pcss
replace_colors res/themes/legacy-dark/css/_legacy-dark.pcss
for f in res/**/*.svg; do
replace_colors "$f"
done
if [[ "$automatic_commit" == [Yy]* ]]; then
# see: https://devops.stackexchange.com/a/5443
git add -A
git diff-index --quiet HEAD || git commit -m "Automatic theme update"
fi
popd > /dev/null