refactor: 修改包名

This commit is contained in:
2025-10-03 03:33:00 +08:00
parent 924782bafa
commit 1a95873f22
228 changed files with 1016 additions and 1021 deletions

View File

@@ -29,11 +29,11 @@ val commitHash = providers.exec {
val buildDateTime: String = SimpleDateFormat("yy.MMddHH").format(Date())
android {
namespace = "cn.tabidachi.electro"
namespace = "moe.tabidachi.electro"
compileSdk = 36
defaultConfig {
applicationId = "cn.tabidachi.electro"
applicationId = "moe.tabidachi.electro"
minSdk = 28
targetSdk = 36
versionCode = commitCount.toInt()

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("cn.tabidachi.electro", appContext.packageName)
assertEquals("moe.tabidachi.electro", appContext.packageName)
}
}

View File

@@ -24,6 +24,7 @@
<application
android:name=".ElectroApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
@@ -32,15 +33,13 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Electro"
android:allowNativeHeapPointerTagging="false"
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
android:name="cn.tabidachi.electro.LocationActivity"
android:name=".LocationActivity"
android:exported="true"
android:launchMode="standard"
android:theme="@style/Theme.Electro">
</activity>
android:theme="@style/Theme.Electro" />
<meta-data
android:name="com.amap.api.v2.apikey"
@@ -108,7 +107,7 @@
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="cn.tabidachi.electro.FileProvider"
android:authorities="${applicationId}.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data

View File

@@ -1,68 +0,0 @@
package cn.tabidachi.electro.data.database
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import cn.tabidachi.electro.data.database.dao.AccountDao
import cn.tabidachi.electro.data.database.dao.ChunkDao
import cn.tabidachi.electro.data.database.dao.DialogDao
import cn.tabidachi.electro.data.database.dao.DownloadDao
import cn.tabidachi.electro.data.database.dao.MessageDao
import cn.tabidachi.electro.data.database.dao.MessageSendRequestDao
import cn.tabidachi.electro.data.database.dao.PathDao
import cn.tabidachi.electro.data.database.dao.QueryUserDao
import cn.tabidachi.electro.data.database.dao.SearchDao
import cn.tabidachi.electro.data.database.dao.SessionDao
import cn.tabidachi.electro.data.database.dao.SessionSearchDao
import cn.tabidachi.electro.data.database.dao.SessionUserDao
import cn.tabidachi.electro.data.database.dao.UserDao
import cn.tabidachi.electro.data.database.entity.Account
import cn.tabidachi.electro.data.database.entity.Chunk
import cn.tabidachi.electro.data.database.entity.Dialog
import cn.tabidachi.electro.data.database.entity.Download
import cn.tabidachi.electro.data.database.entity.ListTypeConverter
import cn.tabidachi.electro.data.database.entity.Message
import cn.tabidachi.electro.data.database.entity.MessageSendRequest
import cn.tabidachi.electro.data.database.entity.Path
import cn.tabidachi.electro.data.database.entity.Search
import cn.tabidachi.electro.data.database.entity.Session
import cn.tabidachi.electro.data.database.entity.SessionSearch
import cn.tabidachi.electro.data.database.entity.SessionUser
import cn.tabidachi.electro.data.database.entity.User
import cn.tabidachi.electro.model.UserQuery
@Database(
entities = [
Dialog::class,
Message::class,
MessageSendRequest::class,
SessionSearch::class,
Path::class,
SessionUser::class,
Account::class,
Chunk::class,
Download::class,
User::class,
Session::class,
UserQuery::class,
Search::class
],
version = 1,
exportSchema = false
)
@TypeConverters(ListTypeConverter::class)
abstract class ElectroDatabase : RoomDatabase() {
abstract fun messageDao(): MessageDao
abstract fun messageSendRequestDao(): MessageSendRequestDao
abstract fun dialogDao(): DialogDao
abstract fun sessionSearchDao(): SessionSearchDao
abstract fun pathDao(): PathDao
abstract fun sessionUserDao(): SessionUserDao
abstract fun accountDao(): AccountDao
abstract fun chunkDao(): ChunkDao
abstract fun downloadDao(): DownloadDao
abstract fun userDao(): UserDao
abstract fun sessionDao(): SessionDao
abstract fun queryUserDao(): QueryUserDao
abstract fun searchDao(): SearchDao
}

View File

@@ -1,2 +0,0 @@
package cn.tabidachi.electro.ui.common.attachment

View File

@@ -1,2 +0,0 @@
package cn.tabidachi.electro.ui.common.attachment

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.app.Application
import android.graphics.Bitmap
@@ -39,8 +39,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import cn.tabidachi.electro.ext.longTimeFormat
import cn.tabidachi.electro.ui.theme.ElectroTheme
import moe.tabidachi.electro.ext.longTimeFormat
import moe.tabidachi.electro.ui.theme.ElectroTheme
import coil3.compose.AsyncImage
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.lifecycle.HiltViewModel

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.Manifest
import android.content.Intent
@@ -12,10 +12,10 @@ import androidx.core.app.NotificationManagerCompat
import androidx.core.view.WindowCompat
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import cn.tabidachi.electro.ext.checkPermission
import cn.tabidachi.electro.ui.call.CallRoute
import cn.tabidachi.electro.ui.call.call
import cn.tabidachi.electro.ui.theme.ElectroTheme
import moe.tabidachi.electro.ext.checkPermission
import moe.tabidachi.electro.ui.call.CallRoute
import moe.tabidachi.electro.ui.call.call
import moe.tabidachi.electro.ui.theme.ElectroTheme
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.app.Application
import coil3.ImageLoader

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.content.Context
import android.util.AttributeSet
@@ -7,7 +7,6 @@ import android.view.inputmethod.InputConnection
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.AbstractComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.view.inputmethod.EditorInfoCompat
import androidx.core.view.inputmethod.InputConnectionCompat
import io.ktor.http.ContentType

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.Manifest
import android.app.Notification
@@ -21,7 +21,6 @@ import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.graphics.drawable.toBitmap
import cn.tabidachi.electro.data.network.Ktor
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import dagger.hilt.android.AndroidEntryPoint
@@ -32,6 +31,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.runBlocking
import moe.tabidachi.electro.data.network.Ktor
import javax.inject.Inject
import kotlin.random.Random
@@ -39,7 +39,8 @@ import kotlin.random.Random
class ElectroMessagingService : FirebaseMessagingService() {
private val scope = CoroutineScope(Dispatchers.Default + SupervisorJob())
@Inject lateinit var ktor: Ktor
@Inject
lateinit var ktor: Ktor
override fun onNewToken(token: String) {
super.onNewToken(token)
Log.d(TAG, "onNewToken: $token")
@@ -182,7 +183,7 @@ class ElectroNotification(
}
}
const val DECLINE_ACTION = "cn.tabidachi.electro.ACTION_CALL_DECLINE"
const val ANSWER_ACTION = "cn.tabidachi.electro.ACTION_CALL_ANSWER"
const val OFFER_ACTION = "cn.tabidachi.electro.ACTION_CALL_OFFER"
const val CALL_ACTION = "cn.tabidachi.electro.ACTION_CALL"
const val DECLINE_ACTION = "${BuildConfig.APPLICATION_ID}.ACTION_CALL_DECLINE"
const val ANSWER_ACTION = "${BuildConfig.APPLICATION_ID}.ACTION_CALL_ANSWER"
const val OFFER_ACTION = "${BuildConfig.APPLICATION_ID}.ACTION_CALL_OFFER"
const val CALL_ACTION = "${BuildConfig.APPLICATION_ID}.ACTION_CALL"

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.content.BroadcastReceiver
import android.content.Context

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.app.Application
import android.net.Uri
import androidx.core.net.toUri
import cn.tabidachi.electro.data.network.Ktor
import moe.tabidachi.electro.data.network.Ktor
import io.ktor.client.request.get
import io.ktor.client.request.url
import io.ktor.client.statement.bodyAsChannel

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.app.Application
import android.util.Log
@@ -7,15 +7,15 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import cn.tabidachi.electro.data.Repository
import cn.tabidachi.electro.data.network.Ktor
import cn.tabidachi.electro.ext.dataStore
import cn.tabidachi.electro.ktx.TAG
import cn.tabidachi.electro.ui.auth.AuthRoute
import cn.tabidachi.electro.ui.sessions.SessionsRoute
import cn.tabidachi.electro.ui.splash.SplashRoute
import cn.tabidachi.electro.ui.theme.DarkLight
import cn.tabidachi.electro.ui.theme.Theme
import moe.tabidachi.electro.data.Repository
import moe.tabidachi.electro.data.network.Ktor
import moe.tabidachi.electro.ext.dataStore
import moe.tabidachi.electro.ktx.TAG
import moe.tabidachi.electro.ui.auth.AuthRoute
import moe.tabidachi.electro.ui.sessions.SessionsRoute
import moe.tabidachi.electro.ui.splash.SplashRoute
import moe.tabidachi.electro.ui.theme.DarkLight
import moe.tabidachi.electro.ui.theme.Theme
import com.google.firebase.messaging.FirebaseMessaging
import dagger.hilt.android.lifecycle.HiltViewModel
import io.ktor.client.request.post

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.content.Context
import android.hardware.camera2.CameraCharacteristics
@@ -7,9 +7,9 @@ import android.hardware.camera2.CameraMetadata
import android.media.AudioManager
import android.util.Log
import androidx.core.content.getSystemService
import cn.tabidachi.electro.ui.call.PeerConnectionObserver
import cn.tabidachi.electro.ui.call.RemoteSessionDescription
import cn.tabidachi.electro.ui.call.SessionDescriptionObserver
import moe.tabidachi.electro.ui.call.PeerConnectionObserver
import moe.tabidachi.electro.ui.call.RemoteSessionDescription
import moe.tabidachi.electro.ui.call.SessionDescriptionObserver
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.content.Intent
import android.os.Bundle
@@ -9,10 +9,10 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
import androidx.core.view.WindowCompat
import cn.tabidachi.electro.model.attachment.LocationAttachment
import cn.tabidachi.electro.ui.map.DragDropSelectPointScreen
import cn.tabidachi.electro.ui.theme.ElectroTheme
import dagger.hilt.android.AndroidEntryPoint
import moe.tabidachi.electro.model.attachment.LocationAttachment
import moe.tabidachi.electro.ui.map.DragDropSelectPointScreen
import moe.tabidachi.electro.ui.theme.ElectroTheme
@AndroidEntryPoint
class LocationActivity : ComponentActivity() {
@@ -29,7 +29,8 @@ class LocationActivity : ComponentActivity() {
DragDropSelectPointScreen(
onBack = {
finishAndRemoveTask()
}, onSelectLocationClick = {
},
onSelectLocationClick = {
val attachment = LocationAttachment {
latitude = it.latitude
longitude = it.longitude
@@ -39,7 +40,8 @@ class LocationActivity : ComponentActivity() {
}
setResult(114514, intent)
finishAndRemoveTask()
}, onPoiClick = {
},
onPoiClick = {
val attachment = LocationAttachment {
latitude = it.latLonPoint.latitude
longitude = it.latLonPoint.longitude
@@ -59,4 +61,4 @@ class LocationActivity : ComponentActivity() {
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import android.app.Activity
import android.os.Bundle
@@ -11,10 +11,10 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.core.view.WindowCompat
import cn.tabidachi.electro.ext.toast
import cn.tabidachi.electro.ui.ElectroNavGraph
import cn.tabidachi.electro.ui.common.ReleaseDialog
import cn.tabidachi.electro.ui.theme.ElectroTheme
import moe.tabidachi.electro.ext.toast
import moe.tabidachi.electro.ui.ElectroNavGraph
import moe.tabidachi.electro.ui.common.ReleaseDialog
import moe.tabidachi.electro.ui.theme.ElectroTheme
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro
package moe.tabidachi.electro
import androidx.datastore.preferences.core.longPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.content.ComponentCallbacks
import android.content.res.Configuration

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.ComposableTargetMarker

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.annotation.UiThread
import androidx.compose.runtime.Composable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.content.Context
import android.graphics.Color

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.util.Log
import androidx.compose.ui.graphics.Color

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.util.Log
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import cn.tabidachi.electro.R
import moe.tabidachi.electro.R
import com.amap.api.maps.AMap
import com.amap.api.maps.model.BitmapDescriptor
import com.amap.api.maps.model.BitmapDescriptorFactory

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.ui.graphics.Color
import com.amap.api.maps.AMap

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.util.Log
import androidx.compose.ui.graphics.Color

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.AbstractApplier
import com.amap.api.maps.AMap

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import com.amap.api.maps.AMap
import com.amap.api.maps.model.LatLngBounds

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Immutable
import com.amap.api.maps.AMap

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import java.util.Objects

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import android.annotation.SuppressLint
import androidx.compose.runtime.Composable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import com.amap.api.maps.AMap
import com.amap.api.maps.MapView

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.amap
package moe.tabidachi.electro.amap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ComposeNode

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.coil
package moe.tabidachi.electro.coil
import android.annotation.SuppressLint
import android.graphics.Bitmap
@@ -54,4 +54,4 @@ class BlurTransformation(
hardwareRenderer.destroy()
return bitmap
}
}
}

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data
package moe.tabidachi.electro.data
import android.app.Application
import android.net.Uri
@@ -6,46 +6,46 @@ import androidx.core.database.getIntOrNull
import androidx.core.database.getLongOrNull
import androidx.core.database.getStringOrNull
import androidx.core.net.toUri
import cn.tabidachi.electro.ElectroStorage
import cn.tabidachi.electro.data.database.ElectroDatabase
import cn.tabidachi.electro.data.database.entity.Chunk
import cn.tabidachi.electro.data.database.entity.Dialog
import cn.tabidachi.electro.data.database.entity.Download
import cn.tabidachi.electro.data.database.entity.Message
import cn.tabidachi.electro.data.database.entity.MessageSendRequest
import cn.tabidachi.electro.data.database.entity.Path
import cn.tabidachi.electro.data.database.entity.RelationState
import cn.tabidachi.electro.data.database.entity.Search
import cn.tabidachi.electro.data.database.entity.SessionSearch
import cn.tabidachi.electro.data.database.entity.SessionType
import cn.tabidachi.electro.data.database.entity.SessionUser
import cn.tabidachi.electro.data.database.entity.SessionUserState
import cn.tabidachi.electro.data.database.entity.User
import cn.tabidachi.electro.data.network.Ktor
import cn.tabidachi.electro.data.network.MinIO
import cn.tabidachi.electro.ext.md5
import cn.tabidachi.electro.ext.md5WithCopy
import cn.tabidachi.electro.ext.regex
import cn.tabidachi.electro.model.UserQuery
import cn.tabidachi.electro.model.attachment.Attachment
import cn.tabidachi.electro.model.attachment.AudioAttachment
import cn.tabidachi.electro.model.attachment.DocumentAttachment
import cn.tabidachi.electro.model.attachment.FileAttachment
import cn.tabidachi.electro.model.attachment.ImageAttachment
import cn.tabidachi.electro.model.attachment.LocationAttachment
import cn.tabidachi.electro.model.attachment.VideoAttachment
import cn.tabidachi.electro.model.attachment.VoiceAttachment
import cn.tabidachi.electro.model.attachment.WebRTCAttachment
import cn.tabidachi.electro.model.attachment.deserialize
import cn.tabidachi.electro.model.attachment.serialize
import cn.tabidachi.electro.model.request.ChannelUpdateRequest
import cn.tabidachi.electro.model.request.GroupUpdateRequest
import cn.tabidachi.electro.model.request.MessageRequest
import cn.tabidachi.electro.model.request.MessageSyncRequest
import cn.tabidachi.electro.model.request.UserUpdateRequest
import cn.tabidachi.electro.model.response.ChannelRole
import cn.tabidachi.electro.model.response.GroupRole
import cn.tabidachi.electro.model.response.Response
import moe.tabidachi.electro.ElectroStorage
import moe.tabidachi.electro.data.database.ElectroDatabase
import moe.tabidachi.electro.data.database.entity.Chunk
import moe.tabidachi.electro.data.database.entity.Dialog
import moe.tabidachi.electro.data.database.entity.Download
import moe.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.database.entity.MessageSendRequest
import moe.tabidachi.electro.data.database.entity.Path
import moe.tabidachi.electro.data.database.entity.RelationState
import moe.tabidachi.electro.data.database.entity.Search
import moe.tabidachi.electro.data.database.entity.SessionSearch
import moe.tabidachi.electro.data.database.entity.SessionType
import moe.tabidachi.electro.data.database.entity.SessionUser
import moe.tabidachi.electro.data.database.entity.SessionUserState
import moe.tabidachi.electro.data.database.entity.User
import moe.tabidachi.electro.data.network.Ktor
import moe.tabidachi.electro.data.network.MinIO
import moe.tabidachi.electro.ext.md5
import moe.tabidachi.electro.ext.md5WithCopy
import moe.tabidachi.electro.ext.regex
import moe.tabidachi.electro.model.UserQuery
import moe.tabidachi.electro.model.attachment.Attachment
import moe.tabidachi.electro.model.attachment.AudioAttachment
import moe.tabidachi.electro.model.attachment.DocumentAttachment
import moe.tabidachi.electro.model.attachment.FileAttachment
import moe.tabidachi.electro.model.attachment.ImageAttachment
import moe.tabidachi.electro.model.attachment.LocationAttachment
import moe.tabidachi.electro.model.attachment.VideoAttachment
import moe.tabidachi.electro.model.attachment.VoiceAttachment
import moe.tabidachi.electro.model.attachment.WebRTCAttachment
import moe.tabidachi.electro.model.attachment.deserialize
import moe.tabidachi.electro.model.attachment.serialize
import moe.tabidachi.electro.model.request.ChannelUpdateRequest
import moe.tabidachi.electro.model.request.GroupUpdateRequest
import moe.tabidachi.electro.model.request.MessageRequest
import moe.tabidachi.electro.model.request.MessageSyncRequest
import moe.tabidachi.electro.model.request.UserUpdateRequest
import moe.tabidachi.electro.model.response.ChannelRole
import moe.tabidachi.electro.model.response.GroupRole
import moe.tabidachi.electro.model.response.Response
import io.ktor.client.request.get
import io.ktor.client.request.head
import io.ktor.client.request.header

View File

@@ -0,0 +1,68 @@
package moe.tabidachi.electro.data.database
import androidx.room.Database
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import moe.tabidachi.electro.data.database.dao.AccountDao
import moe.tabidachi.electro.data.database.dao.ChunkDao
import moe.tabidachi.electro.data.database.dao.DialogDao
import moe.tabidachi.electro.data.database.dao.DownloadDao
import moe.tabidachi.electro.data.database.dao.MessageDao
import moe.tabidachi.electro.data.database.dao.MessageSendRequestDao
import moe.tabidachi.electro.data.database.dao.PathDao
import moe.tabidachi.electro.data.database.dao.QueryUserDao
import moe.tabidachi.electro.data.database.dao.SearchDao
import moe.tabidachi.electro.data.database.dao.SessionDao
import moe.tabidachi.electro.data.database.dao.SessionSearchDao
import moe.tabidachi.electro.data.database.dao.SessionUserDao
import moe.tabidachi.electro.data.database.dao.UserDao
import moe.tabidachi.electro.data.database.entity.Account
import moe.tabidachi.electro.data.database.entity.Chunk
import moe.tabidachi.electro.data.database.entity.Dialog
import moe.tabidachi.electro.data.database.entity.Download
import moe.tabidachi.electro.data.database.entity.ListTypeConverter
import moe.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.database.entity.MessageSendRequest
import moe.tabidachi.electro.data.database.entity.Path
import moe.tabidachi.electro.data.database.entity.Search
import moe.tabidachi.electro.data.database.entity.Session
import moe.tabidachi.electro.data.database.entity.SessionSearch
import moe.tabidachi.electro.data.database.entity.SessionUser
import moe.tabidachi.electro.data.database.entity.User
import moe.tabidachi.electro.model.UserQuery
@Database(
entities = [
Dialog::class,
Message::class,
MessageSendRequest::class,
SessionSearch::class,
Path::class,
SessionUser::class,
Account::class,
Chunk::class,
Download::class,
User::class,
Session::class,
UserQuery::class,
Search::class
],
version = 1,
exportSchema = false
)
@TypeConverters(ListTypeConverter::class)
abstract class ElectroDatabase : RoomDatabase() {
abstract fun messageDao(): MessageDao
abstract fun messageSendRequestDao(): MessageSendRequestDao
abstract fun dialogDao(): DialogDao
abstract fun sessionSearchDao(): SessionSearchDao
abstract fun pathDao(): PathDao
abstract fun sessionUserDao(): SessionUserDao
abstract fun accountDao(): AccountDao
abstract fun chunkDao(): ChunkDao
abstract fun downloadDao(): DownloadDao
abstract fun userDao(): UserDao
abstract fun sessionDao(): SessionDao
abstract fun queryUserDao(): QueryUserDao
abstract fun searchDao(): SearchDao
}

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Account
import moe.tabidachi.electro.data.database.entity.Account
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Chunk
import moe.tabidachi.electro.data.database.entity.Chunk
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,11 +1,11 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Dialog
import moe.tabidachi.electro.data.database.entity.Dialog
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Download
import moe.tabidachi.electro.data.database.entity.Download
@Dao
interface DownloadDao {

View File

@@ -1,11 +1,11 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.database.entity.Message
@Dao
interface MessageDao {

View File

@@ -1,11 +1,11 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.MessageSendRequest
import moe.tabidachi.electro.data.database.entity.MessageSendRequest
import kotlinx.coroutines.flow.Flow
@Dao

View File

@@ -1,11 +1,11 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Path
import moe.tabidachi.electro.data.database.entity.Path
@Dao
interface PathDao {

View File

@@ -1,8 +1,8 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Upsert
import cn.tabidachi.electro.model.UserQuery
import moe.tabidachi.electro.model.UserQuery
@Dao
interface QueryUserDao {

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Search
import moe.tabidachi.electro.data.database.entity.Search
@Dao
interface SearchDao {

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.Session
import moe.tabidachi.electro.data.database.entity.Session
@Dao
interface SessionDao {

View File

@@ -1,11 +1,11 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.SessionSearch
import moe.tabidachi.electro.data.database.entity.SessionSearch
@Dao
interface SessionSearchDao {

View File

@@ -1,12 +1,12 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.SessionType
import cn.tabidachi.electro.data.database.entity.SessionUser
import moe.tabidachi.electro.data.database.entity.SessionType
import moe.tabidachi.electro.data.database.entity.SessionUser
@Dao
interface SessionUserDao {

View File

@@ -1,9 +1,9 @@
package cn.tabidachi.electro.data.database.dao
package moe.tabidachi.electro.data.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import cn.tabidachi.electro.data.database.entity.User
import moe.tabidachi.electro.data.database.entity.User
@Dao
interface UserDao {

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.Ignore

View File

@@ -1,8 +1,6 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.TypeConverter
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
object ListTypeConverter {

View File

@@ -1,8 +1,8 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import cn.tabidachi.electro.data.network.DialogResponse
import cn.tabidachi.electro.model.Identifiable
import moe.tabidachi.electro.data.network.DialogResponse
import moe.tabidachi.electro.model.Identifiable
import kotlinx.serialization.Serializable
@Entity(primaryKeys = ["sid", "uid"])

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,23 +1,23 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.PrimaryKey
import cn.tabidachi.electro.R
import cn.tabidachi.electro.model.Describable
import cn.tabidachi.electro.model.Identifiable
import cn.tabidachi.electro.model.attachment.Attachment
import cn.tabidachi.electro.model.attachment.AudioAttachment
import cn.tabidachi.electro.model.attachment.FileAttachment
import cn.tabidachi.electro.model.attachment.ImageAttachment
import cn.tabidachi.electro.model.attachment.LocationAttachment
import cn.tabidachi.electro.model.attachment.VideoAttachment
import cn.tabidachi.electro.model.attachment.VoiceAttachment
import cn.tabidachi.electro.model.attachment.WebRTCAttachment
import cn.tabidachi.electro.model.attachment.deserialize
import cn.tabidachi.electro.model.response.MessageSendResponse
import moe.tabidachi.electro.R
import moe.tabidachi.electro.model.Describable
import moe.tabidachi.electro.model.Identifiable
import moe.tabidachi.electro.model.attachment.Attachment
import moe.tabidachi.electro.model.attachment.AudioAttachment
import moe.tabidachi.electro.model.attachment.FileAttachment
import moe.tabidachi.electro.model.attachment.ImageAttachment
import moe.tabidachi.electro.model.attachment.LocationAttachment
import moe.tabidachi.electro.model.attachment.VideoAttachment
import moe.tabidachi.electro.model.attachment.VoiceAttachment
import moe.tabidachi.electro.model.attachment.WebRTCAttachment
import moe.tabidachi.electro.model.attachment.deserialize
import moe.tabidachi.electro.model.response.MessageSendResponse
import kotlinx.serialization.Serializable
@Entity

View File

@@ -1,8 +1,8 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import cn.tabidachi.electro.model.Identifiable
import moe.tabidachi.electro.model.Identifiable
import kotlinx.serialization.Serializable
@Entity

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
enum class RelationState {
NONE, CONTACT, BLOCK

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,8 +1,8 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import cn.tabidachi.electro.model.Identifiable
import moe.tabidachi.electro.model.Identifiable
import kotlinx.serialization.Serializable
@Serializable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
enum class SessionType {
NONE, P2P, ROOM, CHANNEL

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,8 +1,8 @@
package cn.tabidachi.electro.data.database.entity
package moe.tabidachi.electro.data.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import cn.tabidachi.electro.model.Identifiable
import moe.tabidachi.electro.model.Identifiable
import kotlinx.serialization.Serializable
@Serializable

View File

@@ -1,35 +1,35 @@
package cn.tabidachi.electro.data.network
package moe.tabidachi.electro.data.network
import android.content.Context
import android.util.Log
import cn.tabidachi.electro.BuildConfig
import cn.tabidachi.electro.data.database.entity.Message
import cn.tabidachi.electro.data.database.entity.MessageSendRequest
import cn.tabidachi.electro.data.database.entity.RelationState
import cn.tabidachi.electro.data.database.entity.Session
import cn.tabidachi.electro.data.database.entity.SessionSearch
import cn.tabidachi.electro.data.database.entity.SessionType
import cn.tabidachi.electro.data.database.entity.SessionUserState
import cn.tabidachi.electro.data.database.entity.User
import cn.tabidachi.electro.ext.ELECTRO
import cn.tabidachi.electro.ext.MINIO
import cn.tabidachi.electro.model.UserQuery
import cn.tabidachi.electro.model.request.CaptchaRequest
import cn.tabidachi.electro.model.request.ChannelUpdateRequest
import cn.tabidachi.electro.model.request.GroupUpdateRequest
import cn.tabidachi.electro.model.request.InviteRequest
import cn.tabidachi.electro.model.request.LoginRequest
import cn.tabidachi.electro.model.request.MessageRequest
import cn.tabidachi.electro.model.request.MessageSyncRequest
import cn.tabidachi.electro.model.request.MessageSyncResponse
import cn.tabidachi.electro.model.request.RegisterRequest
import cn.tabidachi.electro.model.request.SessionCreateRequest
import cn.tabidachi.electro.model.request.UserUpdateRequest
import cn.tabidachi.electro.model.response.AuthResponse
import cn.tabidachi.electro.model.response.ChannelRole
import cn.tabidachi.electro.model.response.GroupRole
import cn.tabidachi.electro.model.response.MessageSendResponse
import cn.tabidachi.electro.model.response.Response
import moe.tabidachi.electro.BuildConfig
import moe.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.database.entity.MessageSendRequest
import moe.tabidachi.electro.data.database.entity.RelationState
import moe.tabidachi.electro.data.database.entity.Session
import moe.tabidachi.electro.data.database.entity.SessionSearch
import moe.tabidachi.electro.data.database.entity.SessionType
import moe.tabidachi.electro.data.database.entity.SessionUserState
import moe.tabidachi.electro.data.database.entity.User
import moe.tabidachi.electro.ext.ELECTRO
import moe.tabidachi.electro.ext.MINIO
import moe.tabidachi.electro.model.UserQuery
import moe.tabidachi.electro.model.request.CaptchaRequest
import moe.tabidachi.electro.model.request.ChannelUpdateRequest
import moe.tabidachi.electro.model.request.GroupUpdateRequest
import moe.tabidachi.electro.model.request.InviteRequest
import moe.tabidachi.electro.model.request.LoginRequest
import moe.tabidachi.electro.model.request.MessageRequest
import moe.tabidachi.electro.model.request.MessageSyncRequest
import moe.tabidachi.electro.model.request.MessageSyncResponse
import moe.tabidachi.electro.model.request.RegisterRequest
import moe.tabidachi.electro.model.request.SessionCreateRequest
import moe.tabidachi.electro.model.request.UserUpdateRequest
import moe.tabidachi.electro.model.response.AuthResponse
import moe.tabidachi.electro.model.response.ChannelRole
import moe.tabidachi.electro.model.response.GroupRole
import moe.tabidachi.electro.model.response.MessageSendResponse
import moe.tabidachi.electro.model.response.Response
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
import io.ktor.client.plugins.HttpSend

View File

@@ -1,7 +1,7 @@
package cn.tabidachi.electro.data.network
package moe.tabidachi.electro.data.network
import android.util.Log
import cn.tabidachi.electro.model.response.Response
import moe.tabidachi.electro.model.response.Response
import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
import io.ktor.client.plugins.cache.HttpCache
@@ -21,7 +21,6 @@ import io.ktor.http.contentType
import io.ktor.serialization.kotlinx.json.json
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import java.io.File

View File

@@ -1,6 +1,6 @@
package cn.tabidachi.electro.data.network
package moe.tabidachi.electro.data.network
import cn.tabidachi.electro.BuildConfig
import moe.tabidachi.electro.BuildConfig
import io.minio.BucketExistsArgs
import io.minio.GetObjectArgs
import io.minio.GetObjectResponse

View File

@@ -1,7 +1,7 @@
package cn.tabidachi.electro.data.network
package moe.tabidachi.electro.data.network
import android.util.Log
import cn.tabidachi.electro.model.WebSocketMessage
import moe.tabidachi.electro.model.WebSocketMessage
import io.ktor.client.HttpClient
import io.ktor.client.plugins.websocket.ClientWebSocketSession
import io.ktor.client.plugins.websocket.cio.webSocketRawSession
@@ -24,8 +24,6 @@ import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.takeWhile
import kotlinx.coroutines.launch
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.koitharu.pausingcoroutinedispatcher.launchPausing
import java.util.concurrent.atomic.AtomicInteger

View File

@@ -1,13 +1,13 @@
package cn.tabidachi.electro.di
package moe.tabidachi.electro.di
import android.app.Application
import android.content.Context
import androidx.room.Room
import cn.tabidachi.electro.ElectroStorage
import cn.tabidachi.electro.data.Repository
import cn.tabidachi.electro.data.database.ElectroDatabase
import cn.tabidachi.electro.data.network.Ktor
import cn.tabidachi.electro.data.network.MinIO
import moe.tabidachi.electro.ElectroStorage
import moe.tabidachi.electro.data.Repository
import moe.tabidachi.electro.data.database.ElectroDatabase
import moe.tabidachi.electro.data.network.Ktor
import moe.tabidachi.electro.data.network.MinIO
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import android.content.ContentResolver
import android.net.Uri

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import android.app.Activity
import android.content.Context
@@ -14,7 +14,7 @@ import androidx.core.content.FileProvider
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStore
import cn.tabidachi.electro.AudioPreviewActivity
import moe.tabidachi.electro.AudioPreviewActivity
import java.io.File
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "electro")
@@ -22,7 +22,7 @@ val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "el
fun Context.openExternal(file: File, type: String) {
val uri = FileProvider.getUriForFile(
this,
"cn.tabidachi.electro.FileProvider",
"$packageName.FileProvider",
file
)
val intent = Intent(Intent.ACTION_VIEW).apply {
@@ -35,7 +35,7 @@ fun Context.openExternal(file: File, type: String) {
fun Context.fileProvider(path: String): Uri {
return FileProvider.getUriForFile(
this,
"cn.tabidachi.electro.FileProvider",
"$packageName.FileProvider",
File(path)
)
}
@@ -43,7 +43,7 @@ fun Context.fileProvider(path: String): Uri {
fun Context.openExternal(path: String, type: String) {
val uri = FileProvider.getUriForFile(
this,
"cn.tabidachi.electro.FileProvider",
"$packageName.FileProvider",
File(path)
)
val intent = Intent(Intent.ACTION_VIEW).apply {
@@ -56,7 +56,7 @@ fun Context.openExternal(path: String, type: String) {
fun Context.audioPreview(path: String) {
val uri = FileProvider.getUriForFile(
this,
"cn.tabidachi.electro.FileProvider",
"$packageName.FileProvider",
File(path)
)
val intent = Intent(this, AudioPreviewActivity::class.java).apply {

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import java.io.File

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import java.io.InputStream
import java.io.OutputStream

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
fun <T> MutableList<T>.addIfAbsent(element: T): Boolean {
return if (contains(element)) {

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import java.text.DateFormat
import java.text.SimpleDateFormat

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.calculateEndPadding

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
fun String.isEmail() = matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$".toRegex())

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.ext
package moe.tabidachi.electro.ext
import io.ktor.http.URLProtocol

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.icons.rounded
package moe.tabidachi.electro.icons.rounded
import androidx.compose.material.icons.Icons
import androidx.compose.ui.graphics.Color

View File

@@ -1,3 +1,3 @@
package cn.tabidachi.electro.ktx
package moe.tabidachi.electro.ktx
val Any.TAG: String get() = this::class.java.simpleName

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import androidx.compose.runtime.Composable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import android.graphics.BitmapFactory
import android.media.MediaMetadataRetriever
@@ -10,17 +10,17 @@ import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.geometry.Offset
import cn.tabidachi.electro.data.Repository
import cn.tabidachi.electro.data.database.entity.Message
import cn.tabidachi.electro.data.database.entity.MessageType
import cn.tabidachi.electro.data.database.entity.User
import cn.tabidachi.electro.ext.addIfAbsent
import cn.tabidachi.electro.model.attachment.Attachment
import cn.tabidachi.electro.model.attachment.DocumentAttachment
import cn.tabidachi.electro.model.attachment.LocationAttachment
import cn.tabidachi.electro.model.attachment.WebRTCAttachment
import cn.tabidachi.electro.ui.common.BubbleType
import cn.tabidachi.electro.ui.common.MessageMenu
import moe.tabidachi.electro.data.Repository
import moe.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.database.entity.MessageType
import moe.tabidachi.electro.data.database.entity.User
import moe.tabidachi.electro.ext.addIfAbsent
import moe.tabidachi.electro.model.attachment.Attachment
import moe.tabidachi.electro.model.attachment.DocumentAttachment
import moe.tabidachi.electro.model.attachment.LocationAttachment
import moe.tabidachi.electro.model.attachment.WebRTCAttachment
import moe.tabidachi.electro.ui.common.BubbleType
import moe.tabidachi.electro.ui.common.MessageMenu
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
interface Identifiable {
fun identification(): String

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
@@ -6,13 +6,13 @@ import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshots.SnapshotStateList
import cn.tabidachi.electro.data.Repository
import cn.tabidachi.electro.data.database.entity.Message
import cn.tabidachi.electro.data.network.Ktor
import cn.tabidachi.electro.data.network.MessageType
import cn.tabidachi.electro.model.attachment.Attachment
import cn.tabidachi.electro.model.attachment.deserialize
import cn.tabidachi.electro.ui.common.BubbleType
import moe.tabidachi.electro.data.Repository
import moe.tabidachi.electro.data.database.entity.Message
import moe.tabidachi.electro.data.network.Ktor
import moe.tabidachi.electro.data.network.MessageType
import moe.tabidachi.electro.model.attachment.Attachment
import moe.tabidachi.electro.model.attachment.deserialize
import moe.tabidachi.electro.ui.common.BubbleType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import kotlinx.serialization.Serializable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import android.media.MediaPlayer
import androidx.compose.runtime.getValue

View File

@@ -1,13 +1,13 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import android.media.MediaPlayer
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import cn.tabidachi.electro.data.Repository
import cn.tabidachi.electro.data.database.entity.MessageSendRequest
import cn.tabidachi.electro.data.database.entity.MessageType
import cn.tabidachi.electro.model.attachment.Attachment
import moe.tabidachi.electro.data.Repository
import moe.tabidachi.electro.data.database.entity.MessageSendRequest
import moe.tabidachi.electro.data.database.entity.MessageType
import moe.tabidachi.electro.model.attachment.Attachment
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import androidx.room.Entity
import androidx.room.PrimaryKey

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model
package moe.tabidachi.electro.model
import kotlinx.serialization.Serializable

View File

@@ -1,8 +1,6 @@
package cn.tabidachi.electro.model.attachment
package moe.tabidachi.electro.model.attachment
import cn.tabidachi.electro.data.database.entity.MessageType
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import moe.tabidachi.electro.data.database.entity.MessageType
import kotlinx.serialization.json.Json
sealed interface Attachment {

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model.attachment
package moe.tabidachi.electro.model.attachment
import kotlinx.serialization.Serializable

View File

@@ -1,4 +1,4 @@
package cn.tabidachi.electro.model.attachment
package moe.tabidachi.electro.model.attachment
sealed interface DocumentAttachment : Attachment {
// mime类型

Some files were not shown because too many files have changed in this diff Show More