Skip to content

Commit 6caa188

Browse files
authored
Merge branch 'main' into main
2 parents d0bad79 + 015520c commit 6caa188

367 files changed

Lines changed: 14376 additions & 6493 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build-and-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ jobs:
102102
distribution: adopt
103103
java-version: '21'
104104
- name: Build backend
105-
run: ./gradlew backend:documents:documents_spring:assemble backend:editor:api_editor:assemble backend:editor:api_editor:test backend:editor:api_editor_socket:assemble backend:editor:api_editor_socket:test --no-daemon
105+
run: ./gradlew :backend:gateway:test --no-daemon
106106
- name: upload results
107107
uses: actions/upload-artifact@v4
108108
if: failure()
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Publish Backend
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
publish_backend:
8+
name: Generate docker image and publish
9+
runs-on: ubuntu-latest
10+
permissions:
11+
contents: read
12+
packages: write
13+
steps:
14+
- name: Check out code
15+
uses: actions/checkout@v4
16+
- name: Set up JDK 21
17+
uses: actions/setup-java@v4
18+
with:
19+
distribution: adopt
20+
java-version: '21'
21+
- name: Release build
22+
run: ./gradlew :backend:gateway:buildFatJar
23+
- name: Log in to GitHub Container Registry
24+
uses: docker/login-action@v3
25+
with:
26+
registry: ghcr.io
27+
username: ${{ github.actor }}
28+
password: ${{ secrets.GITHUB_TOKEN }}
29+
- name: Build and push Docker image
30+
uses: docker/build-push-action@v5
31+
with:
32+
context: ./backend/gateway
33+
push: true
34+
tags: ghcr.io/writeopia/writeopia-backend:latest

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Some useful commands for this project:
5454
To start the desktop app:
5555

5656
```
57-
./gradlew application:desktopApp:run
57+
./gradlew application:composeApp:run
5858
```
5959

6060
To start the web app:
@@ -63,7 +63,7 @@ To start the web app:
6363
./gradlew jsBrowserRun
6464
```
6565

66-
Runnig the tests of the project:
66+
Running the tests of the project:
6767

6868
```
6969
./gradlew jvmTest

application/common_flows/wide_screen_common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ kotlin {
5151
implementation(project(":application:features:global_shell"))
5252
implementation(project(":application:features:account"))
5353
implementation(project(":application:features:search"))
54+
implementation(project(":application:features:documents_graph"))
5455

5556
implementation(libs.ktor.client.logging)
5657
implementation(libs.ktor.client.core)

application/common_flows/wide_screen_common/src/commonMain/kotlin/io/writeopia/notes/desktop/components/App.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import androidx.compose.runtime.remember
2222
import androidx.compose.ui.Alignment
2323
import androidx.compose.ui.Modifier
2424
import androidx.compose.ui.draw.clip
25-
import androidx.compose.ui.input.key.KeyEvent
2625
import androidx.compose.ui.input.pointer.PointerIcon
2726
import androidx.compose.ui.input.pointer.pointerHoverIcon
2827
import androidx.compose.ui.unit.dp
@@ -41,16 +40,19 @@ import io.writeopia.model.isDarkTheme
4140
import io.writeopia.navigation.Navigation
4241
import io.writeopia.navigation.notes.navigateToFolder
4342
import io.writeopia.navigation.notes.navigateToNote
44-
import io.writeopia.notemenu.data.model.NotesNavigation
45-
import io.writeopia.notemenu.data.model.NotesNavigationType
43+
import io.writeopia.common.utils.NotesNavigation
44+
import io.writeopia.common.utils.NotesNavigationType
45+
import io.writeopia.documents.graph.di.DocumentsGraphInjection
4646
import io.writeopia.notemenu.data.usecase.NotesNavigationUseCase
4747
import io.writeopia.notemenu.di.NotesMenuKmpInjection
4848
import io.writeopia.notemenu.navigation.NAVIGATION_PATH
4949
import io.writeopia.notemenu.navigation.NAVIGATION_TYPE
5050
import io.writeopia.notemenu.navigation.navigateToNotes
5151
import io.writeopia.notemenu.ui.screen.menu.EditFileScreen
5252
import io.writeopia.notemenu.ui.screen.menu.RoundedVerticalDivider
53+
import io.writeopia.sdk.network.injector.WriteopiaConnectionInjector
5354
import io.writeopia.sql.WriteopiaDb
55+
import io.writeopia.sqldelight.di.SqlDelightDaoInjector
5456
import io.writeopia.sqldelight.di.WriteopiaDbInjector
5557
import io.writeopia.theme.WrieopiaTheme
5658
import io.writeopia.theme.WriteopiaTheme
@@ -70,11 +72,12 @@ fun DesktopApp(
7072
keyboardEventFlow: Flow<KeyboardEvent>,
7173
colorThemeOption: StateFlow<ColorThemeOption?>,
7274
coroutineScope: CoroutineScope,
73-
isUndoKeyEvent: (KeyEvent) -> Boolean,
7475
selectColorTheme: (ColorThemeOption) -> Unit,
7576
toggleMaxScreen: () -> Unit,
7677
startDestination: String = startDestination(),
7778
) {
79+
WriteopiaConnectionInjector.setBaseUrl("http://localhost:8080")
80+
7881
if (writeopiaDb != null) {
7982
WriteopiaDbInjector.initialize(writeopiaDb)
8083
}
@@ -89,14 +92,17 @@ fun DesktopApp(
8992
val notesMenuInjection = remember {
9093
NotesMenuKmpInjection.desktop(
9194
selectionState = selectionState,
92-
keyboardEventFlow = keyboardEventFlow
95+
keyboardEventFlow = keyboardEventFlow,
9396
)
9497
}
9598

9699
val sideMenuInjector = remember {
97100
SideMenuKmpInjector()
98101
}
99102

103+
val documentsGraphInjection =
104+
DocumentsGraphInjection(repositoryInjection = SqlDelightDaoInjector.singleton())
105+
100106
val globalShellViewModel: GlobalShellViewModel = sideMenuInjector.provideSideMenuViewModel()
101107
val colorTheme = colorThemeOption.collectAsState().value
102108
val navigationController: NavHostController = rememberNavController()
@@ -183,8 +189,8 @@ fun DesktopApp(
183189
startDestination = startDestination,
184190
notesMenuInjection = notesMenuInjection,
185191
sideMenuKmpInjector = sideMenuInjector,
192+
documentsGraphInjection = documentsGraphInjection,
186193
editorInjector = editorInjector,
187-
isUndoKeyEvent = isUndoKeyEvent,
188194
selectColorTheme = selectColorTheme,
189195
navController = navigationController
190196
) {}

application/common_flows/wide_screen_common/src/jvmTest/kotlin/io/writeopia/menu/Utils.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ fun ComposeUiTest.startApp(
2525
DesktopApp(
2626
coroutineScope = rememberCoroutineScope(),
2727
colorThemeOption = MutableStateFlow(ColorThemeOption.DARK),
28-
isUndoKeyEvent = { false },
2928
selectColorTheme = {},
3029
selectionState = MutableStateFlow(false),
3130
keyboardEventFlow = MutableStateFlow(KeyboardEvent.IDLE),

application/composeApp/build.gradle.kts

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ kotlin {
3131
implementation(compose.runtime)
3232
implementation(compose.foundation)
3333
implementation(compose.material3)
34+
implementation(compose.ui)
3435

3536
implementation(project(":writeopia_ui"))
3637
implementation(project(":writeopia"))
@@ -53,6 +54,7 @@ kotlin {
5354
implementation(project(":application:core:theme"))
5455
implementation(project(":application:core:models"))
5556
implementation(project(":application:core:resources"))
57+
implementation(project(":application:features:documents_graph"))
5658
implementation(project(":application:features:note_menu"))
5759
implementation(project(":application:features:editor"))
5860
implementation(project(":application:features:account"))
@@ -89,21 +91,12 @@ kotlin {
8991

9092
val androidMain by getting {
9193
dependencies {
92-
implementation(libs.androidx.ktx)
93-
implementation(libs.appCompat)
94-
9594
implementation(libs.ktor.client.logging)
96-
97-
implementation(libs.androidx.lifecycle.runtime.compose)
98-
99-
implementation(libs.material)
95+
implementation(libs.activity.compose)
10096
implementation(libs.androidx.material3)
97+
implementation(libs.material)
10198
implementation(project.dependencies.platform(libs.androidx.compose.bom))
10299

103-
implementation(libs.androidx.ktx)
104-
implementation(libs.appCompat)
105-
implementation(libs.activity.compose)
106-
107100
implementation(project(":application:core:resources"))
108101
implementation(project(":application:features:auth"))
109102
}
@@ -149,6 +142,7 @@ compose.desktop {
149142
}
150143

151144
linux {
145+
packageVersion = "0.41.0"
152146
iconFile.set(iconsRoot.resolve("icon-linux.png"))
153147
}
154148

@@ -178,8 +172,8 @@ android {
178172
applicationId = "io.writeopia"
179173
minSdk = 24
180174
targetSdk = 35
181-
versionCode = 31
182-
versionName = "0.19.0"
175+
versionCode = 33
176+
versionName = "0.20.1"
183177

184178
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
185179
}

application/composeApp/src/androidMain/kotlin/io/writeopia/navigation/NavigationActivity.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,22 @@ import android.app.Application
55
import android.content.Context
66
import android.content.SharedPreferences
77
import android.os.Bundle
8+
import androidx.activity.ComponentActivity
89
import androidx.activity.compose.setContent
9-
import androidx.appcompat.app.AppCompatActivity
1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.remember
1212
import androidx.lifecycle.viewmodel.compose.viewModel
1313
import androidx.navigation.NavHostController
1414
import androidx.navigation.compose.rememberNavController
1515
import io.writeopia.BuildConfig
16-
import io.writeopia.auth.core.token.AppBearerTokenHandler
1716
import io.writeopia.auth.di.AuthInjection
1817
import io.writeopia.auth.navigation.authNavigation
1918
import io.writeopia.common.utils.Destinations
2019
import io.writeopia.common.utils.di.SharedPreferencesInjector
2120
import io.writeopia.editor.di.EditorKmpInjector
2221
import io.writeopia.features.search.di.MobileSearchInjection
2322
import io.writeopia.mobile.AppMobile
24-
import io.writeopia.notemenu.data.model.NotesNavigation
23+
import io.writeopia.common.utils.NotesNavigation
2524
import io.writeopia.notemenu.di.NotesMenuKmpInjection
2625
import io.writeopia.notemenu.di.UiConfigurationInjector
2726
import io.writeopia.notemenu.navigation.NoteMenuDestiny
@@ -31,10 +30,10 @@ import io.writeopia.persistence.room.WriteopiaApplicationDatabase
3130
import io.writeopia.persistence.room.injection.AppRoomDaosInjection
3231
import io.writeopia.persistence.room.injection.RoomRepositoryInjection
3332
import io.writeopia.persistence.room.injection.WriteopiaRoomInjector
34-
import io.writeopia.sdk.network.injector.ConnectionInjector
33+
import io.writeopia.sdk.network.injector.WriteopiaConnectionInjector
3534
import io.writeopia.ui.image.ImageLoadConfig
3635

37-
class NavigationActivity : AppCompatActivity() {
36+
class NavigationActivity : ComponentActivity() {
3837

3938
override fun onCreate(savedInstanceState: Bundle?) {
4039
super.onCreate(savedInstanceState)
@@ -75,14 +74,11 @@ fun NavigationGraph(
7574
val uiConfigInjection = UiConfigurationInjector.singleton()
7675

7776
val appDaosInjection = AppRoomDaosInjection.singleton()
78-
val connectionInjector = ConnectionInjector(
79-
bearerTokenHandler = AppBearerTokenHandler,
80-
baseUrl = BuildConfig.BASE_URL
81-
)
77+
WriteopiaConnectionInjector.setBaseUrl(BuildConfig.BASE_URL)
8278
val uiConfigViewModel = uiConfigInjection.provideUiConfigurationViewModel()
8379
val repositoryInjection = RoomRepositoryInjection.singleton()
84-
val authInjection = AuthInjection(connectionInjector, repositoryInjection)
85-
val editorInjector = EditorKmpInjector.mobile(repositoryInjection, connectionInjector)
80+
val authInjection = AuthInjection(repositoryInjection)
81+
val editorInjector = EditorKmpInjector.mobile(repositoryInjection)
8682
val notesMenuInjection = NotesMenuKmpInjection.mobile(repositoryInjection)
8783

8884
val searchInjector = remember {
Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.Writeopia" parent="Theme.MaterialComponents.DayNight.NoActionBar">
4-
<!-- Primary brand color. -->
5-
<item name="colorPrimary">@color/purple</item>
6-
<item name="colorPrimaryVariant">@color/purple</item>
7-
<item name="colorOnPrimary">@color/black</item>
8-
<!-- Secondary brand color. -->
9-
<item name="colorSecondary">@color/purple</item>
10-
<item name="colorSecondaryVariant">@color/purple</item>
11-
<item name="colorOnSecondary">@color/black</item>
12-
<!-- Status bar color. -->
13-
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
14-
<!-- Customize your theme here. -->
15-
</style>
3+
<style name="Theme.Writeopia" parent="Theme.Material3.DayNight.NoActionBar">
4+
<!-- Primary brand color. -->
5+
<item name="colorPrimary">@color/purple</item>
6+
<item name="colorPrimaryVariant">@color/purple</item>
7+
<item name="colorSecondary">@color/purple</item>
8+
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
9+
<!-- Customize your theme here. -->
10+
</style>
1611
</resources>

application/composeApp/src/androidMain/res/values/themes.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
<resources xmlns:tools="http://schemas.android.com/tools">
22
<!-- Base application theme. -->
3-
<style name="Theme.Writeopia" parent="Theme.MaterialComponents.DayNight.NoActionBar">
3+
<style name="Theme.Writeopia" parent="Theme.Material3.DayNight.NoActionBar">
44
<!-- Primary brand color. -->
55
<item name="colorPrimary">@color/purple</item>
66
<item name="colorPrimaryVariant">@color/purple</item>
7-
<item name="colorOnPrimary">@color/white</item>
8-
<!-- Secondary brand color. -->
97
<item name="colorSecondary">@color/purple</item>
10-
<item name="colorSecondaryVariant">@color/purple</item>
11-
<item name="colorOnSecondary">@color/black</item>
12-
<!-- Status bar color. -->
138
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
149
<!-- Customize your theme here. -->
1510
</style>

0 commit comments

Comments
 (0)