Commit graph

7306 commits

Author SHA1 Message Date
Marcel Hibbe
b1d6086684
load conversation from DB first, then update by request if connection is available
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-10-21 13:49:54 +02:00
Marcel Hibbe
818a843143
check if sync succeeded
Decrease message limit for retries of message loading

make it possible to add any amount (up to 100) of messages to UI for initial loading.

add logging

only make initial request for chat messages when newest message from DB is not equal the lastReadMessage that is offered by the conversation

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-10-21 13:49:54 +02:00
Nextcloud Android Bot
a331ba6372 Weekly 20.1.0 Alpha 09 2024-10-21 03:14:43 +00:00
Nextcloud bot
a5c1c64456
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-21 02:49:22 +00:00
Nextcloud bot
c89473020c
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-20 02:53:41 +00:00
renovate[bot]
6deffd7548
fix(deps): update dependency androidx.compose.runtime:runtime to v1.7.4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 07:48:42 +00:00
renovate[bot]
5b8d0febf4
fix(deps): update dependency androidx.compose:compose-bom to v2024.10.00
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 05:17:39 +00:00
github-actions[bot]
393f656786
Merge pull request #4350 from nextcloud/renovate/androidx.compose.ui-ui-test-junit4-1.x
fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.7.4
2024-10-19 07:10:28 +02:00
renovate[bot]
38b19f8bdc
fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.7.4
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 04:54:01 +00:00
github-actions[bot]
32f3070221
Merge pull request #4348 from nextcloud/renovate/androidx.activity-activity-ktx-1.x
fix(deps): update dependency androidx.activity:activity-ktx to v1.9.3
2024-10-19 06:45:53 +02:00
github-actions[bot]
17eae65dc6
Merge pull request #4347 from nextcloud/renovate/androidx.activity-activity-compose-1.x
fix(deps): update dependency androidx.activity:activity-compose to v1.9.3
2024-10-19 06:44:52 +02:00
Nextcloud bot
8444ac0e88
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-19 03:05:59 +00:00
renovate[bot]
e86e3c9aaf
fix(deps): update dependency androidx.activity:activity-ktx to v1.9.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 02:42:50 +00:00
renovate[bot]
a77f08b74a
fix(deps): update dependency androidx.activity:activity-compose to v1.9.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-19 02:41:25 +00:00
Daniel Calviño Sánchez
1c0e473e1a Fix ignored blank lines in Javadocs
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2024-10-18 14:28:55 +02:00
Nextcloud bot
4f4285810b
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-18 03:01:00 +00:00
Nextcloud bot
2d37338a31
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-17 02:57:49 +00:00
rapterjet2004
ea7d48fb67
detekt
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
2024-10-16 08:57:40 -05:00
Nextcloud bot
210a6aaf1c
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-16 03:05:08 +00:00
renovate[bot]
3b70acc309
fix(deps): update mockito monorepo to v5.14.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 14:29:11 +00:00
Nextcloud bot
b731d6ad38
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-15 02:50:51 +00:00
Nextcloud Android Bot
c9d3aebdc7 Weekly 20.1.0 Alpha 08 2024-10-14 03:14:01 +00:00
Nextcloud bot
9e7555a911
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-14 02:49:49 +00:00
Nextcloud bot
d8089beeb2
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-13 02:57:15 +00:00
Nextcloud bot
37c0854d6e
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-12 02:50:35 +00:00
renovate[bot]
a399d472aa
chore(deps): update plugin com.google.devtools.ksp to v2.0.21-1.0.25
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-11 08:13:00 +00:00
Nextcloud bot
26ba3a1725
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-11 03:00:24 +00:00
renovate[bot]
72200ba236
chore(deps): update plugin org.jetbrains.kotlin.plugin.compose to v2.0.21
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 17:36:35 +00:00
Nextcloud bot
fa8272f595
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-10 02:53:21 +00:00
Nextcloud bot
0f88b4af45
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-09 02:52:49 +00:00
Andy Scherzinger
006ec3bc1c
build.gradle(java): Lock-in jdk on 17
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-10-07 18:32:37 +02:00
Andy Scherzinger
47e9c71ea9
style(ktlint): Fix formatting in kotlin
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-10-07 16:34:59 +02:00
Andy Scherzinger
4571732480
fix(ktlint): Replace wildcard import
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-10-07 15:45:20 +02:00
Nextcloud Android Bot
f9e41bbdde Weekly 20.1.0 Alpha 07 2024-10-07 03:13:34 +00:00
Nextcloud bot
2ba5a46fc0
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-05 02:51:21 +00:00
renovate[bot]
f5e7f9fd89
Update dependency org.junit.vintage:junit-vintage-engine to v5.11.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 13:24:28 +00:00
Nextcloud bot
778230d039
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-04 02:52:39 +00:00
Nextcloud bot
7ddf048061
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-10-03 02:51:05 +00:00
renovate[bot]
51dc692402
Update dependency androidx.compose:compose-bom to v2024.09.03
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 22:37:14 +00:00
github-actions[bot]
d7ad139551
Merge pull request #4309 from nextcloud/renovate/androidx.compose.ui-ui-test-junit4-1.x
Update dependency androidx.compose.ui:ui-test-junit4 to v1.7.3
2024-10-02 21:49:20 +02:00
renovate[bot]
0cf1467ca6
Update dependency androidx.compose.ui:ui-test-junit4 to v1.7.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 19:39:39 +00:00
renovate[bot]
b1d72c1a83
Update dependency androidx.compose.runtime:runtime to v1.7.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 19:38:35 +00:00
Marcel Hibbe
ce8143a807
center search results in chat
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-10-02 14:03:11 +02:00
Marcel Hibbe
305f1732ba
fix availability of search feature.
Hide search feature if room is federated.
Also, for conversation list the check for federation inside isUnifiedSearchAvailable makes no sense.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-10-02 14:02:04 +02:00
renovate[bot]
2a5b72e721
Update dependency com.google.firebase:firebase-messaging to v24.0.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 22:11:22 +00:00
Sowjanya Kota
acd31ec2b5
Merge pull request #4289 from nextcloud/bugfix/4288/fixTypingIndicatorPosition
fix position and animation of typing indicator
2024-10-01 13:37:35 +02:00
sowjanyakch
d76a1d0bd9
make predefined status use custom time
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-10-01 12:45:31 +02:00
renovate[bot]
e8e89c80b7
Update mockito monorepo to v5.14.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 13:23:20 +00:00
Nextcloud Android Bot
c5700cdf6a Weekly 20.1.0 Alpha 06 2024-09-30 03:14:18 +00:00
Nextcloud bot
5a4047432a
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-29 03:11:01 +00:00
renovate[bot]
ddd131f225
Update dependency com.mebigfatguy.fb-contrib:fb-contrib to v7.6.5
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-29 01:40:37 +00:00
Nextcloud bot
81704eb655
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-28 02:50:17 +00:00
renovate[bot]
d380cbd676
Update mockito monorepo to v5.14.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 17:09:54 +00:00
Marcel Hibbe
94d62a943f
fix position and animation of typing indicator
Without this fix, typing indicator moves up and wont go down

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-27 16:51:45 +02:00
Julius Linus
246d496024
Merge pull request #4273 from nextcloud/fix-reminder-refactor
[Bug Fix] Fix wrong value when choosing custom reminder date
2024-09-27 09:45:30 -05:00
sowjanyakch
de582f8b0b
use variable "VOICE_MESSAGE_PREFIX_MAX_LENGTH" to restrict length of voice recording file name
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:41:36 +02:00
sowjanyakch
2478aa884b
put file length value in utils
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:41:36 +02:00
sowjanyakch
ce8c4b2b84
fix file name of voice recording
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:41:36 +02:00
sowjanyakch
25846fe23f
set default emoji only when status icon is null
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:24:38 +02:00
sowjanyakch
1347ec29c4
Set empty status message and default emoji
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-27 12:13:32 +02:00
Marcel Hibbe
78e738bd51
add copyright to fix reuse
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-27 09:37:42 +02:00
Nextcloud bot
ca747af78c
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-27 02:51:56 +00:00
renovate[bot]
28bb0d7106
Update dependency com.github.nextcloud.android-common:ui to v0.23.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 15:16:35 +00:00
Marcel Hibbe
16c49bc430
bump versions for SERVER_VERSION_MIN_SUPPORTED + SERVER_VERSION_SUPPORT_WARNING
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-26 13:27:45 +02:00
Marcel Hibbe
ebc2fd2702
Add test for conversation conversion
This test respects different API versions and checks if default values are set as expected.

- remove deprecated+unused methods
- remove comments
- remove unnecessary double-bang operator

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-26 13:27:44 +02:00
sowjanyakch
ebace8713a
Rounded corners for change password dialog
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-26 13:13:57 +02:00
sowjanyakch
8c967c4f56
use open lock icon for set password
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-26 13:13:56 +02:00
sowjanyakch
c165e9fe0c
UI improvements
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-26 13:13:56 +02:00
sowjanyakch
31c0d74356
Add change password dialog
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-26 13:13:56 +02:00
sowjanyakch
381804c892
Add Change Password dialogue
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-26 13:13:56 +02:00
parneet-guraya
856c0761c9
Fix logic for date time retrieval
Signed-off-by: parneet-guraya <gurayaparneet@gmail.com>
2024-09-25 22:04:11 +05:30
renovate[bot]
45d7969890
Update dependency org.junit.vintage:junit-vintage-engine to v5.11.1
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-25 07:53:51 +00:00
Sowjanya Kota
2592f72039
Merge pull request #4265 from nextcloud/bugfix/noid/fixCrashWhenExtSignalingEmpty
Fix crash when externalSignalingServer is empty
2024-09-25 09:48:56 +02:00
Nextcloud bot
b1cc652657
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-25 02:53:27 +00:00
Marcel Hibbe
7dc7051481
Fix crash when externalSignalingServer is empty
Otherwise, following crash happened, as it was tried to deal with the empty url:

2024-09-24 15:10:30.719 17765-17765 WebSocketInstance       com.nextcloud.talk2                  D  restartWebSocket: /spreed
2024-09-24 15:10:30.722 17765-17765 System.err              com.nextcloud.talk2                  W  java.lang.IllegalArgumentException: Expected URL scheme 'http' or 'https' but no scheme was found for /spree...
2024-09-24 15:10:30.723 17765-17765 System.err              com.nextcloud.talk2                  W  	at okhttp3.HttpUrl$Builder.parse$okhttp(HttpUrl.kt:1261)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-24 16:25:33 +02:00
Marcel Hibbe
b78267d96f
try to avoid NPE for currentConversation
On gplay console the following NPE was reported for the line

participantPermissions = ParticipantPermissions(spreedCapabilities, currentConversation!!)

 E  FATAL EXCEPTION: main
          Process: com.nextcloud.talk2, PID: 6626
          java.lang.NullPointerException
          at com.nextcloud.talk.chat.ChatActivity.initObservers$lambda$13(ChatActivity.kt:583)
          at com.nextcloud.talk.chat.ChatActivity.$r8$lambda$QKH5JCFLmCzRMlSJ-EV-m4IW5ig(Unknown Source:0)

which seems that currentConversation was null. If it would have been spreedCapabilities, then the error would have been thrown in the line before..

A reason MAY BE that the observer is triggered before setData on the ViewModel is executed.
While this fix is just not executing code when currentConversation is null, it's unsure if it will follow up problems (like an empty chat) or if the observer is triggered another time when currentConversation is available.

So it's just a hotfix.
To improve the situation in the long term, we should move more logic to viewModel and only use Flow instead to mix it with LiveData.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-24 15:52:49 +02:00
Marcel Hibbe
aeacfa09b6
avoid UninitializedPropertyAccessException for spreedCapabilities
reported issue on gplay console was:

Exception kotlin.UninitializedPropertyAccessException: lateinit property spreedCapabilities has not been initialized
  at com.nextcloud.talk.chat.ChatActivity.getSpreedCapabilities (ChatActivity.kt:284)
  at com.nextcloud.talk.chat.ChatActivity.processExpiredMessages (ChatActivity.kt:2536)
  at com.nextcloud.talk.chat.ChatActivity.access$processExpiredMessages (ChatActivity.kt:204)
  at com.nextcloud.talk.chat.ChatActivity$initObservers$10$1.invokeSuspend (ChatActivity.kt:820)

This is just a hotfix while hoping processExpiredMessages is executed again while spreedCapabilities are available.

To improve the situation in the long term, we should move more logic to viewModel and have better control over sequence of actions.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-24 15:25:42 +02:00
sowjanyakch
8bf9e3552e
rename variable selectedImageUri
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-23 16:40:06 +02:00
sowjanyakch
384ba6945f
ktlint format
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-23 16:40:06 +02:00
sowjanyakch
4dd22d6223
Get selectedImageUri from ViewModel
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-23 16:40:06 +02:00
sowjanyakch
bc02236801
Make Conversation name text limit to single line
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-23 16:40:06 +02:00
sowjanyakch
317f745806
Only display delete icon when user avatar is selected
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
2024-09-23 16:40:05 +02:00
Nextcloud Android Bot
44e87dbd42 Weekly 20.1.0 Alpha 05 2024-09-23 03:12:39 +00:00
Marcel Hibbe
b080e891bb
fix to not remove call buttons for federated conversations after 30 seconds
After 30 seconds (when the capabilities were updated) the call buttons of federated conversations were removed (this was done back then when fed calls were not implemented).

However this happened not always because of the check
"if (this::spreedCapabilities.isInitialized) {...."
It seems this check sometimes is false when it's supposed to be true. This has be to further investigated and has to be be simplified/improved by a cleaner architecture.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-20 13:46:21 +02:00
renovate[bot]
bddf1361f8
Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.7.3
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 16:56:56 +00:00
Julius Linus
5351296afd
Merge pull request #4240 from nextcloud/bugfix/4238/fixToHideMessageInputWhenNoRestriction
fix to hide messageInputFragment when user has no restriction to write
2024-09-19 18:48:25 +02:00
Nextcloud bot
663ba0a2ed
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-19 02:51:16 +00:00
github-actions[bot]
444dabda1e
Merge pull request #4246 from nextcloud/renovate/lifecycleversion
Update lifecycleVersion to v2.8.6
2024-09-18 23:33:12 +02:00
renovate[bot]
7c37d1f111
Update lifecycleVersion to v2.8.6
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 21:26:18 +00:00
renovate[bot]
d480fe3008
Update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.6
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 21:24:09 +00:00
github-actions[bot]
cb114b64f1
Merge pull request #4244 from nextcloud/renovate/androidx.lifecycle-lifecycle-runtime-ktx-2.x
Update dependency androidx.lifecycle:lifecycle-runtime-ktx to v2.8.6
2024-09-18 22:34:32 +02:00
github-actions[bot]
5c84125aa4
Merge pull request #4243 from nextcloud/renovate/androidx.compose-compose-bom-2024.x
Update dependency androidx.compose:compose-bom to v2024.09.02
2024-09-18 22:28:47 +02:00
renovate[bot]
ef3cd824c0
Update dependency androidx.lifecycle:lifecycle-runtime-ktx to v2.8.6
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 20:20:43 +00:00
renovate[bot]
c1c68570b3
Update dependency androidx.compose:compose-bom to v2024.09.02
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 20:18:10 +00:00
renovate[bot]
bc57bb20de Update dependency androidx.compose.ui:ui-test-junit4 to v1.7.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 22:10:23 +02:00
renovate[bot]
6122650202
Update dependency androidx.compose.runtime:runtime to v1.7.2
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 19:56:24 +00:00
Marcel Hibbe
9e91bdeb1d
fix to hide messageInputFragment when user has no restriction to write
The messageInputFragment was hidden by checkShowMessageInputView(), but it was immediately shown again by checkLobbyState()

This fix will execute checkShowMessageInputView() inside checkLobbyState() in the correct order.

Additionally, the check
checkLobbyState()
has to be already executed in
GetCapabilitiesInitialLoadState
as well as
checkShowCallButtons()

Otherwise the expected behavior would only be set after 30 seconds.

An improvemnt for the future must be to improve the capabilities handling.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-18 17:34:10 +02:00
Nextcloud bot
3db9bc6247
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-09-18 02:53:40 +00:00
Marcel Hibbe
28906dd999
dont show error when fetching pending invitations failed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-17 12:05:02 +02:00
Marcel Hibbe
5991b91460
fix to show accounts from older servers in switch account dialog
if invitations were not supported, the account did not show up

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2024-09-17 11:30:36 +02:00