Skip to content

Commit

Permalink
perf: make domain models and most composables stable (#98)
Browse files Browse the repository at this point in the history
  • Loading branch information
rushiiMachine authored Dec 10, 2022
1 parent dc30114 commit 4d096e4
Show file tree
Hide file tree
Showing 56 changed files with 174 additions and 25 deletions.
15 changes: 9 additions & 6 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,15 @@ android {

kotlinOptions {
jvmTarget = "11"
freeCompilerArgs = freeCompilerArgs +
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi" +
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi" +
"-opt-in=androidx.compose.material.ExperimentalMaterialApi" +
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api" +
"-Xcontext-receivers"
freeCompilerArgs += listOf(
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
"-Xcontext-receivers",
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=${buildDir.resolve("report").absolutePath}",
)
}

buildFeatures {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.github.materiiapps.enumutil.FromValue

@Immutable
@FromValue
enum class ActivityType(val value: Int) {
Game(0),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.types.*
import com.xinto.opencord.rest.dto.ApiActivity

@Immutable
interface DomainActivity {
val name: String
val createdAt: Long
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivityAssets

@Immutable
data class DomainActivityAssets(
val largeImage: String?,
val largeText: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.xinto.opencord.domain.activity

//@Immutable
//data class DomainActivityButton(
// val label: String,
// val url: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivityEmoji

// TODO: use a partial emoji instead
@Immutable
data class DomainActivityEmoji(
val name: String?,
val id: Long?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivityMetadata

@Immutable
data class DomainActivityMetadata(
val albumId: String?,
val artistIds: List<String>?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivityParty

@Immutable
data class DomainActivityParty(
val id: String?,
val currentSize: Int?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivitySecrets

@Immutable
data class DomainActivitySecrets(
val join: String?,
val spectate: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.xinto.opencord.domain.activity

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiActivityTimestamp
import kotlinx.datetime.Instant

@Immutable
data class DomainActivityTimestamp(
val start: Instant?,
val end: Instant?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.activity.types

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.ActivityType
import com.xinto.opencord.domain.activity.DomainActivity
import com.xinto.opencord.domain.activity.DomainActivityEmoji

@Immutable
data class DomainActivityCustom(
override val name: String,
override val createdAt: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity.types

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.*

@Immutable
data class DomainActivityGame(
override val name: String,
override val createdAt: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.activity.types

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.*

@Immutable
data class DomainActivityListening(
override val name: String,
override val createdAt: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.activity.types

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.ActivityType
import com.xinto.opencord.domain.activity.DomainActivity
import com.xinto.opencord.domain.activity.DomainActivityAssets

@Immutable
data class DomainActivityStreaming(
override val name: String,
override val createdAt: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.activity.types

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.activity.ActivityType
import com.xinto.opencord.domain.activity.DomainActivity

// TODO: remove this once all activity types are implemented
@Immutable
data class DomainActivityUnknown(
override val name: String,
override val createdAt: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.xinto.opencord.domain.attachment

import androidx.compose.runtime.Immutable
import com.xinto.opencord.db.entity.message.EntityAttachment
import com.xinto.opencord.rest.dto.ApiAttachment

@Immutable
interface DomainAttachment {
val id: Long
val filename: String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.attachment

import androidx.compose.runtime.Immutable

@Immutable
data class DomainFileAttachment(
override val id: Long,
override val filename: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.attachment

import androidx.compose.runtime.Immutable

@Immutable
data class DomainPictureAttachment(
override val id: Long,
override val filename: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.attachment

import androidx.compose.runtime.Immutable

@Immutable
data class DomainVideoAttachment(
override val id: Long,
override val filename: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.channel

import androidx.compose.runtime.Immutable

@Immutable
data class DomainAnnouncementChannel(
override val id: Long,
override val guildId: Long?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.channel

import androidx.compose.runtime.Immutable

@Immutable
data class DomainCategoryChannel(
override val id: Long,
override val guildId: Long?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.channel

import androidx.compose.runtime.Immutable
import com.xinto.opencord.db.entity.channel.EntityChannel
import com.xinto.opencord.domain.Mentionable
import com.xinto.opencord.rest.dto.ApiChannel

@Immutable
abstract class DomainChannel : Comparable<DomainChannel>, Mentionable {
abstract val id: Long
abstract val guildId: Long?
Expand All @@ -14,7 +16,6 @@ abstract class DomainChannel : Comparable<DomainChannel>, Mentionable {
override val formattedMention
get() = "<#$id>"


override fun compareTo(other: DomainChannel): Int {
val thisPositionInList = sortedChannelTypes.indexOf(this::class)
val otherPositionInList = sortedChannelTypes.indexOf(other::class)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.channel

import androidx.compose.runtime.Immutable

@Immutable
data class DomainTextChannel(
override val id: Long,
override val guildId: Long?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.channel

import androidx.compose.runtime.Immutable

@Immutable
data class DomainVoiceChannel(
override val id: Long,
override val guildId: Long?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.embed

import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color
import com.xinto.opencord.db.entity.message.EntityEmbed
import com.xinto.opencord.rest.dto.ApiEmbed

@Immutable
data class DomainEmbed(
val title: String?,
val description: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.embed

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiEmbedAuthor

@Immutable
data class DomainEmbedAuthor(
val name: String,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.xinto.opencord.domain.embed

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiEmbedField

@Immutable
data class DomainEmbedField(
val name: String,
val value: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.embed

import androidx.compose.runtime.Immutable

@Immutable
data class DomainEmbedFooter(
val text: String
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xinto.opencord.domain.embed

import androidx.compose.runtime.Immutable

@Immutable
data class DomainEmbedThumbnail(
val url: String,
val proxyUrl: String,
Expand Down
11 changes: 7 additions & 4 deletions app/src/main/java/com/xinto/opencord/domain/guild/DomainGuild.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.xinto.opencord.domain.guild

import androidx.compose.runtime.Immutable
import com.xinto.opencord.db.entity.guild.EntityGuild
import com.xinto.opencord.rest.dto.ApiGuild
import com.xinto.opencord.rest.service.DiscordCdnServiceImpl

@Immutable
data class DomainGuild(
val id: Long,
val name: String,
Expand All @@ -12,10 +14,11 @@ data class DomainGuild(
val premiumTier: Int,
val premiumSubscriptionCount: Int,
) {
val iconText = name
.split(ICON_TEXT_REGEX)
.map { it[0] }
.joinToString()
val iconText by lazy {
name.split(ICON_TEXT_REGEX)
.map { it[0] }
.joinToString()
}

companion object {
val ICON_TEXT_REGEX = """\s+""".toRegex()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
package com.xinto.opencord.domain.login

import androidx.compose.runtime.Immutable
import com.xinto.opencord.rest.dto.ApiLogin

@Immutable
sealed interface DomainLogin {
@Immutable
data class Login(
val token: String,
val mfa: Boolean,
val locale: String,
val theme: String,
) : DomainLogin

@Immutable
data class Captcha(val captchaSiteKey: String) : DomainLogin

@Immutable
data class TwoFactorAuth(val ticket: String) : DomainLogin

@Immutable
object Error : DomainLogin
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.xinto.opencord.domain.member

import androidx.compose.runtime.Immutable
import com.xinto.opencord.domain.user.DomainUser
import com.xinto.opencord.domain.user.toDomain
import com.xinto.opencord.rest.dto.ApiGuildMember
import com.xinto.opencord.rest.service.DiscordCdnServiceImpl

@Immutable
data class DomainGuildMember(
val user: DomainUser?,
val nick: String? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.xinto.opencord.domain.message

import androidx.compose.runtime.Immutable
import com.xinto.opencord.db.entity.message.EntityMessage
import com.xinto.opencord.domain.attachment.DomainAttachment
import com.xinto.opencord.domain.attachment.toDomain
Expand All @@ -13,6 +14,7 @@ import com.xinto.opencord.rest.dto.fromValue
import com.xinto.opencord.util.Timestamp
import kotlinx.datetime.Instant

@Immutable
abstract class DomainMessage {
abstract val id: Long
abstract val channelId: Long
Expand Down
Loading

0 comments on commit 4d096e4

Please sign in to comment.