Skip to content

Commit 33a4bfd

Browse files
Fetch global notifications,
Remade bookmark dialog, Remade media actions dialog, Fixed insets in the intro screen
1 parent 1b5c912 commit 33a4bfd

File tree

19 files changed

+596
-269
lines changed

19 files changed

+596
-269
lines changed

app/build.gradle.kts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ kotlin {
8585
implementation("com.formdev:flatlaf-intellij-themes:3.6")
8686

8787
// Just let's fix it. This is very fucked up.
88-
runtimeOnly("org.jetbrains.compose.ui:ui-util-desktop:1.10.0-alpha01")
88+
// runtimeOnly("org.jetbrains.compose.ui:ui-util-desktop:1.10.0-alpha01")
8989

9090
// For some fucking reason skiko isn't loaded by default
9191
val osName = System.getProperty("os.name")
@@ -103,8 +103,8 @@ kotlin {
103103
"aarch64" -> "arm64"
104104
else -> throw UnsupportedOperationException("Unsupported cpu acrhitecture $osArch!")
105105
}
106-
107-
runtimeOnly("org.jetbrains.skiko:skiko-awt-runtime-$targetOs-$targetArch:0.9.4.2")
106+
107+
runtimeOnly("org.jetbrains.skiko:skiko-awt-runtime-$targetOs-$targetArch:0.9.27")
108108
}
109109
}
110110
}
@@ -193,11 +193,11 @@ enum class DesktopTarget(
193193
// targetFormat = TargetFormat.Deb
194194
// ),
195195
//
196-
// LINUX_X64(
197-
// os = "linux",
198-
// arch = "x64",
199-
// targetFormat = TargetFormat.Deb
200-
// )
196+
LINUX_X64(
197+
os = "linux",
198+
arch = "x64",
199+
targetFormat = TargetFormat.Deb
200+
)
201201
}
202202

203203
DesktopTarget.values().map { target ->
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.mrboomdev.awery.data
2+
3+
import com.mrboomdev.awery.core.Awery
4+
import com.mrboomdev.awery.core.http
5+
import com.mrboomdev.awery.core.utils.bodyAsJson
6+
import com.mrboomdev.awery.extension.sdk.Results
7+
import io.ktor.client.request.get
8+
import io.ktor.client.request.url
9+
import io.ktor.http.appendPathSegments
10+
import kotlinx.serialization.Serializable
11+
12+
object AweryServer {
13+
suspend fun getNotifications(token: String, page: Int) = Awery.http.get {
14+
url("http", "awery.mrboomdev.ru") {
15+
appendPathSegments("api", "notifications", token.takeIf { it.isNotBlank() } ?: "0", page.toString())
16+
}
17+
}.bodyAsJson<Results<AweryServerNotification>>()
18+
}
19+
20+
@Serializable
21+
data class AweryServerNotification(
22+
val title: String,
23+
val message: String,
24+
val date: Long
25+
)

data/src/commonMain/kotlin/com/mrboomdev/awery/data/settings/AwerySettings.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ object AwerySettings {
2626
settings[EXTENSION_IS_ENABLED_PREFIX + id] = isEnabled
2727
}
2828

29+
val aweryServerToken by setting("")
2930
val darkTheme by setting(DarkTheme.AUTO)
3031
val primaryColor by setting(-1L)
3132
val amoledTheme by setting(false)

gradle/compose.versions.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
compose = "1.9.0"
33
coil = "3.3.0"
44
navigation = "1.4.0"
5-
jewel = "0.30.0-252.26252"
5+
jewel = "0.31.0-252.27409"
66

77
[libraries]
88
runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose" }
@@ -19,7 +19,7 @@ jewel-window = { group = "org.jetbrains.jewel", name = "jewel-int-ui-decorated-w
1919
confetti = { module = "io.github.vinceglb:confettikit", version = "0.6.0" }
2020
html = { module = "be.digitalia.compose.htmlconverter:htmlconverter", version = "1.1.0" }
2121
haze = { module = "dev.chrisbanes.haze:haze", version = "1.6.10" }
22-
materialKolor = { module = "com.materialkolor:material-kolor", version = "3.0.1" }
22+
materialKolor = { module = "com.materialkolor:material-kolor", version = "4.0.1" }
2323
tv-material = { module = "androidx.tv:tv-material", version = "1.0.1" }
2424

2525
# Navigation
@@ -37,4 +37,4 @@ coil-network-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp"
3737
[plugins]
3838
multiplatform = { id = "org.jetbrains.compose", version.ref = "compose" }
3939
compiler = { id = "org.jetbrains.kotlin.plugin.compose", version = "2.2.20" }
40-
hotReload = { id = "org.jetbrains.compose.hot-reload", version = "1.0.0-beta08"}
40+
hotReload = { id = "org.jetbrains.compose.hot-reload", version = "1.0.0-rc02"}

gradlew

100644100755
File mode changed.

ui/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ kotlin {
6868
implementation(libs.filekit.core)
6969
implementation(libs.filekit.dialogs)
7070
implementation("me.saket.telephoto:zoomable:0.18.0")
71+
implementation("com.cheonjaeung.compose.grid:grid:2.5.0")
7172

7273
// Navigation
7374
implementation(composeLibs.navigation.jetpack)

ui/src/commonMain/kotlin/com/mrboomdev/awery/ui/App.kt

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -923,35 +923,25 @@ private fun AweryNavHost(
923923

924924
graph = remember {
925925
sealedNavigationGraph { route ->
926-
when(val route = route) {
927-
Routes.Home -> Routes.Home.Content(contentPadding = contentPadding)
928-
Routes.Search -> Routes.Search.Content(contentPadding = contentPadding)
929-
Routes.Notifications -> Routes.Notifications.Content(contentPadding = contentPadding)
930-
Routes.Library -> Routes.Library.Content(contentPadding = contentPadding)
931-
is Routes.Browser -> route.Content(contentPadding = contentPadding)
932-
is Routes.Extension -> route.Content(contentPadding = contentPadding)
933-
is Routes.ExtensionFeed -> route.Content(contentPadding = contentPadding)
934-
is Routes.ExtensionSearch -> route.Content(contentPadding = contentPadding)
935-
936-
is Routes.Intro -> route.Content(
937-
contentPadding = contentPadding.let {
938-
if(!route.singleStep ) {
939-
it.add(32.dp)
940-
} else if(!useRail) {
941-
it.add(
942-
vertical = 16.dp,
943-
horizontal = niceSideInset()
944-
)
945-
} else {
946-
it.add(top = 16.dp)
947-
}
948-
}
949-
)
950-
951-
is Routes.Media -> route.Content(contentPadding = contentPadding)
952-
is Routes.Player -> route.Content(contentPadding = contentPadding)
953-
is Routes.Settings -> route.Content(contentPadding = contentPadding)
926+
if(route !is Routes.Intro) {
927+
route.Content(contentPadding)
928+
return@sealedNavigationGraph
954929
}
930+
931+
route.Content(
932+
contentPadding = contentPadding.let {
933+
if(!route.singleStep) {
934+
WindowInsets.safeDrawing.asPaddingValues().add(32.dp)
935+
} else if(!useRail) {
936+
it.add(
937+
vertical = 16.dp,
938+
horizontal = niceSideInset()
939+
)
940+
} else {
941+
it.add(top = 16.dp)
942+
}
943+
}
944+
)
955945
}
956946
}
957947
)

ui/src/commonMain/kotlin/com/mrboomdev/awery/ui/Navigation.kt renamed to ui/src/commonMain/kotlin/com/mrboomdev/awery/ui/Routes.kt

Lines changed: 38 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,20 @@ import com.mrboomdev.awery.data.settings.collectAsState
77
import com.mrboomdev.awery.extension.sdk.Preference
88
import com.mrboomdev.awery.extension.sdk.Video
99
import com.mrboomdev.awery.resources.*
10-
import com.mrboomdev.awery.ui.components.LocalToaster
10+
import com.mrboomdev.awery.ui.screens.auth.AuthScreen
1111
import com.mrboomdev.awery.ui.screens.browser.BrowserScreen
1212
import com.mrboomdev.awery.ui.screens.extension.*
1313
import com.mrboomdev.awery.ui.screens.home.HomeScreen
14-
import com.mrboomdev.awery.ui.screens.home.HomeViewModel
1514
import com.mrboomdev.awery.ui.screens.intro.IntroScreen
1615
import com.mrboomdev.awery.ui.screens.intro.IntroStep
1716
import com.mrboomdev.awery.ui.screens.library.LibraryColumnScreen
1817
import com.mrboomdev.awery.ui.screens.library.LibraryTabbedScreen
19-
import com.mrboomdev.awery.ui.screens.library.LibraryViewModel
2018
import com.mrboomdev.awery.ui.screens.media.MediaScreen
21-
import com.mrboomdev.awery.ui.screens.media.MediaScreenViewModel
2219
import com.mrboomdev.awery.ui.screens.notifications.NotificationsScreen
23-
import com.mrboomdev.awery.ui.screens.notifications.NotificationsViewModel
2420
import com.mrboomdev.awery.ui.screens.player.PlayerScreen
25-
import com.mrboomdev.awery.ui.screens.player.PlayerScreenViewModel
2621
import com.mrboomdev.awery.ui.screens.search.SearchScreen
27-
import com.mrboomdev.awery.ui.screens.search.SearchViewModel
2822
import com.mrboomdev.awery.ui.screens.settings.SettingsScreen
2923
import com.mrboomdev.awery.ui.screens.settings.pages.SettingsPages
30-
import com.mrboomdev.awery.ui.utils.viewModel
3124
import com.mrboomdev.navigation.core.TypeSafeNavigation
3225
import kotlinx.serialization.Serializable
3326
import org.jetbrains.compose.resources.DrawableResource
@@ -37,42 +30,41 @@ val Navigation = TypeSafeNavigation<Routes>()
3730

3831
@Serializable
3932
sealed interface Routes {
33+
@Composable
34+
fun Content(contentPadding: PaddingValues)
35+
4036
@Serializable
4137
data object Home: Routes {
4238
@Composable
43-
fun Content(
44-
viewModel: HomeViewModel = viewModel { HomeViewModel() },
39+
override fun Content(
4540
contentPadding: PaddingValues
46-
) = HomeScreen(viewModel, contentPadding)
41+
) = HomeScreen(contentPadding = contentPadding)
4742
}
4843

4944
@Serializable
5045
data object Search: Routes {
5146
@Composable
52-
fun Content(
53-
viewModel: SearchViewModel = viewModel { SearchViewModel() },
47+
override fun Content(
5448
contentPadding: PaddingValues
55-
) = SearchScreen(viewModel, contentPadding)
49+
) = SearchScreen(contentPadding = contentPadding)
5650
}
5751

5852
@Serializable
5953
data object Notifications: Routes {
6054
@Composable
61-
fun Content(
62-
viewModel: NotificationsViewModel = viewModel { NotificationsViewModel() },
55+
override fun Content(
6356
contentPadding: PaddingValues
64-
) = NotificationsScreen(viewModel, contentPadding)
57+
) = NotificationsScreen(contentPadding = contentPadding)
6558
}
6659

6760
@Serializable
6861
data object Library: Routes {
6962
@Composable
70-
fun Content(
71-
viewModel: LibraryViewModel = viewModel { LibraryViewModel() },
63+
override fun Content(
7264
contentPadding: PaddingValues
7365
) = when(AwerySettings.libraryStyle.collectAsState().value) {
74-
AwerySettings.LibraryStyle.TABBED -> LibraryTabbedScreen(viewModel, contentPadding)
75-
AwerySettings.LibraryStyle.COLUMN -> LibraryColumnScreen(viewModel, contentPadding)
66+
AwerySettings.LibraryStyle.TABBED -> LibraryTabbedScreen(contentPadding = contentPadding)
67+
AwerySettings.LibraryStyle.COLUMN -> LibraryColumnScreen(contentPadding = contentPadding)
7668
}
7769
}
7870

@@ -81,7 +73,9 @@ sealed interface Routes {
8173
val initialPage: SettingsPages = SettingsPages.Main()
8274
): Routes {
8375
@Composable
84-
fun Content(contentPadding: PaddingValues) = SettingsScreen(initialPage, contentPadding)
76+
override fun Content(
77+
contentPadding: PaddingValues
78+
) = SettingsScreen(initialPage, contentPadding)
8579
}
8680

8781
@Serializable
@@ -91,10 +85,9 @@ sealed interface Routes {
9185
val media: com.mrboomdev.awery.extension.sdk.Media
9286
): Routes {
9387
@Composable
94-
fun Content(
95-
viewModel: MediaScreenViewModel = viewModel { MediaScreenViewModel(this) },
88+
override fun Content(
9689
contentPadding: PaddingValues
97-
) = MediaScreen(this, viewModel, contentPadding)
90+
) = MediaScreen(this, contentPadding = contentPadding)
9891
}
9992

10093
@Serializable
@@ -103,17 +96,9 @@ sealed interface Routes {
10396
val title: String = video.title ?: video.url
10497
): Routes {
10598
@Composable
106-
fun Content(
107-
viewModel: PlayerScreenViewModel = run {
108-
val navigation = Navigation.current()
109-
val toaster = LocalToaster.current
110-
111-
viewModel {
112-
PlayerScreenViewModel(this@Player, navigation, toaster, it)
113-
}
114-
},
99+
override fun Content(
115100
contentPadding: PaddingValues
116-
) = PlayerScreen(this, viewModel)
101+
) = PlayerScreen(this)
117102
}
118103

119104
@Serializable
@@ -122,10 +107,9 @@ sealed interface Routes {
122107
val extensionName: String
123108
): Routes {
124109
@Composable
125-
fun Content(
126-
viewModel: ExtensionScreenViewModel = viewModel { ExtensionScreenViewModel(extensionId) },
110+
override fun Content(
127111
contentPadding: PaddingValues
128-
) = ExtensionScreen(this, viewModel, contentPadding)
112+
) = ExtensionScreen(this, contentPadding = contentPadding)
129113
}
130114

131115
@Serializable
@@ -136,15 +120,9 @@ sealed interface Routes {
136120
val feedName: String
137121
): Routes {
138122
@Composable
139-
fun Content(
140-
viewModel: ExtensionFeedScreenViewModel = run {
141-
val navigation = Navigation.current()
142-
val toaster = LocalToaster.current
143-
144-
viewModel { ExtensionFeedScreenViewModel(this@ExtensionFeed, toaster, navigation) }
145-
},
123+
override fun Content(
146124
contentPadding: PaddingValues
147-
) = ExtensionFeedScreen(this, viewModel, contentPadding)
125+
) = ExtensionFeedScreen(this, contentPadding = contentPadding)
148126
}
149127

150128
@Serializable
@@ -154,10 +132,9 @@ sealed interface Routes {
154132
val filters: List<Preference<*>>? = null
155133
): Routes {
156134
@Composable
157-
fun Content(
158-
viewModel: ExtensionSearchScreenViewModel = viewModel { ExtensionSearchScreenViewModel(this) },
135+
override fun Content(
159136
contentPadding: PaddingValues
160-
) = ExtensionSearchScreen(this, viewModel, contentPadding)
137+
) = ExtensionSearchScreen(this, contentPadding = contentPadding)
161138
}
162139

163140
@Serializable
@@ -166,7 +143,7 @@ sealed interface Routes {
166143
val singleStep: Boolean
167144
): Routes {
168145
@Composable
169-
fun Content(
146+
override fun Content(
170147
contentPadding: PaddingValues
171148
) = IntroScreen(this, contentPadding)
172149
}
@@ -176,7 +153,17 @@ sealed interface Routes {
176153
val url: String
177154
): Routes {
178155
@Composable
179-
fun Content(contentPadding: PaddingValues) = BrowserScreen(url)
156+
override fun Content(
157+
contentPadding: PaddingValues
158+
) = BrowserScreen(url)
159+
}
160+
161+
@Serializable
162+
data object Auth: Routes {
163+
@Composable
164+
override fun Content(
165+
contentPadding: PaddingValues
166+
) = AuthScreen(contentPadding = contentPadding)
180167
}
181168
}
182169

ui/src/commonMain/kotlin/com/mrboomdev/awery/ui/components/BottomSheetDialog.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import androidx.compose.runtime.Composable
1212
import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.unit.dp
1414

15+
/**
16+
* This implementation automatically handles window insets at top and horizontal.
17+
*/
1518
@OptIn(ExperimentalMaterial3Api::class)
1619
@Composable
1720
fun BottomSheetDialog(

0 commit comments

Comments
 (0)