Commit graph

2322 commits

Author SHA1 Message Date
Andy Scherzinger
9fb176dc88
make helper methods easy to access from java code
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-13 00:21:59 +02:00
Andy Scherzinger
0fe26b6d08
Merge pull request #2199 from nextcloud/feature/noid/markAsRead
Mark as read via notification
2022-07-13 00:20:43 +02:00
Andy Scherzinger
ea849281e5
Merge pull request #2210 from nextcloud/chore/noid/with-nullable-binding
Add method in NewBaseController to handle NPE catches for viewbinding
2022-07-12 16:31:55 +02:00
Dariusz Olszewski
dafa1bfb2e Mark as read - reduce scope of try/catch
NumberFormatException is expected only inside parseMessageId. To avoid masking other errors accidentally, seems better to have try/catch only around parseMessageId call.

Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
2022-07-12 12:51:03 +00:00
Dariusz Olszewski
97ea95c30f Mark as read - SpotBugs
Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
2022-07-12 12:51:03 +00:00
Andy Scherzinger
f91d45e2db Improve message id parsing
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-12 12:51:03 +00:00
Dariusz Olszewski
9a247b48ac Mark as read - correct error message
Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
2022-07-12 12:51:03 +00:00
Dariusz Olszewski
c3a31da6a9 Mark as read - extract buildIntentForAction function
Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
2022-07-12 12:51:03 +00:00
Dariusz Olszewski
7243142676 Mark as read - use message ID retrieved from server
Minimal set of changes, to be cleaned-up.

Signed-off-by: Dariusz Olszewski <starypatyk@users.noreply.github.com>
2022-07-12 12:51:03 +00:00
Andy Scherzinger
f977b566a5 Implement mark as read via notification
Resolves #2164

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-12 12:51:03 +00:00
Álvaro Brey
e7222529c1
Make private broadcast permission depend on applicationId
Otherwise we can't install QA and normal app side by side

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-12 13:16:35 +02:00
Álvaro Brey
8e3dc066b2
Add method in NewBaseController to handle NPE catches for viewbinding
This is really a symptom of unreliable design around the async logic in Controllers. The data async calls should have been separate from the controller,
so that the only asynchronicity the Controller has to deal with is UI-related, and can be cancelled safely on destroyView.

In the future as those controllers are converted to something that has a separate ViewModel, this kind of catch should be completely unneeded.

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-12 12:46:10 +02:00
Marcel Hibbe
1f5807b8de fix NPE for binding in onEmojiClickListener
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-07-11 17:24:56 +00:00
Marcel Hibbe
d983c62589 fix crash when changing status during call
"call" is not contained in predefinedStatusesList so it crashed when searching for it with predefinedStatusesList.first()

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-07-11 17:09:06 +00:00
Andy Scherzinger
82dbadc028
Merge pull request #2201 from nextcloud/bugfix/2198/fixNpeViewBindingTogglePublicConversation
catch NPE for binding in toggleCallHeader
2022-07-11 18:26:39 +02:00
Marcel Hibbe
0dbe8c0f2c
catch NPE for binding (loadCurrentStatus#onError)
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-07-11 13:44:24 +02:00
Marcel Hibbe
04c96dd400
catch NPE for binding
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-07-11 13:32:54 +02:00
Álvaro Brey
a24f49c737
Introduce DisposableSet to handle multiple disposables at once
This should be used in places where multiple Disposables are handled simultaneously as a simple way of
ensuring that all disposables are cleared on exit. For example on ViewModels and Controllers should likely use one
of these and clear it on their respective lifecycle end.

I've included an example use in ChatController, where it replaces an existing `ArrayList<Disposable>`, but the benefit
should be more visible in places where Disposables are currently handled separately.

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-07 16:47:17 +02:00
Andy Scherzinger
30cbe0f43c
set/read matching user context
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-07 14:29:33 +02:00
Andy Scherzinger
7b4b1b7e84
Revert "read matching user context"
This reverts commit 07c57bcfd1.

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-07 14:03:25 +02:00
Andy Scherzinger
07c57bcfd1
read matching user context
Resolves #2180

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-07 13:58:15 +02:00
Álvaro Brey
95119ba9d6
ProfileController: code cleanup
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-07 13:51:56 +02:00
Álvaro Brey
cb2ee730fa
WIP: upload profile picture from camera
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-07 13:51:55 +02:00
Andy Scherzinger
c151da3080
safeguard mapper for null values on fields that need to be json-parsed
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:23 +02:00
Álvaro Brey
886a3d0df2
UsersDao: make setUserAsActiveWithId blocking
Room won't accept non-blocking @Transactions, which makes sense

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-01 08:59:22 +02:00
Álvaro Brey
0ac26f557b
UsersDao/Repository: get rid of suspend functions
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-01 08:59:22 +02:00
Álvaro Brey
f339648875
UsersDao: fix race condition in setUserAsActiveWithId
Make the method return a Single instead, and don't make it a suspend function

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-01 08:59:22 +02:00
Andy Scherzinger
205292f9b0
fix review comments
Co-authored-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:21 +02:00
Andy Scherzinger
12f793567e
add arbitrary storage business layer
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:21 +02:00
Andy Scherzinger
ad223155d7
Deprecate UserUtils
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:21 +02:00
Andy Scherzinger
a99a173612
fix getUsersScheduledForDeletion query
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:21 +02:00
Andy Scherzinger
3ccf41d1a6
fix getUsers query
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:20 +02:00
Andy Scherzinger
f1dff03188
fix upsert logic for users
Co-authored-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:20 +02:00
Andy Scherzinger
dc83403606
Move from Single to Maybe
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:20 +02:00
Andy Scherzinger
6497c2d9b1
fix crash when navigating back from chat to conversation list
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:19 +02:00
Andy Scherzinger
85012e1acb
remove unused variable
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:18 +02:00
Andy Scherzinger
5742927ae8
remove unused method
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:18 +02:00
Andy Scherzinger
1e753e0250
Deprecate old interfaces and util classes and reference new one
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:17 +02:00
Andy Scherzinger
9f43eb5278
Rename CapabilitiesNgNew to CapabilitiesUtilNew and mark old one as deprecated
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:17 +02:00
Andy Scherzinger
9b55241881
remove unneeded @Serializable
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:17 +02:00
Andy Scherzinger
3b1d4b86a9
Add model to ArbitraryStorage db layer
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:16 +02:00
Andy Scherzinger
a207ad7b97
Rename ArbitraryStorageNgEntity to ArbitraryStorageEntity
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:16 +02:00
Andy Scherzinger
84c1874284
simplify call chain
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:16 +02:00
Andy Scherzinger
443110557c
further renames for UserEntity
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:16 +02:00
Andy Scherzinger
9d4b6b4392
remove serializable annotation on room entities
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:15 +02:00
Andy Scherzinger
4233e1bbc1
Rename UserNgEntity to UserEntity
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:15 +02:00
Andy Scherzinger
25a5346435
unify room converter's json handling to always use LoganSquare
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:15 +02:00
Andy Scherzinger
2a0ee1c90d
move extension functions to methods
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:14 +02:00
Andy Scherzinger
c9ba0fe870
annotate JvmStatic for more idiomatic access from Java
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:14 +02:00
Andy Scherzinger
74fc56fa7e
Replace Observable with Single, let Repositories serve Models
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:14 +02:00
Andy Scherzinger
359104d6ba
rename to isDbRoomMigrated and setDbRoomMigrated for proper kotlin interoperability
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:13 +02:00
Álvaro Brey
afbec06ad3
WIP improvements during pair programming call
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-01 08:59:13 +02:00
Andy Scherzinger
5881e5021c
make disposal of searchViewDisposable null-safe
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:13 +02:00
Andy Scherzinger
d3286bf6bc
update test cases
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:12 +02:00
Andy Scherzinger
925691299a
ignore spotbugs correctness for an android api array access with fixed index
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:12 +02:00
Andy Scherzinger
565903b956
remove flow and use rx
...to stay in line with currently used concepts

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:11 +02:00
Álvaro Brey
f7786e1b93
Fix flow listening in SettingsController
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-07-01 08:59:11 +02:00
Andy Scherzinger
27d5059e92
trying to extract flow value
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:10 +02:00
Andy Scherzinger
f7ca1ec804
DB version switcher for requery
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:10 +02:00
Andy Scherzinger
d55c3fa68e
Log db migrations
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:10 +02:00
Andy Scherzinger
8c27b54377
move everything to flows
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:09 +02:00
Andy Scherzinger
730aeb2944
fix detekt and ktlint issues
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:09 +02:00
Andy Scherzinger
5ffa3c44fd
create new capabilities util add license header and format kotlin code
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:08 +02:00
Andy Scherzinger
75c8625aee
run user repo call in coroutine
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:08 +02:00
Andy Scherzinger
349d5fe19b
dual-mode of DB fpr requery and room
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:08 +02:00
Andy Scherzinger
05db482d06
adding arbitrary storage implementation, initial steps towards new util classes
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:59:07 +02:00
Andy Scherzinger
db1dd66204
port room database layer from master-broken to up-to-date master
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-07-01 08:58:56 +02:00
Álvaro Brey
e176b38d8b
NewBaseController: Inject kotlin fields without @JvmField and nullable type
These do not need to be nullable as they will be injected immediately.
This will make child controllers code much cleaner.

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-06-28 17:00:01 +02:00
Tim Krüger
834d310eb8
Use simple class name for logging
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:35:42 +02:00
Tim Krüger
f87e0a2d85
Set PendingIntent flag immutable
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:34:11 +02:00
Tim Krüger
174a7e53d8
Remove unneeded '@SuppressLint("InlinedApi")'
The annotation '@RequiresApi' was already set correctly.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:24:28 +02:00
Tim Krüger
10a4521af9
Rename 'WebRtcAudioManger' to 'WebRtcAudioManager'
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-23 15:20:32 +02:00
drone
272f2e839c Merge commit '58c40e6ee244e6b78cc8754e8cc621e8400507d7' 2022-06-23 08:59:34 +00:00
Andy Scherzinger
331309405d
Set intent flag required by Android 12 (SDK 31)
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-23 10:21:03 +02:00
Álvaro Brey
c4d9105613
Merge pull request #2148 from nextcloud/fix/callactivity-receiver
Use custom permission for unfiltered broadcast receiver in CallActivity
2022-06-23 09:36:00 +02:00
Tim Krüger
f366c75f68
Add mandetory intent flags
Since SDK 31 for an 'PendingIntent' the intent flags 'FLAG_IMMUTABLE' or
'FLAG_IMMUTABLE' are mandetory.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-22 15:33:26 +02:00
Andy Scherzinger
3096d90bc6
only set intent flag for sdk>=31
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-22 11:21:46 +02:00
drone
4b67a71ff4 Merge commit '1f936cb677ed17f93fba461ae59ac84bda5e99db' 2022-06-22 09:00:28 +00:00
Andy Scherzinger
1f936cb677
migrate to sdk=31
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-22 10:59:38 +02:00
Tim Krüger
6e4841ae3a
Rename 'MagicAudioManager' and 'MagicBluetoothManager'
It's not magic but WebRtc related.

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-21 15:13:47 +02:00
Tim Krüger
e14f00fae7
Request 'BLUETOOTH_CONNECT' permissions
Request the 'BLUETOOTH_CONNECT' permissions if not already granted.

If the permission is be granted in this request, the
'MagicBluetoothManger' will be started.

See: #2132

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-21 15:13:40 +02:00
Andy Scherzinger
205d00d443
harmonize license header in java/kt files
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 16:42:53 +02:00
Andy Scherzinger
0b2b0cca51
Use proper Android logger
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 16:36:02 +02:00
Andy Scherzinger
49792ecf1e
rename blacklist/whitelist variables to include/exclude sets to reflect their collection type
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 16:29:57 +02:00
Andy Scherzinger
61ec38dd5e
replace deprecated listener due to update to exoplayer 2.18.0
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 16:25:27 +02:00
Andy Scherzinger
993e50dbdb
rename variable to reflect its collection type
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 15:37:42 +02:00
Andy Scherzinger
34f8bb5ab7
use fixed strings where possible to limit lint score bump
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 15:25:11 +02:00
Andy Scherzinger
cd44de757c
code reformatting
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 15:17:08 +02:00
Andy Scherzinger
08f5274af9
add cipher migration for version 4 of sqlcipher
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-18 14:44:45 +02:00
Tim Krüger
dedbe40cc0
Launch 'MagicBluetoothManager' independently
This change is needed to make the 'MagicBluetoothManager' startable
after the from Android SDK 31 introduced BLUETOOTH_CONNECT is granted by
the user.

Before this change the 'MagicBluetoothManager' was only started in
'MagicAudioManager#start'. Now the new method
'MagicAudioManager#startBluetoothManager' can be used to start the
'MagicBluetoothManager'.

This change is also a preperation to fix #1309 and #2114.

See: #2132, #1309, #2124

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-17 15:51:44 +02:00
Tim Krüger
4821b02729
Add Android build switch for checking bluetooth permissions
Refactored method 'hasPermission' to 'hasNoBluetoothPermission'. The new method
respect the in SKD 31 introduced permission BLUETOOTH_CONNECT. For older SDK
versions the permission BLUETOOTH will be used.

Additionaly make methods private which need bluetooth permissions and only
called locally. For public methods which need bluetooth permissions the method
'hasNoBluetoothPermission' is called to check them.
Also add suppress lint annotation for 'MissingPermission'.

From SDK 30 to SDK 31 the bluetooth related permissions changed and it
is suggested to add the attribute 'android:maxSdkVersion="30"' to the
legacy BLUETOOTH permission in the 'AndroidManifest.xml' [1]:

> For your legacy Bluetooth-related permission declarations, set
> android:maxSdkVersion to 30. This app compatibility step helps the system
> grant your app only the Bluetooth permissions that it needs when installed
> on devices that run Android 12 or higher.

This is explicitly not done here!

During runtime (on Android 12) while starting the 'MagicBluetoothManger' the
following part in 'android.bluetooth.BluetootHeadset' constructor will be
executed and results in the previous exception:

  // Preserve legacy compatibility where apps were depending on
  // registerStateChangeCallback() performing a permissions check which
  // has been relaxed in modern platform versions
  if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.R
           && context.checkSelfPermission(android.Manifest.permission.BLUETOOTH)
                   != PackageManager.PERMISSION_GRANTED) {
     throw new SecurityException("Need BLUETOOTH permission");
 }

In the 'build.gradle' the 'targetSdkVersion 30' and 'compileSdkVersion 31' is
configured. Because the 'MagicBluetoothManager' checks for the 'targetSdkVersion'
instead of 'Build.VERSION.SDK_INT' also on a Android 12 (SDK 31) the 'BLUETOOTH'
permission is needed.

So the solution is to don't set `android:maxSdkVersion="30"' for the BLUETOOTH
permission and request the BLUETOOTH_CONNECT permission.

Resolves: #2132
See:
  [1] https://web.archive.org/web/20220416121005/https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#declare-android12-or-higher

Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-06-17 15:51:44 +02:00
Marcel Hibbe
c628c23557 fix to load conversation list (restricted user status)
when the user status app on server is restricted to only some groups, the capabilities for users that are excluded still contains the "user_status" capability.
For the android talk app, this caused that the conversations were not shown.
With this fix, the conversations will be loaded also if the "user_status" is mistakenly set. Additionally, the option to set the status will be hidden.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
2022-06-15 13:45:53 +00:00
Álvaro Brey
bb7e82fbcb
Use custom permission for unfiltered broadcast receiver in CallActivity
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-06-14 15:51:04 +02:00
Andy Scherzinger
dd129b4e6c
further centralize mimetype definitions
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-10 13:13:37 +02:00
Andy Scherzinger
444ff05cf5
centralize mime type definitions
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-09 21:02:31 +02:00
Álvaro Brey
49d2f40e3f ProfileController: fix non-exhaustive when
Crashes Kotlin 1.7.0

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
2022-06-09 17:57:01 +00:00
Andy Scherzinger
3e99dc065b
improve code base from review comments
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-09 12:03:03 +02:00
Andy Scherzinger
3d0f154d7d
simplify worker call
Co-authored-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-09 12:03:03 +02:00
Andy Scherzinger
d96ca1eb67
block selection of encrypted files as well as files that are not allowed to be re-shared
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-09 00:18:27 +02:00
Andy Scherzinger
df61a4df87
replace share files remote item chooser with new implementation and remove any legacy implementation
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2022-06-08 23:40:09 +02:00