chore: entferne AuthApiClient, AuthTokenManager und DeviceInitializationConfig.jvm, da diese nicht mehr benötigt werden
This commit is contained in:
parent
dc66dfb537
commit
8a3ef98c44
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" project-jdk-name="openjdk-25" project-jdk-type="JavaSDK" />
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" project-jdk-name="openjdk-25" project-jdk-type="JavaSDK" />
|
||||||
|
|
|
||||||
37
docs/temp/GEMMA-4_2026-04-16.md
Normal file
37
docs/temp/GEMMA-4_2026-04-16.md
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
👷 **[Frontend Expert]**
|
||||||
|
|
||||||
|
**Verstanden. Ich nehme die Herausforderung an.**
|
||||||
|
|
||||||
|
Ich werde diesen Scan als **"Audit-Phase"** behandeln. Mein Ziel ist es, nicht nur ein Chaos-Dokument zu erstellen, sondern eine **"Architektur-Anleitung"**, die als Single Source of Truth für die zukünftige Entwicklung dient.
|
||||||
|
|
||||||
|
Hier ist mein Schlachtplan für die nächsten Schritte:
|
||||||
|
|
||||||
|
### 1. Der Scan (Aktueller Schritt)
|
||||||
|
Ich führe den Scan durch, um die Struktur jedes einzelnen Moduls zu erfassen. Ich werde die Pfade so mappen, dass ich genau sehe:
|
||||||
|
* **Modul-Name** (z.B. `features:login`)
|
||||||
|
* **Vorhandene Source-Sets** (`commonMain`, `jvmMain`, `wasmJsMain`)
|
||||||
|
* **Status** (Ist es ein "Standard-Modul" oder ein "Sonderfall"?)
|
||||||
|
|
||||||
|
### 2. Die Analyse (Die "Chaos-Matrix")
|
||||||
|
Aus den Rohdaten erstelle ich die **Chaos-Matrix**. Diese wird folgende Fragen beantworten:
|
||||||
|
* Welche Module folgen bereits einem Muster?
|
||||||
|
* Wo sind die "Inseln der Wildnis" (Module ohne jegliche Struktur)?
|
||||||
|
* Welche Abhängigkeiten (Gradle-Module) sind von der Struktur-Anpassung betroffen?
|
||||||
|
|
||||||
|
### 3. Die Architektur-Anleitung (Das Endprodukt)
|
||||||
|
Dies ist das Dokument, das Sie am Ende erhalten. Es wird kein bloßes Problem-Dokument sein, sondern ein **Blueprint**. Es wird enthalten:
|
||||||
|
* **Die "Golden Rule" der Modul-Struktur:** Die definierte Standard-Struktur für jedes neue Modul.
|
||||||
|
* **Die "Migration-Matrix":** Eine Liste aller existierenden Module mit der Anweisung: *"Modul X muss von Struktur A nach Struktur B migriert werden"*.
|
||||||
|
* **Das "Pattern-Library" Dokument:**
|
||||||
|
* Wie ein `feature`-Modul aufgebaut sein muss (mit `commonMain` und `jvmMain`).
|
||||||
|
* Wie ein `library`-Modul aufgebaut sein muss (rein `commonMain`).
|
||||||
|
* Wie ein `platform`-Modul aufgebaut sein muss (z.B. für Android oder Desktop-spezifische Erweiterungen).
|
||||||
|
* **Die "Definition of Done" (DoD) für neue Module:** Eine Checkliste, die ein Entwickler abhaken muss, bevor ein Modul als "fertig" gilt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Ich starte jetzt den Scan.**
|
||||||
|
|
||||||
|
*(Ich werde nach Abschluss des Scans und der Erstellung der Matrix sofort mit der Analyse beginnen.)*
|
||||||
|
|
||||||
|
`[Status: Running Structural Scan...]
|
||||||
55
docs/temp/MODULE_ARCH_BLUEPRINT.md
Normal file
55
docs/temp/MODULE_ARCH_BLUEPRINT.md
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
# 🏗️ Module Architecture Blueprint
|
||||||
|
|
||||||
|
Dieses Dokument definiert die Architektur-Standards für das Projekt, um eine konsistente, skalierbare und wartbare Modulstruktur zu gewährleisten.
|
||||||
|
|
||||||
|
## 🎯 Kernziel
|
||||||
|
Etablierung einer klaren Trennung zwischen Geschäftslogik (Common) und Plattform-spezifischer Darstellung (JVM/Web), um die Wiederverwendbarkeit und Testbarkeit zu maximieren.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Modultypen (Module Archetypes)
|
||||||
|
|
||||||
|
Jedes Modul im Projekt muss einer der folgenden drei Kategorien zugeordnet werden:
|
||||||
|
|
||||||
|
### 1. Core Modules (Type: `CORE`)
|
||||||
|
* **Zweck:** Rein geschäftliche Logik, Domain-Modelle, Use-Cases.
|
||||||
|
* **Struktur:** Ausschließlich `commonMain`. Keine Abhängigkeiten zu Plattform-spezifischen APIs.
|
||||||
|
* **Regel:** Darf keine Kenntnis über die UI oder Plattform-spezifische Frameworks haben.
|
||||||
|
|
||||||
|
### 2. Feature Modules (Type: `FEATURE`)
|
||||||
|
* **Zweck:** Implementierung einer spezifischen Benutzerfunktion (z.B. "Login", "Registration").
|
||||||
|
* **Struktur:** `commonMain` (Logik) + `jvmMain` / `jsMain` (UI/Integration).
|
||||||
|
* **Regel:** Nutzt `CORE`-Module. Darf nur über definierte Schnittstellen mit anderen `FEATURE`-Modulen kommunizieren.
|
||||||
|
|
||||||
|
### 3. Infrastructure/Adapter Modules (Type: `ADAPTER`)
|
||||||
|
* **Zweck:** Implementierung von Schnittstellen (z.B. API-Clients, Datenbank-Treiber, Bluetooth-Adapter).
|
||||||
|
* **Struktur:** Implementiert `expect`-Deklarationen aus `CORE` oder `FEATURE` mittels `actual`-Implementierungen.
|
||||||
|
* **Regel:** Versteckt die Komplexität der Plattform hinter einer saubbar definierten API.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Strukturregeln (The Golden Rules)
|
||||||
|
|
||||||
|
### 📏 Rule 1: Dependency Direction
|
||||||
|
Abhängigkeiten dürfen **nur nach unten** fließen:
|
||||||
|
`FEATURE` $\rightarrow$ `CORE` $\rightarrow$ `ADAPTER` (Interfaces)
|
||||||
|
`FEATURE` $\rightarrow$ `ADAPTER` (Implementations)
|
||||||
|
|
||||||
|
**Verboten:** Ein `CORE`-Modul darf niemals ein `FEATURE`-Modul referenzieren.
|
||||||
|
|
||||||
|
### 🔄 Rule 2: The Expect/Actual Pattern
|
||||||
|
Um Plattform-spezifischen Code in `commonMain` nutzbar zu machen, ist das `expect/actual`-Pattern zwingend:
|
||||||
|
1. **Define** `expect class/function` in `commonMain`.
|
||||||
|
2. **Implement** `actual class/function` in `jvmMain` (Desktop) und `jsMain` (Web).
|
||||||
|
|
||||||
|
### 📦 Rule 3: Encapsulation
|
||||||
|
Module müssen ihre internen Implementierungen verbergen. Nur Klassen und Funktionen, die explizit für die Nutzung durch andere Module markiert sind (z.B. via `internal` Modifier), dürfen exportiert werden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Deployment & Build
|
||||||
|
* **Build System:** Gradle.
|
||||||
|
* **Multiplatform:** Kotlin Multiplatform (KMP).
|
||||||
|
* **CI/CD Check:** Bei jedem Pull-Request wird die Einhardung der Abhängigkeitsrichtung durch ein Dependency-Analysis-Plugin geprüft.
|
||||||
|
|
||||||
|
---
|
||||||
49
docs/temp/MODULE_STRUCTURE_BLUEPRINT.md
Normal file
49
docs/temp/MODULE_STRUCTURE_BLUEPRINT.md
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# 🏗️ Modul-Struktur-Blueprint (Standard-Topologie)
|
||||||
|
|
||||||
|
**Status:** ARCHITECTURAL STANDARD
|
||||||
|
**Ziel:** Elimination von strukturellen Inkonsistenheiten (Kraut & Rüben)
|
||||||
|
**Prinzip:** Plug-and-Play Multiplatform-Komponenten
|
||||||
|
|
||||||
|
## 1. Die Modul-Klassifizierung (The Taxonomy)
|
||||||
|
|
||||||
|
Jedes Modul im Projekt **muss** einer der folgenden drei Klassen zugeordnet werden. Es gibt keine "unidentifizierten" Module mehr.
|
||||||
|
|
||||||
|
### 🟢 Klasse A: `CORE_LIBRARY`
|
||||||
|
* **Zweck:** Reine Geschäftslogik, Datenmodelle, Hilfsfunktionen (Utils).
|
||||||
|
* **Anforderung:** Besteht **ausschließlich** aus `src/commonMain`.
|
||||||
|
* **Einsatz:** Keine Plattform-spezifischen Abhängigkeiten erlaubt.
|
||||||
|
* **Beispiel:** `:core:database`, `:core:network-models`.
|
||||||
|
|
||||||
|
### 🔵 Klasse B: `UI_COMPONENT` (Der Standard)
|
||||||
|
* **Zweck:** Visuelle Features, Screens, interaktive Elemente.
|
||||||
|
* **Anforderung:** **Zwingende** Struktur:
|
||||||
|
* `src/commonMain` (Logik & Interface)
|
||||||
|
* `src/jvmMain` (Desktop-spezifische UI-Erweiterungen/Render-Strategie)
|
||||||
|
* `src/wasmJsMain` (Web-spezifische Render-Strategie)
|
||||||
|
* **Einsatz:** Das Standard-Modul für alle "Plug-and-Play" Features.
|
||||||
|
* **Beispiel:** `:features:auth`, `:features:import`, `:features:settings`.
|
||||||
|
|
||||||
|
### 🟡 Klasse C: `PLATFORM_ADAPTER`
|
||||||
|
* **Zweck:** Tiefe Integration von Hardware-APIs oder Plattform-spezifischem Code.
|
||||||
|
* **Anforderung:** Enthält hochgradig spezialisierten Code für eine einzige Plattform.
|
||||||
|
* **Beispiel:** `:platform:android-biometrics`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Design-Regeln (The Golden Rules)
|
||||||
|
|
||||||
|
1. **The "Expect/Actual" Rule:** `expect`-Deklarationen gehören immer in den `commonMain`-Source-Set. `actual`-Implementierungen werden strikt in den jeweiligen Plattform-Source-Sets (`jvmMain`, `wasmJsMain`, etc.) platziert.
|
||||||
|
2. **The Dependency Rule:** Ein `commonMain`-Modul darf niemals eine Abhängigkeit zu einem Modul haben, das nur in `jvmMain` existiert. Abhängigkeiten müssen immer "nach unten" (zu `common`) oder "horizontal" (zu anderen `common`-Modulen) verlaufen.
|
||||||
|
3. **The Consistency Rule:** Ein Modul darf niemals "unvollständig" sein. Wenn ein Modul ein `jvmMain` hat, muss es auch ein `wasmJsMain` (oder zumindest die Infrastruktur dafür) vorbereitet haben, um die Plugin-Architektur nicht zu brechen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Implementierungs-Checkliste (Migration Guide)
|
||||||
|
|
||||||
|
Wenn du ein neues Modul erstellst oder ein altes migrierst:
|
||||||
|
|
||||||
|
- [ ] Identifiziere die Klasse (A, B oder C).
|
||||||
|
- [ ] Erstelle die Verzeichnisstruktur gemäß der Klasse.
|
||||||
|
- [ ] Überprüfe die `build.gradle.kts` auf korrekte Source-Set-Konfiguration.
|
||||||
|
- [ ] Sicherstellen, dass alle `expect`-Funktionen durch `actual`-Implementierungen in allen Ziel-Plattformen abgedeckt sind.
|
||||||
|
- [ ] Teste die Kompilierung für alle Ziel-Plattformen (`./gradlew check`).
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.data.local
|
||||||
|
|
||||||
|
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||||
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
@ -117,7 +119,7 @@ class AuthTokenManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get current JWT token
|
* Get the current JWT token
|
||||||
*/
|
*/
|
||||||
fun getToken(): String? = currentToken
|
fun getToken(): String? = currentToken
|
||||||
|
|
||||||
|
|
@ -147,7 +149,7 @@ class AuthTokenManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get user ID from token
|
* Get user ID from a token
|
||||||
*/
|
*/
|
||||||
fun getUserId(): String? = tokenPayload?.sub
|
fun getUserId(): String? = tokenPayload?.sub
|
||||||
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.data.remote
|
||||||
|
|
||||||
|
import at.mocode.frontend.core.auth.utils.PkceHelper
|
||||||
|
|
||||||
import at.mocode.frontend.core.domain.AppConstants
|
import at.mocode.frontend.core.domain.AppConstants
|
||||||
import at.mocode.frontend.core.network.PlatformConfig
|
import at.mocode.frontend.core.network.PlatformConfig
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package at.mocode.frontend.core.auth.di
|
package at.mocode.frontend.core.auth.di
|
||||||
|
|
||||||
import at.mocode.frontend.core.auth.data.AuthApiClient
|
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
||||||
import at.mocode.frontend.core.domain.AppConstants
|
import at.mocode.frontend.core.domain.AppConstants
|
||||||
import at.mocode.frontend.core.network.TokenProvider
|
import at.mocode.frontend.core.network.TokenProvider
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.domain.service
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ergebnis eines OIDC-Callback-Empfangs (Authorization Code + State).
|
* Ergebnis eines OIDC-Callback-Empfangs (Authorization Code + State).
|
||||||
|
|
@ -2,7 +2,14 @@ package at.mocode.frontend.core.auth.presentation
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import at.mocode.frontend.core.auth.data.*
|
import at.mocode.frontend.core.auth.data.local.AuthState
|
||||||
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
|
import at.mocode.frontend.core.auth.data.remote.AuthApiClient
|
||||||
|
import at.mocode.frontend.core.auth.domain.service.OidcCallbackResult
|
||||||
|
import at.mocode.frontend.core.auth.domain.service.consumePendingOidcCallback
|
||||||
|
import at.mocode.frontend.core.auth.domain.service.getOidcRedirectUri
|
||||||
|
import at.mocode.frontend.core.auth.domain.service.launchOidcFlow
|
||||||
|
import at.mocode.frontend.core.auth.utils.PkceHelper
|
||||||
import at.mocode.frontend.core.domain.AppConstants
|
import at.mocode.frontend.core.domain.AppConstants
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.utils
|
||||||
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
@file:Suppress("REDUNDANT_CALL_OF_CONVERSION_METHOD")
|
@file:Suppress("REDUNDANT_CALL_OF_CONVERSION_METHOD")
|
||||||
|
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.utils
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reines Kotlin SHA-256 nach FIPS 180-4.
|
* Reines Kotlin SHA-256 nach FIPS 180-4.
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.domain.service
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpServer
|
import com.sun.net.httpserver.HttpServer
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
|
|
@ -8,6 +8,7 @@ import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import java.awt.Desktop
|
import java.awt.Desktop
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JVM-Implementierung: öffnet den System-Browser und startet einen lokalen
|
* JVM-Implementierung: öffnet den System-Browser und startet einen lokalen
|
||||||
|
|
@ -71,7 +72,7 @@ actual suspend fun launchOidcFlow(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warten auf Callback (max. 5 Minuten)
|
// Warten auf Callback (max. 5 Minuten)
|
||||||
return withTimeoutOrNull(5 * 60 * 1000L) {
|
return withTimeoutOrNull((5 * 60 * 1000L).milliseconds) {
|
||||||
deferred.await()
|
deferred.await()
|
||||||
} ?: run {
|
} ?: run {
|
||||||
server.stop(0)
|
server.stop(0)
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package at.mocode.frontend.core.auth.data
|
package at.mocode.frontend.core.auth.domain.service
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wasm-Implementierung für OIDC Redirect.
|
* Wasm-Implementierung für OIDC Redirect.
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
package at.mocode.frontend.features.deviceinitialization.domain
|
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.data.local
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
|
||||||
|
|
||||||
expect object DeviceInitializationSettingsManager {
|
expect object DeviceInitializationSettingsManager {
|
||||||
fun saveSettings(settings: DeviceInitializationSettings)
|
fun saveSettings(settings: DeviceInitializationSettings)
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.di
|
||||||
|
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
|
||||||
|
import org.koin.dsl.module
|
||||||
|
|
||||||
|
val deviceInitializationModule = module {
|
||||||
|
factory { (onComplete: (DeviceInitializationSettings) -> Unit) ->
|
||||||
|
DeviceInitializationViewModel(get(), onComplete)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,9 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.domain
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.domain
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validierungslogik für den Geräte-Initialisierungs-Wizard.
|
* Validierungslogik für den Geräte-Initialisierungs-Wizard.
|
||||||
|
|
@ -29,7 +34,6 @@ object DeviceInitializationValidator {
|
||||||
fun canContinue(settings: DeviceInitializationSettings): Boolean {
|
fun canContinue(settings: DeviceInitializationSettings): Boolean {
|
||||||
val basicValid = isNameValid(settings.deviceName) &&
|
val basicValid = isNameValid(settings.deviceName) &&
|
||||||
isKeyValid(settings.sharedKey) &&
|
isKeyValid(settings.sharedKey) &&
|
||||||
(if (settings.networkRole == NetworkRole.MASTER) isBackupPathValid(settings.backupPath) else true) &&
|
|
||||||
isSyncIntervalValid(settings.syncInterval)
|
isSyncIntervalValid(settings.syncInterval)
|
||||||
|
|
||||||
if (!basicValid) return false
|
if (!basicValid) return false
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.domain
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.domain.model
|
||||||
|
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
|
@ -1,4 +1,12 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
|
@ -20,7 +28,7 @@ import androidx.compose.ui.input.key.*
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DeviceInitializationScreen(
|
fun DeviceInitializationScreen(
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import at.mocode.frontend.core.network.discovery.DiscoveredService
|
||||||
|
|
||||||
|
data class DeviceInitializationUiState(
|
||||||
|
val currentStep: Int = 0,
|
||||||
|
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
|
||||||
|
val discoveredMasters: List<DiscoveredService> = emptyList(),
|
||||||
|
val isProcessing: Boolean = false,
|
||||||
|
val error: String? = null
|
||||||
|
)
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.ExpectedClient
|
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
|
@ -1,4 +1,12 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
|
@ -10,7 +18,6 @@ import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.key.*
|
import androidx.compose.ui.input.key.*
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun NetworkRoleSelector(
|
fun NetworkRoleSelector(
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.di
|
|
||||||
|
|
||||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
val deviceInitializationModule = module {
|
|
||||||
factory { (onComplete: (at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings) -> Unit) ->
|
|
||||||
DeviceInitializationViewModel(get(), onComplete)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
|
||||||
|
|
||||||
import at.mocode.frontend.core.network.discovery.DiscoveredService
|
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
|
||||||
|
|
||||||
data class DeviceInitializationUiState(
|
|
||||||
val currentStep: Int = 0,
|
|
||||||
val settings: DeviceInitializationSettings = DeviceInitializationSettings(),
|
|
||||||
val discoveredMasters: List<DiscoveredService> = emptyList(),
|
|
||||||
val isProcessing: Boolean = false,
|
|
||||||
val error: String? = null
|
|
||||||
)
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.domain
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.data.local
|
||||||
|
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|
@ -1,4 +1,12 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.text.KeyboardActions
|
import androidx.compose.foundation.text.KeyboardActions
|
||||||
|
|
@ -29,8 +37,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
import androidx.compose.ui.text.input.VisualTransformation
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import at.mocode.frontend.core.designsystem.components.MsEnumDropdown
|
import at.mocode.frontend.core.designsystem.components.MsEnumDropdown
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.NetworkRole
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.swing.JFileChooser
|
import javax.swing.JFileChooser
|
||||||
import javax.swing.UIManager
|
import javax.swing.UIManager
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
package at.mocode.frontend.features.deviceinitialization.domain
|
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.data.local
|
||||||
|
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
import kotlinx.browser.localStorage
|
import kotlinx.browser.localStorage
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
|
||||||
|
|
@ -21,7 +24,7 @@ actual object DeviceInitializationSettingsManager {
|
||||||
actual fun loadSettings(): DeviceInitializationSettings? {
|
actual fun loadSettings(): DeviceInitializationSettings? {
|
||||||
val content = localStorage.getItem(SETTINGS_KEY) ?: return null
|
val content = localStorage.getItem(SETTINGS_KEY) ?: return null
|
||||||
return try {
|
return try {
|
||||||
json.decodeFromString<DeviceInitializationSettings>(DeviceInitializationSettings.serializer(), content)
|
json.decodeFromString(DeviceInitializationSettings.serializer(), content)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
println("Fehler beim Laden der Einstellungen (WasmJS): ${e.message}")
|
println("Fehler beim Laden der Einstellungen (WasmJS): ${e.message}")
|
||||||
null
|
null
|
||||||
|
|
@ -1,4 +1,12 @@
|
||||||
package at.mocode.frontend.features.deviceinitialization.presentation
|
@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||||
|
|
||||||
|
package at.mocode.frontend.features.device.initialization.presentation
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.NetworkRole
|
||||||
|
import at.mocode.frontend.features.device.initialization.domain.model.ExpectedClient
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -13,7 +21,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
import androidx.compose.ui.text.input.VisualTransformation
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationValidator
|
import at.mocode.frontend.features.device.initialization.domain.DeviceInitializationValidator
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun DeviceInitializationConfig(
|
actual fun DeviceInitializationConfig(
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package at.mocode.frontend.features.profile.data
|
package at.mocode.frontend.features.profile.data
|
||||||
|
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.network.PlatformConfig
|
import at.mocode.frontend.core.network.PlatformConfig
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import at.mocode.core.domain.serialization.UuidSerializer
|
import at.mocode.core.domain.serialization.UuidSerializer
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||||
import at.mocode.frontend.core.network.NetworkConfig
|
import at.mocode.frontend.core.network.NetworkConfig
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
||||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||||
import at.mocode.frontend.core.domain.zns.ZnsImportState
|
import at.mocode.frontend.core.domain.zns.ZnsImportState
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,5 @@
|
||||||
"deviceName": "Meldestelle",
|
"deviceName": "Meldestelle",
|
||||||
"sharedKey": "Password",
|
"sharedKey": "Password",
|
||||||
"backupPath": "/mocode/meldestelle/docs/temp",
|
"backupPath": "/mocode/meldestelle/docs/temp",
|
||||||
"networkRole": "MASTER",
|
"networkRole": "MASTER"
|
||||||
"expectedClients": [
|
|
||||||
{
|
|
||||||
"name": "Richter-Turm",
|
|
||||||
"role": "RICHTER"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
@ -10,12 +10,12 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import at.mocode.desktop.navigation.DesktopNavigationPort
|
import at.mocode.desktop.navigation.DesktopNavigationPort
|
||||||
import at.mocode.desktop.screens.layout.DesktopMainLayout
|
import at.mocode.desktop.screens.layout.DesktopMainLayout
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.auth.presentation.LoginScreen
|
import at.mocode.frontend.core.auth.presentation.LoginScreen
|
||||||
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
import at.mocode.frontend.core.auth.presentation.LoginViewModel
|
||||||
import at.mocode.frontend.core.designsystem.theme.AppTheme
|
import at.mocode.frontend.core.designsystem.theme.AppTheme
|
||||||
import at.mocode.frontend.core.navigation.AppScreen
|
import at.mocode.frontend.core.navigation.AppScreen
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
|
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
|
||||||
import org.koin.compose.koinInject
|
import org.koin.compose.koinInject
|
||||||
import org.koin.compose.viewmodel.koinViewModel
|
import org.koin.compose.viewmodel.koinViewModel
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
package at.mocode.desktop.di
|
package at.mocode.desktop.di
|
||||||
|
|
||||||
import at.mocode.desktop.navigation.DesktopNavigationPort
|
import at.mocode.desktop.navigation.DesktopNavigationPort
|
||||||
import at.mocode.frontend.core.auth.data.AuthTokenManager
|
import at.mocode.desktop.repository.DesktopMasterdataRepository
|
||||||
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.domain.models.User
|
import at.mocode.frontend.core.domain.models.User
|
||||||
|
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
||||||
import at.mocode.frontend.core.navigation.CurrentUserProvider
|
import at.mocode.frontend.core.navigation.CurrentUserProvider
|
||||||
import at.mocode.frontend.core.navigation.DeepLinkHandler
|
import at.mocode.frontend.core.navigation.DeepLinkHandler
|
||||||
import at.mocode.frontend.core.navigation.NavigationPort
|
import at.mocode.frontend.core.navigation.NavigationPort
|
||||||
import at.mocode.desktop.repository.DesktopMasterdataRepository
|
|
||||||
import at.mocode.frontend.core.domain.repository.MasterdataRepository
|
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import at.mocode.frontend.core.localdb.localDbModule
|
||||||
import at.mocode.frontend.core.network.networkModule
|
import at.mocode.frontend.core.network.networkModule
|
||||||
import at.mocode.frontend.core.sync.di.syncModule
|
import at.mocode.frontend.core.sync.di.syncModule
|
||||||
import at.mocode.frontend.features.billing.di.billingModule
|
import at.mocode.frontend.features.billing.di.billingModule
|
||||||
import at.mocode.frontend.features.deviceinitialization.di.deviceInitializationModule
|
import at.mocode.frontend.features.device.initialization.di.deviceInitializationModule
|
||||||
import at.mocode.frontend.features.nennung.di.nennungFeatureModule
|
import at.mocode.frontend.features.nennung.di.nennungFeatureModule
|
||||||
import at.mocode.frontend.features.pferde.di.pferdeModule
|
import at.mocode.frontend.features.pferde.di.pferdeModule
|
||||||
import at.mocode.frontend.features.profile.di.profileModule
|
import at.mocode.frontend.features.profile.di.profileModule
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,12 @@ import at.mocode.desktop.screens.management.VeranstalterDetail
|
||||||
import at.mocode.desktop.screens.management.VeranstalterVerwaltungScreen
|
import at.mocode.desktop.screens.management.VeranstalterVerwaltungScreen
|
||||||
import at.mocode.desktop.screens.nennung.NennungsEingangScreen
|
import at.mocode.desktop.screens.nennung.NennungsEingangScreen
|
||||||
import at.mocode.desktop.screens.profile.FunktionaerProfil
|
import at.mocode.desktop.screens.profile.FunktionaerProfil
|
||||||
import at.mocode.desktop.screens.veranstaltung.*
|
import at.mocode.desktop.screens.veranstaltung.VeranstaltungVerwaltung
|
||||||
import at.mocode.desktop.screens.veranstaltung.details.*
|
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungKonfig
|
||||||
import at.mocode.desktop.screens.veranstaltung.wizards.*
|
import at.mocode.desktop.screens.veranstaltung.details.VeranstaltungProfilScreen
|
||||||
|
import at.mocode.desktop.screens.veranstaltung.wizards.TurnierWizard
|
||||||
|
import at.mocode.desktop.screens.veranstaltung.wizards.VeranstalterAnlegenWizard
|
||||||
|
import at.mocode.frontend.core.auth.data.local.AuthTokenManager
|
||||||
import at.mocode.frontend.core.designsystem.theme.AppColors
|
import at.mocode.frontend.core.designsystem.theme.AppColors
|
||||||
import at.mocode.frontend.core.designsystem.theme.Dimens
|
import at.mocode.frontend.core.designsystem.theme.Dimens
|
||||||
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
import at.mocode.frontend.core.domain.zns.ZnsImportProvider
|
||||||
|
|
@ -36,12 +39,12 @@ import at.mocode.frontend.core.network.ConnectivityTracker
|
||||||
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
import at.mocode.frontend.core.network.discovery.NetworkDiscoveryService
|
||||||
import at.mocode.frontend.features.billing.presentation.BillingScreen
|
import at.mocode.frontend.features.billing.presentation.BillingScreen
|
||||||
import at.mocode.frontend.features.billing.presentation.BillingViewModel
|
import at.mocode.frontend.features.billing.presentation.BillingViewModel
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettings
|
import at.mocode.frontend.features.device.initialization.data.local.DeviceInitializationSettingsManager
|
||||||
import at.mocode.frontend.features.deviceinitialization.domain.DeviceInitializationSettingsManager
|
import at.mocode.frontend.features.device.initialization.domain.model.DeviceInitializationSettings
|
||||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationScreen
|
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationScreen
|
||||||
import at.mocode.frontend.features.deviceinitialization.presentation.DeviceInitializationViewModel
|
import at.mocode.frontend.features.device.initialization.presentation.DeviceInitializationViewModel
|
||||||
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
|
|
||||||
import at.mocode.frontend.features.nennung.presentation.NennungManagementScreen
|
import at.mocode.frontend.features.nennung.presentation.NennungManagementScreen
|
||||||
|
import at.mocode.frontend.features.nennung.presentation.NennungViewModel
|
||||||
import at.mocode.frontend.features.pferde.presentation.PferdeScreen
|
import at.mocode.frontend.features.pferde.presentation.PferdeScreen
|
||||||
import at.mocode.frontend.features.pferde.presentation.PferdeViewModel
|
import at.mocode.frontend.features.pferde.presentation.PferdeViewModel
|
||||||
import at.mocode.frontend.features.profile.presentation.ProfileScreen
|
import at.mocode.frontend.features.profile.presentation.ProfileScreen
|
||||||
|
|
@ -535,7 +538,7 @@ private fun DesktopContentArea(
|
||||||
DeviceInitializationSettingsManager.saveSettings(finalSettings)
|
DeviceInitializationSettingsManager.saveSettings(finalSettings)
|
||||||
// Vision_04: Sicherheitsschlüssel als Token setzen, damit Cloud-Suche funktioniert
|
// Vision_04: Sicherheitsschlüssel als Token setzen, damit Cloud-Suche funktioniert
|
||||||
val authTokenManager =
|
val authTokenManager =
|
||||||
org.koin.core.context.GlobalContext.get().get<at.mocode.frontend.core.auth.data.AuthTokenManager>()
|
org.koin.core.context.GlobalContext.get().get<AuthTokenManager>()
|
||||||
authTokenManager.setToken(finalSettings.sharedKey)
|
authTokenManager.setToken(finalSettings.sharedKey)
|
||||||
onSettingsChange(finalSettings)
|
onSettingsChange(finalSettings)
|
||||||
onNavigate(AppScreen.VeranstaltungVerwaltung)
|
onNavigate(AppScreen.VeranstaltungVerwaltung)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user