Skip to content

2.0.0#509

Draft
rteyssandier wants to merge 21 commits intomainfrom
2.0.0
Draft

2.0.0#509
rteyssandier wants to merge 21 commits intomainfrom
2.0.0

Conversation

@rteyssandier
Copy link
Copy Markdown
Contributor

@rteyssandier rteyssandier commented Mar 14, 2026

Flocon SDK 2.0.0: The Modular Evolution ❄️

Welcome to the future of Android and Multiplatform inspection. Flocon 2.0.0 is not just an update; it's a complete architectural reimagining designed for performance, flexibility, and cross-platform excellence.

Lib

Task:

  • Migrate to AGP 9.0.0
  • Deeplink
  • Analytics
  • Database
    • Room
    • Room3
  • Network
    • OkHttp3 (4+)
    • OkHttp3 (5+)
    • Ktor
    • gRPC
  • Table

Desktop

Need to add other


🛠️ Simple & Extensible Initialization
Starting with 2.0.0, Flocon adopts a modern DSL-based initialization. Simply install the plugins you need, and you're ready to go.

// In your Application class or main entry point
startFlocon(context) {
    install(FloconDatabase) 
    install(FloconNetwork) 
    install(FloconAnalytics)
    install(FloconDashboard)
    ...
}

🏗️ The New Modular Architecture

Flocon has evolved from a monolithic SDK to a modular ecosystem. This allows you to include only what you need, reducing your app's binary size and improving compile times.

graph TD
    subgraph "Core Discovery"
        C[flocon-core]
    end

    subgraph "Network Layer"
        N_CORE[network-core]
        OK[okhttp-interceptor]
        KT[ktor-interceptor]
        GRPC[grpc-interceptor]
    end

    subgraph "Database Layer"
        DB_CORE[database-core]
        RM[database-room]
        DS[datastores]
    end

    subgraph "Discovery & DeepLinks"
        DL[deeplinks]
    end

    C --> N_CORE
    C --> DB_CORE
    C --> DL
    N_CORE --> OK
    N_CORE --> KT
    N_CORE --> GRPC
    DB_CORE --> RM
    DB_CORE --> DS
Loading

Important

Production Safety first: Every functional module now has a corresponding -no-op variant. Use these in your release flavors to ensure no debugging code leaks into production.


🌍 Kotlin Multiplatform (KMP) Ready

Version 2.0.0 marks our commitment to the multiplatform ecosystem.

  • Unified Database Inspection: The Room database inspector has been migrated to KMP, allowing you to use the same inspection tools whether you are running on Android, iOS, or JVM.
  • Ktor Integration: Our new Ktor interceptors are built natively for KMP, supporting Darwin, CIO, and OkHttp engines.

📡 Modern Protocol Support: gRPC

We know modern apps rely on more than just REST. Flocon 2.0.0 introduces specialized interceptors for gRPC, completing our network inspection suite.

  • Lite Support: Lightweight interceptors for resource-constrained environments.
  • Full Transparency: Inspect gRPC calls with the same ease as standard HTTP requests.

🛠️ Migration Path from 1.x to 2.0.0

Making the jump is straightforward but requires updating your dependency declarations to match the new modular structure.

Tip

Check the Mappings:

  • io.github.openflocon:flocon now serves as the entry point but relies on the underlying modules.
  • Replace generic interceptors with their specific counterparts (e.g., :network:okhttp-interceptor).
  • Ensure you add the :database:room module if you need Room inspection.

Flocon 2.0.0: Transparent. Modular. Powerful.

@rteyssandier rteyssandier added this to the 2.0.0 milestone Mar 14, 2026
@rteyssandier rteyssandier self-assigned this Mar 14, 2026
@rteyssandier rteyssandier added enhancement New feature or request refact labels Mar 14, 2026
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces Flocon SDK 2.0.0, a significant architectural overhaul aimed at enhancing performance, flexibility, and cross-platform compatibility. The core change involves transitioning to a modular, plugin-based system, which streamlines integration and reduces overhead. This release also emphasizes Kotlin Multiplatform support, making Flocon a more versatile tool for modern application development.

Highlights

  • Modular Architecture: The Flocon SDK has been refactored from a monolithic structure to a modular plugin-based system, allowing developers to include only necessary components, reducing binary size and improving compile times.
  • Kotlin Multiplatform (KMP) Readiness: Key modules, including the Room database inspector and Ktor interceptors, have been migrated to KMP, enabling unified inspection tools across Android, iOS, and JVM platforms.
  • New Plugin System: Introduced a new DSL-based initialization for Flocon, where plugins like Database, Network, and Deeplinks can be installed explicitly using a startFlocon block.
  • Database Module: A new database:core module and its database:room implementation were added, providing a structured way to inspect and interact with databases, including Room.
  • Network Module: New network:core module and its okhttp-interceptor and ktor-interceptor implementations were introduced, centralizing network inspection capabilities.
  • Deeplinks Module: A dedicated deeplinks module was added for managing and inspecting application deeplinks.
  • No-Op Variants: Corresponding -no-op variants for each functional module (e.g., database:core-no-op, deeplinks-no-op, network:core-no-op) were created to prevent debugging code from leaking into production builds.
Changelog
  • FloconAndroid/database/core-no-op/build.gradle.kts
    • Added new Gradle build file for the no-op database core module.
  • FloconAndroid/database/core/build.gradle.kts
    • Added new Gradle build file for the database core module.
  • FloconAndroid/database/core/src/androidMain/kotlin/io/github/openflocon/flocon/database/core/model/FloconDatabaseModel.android.kt
    • Added Android-specific implementation for database query execution.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabase.kt
    • Added the main FloconDatabase plugin factory for the new modular system.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabaseConfig.kt
    • Added configuration class for the FloconDatabase plugin.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabaseEncoding.kt
    • Added encoding logic for database-related data models.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabasePlugin.kt
    • Added interface for the FloconDatabase plugin.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabasePluginImpl.kt
    • Added implementation for the FloconDatabase plugin, handling messages and database registration.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/datasource/FloconDatabaseDataSource.kt
    • Added interface for database data source operations.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/datasource/FloconDatabaseProvider.kt
    • Added interface for Flocon database providers.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/FloconDatabaseModel.kt
    • Added common database model interfaces and data classes.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/fromdevice/DatabaseExecuteResponse.kt
    • Added sealed interface for database execution responses.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/fromdevice/DatabaseExecuteSqlResponse.kt
    • Added sealed interface for SQL execution responses with various result types.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/fromdevice/sql/DatabaseQueryLogModel.kt
    • Added data model for logging database queries.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/fromdevice/sql/DeviceDataBaseDataModel.kt
    • Added data model for device database information.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/fromdevice/sql/QueryResultReceivedDataModel.kt
    • Added data model for query results received from the device.
  • FloconAndroid/database/core/src/commonMain/kotlin/io/github/openflocon/flocon/database/core/model/todevice/DatabaseQueryMessage.kt
    • Added data model for database query messages sent to the device.
  • FloconAndroid/database/core/src/iosMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabasePlugin.ios.kt
    • Added iOS-specific implementation for the FloconDatabase plugin, including SQL execution helpers.
  • FloconAndroid/database/core/src/jvmMain/kotlin/io/github/openflocon/flocon/database/core/FloconDatabasePlugin.jvm.kt
    • Added JVM-specific placeholder for the FloconDatabase plugin.
  • FloconAndroid/database/room-no-op/build.gradle.kts
    • Added new Gradle build file for the no-op Room database module.
  • FloconAndroid/database/room-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/database/room/floconRegisterDatabase.kt
    • Added no-op functions for Room database registration.
  • FloconAndroid/database/room-no-op/src/main/java/io/github/openflocon/flocon/database/room/floconRegisterDatabase.kt
    • Added Android-specific no-op functions for Room database registration.
  • FloconAndroid/database/room/build.gradle.kts
    • Added new Gradle build file for the Room database module.
  • FloconAndroid/database/room/src/androidMain/kotlin/io/github/openflocon/flocon/database/room/FloconRoomDatabaseProviderImpl.android.kt
    • Added Android-specific implementation for the Room database provider, including database scanning logic.
  • FloconAndroid/database/room/src/commonMain/kotlin/io/github/openflocon/flocon/database/room/FloconRoomDatabaseConfig.kt
    • Added configuration class for Room database integration and extension function for FloconDatabaseConfig.
  • FloconAndroid/database/room/src/commonMain/kotlin/io/github/openflocon/flocon/database/room/FloconRoomDatabaseModel.kt
    • Added Room-specific database model and functions for registering and logging Room databases.
  • FloconAndroid/database/room/src/commonMain/kotlin/io/github/openflocon/flocon/database/room/FloconRoomDatabaseProviderImpl.kt
    • Added interface and expect/actual declaration for the Room database provider.
  • FloconAndroid/database/room/src/main/java/io/github/openflocon/flocon/database/room/FloconDatabasePlugin.android.kt
    • Renamed and refactored the Android database plugin to use SQLiteDatabase directly and moved SQL execution logic to executeSQLInternal.
  • FloconAndroid/database/room/src/main/java/io/github/openflocon/flocon/database/room/extensions/RoomBuilderExt.kt
    • Added extension function floconLogs for RoomDatabase.Builder to integrate Flocon query logging.
  • FloconAndroid/datastores-no-op/build.gradle.kts
    • Updated dependency from :flocon-base to :flocon.
  • FloconAndroid/datastores-no-op/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt
    • Updated imports and commented out the implementation of FloconDatastorePreference to make it a no-op.
  • FloconAndroid/datastores/build.gradle.kts
    • Updated dependency from :flocon-base to :flocon.
  • FloconAndroid/datastores/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt
    • Commented out the FloconDatastorePreference class, effectively making it a no-op implementation.
  • FloconAndroid/deeplinks-no-op/build.gradle.kts
    • Renamed from flocon-base/build.gradle.kts and updated namespace, artifactId, and name for the new deeplinks no-op module.
  • FloconAndroid/deeplinks-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/FloconDeeplinksNoOp.kt
    • Added no-op implementation for the FloconDeeplinks plugin.
  • FloconAndroid/deeplinks/build.gradle.kts
    • Added new Gradle build file for the deeplinks module.
  • FloconAndroid/deeplinks/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/FloconDeeplinks.kt
    • Added the main FloconDeeplinks plugin factory and its implementation.
  • FloconAndroid/deeplinks/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/FloconDeeplinksPlugin.kt
    • Added configuration, builder, and interface for the FloconDeeplinks plugin.
  • FloconAndroid/deeplinks/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/Mapping.kt
    • Renamed and moved deeplinks mapping logic.
  • FloconAndroid/deeplinks/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/model/DeeplinkModel.kt
    • Renamed and moved DeeplinkModel.
  • FloconAndroid/deeplinks/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/model/DeeplinksRemote.kt
    • Renamed and moved DeeplinksRemote.
  • FloconAndroid/flocon-no-op/build.gradle.kts
    • Updated dependency from :flocon-base to :flocon.
  • FloconAndroid/flocon/build.gradle.kts
    • Removed :flocon-base dependency, added ExpectRefinement compiler option, and removed androidx.sqlite dependencies.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/Flocon.kt
    • Commented out the old Flocon object initialization.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/FloconBroadcastReceiver.kt
    • Removed Log import and commented out the device plugin registration call.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/FloconContext.android.kt
    • Added Android-specific FloconContext implementation.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/FloconCore.android.kt
    • Updated displayClearTextError to use context.context and explicit parameter names.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/FloconLogger.kt
    • Renamed and moved FloconLogger to the flocon module.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/ServerHost.android.kt
    • Updated getServerHost to use floconContext.context.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/core/AppInfos.android.kt
    • Updated getAppInfos to use floconContext.context.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/plugins/crashreporter/FloconCrashReporterDataSource.android.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/plugins/device/FloconDevicePluginImpl.android.kt
    • Removed ProcessPhoenix import and commented out the restartApp implementation.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/plugins/device/GetAppIconUtils.android.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/plugins/files/FloconFilesPlugin.android.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/FloconSharedPrefsPlugin.android.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/crashreporter/FloconCrashReporterDataSource.android.kt
    • Added the old Android crash reporter data source implementation under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/crashreporter/UncaughtExceptionHandler.android.kt
    • Added the old Android uncaught exception handler under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/device/FloconDevicePluginImpl.android.kt
    • Added the old Android device plugin implementation under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/device/GetAppIconUtils.android.kt
    • Added the old Android app icon utility functions under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/files/FloconFilesPlugin.android.kt
    • Added the old Android files plugin implementation under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/FloconSharedPreference.kt
    • Renamed and moved FloconSharedPreference to pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/FloconSharedPrefsPlugin.android.kt
    • Added the old Android shared preferences plugin implementation under pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/SharedPreferencesFinder.kt
    • Renamed and moved SharedPreferencesFinder to pluginsold.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/utils/PlatformUtils.android.kt
    • Renamed and moved Android-specific platform utilities.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/websocket/FloconHttpClient.android.kt
    • Added @FloconMarker annotation to buildFloconHttpClient.
  • FloconAndroid/flocon/src/androidMain/kotlin/io/github/openflocon/flocon/websocket/FloconHttpClientAndroid.kt
    • Added @FloconMarker annotation to FloconHttpClientAndroid.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github.openflocon/flocon/plugins/dashboard/builder/SectionBuilder.kt
    • Renamed and moved SectionBuilder.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github.openflocon/flocon/pluginsold/dashboard/dsl/HtmlDsl.kt
    • Added the old dashboard HTML DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github.openflocon/flocon/pluginsold/dashboard/model/config/LabelConfig.kt
    • Added the old dashboard label config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/Flocon.kt
    • Added the new Flocon class, implementing the modular plugin system and connection handling.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconApp.kt
    • Added the new FloconApp abstract class with a simplified Client interface.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconConfiguration.kt
    • Added FloconConfiguration for DSL-based plugin installation and the startFlocon function.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconContext.kt
    • Added expect/actual declaration for FloconContext.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconCore.kt
    • Simplified FloconCore to only contain FloconContext and displayClearTextError.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconEncoding.kt
    • Added FloconEncoding interface and DefaultEncoding for plugin serialization.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconFile.kt
    • Added @FloconMarker annotation to FloconFile.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconLogger.kt
    • Renamed and moved FloconLogger to the flocon module.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/FloconPlugin.kt
    • Added core interfaces for the new modular plugin system: FloconPlugin, FloconPluginConfig, FloconPluginKey, and FloconPluginFactory.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/client/FloconClientImpl.kt
    • Renamed to FloconClient, removed direct plugin references, and updated the connect method signature to include onMessageReceived.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/core/FloconEncoder.kt
    • Changed the visibility of FloconEncoder from internal to object.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/core/FloconFileSender.kt
    • Added @FloconMarker annotation and made the send function suspendable.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/core/FloconMessageSender.kt
    • Made send and sendPendingMessages functions suspendable.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/dsl/FloconMarker.kt
    • Added FloconMarker annotation for internal Flocon APIs.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/error/PluginNotInitialized.kt
    • Added pluginNotInitialized error function.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/model/FloconFileInfo.kt
    • Added @FloconMarker annotation to FloconFileInfo.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/analytics/FloconAnalyticsPlugin.kt
    • Refactored the analytics plugin to use the new modular system, including FloconAnalyticsConfig, FloconAnalyticsPlugin interface, and FloconAnalytics object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/analytics/builder/AnalyticsBuilder.kt
    • Renamed and moved AnalyticsBuilder.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/analytics/model/AnalyticsEvent.kt
    • Renamed and moved AnalyticsEvent.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/analytics/model/AnalyticsItem.kt
    • Renamed and moved AnalyticsItem.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/analytics/model/AnalyticsPropertiesConfig.kt
    • Renamed and moved AnalyticsPropertiesConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/crashreporter/FloconCrashReporterPlugin.kt
    • Refactored the crash reporter plugin to use the new modular system, including FloconCrashReporterConfig, FloconCrashReporterPlugin interface, and FloconCrashReporter object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/crashreporter/model/CrashReportMapper.kt
    • Removed Json import from CrashReportMapper.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/FloconDashboardDSL.kt
    • Removed FloconApp import and commented out dashboard registration logic.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/FloconDashboardPlugin.kt
    • Refactored the dashboard plugin to use the new modular system, including FloconDashboardConfig, FloconDashboardPlugin interface, and FloconDashboard object. Updated message handling.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/builder/ContainerBuilder.kt
    • Renamed and moved ContainerBuilder.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/builder/DashboardBuilder.kt
    • Renamed and moved DashboardBuilder.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/builder/FormBuilder.kt
    • Renamed and moved FormBuilder.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/ButtonDsl.kt
    • Renamed and moved ButtonDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/CheckBoxDsl.kt
    • Renamed and moved CheckBoxDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/DashboardDsl.kt
    • Renamed and moved DashboardDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/FormDsl.kt
    • Renamed and moved FormDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/HtmlDsl.kt
    • Renamed and moved HtmlDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/MarkdownDsl.kt
    • Renamed and moved MarkdownDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/PlainTextDsl.kt
    • Renamed and moved PlainTextDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/SectionDsl.kt
    • Renamed and moved SectionDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/TextDsl.kt
    • Renamed and moved TextDsl.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/dsl/TextField.kt
    • Renamed and moved TextField DSL.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/ContainerType.kt
    • Renamed and moved ContainerType.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/DashboardConfig.kt
    • Renamed and moved DashboardConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/DashboardScope.kt
    • Renamed and moved DashboardScope.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/ButtonConfig.kt
    • Renamed and moved ButtonConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/CheckBoxConfig.kt
    • Renamed and moved CheckBoxConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/ContainerConfig.kt
    • Renamed and moved ContainerConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/ElementConfig.kt
    • Renamed and moved ElementConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/FormConfig.kt
    • Renamed and moved FormConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/HtmlConfig.kt
    • Renamed and moved HtmlConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/LabelConfig.kt
    • Renamed and moved LabelConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/MarkdownConfig.kt
    • Renamed and moved MarkdownConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/PlainTextConfig.kt
    • Renamed and moved PlainTextConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/SectionConfig.kt
    • Renamed and moved SectionConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/TextConfig.kt
    • Renamed and moved TextConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/dashboard/model/config/TextFieldConfig.kt
    • Renamed and moved TextFieldConfig.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/database/FloconDatabasePlugin.kt
    • Deprecated the old database plugin, indicating its functionality has moved to :database:core.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/database/model/FloconDatabaseModel.kt
    • Deprecated the old database model.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/deeplinks/FloconDeeplinksPlugin.kt
    • Removed the old deeplinks plugin implementation.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/device/FloconDevicePluginImpl.kt
    • Refactored the device plugin to use the new modular system, including FloconDeviceConfig, FloconDevicePlugin interface, and FloconDevice object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/files/FloconFilesPlugin.kt
    • Refactored the files plugin to use the new modular system, including FloconFilesConfig, FloconFilesPlugin interface, and FloconFiles object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/FloconSharedPrefsPlugin.kt
    • Refactored the shared preferences plugin to use the new modular system, including FloconPreferencesConfig, FloconPreferencesPlugin interface, and FloconPreferences object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/model/FloconPreferenceWrapper.kt
    • Added import for pluginsold.sharedprefs.model.FloconPreference.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/model/FloconSharedPreferenceModel.kt
    • Added a placeholder FloconSharedPreferenceModel.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/tables/FloconTablesPlugin.kt
    • Refactored the tables plugin to use the new modular system, including FloconTableConfig, FloconTablePlugin interface, and FloconTable object. Commented out sender.send calls.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/plugins/tables/model/TableItem.kt
    • Added TableItem and TableColumnConfig data classes and toParam infix function.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/analytics/FloconAnalyticsPlugin.kt
    • Added the old analytics plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/analytics/builder/AnalyticsBuilder.kt
    • Added the old analytics builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/analytics/model/AnalyticsEvent.kt
    • Added the old analytics event model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/analytics/model/AnalyticsPropertiesConfig.kt
    • Added the old analytics properties config model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/analytics/model/TableItem.kt
    • Added the old analytics table item model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/crashreporter/FloconCrashReporterPlugin.kt
    • Added the old crash reporter plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/FloconDashboardPlugin.kt
    • Added the old dashboard plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/builder/ContainerBuilder.kt
    • Added the old dashboard container builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/builder/DashboardBuilder.kt
    • Added the old dashboard builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/builder/FormBuilder.kt
    • Added the old dashboard form builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/builder/SectionBuilder.kt
    • Added the old dashboard section builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/ButtonDsl.kt
    • Added the old dashboard button DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/CheckBoxDsl.kt
    • Added the old dashboard checkbox DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/DashboardDsl.kt
    • Added the old dashboard DSL marker and function under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/FormDsl.kt
    • Added the old dashboard form DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/MarkdownDsl.kt
    • Added the old dashboard Markdown DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/PlainTextDsl.kt
    • Added the old dashboard plain text and JSON DSLs under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/SectionDsl.kt
    • Added the old dashboard section DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/TextDsl.kt
    • Added the old dashboard text and label DSLs under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/dsl/TextField.kt
    • Added the old dashboard text field DSL under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/ContainerType.kt
    • Added the old dashboard container type enum under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/Dashboard.kt
    • Added the old dashboard config model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/DashboardScope.kt
    • Added the old dashboard scope interface under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/ButtonConfig.kt
    • Added the old dashboard button config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/CheckBoxConfig.kt
    • Added the old dashboard checkbox config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/ContainerConfig.kt
    • Added the old dashboard container config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/ElementConfig.kt
    • Added the old dashboard element config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/FormConfig.kt
    • Added the old dashboard form config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/HtmlConfig.kt
    • Added the old dashboard HTML config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/MarkdownConfig.kt
    • Added the old dashboard Markdown config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/PlainTextConfig.kt
    • Added the old dashboard plain text config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/SectionConfig.kt
    • Added the old dashboard section config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/TextConfig.kt
    • Added the old dashboard text config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/dashboard/model/config/TextFieldConfig.kt
    • Added the old dashboard text field config under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/database/FloconDatabasePlugin.kt
    • Deprecated the old database plugin under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/database/model/FloconDatabaseModel.kt
    • Deprecated the old database model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/device/FloconDevicePlugin.kt
    • Added the old device plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/files/FloconFilesPlugin.kt
    • Added the old files plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/FloconNetworkPlugin.kt
    • Added the old network plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/BadQualityConfig.kt
    • Renamed and moved BadQualityConfig to pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/FloconHttpRequest.kt
    • Added the old Flocon network request and response models under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/FloconNetworkCallRequest.kt
    • Added the old Flocon network call request model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/FloconNetworkCallResponse.kt
    • Added the old Flocon network call response model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/FloconWebSocketEvent.kt
    • Added the old Flocon WebSocket event model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/FloconWebSocketMockListener.kt
    • Added the old Flocon WebSocket mock listener interface under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/network/model/MockNetworkResponse.kt
    • Added the old mock network response model under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/FloconSharedPrefsPlugin.kt
    • Added the old shared preferences plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/buildFloconPreferencesDataSource.kt
    • Added a placeholder file for building old shared preferences data source.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/model/FloconPreference.kt
    • Renamed and moved FloconPreference to pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/sharedprefs/model/FloconSharedPreferenceModel.kt
    • Added a placeholder FloconSharedPreferenceModel under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/tables/FloconTablesPlugin.kt
    • Added the old tables plugin interfaces and classes under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/tables/builder/TableBuilder.kt
    • Added the old table builder under pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/tables/model/TableColumnConfig.kt
    • Renamed and moved TableColumnConfig to pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/pluginsold/tables/model/TableItem.kt
    • Renamed and moved TableItem to pluginsold.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/utils/PlatformUtils.kt
    • Renamed and moved common platform utilities.
  • FloconAndroid/flocon/src/commonMain/kotlin/io/github/openflocon/flocon/websocket/FloconHttpClient.kt
    • Added @FloconMarker annotation and made the send function suspendable.
  • FloconAndroid/flocon/src/iosMain/kotlin/io/github/openflocon/flocon/FloconLogger.kt
    • Renamed and moved iOS-specific FloconLogger.
  • FloconAndroid/flocon/src/iosMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/FloconSharedPrefsPlugin.ios.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/iosMain/kotlin/io/github/openflocon/flocon/utils/PlatformUtils.ios.kt
    • Renamed and moved iOS-specific platform utilities.
  • FloconAndroid/flocon/src/jvmMain/kotlin/io/github/openflocon/flocon/FloconLogger.kt
    • Renamed and moved JVM-specific FloconLogger.
  • FloconAndroid/flocon/src/jvmMain/kotlin/io/github/openflocon/flocon/plugins/sharedprefs/FloconSharedPrefsPlugin.jvm.kt
    • Replaced the implementation with a TODO() placeholder.
  • FloconAndroid/flocon/src/jvmMain/kotlin/io/github/openflocon/flocon/utils/PlatformUtils.jvm.kt
    • Renamed and moved JVM-specific platform utilities.
  • FloconAndroid/gradle/libs.versions.toml
    • Updated Room version to 2.8.4.
    • Removed androidx-room-runtime, androidx-sqlite-bundled, and androidx-room-compiler from [libraries] section.
    • Added androidx-room-runtime, androidx-room-compiler, and androidx-room-sqlite-wrapper back with updated Room version.
    • Updated sqlite version to 2.6.2.
  • FloconAndroid/grpc/grpc-interceptor-base/build.gradle.kts
    • Updated dependency from :flocon-base to :flocon.
  • FloconAndroid/grpc/grpc-interceptor-base/src/main/kotlin/io/github/openflocon/flocon/grpc/BadQuality.kt
    • Updated import for BadQualityConfig to use the new pluginsold package.
  • FloconAndroid/grpc/grpc-interceptor-base/src/main/kotlin/io/github/openflocon/flocon/grpc/FloconGrpcBaseInterceptor.kt
    • Removed FloconApp import and updated imports for network models to use the new pluginsold package.
    • Commented out the usage of floconNetworkPlugin.badQualityConfig.
  • FloconAndroid/grpc/grpc-interceptor-base/src/main/kotlin/io/github/openflocon/flocon/grpc/FloconGrpcPlugin.kt
    • Removed FloconApp import and updated imports for network models to use the new pluginsold package.
    • Commented out networkPlugin calls for reporting requests and responses.
  • FloconAndroid/grpc/grpc-interceptor-base/src/main/kotlin/io/github/openflocon/flocon/grpc/model/RequestHolder.kt
    • Updated import for FloconNetworkRequest to use the new pluginsold package.
  • FloconAndroid/network/core-no-op/build.gradle.kts
    • Added new Gradle build file for the no-op network core module.
  • FloconAndroid/network/core-no-op/src/androidMain/AndroidManifest.xml
    • Added Android manifest for the no-op network core module.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/FloconNetwork.kt
    • Added no-op implementation for the FloconNetwork plugin factory.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/mapper/BadQualityToJson.kt
    • Renamed and moved BadQualityToJson mapper to the no-op network core module.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/mapper/FloconNetworkRequestToJson.kt
    • Renamed and moved FloconNetworkRequestToJson mapper to the no-op network core module.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/mapper/MockResponseToJson.kt
    • Added mock response JSON mapping utilities to the no-op network core module.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/mapper/Websocket.kt
    • Added WebSocket JSON mapping utilities to the no-op network core module.
  • FloconAndroid/network/core-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/noop/plugin/FloconNetworkPluginImpl.kt
    • Added no-op implementation for the FloconNetwork plugin.
  • FloconAndroid/network/core/build.gradle.kts
    • Added new Gradle build file for the network core module.
  • FloconAndroid/network/core/src/androidMain/AndroidManifest.xml
    • Added Android manifest for the network core module.
  • FloconAndroid/network/core/src/androidMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSource.android.kt
    • Added Android-specific implementation for building the network data source.
  • FloconAndroid/network/core/src/androidMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSourceAndroid.kt
    • Renamed and moved the Android network data source implementation.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/FloconNetwork.kt
    • Added the main FloconNetwork plugin factory, configuration, and interface.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSource.kt
    • Added interface and expect/actual declaration for the network data source.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/mapper/BadQualityToJson.kt
    • Added BadQualityConfig JSON serialization and deserialization logic.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/mapper/FloconNetworkRequestToJson.kt
    • Added Flocon network request, response, and WebSocket event JSON serialization logic.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/mapper/MockResponseToJson.kt
    • Renamed and moved mock response JSON mapping utilities.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/mapper/Websocket.kt
    • Renamed and moved WebSocket JSON mapping utilities.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/BadQualityConfig.kt
    • Added data classes for BadQualityConfig, LatencyConfig, and Error types.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/FloconHttpRequest.kt
    • Renamed and moved Flocon network request and response models.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/FloconNetworkCallRequest.kt
    • Renamed and moved Flocon network call request model.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/FloconNetworkCallResponse.kt
    • Renamed and moved Flocon network call response model.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/FloconWebSocketEvent.kt
    • Renamed and moved Flocon WebSocket event model.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/FloconWebSocketMockListener.kt
    • Renamed and moved Flocon WebSocket mock listener interface.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/model/MockNetworkResponse.kt
    • Renamed and moved mock network response model.
  • FloconAndroid/network/core/src/commonMain/kotlin/io/github/openflocon/flocon/network/core/plugin/FloconNetworkPluginImpl.kt
    • Renamed and moved the network plugin implementation, updating its logic to use the new modular structure and data sources.
  • FloconAndroid/network/core/src/iosMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSource.ios.kt
    • Added iOS-specific implementation for building the network data source.
  • FloconAndroid/network/core/src/iosMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSourceImpl.kt
    • Added iOS-specific placeholder implementation for the network data source.
  • FloconAndroid/network/core/src/jvmMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSource.jvm.kt
    • Added JVM-specific implementation for building the network data source.
  • FloconAndroid/network/core/src/jvmMain/kotlin/io/github/openflocon/flocon/network/core/datasource/FloconNetworkDataSourceImpl.kt
    • Renamed and moved the JVM network data source implementation.
  • FloconAndroid/network/ktor-interceptor-no-op/build.gradle.kts
    • Renamed and updated dependency to :network:core-no-op.
  • FloconAndroid/network/ktor-interceptor-no-op/src/commonMain/kotlin/io/github/openflocon/flocon/ktor/FloconKtorPlugin.kt
    • Renamed and moved the no-op Ktor plugin.
  • FloconAndroid/network/ktor-interceptor/build.gradle.kts
    • Renamed and updated dependencies to :flocon and :network:core.
  • FloconAndroid/network/ktor-interceptor/src/androidMain/kotlin/io/github/openflocon/flocon/ktor/DecodeUtils.kt
    • Renamed and moved Android-specific Ktor decode utilities.
  • FloconAndroid/network/ktor-interceptor/src/commonMain/kotlin/io/github/openflocon/flocon/ktor/BadQuality.kt
    • Renamed and updated import for BadQualityConfig.
  • FloconAndroid/network/ktor-interceptor/src/commonMain/kotlin/io/github/openflocon/flocon/ktor/FloconKtorPlugin.kt
    • Added the new Ktor plugin with commented out interception logic.
  • FloconAndroid/network/ktor-interceptor/src/commonMain/kotlin/io/github/openflocon/flocon/ktor/Mocks.kt
    • Renamed and updated imports for network models.
  • FloconAndroid/network/ktor-interceptor/src/commonMain/kotlin/io/github/openflocon/flocon/ktor/Utils.kt
    • Renamed and moved common Ktor utilities.
  • FloconAndroid/network/ktor-interceptor/src/iosMain/kotlin/io/github/openflocon/flocon/ktor/DecodeUtils.kt
    • Renamed and moved iOS-specific Ktor decode utilities.
  • FloconAndroid/network/ktor-interceptor/src/jvmMain/kotlin/io/github/openflocon/flocon/ktor/DecodeUtils.kt
    • Renamed and moved JVM-specific Ktor decode utilities.
  • FloconAndroid/network/okhttp-interceptor-no-op/build.gradle.kts
    • Renamed and added dependency to :network:core-no-op.
  • FloconAndroid/network/okhttp-interceptor-no-op/src/main/kotlin/io/github/openflocon/flocon/okhttp/OkHttpInterceptor.kt
    • Renamed and moved the no-op OkHttp interceptor.
  • FloconAndroid/network/okhttp-interceptor-no-op/src/main/kotlin/io/github/openflocon/flocon/okhttp/websocket/FloconWebSocket.kt
    • Renamed and moved the no-op Flocon WebSocket.
  • FloconAndroid/network/okhttp-interceptor/build.gradle.kts
    • Renamed and updated dependency to :network:core.
  • FloconAndroid/network/okhttp-interceptor/src/main/kotlin/io/github/openflocon/flocon/okhttp/BadQuality.kt
    • Renamed and updated import for BadQualityConfig.
  • FloconAndroid/network/okhttp-interceptor/src/main/kotlin/io/github/openflocon/flocon/okhttp/Mock.kt
    • Renamed and updated imports for network models.
  • FloconAndroid/network/okhttp-interceptor/src/main/kotlin/io/github/openflocon/flocon/okhttp/OkHttpInterceptor.kt
    • Renamed and updated imports, replacing FloconApp.instance?.client?.networkPlugin with Flocon.networkPlugin.
  • FloconAndroid/network/okhttp-interceptor/src/main/kotlin/io/github/openflocon/flocon/okhttp/Utils.kt
    • Renamed and moved OkHttp utilities.
  • FloconAndroid/network/okhttp-interceptor/src/main/kotlin/io/github/openflocon/flocon/okhttp/websocket/FloconWebSocket.kt
    • Renamed and updated imports, commenting out floconLogWebSocketEvent and registerWebSocketMockListener calls.
  • FloconAndroid/network/okhttp-interceptor/src/test/kotlin/io/github/openflocon/flocon/okhttp/UtilsTest.kt
    • Renamed and moved OkHttp utilities test file.
  • FloconAndroid/sample-android-only/build.gradle.kts
    • Added new modular dependencies for deeplinks, database, and network modules.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/MainActivity.kt
    • Refactored Flocon initialization to use the new startFlocon DSL.
    • Commented out old plugin initialization calls and updated button actions to reflect the new modular structure.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/dashboard/InitializeDashboard.kt
    • Removed label import and added floconDashboard import.
    • Added com.apollographql.apollo.api.label import (likely an accidental addition).
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/database/DogDatabase.kt
    • Updated setQueryCallback to use the new floconLogs extension function and fallbackToDestructiveMigration.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/database/InitializeDatabases.kt
    • Updated floconRegisterDatabase calls to use the new API, registering databases with the new modular system.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/deeplinks/InitializeDeeplinks.kt
    • Removed the old deeplinks initialization file.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/sharedpreferences/Datastores.kt
    • Commented out the floconRegisterPreference call.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/sharedpreferences/SharedPreferences.kt
    • Commented out the floconRegisterPreference call.
  • FloconAndroid/sample-android-only/src/main/java/io/github/openflocon/flocon/myapplication/table/InitializeDashboard.kt
    • Commented out the old table logging calls.
  • FloconAndroid/sample-multiplatform/build.gradle.kts
    • Updated dependencies to use the new modular network modules and androidx.sqlite.bundled.
  • FloconAndroid/sample-multiplatform/src/androidMain/kotlin/io/github/openflocon/flocon/myapplication/multi/MainActivity.kt
    • Updated Flocon initialization to use install(FloconDeeplinks) with the new DSL.
  • FloconAndroid/settings.gradle.kts
    • Updated rootProject.name to 'Flocon Sample App'.
    • Removed flocon-base include.
    • Added new modular includes for network:okhttp-interceptor, network:ktor-interceptor, deeplinks, network:core, database:core, and database:room and their no-op variants.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request represents a significant and impressive architectural overhaul of the Flocon SDK, moving towards a more modular and extensible design with a Ktor-like plugin system. The introduction of dedicated modules for features like Database, Network, and Deeplinks, along with their -no-op variants, is a major step forward for production safety and binary size reduction. The adoption of Kotlin Multiplatform for key components is also a great direction.
However, the refactoring appears to be incomplete in several areas. Key functionalities, such as the Android and iOS database query implementations and the DataStore integration, are left with TODO() markers or commented-out code. I've also identified some design concerns, particularly around the use of static singletons for plugin management and a fragile JSON-in-JSON protocol for database results. Addressing these points will be crucial for ensuring the stability and maintainability of the new 2.0 architecture.

Comment on lines +5 to +46
actual fun openDbAndExecuteQuery(
path: String,
query: String
): DatabaseExecuteSqlResponse {
// var helper: SupportSQLiteOpenHelper? = null
// return try {
// val path = context.getDatabasePath(databaseName)
// val version = getDatabaseVersion(path = path.absolutePath)
// helper = FrameworkSQLiteOpenHelperFactory().create(
// SupportSQLiteOpenHelper.Configuration.builder(context)
// .name(path.absolutePath)
// .callback(object : SupportSQLiteOpenHelper.Callback(version) {
// override fun onCreate(db: SupportSQLiteDatabase) {
// // no op
// }
//
// override fun onUpgrade(
// db: SupportSQLiteDatabase,
// oldVersion: Int,
// newVersion: Int
// ) {
// // no op
// }
// })
// .build()
// )
// val database = helper.writableDatabase
//
// executeSQL(
// database = database,
// query = query,
// )
// } catch (t: Throwable) {
// DatabaseExecuteSqlResponse.Error(
// message = t.message ?: "error on executeSQL",
// originalSql = query,
// )
// } finally {
// helper?.close()
// }
TODO()
} No newline at end of file
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The actual implementation of openDbAndExecuteQuery for Android is currently a TODO(), with the previous implementation commented out. This is a critical piece of functionality for the database inspection feature that needs to be implemented for the module to be functional on Android.

Comment on lines +49 to +68
fun DatabaseExecuteSqlResponse.toJson(): String {
val jsonEncoder = FloconEncoder.json
val thisAsJson = jsonEncoder.encodeToJsonElement(this)

val type = when (this) {
is DatabaseExecuteSqlResponse.Error -> "Error"
is DatabaseExecuteSqlResponse.Insert -> "Insert"
DatabaseExecuteSqlResponse.RawSuccess -> "RawSuccess"
is DatabaseExecuteSqlResponse.Select -> "Select"
is DatabaseExecuteSqlResponse.UpdateDelete -> "UpdateDelete"
}

return buildJsonObject {
put("type", type)
put(
"body",
thisAsJson.toString()
) // warning : the desktop is waiting for a string representation of the json here
}.toString()
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The toJson() extension function serializes the DatabaseExecuteSqlResponse object into a JSON string, and then embeds that string inside another JSON object under the body key. This JSON-in-JSON string format is fragile, inefficient, and makes parsing on the client side unnecessarily complex. The comment on line 66 indicates this is intentional, but it would be a significant improvement to the protocol to refactor this. The QueryResultDataModel on the desktop side should be updated to expect a proper nested JSON object for the result field, not an escaped string.

Comment on lines +92 to +98
private fun executeUpdateDelete(connection: SQLiteConnection, query: String): DatabaseExecuteSqlResponse {
connection.prepare(query).use { statement ->
statement.close()
}
// sqlite-kt n'expose pas encore `changes()`, on renvoie 0
return DatabaseExecuteSqlResponse.UpdateDelete(affectedCount = 0)
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The executeUpdateDelete function for iOS always returns an affectedCount of 0. The comment indicates this is due to a limitation in sqlite-kt. While this might be a library constraint, it results in incorrect data being displayed to the user. If it's not possible to get the actual count, this limitation should be clearly documented. However, it's worth investigating if there's a way to execute a SELECT changes() query after the statement to get the number of affected rows, similar to how last_insert_rowid() is used for inserts.

Comment on lines +100 to +113
private fun executeInsert(connection: SQLiteConnection, query: String): DatabaseExecuteSqlResponse {
connection.prepare(query).use { statement ->
statement.close()
}

// Récupération du dernier ID inséré
var id = -1L
connection.prepare("SELECT last_insert_rowid()").use {
// id = if (it.step()) it.getLong(0) else -1L
// it.close() // maybe remove
}

return DatabaseExecuteSqlResponse.Insert(id)
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The iOS implementation for executeInsert is incomplete. The logic to retrieve the last_insert_rowid() is commented out, causing the function to always return the hardcoded value of -1L. This is incorrect and will provide misleading information to the user. The commented-out code should be restored and fixed to correctly report the ID of the inserted row.

Comment on lines +99 to +105
developers {
developer {
id = "openflocon"
name = "Open Flocon"
url = "https://github.com/openflocon"
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

There is a nested developers block within the pom configuration. This is a typo and will likely lead to an incorrectly generated POM file, which could cause issues during publication to Maven Central.

            developer {
                id = "openflocon"
                name = "Open Flocon"
                url = "https://github.com/openflocon"
            }

Comment on lines +22 to +90
//class FloconDatastorePreference(
// override val name: String,
// private val dataStore: DataStore<Preferences>,
// private val mapper: FloconDatastoreMapper? = null // if we encrypted the datastore
//) : FloconPreference {
//
// override suspend fun set(
// columnName: String,
// FloconPreferenceValue
// ) {
// try {
// val data = dataStore.data.first().asMap()
// val key = data.keys.find { it.name == columnName } ?: return
//
// dataStore.edit {
// try {
// when (it[key]) {
// is String -> it[stringPreferencesKey(columnName)] = mapper?.let {
// it.toDatastore(value.stringValue!!)
// } ?: value.stringValue!!
// is Int -> it[intPreferencesKey(columnName)] = value.intValue!!
// is Boolean -> it[booleanPreferencesKey(columnName)] = value.booleanValue!!
// is Float -> it[floatPreferencesKey(columnName)] = value.floatValue!!
// is Long -> it[longPreferencesKey(columnName)] = value.longValue!!
// is Double -> it[doublePreferencesKey(columnName)] =
// value.floatValue!!.toDouble()
// }
// } catch (t: Throwable) {
// FloconLogger.logError("cannot update datastore preference", t)
// }
// }
// } catch (t: Throwable) {
// FloconLogger.logError(t.message ?: "cannot edit datastore preference columns", t)
// }
// }
//
// override suspend fun columns(): List<String> {
// return try {
// dataStore.data.first().asMap().map { it.key.name }
// } catch (t: Throwable) {
// FloconLogger.logError(t.message ?: "cannot get datastore preference columns", t)
// emptyList()
// }
// }
//
// override suspend fun get(columnName: String): io.github.openflocon.flocon.pluginsold.sharedprefs.model.FloconPreferenceValue? {
// return try {
// val data = dataStore.data.first().asMap()
// val key = data.keys.find { it.name == columnName } ?: return null
// val value = data[key] ?: return null
//
// return when (value) {
// is String -> FloconPreferenceValue(
// stringValue = mapper?.fromDatastore(value) ?: value
// )
// is Int -> FloconPreferenceValue(intValue = value)
// is Float -> FloconPreferenceValue(floatValue = value)
// is Double -> FloconPreferenceValue(floatValue = value.toFloat())
// is Boolean -> FloconPreferenceValue(booleanValue = value)
// is Long -> FloconPreferenceValue(longValue = value)
// else -> null
// }
// } catch (t: Throwable) {
// FloconLogger.logError(t.message ?: "cannot get datastore preference value", t)
// null
// }
// }
//
//} No newline at end of file
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The entire FloconDatastorePreference class has been commented out. This suggests the DataStore integration is incomplete. This functionality should be restored for the datastores module to be useful.

scope = floconConfig.scope,
providers = pluginConfig.providers
)
.also { FloconDatabasePluginImpl.plugin = it }
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The plugin instance is being stored in a static var on the companion object of FloconDatabasePluginImpl. This singleton-like pattern can introduce tight coupling, make testing more difficult, and potentially lead to state management issues in complex scenarios. Consider managing plugin instances within the core Flocon object and providing access through a registry or dependency injection mechanism rather than static properties. This would align better with the new modular and extensible architecture.

body = DatabaseQueryLogModel(
dbName = dbName,
sqlQuery = sqlQuery,
bindArgs = bindArgs.map { it.toString() },
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Converting all bindArgs to strings using it.toString() can lead to a loss of type information and ambiguity. For example, a null value will become the string "null", and numeric types will be indistinguishable from string types on the client side. This can make debugging queries more difficult. It would be more robust to serialize these arguments while preserving their original type, perhaps by converting them to a structure that includes both the value and the type, or by using a more descriptive serialization format.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request refact

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant