Stableize domain classes

This commit is contained in:
Syer10
2022-10-31 16:41:06 -04:00
parent d27dc90050
commit 6bfcf28da9
38 changed files with 92 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
import org.jetbrains.compose.compose
@Suppress("DSL_SCOPE_VIOLATION") @Suppress("DSL_SCOPE_VIOLATION")
plugins { plugins {
id(libs.plugins.kotlin.multiplatform.get().pluginId) id(libs.plugins.kotlin.multiplatform.get().pluginId)
@@ -52,6 +54,7 @@ kotlin {
api(libs.ktorfit.lib) api(libs.ktorfit.lib)
api(libs.okio) api(libs.okio)
api(libs.dateTime) api(libs.dateTime)
api(compose("org.jetbrains.compose.runtime:runtime"))
api(projects.core) api(projects.core)
api(projects.i18n) api(projects.i18n)
} }

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.category.model package ca.gosyer.jui.domain.category.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class Category( data class Category(
val id: Long, val id: Long,
val order: Int, val order: Int,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.chapter.model package ca.gosyer.jui.domain.chapter.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class Chapter( data class Chapter(
val url: String, val url: String,
val name: String, val name: String,
@@ -29,6 +31,7 @@ data class Chapter(
) )
@Serializable @Serializable
@Immutable
data class ChapterMeta( data class ChapterMeta(
var juiPageOffset: Int = 0 val juiPageOffset: Int = 0
) )

View File

@@ -6,11 +6,13 @@
package ca.gosyer.jui.domain.download.model package ca.gosyer.jui.domain.download.model
import androidx.compose.runtime.Immutable
import ca.gosyer.jui.domain.chapter.model.Chapter import ca.gosyer.jui.domain.chapter.model.Chapter
import ca.gosyer.jui.domain.manga.model.Manga import ca.gosyer.jui.domain.manga.model.Manga
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class DownloadChapter( data class DownloadChapter(
val chapterIndex: Int, val chapterIndex: Int,
val mangaId: Long, val mangaId: Long,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.download.model package ca.gosyer.jui.domain.download.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class DownloadState(val state: Int) { enum class DownloadState(val state: Int) {
Queued(0), Queued(0),
Downloading(1), Downloading(1),

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.download.model package ca.gosyer.jui.domain.download.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class DownloadStatus( data class DownloadStatus(
val status: DownloaderStatus, val status: DownloaderStatus,
val queue: List<DownloadChapter> val queue: List<DownloadChapter>

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.download.model package ca.gosyer.jui.domain.download.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class DownloaderStatus { enum class DownloaderStatus {
Started, Started,
Stopped Stopped

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.extension.model package ca.gosyer.jui.domain.extension.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class Extension( data class Extension(
val name: String, val name: String,
val pkgName: String, val pkgName: String,

View File

@@ -6,12 +6,14 @@
package ca.gosyer.jui.domain.library.model package ca.gosyer.jui.domain.library.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Stable
enum class DisplayMode(@Transient val res: StringResource) { enum class DisplayMode(@Transient val res: StringResource) {
CompactGrid(MR.strings.display_compact), CompactGrid(MR.strings.display_compact),
ComfortableGrid(MR.strings.display_comfortable), ComfortableGrid(MR.strings.display_comfortable),
@@ -19,6 +21,8 @@ enum class DisplayMode(@Transient val res: StringResource) {
List(MR.strings.display_list); List(MR.strings.display_list);
companion object { companion object {
val values = values().asList() val values by lazy {
values().asList()
}
} }
} }

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.library.model package ca.gosyer.jui.domain.library.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class FilterState { enum class FilterState {
IGNORED, IGNORED,
INCLUDED, INCLUDED,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.library.model package ca.gosyer.jui.domain.library.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class JobStatus { enum class JobStatus {
PENDING, PENDING,
RUNNING, RUNNING,

View File

@@ -6,12 +6,14 @@
package ca.gosyer.jui.domain.library.model package ca.gosyer.jui.domain.library.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Stable
enum class Sort(@Transient val res: StringResource) { enum class Sort(@Transient val res: StringResource) {
ALPHABETICAL(MR.strings.sort_alphabetical), ALPHABETICAL(MR.strings.sort_alphabetical),

View File

@@ -6,10 +6,12 @@
package ca.gosyer.jui.domain.library.model package ca.gosyer.jui.domain.library.model
import androidx.compose.runtime.Immutable
import ca.gosyer.jui.domain.manga.model.Manga import ca.gosyer.jui.domain.manga.model.Manga
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class UpdateStatus( data class UpdateStatus(
val statusMap: Map<JobStatus, List<Manga>>, val statusMap: Map<JobStatus, List<Manga>>,
val running: Boolean val running: Boolean

View File

@@ -6,6 +6,8 @@
package ca.gosyer.jui.domain.manga.model package ca.gosyer.jui.domain.manga.model
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import ca.gosyer.jui.domain.source.model.Source import ca.gosyer.jui.domain.source.model.Source
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
@@ -13,6 +15,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Immutable
data class Manga( data class Manga(
val id: Long, val id: Long,
val sourceId: Long, val sourceId: Long,
@@ -36,6 +39,7 @@ data class Manga(
) )
@Serializable @Serializable
@Immutable
data class MangaMeta( data class MangaMeta(
val juiReaderMode: String = DEFAULT_READER_MODE val juiReaderMode: String = DEFAULT_READER_MODE
) { ) {
@@ -45,6 +49,7 @@ data class MangaMeta(
} }
@Serializable @Serializable
@Stable
enum class MangaStatus(@Transient val res: StringResource) { enum class MangaStatus(@Transient val res: StringResource) {
UNKNOWN(MR.strings.status_unknown), UNKNOWN(MR.strings.status_unknown),
ONGOING(MR.strings.status_ongoing), ONGOING(MR.strings.status_ongoing),

View File

@@ -6,6 +6,9 @@
package ca.gosyer.jui.domain.reader.model package ca.gosyer.jui.domain.reader.model
import androidx.compose.runtime.Stable
@Stable
enum class DefaultReaderMode( enum class DefaultReaderMode(
val res: String, val res: String,
val continuous: Boolean, val continuous: Boolean,

View File

@@ -6,12 +6,14 @@
package ca.gosyer.jui.domain.reader.model package ca.gosyer.jui.domain.reader.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Stable
enum class Direction(@Transient val res: StringResource) { enum class Direction(@Transient val res: StringResource) {
Down(MR.strings.dir_down), Down(MR.strings.dir_down),
Left(MR.strings.dir_rtl), Left(MR.strings.dir_rtl),

View File

@@ -6,12 +6,14 @@
package ca.gosyer.jui.domain.reader.model package ca.gosyer.jui.domain.reader.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Stable
enum class ImageScale(@Transient val res: StringResource) { enum class ImageScale(@Transient val res: StringResource) {
FitScreen(MR.strings.scale_fit_screen), FitScreen(MR.strings.scale_fit_screen),
Stretch(MR.strings.scale_stretch), Stretch(MR.strings.scale_stretch),

View File

@@ -6,12 +6,14 @@
package ca.gosyer.jui.domain.reader.model package ca.gosyer.jui.domain.reader.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.i18n.MR import ca.gosyer.jui.i18n.MR
import dev.icerock.moko.resources.StringResource import dev.icerock.moko.resources.StringResource
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
@Serializable @Serializable
@Stable
enum class NavigationMode(@Transient val res: StringResource) { enum class NavigationMode(@Transient val res: StringResource) {
LNavigation(MR.strings.nav_l_shaped), LNavigation(MR.strings.nav_l_shaped),
KindlishNavigation(MR.strings.nav_kindle_ish), KindlishNavigation(MR.strings.nav_kindle_ish),

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.reader.model package ca.gosyer.jui.domain.reader.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class TappingInvertMode(val shouldInvertHorizontal: Boolean = false, val shouldInvertVertical: Boolean = false) { enum class TappingInvertMode(val shouldInvertHorizontal: Boolean = false, val shouldInvertVertical: Boolean = false) {
NONE, NONE,
HORIZONTAL(shouldInvertHorizontal = true), HORIZONTAL(shouldInvertHorizontal = true),

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.server.model package ca.gosyer.jui.domain.server.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class Auth { enum class Auth {
NONE, NONE,
BASIC, BASIC,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.server.model package ca.gosyer.jui.domain.server.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class Proxy { enum class Proxy {
NO_PROXY, NO_PROXY,
HTTP_PROXY, HTTP_PROXY,

View File

@@ -6,9 +6,12 @@
package ca.gosyer.jui.domain.settings.model package ca.gosyer.jui.domain.settings.model
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class About( data class About(
val name: String, val name: String,
val version: String, val version: String,
@@ -20,6 +23,7 @@ data class About(
) )
@Serializable @Serializable
@Stable
enum class AboutBuildType { enum class AboutBuildType {
Preview, Preview,
Stable Stable

View File

@@ -6,10 +6,12 @@
package ca.gosyer.jui.domain.source.model package ca.gosyer.jui.domain.source.model
import androidx.compose.runtime.Stable
import ca.gosyer.jui.domain.manga.model.Manga import ca.gosyer.jui.domain.manga.model.Manga
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
data class MangaPage( data class MangaPage(
val mangaList: List<Manga>, val mangaList: List<Manga>,
val hasNextPage: Boolean val hasNextPage: Boolean

View File

@@ -6,10 +6,12 @@
package ca.gosyer.jui.domain.source.model package ca.gosyer.jui.domain.source.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import ca.gosyer.jui.core.io.Serializable as JvmSerializable import ca.gosyer.jui.core.io.Serializable as JvmSerializable
@Serializable @Serializable
@Stable
data class Source( data class Source(
val id: Long, val id: Long,
val name: String, val name: String,

View File

@@ -6,11 +6,13 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("CheckBoxPreference") @SerialName("CheckBoxPreference")
@Immutable
data class CheckBoxPreference( data class CheckBoxPreference(
override val props: TwoStateProps override val props: TwoStateProps
) : SourcePreference() ) : SourcePreference()

View File

@@ -6,15 +6,18 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("EditTextPreference") @SerialName("EditTextPreference")
@Immutable
data class EditTextPreference( data class EditTextPreference(
override val props: EditTextProps override val props: EditTextProps
) : SourcePreference() { ) : SourcePreference() {
@Serializable @Serializable
@Immutable
data class EditTextProps( data class EditTextProps(
override val key: String, override val key: String,
override val title: String?, override val title: String?,

View File

@@ -6,13 +6,16 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("ListPreference") @SerialName("ListPreference")
@Immutable
data class ListPreference(override val props: ListProps) : SourcePreference() { data class ListPreference(override val props: ListProps) : SourcePreference() {
@Serializable @Serializable
@Immutable
data class ListProps( data class ListProps(
override val key: String, override val key: String,
override val title: String, override val title: String,

View File

@@ -6,13 +6,16 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("MultiSelectListPreference") @SerialName("MultiSelectListPreference")
@Immutable
data class MultiSelectListPreference(override val props: MultiSelectListProps) : SourcePreference() { data class MultiSelectListPreference(override val props: MultiSelectListProps) : SourcePreference() {
@Serializable @Serializable
@Immutable
data class MultiSelectListProps( data class MultiSelectListProps(
override val key: String, override val key: String,
override val title: String, override val title: String,

View File

@@ -6,13 +6,16 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
sealed class SourcePreference { sealed class SourcePreference {
abstract val props: Props<*> abstract val props: Props<*>
} }
@Immutable
interface Props<T> { interface Props<T> {
val key: String val key: String
val title: String? val title: String?

View File

@@ -6,11 +6,13 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@SerialName("SwitchPreferenceCompat") @SerialName("SwitchPreferenceCompat")
@Immutable
data class SwitchPreference( data class SwitchPreference(
override val props: TwoStateProps override val props: TwoStateProps
) : SourcePreference() ) : SourcePreference()

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.source.model.sourcepreference package ca.gosyer.jui.domain.source.model.sourcepreference
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class TwoStateProps( data class TwoStateProps(
override val key: String, override val key: String,
override val title: String?, override val title: String?,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.ui.model package ca.gosyer.jui.domain.ui.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class StartScreen { enum class StartScreen {
Library, Library,
Updates, Updates,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.ui.model package ca.gosyer.jui.domain.ui.model
import androidx.compose.runtime.Stable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Stable
enum class ThemeMode { enum class ThemeMode {
System, System,
Light, Light,

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.ui.model package ca.gosyer.jui.domain.ui.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class WindowSettings( data class WindowSettings(
val x: Int? = null, val x: Int? = null,
val y: Int? = null, val y: Int? = null,

View File

@@ -6,10 +6,12 @@
package ca.gosyer.jui.domain.updates.model package ca.gosyer.jui.domain.updates.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class GithubRelease( data class GithubRelease(
@SerialName("tag_name") val version: String, @SerialName("tag_name") val version: String,
@SerialName("body") val info: String, @SerialName("body") val info: String,

View File

@@ -6,11 +6,13 @@
package ca.gosyer.jui.domain.updates.model package ca.gosyer.jui.domain.updates.model
import androidx.compose.runtime.Immutable
import ca.gosyer.jui.domain.chapter.model.Chapter import ca.gosyer.jui.domain.chapter.model.Chapter
import ca.gosyer.jui.domain.manga.model.Manga import ca.gosyer.jui.domain.manga.model.Manga
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class MangaAndChapter( data class MangaAndChapter(
val manga: Manga, val manga: Manga,
val chapter: Chapter val chapter: Chapter

View File

@@ -6,9 +6,11 @@
package ca.gosyer.jui.domain.updates.model package ca.gosyer.jui.domain.updates.model
import androidx.compose.runtime.Immutable
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@Immutable
data class Updates( data class Updates(
val page: List<MangaAndChapter>, val page: List<MangaAndChapter>,
val hasNextPage: Boolean val hasNextPage: Boolean

View File

@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.material.MenuDefaults import androidx.compose.material.MenuDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -22,6 +23,7 @@ import androidx.compose.ui.unit.dp
/** /**
* Policy on setting [WindowManager.LayoutParams.FLAG_SECURE] on a window. * Policy on setting [WindowManager.LayoutParams.FLAG_SECURE] on a window.
*/ */
@Stable
enum class SecureFlagPolicy { enum class SecureFlagPolicy {
/** /**
* Inherit [WindowManager.LayoutParams.FLAG_SECURE] from the parent window and pass it on the * Inherit [WindowManager.LayoutParams.FLAG_SECURE] from the parent window and pass it on the