From a9c9d9d25b18b896b0d8cf6f5ef3f80a71ff6949 Mon Sep 17 00:00:00 2001 From: Robin Linden Date: Sun, 9 Feb 2025 00:35:00 +0100 Subject: [PATCH] Move the PublicKey type into the core library This is in preparation of using it in the database types now that that is a thing that's possible. --- .../src/androidTest/kotlin/IntegrationTest.kt | 4 ++-- atox/src/main/kotlin/ActionReceiver.kt | 4 ++-- .../main/kotlin/tox/EventListenerCallbacks.kt | 4 ++-- atox/src/main/kotlin/tox/ToxStarter.kt | 4 ++-- atox/src/main/kotlin/ui/NotificationHelper.kt | 2 +- atox/src/main/kotlin/ui/call/CallFragment.kt | 5 +++-- atox/src/main/kotlin/ui/call/CallViewModel.kt | 2 +- atox/src/main/kotlin/ui/chat/ChatFragment.kt | 2 +- atox/src/main/kotlin/ui/chat/ChatViewModel.kt | 5 +++-- .../ui/contactlist/ContactListFragment.kt | 2 +- .../ui/contactlist/ContactListViewModel.kt | 2 +- .../contactprofile/ContactProfileFragment.kt | 4 ++-- .../contactprofile/ContactProfileViewModel.kt | 4 ++-- .../createprofile/CreateProfileViewModel.kt | 4 ++-- .../ui/friendrequest/FriendRequestFragment.kt | 4 ++-- .../friendrequest/FriendRequestViewModel.kt | 4 ++-- core/src/main/kotlin/vo/PublicKey.kt | 19 +++++++++++++++++++ domain/src/androidTest/kotlin/tox/ToxTest.kt | 1 + domain/src/main/kotlin/feature/CallManager.kt | 4 ++-- domain/src/main/kotlin/feature/ChatManager.kt | 4 ++-- .../src/main/kotlin/feature/ContactManager.kt | 4 ++-- .../kotlin/feature/FileTransferManager.kt | 4 ++-- .../kotlin/feature/FriendRequestManager.kt | 4 ++-- domain/src/main/kotlin/feature/UserManager.kt | 4 ++-- .../kotlin/tox/BootstrapNodeJsonParser.kt | 3 ++- domain/src/main/kotlin/tox/SaveManager.kt | 3 ++- domain/src/main/kotlin/tox/Tox.kt | 3 ++- .../src/main/kotlin/tox/ToxAvEventListener.kt | 3 ++- .../src/main/kotlin/tox/ToxEventListener.kt | 4 +++- domain/src/main/kotlin/tox/ToxTypes.kt | 13 ++----------- domain/src/main/kotlin/tox/ToxWrapper.kt | 1 + domain/src/test/kotlin/tox/ToxTypesTest.kt | 3 ++- 32 files changed, 77 insertions(+), 56 deletions(-) create mode 100644 core/src/main/kotlin/vo/PublicKey.kt diff --git a/atox/src/androidTest/kotlin/IntegrationTest.kt b/atox/src/androidTest/kotlin/IntegrationTest.kt index 0ccdc4e8e..88704a6ea 100644 --- a/atox/src/androidTest/kotlin/IntegrationTest.kt +++ b/atox/src/androidTest/kotlin/IntegrationTest.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020-2024 Robin Lindén +// SPDX-FileCopyrightText: 2020-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -34,8 +34,8 @@ import ltd.evilcorp.atox.di.DaoModule import ltd.evilcorp.atox.di.ViewModelModule import ltd.evilcorp.atox.tox.BootstrapNodeRegistryImpl import ltd.evilcorp.core.db.Database +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.tox.BootstrapNodeRegistry -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.SaveManager import org.hamcrest.core.AllOf.allOf import org.junit.Rule diff --git a/atox/src/main/kotlin/ActionReceiver.kt b/atox/src/main/kotlin/ActionReceiver.kt index 05a8f54c0..67fe0562d 100644 --- a/atox/src/main/kotlin/ActionReceiver.kt +++ b/atox/src/main/kotlin/ActionReceiver.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2021-2024 Robin Lindén +// SPDX-FileCopyrightText: 2021-2025 Robin Lindén // SPDX-FileCopyrightText: 2021-2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -23,12 +23,12 @@ import kotlinx.coroutines.withContext import ltd.evilcorp.atox.ui.NotificationHelper import ltd.evilcorp.core.repository.ContactRepository import ltd.evilcorp.core.vo.Contact +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.UserStatus import ltd.evilcorp.domain.feature.CallManager import ltd.evilcorp.domain.feature.CallState import ltd.evilcorp.domain.feature.ChatManager import ltd.evilcorp.domain.feature.ContactManager -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox const val KEY_TEXT_REPLY = "key_text_reply" diff --git a/atox/src/main/kotlin/tox/EventListenerCallbacks.kt b/atox/src/main/kotlin/tox/EventListenerCallbacks.kt index 40135c80a..3b61968aa 100644 --- a/atox/src/main/kotlin/tox/EventListenerCallbacks.kt +++ b/atox/src/main/kotlin/tox/EventListenerCallbacks.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2024 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -30,13 +30,13 @@ import ltd.evilcorp.core.vo.FileKind import ltd.evilcorp.core.vo.FileTransfer import ltd.evilcorp.core.vo.FriendRequest import ltd.evilcorp.core.vo.Message +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.Sender import ltd.evilcorp.core.vo.UserStatus import ltd.evilcorp.domain.av.AudioPlayer import ltd.evilcorp.domain.feature.CallManager import ltd.evilcorp.domain.feature.ChatManager import ltd.evilcorp.domain.feature.FileTransferManager -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox import ltd.evilcorp.domain.tox.ToxAvEventListener import ltd.evilcorp.domain.tox.ToxEventListener diff --git a/atox/src/main/kotlin/tox/ToxStarter.kt b/atox/src/main/kotlin/tox/ToxStarter.kt index 2388b987d..21fbcd36e 100644 --- a/atox/src/main/kotlin/tox/ToxStarter.kt +++ b/atox/src/main/kotlin/tox/ToxStarter.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2021 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -13,9 +13,9 @@ import im.tox.tox4j.crypto.exceptions.ToxDecryptionException import javax.inject.Inject import ltd.evilcorp.atox.ToxService import ltd.evilcorp.atox.settings.Settings +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.FileTransferManager import ltd.evilcorp.domain.feature.UserManager -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.SaveManager import ltd.evilcorp.domain.tox.SaveOptions import ltd.evilcorp.domain.tox.Tox diff --git a/atox/src/main/kotlin/ui/NotificationHelper.kt b/atox/src/main/kotlin/ui/NotificationHelper.kt index 5490e44f9..244347dd6 100644 --- a/atox/src/main/kotlin/ui/NotificationHelper.kt +++ b/atox/src/main/kotlin/ui/NotificationHelper.kt @@ -46,8 +46,8 @@ import ltd.evilcorp.atox.ui.chat.CONTACT_PUBLIC_KEY import ltd.evilcorp.atox.ui.chat.FOCUS_ON_MESSAGE_BOX import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FriendRequest +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.UserStatus -import ltd.evilcorp.domain.tox.PublicKey private const val TAG = "NotificationHelper" diff --git a/atox/src/main/kotlin/ui/call/CallFragment.kt b/atox/src/main/kotlin/ui/call/CallFragment.kt index 7cd5c0d69..1b2fa540e 100644 --- a/atox/src/main/kotlin/ui/call/CallFragment.kt +++ b/atox/src/main/kotlin/ui/call/CallFragment.kt @@ -1,4 +1,5 @@ -// SPDX-FileCopyrightText: 2021 aTox contributors +// SPDX-FileCopyrightText: 2021-2025 Robin Lindén +// SPDX-FileCopyrightText: 2021-2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -22,8 +23,8 @@ import ltd.evilcorp.atox.requireStringArg import ltd.evilcorp.atox.ui.BaseFragment import ltd.evilcorp.atox.ui.chat.CONTACT_PUBLIC_KEY import ltd.evilcorp.atox.vmFactory +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.CallState -import ltd.evilcorp.domain.tox.PublicKey private const val PERMISSION = Manifest.permission.RECORD_AUDIO diff --git a/atox/src/main/kotlin/ui/call/CallViewModel.kt b/atox/src/main/kotlin/ui/call/CallViewModel.kt index 875bc82a2..5adcbfacd 100644 --- a/atox/src/main/kotlin/ui/call/CallViewModel.kt +++ b/atox/src/main/kotlin/ui/call/CallViewModel.kt @@ -15,9 +15,9 @@ import kotlinx.coroutines.launch import ltd.evilcorp.atox.ProximityScreenOff import ltd.evilcorp.atox.ui.NotificationHelper import ltd.evilcorp.core.vo.Contact +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.CallManager import ltd.evilcorp.domain.feature.ContactManager -import ltd.evilcorp.domain.tox.PublicKey class CallViewModel @Inject constructor( private val scope: CoroutineScope, diff --git a/atox/src/main/kotlin/ui/chat/ChatFragment.kt b/atox/src/main/kotlin/ui/chat/ChatFragment.kt index 6bd4e8f5f..df38b7e3c 100644 --- a/atox/src/main/kotlin/ui/chat/ChatFragment.kt +++ b/atox/src/main/kotlin/ui/chat/ChatFragment.kt @@ -52,9 +52,9 @@ import ltd.evilcorp.core.vo.ConnectionStatus import ltd.evilcorp.core.vo.FileTransfer import ltd.evilcorp.core.vo.Message import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.isComplete import ltd.evilcorp.domain.feature.CallState -import ltd.evilcorp.domain.tox.PublicKey private const val TAG = "ChatFragment" const val CONTACT_PUBLIC_KEY = "publicKey" diff --git a/atox/src/main/kotlin/ui/chat/ChatViewModel.kt b/atox/src/main/kotlin/ui/chat/ChatViewModel.kt index 3f3f0ed27..70e04fe34 100644 --- a/atox/src/main/kotlin/ui/chat/ChatViewModel.kt +++ b/atox/src/main/kotlin/ui/chat/ChatViewModel.kt @@ -1,4 +1,5 @@ -// SPDX-FileCopyrightText: 2019-2022 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén +// SPDX-FileCopyrightText: 2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -33,13 +34,13 @@ import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FileTransfer import ltd.evilcorp.core.vo.Message import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.CallManager import ltd.evilcorp.domain.feature.CallState import ltd.evilcorp.domain.feature.ChatManager import ltd.evilcorp.domain.feature.ContactManager import ltd.evilcorp.domain.feature.ExportManager import ltd.evilcorp.domain.feature.FileTransferManager -import ltd.evilcorp.domain.tox.PublicKey private const val TAG = "ChatViewModel" diff --git a/atox/src/main/kotlin/ui/contactlist/ContactListFragment.kt b/atox/src/main/kotlin/ui/contactlist/ContactListFragment.kt index 0f84f315d..5c11f2a8e 100644 --- a/atox/src/main/kotlin/ui/contactlist/ContactListFragment.kt +++ b/atox/src/main/kotlin/ui/contactlist/ContactListFragment.kt @@ -49,8 +49,8 @@ import ltd.evilcorp.atox.vmFactory import ltd.evilcorp.core.vo.ConnectionStatus import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FriendRequest +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.User -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.ToxID import ltd.evilcorp.domain.tox.ToxSaveStatus diff --git a/atox/src/main/kotlin/ui/contactlist/ContactListViewModel.kt b/atox/src/main/kotlin/ui/contactlist/ContactListViewModel.kt index 69e70cdc5..f8bb28806 100644 --- a/atox/src/main/kotlin/ui/contactlist/ContactListViewModel.kt +++ b/atox/src/main/kotlin/ui/contactlist/ContactListViewModel.kt @@ -28,6 +28,7 @@ import ltd.evilcorp.atox.tox.ToxStarter import ltd.evilcorp.atox.ui.NotificationHelper import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FriendRequest +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.User import ltd.evilcorp.domain.feature.CallManager import ltd.evilcorp.domain.feature.ChatManager @@ -36,7 +37,6 @@ import ltd.evilcorp.domain.feature.FileTransferManager import ltd.evilcorp.domain.feature.FriendRequestManager import ltd.evilcorp.domain.feature.UserManager import ltd.evilcorp.domain.tox.ProxyType -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.SaveOptions import ltd.evilcorp.domain.tox.Tox import ltd.evilcorp.domain.tox.ToxSaveStatus diff --git a/atox/src/main/kotlin/ui/contactprofile/ContactProfileFragment.kt b/atox/src/main/kotlin/ui/contactprofile/ContactProfileFragment.kt index 7dd6ef617..0c65e2815 100644 --- a/atox/src/main/kotlin/ui/contactprofile/ContactProfileFragment.kt +++ b/atox/src/main/kotlin/ui/contactprofile/ContactProfileFragment.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2024 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // SPDX-FileCopyrightText: 2021-2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -18,7 +18,7 @@ import ltd.evilcorp.atox.ui.BaseFragment import ltd.evilcorp.atox.ui.chat.CONTACT_PUBLIC_KEY import ltd.evilcorp.atox.vmFactory import ltd.evilcorp.core.vo.ConnectionStatus -import ltd.evilcorp.domain.tox.PublicKey +import ltd.evilcorp.core.vo.PublicKey class ContactProfileFragment : BaseFragment(FragmentContactProfileBinding::inflate) { private val viewModel: ContactProfileViewModel by viewModels { vmFactory } diff --git a/atox/src/main/kotlin/ui/contactprofile/ContactProfileViewModel.kt b/atox/src/main/kotlin/ui/contactprofile/ContactProfileViewModel.kt index e4cc826db..66e6e42db 100644 --- a/atox/src/main/kotlin/ui/contactprofile/ContactProfileViewModel.kt +++ b/atox/src/main/kotlin/ui/contactprofile/ContactProfileViewModel.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2020 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -9,8 +9,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import javax.inject.Inject import ltd.evilcorp.core.vo.Contact +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.ContactManager -import ltd.evilcorp.domain.tox.PublicKey class ContactProfileViewModel @Inject constructor(contactManager: ContactManager) : ViewModel() { var publicKey: PublicKey = PublicKey("") diff --git a/atox/src/main/kotlin/ui/createprofile/CreateProfileViewModel.kt b/atox/src/main/kotlin/ui/createprofile/CreateProfileViewModel.kt index c5524c4e4..830be9b72 100644 --- a/atox/src/main/kotlin/ui/createprofile/CreateProfileViewModel.kt +++ b/atox/src/main/kotlin/ui/createprofile/CreateProfileViewModel.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020-2021 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -9,9 +9,9 @@ import android.net.Uri import androidx.lifecycle.ViewModel import javax.inject.Inject import ltd.evilcorp.atox.tox.ToxStarter +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.User import ltd.evilcorp.domain.feature.UserManager -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox import ltd.evilcorp.domain.tox.ToxSaveStatus diff --git a/atox/src/main/kotlin/ui/friendrequest/FriendRequestFragment.kt b/atox/src/main/kotlin/ui/friendrequest/FriendRequestFragment.kt index dfe797614..22bcce77f 100644 --- a/atox/src/main/kotlin/ui/friendrequest/FriendRequestFragment.kt +++ b/atox/src/main/kotlin/ui/friendrequest/FriendRequestFragment.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020-2024 Robin Lindén +// SPDX-FileCopyrightText: 2020-2025 Robin Lindén // SPDX-FileCopyrightText: 2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -18,7 +18,7 @@ import ltd.evilcorp.atox.requireStringArg import ltd.evilcorp.atox.ui.BaseFragment import ltd.evilcorp.atox.vmFactory import ltd.evilcorp.core.vo.FriendRequest -import ltd.evilcorp.domain.tox.PublicKey +import ltd.evilcorp.core.vo.PublicKey const val FRIEND_REQUEST_PUBLIC_KEY = "FRIEND_REQUEST_PUBLIC_KEY" diff --git a/atox/src/main/kotlin/ui/friendrequest/FriendRequestViewModel.kt b/atox/src/main/kotlin/ui/friendrequest/FriendRequestViewModel.kt index 010749d3e..396b147a4 100644 --- a/atox/src/main/kotlin/ui/friendrequest/FriendRequestViewModel.kt +++ b/atox/src/main/kotlin/ui/friendrequest/FriendRequestViewModel.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020-2024 Robin Lindén +// SPDX-FileCopyrightText: 2020-2025 Robin Lindén // SPDX-FileCopyrightText: 2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -10,8 +10,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import javax.inject.Inject import ltd.evilcorp.core.vo.FriendRequest +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.feature.FriendRequestManager -import ltd.evilcorp.domain.tox.PublicKey class FriendRequestViewModel @Inject constructor(private val friendRequests: FriendRequestManager) : ViewModel() { fun byId(pk: PublicKey): LiveData = friendRequests.get(pk).asLiveData() diff --git a/core/src/main/kotlin/vo/PublicKey.kt b/core/src/main/kotlin/vo/PublicKey.kt new file mode 100644 index 000000000..843ca4b25 --- /dev/null +++ b/core/src/main/kotlin/vo/PublicKey.kt @@ -0,0 +1,19 @@ +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén +// +// SPDX-License-Identifier: GPL-3.0-only + +package ltd.evilcorp.core.vo + +private fun hexToBytes(hex: String) = hex.chunked(2).map { it.uppercase().toInt(radix = 16).toByte() }.toByteArray() +private fun bytesToHex(bytes: ByteArray) = bytes.joinToString(separator = "") { "%02X".format(it) } + +@JvmInline +value class PublicKey(private val value: String) { + fun bytes() = hexToBytes(value) + fun string() = value + fun fingerprint() = value.take(8) + + companion object { + fun fromBytes(publicKey: ByteArray) = PublicKey(bytesToHex(publicKey)) + } +} diff --git a/domain/src/androidTest/kotlin/tox/ToxTest.kt b/domain/src/androidTest/kotlin/tox/ToxTest.kt index 7548a1cad..a1cf3937f 100644 --- a/domain/src/androidTest/kotlin/tox/ToxTest.kt +++ b/domain/src/androidTest/kotlin/tox/ToxTest.kt @@ -17,6 +17,7 @@ import ltd.evilcorp.core.db.Database import ltd.evilcorp.core.repository.ContactRepository import ltd.evilcorp.core.repository.UserRepository import ltd.evilcorp.core.vo.ConnectionStatus +import ltd.evilcorp.core.vo.PublicKey import org.junit.runner.RunWith class FakeBootstrapNodeRegistry(val nodes: List = listOf()) : BootstrapNodeRegistry { diff --git a/domain/src/main/kotlin/feature/CallManager.kt b/domain/src/main/kotlin/feature/CallManager.kt index 875cff3c6..7a8240991 100644 --- a/domain/src/main/kotlin/feature/CallManager.kt +++ b/domain/src/main/kotlin/feature/CallManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2021-2022 aTox contributors +// SPDX-FileCopyrightText: 2021-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -18,8 +18,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import ltd.evilcorp.core.vo.Contact +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.av.AudioCapture -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox sealed class CallState { diff --git a/domain/src/main/kotlin/feature/ChatManager.kt b/domain/src/main/kotlin/feature/ChatManager.kt index 8af913b9c..2b1a4ee95 100644 --- a/domain/src/main/kotlin/feature/ChatManager.kt +++ b/domain/src/main/kotlin/feature/ChatManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2024 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -17,9 +17,9 @@ import ltd.evilcorp.core.repository.MessageRepository import ltd.evilcorp.core.vo.ConnectionStatus import ltd.evilcorp.core.vo.Message import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.Sender import ltd.evilcorp.domain.tox.MAX_MESSAGE_LENGTH -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox private fun String.chunked(chunkSizeInBytes: Int): MutableList { diff --git a/domain/src/main/kotlin/feature/ContactManager.kt b/domain/src/main/kotlin/feature/ContactManager.kt index d28a30612..525ab3914 100644 --- a/domain/src/main/kotlin/feature/ContactManager.kt +++ b/domain/src/main/kotlin/feature/ContactManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2021 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -10,7 +10,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import ltd.evilcorp.core.repository.ContactRepository import ltd.evilcorp.core.vo.Contact -import ltd.evilcorp.domain.tox.PublicKey +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.domain.tox.Tox import ltd.evilcorp.domain.tox.ToxID diff --git a/domain/src/main/kotlin/feature/FileTransferManager.kt b/domain/src/main/kotlin/feature/FileTransferManager.kt index 89da2de43..2b7892bdd 100644 --- a/domain/src/main/kotlin/feature/FileTransferManager.kt +++ b/domain/src/main/kotlin/feature/FileTransferManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2024 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -32,11 +32,11 @@ import ltd.evilcorp.core.vo.FileKind import ltd.evilcorp.core.vo.FileTransfer import ltd.evilcorp.core.vo.Message import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.Sender import ltd.evilcorp.core.vo.isComplete import ltd.evilcorp.core.vo.isStarted import ltd.evilcorp.domain.tox.MAX_AVATAR_SIZE -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox private const val TAG = "FileTransferManager" diff --git a/domain/src/main/kotlin/feature/FriendRequestManager.kt b/domain/src/main/kotlin/feature/FriendRequestManager.kt index 288e4f5e5..1ff18a6dd 100644 --- a/domain/src/main/kotlin/feature/FriendRequestManager.kt +++ b/domain/src/main/kotlin/feature/FriendRequestManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2024 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // SPDX-FileCopyrightText: 2022 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -17,8 +17,8 @@ import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FriendRequest import ltd.evilcorp.core.vo.Message import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.Sender -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox class FriendRequestManager @Inject constructor( diff --git a/domain/src/main/kotlin/feature/UserManager.kt b/domain/src/main/kotlin/feature/UserManager.kt index f249c9610..e5564a840 100644 --- a/domain/src/main/kotlin/feature/UserManager.kt +++ b/domain/src/main/kotlin/feature/UserManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2021 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -8,9 +8,9 @@ import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import ltd.evilcorp.core.repository.UserRepository +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.User import ltd.evilcorp.core.vo.UserStatus -import ltd.evilcorp.domain.tox.PublicKey import ltd.evilcorp.domain.tox.Tox class UserManager @Inject constructor( diff --git a/domain/src/main/kotlin/tox/BootstrapNodeJsonParser.kt b/domain/src/main/kotlin/tox/BootstrapNodeJsonParser.kt index d282cd457..cd41b5e58 100644 --- a/domain/src/main/kotlin/tox/BootstrapNodeJsonParser.kt +++ b/domain/src/main/kotlin/tox/BootstrapNodeJsonParser.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2021 aTox contributors +// SPDX-FileCopyrightText: 2021-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -6,6 +6,7 @@ package ltd.evilcorp.domain.tox import android.util.Log import javax.inject.Inject +import ltd.evilcorp.core.vo.PublicKey import org.json.JSONObject private const val TAG = "BootstrapNodeJsonParser" diff --git a/domain/src/main/kotlin/tox/SaveManager.kt b/domain/src/main/kotlin/tox/SaveManager.kt index 5c89b1a00..c5c792e55 100644 --- a/domain/src/main/kotlin/tox/SaveManager.kt +++ b/domain/src/main/kotlin/tox/SaveManager.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2022 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -10,6 +10,7 @@ import android.util.Log import androidx.core.util.writeBytes import java.io.File import javax.inject.Inject +import ltd.evilcorp.core.vo.PublicKey private const val TAG = "AndroidSaveManager" diff --git a/domain/src/main/kotlin/tox/Tox.kt b/domain/src/main/kotlin/tox/Tox.kt index a2c236962..5dd7ce0e8 100644 --- a/domain/src/main/kotlin/tox/Tox.kt +++ b/domain/src/main/kotlin/tox/Tox.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2023 Robin Lindén +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // SPDX-FileCopyrightText: 2019-2020 aTox contributors // // SPDX-License-Identifier: GPL-3.0-only @@ -24,6 +24,7 @@ import ltd.evilcorp.core.vo.ConnectionStatus import ltd.evilcorp.core.vo.Contact import ltd.evilcorp.core.vo.FileKind import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.UserStatus private const val TAG = "Tox" diff --git a/domain/src/main/kotlin/tox/ToxAvEventListener.kt b/domain/src/main/kotlin/tox/ToxAvEventListener.kt index 9deb098e2..a82454b17 100644 --- a/domain/src/main/kotlin/tox/ToxAvEventListener.kt +++ b/domain/src/main/kotlin/tox/ToxAvEventListener.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 aTox contributors +// SPDX-FileCopyrightText: 2020-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -8,6 +8,7 @@ import im.tox.tox4j.av.callbacks.ToxAvEventListener import im.tox.tox4j.av.enums.ToxavFriendCallState import java.util.EnumSet import javax.inject.Inject +import ltd.evilcorp.core.vo.PublicKey import scala.Option import scala.Tuple3 diff --git a/domain/src/main/kotlin/tox/ToxEventListener.kt b/domain/src/main/kotlin/tox/ToxEventListener.kt index 3bd361cd1..8fd8bb7fb 100644 --- a/domain/src/main/kotlin/tox/ToxEventListener.kt +++ b/domain/src/main/kotlin/tox/ToxEventListener.kt @@ -1,4 +1,5 @@ -// SPDX-FileCopyrightText: 2019-2020 aTox contributors +// SPDX-FileCopyrightText: 2019 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -11,6 +12,7 @@ import im.tox.tox4j.core.enums.ToxMessageType import im.tox.tox4j.core.enums.ToxUserStatus import javax.inject.Inject import ltd.evilcorp.core.vo.ConnectionStatus +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.UserStatus typealias FriendLosslessPacketHandler = (publicKey: String, data: ByteArray) -> Unit diff --git a/domain/src/main/kotlin/tox/ToxTypes.kt b/domain/src/main/kotlin/tox/ToxTypes.kt index 807c16feb..357880b91 100644 --- a/domain/src/main/kotlin/tox/ToxTypes.kt +++ b/domain/src/main/kotlin/tox/ToxTypes.kt @@ -1,19 +1,10 @@ -// SPDX-FileCopyrightText: 2019-2021 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only package ltd.evilcorp.domain.tox -@JvmInline -value class PublicKey(private val value: String) { - fun bytes() = value.hexToBytes() - fun string() = value - fun fingerprint() = value.take(8) - - companion object { - fun fromBytes(publicKey: ByteArray) = PublicKey(publicKey.bytesToHex()) - } -} +import ltd.evilcorp.core.vo.PublicKey @JvmInline value class ToxID(private val value: String) { diff --git a/domain/src/main/kotlin/tox/ToxWrapper.kt b/domain/src/main/kotlin/tox/ToxWrapper.kt index 9b1c60852..3945b8f94 100644 --- a/domain/src/main/kotlin/tox/ToxWrapper.kt +++ b/domain/src/main/kotlin/tox/ToxWrapper.kt @@ -16,6 +16,7 @@ import im.tox.tox4j.impl.jni.ToxCoreImpl import kotlin.random.Random import ltd.evilcorp.core.vo.FileKind import ltd.evilcorp.core.vo.MessageType +import ltd.evilcorp.core.vo.PublicKey import ltd.evilcorp.core.vo.UserStatus private const val TAG = "ToxWrapper" diff --git a/domain/src/test/kotlin/tox/ToxTypesTest.kt b/domain/src/test/kotlin/tox/ToxTypesTest.kt index 4438848e9..d2433088d 100644 --- a/domain/src/test/kotlin/tox/ToxTypesTest.kt +++ b/domain/src/test/kotlin/tox/ToxTypesTest.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 aTox contributors +// SPDX-FileCopyrightText: 2019-2025 Robin Lindén // // SPDX-License-Identifier: GPL-3.0-only @@ -6,6 +6,7 @@ package ltd.evilcorp.domain.tox import kotlin.test.Test import kotlin.test.assertEquals +import ltd.evilcorp.core.vo.PublicKey class ToxTypesTest { @Test