From c0b94d7ba3dca1757c6ef15a659cd8083ba11187 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 13:35:20 +0300 Subject: [PATCH 01/30] Refactor: rename package from io.github.kdroidfilter to dev.nucleusframework --- .editorconfig | 2 +- .github/FUNDING.yml | 2 +- .github/workflows/release-desktop.yaml | 4 +- .github/workflows/test-packaging.yaml | 4 +- CLAUDE.md | 2 +- IDEAL_API.md | 4 +- README.md | 10 +- aot-runtime/build.gradle.kts | 16 +- .../nucleus/aot/runtime/AotRuntime.kt | 2 +- .../nucleus/aot/runtime/ExecutableRuntime.kt | 5 + .../nucleus/aot/runtime/ExecutableRuntime.kt | 5 - .../nucleus/aot/runtime/AotRuntimeTest.kt | 2 +- .../aot/runtime/ExecutableRuntimeTest.kt | 2 +- autolaunch/build.gradle.kts | 16 +- .../nucleus/autolaunch/AutoLaunch.kt | 14 +- .../nucleus/autolaunch/AutoLaunchBackend.kt | 2 +- .../nucleus/autolaunch/AutoLaunchConfig.kt | 4 +- .../nucleus/autolaunch/AutoLaunchState.kt | 2 +- .../autolaunch/linux/FlatpakPortalBackend.kt | 16 +- .../autolaunch/linux/LinuxAutoLaunch.kt | 12 +- .../linux/NativeAutoLaunchLinuxBridge.kt | 8 +- .../autolaunch/linux/SystemdUserBackend.kt | 12 +- .../macos/MacSMAppServiceBackend.kt | 14 +- .../windows/MsixStartupTaskBackend.kt | 12 +- .../windows/NativeAutoLaunchBridge.kt | 8 +- .../windows/Win32RegistryBackend.kt | 12 +- .../autolaunch/windows/WindowsAutoLaunch.kt | 8 +- .../native/linux/nucleus_autolaunch_linux.c | 16 +- .../native/windows/nucleus_autolaunch.cpp | 20 +- .../reachability-metadata.json | 12 + .../reachability-metadata.json | 12 - .../autolaunch/Win32RegistryBackendTest.kt | 6 +- config/detekt/detekt.yml | 6 +- core-runtime/build.gradle.kts | 16 +- .../nucleus/core/runtime/DeepLinkHandler.kt | 6 +- .../nucleus/core/runtime/ExecutableRuntime.kt | 2 +- .../core/runtime/LinuxDesktopEnvironment.kt | 2 +- .../core/runtime/NativeLibraryLoader.kt | 2 +- .../nucleus/core/runtime/NucleusApp.kt | 4 +- .../nucleus/core/runtime/Platform.kt | 2 +- .../core/runtime/SingleInstanceManager.kt | 8 +- .../core/runtime/tools/AppIdProvider.kt | 2 +- .../runtime/tools/LinuxDesktopFileDetector.kt | 4 +- .../nucleus/core/runtime/tools/Logger.kt | 12 +- .../core/runtime/ExecutableRuntimeTest.kt | 2 +- .../nucleus/core/runtime/NucleusAppTest.kt | 2 +- .../core/runtime/SingleInstanceHolder.kt | 2 +- .../SingleInstanceManagerEndToEndTest.kt | 4 +- darkmode-detector/build.gradle.kts | 16 +- .../darkmodedetector/IsSystemInDarkMode.kt | 10 +- .../nucleus/darkmodedetector/Logger.kt | 4 +- .../linux/LinuxPortalThemeDetector.kt | 4 +- .../linux/NativeLinuxBridge.kt | 6 +- .../mac/MacOSThemeDetector.kt | 4 +- .../mac/NativeDarkModeBridge.kt | 6 +- .../windows/NativeWindowsBridge.kt | 6 +- .../windows/WindowsThemeDetector.kt | 4 +- .../main/native/linux/nucleus_linux_theme.c | 8 +- .../main/native/macos/NucleusDarkModeBridge.m | 8 +- .../native/windows/nucleus_windows_theme.c | 8 +- .../reachability-metadata.json | 6 +- decorated-window-awt/build.gradle.kts | 16 +- .../nucleus/window/AwtDecoratedWindow.kt | 10 +- .../nucleus/window/AwtTitleBar.kt | 6 +- .../nucleus/window/DecoratedDialogCore.kt | 10 +- .../nucleus/window/DialogTitleBarImpl.kt | 6 +- .../nucleus/window/WindowControlArea.kt | 12 +- .../window/WindowsWindowControlArea.kt | 6 +- .../window/internal/MinimumSizeSupport.kt | 2 +- decorated-window-core/build.gradle.kts | 16 +- .../nucleus/window/ControlButtonsDirection.kt | 2 +- .../nucleus/window/DecoratedDialogTypes.kt | 2 +- .../nucleus/window/DecoratedWindowCore.kt | 2 +- .../window/NativeLayoutDirectionBridge.kt | 4 +- .../window/NucleusDecoratedWindowTheme.kt | 22 +- .../nucleus/window/TitleBarCore.kt | 8 +- .../nucleus/window/TitleBarLinuxCommon.kt | 8 +- .../nucleus/window/TitleBarModifiers.kt | 4 +- .../nucleus/window/icons/linux/gnome/Close.kt | 4 +- .../window/icons/linux/gnome/CloseDark.kt | 4 +- .../window/icons/linux/gnome/CloseHover.kt | 4 +- .../icons/linux/gnome/CloseHoverDark.kt | 4 +- .../window/icons/linux/gnome/CloseInactive.kt | 4 +- .../icons/linux/gnome/CloseInactiveDark.kt | 4 +- .../window/icons/linux/gnome/ClosePressed.kt | 4 +- .../icons/linux/gnome/ClosePressedDark.kt | 4 +- .../linux/gnome/GnomeControlButtonsIcons.kt | 3 + .../window/icons/linux/gnome/Maximize.kt | 4 +- .../window/icons/linux/gnome/MaximizeDark.kt | 4 +- .../window/icons/linux/gnome/MaximizeHover.kt | 4 +- .../icons/linux/gnome/MaximizeHoverDark.kt | 4 +- .../icons/linux/gnome/MaximizeInactive.kt | 4 +- .../icons/linux/gnome/MaximizeInactiveDark.kt | 4 +- .../icons/linux/gnome/MaximizePressed.kt | 4 +- .../icons/linux/gnome/MaximizePressedDark.kt | 4 +- .../window/icons/linux/gnome/Minimize.kt | 4 +- .../window/icons/linux/gnome/MinimizeDark.kt | 4 +- .../window/icons/linux/gnome/MinimizeHover.kt | 4 +- .../icons/linux/gnome/MinimizeHoverDark.kt | 4 +- .../icons/linux/gnome/MinimizeInactive.kt | 4 +- .../icons/linux/gnome/MinimizeInactiveDark.kt | 4 +- .../icons/linux/gnome/MinimizePressed.kt | 4 +- .../icons/linux/gnome/MinimizePressedDark.kt | 4 +- .../window/icons/linux/gnome/Restore.kt | 4 +- .../window/icons/linux/gnome/RestoreDark.kt | 4 +- .../window/icons/linux/gnome/RestoreHover.kt | 4 +- .../icons/linux/gnome/RestoreHoverDark.kt | 4 +- .../icons/linux/gnome/RestoreInactive.kt | 4 +- .../icons/linux/gnome/RestoreInactiveDark.kt | 4 +- .../icons/linux/gnome/RestorePressed.kt | 4 +- .../icons/linux/gnome/RestorePressedDark.kt | 4 +- .../nucleus/window/icons/linux/kde/Close.kt | 4 +- .../window/icons/linux/kde/CloseDark.kt | 4 +- .../window/icons/linux/kde/CloseHover.kt | 4 +- .../icons/linux/kde/CloseHoverFocused.kt | 4 +- .../window/icons/linux/kde/CloseInactive.kt | 4 +- .../icons/linux/kde/CloseInactiveDark.kt | 4 +- .../window/icons/linux/kde/ClosePressed.kt | 4 +- .../icons/linux/kde/ClosePressedFocused.kt | 4 +- .../icons/linux/kde/KdeControlButtonsIcons.kt | 3 + .../window/icons/linux/kde/Maximize.kt | 4 +- .../window/icons/linux/kde/MaximizeDark.kt | 4 +- .../window/icons/linux/kde/MaximizeHover.kt | 4 +- .../icons/linux/kde/MaximizeHoverDark.kt | 4 +- .../icons/linux/kde/MaximizeInactive.kt | 4 +- .../window/icons/linux/kde/MaximizePressed.kt | 4 +- .../icons/linux/kde/MaximizePressedDark.kt | 4 +- .../window/icons/linux/kde/Minimize.kt | 4 +- .../window/icons/linux/kde/MinimizeDark.kt | 4 +- .../window/icons/linux/kde/MinimizeHover.kt | 4 +- .../icons/linux/kde/MinimizeHoverDark.kt | 4 +- .../icons/linux/kde/MinimizeInactive.kt | 4 +- .../window/icons/linux/kde/MinimizePressed.kt | 4 +- .../icons/linux/kde/MinimizePressedDark.kt | 4 +- .../nucleus/window/icons/linux/kde/Restore.kt | 4 +- .../window/icons/linux/kde/RestoreDark.kt | 4 +- .../window/icons/linux/kde/RestoreHover.kt | 4 +- .../icons/linux/kde/RestoreHoverDark.kt | 4 +- .../window/icons/linux/kde/RestoreInactive.kt | 4 +- .../window/icons/linux/kde/RestorePressed.kt | 4 +- .../icons/linux/kde/RestorePressedDark.kt | 4 +- .../nucleus/window/icons/windows/Close.kt | 4 +- .../nucleus/window/icons/windows/CloseDark.kt | 4 +- .../window/icons/windows/CloseFullscreen.kt | 4 +- .../icons/windows/CloseFullscreenDark.kt | 4 +- .../icons/windows/CloseFullscreenInactive.kt | 4 +- .../windows/CloseFullscreenInactiveDark.kt | 4 +- .../window/icons/windows/CloseHover.kt | 4 +- .../window/icons/windows/CloseInactive.kt | 4 +- .../window/icons/windows/CloseInactiveDark.kt | 4 +- .../nucleus/window/icons/windows/Maximize.kt | 4 +- .../window/icons/windows/MaximizeDark.kt | 4 +- .../window/icons/windows/MaximizeInactive.kt | 4 +- .../icons/windows/MaximizeInactiveDark.kt | 4 +- .../nucleus/window/icons/windows/Minimize.kt | 4 +- .../window/icons/windows/MinimizeDark.kt | 4 +- .../window/icons/windows/MinimizeInactive.kt | 4 +- .../icons/windows/MinimizeInactiveDark.kt | 4 +- .../nucleus/window/icons/windows/Restore.kt | 4 +- .../window/icons/windows/RestoreDark.kt | 4 +- .../window/icons/windows/RestoreInactive.kt | 4 +- .../icons/windows/RestoreInactiveDark.kt | 4 +- .../windows/WindowsControlButtonIcons.kt | 3 + .../nucleus/window/internal/ColorUtils.kt | 2 +- .../window/internal/InsideBorderModifier.kt | 2 +- .../window/styling/DecoratedWindowStyling.kt | 6 +- .../nucleus/window/styling/TitleBarStyling.kt | 6 +- .../window/utils/linux/LinuxButtonLayout.kt | 6 +- .../utils/linux/LinuxTitleBarIconSet.kt | 10 +- .../utils/windows/WindowsTitleBarIconSet.kt | 48 +- .../linux/gnome/GnomeControlButtonsIcons.kt | 3 - .../icons/linux/kde/KdeControlButtonsIcons.kt | 3 - .../windows/WindowsControlButtonIcons.kt | 3 - .../linux/nucleus_layout_direction_linux.c | 10 +- .../macos/NucleusLayoutDirectionBridge.m | 2 +- .../nucleus_layout_direction_windows.c | 2 +- .../reachability-metadata.json | 2 +- decorated-window-jbr/build.gradle.kts | 16 +- .../nucleus/window/DecoratedDialog.kt | 4 +- .../nucleus/window/DecoratedWindow.kt | 8 +- .../nucleus/window/DialogTitleBar.Linux.kt | 6 +- .../nucleus/window/DialogTitleBar.MacOS.kt | 8 +- .../nucleus/window/DialogTitleBar.Windows.kt | 10 +- .../nucleus/window/DialogTitleBar.kt | 8 +- .../nucleus/window/TitleBar.Linux.kt | 4 +- .../nucleus/window/TitleBar.MacOS.kt | 10 +- .../nucleus/window/TitleBar.Windows.kt | 10 +- .../nucleus/window/TitleBar.kt | 8 +- .../window/utils/ClientRegionHelper.kt | 10 +- .../nucleus/window/utils/macos/MacUtil.kt | 2 +- .../window/utils/macos/NativeMacBridge.kt | 4 +- .../src/main/native/macos/NucleusMacBridge.m | 4 +- decorated-window-jewel/build.gradle.kts | 16 +- .../nucleus/window/jewel/JewelColorMapping.kt | 18 +- .../window/jewel/JewelDecoratedDialog.kt | 8 +- .../window/jewel/JewelDecoratedWindow.kt | 16 +- .../window/jewel/JewelDialogTitleBar.kt | 16 +- .../nucleus/window/jewel/JewelTitleBar.kt | 16 +- decorated-window-jni/build.gradle.kts | 16 +- .../nucleus/window/DecoratedDialog.kt | 4 +- .../nucleus/window/DecoratedWindow.kt | 14 +- .../nucleus/window/DialogTitleBar.Linux.kt | 8 +- .../nucleus/window/DialogTitleBar.MacOS.kt | 10 +- .../nucleus/window/DialogTitleBar.Windows.kt | 10 +- .../nucleus/window/DialogTitleBar.kt | 8 +- .../nucleus/window/TitleBar.Linux.kt | 6 +- .../nucleus/window/TitleBar.MacOS.kt | 10 +- .../nucleus/window/TitleBar.Windows.kt | 10 +- .../nucleus/window/TitleBar.kt | 8 +- .../utils/linux/JniLinuxWindowBridge.kt | 4 +- .../utils/macos/JniMacTitleBarBridge.kt | 4 +- .../window/utils/macos/JniMacWindowUtil.kt | 2 +- .../windows/JniWindowsDecorationBridge.kt | 4 +- .../utils/windows/JniWindowsWindowUtil.kt | 2 +- .../main/native/linux/nucleus_linux_window.c | 8 +- .../src/main/native/macos/JniMacTitleBar.m | 30 +- .../windows/nucleus_windows_decoration.c | 28 +- .../reachability-metadata.json | 4 +- decorated-window-material2/build.gradle.kts | 16 +- .../window/material2/MaterialColorMapping.kt | 18 +- .../material2/MaterialDecoratedDialog.kt | 8 +- .../material2/MaterialDecoratedWindow.kt | 16 +- .../material2/MaterialDialogTitleBar.kt | 16 +- .../window/material2/MaterialTitleBar.kt | 16 +- decorated-window-material3/build.gradle.kts | 16 +- .../window/material/MaterialColorMapping.kt | 18 +- .../material/MaterialDecoratedDialog.kt | 14 +- .../material/MaterialDecoratedWindow.kt | 16 +- .../window/material/MaterialDialogTitleBar.kt | 16 +- .../window/material/MaterialTitleBar.kt | 16 +- decorated-window-tao/build.gradle.kts | 16 +- .../nucleus/window/DialogTitleBar.kt | 34 +- .../nucleus/window/TitleBar.kt | 44 +- .../nucleus/window/tao/ApplicationScope.kt | 2 +- .../nucleus/window/tao/DecoratedDialog.kt | 6 +- .../nucleus/window/tao/DecoratedWindow.kt | 24 +- .../window/tao/DecoratedWindowComposable.kt | 4 +- .../window/tao/FullscreenTitleBarHolder.kt | 2 +- .../nucleus/window/tao/MacOSStyle.kt | 4 +- .../nucleus/window/tao/NativeMetalBridge.kt | 6 +- .../window/tao/NativeTaoA11yWindowsBridge.kt | 4 +- .../nucleus/window/tao/NativeTaoBridge.kt | 4 +- .../nucleus/window/tao/NativeTaoEglBridge.kt | 6 +- .../nucleus/window/tao/NativeTaoGlBridge.kt | 4 +- .../window/tao/NativeTaoLinuxDndBridge.kt | 4 +- .../window/tao/NativeTaoLinuxTouchBridge.kt | 4 +- .../window/tao/NativeTaoLinuxWidgetBridge.kt | 4 +- .../window/tao/NativeTaoMacOsDecoBridge.kt | 4 +- .../window/tao/NativeTaoMacOsDndBridge.kt | 4 +- .../tao/NativeTaoMacOsNativeViewBridge.kt | 4 +- .../window/tao/NativeTaoWindowsDecoBridge.kt | 4 +- .../window/tao/NativeTaoWindowsDndBridge.kt | 4 +- .../tao/NativeTaoWindowsNativeViewBridge.kt | 4 +- .../tao/NativeTaoWindowsOverlayBridge.kt | 4 +- .../nucleus/window/tao/NativeView.kt | 12 +- .../window/tao/NativeViewOverlayController.kt | 12 +- .../NativeViewOverlayController.windows.kt | 10 +- .../nucleus/window/tao/NucleusPlatformView.kt | 2 +- .../window/tao/OverlayInteractionModifier.kt | 4 +- .../nucleus/window/tao/PainterToRgba.kt | 2 +- .../nucleus/window/tao/PopupNativeBridge.kt | 4 +- .../window/tao/PopupNativeBridge.windows.kt | 4 +- .../nucleus/window/tao/TaoAccessibility.kt | 4 +- .../nucleus/window/tao/TaoApplication.kt | 2 +- .../window/tao/TaoApplicationCompose.kt | 2 +- .../nucleus/window/tao/TaoCursorMapping.kt | 2 +- .../window/tao/TaoDecoratedDialogScope.kt | 4 +- .../window/tao/TaoDecoratedWindowScope.kt | 4 +- .../nucleus/window/tao/TaoDeepLinkBridge.kt | 2 +- .../nucleus/window/tao/TaoDnDDiagnostics.kt | 2 +- .../window/tao/TaoDragAndDropManager.kt | 2 +- .../window/tao/TaoDragAndDropPayload.kt | 2 +- .../window/tao/TaoFilesTransferable.kt | 2 +- .../nucleus/window/tao/TaoLinuxUriHandler.kt | 2 +- .../nucleus/window/tao/TaoMainDispatcher.kt | 2 +- .../window/tao/TaoSemanticsObserver.kt | 2 +- .../nucleus/window/tao/TaoSyntheticAwtDnd.kt | 2 +- .../nucleus/window/tao/TaoWindow.kt | 4 +- .../window/tao/UndecoratedWindowBorder.kt | 10 +- .../nucleus/window/tao/WindowControlsLinux.kt | 16 +- .../window/tao/WindowControlsWindows.kt | 50 +- .../window/tao/render/GlSceneRenderer.kt | 2 +- .../nucleus/window/tao/render/MetalFrame.kt | 2 +- .../window/tao/render/MetalSceneRenderer.kt | 4 +- .../tao/render/TaoComposeSceneContext.kt | 2 +- .../render/TaoComposeSceneContextWindows.kt | 2 +- .../window/tao/render/TaoComposeSceneHost.kt | 108 +-- .../tao/render/TaoComposeSceneHostLinux.kt | 138 ++-- .../tao/render/TaoComposeSceneHostWindows.kt | 140 ++-- .../tao/render/TaoInteropTransaction.kt | 2 +- .../tao/render/TaoLinuxOverlayController.kt | 8 +- .../window/tao/render/TaoNativeWireFormat.kt | 2 +- .../nucleus/window/tao/render/TaoPopupHost.kt | 2 +- .../window/tao/render/TaoPopupHostWindows.kt | 2 +- .../window/tao/render/TaoPopupSceneLayer.kt | 6 +- .../tao/render/TaoPopupSceneLayerWindows.kt | 4 +- .../window/tao/render/TaoSyntheticKey.kt | 2 +- .../src/main/native/linux/nucleus_tao_egl.c | 22 +- .../native/linux/nucleus_tao_linux_widget.c | 16 +- .../src/main/native/macos/NucleusTaoMetal.m | 50 +- .../src/main/native/macos/decoration.m | 12 +- .../src/main/native/macos/dnd.m | 6 +- .../src/main/native/macos/native_view.m | 20 +- .../src/main/native/macos/popup_panel.m | 28 +- .../src/main/native/src/cursor.rs | 2 +- .../main/native/src/platform/linux/a11y.rs | 28 +- .../native/src/platform/linux/decoration.rs | 4 +- .../src/main/native/src/platform/linux/dnd.rs | 6 +- .../main/native/src/platform/linux/handles.rs | 4 +- .../main/native/src/platform/linux/monitor.rs | 4 +- .../main/native/src/platform/linux/touch.rs | 4 +- .../main/native/src/platform/macos/a11y.rs | 30 +- .../native/src/platform/macos/apple_events.rs | 4 +- .../main/native/src/platform/macos/handles.rs | 2 +- .../src/main/native/src/platform/macos/ime.rs | 4 +- .../native/src/platform/macos/text_overlay.rs | 4 +- .../main/native/src/platform/windows/a11y.rs | 30 +- .../native/src/platform/windows/handles.rs | 2 +- .../src/main/native/src/window_jni.rs | 48 +- .../src/main/native/windows/nucleus_tao_dnd.c | 6 +- .../src/main/native/windows/nucleus_tao_gl.c | 16 +- .../native/windows/nucleus_tao_windows_deco.c | 22 +- .../windows/nucleus_tao_windows_native_view.c | 10 +- .../windows/nucleus_tao_windows_overlay.c | 18 +- .../windows/nucleus_tao_windows_popup.c | 20 +- .../reachability-metadata.json | 68 +- docs/auto-update.md | 32 +- docs/changelog.md | 18 +- docs/ci-cd.md | 38 +- docs/comparison/packaging.md | 38 +- docs/getting-started.md | 14 +- docs/graalvm/runtime-bootstrap.md | 4 +- docs/graalvm/tasks-ci.md | 8 +- docs/index.md | 18 +- docs/install-linux.sh | 2 +- docs/install.sh | 2 +- docs/llm.md | 2 +- docs/llms-full.txt | 634 +++++++++--------- docs/llms.txt | 310 ++++----- docs/migration.md | 14 +- docs/native-access/index.md | 12 +- docs/native-access/usage.md | 2 +- docs/nucleus-application-plan.md | 2 +- docs/runtime/aot-cache.md | 10 +- docs/runtime/app-metadata.md | 4 +- docs/runtime/autolaunch.md | 12 +- docs/runtime/darkmode-detector.md | 12 +- docs/runtime/decorated-window-jewel.md | 2 +- docs/runtime/decorated-window-material2.md | 2 +- docs/runtime/decorated-window-material3.md | 2 +- docs/runtime/decorated-window-tao.md | 6 +- docs/runtime/decorated-window.md | 20 +- docs/runtime/deep-links.md | 4 +- docs/runtime/energy-manager.md | 6 +- docs/runtime/executable-type.md | 6 +- docs/runtime/freedesktop-icons.md | 12 +- docs/runtime/global-hotkey.md | 20 +- docs/runtime/index.md | 136 ++-- docs/runtime/launcher-linux.md | 12 +- docs/runtime/launcher-macos.md | 10 +- docs/runtime/launcher-windows.md | 30 +- docs/runtime/linux-hidpi.md | 6 +- docs/runtime/media-control.md | 10 +- docs/runtime/menu-macos.md | 16 +- docs/runtime/native-http.md | 18 +- docs/runtime/native-ssl.md | 10 +- docs/runtime/notification-common.md | 6 +- docs/runtime/notification-linux.md | 10 +- docs/runtime/notification-macos.md | 8 +- docs/runtime/notification-windows.md | 8 +- docs/runtime/nucleus-application.md | 10 +- docs/runtime/scheduler.md | 8 +- docs/runtime/service-management-macos.md | 4 +- docs/runtime/single-instance.md | 4 +- docs/runtime/system-color.md | 14 +- docs/runtime/system-info.md | 6 +- docs/runtime/system-tray/index.md | 4 +- docs/runtime/taskbar-progress.md | 4 +- docs/targets/linux.md | 2 +- energy-manager/build.gradle.kts | 16 +- .../nucleus/energymanager/EnergyManager.kt | 10 +- .../energymanager/PlatformEnergyManager.kt | 2 +- .../energymanager/linux/LinuxEnergyManager.kt | 6 +- .../linux/NativeLinuxEnergyBridge.kt | 4 +- .../energymanager/macos/MacOsEnergyManager.kt | 6 +- .../macos/NativeMacOsEnergyBridge.kt | 4 +- .../windows/NativeWindowsEnergyBridge.kt | 4 +- .../windows/WindowsEnergyManager.kt | 6 +- .../native/linux/nucleus_energy_manager.c | 20 +- .../native/macos/nucleus_energy_manager.c | 20 +- .../native/windows/nucleus_energy_manager.c | 20 +- .../energymanager/EnergyManagerTest.kt | 2 +- example/build.gradle.kts | 34 +- .../com/example/demo/AutoLaunchScreen.kt | 10 +- .../example/demo/CommonNotificationsScreen.kt | 8 +- .../com/example/demo/GlobalHotKeyScreen.kt | 10 +- .../kotlin/com/example/demo/LauncherScreen.kt | 10 +- .../example/demo/LinuxNotificationsScreen.kt | 24 +- .../com/example/demo/MacLaunchDiagnostic.kt | 2 +- .../com/example/demo/MacOsLauncherScreen.kt | 4 +- .../com/example/demo/MacOsMenuScreen.kt | 26 +- .../src/main/kotlin/com/example/demo/Main.kt | 52 +- .../com/example/demo/MediaControlScreen.kt | 12 +- .../com/example/demo/NotificationsScreen.kt | 40 +- .../com/example/demo/TaskbarProgressScreen.kt | 20 +- .../com/example/demo/WindowsBadgeScreen.kt | 20 +- .../demo/WindowsNotificationsScreen.kt | 46 +- freedesktop-icons/build.gradle.kts | 16 +- .../freedesktop/icons/FreedesktopIcon.kt | 2 +- global-hotkey/build.gradle.kts | 16 +- .../globalhotkey/GlobalHotKeyManager.kt | 10 +- .../nucleus/globalhotkey/HotKeyListener.kt | 2 +- .../nucleus/globalhotkey/HotKeyModifier.kt | 2 +- .../nucleus/globalhotkey/MediaKey.kt | 2 +- .../linux/NativeLinuxHotKeyBridge.kt | 6 +- .../macos/NativeMacOsHotKeyBridge.kt | 6 +- .../windows/NativeWindowsHotKeyBridge.kt | 6 +- .../linux/nucleus_global_hotkey_linux.c | 8 +- .../macos/nucleus_global_hotkey_macos.m | 8 +- .../native/windows/nucleus_global_hotkey.cpp | 8 +- .../reachability-metadata.json | 6 +- graalvm-runtime/build.gradle.kts | 16 +- .../font/FcFontManagerSubstitution.java | 2 +- .../font/FontCreateFontSubstitution.java | 2 +- .../nucleus/graalvm/font/IsLinux.java | 2 +- .../nucleus/graalvm/font/IsWindows.java | 2 +- .../graalvm/font/IsWindowsOrLinux.java | 2 +- .../font/Win32FontManagerSubstitution.java | 2 +- .../graalvm/wmclass/AppNameResolver.java | 2 +- .../nucleus/graalvm/wmclass/IsLinux.java | 2 +- .../wmclass/XToolkitAppNameSubstitution.java | 2 +- .../nucleus/graalvm/GraalVmInitializer.kt | 4 +- .../native-image.properties | 0 jewel-sample/build.gradle.kts | 16 +- jewel-sample/proguard-rules.pro | 36 +- .../src/main/kotlin/jewelsample/Main.kt | 16 +- .../kotlin/jewelsample/view/TitleBarView.kt | 8 +- jewel-sample/src/main/packaging/Info.plist | 2 +- launcher-linux/build.gradle.kts | 16 +- .../nucleus/launcher/linux/DbusmenuItem.kt | 4 +- .../launcher/linux/LauncherProperties.kt | 2 +- .../launcher/linux/LinuxLauncherEntry.kt | 2 +- .../nucleus/launcher/linux/LinuxQuicklist.kt | 2 +- .../linux/NativeLinuxLauncherBridge.kt | 4 +- .../native/linux/nucleus_launcher_linux.c | 14 +- launcher-macos/build.gradle.kts | 16 +- .../nucleus/launcher/macos/DockMenuItem.kt | 2 +- .../launcher/macos/DockMenuListener.kt | 2 +- .../nucleus/launcher/macos/MacOsDockMenu.kt | 2 +- .../macos/NativeMacOsDockMenuBridge.kt | 4 +- .../native/macos/nucleus_launcher_macos.m | 6 +- launcher-windows/build.gradle.kts | 16 +- .../nucleus/launcher/windows/BadgeGlyph.kt | 2 +- .../launcher/windows/JumpListCategory.kt | 2 +- .../nucleus/launcher/windows/JumpListItem.kt | 2 +- .../nucleus/launcher/windows/KnownCategory.kt | 2 +- .../windows/NativeWindowsBadgeBridge.kt | 4 +- .../windows/NativeWindowsJumpListBridge.kt | 4 +- .../windows/NativeWindowsTaskbarBridge.kt | 4 +- .../nucleus/launcher/windows/StockIcon.kt | 2 +- .../launcher/windows/TaskbarIconSource.kt | 2 +- .../launcher/windows/ThumbBarClickListener.kt | 2 +- .../windows/ThumbnailToolbarButton.kt | 2 +- .../launcher/windows/WindowsBadgeManager.kt | 6 +- .../windows/WindowsJumpListManager.kt | 6 +- .../launcher/windows/WindowsOverlayIcon.kt | 2 +- .../windows/WindowsThumbnailToolbar.kt | 2 +- .../windows/nucleus_launcher_windows.cpp | 42 +- .../reachability-metadata.json | 8 +- linux-hidpi/build.gradle.kts | 16 +- .../nucleus/hidpi/HiDpiLinuxBridge.kt | 4 +- .../nucleus/hidpi/LinuxHiDpi.kt | 2 +- .../main/native/linux/nucleus_hidpi_linux.c | 4 +- .../native-image.properties | 1 + .../native-image.properties | 1 - media-control/build.gradle.kts | 16 +- .../media/control/MediaControlEvent.kt | 2 +- .../media/control/MediaControlService.kt | 16 +- .../nucleus/media/control/MediaMetadata.kt | 2 +- .../media/control/MediaPlaybackStatus.kt | 2 +- .../media/control/linux/NativeLinuxBridge.kt | 4 +- .../media/control/macos/NativeMacOsBridge.kt | 4 +- .../control/windows/NativeWindowsBridge.kt | 4 +- .../linux/nucleus_media_control_linux.c | 16 +- .../macos/nucleus_media_control_macos.m | 14 +- .../windows/nucleus_media_control_windows.cpp | 14 +- .../reachability-metadata.json | 6 +- menu-macos/build.gradle.kts | 16 +- .../nucleus/menu/macos/NativeMenuBar.kt | 2 +- .../nucleus/menu/macos/NativeNsMenuBridge.kt | 4 +- .../nucleus/menu/macos/NsMenu.kt | 2 +- .../nucleus/menu/macos/NsMenuDelegate.kt | 2 +- .../nucleus/menu/macos/NsMenuItem.kt | 2 +- .../nucleus/menu/macos/NsMenuItemBadge.kt | 2 +- .../nucleus/menu/macos/NsMenuTypes.kt | 8 +- .../main/native/macos/nucleus_menu_macos.m | 4 +- .../reachability-metadata.json | 2 +- mkdocs.yml | 8 +- native-http-ktor/build.gradle.kts | 16 +- .../nativehttp/ktor/NativeSslKtorExtension.kt | 4 +- .../ktor/NativeSslKtorExtensionTest.kt | 2 +- native-http-okhttp/build.gradle.kts | 16 +- .../nativehttp/okhttp/NativeOkHttpClient.kt | 4 +- .../okhttp/NativeOkHttpClientTest.kt | 2 +- native-http/build.gradle.kts | 16 +- .../nucleus/nativehttp/NativeHttpClient.kt | 4 +- .../nativehttp/NativeHttpClientTest.kt | 2 +- native-ssl/build.gradle.kts | 16 +- .../nucleus/nativessl/Logger.kt | 4 +- .../nativessl/NativeCertificateProvider.kt | 10 +- .../nucleus/nativessl/NativeTrustManager.kt | 2 +- .../linux/LinuxCertificateProvider.kt | 4 +- .../nucleus/nativessl/mac/NativeSslBridge.kt | 6 +- .../windows/WindowsCertificateProvider.kt | 4 +- .../nativessl/windows/WindowsSslBridge.kt | 6 +- .../src/main/native/macos/NucleusSslBridge.m | 2 +- .../main/native/windows/NucleusSslBridge.c | 2 +- .../nucleus/nativessl/NativeSslTest.kt | 10 +- notification-common/build.gradle.kts | 16 +- .../notification/common/DismissReason.kt | 2 +- .../notification/common/Notification.kt | 2 +- .../notification/common/NotificationHandle.kt | 4 +- .../common/NotificationManager.kt | 6 +- .../notification/common/NotificationResult.kt | 2 +- .../common/internal/CallbackRegistry.kt | 2 +- .../common/internal/DispatcherFactory.kt | 2 +- .../common/internal/LinuxDispatcher.kt | 28 +- .../common/internal/MacOsDispatcher.kt | 38 +- .../common/internal/NotificationCallbacks.kt | 4 +- .../common/internal/PlatformDispatcher.kt | 14 + .../common/internal/WindowsDispatcher.kt | 22 +- .../common/internal/PlatformDispatcher.kt | 14 - notification-linux/build.gradle.kts | 16 +- .../nucleus/notification/linux/Enums.kt | 2 +- .../linux/LinuxNotificationCenter.kt | 2 +- .../linux/LinuxNotificationListener.kt | 2 +- .../nucleus/notification/linux/Model.kt | 4 +- .../linux/NativeLinuxNotificationBridge.kt | 4 +- .../notification/linux/NotificationSound.kt | 2 +- .../native/linux/nucleus_notification_linux.c | 14 +- notification-macos/build.gradle.kts | 16 +- .../nucleus/notification/Enums.kt | 2 +- .../nucleus/notification/Model.kt | 2 +- .../notification/NotificationCenter.kt | 6 +- .../NotificationCenterDelegate.kt | 2 +- .../macos/NativeMacNotificationBridge.kt | 34 +- .../native/macos/NucleusNotificationBridge.m | 30 +- .../reachability-metadata.json | 2 +- notification-windows/build.gradle.kts | 16 +- .../nucleus/notification/windows/Enums.kt | 2 +- .../nucleus/notification/windows/Model.kt | 2 +- .../NativeWindowsNotificationBridge.kt | 4 +- .../notification/windows/ToastContentDsl.kt | 2 +- .../windows/ToastNotificationListener.kt | 2 +- .../notification/windows/ToastXmlBuilder.kt | 2 +- .../windows/WindowsNotificationCenter.kt | 6 +- .../windows/nucleus_notification_windows.cpp | 18 +- .../reachability-metadata.json | 2 +- nucleus-application/build.gradle.kts | 16 +- .../application/AwtDialogNucleusWindow.kt | 2 +- .../nucleus/application/AwtNucleusWindow.kt | 2 +- .../nucleus/application/DecoratedDialog.kt | 10 +- .../nucleus/application/DecoratedWindow.kt | 10 +- .../nucleus/application/NucleusApplication.kt | 6 +- .../application/NucleusApplicationScope.kt | 8 +- .../nucleus/application/NucleusBackend.kt | 2 +- .../nucleus/application/NucleusWindow.kt | 8 +- .../nucleus/application/TaoNucleusWindow.kt | 6 +- .../internal/TaoDecoratedDialogAdapter.kt | 30 +- .../internal/TaoDecoratedWindowAdapter.kt | 28 +- .../application/internal/TaoLauncher.kt | 14 +- plugin-build/gradle.properties | 10 +- plugin-build/plugin/build.gradle.kts | 4 +- .../plugin/config/ktlint/baseline.xml | 82 +-- plugin-build/plugin/detekt-baseline-main.xml | 24 +- plugin-build/plugin/detekt-baseline.xml | 22 +- .../application/internal/JdkVersionProbe.java | 2 +- .../nucleus/ExperimentalNucleusLibrary.kt | 4 +- .../kdroidfilter/nucleus/NucleusExtension.kt | 8 +- .../kdroidfilter/nucleus/NucleusPlugin.kt | 12 +- .../application/dsl/AbstractDistributions.kt | 2 +- .../application/dsl/AppImageCategory.kt | 2 +- .../application/dsl/AppImageSettings.kt | 2 +- .../desktop/application/dsl/AppXSettings.kt | 2 +- .../application/dsl/CompressionLevel.kt | 2 +- .../desktop/application/dsl/DmgSettings.kt | 2 +- .../application/dsl/FileAssociation.kt | 2 +- .../application/dsl/FlatpakSettings.kt | 2 +- .../application/dsl/GraalvmSettings.kt | 8 +- .../desktop/application/dsl/JvmApplication.kt | 2 +- .../dsl/JvmApplicationBuildTypes.kt | 4 +- .../dsl/JvmApplicationDistributions.kt | 2 +- .../application/dsl/LaunchAgentSettings.kt | 2 +- .../dsl/MacOSNotarizationSettings.kt | 6 +- .../application/dsl/MacOSSigningSettings.kt | 8 +- .../application/dsl/NativeApplication.kt | 2 +- .../dsl/NativeApplicationDistributions.kt | 2 +- .../desktop/application/dsl/NsisSettings.kt | 2 +- .../application/dsl/PlatformSettings.kt | 2 +- .../application/dsl/ProguardSettings.kt | 6 +- .../desktop/application/dsl/PublishMode.kt | 2 +- .../application/dsl/PublishSettings.kt | 2 +- .../desktop/application/dsl/ReleaseChannel.kt | 2 +- .../desktop/application/dsl/ReleaseType.kt | 2 +- .../application/dsl/SigningAlgorithm.kt | 2 +- .../application/dsl/SnapCompression.kt | 2 +- .../application/dsl/SnapConfinement.kt | 2 +- .../desktop/application/dsl/SnapGrade.kt | 2 +- .../desktop/application/dsl/SnapPlug.kt | 2 +- .../desktop/application/dsl/SnapSettings.kt | 2 +- .../desktop/application/dsl/TargetFormat.kt | 6 +- .../application/dsl/WindowsSigningSettings.kt | 2 +- .../internal/AnalyzeStaticMetadataTask.kt | 12 +- .../internal/CleanNativeLibsTransform.kt | 18 +- .../internal/CleanupGraalvmMetadataTask.kt | 2 +- .../internal/DmgBackgroundPadding.kt | 2 +- .../application/internal/ExecutableType.kt | 4 +- .../internal/ExternalToolRunner.kt | 4 +- .../internal/FilterLibraryMetadataTask.kt | 2 +- .../application/internal/InfoPlistBuilder.kt | 4 +- .../internal/JvmApplicationContext.kt | 22 +- .../internal/JvmApplicationData.kt | 10 +- .../internal/JvmApplicationInternal.kt | 12 +- .../internal/JvmApplicationRuntimeFiles.kt | 2 +- .../internal/JvmRuntimeProperties.kt | 2 +- .../desktop/application/internal/JvmTasks.kt | 6 +- .../internal/LaunchAgentPlistGenerator.kt | 6 +- .../application/internal/MacAssetsTool.kt | 4 +- .../application/internal/MacOsMachOPatcher.kt | 2 +- .../desktop/application/internal/MacSigner.kt | 10 +- .../application/internal/MacSigningHelper.kt | 4 +- .../application/internal/MultiOutputStream.kt | 2 +- .../internal/NativeLibArchDetector.kt | 2 +- .../internal/NotarizationRequestInfo.kt | 2 +- .../internal/NucleusProjectProperties.kt | 8 +- .../internal/NucleusSystemProperties.kt | 2 +- .../internal/PatchedJavaLauncher.kt | 2 +- .../ResolveReachabilityMetadataTask.kt | 2 +- .../internal/RuntimeCompressionLevel.kt | 2 +- .../internal/UpdateYmlGenerator.kt | 2 +- .../internal/WindowsKitsLocator.kt | 2 +- .../internal/analyzer/AnalysisReport.kt | 2 +- .../internal/analyzer/AnalysisResult.kt | 2 +- .../internal/analyzer/BytecodeAnalyzer.kt | 24 +- .../internal/analyzer/OracleRepoParser.kt | 2 +- .../internal/analyzer/ResultComparator.kt | 2 +- .../detectors/ClassForNameDetector.kt | 4 +- .../analyzer/detectors/JarResourceDetector.kt | 4 +- .../detectors/KotlinSerializableDetector.kt | 6 +- .../detectors/MethodHandleDetector.kt | 6 +- .../detectors/NativeMethodDetector.kt | 6 +- .../analyzer/detectors/ProxyDetector.kt | 4 +- .../detectors/ReflectionApiDetector.kt | 6 +- .../detectors/ResourceAccessDetector.kt | 4 +- .../detectors/ResourceBundleDetector.kt | 4 +- .../detectors/ServiceLoaderDetector.kt | 8 +- .../application/internal/cliArgUtils.kt | 4 +- .../application/internal/configureDesktop.kt | 14 +- .../internal/configureGraalvmApplication.kt | 34 +- .../internal/configureJvmApplication.kt | 80 +-- .../internal/configureNativeApplication.kt | 22 +- .../application/internal/dirLayoutUtils.kt | 4 +- .../ElectronBuilderConfigGenerator.kt | 30 +- .../ElectronBuilderToolManager.kt | 2 +- .../electronbuilder/NodeJsDetector.kt | 6 +- .../internal/files/FileCopyingProcessor.kt | 2 +- .../files/MacJarSignFileCopyingProcessor.kt | 4 +- .../files/SimpleFileCopyingProcessor.kt | 2 +- .../application/internal/files/fileUtils.kt | 8 +- .../internal/mergeNativeImageConfig.kt | 2 +- .../application/internal/packageVersions.kt | 8 +- .../internal/resolveMetadataRepository.kt | 2 +- .../ValidatedMacOSNotarizationSettings.kt | 6 +- .../ValidatedMacOSSigningSettings.kt | 10 +- .../internal/validation/validateBundleID.kt | 2 +- .../validation/validatePackageVersions.kt | 12 +- .../AbstractCheckNativeDistributionRuntime.kt | 24 +- .../AbstractElectronBuilderPackageTask.kt | 62 +- .../tasks/AbstractExtractNativeLibsTask.kt | 10 +- .../tasks/AbstractGenerateAotCacheTask.kt | 8 +- .../AbstractGenerateAppPropertiesTask.kt | 2 +- .../application/tasks/AbstractJLinkTask.kt | 14 +- .../application/tasks/AbstractJPackageTask.kt | 92 +-- .../tasks/AbstractJvmToolOperationTask.kt | 8 +- ...ctNativeMacApplicationPackageAppDirTask.kt | 16 +- ...tractNativeMacApplicationPackageDmgTask.kt | 16 +- ...AbstractNativeMacApplicationPackageTask.kt | 6 +- .../tasks/AbstractNotarizationTask.kt | 24 +- .../tasks/AbstractPatchCaCertificatesTask.kt | 6 +- .../tasks/AbstractPatchMacJvmTask.kt | 4 +- .../application/tasks/AbstractProguardTask.kt | 12 +- .../application/tasks/AbstractRunAppXTask.kt | 4 +- .../tasks/AbstractRunDistributableTask.kt | 12 +- .../AbstractStripNativeLibsFromJarsTask.kt | 8 +- .../tasks/AbstractSuggestModulesTask.kt | 14 +- .../desktop/tasks/AbstractJarsFlattenTask.kt | 10 +- .../desktop/tasks/AbstractNucleusTask.kt | 8 +- ...ctUnpackDefaultApplicationResourcesTask.kt | 8 +- .../internal/checkExperimentalTargets.kt | 4 +- .../ComposeCompilerArtifactProvider.kt | 4 +- .../nucleus/internal/IdeaImportTask.kt | 2 +- .../kdroidfilter/nucleus/internal/Version.kt | 2 +- .../nucleus/internal/constants.kt | 4 +- .../nucleus/internal/projectExtensions.kt | 4 +- .../nucleus/internal/requiredDslProperty.kt | 2 +- .../nucleus/internal/utils/diagnosticUtils.kt | 2 +- .../nucleus/internal/utils/fileUtils.kt | 2 +- .../nucleus/internal/utils/gradleUtils.kt | 4 +- .../nucleus/internal/utils/osUtils.kt | 6 +- .../nucleus/internal/utils/providerUtils.kt | 2 +- .../nucleus/internal/utils/stringUtils.kt | 2 +- .../nucleus/internal/utils/taskUtils.kt | 2 +- .../default-compose-desktop-rules.pro | 60 +- .../library-metadata/compose-mediaplayer.json | 6 +- .../library-metadata/compose-webview-wry.json | 116 ++-- .../graalvm/library-metadata/knotify.json | 26 +- .../library-metadata/platformtools.json | 4 +- .../internal/DmgBackgroundPaddingTest.kt | 2 +- .../BytecodeAnalyzerIntegrationTest.kt | 2 +- .../analyzer/ClassForNameDetectorTest.kt | 6 +- .../analyzer/NativeMethodDetectorTest.kt | 4 +- .../analyzer/OracleRepoCoverageTest.kt | 2 +- .../analyzer/ReflectionApiDetectorTest.kt | 2 +- .../internal/analyzer/ResourceDetectorTest.kt | 2 +- .../analyzer/ServiceLoaderDetectorTest.kt | 4 +- .../internal/analyzer/ZayitAnalyzerTest.kt | 2 +- sample-cmp/build.gradle.kts | 2 +- sample-jni/build.gradle.kts | 6 +- .../nucleusframework}/samplejni/ActionsTab.kt | 4 +- .../nucleusframework}/samplejni/Main.kt | 34 +- .../nucleusframework}/sampleshared/A11yTab.kt | 2 +- .../nucleusframework}/sampleshared/Common.kt | 2 +- .../sampleshared/ComplexTab.kt | 2 +- .../sampleshared/EventsTab.kt | 2 +- .../sampleshared/FancyDemo.kt | 2 +- .../sampleshared/ScrollTab.kt | 2 +- .../nucleusframework}/sampleshared/ZoomTab.kt | 2 +- sample-tao/build.gradle.kts | 10 +- .../nucleusframework}/sampletao/ActionsTab.kt | 4 +- .../nucleusframework}/sampletao/Main.kt | 26 +- .../sampletao/SampleSwiftUIBridge.kt | 4 +- .../sampletao/SampleWebViewBridge.kt | 4 +- .../sampletao/SampleWebViewController.kt | 4 +- .../sampletao/SampleWebViewLinuxBridge.kt | 4 +- .../sampletao/SampleWebViewWindowsBridge.kt | 4 +- .../nucleusframework}/sampletao/SwiftUITab.kt | 10 +- .../nucleusframework}/sampletao/WebViewTab.kt | 12 +- .../src/main/native/linux/sample_webview.c | 20 +- .../src/main/native/macos/sample_webview.m | 20 +- .../main/native/windows/sample_webview.cpp | 24 +- scheduler-demo/build.gradle.kts | 12 +- .../src/main/kotlin/schedulerdemo/Main.kt | 10 +- .../kotlin/schedulerdemo/SchedulerDemoView.kt | 8 +- .../kotlin/schedulerdemo/task/SampleTasks.kt | 10 +- scheduler-testing/build.gradle.kts | 16 +- .../testing/TestConstraintChecker.kt | 16 +- .../testing/TestDesktopTaskScheduler.kt | 36 +- .../scheduler/testing/TestTaskRunner.kt | 12 +- .../scheduler/testing/SchedulerTestingTest.kt | 30 +- scheduler/build.gradle.kts | 16 +- .../nucleus/scheduler/Constraints.kt | 2 +- .../nucleus/scheduler/CronExpression.kt | 2 +- .../nucleus/scheduler/DesktopBootReceiver.kt | 20 +- .../nucleus/scheduler/DesktopTask.kt | 2 +- .../nucleus/scheduler/DesktopTaskScheduler.kt | 16 +- .../nucleus/scheduler/ExistingTaskPolicy.kt | 2 +- .../nucleus/scheduler/InternalSchedulerApi.kt | 2 +- .../nucleus/scheduler/LastTaskResult.kt | 2 +- .../nucleus/scheduler/RetryPolicy.kt | 2 +- .../nucleus/scheduler/TaskContext.kt | 2 +- .../nucleus/scheduler/TaskData.kt | 2 +- .../nucleus/scheduler/TaskId.kt | 2 +- .../nucleus/scheduler/TaskInfo.kt | 2 +- .../nucleus/scheduler/TaskRegistry.kt | 2 +- .../nucleus/scheduler/TaskRequest.kt | 2 +- .../nucleus/scheduler/TaskResult.kt | 2 +- .../scheduler/internal/ConstraintChecker.kt | 6 +- .../internal/LinuxSystemdScheduler.kt | 18 +- .../internal/LinuxSystemdSchedulerJni.kt | 4 +- .../internal/MacOSLaunchdScheduler.kt | 22 +- .../internal/MacOSLaunchdSchedulerJni.kt | 4 +- .../scheduler/internal/NoopScheduler.kt | 10 +- .../scheduler/internal/PlatformScheduler.kt | 10 +- .../internal/SystemInfoConstraintChecker.kt | 12 +- .../scheduler/internal/TaskMetadataStore.kt | 16 +- .../scheduler/internal/TaskWrapperScript.kt | 6 +- .../internal/WindowsTaskScheduler.kt | 18 +- .../internal/WindowsTaskSchedulerJni.kt | 4 +- .../native/linux/nucleus_scheduler_linux.c | 2 +- .../src/main/native/macos/nucleus_scheduler.m | 2 +- .../main/native/windows/nucleus_scheduler.cpp | 4 +- .../reachability-metadata.json | 6 +- .../internal/AppendCalendarIntervalTest.kt | 2 +- .../scheduler/internal/BuildTimerUnitTest.kt | 8 +- .../internal/ConvertCronToSchtasksTest.kt | 2 +- scripts/generate-llms-docs.py | 8 +- service-management-demo/build.gradle.kts | 8 +- .../main/kotlin/servicemanagementdemo/Main.kt | 8 +- service-management-macos/build.gradle.kts | 16 +- .../nucleus/servicemanagement/AppService.kt | 2 +- .../servicemanagement/AppServiceException.kt | 2 +- .../servicemanagement/AppServiceManager.kt | 4 +- .../servicemanagement/AppServiceStatus.kt | 2 +- .../macos/NativeMacServiceManagementBridge.kt | 4 +- .../macos/NucleusServiceManagementBridge.m | 12 +- .../reachability-metadata.json | 2 +- sf-symbols/build.gradle.kts | 16 +- .../nucleus/sfsymbols/SFSymbol.kt | 2 +- .../nucleus/sfsymbols/SFSymbolArrows.kt | 2 +- .../nucleus/sfsymbols/SFSymbolCommerce.kt | 2 +- .../sfsymbols/SFSymbolCommunication.kt | 2 +- .../nucleus/sfsymbols/SFSymbolConnectivity.kt | 2 +- .../nucleus/sfsymbols/SFSymbolDevices.kt | 2 +- .../nucleus/sfsymbols/SFSymbolGeneral.kt | 2 +- .../nucleus/sfsymbols/SFSymbolHealth.kt | 2 +- .../nucleus/sfsymbols/SFSymbolHuman.kt | 2 +- .../nucleus/sfsymbols/SFSymbolLetters.kt | 2 +- .../nucleus/sfsymbols/SFSymbolLocation.kt | 2 +- .../nucleus/sfsymbols/SFSymbolMedia.kt | 2 +- .../nucleus/sfsymbols/SFSymbolNumbers.kt | 2 +- .../sfsymbols/SFSymbolObjectsAndTools.kt | 2 +- .../nucleus/sfsymbols/SFSymbolPower.kt | 2 +- .../nucleus/sfsymbols/SFSymbolSecurity.kt | 2 +- .../nucleus/sfsymbols/SFSymbolShapes.kt | 2 +- .../nucleus/sfsymbols/SFSymbolStatus.kt | 2 +- .../sfsymbols/SFSymbolTextFormatting.kt | 2 +- .../nucleus/sfsymbols/SFSymbolTime.kt | 2 +- .../sfsymbols/SFSymbolTransportation.kt | 2 +- .../nucleus/sfsymbols/SFSymbolWeather.kt | 2 +- system-color/build.gradle.kts | 16 +- .../nucleus/systemcolor/Logger.kt | 4 +- .../nucleus/systemcolor/SystemColor.kt | 22 +- .../systemcolor/linux/LinuxSystemColor.kt | 4 +- .../linux/NativeLinuxSystemColorBridge.kt | 6 +- .../nucleus/systemcolor/mac/MacSystemColor.kt | 4 +- .../mac/NativeMacSystemColorBridge.kt | 6 +- .../windows/NativeWindowsSystemColorBridge.kt | 6 +- .../systemcolor/windows/WindowsSystemColor.kt | 4 +- .../native/linux/nucleus_systemcolor_linux.c | 14 +- .../native/macos/NucleusSystemColorBridge.m | 14 +- .../windows/nucleus_systemcolor_windows.c | 14 +- .../reachability-metadata.json | 6 +- system-info-demo/build.gradle.kts | 16 +- .../src/main/kotlin/systeminfodemo/Main.kt | 4 +- .../kotlin/systeminfodemo/ui/AppContent.kt | 8 +- .../main/kotlin/systeminfodemo/ui/Theme.kt | 4 +- .../systeminfodemo/ui/panels/NetworkPanel.kt | 2 +- .../systeminfodemo/ui/panels/OverviewPanel.kt | 2 +- .../viewmodel/SystemInfoViewModel.kt | 28 +- system-info/build.gradle.kts | 16 +- .../nucleus/systeminfo/PlatformSystemInfo.kt | 50 ++ .../nucleus/systeminfo/SystemInfo.kt | 38 +- .../systeminfo/linux/LinuxSystemInfo.kt | 36 +- .../linux/NativeLinuxSystemInfoBridge.kt | 4 +- .../systeminfo/macos/MacOsSystemInfo.kt | 36 +- .../macos/NativeMacOsSystemInfoBridge.kt | 4 +- .../nucleus/systeminfo/model/BatteryInfo.kt | 2 +- .../nucleus/systeminfo/model/BatteryState.kt | 2 +- .../nucleus/systeminfo/model/ComponentInfo.kt | 2 +- .../systeminfo/model/ConnectivityInfo.kt | 2 +- .../nucleus/systeminfo/model/CpuGlobalInfo.kt | 2 +- .../nucleus/systeminfo/model/CpuInfo.kt | 2 +- .../nucleus/systeminfo/model/DiskInfo.kt | 2 +- .../nucleus/systeminfo/model/GpuInfo.kt | 2 +- .../nucleus/systeminfo/model/MemoryInfo.kt | 2 +- .../systeminfo/model/MotherboardInfo.kt | 2 +- .../systeminfo/model/NetworkInterfaceInfo.kt | 2 +- .../nucleus/systeminfo/model/OsInfo.kt | 2 +- .../nucleus/systeminfo/model/ProcessInfo.kt | 2 +- .../nucleus/systeminfo/model/ProductInfo.kt | 2 +- .../nucleus/systeminfo/model/UserInfo.kt | 2 +- .../windows/NativeWindowsSystemInfoBridge.kt | 4 +- .../systeminfo/windows/WindowsSystemInfo.kt | 36 +- .../nucleus/systeminfo/PlatformSystemInfo.kt | 50 -- .../linux/nucleus_system_info_battery.c | 30 +- .../native/linux/nucleus_system_info_common.h | 2 +- .../linux/nucleus_system_info_component.c | 10 +- .../linux/nucleus_system_info_connectivity.c | 4 +- .../native/linux/nucleus_system_info_cpu.c | 16 +- .../native/linux/nucleus_system_info_disk.c | 18 +- .../native/linux/nucleus_system_info_gpu.c | 30 +- .../linux/nucleus_system_info_hardware.c | 24 +- .../native/linux/nucleus_system_info_idle.c | 2 +- .../native/linux/nucleus_system_info_memory.c | 14 +- .../linux/nucleus_system_info_network.c | 8 +- .../native/linux/nucleus_system_info_os.c | 18 +- .../linux/nucleus_system_info_process.c | 32 +- .../native/linux/nucleus_system_info_user.c | 10 +- .../macos/nucleus_system_info_battery.c | 30 +- .../native/macos/nucleus_system_info_common.h | 2 +- .../macos/nucleus_system_info_component.c | 10 +- .../macos/nucleus_system_info_connectivity.c | 4 +- .../native/macos/nucleus_system_info_cpu.c | 16 +- .../native/macos/nucleus_system_info_disk.c | 18 +- .../native/macos/nucleus_system_info_gpu.c | 30 +- .../macos/nucleus_system_info_hardware.c | 24 +- .../native/macos/nucleus_system_info_idle.c | 2 +- .../native/macos/nucleus_system_info_memory.c | 14 +- .../macos/nucleus_system_info_network.c | 8 +- .../native/macos/nucleus_system_info_os.c | 18 +- .../macos/nucleus_system_info_process.c | 32 +- .../native/macos/nucleus_system_info_user.c | 10 +- .../windows/nucleus_system_info_battery.c | 30 +- .../windows/nucleus_system_info_common.h | 2 +- .../windows/nucleus_system_info_component.c | 10 +- .../nucleus_system_info_connectivity.c | 4 +- .../native/windows/nucleus_system_info_cpu.c | 16 +- .../native/windows/nucleus_system_info_disk.c | 18 +- .../native/windows/nucleus_system_info_gpu.c | 30 +- .../windows/nucleus_system_info_hardware.c | 24 +- .../native/windows/nucleus_system_info_idle.c | 2 +- .../windows/nucleus_system_info_memory.c | 14 +- .../windows/nucleus_system_info_network.c | 20 +- .../native/windows/nucleus_system_info_os.c | 18 +- .../windows/nucleus_system_info_process.c | 52 +- .../native/windows/nucleus_system_info_user.c | 10 +- .../reachability-metadata.json | 19 + .../reachability-metadata.json | 19 - .../nucleus/systeminfo/SystemInfoSmokeTest.kt | 2 +- .../nucleus/systeminfo/SystemInfoTest.kt | 2 +- taskbar-progress-tao/build.gradle.kts | 16 +- .../tao/NucleusTaskbarProgress.kt | 8 +- .../taskbarprogress/tao/TaoTaskbarProgress.kt | 10 +- taskbar-progress/build.gradle.kts | 16 +- .../taskbarprogress/TaskbarProgress.kt | 12 +- .../linux/LinuxDesktopFileDetector.kt | 4 +- .../linux/NativeLinuxTaskbarBridge.kt | 6 +- .../macos/NativeMacOsTaskbarBridge.kt | 4 +- .../windows/NativeWindowsTaskbarBridge.kt | 4 +- .../macos/nucleus_taskbar_progress_macos.m | 8 +- .../native/windows/nucleus_taskbar_progress.c | 12 +- tmp/souvlaki | 1 - updater-runtime/build.gradle.kts | 16 +- .../nucleus/updater/DownloadProgress.kt | 2 +- .../nucleus/updater/NucleusUpdater.kt | 30 +- .../nucleus/updater/UpdateEvent.kt | 2 +- .../nucleus/updater/UpdateInfo.kt | 2 +- .../nucleus/updater/UpdateLevel.kt | 2 +- .../nucleus/updater/UpdateResult.kt | 4 +- .../nucleus/updater/UpdaterConfig.kt | 8 +- .../nucleus/updater/Version.kt | 2 +- .../updater/exception/UpdateException.kt | 2 +- .../updater/internal/ChecksumVerifier.kt | 2 +- .../nucleus/updater/internal/FileSelector.kt | 4 +- .../nucleus/updater/internal/PlatformInfo.kt | 4 +- .../updater/internal/PlatformInstaller.kt | 4 +- .../nucleus/updater/internal/UpdateMarker.kt | 4 +- .../nucleus/updater/internal/YamlParser.kt | 4 +- .../updater/provider/GenericProvider.kt | 4 +- .../updater/provider/GitHubProvider.kt | 4 +- .../updater/provider/UpdateProvider.kt | 4 +- .../nucleus/updater/ChecksumVerifierTest.kt | 4 +- .../nucleus/updater/FakeUpdateProvider.kt | 6 +- .../nucleus/updater/FileSelectorTest.kt | 10 +- .../nucleus/updater/UpdateEventTest.kt | 4 +- .../nucleus/updater/UpdateMarkerTest.kt | 4 +- .../nucleus/updater/VersionTest.kt | 2 +- .../nucleus/updater/YamlParserTest.kt | 6 +- 958 files changed, 4846 insertions(+), 4847 deletions(-) rename aot-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/aot/runtime/AotRuntime.kt (94%) create mode 100644 aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntime.kt delete mode 100644 aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntime.kt rename aot-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/aot/runtime/AotRuntimeTest.kt (96%) rename aot-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/aot/runtime/ExecutableRuntimeTest.kt (98%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/AutoLaunch.kt (94%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/AutoLaunchBackend.kt (96%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/AutoLaunchConfig.kt (90%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/AutoLaunchState.kt (97%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/linux/FlatpakPortalBackend.kt (93%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/linux/LinuxAutoLaunch.kt (83%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt (94%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/linux/SystemdUserBackend.kt (94%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt (90%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt (89%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt (93%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/windows/Win32RegistryBackend.kt (88%) rename autolaunch/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/windows/WindowsAutoLaunch.kt (81%) create mode 100644 autolaunch/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.autolaunch/reachability-metadata.json delete mode 100644 autolaunch/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.autolaunch/reachability-metadata.json rename autolaunch/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/autolaunch/Win32RegistryBackendTest.kt (91%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/DeepLinkHandler.kt (96%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/ExecutableRuntime.kt (98%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/LinuxDesktopEnvironment.kt (94%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/NativeLibraryLoader.kt (99%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/NucleusApp.kt (97%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/Platform.kt (93%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/SingleInstanceManager.kt (97%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/tools/AppIdProvider.kt (97%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt (97%) rename core-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/tools/Logger.kt (81%) rename core-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/ExecutableRuntimeTest.kt (98%) rename core-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/NucleusAppTest.kt (97%) rename core-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/SingleInstanceHolder.kt (97%) rename core-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt (98%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/IsSystemInDarkMode.kt (64%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/Logger.kt (79%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt (94%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt (83%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt (93%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt (83%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt (83%) rename darkmode-detector/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt (93%) rename darkmode-detector/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.darkmode-detector/reachability-metadata.json (74%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/AwtDecoratedWindow.kt (97%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/AwtTitleBar.kt (95%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedDialogCore.kt (96%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBarImpl.kt (87%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/WindowControlArea.kt (95%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/WindowsWindowControlArea.kt (97%) rename decorated-window-awt/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/internal/MinimumSizeSupport.kt (98%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/ControlButtonsDirection.kt (97%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedDialogTypes.kt (97%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedWindowCore.kt (99%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/NativeLayoutDirectionBridge.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/NucleusDecoratedWindowTheme.kt (84%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBarCore.kt (98%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBarLinuxCommon.kt (79%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBarModifiers.kt (96%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/Close.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/CloseDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/CloseHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/CloseHoverDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/CloseInactive.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/ClosePressed.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/ClosePressedDark.kt (91%) create mode 100644 decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/Maximize.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizeDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizeHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizeInactive.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizePressed.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/Minimize.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizeDark.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizeHover.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizeInactive.kt (86%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt (86%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizePressed.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/Restore.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestoreDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestoreHover.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestoreInactive.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestorePressed.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/gnome/RestorePressedDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/Close.kt (87%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/CloseDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/CloseHover.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/CloseHoverFocused.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/CloseInactive.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/CloseInactiveDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/ClosePressed.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/ClosePressedFocused.kt (91%) create mode 100644 decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/Maximize.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizeDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizeHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizeInactive.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizePressed.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MaximizePressedDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/Minimize.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizeDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizeHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizeInactive.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizePressed.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/MinimizePressedDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/Restore.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestoreDark.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestoreHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestoreHoverDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestoreInactive.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestorePressed.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/linux/kde/RestorePressedDark.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/Close.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseDark.kt (89%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseFullscreen.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseFullscreenDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseFullscreenInactive.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseHover.kt (91%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseInactive.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/CloseInactiveDark.kt (90%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/Maximize.kt (87%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MaximizeDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MaximizeInactive.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MaximizeInactiveDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/Minimize.kt (87%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MinimizeDark.kt (87%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MinimizeInactive.kt (87%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/MinimizeInactiveDark.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/Restore.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/RestoreDark.kt (92%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/RestoreInactive.kt (93%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/icons/windows/RestoreInactiveDark.kt (93%) create mode 100644 decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/WindowsControlButtonIcons.kt rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/internal/ColorUtils.kt (86%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/internal/InsideBorderModifier.kt (95%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/styling/DecoratedWindowStyling.kt (83%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/styling/TitleBarStyling.kt (88%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/linux/LinuxButtonLayout.kt (96%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt (93%) rename decorated-window-core/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt (61%) delete mode 100644 decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt delete mode 100644 decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt delete mode 100644 decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/WindowsControlButtonIcons.kt rename decorated-window-core/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.decorated-window-core/reachability-metadata.json (86%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedDialog.kt (96%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedWindow.kt (87%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.Linux.kt (91%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.MacOS.kt (85%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.Windows.kt (85%) rename {decorated-window-jni/src/main/kotlin/io/github/kdroidfilter => decorated-window-jbr/src/main/kotlin/dev/nucleusframework}/nucleus/window/DialogTitleBar.kt (87%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.Linux.kt (95%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.MacOS.kt (88%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.Windows.kt (85%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.kt (88%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/ClientRegionHelper.kt (94%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/macos/MacUtil.kt (97%) rename decorated-window-jbr/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/macos/NativeMacBridge.kt (74%) rename decorated-window-jewel/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/jewel/JewelColorMapping.kt (76%) rename decorated-window-jewel/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/jewel/JewelDecoratedDialog.kt (85%) rename decorated-window-jewel/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/jewel/JewelDecoratedWindow.kt (87%) rename decorated-window-jewel/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/jewel/JewelDialogTitleBar.kt (65%) rename decorated-window-jewel/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/jewel/JewelTitleBar.kt (67%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedDialog.kt (95%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DecoratedWindow.kt (97%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.Linux.kt (95%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.MacOS.kt (85%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.Windows.kt (85%) rename {decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter => decorated-window-jni/src/main/kotlin/dev/nucleusframework}/nucleus/window/DialogTitleBar.kt (87%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.Linux.kt (97%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.MacOS.kt (97%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.Windows.kt (96%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.kt (90%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/linux/JniLinuxWindowBridge.kt (89%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/macos/JniMacTitleBarBridge.kt (97%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/macos/JniMacWindowUtil.kt (98%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt (96%) rename decorated-window-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/utils/windows/JniWindowsWindowUtil.kt (88%) rename decorated-window-jni/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.decorated-window-jni/reachability-metadata.json (82%) rename decorated-window-material2/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material2/MaterialColorMapping.kt (74%) rename decorated-window-material2/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material2/MaterialDecoratedDialog.kt (85%) rename decorated-window-material2/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material2/MaterialDecoratedWindow.kt (86%) rename decorated-window-material2/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material2/MaterialDialogTitleBar.kt (64%) rename decorated-window-material2/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material2/MaterialTitleBar.kt (72%) rename decorated-window-material3/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material/MaterialColorMapping.kt (75%) rename decorated-window-material3/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material/MaterialDecoratedDialog.kt (87%) rename decorated-window-material3/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material/MaterialDecoratedWindow.kt (88%) rename decorated-window-material3/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material/MaterialDialogTitleBar.kt (64%) rename decorated-window-material3/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/material/MaterialTitleBar.kt (72%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/DialogTitleBar.kt (89%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/TitleBar.kt (93%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/ApplicationScope.kt (91%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/DecoratedDialog.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/DecoratedWindow.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/DecoratedWindowComposable.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/FullscreenTitleBarHolder.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/MacOSStyle.kt (85%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeMetalBridge.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt (89%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoBridge.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoEglBridge.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoGlBridge.kt (93%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoLinuxDndBridge.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoMacOsDndBridge.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt (95%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoWindowsDndBridge.kt (95%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt (93%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeView.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeViewOverlayController.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NativeViewOverlayController.windows.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/NucleusPlatformView.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/OverlayInteractionModifier.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/PainterToRgba.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/PopupNativeBridge.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/PopupNativeBridge.windows.kt (95%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoAccessibility.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoApplication.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoApplicationCompose.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoCursorMapping.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDecoratedDialogScope.kt (75%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDecoratedWindowScope.kt (82%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDeepLinkBridge.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDnDDiagnostics.kt (93%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDragAndDropManager.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoDragAndDropPayload.kt (91%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoFilesTransferable.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoLinuxUriHandler.kt (95%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoMainDispatcher.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoSemanticsObserver.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoSyntheticAwtDnd.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/TaoWindow.kt (99%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/UndecoratedWindowBorder.kt (82%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/WindowControlsLinux.kt (93%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/WindowControlsWindows.kt (82%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/GlSceneRenderer.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/MetalFrame.kt (92%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/MetalSceneRenderer.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoComposeSceneContext.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt (95%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoComposeSceneHost.kt (92%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt (90%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt (86%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoInteropTransaction.kt (96%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoLinuxOverlayController.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoNativeWireFormat.kt (94%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoPopupHost.kt (97%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoPopupHostWindows.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoPopupSceneLayer.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt (98%) rename decorated-window-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/window/tao/render/TaoSyntheticKey.kt (97%) rename decorated-window-tao/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.decorated-window-tao/reachability-metadata.json (77%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/EnergyManager.kt (94%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/PlatformEnergyManager.kt (93%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/linux/LinuxEnergyManager.kt (91%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt (87%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/macos/MacOsEnergyManager.kt (91%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt (87%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt (87%) rename energy-manager/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/windows/WindowsEnergyManager.kt (91%) rename energy-manager/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/energymanager/EnergyManagerTest.kt (99%) rename freedesktop-icons/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/freedesktop/icons/FreedesktopIcon.kt (99%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/GlobalHotKeyManager.kt (96%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/HotKeyListener.kt (87%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/HotKeyModifier.kt (93%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/MediaKey.kt (89%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt (86%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt (90%) rename global-hotkey/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt (90%) rename global-hotkey/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.global-hotkey/reachability-metadata.json (71%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/FcFontManagerSubstitution.java (96%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/FontCreateFontSubstitution.java (96%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/IsLinux.java (86%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/IsWindows.java (86%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/IsWindowsOrLinux.java (88%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/font/Win32FontManagerSubstitution.java (95%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/wmclass/AppNameResolver.java (98%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/wmclass/IsLinux.java (85%) rename graalvm-runtime/src/main/java/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java (94%) rename graalvm-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/graalvm/GraalVmInitializer.kt (96%) rename graalvm-runtime/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.graalvm-runtime/native-image.properties (100%) rename launcher-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/linux/DbusmenuItem.kt (94%) rename launcher-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/linux/LauncherProperties.kt (94%) rename launcher-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/linux/LinuxLauncherEntry.kt (98%) rename launcher-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/linux/LinuxQuicklist.kt (98%) rename launcher-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt (94%) rename launcher-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/macos/DockMenuItem.kt (94%) rename launcher-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/macos/DockMenuListener.kt (78%) rename launcher-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/macos/MacOsDockMenu.kt (97%) rename launcher-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt (85%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/BadgeGlyph.kt (92%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/JumpListCategory.kt (87%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/JumpListItem.kt (95%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/KnownCategory.kt (87%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt (83%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt (91%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt (92%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/StockIcon.kt (98%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/TaskbarIconSource.kt (93%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/ThumbBarClickListener.kt (83%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/ThumbnailToolbarButton.kt (97%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/WindowsBadgeManager.kt (96%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/WindowsJumpListManager.kt (97%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/WindowsOverlayIcon.kt (98%) rename launcher-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/launcher/windows/WindowsThumbnailToolbar.kt (99%) rename launcher-windows/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.launcher-windows/reachability-metadata.json (54%) rename linux-hidpi/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/hidpi/HiDpiLinuxBridge.kt (88%) rename linux-hidpi/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/hidpi/LinuxHiDpi.kt (98%) create mode 100644 linux-hidpi/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.linux-hidpi/native-image.properties delete mode 100644 linux-hidpi/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.linux-hidpi/native-image.properties rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/MediaControlEvent.kt (96%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/MediaControlService.kt (95%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/MediaMetadata.kt (92%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/MediaPlaybackStatus.kt (89%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/linux/NativeLinuxBridge.kt (92%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/macos/NativeMacOsBridge.kt (92%) rename media-control/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/media/control/windows/NativeWindowsBridge.kt (92%) rename media-control/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.media-control/reachability-metadata.json (89%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NativeMenuBar.kt (99%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NativeNsMenuBridge.kt (98%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NsMenu.kt (99%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NsMenuDelegate.kt (95%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NsMenuItem.kt (99%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NsMenuItemBadge.kt (96%) rename menu-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/menu/macos/NsMenuTypes.kt (94%) rename menu-macos/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.menu-macos/reachability-metadata.json (91%) rename native-http-ktor/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt (93%) rename native-http-ktor/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt (95%) rename native-http-okhttp/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt (73%) rename native-http-okhttp/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt (90%) rename native-http/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/NativeHttpClient.kt (82%) rename native-http/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativehttp/NativeHttpClientTest.kt (92%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/Logger.kt (80%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/NativeCertificateProvider.kt (77%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/NativeTrustManager.kt (97%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/linux/LinuxCertificateProvider.kt (97%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/mac/NativeSslBridge.kt (84%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/windows/WindowsCertificateProvider.kt (96%) rename native-ssl/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/windows/WindowsSslBridge.kt (83%) rename native-ssl/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/nativessl/NativeSslTest.kt (97%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/DismissReason.kt (88%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/Notification.kt (98%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/NotificationHandle.kt (75%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/NotificationManager.kt (87%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/NotificationResult.kt (85%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/CallbackRegistry.kt (87%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/DispatcherFactory.kt (92%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/LinuxDispatcher.kt (82%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/MacOsDispatcher.kt (85%) rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/NotificationCallbacks.kt (60%) create mode 100644 notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/PlatformDispatcher.kt rename notification-common/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/common/internal/WindowsDispatcher.kt (89%) delete mode 100644 notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/PlatformDispatcher.kt rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/Enums.kt (94%) rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/LinuxNotificationCenter.kt (98%) rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/LinuxNotificationListener.kt (96%) rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/Model.kt (97%) rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/NativeLinuxNotificationBridge.kt (95%) rename notification-linux/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/linux/NotificationSound.kt (99%) rename notification-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/Enums.kt (98%) rename notification-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/Model.kt (99%) rename notification-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/NotificationCenter.kt (98%) rename notification-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/NotificationCenterDelegate.kt (95%) rename notification-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/macos/NativeMacNotificationBridge.kt (92%) rename notification-macos/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.notification-macos/reachability-metadata.json (96%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/Enums.kt (98%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/Model.kt (99%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/NativeWindowsNotificationBridge.kt (98%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/ToastContentDsl.kt (99%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/ToastNotificationListener.kt (95%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/ToastXmlBuilder.kt (99%) rename notification-windows/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/notification/windows/WindowsNotificationCenter.kt (98%) rename notification-windows/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.notification-windows/reachability-metadata.json (91%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/AwtDialogNucleusWindow.kt (98%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/AwtNucleusWindow.kt (99%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/DecoratedDialog.kt (89%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/DecoratedWindow.kt (90%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/NucleusApplication.kt (92%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/NucleusApplicationScope.kt (89%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/NucleusBackend.kt (95%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/NucleusWindow.kt (91%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/TaoNucleusWindow.kt (95%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/internal/TaoDecoratedDialogAdapter.kt (75%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/internal/TaoDecoratedWindowAdapter.kt (78%) rename nucleus-application/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/application/internal/TaoLauncher.kt (70%) rename sample-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/samplejni/ActionsTab.kt (97%) rename sample-jni/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/samplejni/Main.kt (88%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/A11yTab.kt (99%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/Common.kt (98%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/ComplexTab.kt (99%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/EventsTab.kt (98%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/FancyDemo.kt (99%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/ScrollTab.kt (98%) rename sample-shared/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampleshared/ZoomTab.kt (99%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/ActionsTab.kt (99%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/Main.kt (94%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SampleSwiftUIBridge.kt (97%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SampleWebViewBridge.kt (88%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SampleWebViewController.kt (97%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SampleWebViewLinuxBridge.kt (91%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SampleWebViewWindowsBridge.kt (96%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/SwiftUITab.kt (95%) rename sample-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/sampletao/WebViewTab.kt (97%) rename scheduler-testing/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/testing/TestConstraintChecker.kt (87%) rename scheduler-testing/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt (92%) rename scheduler-testing/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/testing/TestTaskRunner.kt (79%) rename scheduler-testing/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/testing/SchedulerTestingTest.kt (95%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/Constraints.kt (98%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/CronExpression.kt (97%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/DesktopBootReceiver.kt (91%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/DesktopTask.kt (93%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/DesktopTaskScheduler.kt (86%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/ExistingTaskPolicy.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/InternalSchedulerApi.kt (92%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/LastTaskResult.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/RetryPolicy.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskContext.kt (95%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskData.kt (98%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskId.kt (94%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskInfo.kt (95%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskRegistry.kt (97%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskRequest.kt (99%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/TaskResult.kt (93%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/ConstraintChecker.kt (79%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/LinuxSystemdScheduler.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt (92%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt (97%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt (95%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/NoopScheduler.kt (64%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/PlatformScheduler.kt (75%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt (89%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/TaskMetadataStore.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/TaskWrapperScript.kt (97%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/WindowsTaskScheduler.kt (96%) rename scheduler/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt (96%) rename scheduler/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.scheduler/reachability-metadata.json (94%) rename scheduler/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt (97%) rename scheduler/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/BuildTimerUnitTest.kt (92%) rename scheduler/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt (97%) rename service-management-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/servicemanagement/AppService.kt (97%) rename service-management-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/servicemanagement/AppServiceException.kt (71%) rename service-management-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/servicemanagement/AppServiceManager.kt (96%) rename service-management-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/servicemanagement/AppServiceStatus.kt (93%) rename service-management-macos/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt (95%) rename service-management-macos/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.service-management-macos/reachability-metadata.json (71%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbol.kt (93%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolArrows.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolCommerce.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolCommunication.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolConnectivity.kt (96%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolDevices.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolGeneral.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolHealth.kt (98%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolHuman.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolLetters.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolLocation.kt (97%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolMedia.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolNumbers.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolPower.kt (98%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolSecurity.kt (98%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolShapes.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolStatus.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolTextFormatting.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolTime.kt (98%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolTransportation.kt (99%) rename sf-symbols/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/sfsymbols/SFSymbolWeather.kt (99%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/Logger.kt (79%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/SystemColor.kt (64%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/linux/LinuxSystemColor.kt (95%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt (92%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/mac/MacSystemColor.kt (95%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt (93%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt (93%) rename system-color/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systemcolor/windows/WindowsSystemColor.kt (95%) rename system-color/src/main/resources/META-INF/native-image/{io.github.kdroidfilter => dev.nucleusframework}/nucleus.system-color/reachability-metadata.json (79%) create mode 100644 system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/PlatformSystemInfo.kt rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/SystemInfo.kt (54%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/linux/LinuxSystemInfo.kt (93%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt (98%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/macos/MacOsSystemInfo.kt (93%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt (98%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/BatteryInfo.kt (89%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/BatteryState.kt (59%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/ComponentInfo.kt (69%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/ConnectivityInfo.kt (77%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/CpuGlobalInfo.kt (68%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/CpuInfo.kt (72%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/DiskInfo.kt (81%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/GpuInfo.kt (89%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/MemoryInfo.kt (78%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/MotherboardInfo.kt (74%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/NetworkInterfaceInfo.kt (84%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/OsInfo.kt (82%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/ProcessInfo.kt (85%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/ProductInfo.kt (78%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/model/UserInfo.kt (68%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt (98%) rename system-info/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/windows/WindowsSystemInfo.kt (93%) delete mode 100644 system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/PlatformSystemInfo.kt create mode 100644 system-info/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-info/reachability-metadata.json delete mode 100644 system-info/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-info/reachability-metadata.json rename system-info/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/SystemInfoSmokeTest.kt (99%) rename system-info/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/systeminfo/SystemInfoTest.kt (98%) rename taskbar-progress-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt (94%) rename taskbar-progress-tao/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt (91%) rename taskbar-progress/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/TaskbarProgress.kt (96%) rename taskbar-progress/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt (51%) rename taskbar-progress/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt (88%) rename taskbar-progress/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt (81%) rename taskbar-progress/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt (88%) delete mode 160000 tmp/souvlaki rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/DownloadProgress.kt (77%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/NucleusUpdater.kt (91%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateEvent.kt (85%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateInfo.kt (86%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateLevel.kt (62%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateResult.kt (69%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdaterConfig.kt (79%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/Version.kt (98%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/exception/UpdateException.kt (91%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/ChecksumVerifier.kt (93%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/FileSelector.kt (96%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/PlatformInfo.kt (86%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/PlatformInstaller.kt (98%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/UpdateMarker.kt (95%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/internal/YamlParser.kt (96%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/provider/GenericProvider.kt (87%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/provider/GitHubProvider.kt (90%) rename updater-runtime/src/main/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/provider/UpdateProvider.kt (70%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/ChecksumVerifierTest.kt (94%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/FakeUpdateProvider.kt (66%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/FileSelectorTest.kt (94%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateEventTest.kt (95%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/UpdateMarkerTest.kt (94%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/VersionTest.kt (98%) rename updater-runtime/src/test/kotlin/{io/github/kdroidfilter => dev/nucleusframework}/nucleus/updater/YamlParserTest.kt (95%) diff --git a/.editorconfig b/.editorconfig index 59257f1f0..ea47e2b2c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,7 +14,7 @@ indent_size = 2 max_line_length = 120 ktlint_standard_backing-property-naming = disabled ktlint_standard_function-naming = disabled -ij_kotlin_packages_to_use_import_on_demand = io.github.kdroidfilter.nucleus.window.icons.** +ij_kotlin_packages_to_use_import_on_demand = dev.nucleusframework.nucleus.window.icons.** [**/generated/**] ktlint = disabled diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index b3936b959..589f933f6 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ -github: kdroidFilter +github: nucleusframework ko_fi: lomityaesh diff --git a/.github/workflows/release-desktop.yaml b/.github/workflows/release-desktop.yaml index 3fbd6ed10..79fe803d1 100644 --- a/.github/workflows/release-desktop.yaml +++ b/.github/workflows/release-desktop.yaml @@ -33,10 +33,10 @@ jobs: node-version: '22' # npm 11 (Node 24) has ECOMPROMISED bugs on Windows ARM64 - os: macos-latest arch: arm64 - jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' + jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' - os: macos-15-intel arch: amd64 - jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' + jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-packaging.yaml b/.github/workflows/test-packaging.yaml index bd373530e..accc9096a 100644 --- a/.github/workflows/test-packaging.yaml +++ b/.github/workflows/test-packaging.yaml @@ -38,11 +38,11 @@ jobs: - name: macOS ARM64 os: macos-latest arch: arm64 - jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' + jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' - name: macOS Intel os: macos-15-intel arch: amd64 - jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' + jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' steps: - name: Checkout Repo diff --git a/CLAUDE.md b/CLAUDE.md index 284e3fa1c..71af806ca 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -63,7 +63,7 @@ When creating a new module with platform-specific JNI libraries, all steps below 1. **Native source** — `/src/main/native/{linux,macos,windows}/` with `build.sh`/`build.bat` + C/ObjC source. Library name: `nucleus_`. Linux: prefer `dlopen` over hard compile-time deps. 2. **Build output** — scripts must place binaries in `/src/main/resources/nucleus/native/{linux-x64,linux-aarch64,darwin-x64,darwin-aarch64,win32-x64,win32-aarch64}/`. Build scripts must also clear the `NativeLibraryLoader` cache (`~/.cache/nucleus/native//`) after compilation, otherwise the loader serves the stale cached copy instead of the freshly built library. 3. **Kotlin JNI bridge** — `internal object` using `NativeLibraryLoader.load()` with `@JvmStatic external` methods. Always provide a Kotlin fallback when native lib is unavailable. -4. **GraalVM reachability metadata** — create `/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus./reachability-metadata.json` declaring all JNI-accessible classes/methods. Without this, native-image silently eliminates the bridge. +4. **GraalVM reachability metadata** — create `/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus./reachability-metadata.json` declaring all JNI-accessible classes/methods. Without this, native-image silently eliminates the bridge. 5. **CI build** (`build-natives.yaml`) — add build + verify + upload steps for each platform (Windows, macOS, Linux matrix x64+aarch64). Artifact naming: `-`. 6. **CI consumers** — add download step + EXPECTED verify entries (all 6 arch paths) in **every** consumer workflow: `pre-merge.yaml`, `publish-maven.yaml`, `publish-plugin.yaml`, `test-packaging.yaml`, `test-graalvm.yaml`, `release-graalvm.yaml`. diff --git a/IDEAL_API.md b/IDEAL_API.md index 498e9db30..393e82175 100644 --- a/IDEAL_API.md +++ b/IDEAL_API.md @@ -20,7 +20,7 @@ Everything else stays exactly as it is today. Each OS integration keeps its nati ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "1.4.0" + id("dev.nucleusframework.nucleus") version "1.4.0" } nucleus { @@ -33,7 +33,7 @@ nucleus { dependencies { implementation(compose.desktop.currentOs) - implementation("io.github.kdroidfilter:nucleus.application-runtime:1.4.0") + implementation("dev.nucleusframework:nucleus.application-runtime:1.4.0") } ``` diff --git a/README.md b/README.md index a4502fa36..a469ca8db 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ # Nucleus -[![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/io.github.kdroidfilter.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus) -[![Maven Central](https://img.shields.io/maven-central/v/io.github.kdroidfilter/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=io.github.kdroidfilter.nucleus) -[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) +[![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) +[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) @@ -65,7 +65,7 @@ Java evolved into Kotlin. JavaScript evolved into TypeScript. Desktop developmen ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } nucleus.application { diff --git a/aot-runtime/build.gradle.kts b/aot-runtime/build.gradle.kts index 48c798e46..58252906f 100644 --- a/aot-runtime/build.gradle.kts +++ b/aot-runtime/build.gradle.kts @@ -30,12 +30,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.aot-runtime", publishVersion) + coordinates("dev.nucleusframework", "nucleus.aot-runtime", publishVersion) pom { name.set("Nucleus AOT Runtime") description.set("AOT runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -46,16 +46,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntime.kt b/aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntime.kt similarity index 94% rename from aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntime.kt rename to aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntime.kt index 5f387c6b7..c56d8afa2 100644 --- a/aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntime.kt +++ b/aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntime.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.aot.runtime +package dev.nucleusframework.nucleus.aot.runtime public enum class AotRuntimeMode { OFF, diff --git a/aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntime.kt b/aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntime.kt new file mode 100644 index 000000000..7cf2e9978 --- /dev/null +++ b/aot-runtime/src/main/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntime.kt @@ -0,0 +1,5 @@ +package dev.nucleusframework.nucleus.aot.runtime + +public typealias ExecutableType = dev.nucleusframework.nucleus.core.runtime.ExecutableType + +public typealias ExecutableRuntime = dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime diff --git a/aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntime.kt b/aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntime.kt deleted file mode 100644 index f77e3ea13..000000000 --- a/aot-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntime.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.kdroidfilter.nucleus.aot.runtime - -public typealias ExecutableType = io.github.kdroidfilter.nucleus.core.runtime.ExecutableType - -public typealias ExecutableRuntime = io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime diff --git a/aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntimeTest.kt b/aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntimeTest.kt similarity index 96% rename from aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntimeTest.kt rename to aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntimeTest.kt index 918203841..f0006e7c6 100644 --- a/aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/AotRuntimeTest.kt +++ b/aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/AotRuntimeTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.aot.runtime +package dev.nucleusframework.nucleus.aot.runtime import org.junit.Assert.assertEquals import org.junit.Assert.assertNull diff --git a/aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntimeTest.kt b/aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntimeTest.kt similarity index 98% rename from aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntimeTest.kt rename to aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntimeTest.kt index 596273d87..25b2e0bad 100644 --- a/aot-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/aot/runtime/ExecutableRuntimeTest.kt +++ b/aot-runtime/src/test/kotlin/dev/nucleusframework/nucleus/aot/runtime/ExecutableRuntimeTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.aot.runtime +package dev.nucleusframework.nucleus.aot.runtime import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/autolaunch/build.gradle.kts b/autolaunch/build.gradle.kts index 17c4fbab0..a56640045 100644 --- a/autolaunch/build.gradle.kts +++ b/autolaunch/build.gradle.kts @@ -75,12 +75,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.autolaunch", publishVersion) + coordinates("dev.nucleusframework", "nucleus.autolaunch", publishVersion) pom { name.set("Nucleus Autolaunch") description.set("Cross-platform auto-launch at user login for JVM desktop applications") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -91,16 +91,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunch.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunch.kt similarity index 94% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunch.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunch.kt index 2dc0a8906..0742cc71e 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunch.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunch.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.autolaunch +package dev.nucleusframework.nucleus.autolaunch -import io.github.kdroidfilter.nucleus.autolaunch.linux.LinuxAutoLaunch -import io.github.kdroidfilter.nucleus.autolaunch.windows.NativeAutoLaunchBridge -import io.github.kdroidfilter.nucleus.autolaunch.windows.WindowsAutoLaunch -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableType +import dev.nucleusframework.nucleus.autolaunch.linux.LinuxAutoLaunch +import dev.nucleusframework.nucleus.autolaunch.windows.NativeAutoLaunchBridge +import dev.nucleusframework.nucleus.autolaunch.windows.WindowsAutoLaunch +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableType private const val MAC_SMAPPSERVICE_BACKEND_CLASS = - "io.github.kdroidfilter.nucleus.autolaunch.macos.MacSMAppServiceBackend" + "dev.nucleusframework.nucleus.autolaunch.macos.MacSMAppServiceBackend" /** * Cross-platform auto-launch at user login. diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchBackend.kt similarity index 96% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchBackend.kt index 2e26b2674..0d275b9a0 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchBackend.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.autolaunch +package dev.nucleusframework.nucleus.autolaunch /** Internal SPI implemented by each platform/packaging backend. */ internal interface AutoLaunchBackend { diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchConfig.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchConfig.kt similarity index 90% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchConfig.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchConfig.kt index 87f8b3287..c70067211 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchConfig.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchConfig.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.autolaunch +package dev.nucleusframework.nucleus.autolaunch /** - * Optional overrides for auto-launch. Defaults fall back to [io.github.kdroidfilter.nucleus.core.runtime.NucleusApp]. + * Optional overrides for auto-launch. Defaults fall back to [dev.nucleusframework.nucleus.core.runtime.NucleusApp]. * * Configure before the first call to [AutoLaunch.state]/`enable`/`disable`: * ``` diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchState.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchState.kt similarity index 97% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchState.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchState.kt index a4e1a1898..1919ce901 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/AutoLaunchState.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/AutoLaunchState.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.autolaunch +package dev.nucleusframework.nucleus.autolaunch /** * The current state of auto-launch at user login for this application. diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/FlatpakPortalBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/FlatpakPortalBackend.kt similarity index 93% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/FlatpakPortalBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/FlatpakPortalBackend.kt index d79d38cc0..a2e807d25 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/FlatpakPortalBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/FlatpakPortalBackend.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.autolaunch.linux - -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.autolaunch.containsAutostartMarker -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +package dev.nucleusframework.nucleus.autolaunch.linux + +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.autolaunch.containsAutostartMarker +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.io.IOException import java.nio.file.Path import kotlin.io.path.createDirectories diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/LinuxAutoLaunch.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/LinuxAutoLaunch.kt similarity index 83% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/LinuxAutoLaunch.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/LinuxAutoLaunch.kt index 0b5f8a980..19b84d433 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/LinuxAutoLaunch.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/LinuxAutoLaunch.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.autolaunch.linux +package dev.nucleusframework.nucleus.autolaunch.linux -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime /** * Linux dispatcher. Chooses between systemd user service (host) and @@ -16,7 +16,7 @@ import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime * **Flatpak** — [FlatpakPortalBackend] * - the sandbox cannot reach the host's systemd; portal is the only option * - detects login launch via the CLI marker - * ([io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig.autostartArgument]) + * ([dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig.autostartArgument]) * injected into the portal's `commandline` (safe: `flatpak run ` has no spaces, * so the portal's quoting bug on `Exec=` does not strike) */ diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt similarity index 94% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt index 8695d77a5..32d91b75b 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/NativeAutoLaunchLinuxBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.autolaunch.linux +package dev.nucleusframework.nucleus.autolaunch.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_autolaunch_linux" @@ -14,8 +14,8 @@ private const val LIBRARY_NAME = "nucleus_autolaunch_linux" * talk to the host's systemd) — [requestBackground]. * * All methods return status codes instead of throwing; the Kotlin side maps them - * to [io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState] / - * [io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult]. + * to [dev.nucleusframework.nucleus.autolaunch.AutoLaunchState] / + * [dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult]. */ @Suppress("TooManyFunctions") internal object NativeAutoLaunchLinuxBridge { diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/SystemdUserBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/SystemdUserBackend.kt similarity index 94% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/SystemdUserBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/SystemdUserBackend.kt index 0f8bf8af0..92bfb53f9 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/linux/SystemdUserBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/linux/SystemdUserBackend.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.autolaunch.linux +package dev.nucleusframework.nucleus.autolaunch.linux -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.io.IOException import java.nio.file.Files import java.nio.file.Path diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt similarity index 90% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt index 8872f32d2..ddd06d783 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/macos/MacSMAppServiceBackend.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.autolaunch.macos +package dev.nucleusframework.nucleus.autolaunch.macos -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.servicemanagement.AppService -import io.github.kdroidfilter.nucleus.servicemanagement.AppServiceManager -import io.github.kdroidfilter.nucleus.servicemanagement.AppServiceStatus +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.servicemanagement.AppService +import dev.nucleusframework.nucleus.servicemanagement.AppServiceManager +import dev.nucleusframework.nucleus.servicemanagement.AppServiceStatus /** * Unified macOS backend using `SMAppService.mainApp` (macOS 13.0+). diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt similarity index 89% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt index b4c88ee90..c0dda7f12 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/MsixStartupTaskBackend.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.autolaunch.windows +package dev.nucleusframework.nucleus.autolaunch.windows -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.core.runtime.NucleusApp /** * MSIX / packaged desktop backend. Requires `` diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt similarity index 93% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt index d64590a31..1a928058e 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/NativeAutoLaunchBridge.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.autolaunch.windows +package dev.nucleusframework.nucleus.autolaunch.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_autolaunch" /** * JNI bridge. All methods return status codes instead of throwing — the - * Kotlin side maps them to [io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState] / - * [io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult]. + * Kotlin side maps them to [dev.nucleusframework.nucleus.autolaunch.AutoLaunchState] / + * [dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult]. */ @Suppress("TooManyFunctions") internal object NativeAutoLaunchBridge { diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/Win32RegistryBackend.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/Win32RegistryBackend.kt similarity index 88% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/Win32RegistryBackend.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/Win32RegistryBackend.kt index 366b76b54..2c31e79f8 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/Win32RegistryBackend.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/Win32RegistryBackend.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.autolaunch.windows +package dev.nucleusframework.nucleus.autolaunch.windows -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.core.runtime.NucleusApp /** * Registry-based backend for classic Win32 apps (MSI / NSIS / portable). diff --git a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/WindowsAutoLaunch.kt b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/WindowsAutoLaunch.kt similarity index 81% rename from autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/WindowsAutoLaunch.kt rename to autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/WindowsAutoLaunch.kt index b72694b7f..1a39ca61c 100644 --- a/autolaunch/src/main/kotlin/io/github/kdroidfilter/nucleus/autolaunch/windows/WindowsAutoLaunch.kt +++ b/autolaunch/src/main/kotlin/dev/nucleusframework/nucleus/autolaunch/windows/WindowsAutoLaunch.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.autolaunch.windows +package dev.nucleusframework.nucleus.autolaunch.windows -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchBackend -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchBackend +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState /** * Windows dispatcher. Chooses between MSIX StartupTask API and Win32 registry diff --git a/autolaunch/src/main/native/linux/nucleus_autolaunch_linux.c b/autolaunch/src/main/native/linux/nucleus_autolaunch_linux.c index 13afdfae9..565737390 100644 --- a/autolaunch/src/main/native/linux/nucleus_autolaunch_linux.c +++ b/autolaunch/src/main/native/linux/nucleus_autolaunch_linux.c @@ -160,7 +160,7 @@ static void on_response_signal(GDBusConnection *c, /* ==== nativeIsPortalAvailable ========================================== */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeIsPortalAvailable( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeIsPortalAvailable( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -196,7 +196,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeRequestBackground( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeRequestBackground( JNIEnv *env, jclass clazz, jboolean enable, jobjectArray j_commandline, @@ -391,7 +391,7 @@ static int systemd_reload(GDBusConnection *conn) { /* ==== nativeWriteUnitFile ============================================== */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeWriteUnitFile( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeWriteUnitFile( JNIEnv *env, jclass clazz, jstring j_unit_name, jstring j_content) { @@ -431,7 +431,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge /* ==== nativeDeleteUnitFile ============================================= */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeDeleteUnitFile( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeDeleteUnitFile( JNIEnv *env, jclass clazz, jstring j_unit_name) { (void)clazz; @@ -452,7 +452,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge /* ==== nativeEnableUnit ================================================= */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeEnableUnit( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeEnableUnit( JNIEnv *env, jclass clazz, jstring j_unit_name) { (void)clazz; @@ -494,7 +494,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge /* ==== nativeDisableUnit ================================================ */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeDisableUnit( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeDisableUnit( JNIEnv *env, jclass clazz, jstring j_unit_name) { (void)clazz; @@ -537,7 +537,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge /* ==== nativeGetUnitFileState =========================================== */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeGetUnitFileState( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeGetUnitFileState( JNIEnv *env, jclass clazz, jstring j_unit_name) { (void)clazz; @@ -589,7 +589,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge /* ==== nativeGetDiagnostic ============================================== */ JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeGetDiagnostic( +Java_dev_nucleusframework_nucleus_autolaunch_linux_NativeAutoLaunchLinuxBridge_nativeGetDiagnostic( JNIEnv *env, jclass clazz) { (void)clazz; diff --git a/autolaunch/src/main/native/windows/nucleus_autolaunch.cpp b/autolaunch/src/main/native/windows/nucleus_autolaunch.cpp index b5a802f73..ffe469611 100644 --- a/autolaunch/src/main/native/windows/nucleus_autolaunch.cpp +++ b/autolaunch/src/main/native/windows/nucleus_autolaunch.cpp @@ -119,7 +119,7 @@ static bool isCurrentProcessPackaged() { } extern "C" JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsPackaged( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsPackaged( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; bool p = isCurrentProcessPackaged(); @@ -128,7 +128,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na } extern "C" JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeGetDiagnostic( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeGetDiagnostic( JNIEnv *env, jclass clazz) { (void)clazz; std::lock_guard lock(g_diagMutex); @@ -146,7 +146,7 @@ static const wchar_t *SA_RUN_KEY = // Returns: 0 = not present, 1 = enabled, 2 = disabled-by-user, -1 = error extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegReadState( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegReadState( JNIEnv *env, jclass clazz, jstring jValueName) { (void)clazz; std::wstring name = toWString(env, jValueName); @@ -184,7 +184,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegWriteRun( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegWriteRun( JNIEnv *env, jclass clazz, jstring jValueName, jstring jCommand) { (void)clazz; std::wstring name = toWString(env, jValueName); @@ -204,7 +204,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegDeleteRun( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeRegDeleteRun( JNIEnv *env, jclass clazz, jstring jValueName, jboolean alsoSa) { (void)clazz; std::wstring name = toWString(env, jValueName); @@ -287,7 +287,7 @@ static HRESULT findStartupTask(const std::wstring &taskId, ComPtr } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixGetState( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixGetState( JNIEnv *env, jclass clazz, jstring jTaskId) { (void)clazz; std::wstring taskId = toWString(env, jTaskId); @@ -303,7 +303,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixRequestEnable( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixRequestEnable( JNIEnv *env, jclass clazz, jstring jTaskId) { (void)clazz; std::wstring taskId = toWString(env, jTaskId); @@ -336,7 +336,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na // frameworks (rarely) may interfere. extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsStartupActivation( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsStartupActivation( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -463,7 +463,7 @@ static bool resolveExternalAncestorName(wchar_t *outName, size_t cchName) { } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsLaunchedByTaskScheduler( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeIsLaunchedByTaskScheduler( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -488,7 +488,7 @@ Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_na } extern "C" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixDisable( +Java_dev_nucleusframework_nucleus_autolaunch_windows_NativeAutoLaunchBridge_nativeMsixDisable( JNIEnv *env, jclass clazz, jstring jTaskId) { (void)clazz; std::wstring taskId = toWString(env, jTaskId); diff --git a/autolaunch/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.autolaunch/reachability-metadata.json b/autolaunch/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.autolaunch/reachability-metadata.json new file mode 100644 index 000000000..0e3597206 --- /dev/null +++ b/autolaunch/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.autolaunch/reachability-metadata.json @@ -0,0 +1,12 @@ +{ + "reflection": [ + { + "type": "dev.nucleusframework.nucleus.autolaunch.windows.NativeAutoLaunchBridge", + "jniAccessible": true + }, + { + "type": "dev.nucleusframework.nucleus.autolaunch.linux.NativeAutoLaunchLinuxBridge", + "jniAccessible": true + } + ] +} diff --git a/autolaunch/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.autolaunch/reachability-metadata.json b/autolaunch/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.autolaunch/reachability-metadata.json deleted file mode 100644 index 4fa7e897b..000000000 --- a/autolaunch/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.autolaunch/reachability-metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "reflection": [ - { - "type": "io.github.kdroidfilter.nucleus.autolaunch.windows.NativeAutoLaunchBridge", - "jniAccessible": true - }, - { - "type": "io.github.kdroidfilter.nucleus.autolaunch.linux.NativeAutoLaunchLinuxBridge", - "jniAccessible": true - } - ] -} diff --git a/autolaunch/src/test/kotlin/io/github/kdroidfilter/nucleus/autolaunch/Win32RegistryBackendTest.kt b/autolaunch/src/test/kotlin/dev/nucleusframework/nucleus/autolaunch/Win32RegistryBackendTest.kt similarity index 91% rename from autolaunch/src/test/kotlin/io/github/kdroidfilter/nucleus/autolaunch/Win32RegistryBackendTest.kt rename to autolaunch/src/test/kotlin/dev/nucleusframework/nucleus/autolaunch/Win32RegistryBackendTest.kt index 3104edd78..7eeb9d91c 100644 --- a/autolaunch/src/test/kotlin/io/github/kdroidfilter/nucleus/autolaunch/Win32RegistryBackendTest.kt +++ b/autolaunch/src/test/kotlin/dev/nucleusframework/nucleus/autolaunch/Win32RegistryBackendTest.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.autolaunch +package dev.nucleusframework.nucleus.autolaunch -import io.github.kdroidfilter.nucleus.autolaunch.windows.NativeAutoLaunchBridge -import io.github.kdroidfilter.nucleus.autolaunch.windows.Win32RegistryBackend +import dev.nucleusframework.nucleus.autolaunch.windows.NativeAutoLaunchBridge +import dev.nucleusframework.nucleus.autolaunch.windows.Win32RegistryBackend import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 80a3d6bca..adda197f2 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -856,6 +856,6 @@ style: active: true excludeImports: - 'java.util.*' - - 'io.github.kdroidfilter.nucleus.window.icons.linux.gnome.*' - - 'io.github.kdroidfilter.nucleus.window.icons.linux.kde.*' - - 'io.github.kdroidfilter.nucleus.window.icons.windows.*' + - 'dev.nucleusframework.nucleus.window.icons.linux.gnome.*' + - 'dev.nucleusframework.nucleus.window.icons.linux.kde.*' + - 'dev.nucleusframework.nucleus.window.icons.windows.*' diff --git a/core-runtime/build.gradle.kts b/core-runtime/build.gradle.kts index f1ec123bf..40494b3aa 100644 --- a/core-runtime/build.gradle.kts +++ b/core-runtime/build.gradle.kts @@ -29,12 +29,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.core-runtime", publishVersion) + coordinates("dev.nucleusframework", "nucleus.core-runtime", publishVersion) pom { name.set("Nucleus Core Runtime") description.set("Core runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -45,16 +45,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/DeepLinkHandler.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt similarity index 96% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/DeepLinkHandler.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt index 223206125..b4b66e225 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/DeepLinkHandler.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime -import io.github.kdroidfilter.nucleus.core.runtime.tools.debugln -import io.github.kdroidfilter.nucleus.core.runtime.tools.errorln +import dev.nucleusframework.nucleus.core.runtime.tools.debugln +import dev.nucleusframework.nucleus.core.runtime.tools.errorln import java.awt.Desktop import java.io.IOException import java.net.URI diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntime.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt similarity index 98% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntime.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt index ccb4df9e1..d2b26da54 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntime.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import java.io.File diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/LinuxDesktopEnvironment.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/LinuxDesktopEnvironment.kt similarity index 94% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/LinuxDesktopEnvironment.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/LinuxDesktopEnvironment.kt index 3e1f0688b..b90102cc3 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/LinuxDesktopEnvironment.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/LinuxDesktopEnvironment.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import java.util.Locale diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NativeLibraryLoader.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NativeLibraryLoader.kt similarity index 99% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NativeLibraryLoader.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NativeLibraryLoader.kt index 62e497e7d..d5f2d7808 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NativeLibraryLoader.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NativeLibraryLoader.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import java.net.JarURLConnection import java.nio.file.Files diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusApp.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusApp.kt similarity index 97% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusApp.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusApp.kt index a4486f586..7e49a68a3 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusApp.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusApp.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime -import io.github.kdroidfilter.nucleus.core.runtime.tools.AppIdProvider +import dev.nucleusframework.nucleus.core.runtime.tools.AppIdProvider import java.util.Properties /** diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/Platform.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/Platform.kt similarity index 93% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/Platform.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/Platform.kt index c15643748..d76f07127 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/Platform.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/Platform.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import java.util.Locale diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManager.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt similarity index 97% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManager.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt index 6ca8a46d3..640feb041 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManager.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime -import io.github.kdroidfilter.nucleus.core.runtime.tools.AppIdProvider -import io.github.kdroidfilter.nucleus.core.runtime.tools.debugln -import io.github.kdroidfilter.nucleus.core.runtime.tools.errorln +import dev.nucleusframework.nucleus.core.runtime.tools.AppIdProvider +import dev.nucleusframework.nucleus.core.runtime.tools.debugln +import dev.nucleusframework.nucleus.core.runtime.tools.errorln import java.io.File import java.io.IOException import java.io.RandomAccessFile diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/AppIdProvider.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/AppIdProvider.kt similarity index 97% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/AppIdProvider.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/AppIdProvider.kt index 43dcc4813..62c245c6d 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/AppIdProvider.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/AppIdProvider.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime.tools +package dev.nucleusframework.nucleus.core.runtime.tools /** * Provides a unique, stable application identifier to namespace shared resources diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt similarity index 97% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt index 481c1a3b5..21e01542e 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/LinuxDesktopFileDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.core.runtime.tools +package dev.nucleusframework.nucleus.core.runtime.tools -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.io.File import java.nio.file.Files import java.nio.file.Path diff --git a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/Logger.kt b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/Logger.kt similarity index 81% rename from core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/Logger.kt rename to core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/Logger.kt index ec4062023..8733b5f81 100644 --- a/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/tools/Logger.kt +++ b/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/tools/Logger.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.core.runtime.tools +package dev.nucleusframework.nucleus.core.runtime.tools -import io.github.kdroidfilter.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.DEBUG -import io.github.kdroidfilter.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.ERROR -import io.github.kdroidfilter.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.INFO -import io.github.kdroidfilter.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.VERBOSE -import io.github.kdroidfilter.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.WARN +import dev.nucleusframework.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.DEBUG +import dev.nucleusframework.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.ERROR +import dev.nucleusframework.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.INFO +import dev.nucleusframework.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.VERBOSE +import dev.nucleusframework.nucleus.core.runtime.tools.ComposeNativeTrayLoggingLevel.Companion.WARN import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntimeTest.kt b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntimeTest.kt similarity index 98% rename from core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntimeTest.kt rename to core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntimeTest.kt index 61df2596c..8e755a39e 100644 --- a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntimeTest.kt +++ b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntimeTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusAppTest.kt b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusAppTest.kt similarity index 97% rename from core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusAppTest.kt rename to core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusAppTest.kt index 15f0db6a9..f5bea0b74 100644 --- a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/NucleusAppTest.kt +++ b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/NucleusAppTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceHolder.kt b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceHolder.kt similarity index 97% rename from core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceHolder.kt rename to core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceHolder.kt index 0b1a56e60..ac2cc7dd8 100644 --- a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceHolder.kt +++ b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceHolder.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import java.nio.file.Paths diff --git a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt similarity index 98% rename from core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt rename to core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt index 400d78d11..1053b1cf2 100644 --- a/core-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt +++ b/core-runtime/src/test/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManagerEndToEndTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.core.runtime +package dev.nucleusframework.nucleus.core.runtime import org.junit.After import org.junit.Assert.assertEquals @@ -196,7 +196,7 @@ class SingleInstanceManagerEndToEndTest { javaBin, "-cp", classpath, - "io.github.kdroidfilter.nucleus.core.runtime.SingleInstanceHolderKt", + "dev.nucleusframework.nucleus.core.runtime.SingleInstanceHolderKt", tempDir.toAbsolutePath().toString(), lockIdentifier, ) diff --git a/darkmode-detector/build.gradle.kts b/darkmode-detector/build.gradle.kts index e8007f51b..dae11c5f0 100644 --- a/darkmode-detector/build.gradle.kts +++ b/darkmode-detector/build.gradle.kts @@ -103,12 +103,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.darkmode-detector", publishVersion) + coordinates("dev.nucleusframework", "nucleus.darkmode-detector", publishVersion) pom { name.set("Nucleus Dark Mode Detector") description.set("Reactive dark mode detection for Compose Desktop across Windows, macOS and Linux") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -119,16 +119,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/IsSystemInDarkMode.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/IsSystemInDarkMode.kt similarity index 64% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/IsSystemInDarkMode.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/IsSystemInDarkMode.kt index a1f669a1c..b9daa35e8 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/IsSystemInDarkMode.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/IsSystemInDarkMode.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector +package dev.nucleusframework.nucleus.darkmodedetector import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalInspectionMode -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.darkmodedetector.linux.isLinuxInDarkMode -import io.github.kdroidfilter.nucleus.darkmodedetector.mac.isMacOsInDarkMode -import io.github.kdroidfilter.nucleus.darkmodedetector.windows.isWindowsInDarkMode +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.darkmodedetector.linux.isLinuxInDarkMode +import dev.nucleusframework.nucleus.darkmodedetector.mac.isMacOsInDarkMode +import dev.nucleusframework.nucleus.darkmodedetector.windows.isWindowsInDarkMode /** * Composable function that returns whether the system is in dark mode. diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/Logger.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/Logger.kt similarity index 79% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/Logger.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/Logger.kt index ce2806c4f..1f508f7c5 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/Logger.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/Logger.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector +package dev.nucleusframework.nucleus.darkmodedetector -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging internal fun debugln( tag: String, diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt similarity index 94% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt index 789c3b15c..f71a9cb60 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/LinuxPortalThemeDetector.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.linux +package dev.nucleusframework.nucleus.darkmodedetector.linux import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.function.Consumer private const val TAG = "LinuxPortalThemeDetector" diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt similarity index 83% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt index 0aaf552a6..06d200d6a 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/linux/NativeLinuxBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.linux +package dev.nucleusframework.nucleus.darkmodedetector.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt similarity index 93% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt index 491afef23..70c259e14 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/MacOSThemeDetector.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.mac +package dev.nucleusframework.nucleus.darkmodedetector.mac import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.function.Consumer private const val TAG = "MacOSThemeDetector" diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt similarity index 83% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt index 652023752..4cfd6e486 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/mac/NativeDarkModeBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.mac +package dev.nucleusframework.nucleus.darkmodedetector.mac -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt similarity index 83% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt index 65d118e49..728ba2848 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/NativeWindowsBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.windows +package dev.nucleusframework.nucleus.darkmodedetector.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt similarity index 93% rename from darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt rename to darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt index 9dbe098ed..994e6f791 100644 --- a/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt +++ b/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/windows/WindowsThemeDetector.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.darkmodedetector.windows +package dev.nucleusframework.nucleus.darkmodedetector.windows import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import io.github.kdroidfilter.nucleus.darkmodedetector.debugln +import dev.nucleusframework.nucleus.darkmodedetector.debugln import java.util.function.Consumer private const val TAG = "WindowsThemeDetector" diff --git a/darkmode-detector/src/main/native/linux/nucleus_linux_theme.c b/darkmode-detector/src/main/native/linux/nucleus_linux_theme.c index 8ccd20fd0..3886d8314 100644 --- a/darkmode-detector/src/main/native/linux/nucleus_linux_theme.c +++ b/darkmode-detector/src/main/native/linux/nucleus_linux_theme.c @@ -120,7 +120,7 @@ static jboolean read_color_scheme(void) { /* nativeIsDark() */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeIsDark( +Java_dev_nucleusframework_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeIsDark( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -146,7 +146,7 @@ static void notify_java(jboolean isDark) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/darkmodedetector/linux/NativeLinuxBridge"); + "dev/nucleusframework/nucleus/darkmodedetector/linux/NativeLinuxBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onThemeChanged", "(Z)V"); @@ -261,7 +261,7 @@ static void *monitor_thread(void *arg) { /* nativeStartObserving() */ /* ------------------------------------------------------------------ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -275,7 +275,7 @@ Java_io_github_kdroidfilter_nucleus_darkmodedetector_linux_NativeLinuxBridge_nat /* nativeStopObserving() */ /* ------------------------------------------------------------------ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_linux_NativeLinuxBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/darkmode-detector/src/main/native/macos/NucleusDarkModeBridge.m b/darkmode-detector/src/main/native/macos/NucleusDarkModeBridge.m index 292ff29ea..18a41492c 100644 --- a/darkmode-detector/src/main/native/macos/NucleusDarkModeBridge.m +++ b/darkmode-detector/src/main/native/macos/NucleusDarkModeBridge.m @@ -13,7 +13,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeIsDark( +Java_dev_nucleusframework_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeIsDark( JNIEnv *env, jclass clazz) { @autoreleasepool { NSString *style = [[NSUserDefaults standardUserDefaults] @@ -27,7 +27,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { if (g_observer != nil) return; // already observing @@ -58,7 +58,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { ? JNI_TRUE : JNI_FALSE; jclass bridgeClass = (*cbEnv)->FindClass(cbEnv, - "io/github/kdroidfilter/nucleus/darkmodedetector/mac/NativeDarkModeBridge"); + "dev/nucleusframework/nucleus/darkmodedetector/mac/NativeDarkModeBridge"); if (bridgeClass != NULL) { jmethodID method = (*cbEnv)->GetStaticMethodID(cbEnv, bridgeClass, "onThemeChanged", "(Z)V"); @@ -79,7 +79,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_mac_NativeDarkModeBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { if (g_observer != nil) { [[NSDistributedNotificationCenter defaultCenter] removeObserver:g_observer]; diff --git a/darkmode-detector/src/main/native/windows/nucleus_windows_theme.c b/darkmode-detector/src/main/native/windows/nucleus_windows_theme.c index 99a55abff..0e8e40b97 100644 --- a/darkmode-detector/src/main/native/windows/nucleus_windows_theme.c +++ b/darkmode-detector/src/main/native/windows/nucleus_windows_theme.c @@ -58,7 +58,7 @@ static jboolean is_dark(void) { /* nativeIsDark() */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeIsDark( +Java_dev_nucleusframework_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeIsDark( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -84,7 +84,7 @@ static void notify_java(jboolean isDark) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/darkmodedetector/windows/NativeWindowsBridge"); + "dev/nucleusframework/nucleus/darkmodedetector/windows/NativeWindowsBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onThemeChanged", "(Z)V"); @@ -156,7 +156,7 @@ static DWORD WINAPI monitor_thread(LPVOID arg) { /* nativeStartObserving() */ /* ------------------------------------------------------------------ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -183,7 +183,7 @@ Java_io_github_kdroidfilter_nucleus_darkmodedetector_windows_NativeWindowsBridge /* nativeStopObserving() */ /* ------------------------------------------------------------------ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_darkmodedetector_windows_NativeWindowsBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/darkmode-detector/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.darkmode-detector/reachability-metadata.json b/darkmode-detector/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.darkmode-detector/reachability-metadata.json similarity index 74% rename from darkmode-detector/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.darkmode-detector/reachability-metadata.json rename to darkmode-detector/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.darkmode-detector/reachability-metadata.json index fce166022..ae479c65f 100644 --- a/darkmode-detector/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.darkmode-detector/reachability-metadata.json +++ b/darkmode-detector/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.darkmode-detector/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge", + "type": "dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge", "jniAccessible": true, "methods": [ { @@ -13,7 +13,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge", + "type": "dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge", "jniAccessible": true, "methods": [ { @@ -25,7 +25,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge", + "type": "dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge", "jniAccessible": true, "methods": [ { diff --git a/decorated-window-awt/build.gradle.kts b/decorated-window-awt/build.gradle.kts index ebf5a64ff..5be57f45a 100644 --- a/decorated-window-awt/build.gradle.kts +++ b/decorated-window-awt/build.gradle.kts @@ -32,14 +32,14 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-awt", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-awt", publishVersion) pom { name.set("Nucleus Decorated Window AWT") description.set( "AWT/Compose Desktop integration of Nucleus Decorated Window (consumed by JBR and JNI backends)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -50,16 +50,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtDecoratedWindow.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtDecoratedWindow.kt similarity index 97% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtDecoratedWindow.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtDecoratedWindow.kt index 743a1d119..b6f5b66a6 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtDecoratedWindow.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtDecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.background import androidx.compose.foundation.shape.RoundedCornerShape @@ -21,10 +21,10 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.window.FrameWindowScope import androidx.compose.ui.window.WindowPlacement -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.internal.insideBorder -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.internal.insideBorder +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle import java.awt.ComponentOrientation import java.awt.Desktop import java.awt.Frame diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtTitleBar.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtTitleBar.kt similarity index 95% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtTitleBar.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtTitleBar.kt index 9bad1365b..735cdbe85 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/AwtTitleBar.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/AwtTitleBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -10,8 +10,8 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive import java.awt.Window diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogCore.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogCore.kt similarity index 96% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogCore.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogCore.kt index ff9547641..389080fd5 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogCore.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogCore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.background import androidx.compose.foundation.shape.RoundedCornerShape @@ -26,10 +26,10 @@ import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.offset import androidx.compose.ui.window.DialogWindowScope -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.internal.insideBorder -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.internal.insideBorder +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle import java.awt.event.ComponentEvent import java.awt.event.ComponentListener import java.awt.event.WindowAdapter diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBarImpl.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBarImpl.kt similarity index 87% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBarImpl.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBarImpl.kt index 5cb1a9e75..5fdcf7fd6 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBarImpl.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBarImpl.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -7,8 +7,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowControlArea.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowControlArea.kt similarity index 95% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowControlArea.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowControlArea.kt index 8704f5458..01d21299e 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowControlArea.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowControlArea.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -23,11 +23,11 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.linux.LinuxTitleBarButton -import io.github.kdroidfilter.nucleus.window.utils.linux.linuxTitleBarIcons -import io.github.kdroidfilter.nucleus.window.utils.linux.rememberLinuxButtonLayout +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.linux.LinuxTitleBarButton +import dev.nucleusframework.nucleus.window.utils.linux.linuxTitleBarIcons +import dev.nucleusframework.nucleus.window.utils.linux.rememberLinuxButtonLayout import java.awt.Frame import java.awt.event.WindowEvent diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowsWindowControlArea.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowsWindowControlArea.kt similarity index 97% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowsWindowControlArea.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowsWindowControlArea.kt index eeda78e26..bad9f95e3 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/WindowsWindowControlArea.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/WindowsWindowControlArea.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -24,8 +24,8 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.windows.windowsTitleBarIcons +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.windows.windowsTitleBarIcons import java.awt.Frame import java.awt.event.WindowEvent diff --git a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/MinimumSizeSupport.kt b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/MinimumSizeSupport.kt similarity index 98% rename from decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/MinimumSizeSupport.kt rename to decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/MinimumSizeSupport.kt index a1bcf2db2..20d7fb61e 100644 --- a/decorated-window-awt/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/MinimumSizeSupport.kt +++ b/decorated-window-awt/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/MinimumSizeSupport.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.internal +package dev.nucleusframework.nucleus.window.internal import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect diff --git a/decorated-window-core/build.gradle.kts b/decorated-window-core/build.gradle.kts index b8a1892af..32fe15f9a 100644 --- a/decorated-window-core/build.gradle.kts +++ b/decorated-window-core/build.gradle.kts @@ -85,12 +85,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-core", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-core", publishVersion) pom { name.set("Nucleus Decorated Window Core") description.set("Shared types, layout, styling, and resources for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -101,16 +101,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/ControlButtonsDirection.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/ControlButtonsDirection.kt similarity index 97% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/ControlButtonsDirection.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/ControlButtonsDirection.kt index 6f971f51f..a81d10c9b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/ControlButtonsDirection.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/ControlButtonsDirection.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalLayoutDirection diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogTypes.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogTypes.kt similarity index 97% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogTypes.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogTypes.kt index 494a3292f..691f4cb9d 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialogTypes.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialogTypes.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Immutable import androidx.compose.runtime.ProvidableCompositionLocal diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindowCore.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindowCore.kt similarity index 99% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindowCore.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindowCore.kt index 46e830eea..8a06af27b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindowCore.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindowCore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Immutable import androidx.compose.runtime.ProvidableCompositionLocal diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NativeLayoutDirectionBridge.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NativeLayoutDirectionBridge.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NativeLayoutDirectionBridge.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NativeLayoutDirectionBridge.kt index fbd38b098..213a4f5d8 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NativeLayoutDirectionBridge.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NativeLayoutDirectionBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NucleusDecoratedWindowTheme.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NucleusDecoratedWindowTheme.kt similarity index 84% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NucleusDecoratedWindowTheme.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NucleusDecoratedWindowTheme.kt index 5f4d27824..52888c9e4 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/NucleusDecoratedWindowTheme.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/NucleusDecoratedWindowTheme.kt @@ -1,20 +1,20 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowColors -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowMetrics -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowColors +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowMetrics +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle val LocalIsDarkTheme = androidx.compose.runtime.staticCompositionLocalOf { true } diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarCore.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarCore.kt similarity index 98% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarCore.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarCore.kt index f2f39eacb..0ab7476eb 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarCore.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarCore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -41,9 +41,9 @@ import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.offset -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive import kotlin.math.max diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarLinuxCommon.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarLinuxCommon.kt similarity index 79% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarLinuxCommon.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarLinuxCommon.kt index 9533d3398..7aa0d1c13 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarLinuxCommon.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarLinuxCommon.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.linux.LinuxButtonLayout +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.linux.LinuxButtonLayout @Composable fun createLinuxTitleBarStyle(style: TitleBarStyle): TitleBarStyle = diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarModifiers.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarModifiers.kt similarity index 96% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarModifiers.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarModifiers.kt index e45b9e3b1..38e6477cf 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBarModifiers.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBarModifiers.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.ui.Modifier import androidx.compose.ui.node.ModifierNodeElement @@ -69,7 +69,7 @@ fun Modifier.hasNewFullscreenControls(): Boolean = * - **JBR**: installs a hidden NSToolbar via JBR's CustomTitleBar so AppKit * applies the larger corner-radius style. * - **JNI**: same NSToolbar install path via the JNI bridge. - * - **Tao**: alternative path is the [io.github.kdroidfilter.nucleus.window.tao.MacOSStyle] + * - **Tao**: alternative path is the [dev.nucleusframework.nucleus.window.tao.MacOSStyle] * enum on `openDecoratedWindow`; the modifier is read by tao's TitleBar for * parity but the window-creation enum takes precedence. * diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Close.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Close.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Close.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Close.kt index 1c9e7087e..56791a2af 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Close.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Close.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.Close: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseDark.kt index 098cb18ef..70854b0ee 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.CloseDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHover.kt index 47739c1e4..88409f848 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.CloseHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHoverDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHoverDark.kt index 2d8604cc4..7e41c7d50 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseHoverDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.CloseHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactive.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactive.kt index 2b69f9450..abb5a2898 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.CloseInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt index 79ae285f8..b0091625a 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/CloseInactiveDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.CloseInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressed.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressed.kt index b72802bcc..74b9d8a22 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.ClosePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressedDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressedDark.kt index 734f0d65d..a0298733c 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/ClosePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/ClosePressedDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.ClosePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt new file mode 100644 index 000000000..c57f92d82 --- /dev/null +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt @@ -0,0 +1,3 @@ +package dev.nucleusframework.nucleus.window.icons.linux.gnome + +object GnomeControlButtonsIcons diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Maximize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Maximize.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Maximize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Maximize.kt index 4fa4b3f27..3c27684db 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Maximize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Maximize.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.Maximize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeDark.kt index 992426dc1..eab3ad6ca 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHover.kt index b0e92f3b8..09e2449d0 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizeHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt index 6a93a2520..df336ffa9 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeHoverDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizeHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactive.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactive.kt index 09242253c..1fed374e4 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt index 397d084db..55733f31a 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizeInactiveDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizeInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressed.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressed.kt index b428e92d4..f793ba6fc 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt index baf0b8306..951169a46 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MaximizePressedDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MaximizePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Minimize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Minimize.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Minimize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Minimize.kt index 822ebfeb3..42f65aa71 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Minimize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Minimize.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.Minimize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeDark.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeDark.kt index 3b5cfa0f1..d6999c5d8 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHover.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHover.kt index c22542317..6739fab92 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHover.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizeHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt index 89870d66b..a48575752 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeHoverDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizeHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactive.kt similarity index 86% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactive.kt index aceec69a3..925cdc18c 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactive.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt similarity index 86% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt index e26eb9283..d45837ab0 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizeInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizeInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressed.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressed.kt index 934e22d06..13abefa0a 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressed.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt index 19c0fcbe7..15d841488 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/MinimizePressedDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.MinimizePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Restore.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Restore.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Restore.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Restore.kt index bec21dc69..435646104 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/Restore.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/Restore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.Restore: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreDark.kt index 567d63cc0..2cda6fc4d 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestoreDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHover.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHover.kt index 97a7122f5..6fdf85660 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestoreHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt index 895396154..d4602d0f0 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreHoverDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestoreHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactive.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactive.kt index 75a36d75e..0abb95b6d 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestoreInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt index 81d20165b..7b5a15927 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestoreInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestoreInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressed.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressed.kt index 644767a8b..19b9a6af5 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestorePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressedDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressedDark.kt index 526c11b8f..54abdec03 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/RestorePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/gnome/RestorePressedDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome +package dev.nucleusframework.nucleus.window.icons.linux.gnome import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.gnome.GnomeControlButtonsIcons val GnomeControlButtonsIcons.RestorePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Close.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Close.kt similarity index 87% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Close.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Close.kt index 3ffa995fe..a3606a535 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Close.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Close.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.Close: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseDark.kt index f34709fbf..512eb1ce3 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.CloseDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHover.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHover.kt index ac5213cb4..b5e30253f 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.CloseHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHoverFocused.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHoverFocused.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHoverFocused.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHoverFocused.kt index 4b1725d59..e3b9dfbf9 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseHoverFocused.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseHoverFocused.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.CloseHoverFocused: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactive.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactive.kt index d3bdc7a22..85ebfe553 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.CloseInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactiveDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactiveDark.kt index 7c953047f..a61dd8621 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/CloseInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/CloseInactiveDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.CloseInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressed.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressed.kt index ad67def73..20a94c58b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.ClosePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressedFocused.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressedFocused.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressedFocused.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressedFocused.kt index 67280b12c..3a45f7049 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/ClosePressedFocused.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/ClosePressedFocused.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.ClosePressedFocused: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt new file mode 100644 index 000000000..612ac7704 --- /dev/null +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt @@ -0,0 +1,3 @@ +package dev.nucleusframework.nucleus.window.icons.linux.kde + +object KdeControlButtonsIcons diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Maximize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Maximize.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Maximize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Maximize.kt index a72882abd..3089064bc 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Maximize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Maximize.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.Maximize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeDark.kt index 293479a7a..37634fb79 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHover.kt index e88298b29..28c84c9b1 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizeHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt index 6cc6273b0..4ebe94202 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeHoverDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizeHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeInactive.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeInactive.kt index a640b5545..3283ef560 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizeInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressed.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressed.kt index 311277f3c..b9c539a0f 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressedDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressedDark.kt index 3c82c7ada..f6fdd7abb 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MaximizePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MaximizePressedDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MaximizePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Minimize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Minimize.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Minimize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Minimize.kt index e73c1e16f..530905a1b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Minimize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Minimize.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.Minimize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeDark.kt index 3f8f57bab..32ccbe690 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHover.kt index aec57cc91..d427d8c1e 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizeHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt index c7eb40db3..b4167ce72 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeHoverDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizeHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeInactive.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeInactive.kt index 397b8cd07..245b8955b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizeInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressed.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressed.kt index f2ab64238..218eeb07a 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressedDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressedDark.kt index d618a3601..44a72b5e5 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/MinimizePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/MinimizePressedDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.MinimizePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Restore.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Restore.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Restore.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Restore.kt index 98e0c3d34..8301917a2 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/Restore.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/Restore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.Restore: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreDark.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreDark.kt index e0f69d92a..8f22116cf 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestoreDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHover.kt index ca7233aca..486497f25 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestoreHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHoverDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHoverDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHoverDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHoverDark.kt index 9d6d57e77..c1165f8c2 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreHoverDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreHoverDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestoreHoverDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreInactive.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreInactive.kt index abc7117a8..3ec850011 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestoreInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestoreInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestoreInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressed.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressed.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressed.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressed.kt index 0cc3596f1..9f711fd89 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressed.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressed.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestorePressed: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressedDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressedDark.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressedDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressedDark.kt index 2c2c52359..fa9b4bae9 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/RestorePressedDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/linux/kde/RestorePressedDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde +package dev.nucleusframework.nucleus.window.icons.linux.kde import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.KdeControlButtonsIcons +import dev.nucleusframework.nucleus.window.icons.linux.kde.KdeControlButtonsIcons val KdeControlButtonsIcons.RestorePressedDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Close.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Close.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Close.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Close.kt index e33da5490..f15d69d29 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Close.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Close.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.Close: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseDark.kt similarity index 89% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseDark.kt index 2651f968f..363d56f1b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreen.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreen.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreen.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreen.kt index a87089811..b74e22670 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreen.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreen.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseFullscreen: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenDark.kt index 1e84026b9..32f03c355 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseFullscreenDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactive.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactive.kt index 16c2660b1..24370cc45 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactive.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseFullscreenInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt index 7a6a32a23..0e5c276f0 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseFullscreenInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseFullscreenInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseHover.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseHover.kt similarity index 91% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseHover.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseHover.kt index 344e39a01..3b0f78669 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseHover.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseHover.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseHover: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactive.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactive.kt index eb4aa2e18..ddd1c89cc 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactive.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactiveDark.kt similarity index 90% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactiveDark.kt index f8086056a..92a6c5e4b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/CloseInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/CloseInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.CloseInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Maximize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Maximize.kt similarity index 87% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Maximize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Maximize.kt index 3d9a8fdb7..d50831bd5 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Maximize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Maximize.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.Maximize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeDark.kt index 99ff5cf90..936a6a50d 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MaximizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactive.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactive.kt index 331fb4073..d1845fd5e 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactive.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MaximizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactiveDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactiveDark.kt index d1f7f4775..465c25835 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MaximizeInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MaximizeInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MaximizeInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Minimize.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Minimize.kt similarity index 87% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Minimize.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Minimize.kt index 2b7cf8869..6e9c18ec5 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Minimize.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Minimize.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.Minimize: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeDark.kt similarity index 87% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeDark.kt index 9d6b43c7a..6f8cceff0 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MinimizeDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactive.kt similarity index 87% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactive.kt index 2f8a6b7b3..365ff8468 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactive.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MinimizeInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactiveDark.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactiveDark.kt index bc065ebf0..70c95a69f 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/MinimizeInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/MinimizeInactiveDark.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.MinimizeInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Restore.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Restore.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Restore.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Restore.kt index c4093a06f..adff53c86 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/Restore.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/Restore.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.Restore: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreDark.kt similarity index 92% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreDark.kt index 2c347a594..b0ef813ec 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.RestoreDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactive.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactive.kt similarity index 93% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactive.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactive.kt index bd1bf0327..da4532115 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactive.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactive.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.RestoreInactive: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactiveDark.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactiveDark.kt similarity index 93% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactiveDark.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactiveDark.kt index 1d1ab7bdb..f5e1789b7 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/RestoreInactiveDark.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/RestoreInactiveDark.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows +package dev.nucleusframework.nucleus.window.icons.windows import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathFillType @@ -6,7 +6,7 @@ import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons val WindowsControlButtonIcons.RestoreInactiveDark: ImageVector get() { diff --git a/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/WindowsControlButtonIcons.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/WindowsControlButtonIcons.kt new file mode 100644 index 000000000..526f7e17c --- /dev/null +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/icons/windows/WindowsControlButtonIcons.kt @@ -0,0 +1,3 @@ +package dev.nucleusframework.nucleus.window.icons.windows + +object WindowsControlButtonIcons diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/ColorUtils.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/ColorUtils.kt similarity index 86% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/ColorUtils.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/ColorUtils.kt index 3d45d5956..f8afef63b 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/ColorUtils.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/ColorUtils.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.internal +package dev.nucleusframework.nucleus.window.internal import androidx.compose.ui.graphics.Color diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/InsideBorderModifier.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/InsideBorderModifier.kt similarity index 95% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/InsideBorderModifier.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/InsideBorderModifier.kt index 0438e36fd..cdc469ee6 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/internal/InsideBorderModifier.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/internal/InsideBorderModifier.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.internal +package dev.nucleusframework.nucleus.window.internal import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/DecoratedWindowStyling.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/DecoratedWindowStyling.kt similarity index 83% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/DecoratedWindowStyling.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/DecoratedWindowStyling.kt index ee70ed707..7c0ca12c4 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/DecoratedWindowStyling.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/DecoratedWindowStyling.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.styling +package dev.nucleusframework.nucleus.window.styling import androidx.compose.runtime.Composable import androidx.compose.runtime.State @@ -7,7 +7,7 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.DecoratedWindowState data class DecoratedWindowStyle( val colors: DecoratedWindowColors, @@ -34,6 +34,6 @@ data class DecoratedWindowMetrics( val LocalDecoratedWindowStyle = staticCompositionLocalOf { - io.github.kdroidfilter.nucleus.window.DecoratedWindowDefaults + dev.nucleusframework.nucleus.window.DecoratedWindowDefaults .darkWindowStyle() } diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/TitleBarStyling.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/TitleBarStyling.kt similarity index 88% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/TitleBarStyling.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/TitleBarStyling.kt index 4f1a7ef66..355827eed 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/styling/TitleBarStyling.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/styling/TitleBarStyling.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.styling +package dev.nucleusframework.nucleus.window.styling import androidx.compose.runtime.Composable import androidx.compose.runtime.State @@ -8,7 +8,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.DecoratedWindowState data class TitleBarStyle( val colors: TitleBarColors, @@ -41,6 +41,6 @@ data class TitleBarMetrics( val LocalTitleBarStyle = staticCompositionLocalOf { - io.github.kdroidfilter.nucleus.window.DecoratedWindowDefaults + dev.nucleusframework.nucleus.window.DecoratedWindowDefaults .darkTitleBarStyle() } diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxButtonLayout.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxButtonLayout.kt similarity index 96% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxButtonLayout.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxButtonLayout.kt index f62e96550..c59c68a26 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxButtonLayout.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxButtonLayout.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window.utils.linux +package dev.nucleusframework.nucleus.window.utils.linux import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.NativeLayoutDirectionBridge +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.NativeLayoutDirectionBridge import java.util.function.Consumer /** diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt similarity index 93% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt index 499191dc5..8e3bc823f 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/LinuxTitleBarIconSet.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.window.utils.linux +package dev.nucleusframework.nucleus.window.utils.linux import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.rememberVectorPainter -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.LocalIsDarkTheme -import io.github.kdroidfilter.nucleus.window.icons.linux.gnome.* -import io.github.kdroidfilter.nucleus.window.icons.linux.kde.* +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.LocalIsDarkTheme +import dev.nucleusframework.nucleus.window.icons.linux.gnome.* +import dev.nucleusframework.nucleus.window.icons.linux.kde.* data class LinuxTitleBarIconSet( val close: Painter, diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt similarity index 61% rename from decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt rename to decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt index 4e68bef22..5ec69a401 100644 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt +++ b/decorated-window-core/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/WindowsTitleBarIconSet.kt @@ -1,31 +1,31 @@ -package io.github.kdroidfilter.nucleus.window.utils.windows +package dev.nucleusframework.nucleus.window.utils.windows import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.rememberVectorPainter -import io.github.kdroidfilter.nucleus.window.LocalIsDarkTheme -import io.github.kdroidfilter.nucleus.window.icons.windows.Close -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreen -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseHover -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Maximize -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeDark -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Minimize -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeDark -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Restore -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreDark -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.LocalIsDarkTheme +import dev.nucleusframework.nucleus.window.icons.windows.Close +import dev.nucleusframework.nucleus.window.icons.windows.CloseDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreen +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenInactive +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseHover +import dev.nucleusframework.nucleus.window.icons.windows.CloseInactive +import dev.nucleusframework.nucleus.window.icons.windows.CloseInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Maximize +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeDark +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeInactive +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Minimize +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeDark +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeInactive +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Restore +import dev.nucleusframework.nucleus.window.icons.windows.RestoreDark +import dev.nucleusframework.nucleus.window.icons.windows.RestoreInactive +import dev.nucleusframework.nucleus.window.icons.windows.RestoreInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons data class WindowsTitleBarIconSet( val close: Painter, diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt b/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt deleted file mode 100644 index d4c2d472a..000000000 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/gnome/GnomeControlButtonsIcons.kt +++ /dev/null @@ -1,3 +0,0 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.gnome - -object GnomeControlButtonsIcons diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt b/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt deleted file mode 100644 index 0be95b2fb..000000000 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/linux/kde/KdeControlButtonsIcons.kt +++ /dev/null @@ -1,3 +0,0 @@ -package io.github.kdroidfilter.nucleus.window.icons.linux.kde - -object KdeControlButtonsIcons diff --git a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/WindowsControlButtonIcons.kt b/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/WindowsControlButtonIcons.kt deleted file mode 100644 index 23de4f7b6..000000000 --- a/decorated-window-core/src/main/kotlin/io/github/kdroidfilter/nucleus/window/icons/windows/WindowsControlButtonIcons.kt +++ /dev/null @@ -1,3 +0,0 @@ -package io.github.kdroidfilter.nucleus.window.icons.windows - -object WindowsControlButtonIcons diff --git a/decorated-window-core/src/main/native/linux/nucleus_layout_direction_linux.c b/decorated-window-core/src/main/native/linux/nucleus_layout_direction_linux.c index 06b947a4d..ea477f538 100644 --- a/decorated-window-core/src/main/native/linux/nucleus_layout_direction_linux.c +++ b/decorated-window-core/src/main/native/linux/nucleus_layout_direction_linux.c @@ -107,7 +107,7 @@ static int detect_rtl_via_locale(void) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -177,7 +177,7 @@ static char *readGnomeButtonLayout(void) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeGetButtonLayout( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeGetButtonLayout( JNIEnv *env, jclass clazz) { (void)clazz; @@ -224,7 +224,7 @@ static void notify_button_layout(const char *layout) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/window/NativeLayoutDirectionBridge"); + "dev/nucleusframework/nucleus/window/NativeLayoutDirectionBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onButtonLayoutChanged", "(Ljava/lang/String;)V"); @@ -358,7 +358,7 @@ static void *button_layout_monitor_thread(void *arg) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeStartButtonLayoutObserving( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeStartButtonLayoutObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -369,7 +369,7 @@ Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeSta } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeStopButtonLayoutObserving( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeStopButtonLayoutObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/decorated-window-core/src/main/native/macos/NucleusLayoutDirectionBridge.m b/decorated-window-core/src/main/native/macos/NucleusLayoutDirectionBridge.m index 9537295b2..923a20441 100644 --- a/decorated-window-core/src/main/native/macos/NucleusLayoutDirectionBridge.m +++ b/decorated-window-core/src/main/native/macos/NucleusLayoutDirectionBridge.m @@ -2,7 +2,7 @@ #include JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( JNIEnv *env, jclass clazz) { @autoreleasepool { NSString *language = [[NSLocale preferredLanguages] firstObject]; diff --git a/decorated-window-core/src/main/native/windows/nucleus_layout_direction_windows.c b/decorated-window-core/src/main/native/windows/nucleus_layout_direction_windows.c index de822113e..8fb5cacfb 100644 --- a/decorated-window-core/src/main/native/windows/nucleus_layout_direction_windows.c +++ b/decorated-window-core/src/main/native/windows/nucleus_layout_direction_windows.c @@ -22,7 +22,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( +Java_dev_nucleusframework_nucleus_window_NativeLayoutDirectionBridge_nativeIsRTL( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/decorated-window-core/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-core/reachability-metadata.json b/decorated-window-core/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-core/reachability-metadata.json similarity index 86% rename from decorated-window-core/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-core/reachability-metadata.json rename to decorated-window-core/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-core/reachability-metadata.json index d04bde841..ac1295b3e 100644 --- a/decorated-window-core/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-core/reachability-metadata.json +++ b/decorated-window-core/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-core/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.window.NativeLayoutDirectionBridge", + "type": "dev.nucleusframework.nucleus.window.NativeLayoutDirectionBridge", "jniAccessible": true, "methods": [ { diff --git a/decorated-window-jbr/build.gradle.kts b/decorated-window-jbr/build.gradle.kts index da7bc84d2..333e3d444 100644 --- a/decorated-window-jbr/build.gradle.kts +++ b/decorated-window-jbr/build.gradle.kts @@ -58,12 +58,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-jbr", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-jbr", publishVersion) pom { name.set("Nucleus Decorated Window JBR") description.set("JBR-based custom decorated window with native title bar for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -74,16 +74,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt similarity index 96% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt index 7500a67c4..ab4dd982e 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -10,7 +10,7 @@ import androidx.compose.ui.window.DialogWindow import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.rememberDialogState import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt similarity index 87% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt index 79f6e517f..06930ce79 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -9,9 +9,9 @@ import androidx.compose.ui.window.Window import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.internal.InstallMinimumSizeAfterCentering -import io.github.kdroidfilter.nucleus.window.internal.inflateToMinimumSize +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.internal.InstallMinimumSizeAfterCentering +import dev.nucleusframework.nucleus.window.internal.inflateToMinimumSize @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt similarity index 91% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt index 25bd1b619..5d5f76f46 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -11,8 +11,8 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.unit.dp import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import java.awt.event.MouseEvent @OptIn(ExperimentalComposeUiApi::class) diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt similarity index 85% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt index af774831d..eb43c4fe8 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -8,9 +8,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.WindowMouseEventEffect +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.WindowMouseEventEffect @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt similarity index 85% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt index 47624ae84..bd3d503bc 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -10,10 +10,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.window.internal.isDark -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.WindowMouseEventEffect +import dev.nucleusframework.nucleus.window.internal.isDark +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.WindowMouseEventEffect @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt similarity index 87% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt index df254e6b8..3452c9d92 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -6,9 +6,9 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt similarity index 95% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt index 664b0e0da..fa0d01d17 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.ui.ExperimentalComposeUiApi @@ -10,7 +10,7 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.platform.LocalViewConfiguration import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import java.awt.Frame import java.awt.event.MouseEvent diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt similarity index 88% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt index 77594e758..f59ae257b 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -9,10 +9,10 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.WindowMouseEventEffect -import io.github.kdroidfilter.nucleus.window.utils.macos.MacUtil +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.WindowMouseEventEffect +import dev.nucleusframework.nucleus.window.utils.macos.MacUtil @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt similarity index 85% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt index df693338c..a54c82d00 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -10,10 +10,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.jetbrains.JBR -import io.github.kdroidfilter.nucleus.window.internal.isDark -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.WindowMouseEventEffect +import dev.nucleusframework.nucleus.window.internal.isDark +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.WindowMouseEventEffect @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt similarity index 88% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt index de43d200a..97e352db6 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle /** * Platform-aware title bar for [DecoratedWindow]. diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/ClientRegionHelper.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/ClientRegionHelper.kt similarity index 94% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/ClientRegionHelper.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/ClientRegionHelper.kt index 4a4665c59..b1b679637 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/ClientRegionHelper.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/ClientRegionHelper.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.utils +package dev.nucleusframework.nucleus.window.utils import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -14,10 +14,10 @@ import androidx.compose.ui.node.currentValueOf import androidx.compose.ui.platform.InspectorInfo import androidx.compose.ui.unit.toSize import com.jetbrains.WindowDecorations -import io.github.kdroidfilter.nucleus.window.AwtDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.LocalTitleBarInfo -import io.github.kdroidfilter.nucleus.window.TitleBarInfo +import dev.nucleusframework.nucleus.window.AwtDecoratedDialogScope +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.LocalTitleBarInfo +import dev.nucleusframework.nucleus.window.TitleBarInfo import java.awt.Window import java.awt.event.MouseAdapter import java.awt.event.MouseEvent diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/MacUtil.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/MacUtil.kt similarity index 97% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/MacUtil.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/MacUtil.kt index f8e112a94..8af6ae75c 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/MacUtil.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/MacUtil.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.utils.macos +package dev.nucleusframework.nucleus.window.utils.macos import java.awt.Component import java.awt.Window diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/NativeMacBridge.kt b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/NativeMacBridge.kt similarity index 74% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/NativeMacBridge.kt rename to decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/NativeMacBridge.kt index 41f5b06ba..e9a4283a7 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/NativeMacBridge.kt +++ b/decorated-window-jbr/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/NativeMacBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.utils.macos +package dev.nucleusframework.nucleus.window.utils.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_macos" diff --git a/decorated-window-jbr/src/main/native/macos/NucleusMacBridge.m b/decorated-window-jbr/src/main/native/macos/NucleusMacBridge.m index fece2ef6b..2a6962544 100644 --- a/decorated-window-jbr/src/main/native/macos/NucleusMacBridge.m +++ b/decorated-window-jbr/src/main/native/macos/NucleusMacBridge.m @@ -2,7 +2,7 @@ #include JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_NativeMacBridge_nativeUpdateColors( +Java_dev_nucleusframework_nucleus_window_utils_macos_NativeMacBridge_nativeUpdateColors( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; NSWindow *window = (__bridge NSWindow *)(void *)nsWindowPtr; @@ -17,7 +17,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_NativeMacBridge_nativeUpdateFullScreenButtons( +Java_dev_nucleusframework_nucleus_window_utils_macos_NativeMacBridge_nativeUpdateFullScreenButtons( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; NSWindow *window = (__bridge NSWindow *)(void *)nsWindowPtr; diff --git a/decorated-window-jewel/build.gradle.kts b/decorated-window-jewel/build.gradle.kts index 76f7f6795..fe9ba0b0d 100644 --- a/decorated-window-jewel/build.gradle.kts +++ b/decorated-window-jewel/build.gradle.kts @@ -38,12 +38,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-jewel", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-jewel", publishVersion) pom { name.set("Nucleus Jewel Decorated Window") description.set("Jewel (IntelliJ theme) integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -54,16 +54,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelColorMapping.kt b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelColorMapping.kt similarity index 76% rename from decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelColorMapping.kt rename to decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelColorMapping.kt index f7ba8458d..c5e9a384c 100644 --- a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelColorMapping.kt +++ b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelColorMapping.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.window.jewel +package dev.nucleusframework.nucleus.window.jewel import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowColors -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowMetrics -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowColors +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowMetrics +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import org.jetbrains.jewel.foundation.theme.JewelTheme private const val INACTIVE_BORDER_ALPHA = 0.5f diff --git a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedDialog.kt b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedDialog.kt similarity index 85% rename from decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedDialog.kt rename to decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedDialog.kt index 704746be7..ad4e53f1a 100644 --- a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedDialog.kt +++ b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedDialog.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.window.jewel +package dev.nucleusframework.nucleus.window.jewel import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.rememberDialogState -import io.github.kdroidfilter.nucleus.window.DecoratedDialog -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.DecoratedDialog +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme import org.jetbrains.jewel.foundation.theme.JewelTheme @Suppress("FunctionNaming", "LongParameterList") diff --git a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedWindow.kt b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedWindow.kt similarity index 87% rename from decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedWindow.kt rename to decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedWindow.kt index f5e2fc96f..102880a46 100644 --- a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDecoratedWindow.kt +++ b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.jewel +package dev.nucleusframework.nucleus.window.jewel import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.luminance @@ -8,14 +8,14 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.NucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindow -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.application.NucleusApplicationScope +import dev.nucleusframework.nucleus.application.NucleusDecoratedWindowScope +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindow +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import org.jetbrains.jewel.foundation.theme.JewelTheme -import io.github.kdroidfilter.nucleus.application.DecoratedWindow as NucleusDecoratedWindowFn +import dev.nucleusframework.nucleus.application.DecoratedWindow as NucleusDecoratedWindowFn private const val LUMINANCE_THRESHOLD = 0.5f diff --git a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDialogTitleBar.kt b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDialogTitleBar.kt similarity index 65% rename from decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDialogTitleBar.kt rename to decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDialogTitleBar.kt index 61c52f4da..6af3781a1 100644 --- a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelDialogTitleBar.kt +++ b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelDialogTitleBar.kt @@ -1,16 +1,16 @@ -package io.github.kdroidfilter.nucleus.window.jewel +package dev.nucleusframework.nucleus.window.jewel import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.DialogTitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.DialogTitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import org.jetbrains.jewel.foundation.theme.LocalContentColor @Suppress("FunctionNaming") diff --git a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelTitleBar.kt b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelTitleBar.kt similarity index 67% rename from decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelTitleBar.kt rename to decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelTitleBar.kt index 1004fb60d..155fd8313 100644 --- a/decorated-window-jewel/src/main/kotlin/io/github/kdroidfilter/nucleus/window/jewel/JewelTitleBar.kt +++ b/decorated-window-jewel/src/main/kotlin/dev/nucleusframework/nucleus/window/jewel/JewelTitleBar.kt @@ -1,16 +1,16 @@ -package io.github.kdroidfilter.nucleus.window.jewel +package dev.nucleusframework.nucleus.window.jewel import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle import org.jetbrains.jewel.foundation.theme.LocalContentColor @Suppress("FunctionNaming") diff --git a/decorated-window-jni/build.gradle.kts b/decorated-window-jni/build.gradle.kts index eb3c45be6..f7455b444 100644 --- a/decorated-window-jni/build.gradle.kts +++ b/decorated-window-jni/build.gradle.kts @@ -83,12 +83,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-jni", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-jni", publishVersion) pom { name.set("Nucleus Decorated Window JNI") description.set("JBR-free custom decorated window with native title bar for Compose Desktop (via JNI)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -99,16 +99,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt similarity index 95% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt index ef744bbf9..220811b0e 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedDialog.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -9,7 +9,7 @@ import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.DialogWindow import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.rememberDialogState -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt similarity index 97% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt index 1676af809..543791332 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DecoratedWindow.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween @@ -33,12 +33,12 @@ import androidx.compose.ui.window.WindowPlacement import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.internal.InstallMinimumSizeAfterCentering -import io.github.kdroidfilter.nucleus.window.internal.inflateToMinimumSize -import io.github.kdroidfilter.nucleus.window.utils.linux.JniLinuxWindowBridge -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsWindowUtil +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.internal.InstallMinimumSizeAfterCentering +import dev.nucleusframework.nucleus.window.internal.inflateToMinimumSize +import dev.nucleusframework.nucleus.window.utils.linux.JniLinuxWindowBridge +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsWindowUtil import java.awt.Frame import java.awt.GraphicsEnvironment import java.awt.Toolkit diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt similarity index 95% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt index ab5c86f2c..51effb80c 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Linux.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Linux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -12,9 +12,9 @@ import androidx.compose.ui.input.pointer.PointerEventPass import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.linux.JniLinuxWindowBridge +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.linux.JniLinuxWindowBridge import java.awt.MouseInfo @OptIn(ExperimentalComposeUiApi::class) diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt similarity index 85% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt index 480dc7244..213c46fc2 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.MacOS.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.MacOS.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -8,10 +8,10 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.macos.JniMacTitleBarBridge -import io.github.kdroidfilter.nucleus.window.utils.macos.JniMacWindowUtil +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.macos.JniMacTitleBarBridge +import dev.nucleusframework.nucleus.window.utils.macos.JniMacWindowUtil @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt similarity index 85% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt index a15078c23..e95d40c49 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.Windows.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.Windows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -10,10 +10,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsWindowUtil +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsWindowUtil @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt similarity index 87% rename from decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt index df254e6b8..3452c9d92 100644 --- a/decorated-window-jbr/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -6,9 +6,9 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt similarity index 97% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt index c089a1197..a5c15f489 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Linux.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Linux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -14,8 +14,8 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.linux.JniLinuxWindowBridge +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.linux.JniLinuxWindowBridge import java.awt.Frame import java.awt.MouseInfo diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt similarity index 97% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt index b911a1a81..bc2a7968b 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.MacOS.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.MacOS.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween @@ -24,10 +24,10 @@ import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.macos.JniMacTitleBarBridge -import io.github.kdroidfilter.nucleus.window.utils.macos.JniMacWindowUtil +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.macos.JniMacTitleBarBridge +import dev.nucleusframework.nucleus.window.utils.macos.JniMacWindowUtil import kotlinx.coroutines.isActive import kotlin.coroutines.coroutineContext diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt similarity index 96% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt index 8986f480f..be4afea63 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.Windows.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.Windows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -18,10 +18,10 @@ import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge -import io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsWindowUtil +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge +import dev.nucleusframework.nucleus.window.utils.windows.JniWindowsWindowUtil import java.awt.Frame @OptIn(ExperimentalComposeUiApi::class) diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt similarity index 90% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt index 28b0eeffe..49c8a74f0 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle /** * Platform-aware title bar for [DecoratedWindow]. diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/JniLinuxWindowBridge.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/JniLinuxWindowBridge.kt similarity index 89% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/JniLinuxWindowBridge.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/JniLinuxWindowBridge.kt index 7b9c32cdf..2ecba9e57 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/linux/JniLinuxWindowBridge.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/linux/JniLinuxWindowBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.utils.linux +package dev.nucleusframework.nucleus.window.utils.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_linux_jni" diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacTitleBarBridge.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacTitleBarBridge.kt similarity index 97% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacTitleBarBridge.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacTitleBarBridge.kt index 06007c331..12142bd25 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacTitleBarBridge.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacTitleBarBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.utils.macos +package dev.nucleusframework.nucleus.window.utils.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import java.util.concurrent.ConcurrentHashMap diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacWindowUtil.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacWindowUtil.kt similarity index 98% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacWindowUtil.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacWindowUtil.kt index 09e9b730d..800fbbc7f 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/macos/JniMacWindowUtil.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/macos/JniMacWindowUtil.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.utils.macos +package dev.nucleusframework.nucleus.window.utils.macos import java.awt.Component import java.awt.Window diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt similarity index 96% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt index 056c3ef7c..16b967158 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsDecorationBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.utils.windows +package dev.nucleusframework.nucleus.window.utils.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_windows_decoration" diff --git a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsWindowUtil.kt b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsWindowUtil.kt similarity index 88% rename from decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsWindowUtil.kt rename to decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsWindowUtil.kt index e00ed0799..aa66d7383 100644 --- a/decorated-window-jni/src/main/kotlin/io/github/kdroidfilter/nucleus/window/utils/windows/JniWindowsWindowUtil.kt +++ b/decorated-window-jni/src/main/kotlin/dev/nucleusframework/nucleus/window/utils/windows/JniWindowsWindowUtil.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.utils.windows +package dev.nucleusframework.nucleus.window.utils.windows import java.awt.Window diff --git a/decorated-window-jni/src/main/native/linux/nucleus_linux_window.c b/decorated-window-jni/src/main/native/linux/nucleus_linux_window.c index 539bf6aeb..d7d0603c0 100644 --- a/decorated-window-jni/src/main/native/linux/nucleus_linux_window.c +++ b/decorated-window-jni/src/main/native/linux/nucleus_linux_window.c @@ -178,7 +178,7 @@ static void awtUnlock(JNIEnv *env) { /* move. This gives us snap/tile support and native drag feel. */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeStartWindowMove( +Java_dev_nucleusframework_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeStartWindowMove( JNIEnv *env, jclass clazz, jobject awtWindow, jint rootX, jint rootY, jint button) { Display *display = getAwtDisplay(env); @@ -251,7 +251,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nati /* _NET_WM_STATE ClientMessage to the root window. */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeSetFullscreen( +Java_dev_nucleusframework_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeSetFullscreen( JNIEnv *env, jclass clazz, jobject awtWindow, jboolean fullscreen) { Display *display = getAwtDisplay(env); @@ -294,7 +294,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nati /* Checks if _NET_WM_STATE_FULLSCREEN is set on the window. */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeIsFullscreen( +Java_dev_nucleusframework_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeIsFullscreen( JNIEnv *env, jclass clazz, jobject awtWindow) { Display *display = getAwtDisplay(env); @@ -342,7 +342,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nati /* Checks if the WM advertises _NET_WM_MOVERESIZE in _NET_SUPPORTED. */ /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeIsWmMoveResizeSupported( +Java_dev_nucleusframework_nucleus_window_utils_linux_JniLinuxWindowBridge_nativeIsWmMoveResizeSupported( JNIEnv *env, jclass clazz, jobject awtWindow) { Display *display = getAwtDisplay(env); diff --git a/decorated-window-jni/src/main/native/macos/JniMacTitleBar.m b/decorated-window-jni/src/main/native/macos/JniMacTitleBar.m index 83f28039a..70d05999f 100644 --- a/decorated-window-jni/src/main/native/macos/JniMacTitleBar.m +++ b/decorated-window-jni/src/main/native/macos/JniMacTitleBar.m @@ -67,7 +67,7 @@ static void ensureJVMCached(JNIEnv *env) { dispatch_once(&onceToken, ^{ (*env)->GetJavaVM(env, &sJVM); jclass local = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/window/utils/macos/JniMacTitleBarBridge"); + "dev/nucleusframework/nucleus/window/utils/macos/JniMacTitleBarBridge"); if (local) { sBridgeClass = (*env)->NewGlobalRef(env, local); (*env)->DeleteLocalRef(env, local); @@ -1021,13 +1021,13 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // ─── JNI exports ──────────────────────────────────────────────────────────────── JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeGetNSWindowPtr( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeGetNSWindowPtr( JNIEnv *env, jclass clazz, jobject awtWindow) { return getNSWindowPtrFromAWTWindow(env, awtWindow); } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeApplyTitleBar( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeApplyTitleBar( JNIEnv *env, jclass clazz, jlong nsWindowPtr, jfloat heightPt) { if (nsWindowPtr == 0) return 0.0f; @@ -1086,7 +1086,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeResetTitleBar( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeResetTitleBar( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1131,7 +1131,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // Called from Kotlin on each layout pass during fullscreen to keep // the replacement buttons positioned correctly. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeUpdateFullScreenButtons( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeUpdateFullScreenButtons( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1153,7 +1153,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // respecting the user's system preference (AppleActionOnDoubleClick). // Called from Compose when an unconsumed double-click is detected. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativePerformTitleBarDoubleClickAction( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativePerformTitleBarDoubleClickAction( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1181,7 +1181,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // Called from the EDT when Compose detects an unconsumed drag in the title bar. // This mirrors JBR's forceHitTest(false) path where Compose decides the drag. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeStartWindowDrag( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeStartWindowDrag( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1221,7 +1221,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // in fullscreen — mirroring Safari's fullscreen title bar behavior. // Also installs/removes the menu bar event monitor if already in fullscreen. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetNewFullscreenControls( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetNewFullscreenControls( JNIEnv *env, jclass clazz, jlong nsWindowPtr, jboolean enabled) { if (nsWindowPtr == 0) return; @@ -1253,7 +1253,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // Returns the last known menu bar offset in points. // Reads the value stored by the native event monitor (thread-safe). JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeGetMenuBarOffset( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeGetMenuBarOffset( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return 0.0f; @@ -1266,7 +1266,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // can position the traffic-light buttons at the same Y offset, // keeping native buttons and Compose title bar perfectly in sync. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetMenuBarOffset( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetMenuBarOffset( JNIEnv *env, jclass clazz, jlong nsWindowPtr, jfloat offsetPt) { if (nsWindowPtr == 0) return; @@ -1293,7 +1293,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // changes on every mouse event and notifies Kotlin via JNI callback. // Event-driven: no timer, no polling. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeInstallMenuBarMonitor( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeInstallMenuBarMonitor( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1314,7 +1314,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // Removes the native event monitor and clears the stored raw offset. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeRemoveMenuBarMonitor( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeRemoveMenuBarMonitor( JNIEnv *env, jclass clazz, jlong nsWindowPtr) { if (nsWindowPtr == 0) return; @@ -1341,7 +1341,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // Also stores the preference so the fullscreen observer can manage the toolbar // around fullscreen transitions (remove before enter, reinstall after). JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetLargeCornerRadius( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetLargeCornerRadius( JNIEnv *env, jclass clazz, jlong nsWindowPtr, jboolean enabled) { if (nsWindowPtr == 0) return; @@ -1398,7 +1398,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // starts tearing down, to prevent notifyMenuBarOffsetChanged from calling // CallStaticVoidMethod on a half-destroyed JVM. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeShutdown( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeShutdown( JNIEnv *env, jclass clazz) { // Signal all pending dispatch_async blocks to bail out immediately. @@ -1429,7 +1429,7 @@ static jlong getNSWindowPtrFromAWTWindow(JNIEnv *env, jobject awtWindow) { // of the title bar, mirroring the layout for RTL locales (Hebrew, Arabic, etc.). // Re-applies constraints immediately so the change is visible without delay. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetRTL( +Java_dev_nucleusframework_nucleus_window_utils_macos_JniMacTitleBarBridge_nativeSetRTL( JNIEnv *env, jclass clazz, jlong nsWindowPtr, jboolean rtl) { if (nsWindowPtr == 0) return; diff --git a/decorated-window-jni/src/main/native/windows/nucleus_windows_decoration.c b/decorated-window-jni/src/main/native/windows/nucleus_windows_decoration.c index 99aff0a6a..54c508af7 100644 --- a/decorated-window-jni/src/main/native/windows/nucleus_windows_decoration.c +++ b/decorated-window-jni/src/main/native/windows/nucleus_windows_decoration.c @@ -528,14 +528,14 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { /* JNI exports */ /* ================================================================== */ -/* Package: io.github.kdroidfilter.nucleus.window.utils.windows */ +/* Package: dev.nucleusframework.nucleus.window.utils.windows */ /* Class: JniWindowsDecorationBridge */ /* -------------------------------------------------------------- */ /* nativeInstallDecoration(long hwnd, int titleBarHeightPx) */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeInstallDecoration( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeInstallDecoration( JNIEnv *env, jclass clazz, jlong hwndLong, jint titleBarHeightPx) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -605,7 +605,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* nativeUninstallDecoration(long hwnd) */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeUninstallDecoration( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeUninstallDecoration( JNIEnv *env, jclass clazz, jlong hwndLong) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -645,7 +645,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* nativeSetForceHitTestClient(long hwnd, boolean force) */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetForceHitTestClient( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetForceHitTestClient( JNIEnv *env, jclass clazz, jlong hwndLong, jboolean force) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -661,7 +661,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* nativeSetTitleBarHeight(long hwnd, int heightPx) */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetTitleBarHeight( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetTitleBarHeight( JNIEnv *env, jclass clazz, jlong hwndLong, jint heightPx) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -680,7 +680,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* title bar background. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeStartDrag( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeStartDrag( JNIEnv *env, jclass clazz, jlong hwndLong) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -702,7 +702,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* classes are accessible without --add-opens. */ /* -------------------------------------------------------------- */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeGetHwnd( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeGetHwnd( JNIEnv *env, jclass clazz, jobject awtWindow) { if (!awtWindow) return 0; @@ -830,7 +830,7 @@ static LRESULT CALLBACK dialogDecoWndProc( /* Windows 11 22000+ only; silently ignored on older Windows. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeApplyDialogStyle( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeApplyDialogStyle( JNIEnv *env, jclass clazz, jlong hwndLong) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -869,7 +869,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Exit: restores saved style/exstyle/placement. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetFullscreen( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetFullscreen( JNIEnv *env, jclass clazz, jlong hwndLong, jboolean fullscreen) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -982,7 +982,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Returns true if the window is in native fullscreen mode. */ /* -------------------------------------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeIsFullscreen( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeIsFullscreen( JNIEnv *env, jclass clazz, jlong hwndLong) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -1002,7 +1002,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Windows 10 build 17763+. Silently ignored on older versions. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetBackgroundColor( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetBackgroundColor( JNIEnv *env, jclass clazz, jlong hwndLong, jint argb) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -1040,7 +1040,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Returns debug counters as a string for diagnostics. */ /* -------------------------------------------------------------- */ JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeGetDebugInfo( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeGetDebugInfo( JNIEnv *env, jclass clazz, jlong hwndLong) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -1068,7 +1068,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Pass (0, 0) to disable the override and fall back to AWT. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetMinimumSize( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetMinimumSize( JNIEnv *env, jclass clazz, jlong hwndLong, jint widthPx, jint heightPx) { HWND hwnd = (HWND)(uintptr_t)hwndLong; @@ -1088,7 +1088,7 @@ Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBri /* Pass (0, 0) to disable the override and fall back to AWT. */ /* -------------------------------------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetMaximumSize( +Java_dev_nucleusframework_nucleus_window_utils_windows_JniWindowsDecorationBridge_nativeSetMaximumSize( JNIEnv *env, jclass clazz, jlong hwndLong, jint widthPx, jint heightPx) { HWND hwnd = (HWND)(uintptr_t)hwndLong; diff --git a/decorated-window-jni/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-jni/reachability-metadata.json b/decorated-window-jni/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-jni/reachability-metadata.json similarity index 82% rename from decorated-window-jni/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-jni/reachability-metadata.json rename to decorated-window-jni/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-jni/reachability-metadata.json index 980b11074..8c6a07bc1 100644 --- a/decorated-window-jni/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-jni/reachability-metadata.json +++ b/decorated-window-jni/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-jni/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.window.utils.macos.JniMacTitleBarBridge", + "type": "dev.nucleusframework.nucleus.window.utils.macos.JniMacTitleBarBridge", "jniAccessible": true, "methods": [ { @@ -14,7 +14,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge", + "type": "dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge", "jniAccessible": true, "methods": [ { diff --git a/decorated-window-material2/build.gradle.kts b/decorated-window-material2/build.gradle.kts index 8270205db..87d12dc60 100644 --- a/decorated-window-material2/build.gradle.kts +++ b/decorated-window-material2/build.gradle.kts @@ -37,12 +37,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-material2", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-material2", publishVersion) pom { name.set("Nucleus Material 2 Decorated Window") description.set("Material 2 integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -53,16 +53,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialColorMapping.kt b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialColorMapping.kt similarity index 74% rename from decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialColorMapping.kt rename to decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialColorMapping.kt index 26da08f5f..ac5a537ee 100644 --- a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialColorMapping.kt +++ b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialColorMapping.kt @@ -1,18 +1,18 @@ -package io.github.kdroidfilter.nucleus.window.material2 +package dev.nucleusframework.nucleus.window.material2 import androidx.compose.material.Colors import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowColors -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowMetrics -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowColors +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowMetrics +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle private const val BORDER_ALPHA = 0.12f private const val INACTIVE_BORDER_ALPHA = 0.06f diff --git a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedDialog.kt b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedDialog.kt similarity index 85% rename from decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedDialog.kt rename to decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedDialog.kt index bbff3974a..803030c94 100644 --- a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedDialog.kt +++ b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.material2 +package dev.nucleusframework.nucleus.window.material2 import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable @@ -6,9 +6,9 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.rememberDialogState -import io.github.kdroidfilter.nucleus.window.DecoratedDialog -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.DecoratedDialog +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedWindow.kt b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedWindow.kt similarity index 86% rename from decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedWindow.kt rename to decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedWindow.kt index 76f87eef6..4ffec1ee1 100644 --- a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDecoratedWindow.kt +++ b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.material2 +package dev.nucleusframework.nucleus.window.material2 import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable @@ -7,13 +7,13 @@ import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.unit.DpSize import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.NucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindow -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.application.DecoratedWindow as NucleusDecoratedWindow +import dev.nucleusframework.nucleus.application.NucleusApplicationScope +import dev.nucleusframework.nucleus.application.NucleusDecoratedWindowScope +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindow +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.application.DecoratedWindow as NucleusDecoratedWindow @Suppress("FunctionNaming", "LongParameterList") @Composable diff --git a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDialogTitleBar.kt b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDialogTitleBar.kt similarity index 64% rename from decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDialogTitleBar.kt rename to decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDialogTitleBar.kt index 19e5302ea..64560d8ff 100644 --- a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialDialogTitleBar.kt +++ b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialDialogTitleBar.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.window.material2 +package dev.nucleusframework.nucleus.window.material2 import androidx.compose.material.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.DialogTitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.DialogTitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialTitleBar.kt b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialTitleBar.kt similarity index 72% rename from decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialTitleBar.kt rename to decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialTitleBar.kt index 909b3e3be..830853c63 100644 --- a/decorated-window-material2/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material2/MaterialTitleBar.kt +++ b/decorated-window-material2/src/main/kotlin/dev/nucleusframework/nucleus/window/material2/MaterialTitleBar.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.window.material2 +package dev.nucleusframework.nucleus.window.material2 import androidx.compose.material.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle /** * Material 2 themed title bar. diff --git a/decorated-window-material3/build.gradle.kts b/decorated-window-material3/build.gradle.kts index bd60ac58c..711906853 100644 --- a/decorated-window-material3/build.gradle.kts +++ b/decorated-window-material3/build.gradle.kts @@ -38,12 +38,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-material3", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-material3", publishVersion) pom { name.set("Nucleus Material Decorated Window") description.set("Material 3 integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -54,16 +54,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialColorMapping.kt b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialColorMapping.kt similarity index 75% rename from decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialColorMapping.kt rename to decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialColorMapping.kt index 343256ca8..e24afa3ed 100644 --- a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialColorMapping.kt +++ b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialColorMapping.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.material +package dev.nucleusframework.nucleus.window.material import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable @@ -6,14 +6,14 @@ import androidx.compose.runtime.remember import androidx.compose.ui.graphics.luminance import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowColors -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowMetrics -import io.github.kdroidfilter.nucleus.window.styling.DecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowColors +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowMetrics +import dev.nucleusframework.nucleus.window.styling.DecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle private const val INACTIVE_BORDER_ALPHA = 0.5f private const val DARK_LUMINANCE_THRESHOLD = 0.5f diff --git a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedDialog.kt b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedDialog.kt similarity index 87% rename from decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedDialog.kt rename to decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedDialog.kt index d7787e93d..7f3238dc9 100644 --- a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedDialog.kt +++ b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.material +package dev.nucleusframework.nucleus.window.material import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -7,12 +7,12 @@ import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.rememberDialogState -import io.github.kdroidfilter.nucleus.application.NucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.AwtDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialog -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.application.DecoratedDialog as NucleusDecoratedDialog +import dev.nucleusframework.nucleus.application.NucleusApplicationScope +import dev.nucleusframework.nucleus.application.NucleusDecoratedDialogScope +import dev.nucleusframework.nucleus.window.AwtDecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialog +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.application.DecoratedDialog as NucleusDecoratedDialog /** AWT-backed (JBR / JNI) Material 3 wrapper for [DecoratedDialog]. */ @Suppress("FunctionNaming", "LongParameterList") diff --git a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedWindow.kt b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedWindow.kt similarity index 88% rename from decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedWindow.kt rename to decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedWindow.kt index b52d99726..b3c024f0e 100644 --- a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDecoratedWindow.kt +++ b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.material +package dev.nucleusframework.nucleus.window.material import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -8,13 +8,13 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.NucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindow -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.application.DecoratedWindow as NucleusDecoratedWindow +import dev.nucleusframework.nucleus.application.NucleusApplicationScope +import dev.nucleusframework.nucleus.application.NucleusDecoratedWindowScope +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindow +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.application.DecoratedWindow as NucleusDecoratedWindow /** * Material 3 wrapper around the AWT-based `DecoratedWindow` (JBR / JNI diff --git a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDialogTitleBar.kt b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDialogTitleBar.kt similarity index 64% rename from decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDialogTitleBar.kt rename to decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDialogTitleBar.kt index 0ba206383..01b1f0765 100644 --- a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialDialogTitleBar.kt +++ b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialDialogTitleBar.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.window.material +package dev.nucleusframework.nucleus.window.material import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.DialogTitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.DialogTitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle @Suppress("FunctionNaming") @Composable diff --git a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialTitleBar.kt b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialTitleBar.kt similarity index 72% rename from decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialTitleBar.kt rename to decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialTitleBar.kt index 6d06c6e69..38d021cd2 100644 --- a/decorated-window-material3/src/main/kotlin/io/github/kdroidfilter/nucleus/window/material/MaterialTitleBar.kt +++ b/decorated-window-material3/src/main/kotlin/dev/nucleusframework/nucleus/window/material/MaterialTitleBar.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.window.material +package dev.nucleusframework.nucleus.window.material import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle /** * Material 3 themed title bar. diff --git a/decorated-window-tao/build.gradle.kts b/decorated-window-tao/build.gradle.kts index 6d5c3732f..00fd74534 100644 --- a/decorated-window-tao/build.gradle.kts +++ b/decorated-window-tao/build.gradle.kts @@ -97,7 +97,7 @@ tasks.configureEach { // ── Maven publication ────────────────────────────────────────────────────── mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.decorated-window-tao", publishVersion) + coordinates("dev.nucleusframework", "nucleus.decorated-window-tao", publishVersion) pom { name.set("Nucleus Decorated Window Tao") @@ -105,7 +105,7 @@ mavenPublishing { "Experimental no-AWT decorated window backend for Compose Desktop, " + "powered by Tao via direct JNI for macOS, Windows, and Linux.", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -116,16 +116,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt similarity index 89% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt index 584dddd65..60810de28 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/DialogTitleBar.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/DialogTitleBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -25,21 +25,21 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.GenericTitleBarImpl -import io.github.kdroidfilter.nucleus.window.LocalControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.tao.LocalRequestedTitleBarHeight -import io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.utils.linux.linuxTitleBarIcons -import io.github.kdroidfilter.nucleus.window.utils.windows.windowsTitleBarIcons +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.GenericTitleBarImpl +import dev.nucleusframework.nucleus.window.LocalControlButtonsDirection +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.tao.LocalRequestedTitleBarHeight +import dev.nucleusframework.nucleus.window.tao.NativeMetalBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoBridge +import dev.nucleusframework.nucleus.window.tao.TaoDecoratedDialogScope +import dev.nucleusframework.nucleus.window.utils.linux.linuxTitleBarIcons +import dev.nucleusframework.nucleus.window.utils.windows.windowsTitleBarIcons private val WINDOWS_DLG_BUTTON_WIDTH: Dp = 46.dp @@ -195,7 +195,7 @@ private fun TitleBarScope.DialogWindowsCloseButton( @Composable private fun TitleBarScope.DialogLinuxCloseButton( onClick: () -> Unit, - state: io.github.kdroidfilter.nucleus.window.DecoratedWindowState, + state: dev.nucleusframework.nucleus.window.DecoratedWindowState, modifier: Modifier = Modifier, style: TitleBarStyle, ) { diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt similarity index 93% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt index 57711bb77..5a5930a5e 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/TitleBar.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/TitleBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window +package dev.nucleusframework.nucleus.window import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween @@ -31,27 +31,27 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.ControlButtonsDirection -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.GenericTitleBarImpl -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.hasMacOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.hasNewFullscreenControls -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.nucleus.window.tao.LocalFullscreenTitleBarHolder -import io.github.kdroidfilter.nucleus.window.tao.LocalRequestedClearColor -import io.github.kdroidfilter.nucleus.window.tao.LocalRequestedTitleBarHeight -import io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDecoBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow -import io.github.kdroidfilter.nucleus.window.tao.WindowControlsLinux -import io.github.kdroidfilter.nucleus.window.tao.WindowControlsWindows -import io.github.kdroidfilter.nucleus.window.utils.linux.rememberLinuxButtonLayout +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.ControlButtonsDirection +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.GenericTitleBarImpl +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.hasMacOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.hasNewFullscreenControls +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.nucleus.window.tao.LocalFullscreenTitleBarHolder +import dev.nucleusframework.nucleus.window.tao.LocalRequestedClearColor +import dev.nucleusframework.nucleus.window.tao.LocalRequestedTitleBarHeight +import dev.nucleusframework.nucleus.window.tao.NativeMetalBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDecoBridge +import dev.nucleusframework.nucleus.window.tao.TaoDecoratedWindowScope +import dev.nucleusframework.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.window.tao.WindowControlsLinux +import dev.nucleusframework.nucleus.window.tao.WindowControlsWindows +import dev.nucleusframework.nucleus.window.utils.linux.rememberLinuxButtonLayout import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/ApplicationScope.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/ApplicationScope.kt similarity index 91% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/ApplicationScope.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/ApplicationScope.kt index d42008fbe..72bc9dd73 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/ApplicationScope.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/ApplicationScope.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao /** * Scope exposed by [taoApplication]. Mirrors `androidx.compose.ui.window.ApplicationScope` diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedDialog.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedDialog.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedDialog.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedDialog.kt index 173e0dd00..8252cf4f9 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedDialog.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.layout.ColumnScope import androidx.compose.runtime.Composable @@ -14,8 +14,8 @@ import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.rememberDialogState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.DecoratedDialogState /** * Tao-backed equivalent of `decorated-window-jni`'s `DecoratedDialog`. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindow.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindow.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindow.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindow.kt index 06c442ef8..a69d91a15 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindow.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindow.kt @@ -1,6 +1,6 @@ @file:OptIn(androidx.compose.ui.InternalComposeUiApi::class) -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope @@ -14,15 +14,15 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.DpSize -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.LocalTitleBarInfo -import io.github.kdroidfilter.nucleus.window.TitleBarInfo -import io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoPopupHost -import io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHost -import io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostLinux -import io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostWindows +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.LocalTitleBarInfo +import dev.nucleusframework.nucleus.window.TitleBarInfo +import dev.nucleusframework.nucleus.window.tao.render.LocalTaoPopupHost +import dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHost +import dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostLinux +import dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostWindows /** * Holds the title-bar height (in dp / macOS points) currently requested by the @@ -349,7 +349,7 @@ private fun ApplicationScope.openDecoratedWindowLinux( LocalRequestedTitleBarHeight provides titleBarHeightState, LocalFullscreenTitleBarHolder provides fullscreenHolder, LocalTaoNativeViewHost provides host.nativeViewHost(), - io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoLinuxOverlayController + dev.nucleusframework.nucleus.window.tao.render.LocalTaoLinuxOverlayController provides host.overlayController(), // Override the default Skiko `URIManager` (calls // `Desktop.browse` → initialises XAWT → deadlocks our GLX @@ -544,7 +544,7 @@ private fun ApplicationScope.openDecoratedWindowWindows( LocalRequestedTitleBarHeight provides titleBarHeightState, LocalFullscreenTitleBarHolder provides fullscreenHolder, LocalTaoNativeViewHost provides host.nativeViewHost(), - io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoPopupHostWindows + dev.nucleusframework.nucleus.window.tao.render.LocalTaoPopupHostWindows provides host.popupHost(), ) { val border = diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindowComposable.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindowComposable.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindowComposable.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindowComposable.kt index e8ca4bfaa..ff21aeb93 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/DecoratedWindowComposable.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/DecoratedWindowComposable.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -17,7 +17,7 @@ import androidx.compose.ui.window.WindowPlacement import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform /** * Composable variant of [openDecoratedWindow]. API mirrors diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/FullscreenTitleBarHolder.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/FullscreenTitleBarHolder.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/FullscreenTitleBarHolder.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/FullscreenTitleBarHolder.kt index 7d2aa9dcb..847660ff5 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/FullscreenTitleBarHolder.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/FullscreenTitleBarHolder.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/MacOSStyle.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/MacOSStyle.kt similarity index 85% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/MacOSStyle.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/MacOSStyle.kt index cb47e3b48..d233f1959 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/MacOSStyle.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/MacOSStyle.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao /** * macOS visual treatment applied to a [DecoratedWindow] at construction. * - * Imperative counterpart of [io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius] + * Imperative counterpart of [dev.nucleusframework.nucleus.window.macOSLargeCornerRadius] * — the Modifier is the recommended path (works the same on jbr/jni/tao). * Tao defaults to [Classic] so the swap-in API behaves identically to the * AWT backends: opt in to the large corner radius via the Modifier on diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeMetalBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeMetalBridge.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeMetalBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeMetalBridge.kt index 9f49a7802..fe6e31b9a 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeMetalBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeMetalBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.window.tao.render.MetalFrame +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.window.tao.render.MetalFrame import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import java.util.concurrent.ConcurrentHashMap diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt similarity index 89% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt index 4cf858ba4..6ca7f7936 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoA11yWindowsBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * Loader stub for `nucleus_tao_a11y.dll` (Windows-only). diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoBridge.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoBridge.kt index 83ec664fc..60a775d35 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoEglBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoEglBridge.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoEglBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoEglBridge.kt index e1865cd1e..e2a27ec30 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoEglBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoEglBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_egl" @@ -12,7 +12,7 @@ private const val LIBRARY_NAME = "nucleus_tao_egl" * * Replaces [NativeTaoGlxBridge] on the path selected by the JVM system * property `nucleus.tao.linux.renderer = glx | egl` (see - * [io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostLinux]). + * [dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostLinux]). * * Phase 1 (this commit): X11 only. Wayland (`nativeAttachWayland`) and the * `wp_fractional_scale_v1` / `wp_viewporter` plumbing land in follow-ups. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoGlBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoGlBridge.kt similarity index 93% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoGlBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoGlBridge.kt index 811b9c996..7d7eb8ec6 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoGlBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoGlBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_gl" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxDndBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxDndBridge.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxDndBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxDndBridge.kt index 03bcad002..974f2c0bc 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxDndBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxDndBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the Linux DnD helper for the Tao backend. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt index 91dc480a4..5f568424e 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxTouchBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the Linux touch + touchpad-gesture helper for the Tao backend. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt index 6f4d979aa..85dcb2f58 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoLinuxWidgetBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_linux_widget" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt index 2a150f6b5..b5687a0e6 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDecoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_macos_deco" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDndBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDndBridge.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDndBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDndBridge.kt index fc914246a..538178a64 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsDndBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsDndBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the macOS NSDraggingDestination / NSDraggingSource helper for diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt index d2a8f2af2..71bd42254 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoMacOsNativeViewBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_macos_native_view" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt similarity index 95% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt index c9f8f06b8..aad0b6119 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDecoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_windows_deco" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDndBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDndBridge.kt similarity index 95% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDndBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDndBridge.kt index f94d76a31..d9246b440 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsDndBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsDndBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the Windows IDropTarget COM helper for the Tao backend. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt similarity index 93% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt index 26fdf3911..bc59de8cc 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsNativeViewBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_windows_native_view" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt index bca45f759..c4d3eb7ff 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeTaoWindowsOverlayBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_tao_windows_native_view" diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeView.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeView.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeView.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeView.kt index 05da975d2..63db2390a 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeView.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeView.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable @@ -23,9 +23,9 @@ import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoLinuxOverlayController -import io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoPopupHost +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.tao.render.LocalTaoLinuxOverlayController +import dev.nucleusframework.nucleus.window.tao.render.LocalTaoPopupHost import kotlin.math.min import kotlin.math.roundToInt @@ -97,7 +97,7 @@ private fun HwndEmbedding( content: @Composable () -> Unit, ) { val host = LocalTaoNativeViewHost.current - val popupHost = io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoPopupHostWindows.current + val popupHost = dev.nucleusframework.nucleus.window.tao.render.LocalTaoPopupHostWindows.current val handle = view.hwndHandle val latestContent by rememberUpdatedState(content) @@ -289,7 +289,7 @@ private fun NsViewEmbedding( * * Hit-test passthrough is region-based, mirroring macOS: * descendants of [content] that wrap themselves in - * [io.github.kdroidfilter.nucleus.window.tao.consumeOverlayPointerEvents] + * [dev.nucleusframework.nucleus.window.tao.consumeOverlayPointerEvents] * register their bounds with the host's [TaoLinuxOverlayController]; * the EGL surface's input region is the union of those rects, so * outside of them every click falls through to GTK and reaches the diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.kt index f29e81ab8..b3386c2fd 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.Composable import androidx.compose.ui.InternalComposeUiApi @@ -18,11 +18,11 @@ import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneContext -import io.github.kdroidfilter.nucleus.window.tao.render.TaoNativeWireFormat -import io.github.kdroidfilter.nucleus.window.tao.render.TaoPopupHost -import io.github.kdroidfilter.nucleus.window.tao.render.dispatchSyntheticKeyTyped -import io.github.kdroidfilter.nucleus.window.tao.render.renderMetalFrame +import dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneContext +import dev.nucleusframework.nucleus.window.tao.render.TaoNativeWireFormat +import dev.nucleusframework.nucleus.window.tao.render.TaoPopupHost +import dev.nucleusframework.nucleus.window.tao.render.dispatchSyntheticKeyTyped +import dev.nucleusframework.nucleus.window.tao.render.renderMetalFrame import kotlin.coroutines.CoroutineContext import org.jetbrains.skia.DirectContext diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.windows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.windows.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.windows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.windows.kt index 575b82f64..751c22694 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NativeViewOverlayController.windows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NativeViewOverlayController.windows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect @@ -20,10 +20,10 @@ import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneContextWindows -import io.github.kdroidfilter.nucleus.window.tao.render.TaoNativeWireFormat -import io.github.kdroidfilter.nucleus.window.tao.render.TaoPopupHostWindows -import io.github.kdroidfilter.nucleus.window.tao.render.renderGlFrame +import dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneContextWindows +import dev.nucleusframework.nucleus.window.tao.render.TaoNativeWireFormat +import dev.nucleusframework.nucleus.window.tao.render.TaoPopupHostWindows +import dev.nucleusframework.nucleus.window.tao.render.renderGlFrame import kotlin.coroutines.CoroutineContext import org.jetbrains.skia.DirectContext diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NucleusPlatformView.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NucleusPlatformView.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NucleusPlatformView.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NucleusPlatformView.kt index fa51c7c5e..1f0b6e374 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/NucleusPlatformView.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/NucleusPlatformView.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao /** * Platform-agnostic descriptor for a native view embedded by the diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/OverlayInteractionModifier.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/OverlayInteractionModifier.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/OverlayInteractionModifier.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/OverlayInteractionModifier.kt index abb71116f..d193f91dd 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/OverlayInteractionModifier.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/OverlayInteractionModifier.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.remember @@ -10,7 +10,7 @@ import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot -import io.github.kdroidfilter.nucleus.window.tao.render.LocalTaoLinuxOverlayController +import dev.nucleusframework.nucleus.window.tao.render.LocalTaoLinuxOverlayController import kotlin.math.roundToInt /** diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PainterToRgba.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PainterToRgba.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PainterToRgba.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PainterToRgba.kt index 218f58db8..2ac47f46f 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PainterToRgba.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PainterToRgba.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Canvas diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.kt index 4654fae0e..d3e601d04 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the macOS popup panel helper (`macos/popup_panel.m`, diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.windows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.windows.kt similarity index 95% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.windows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.windows.kt index ecea27ecc..f96caabe0 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/PopupNativeBridge.windows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/PopupNativeBridge.windows.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * Windows counterpart to the macOS [PopupNativeBridge]. Each instance diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoAccessibility.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoAccessibility.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoAccessibility.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoAccessibility.kt index 567b7430c..cfc117832 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoAccessibility.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoAccessibility.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.snapshots.Snapshot -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.nio.ByteBuffer import java.nio.ByteOrder import java.util.concurrent.ConcurrentHashMap diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplication.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplication.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplication.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplication.kt index 32c57d68b..85f9ec6ef 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplication.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplication.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplicationCompose.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplicationCompose.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplicationCompose.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplicationCompose.kt index 657cc4c64..9d6bee7a0 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoApplicationCompose.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoApplicationCompose.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.Applier import androidx.compose.runtime.Composable diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoCursorMapping.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoCursorMapping.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoCursorMapping.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoCursorMapping.kt index c1c407ac0..583b232d1 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoCursorMapping.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoCursorMapping.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.ui.input.pointer.PointerIcon import java.awt.Cursor diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedDialogScope.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedDialogScope.kt similarity index 75% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedDialogScope.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedDialogScope.kt index 8f97715da..90fc96c06 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedDialogScope.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedDialogScope.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.layout.ColumnScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialogScope /** * Tao-specific sub-interface of [DecoratedDialogScope] adding access to the diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedWindowScope.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedWindowScope.kt similarity index 82% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedWindowScope.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedWindowScope.kt index 8e00a0023..1121743cd 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDecoratedWindowScope.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDecoratedWindowScope.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.layout.ColumnScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindowScope /** * Tao-specific sub-interface of [DecoratedWindowScope] adding access to the diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDeepLinkBridge.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDeepLinkBridge.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDeepLinkBridge.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDeepLinkBridge.kt index 3f646ae7e..1cd42d950 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDeepLinkBridge.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDeepLinkBridge.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import java.net.URI import java.net.URISyntaxException diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDnDDiagnostics.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDnDDiagnostics.kt similarity index 93% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDnDDiagnostics.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDnDDiagnostics.kt index f2c992acb..facaaece4 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDnDDiagnostics.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDnDDiagnostics.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropManager.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropManager.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropManager.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropManager.kt index 0e4fad503..0126bfc86 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropManager.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropManager.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.InternalComposeUiApi diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropPayload.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropPayload.kt similarity index 91% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropPayload.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropPayload.kt index 855958db7..4cc007005 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoDragAndDropPayload.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoDragAndDropPayload.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao /** * Backend-specific payload exposed as `DragAndDropEvent.nativeEvent` on the diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoFilesTransferable.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoFilesTransferable.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoFilesTransferable.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoFilesTransferable.kt index 29b80e1e4..a95830bbf 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoFilesTransferable.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoFilesTransferable.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import java.awt.datatransfer.DataFlavor import java.awt.datatransfer.Transferable diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoLinuxUriHandler.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoLinuxUriHandler.kt similarity index 95% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoLinuxUriHandler.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoLinuxUriHandler.kt index f1c89c5f6..586908f62 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoLinuxUriHandler.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoLinuxUriHandler.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.ui.platform.UriHandler diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoMainDispatcher.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoMainDispatcher.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoMainDispatcher.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoMainDispatcher.kt index 9d31bec1e..9464233f2 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoMainDispatcher.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoMainDispatcher.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.runtime.snapshots.Snapshot import kotlinx.coroutines.CoroutineDispatcher diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSemanticsObserver.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSemanticsObserver.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSemanticsObserver.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSemanticsObserver.kt index 9c62b9582..8527c564d 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSemanticsObserver.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSemanticsObserver.kt @@ -1,6 +1,6 @@ @file:OptIn(androidx.compose.ui.InternalComposeUiApi::class) -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.ui.platform.PlatformContext import androidx.compose.ui.semantics.Role diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSyntheticAwtDnd.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSyntheticAwtDnd.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSyntheticAwtDnd.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSyntheticAwtDnd.kt index c6b84d716..44b6602b6 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoSyntheticAwtDnd.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoSyntheticAwtDnd.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import java.awt.Point import java.awt.datatransfer.Transferable diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoWindow.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoWindow.kt similarity index 99% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoWindow.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoWindow.kt index 48741ec00..4e1351d96 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/TaoWindow.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/TaoWindow.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.atomic.AtomicBoolean diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/UndecoratedWindowBorder.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/UndecoratedWindowBorder.kt similarity index 82% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/UndecoratedWindowBorder.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/UndecoratedWindowBorder.kt index 54545c8b7..9b05b90a9 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/UndecoratedWindowBorder.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/UndecoratedWindowBorder.kt @@ -1,14 +1,14 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.internal.insideBorder -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.internal.insideBorder +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle /** * Returns the [Modifier.insideBorder] used by `DecoratedWindow` on diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsLinux.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsLinux.kt similarity index 93% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsLinux.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsLinux.kt index d7df3248c..75aeef017 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsLinux.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsLinux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -20,13 +20,13 @@ import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.TitleBarScope -import io.github.kdroidfilter.nucleus.window.utils.linux.LinuxButtonLayout -import io.github.kdroidfilter.nucleus.window.utils.linux.LinuxTitleBarButton -import io.github.kdroidfilter.nucleus.window.utils.linux.linuxTitleBarIcons -import io.github.kdroidfilter.nucleus.window.utils.linux.rememberLinuxButtonLayout +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.TitleBarScope +import dev.nucleusframework.nucleus.window.utils.linux.LinuxButtonLayout +import dev.nucleusframework.nucleus.window.utils.linux.LinuxTitleBarButton +import dev.nucleusframework.nucleus.window.utils.linux.linuxTitleBarIcons +import dev.nucleusframework.nucleus.window.utils.linux.rememberLinuxButtonLayout // Direct copy of `decorated-window-core/WindowControlArea.kt`'s logic, with // the AWT calls swapped for [TaoWindow] equivalents: diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsWindows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsWindows.kt similarity index 82% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsWindows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsWindows.kt index 3baddf048..335ede686 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/WindowControlsWindows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/WindowControlsWindows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao +package dev.nucleusframework.nucleus.window.tao import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -23,30 +23,30 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.input.pointer.PointerEventType import androidx.compose.ui.input.pointer.onPointerEvent import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.LocalIsDarkTheme -import io.github.kdroidfilter.nucleus.window.icons.windows.Close -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreen -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseFullscreenInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseHover -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.CloseInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Maximize -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeDark -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.MaximizeInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Minimize -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeDark -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.MinimizeInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.Restore -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreDark -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreInactive -import io.github.kdroidfilter.nucleus.window.icons.windows.RestoreInactiveDark -import io.github.kdroidfilter.nucleus.window.icons.windows.WindowsControlButtonIcons +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.LocalIsDarkTheme +import dev.nucleusframework.nucleus.window.icons.windows.Close +import dev.nucleusframework.nucleus.window.icons.windows.CloseDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreen +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenInactive +import dev.nucleusframework.nucleus.window.icons.windows.CloseFullscreenInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.CloseHover +import dev.nucleusframework.nucleus.window.icons.windows.CloseInactive +import dev.nucleusframework.nucleus.window.icons.windows.CloseInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Maximize +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeDark +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeInactive +import dev.nucleusframework.nucleus.window.icons.windows.MaximizeInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Minimize +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeDark +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeInactive +import dev.nucleusframework.nucleus.window.icons.windows.MinimizeInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.Restore +import dev.nucleusframework.nucleus.window.icons.windows.RestoreDark +import dev.nucleusframework.nucleus.window.icons.windows.RestoreInactive +import dev.nucleusframework.nucleus.window.icons.windows.RestoreInactiveDark +import dev.nucleusframework.nucleus.window.icons.windows.WindowsControlButtonIcons // Mirrors `decorated-window-core/WindowsWindowControlArea.kt` so the visual // output is identical between the AWT-based backend and the Tao backend. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/GlSceneRenderer.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/GlSceneRenderer.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/GlSceneRenderer.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/GlSceneRenderer.kt index ff4187429..5aa56dc1c 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/GlSceneRenderer.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/GlSceneRenderer.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.ui.InternalComposeUiApi import androidx.compose.ui.graphics.asComposeCanvas diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalFrame.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalFrame.kt similarity index 92% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalFrame.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalFrame.kt index 77a8ef14f..e2d10404d 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalFrame.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalFrame.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render /** * Output of `NativeMetalBridge.nativeBeginFrame`. Constructed from the ObjC diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalSceneRenderer.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalSceneRenderer.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalSceneRenderer.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalSceneRenderer.kt index 5d03ce7fe..7520737e0 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/MetalSceneRenderer.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/MetalSceneRenderer.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.ui.InternalComposeUiApi import androidx.compose.ui.graphics.asComposeCanvas import androidx.compose.ui.scene.ComposeScene -import io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge +import dev.nucleusframework.nucleus.window.tao.NativeMetalBridge import org.jetbrains.skia.BackendRenderTarget import org.jetbrains.skia.ColorSpace import org.jetbrains.skia.DirectContext diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContext.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContext.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContext.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContext.kt index 1a8a69ce7..9dda18ff7 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContext.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContext.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.CompositionContext import androidx.compose.ui.InternalComposeUiApi diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt similarity index 95% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt index 47f73b6b5..e716cc782 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneContextWindows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.CompositionContext import androidx.compose.ui.InternalComposeUiApi diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHost.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHost.kt similarity index 92% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHost.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHost.kt index 22b1af5fc..68edc7eec 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHost.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHost.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.Composable @@ -21,11 +21,11 @@ import androidx.compose.ui.input.pointer.PointerType import androidx.compose.ui.platform.PlatformContext import androidx.compose.ui.input.pointer.PointerId import androidx.compose.ui.scene.ComposeScenePointer -import io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon -import io.github.kdroidfilter.nucleus.window.tao.TaoEventCode -import io.github.kdroidfilter.nucleus.window.tao.TaoModifierMask -import io.github.kdroidfilter.nucleus.window.tao.TaoTrackpadGesture -import io.github.kdroidfilter.nucleus.window.tao.TaoTrackpadPhase +import dev.nucleusframework.nucleus.window.tao.TaoCursorIcon +import dev.nucleusframework.nucleus.window.tao.TaoEventCode +import dev.nucleusframework.nucleus.window.tao.TaoModifierMask +import dev.nucleusframework.nucleus.window.tao.TaoTrackpadGesture +import dev.nucleusframework.nucleus.window.tao.TaoTrackpadPhase import kotlin.math.cos import kotlin.math.sin import java.awt.Cursor @@ -38,14 +38,14 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.tao.MacOSStyle -import io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsNativeViewBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoMainDispatcher -import io.github.kdroidfilter.nucleus.window.tao.TaoNativeViewHost -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow -import io.github.kdroidfilter.nucleus.window.tao.shouldApplyLargeCornerRadius +import dev.nucleusframework.nucleus.window.tao.MacOSStyle +import dev.nucleusframework.nucleus.window.tao.NativeMetalBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsNativeViewBridge +import dev.nucleusframework.nucleus.window.tao.TaoMainDispatcher +import dev.nucleusframework.nucleus.window.tao.TaoNativeViewHost +import dev.nucleusframework.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.window.tao.shouldApplyLargeCornerRadius import org.jetbrains.skia.DirectContext import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext @@ -245,7 +245,7 @@ internal class TaoComposeSceneHost( // but the scene cannot be constructed before we hand it the // PlatformContext that owns the manager. Resolve on each call. @OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class) - val dndManager = io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager( + val dndManager = dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager( getRootNode = { scene!!.rootDragAndDropNode }, outboundLauncher = ::launchMacOsOutboundDrag, ) @@ -289,39 +289,39 @@ internal class TaoComposeSceneHost( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun launchMacOsOutboundDrag( - request: io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, + request: dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, ): androidx.compose.ui.draganddrop.DragAndDropTransferAction? { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) return null + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) return null if (nsViewHandle == 0L) return null val allowed = request.supportedActions.fold(0) { acc, action -> acc or when (action) { androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_MOVE + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_MOVE androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_LINK + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_LINK else -> 0 } }.let { if (it == 0) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY } else it } val files = request.files.takeIf { it.isNotEmpty() } ?.map { it.absolutePath }?.toTypedArray() - val effect = io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeStartDrag( + val effect = dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeStartDrag( nsView = nsViewHandle, files = files, text = request.text, allowedEffects = allowed, ) return when (effect) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY -> + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_MOVE -> + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_MOVE -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_LINK -> + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_LINK -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link else -> null } @@ -329,18 +329,18 @@ internal class TaoComposeSceneHost( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun registerInboundDnD() { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) { + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "macOS DnD lib not loaded — inbound disabled", ) return } val callback = InboundDnDCallback() - val rc = io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeRegister( + val rc = dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeRegister( nsView = nsViewHandle, callback = callback, ) - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log("registerForDraggedTypes rc=$rc") + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log("registerForDraggedTypes rc=$rc") } /** @@ -350,7 +350,7 @@ internal class TaoComposeSceneHost( */ @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private inner class InboundDnDCallback : - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.Callback { + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.Callback { private fun rootNode() = scene?.rootDragAndDropNode @@ -359,13 +359,13 @@ internal class TaoComposeSceneHost( yPx: Int, files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { - val payload = io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + val payload = dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) - val transferable = io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + val transferable = dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) - val native = io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDragEvent( + val native = dev.nucleusframework.nucleus.window.tao.TaoSyntheticDragEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -383,13 +383,13 @@ internal class TaoComposeSceneHost( yPx: Int, files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { - val payload = io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + val payload = dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) - val transferable = io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + val transferable = dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) - val native = io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDropEvent( + val native = dev.nucleusframework.nucleus.window.tao.TaoSyntheticDropEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -403,14 +403,14 @@ internal class TaoComposeSceneHost( } override fun onDragEnter(nsView: Long, x: Int, y: Int, modState: Int, hasFiles: Boolean): Int { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "onDragEnter x=$x y=$y hasFiles=$hasFiles", ) if (!hasFiles) { - return io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + return dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE } val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) val accepted = node.acceptDragAndDropTransfer(ev) if (accepted) { @@ -418,26 +418,26 @@ internal class TaoComposeSceneHost( node.onEntered(ev) } return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE } } override fun onDragOver(nsView: Long, x: Int, y: Int, modState: Int, hasFiles: Boolean): Int { val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) node.onMoved(ev) return if (node.hasEligibleDropTarget) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE } } override fun onDragLeave(nsView: Long) { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log("onDragLeave") + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log("onDragLeave") val node = rootNode() ?: return val ev = makeDragEvent(-1, -1, null) node.onExited(ev) @@ -445,18 +445,18 @@ internal class TaoComposeSceneHost( } override fun onDrop(nsView: Long, x: Int, y: Int, modState: Int, files: Array?): Int { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "onDrop x=$x y=$y files=${files?.size ?: 0}", ) val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE val ev = makeDropEvent(x, y, files) val accepted = node.onDrop(ev) node.onEnded(ev) return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.DROP_EFFECT_NONE } } } @@ -1046,8 +1046,8 @@ internal class TaoComposeSceneHost( attachmentHandle = 0L } if (nsViewHandle != 0L) { - if (io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeRevoke(nsViewHandle) + if (dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.isLoaded) { + dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge.nativeRevoke(nsViewHandle) } nsViewHandle = 0L } @@ -1089,11 +1089,11 @@ internal class TaoComposeSceneHost( private fun mapButton(code: Int): androidx.compose.ui.input.pointer.PointerButton { // Compose's PointerButton has Primary/Secondary/Tertiary plus generic indices. return when (code) { - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.LEFT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.LEFT -> androidx.compose.ui.input.pointer.PointerButton.Primary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.RIGHT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.RIGHT -> androidx.compose.ui.input.pointer.PointerButton.Secondary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.MIDDLE -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.MIDDLE -> androidx.compose.ui.input.pointer.PointerButton.Tertiary else -> androidx.compose.ui.input.pointer.PointerButton.Primary } diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt similarity index 90% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt index b54ad2181..9b7c85746 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostLinux.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.Composable @@ -22,16 +22,16 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.LinuxDesktopEnvironment -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoEglBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxTouchBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoEventCode -import io.github.kdroidfilter.nucleus.window.tao.TaoModifierMask -import io.github.kdroidfilter.nucleus.window.tao.TaoTouchEvent -import io.github.kdroidfilter.nucleus.window.tao.TaoTrackpadGesture -import io.github.kdroidfilter.nucleus.window.tao.TaoTrackpadPhase -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.core.runtime.LinuxDesktopEnvironment +import dev.nucleusframework.nucleus.window.tao.NativeTaoBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoEglBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxTouchBridge +import dev.nucleusframework.nucleus.window.tao.TaoEventCode +import dev.nucleusframework.nucleus.window.tao.TaoModifierMask +import dev.nucleusframework.nucleus.window.tao.TaoTouchEvent +import dev.nucleusframework.nucleus.window.tao.TaoTrackpadGesture +import dev.nucleusframework.nucleus.window.tao.TaoTrackpadPhase +import dev.nucleusframework.nucleus.window.tao.TaoWindow import kotlinx.coroutines.CoroutineDispatcher import org.jetbrains.skia.BackendRenderTarget import org.jetbrains.skia.BlendMode @@ -253,7 +253,7 @@ internal class TaoComposeSceneHostLinux( @OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class) val dndManager = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager( getRootNode = { scene!!.rootDragAndDropNode }, outboundLauncher = ::launchLinuxOutboundDrag, ) @@ -281,9 +281,9 @@ internal class TaoComposeSceneHostLinux( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun launchLinuxOutboundDrag( - request: io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, + request: dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, ): androidx.compose.ui.draganddrop.DragAndDropTransferAction? { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded) return null + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded) return null if (window.handle == 0L) return null val allowed = @@ -292,16 +292,16 @@ internal class TaoComposeSceneHostLinux( acc or when (action) { androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_MOVE + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_MOVE androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_LINK + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_LINK else -> 0 } }.let { if (it == 0) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY } else { it } @@ -313,18 +313,18 @@ internal class TaoComposeSceneHostLinux( ?.map { it.absolutePath } ?.toTypedArray() val effect = - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.nativeStartDrag( + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.nativeStartDrag( handle = window.handle, files = files, text = request.text, allowedEffects = allowed, ) return when (effect) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY -> + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_MOVE -> + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_MOVE -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_LINK -> + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_LINK -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link else -> null } @@ -332,9 +332,9 @@ internal class TaoComposeSceneHostLinux( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun registerInboundDnD() { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded) return + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded) return val callback = InboundDnDCallback() - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge .nativeRegister(window.handle, callback) } @@ -345,7 +345,7 @@ internal class TaoComposeSceneHostLinux( */ @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private inner class InboundDnDCallback : - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.Callback { + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.Callback { private fun rootNode() = scene?.rootDragAndDropNode // Coordinates from native are already in physical pixels (post @@ -357,15 +357,15 @@ internal class TaoComposeSceneHostLinux( files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { val payload = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) val transferable = - io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) val native = - io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDragEvent( + dev.nucleusframework.nucleus.window.tao.TaoSyntheticDragEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -386,15 +386,15 @@ internal class TaoComposeSceneHostLinux( files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { val payload = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) val transferable = - io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) val native = - io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDropEvent( + dev.nucleusframework.nucleus.window.tao.TaoSyntheticDropEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -418,7 +418,7 @@ internal class TaoComposeSceneHostLinux( ): Int { val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) val accepted = node.acceptDragAndDropTransfer(ev) if (accepted) { @@ -426,9 +426,9 @@ internal class TaoComposeSceneHostLinux( node.onEntered(ev) } return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE } } @@ -441,13 +441,13 @@ internal class TaoComposeSceneHostLinux( ): Int { val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) node.onMoved(ev) return if (node.hasEligibleDropTarget) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE } } @@ -467,14 +467,14 @@ internal class TaoComposeSceneHostLinux( ): Int { val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE val ev = makeDropEvent(x, y, files) val accepted = node.onDrop(ev) node.onEnded(ev) return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.DROP_EFFECT_NONE } } } @@ -1035,21 +1035,21 @@ internal class TaoComposeSceneHostLinux( * library is available (missing on non-Linux builds and on Linux * builds that didn't ship the .so). */ - fun nativeViewHost(): io.github.kdroidfilter.nucleus.window.tao.TaoNativeViewHost? { + fun nativeViewHost(): dev.nucleusframework.nucleus.window.tao.TaoNativeViewHost? { if (window.handle == 0L) return null - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge.isLoaded) return null - val gtkWindow = io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge.isLoaded) return null + val gtkWindow = dev.nucleusframework.nucleus.window.tao.NativeTaoBridge .nativeLinuxGtkWindow(window.handle) if (gtkWindow == 0L) return null val outer = this - return object : io.github.kdroidfilter.nucleus.window.tao.TaoNativeViewHost { + return object : dev.nucleusframework.nucleus.window.tao.TaoNativeViewHost { override fun attach(childHandle: Long) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge .nativeAttach(gtkWindow, childHandle) } override fun detach(childHandle: Long) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge .nativeDetach(childHandle) } @@ -1062,7 +1062,7 @@ internal class TaoComposeSceneHostLinux( val yLogical = (yPx / s).toInt() val wLogical = (widthPx / s).toInt().coerceAtLeast(1) val hLogical = (heightPx / s).toInt().coerceAtLeast(1) - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge .nativeSetFrame(gtkWindow, handle, xLogical, yLogical, wLogical, hLogical) } @@ -1080,7 +1080,7 @@ internal class TaoComposeSceneHostLinux( /** * Plumbing for the overlay slot of `NativeView` on Linux. Returns * a freshly-created controller bound to this host's EGL - * attachment so [io.github.kdroidfilter.nucleus.window.tao.consumeOverlayPointerEvents] + * attachment so [dev.nucleusframework.nucleus.window.tao.consumeOverlayPointerEvents] * modifiers in the `content` lambda can register their bounds and * have the EGL surface's input region updated accordingly. * @@ -1095,7 +1095,7 @@ internal class TaoComposeSceneHostLinux( // yet at host construction time. gtkWindowProvider = { if (window.handle == 0L) 0L - else io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge + else dev.nucleusframework.nucleus.window.tao.NativeTaoBridge .nativeLinuxGtkWindow(window.handle) }, scaleProvider = { scale }, @@ -1162,10 +1162,10 @@ internal class TaoComposeSceneHostLinux( } fun detach() { - if (io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded && + if (dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge.isLoaded && window.handle != 0L ) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge .nativeRevoke(window.handle) } if (NativeTaoLinuxTouchBridge.isLoaded && window.handle != 0L) { @@ -1375,11 +1375,11 @@ internal class TaoComposeSceneHostLinux( private fun mapButton(code: Int): androidx.compose.ui.input.pointer.PointerButton = when (code) { - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.LEFT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.LEFT -> androidx.compose.ui.input.pointer.PointerButton.Primary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.RIGHT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.RIGHT -> androidx.compose.ui.input.pointer.PointerButton.Secondary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.MIDDLE -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.MIDDLE -> androidx.compose.ui.input.pointer.PointerButton.Tertiary else -> androidx.compose.ui.input.pointer.PointerButton.Primary } @@ -1418,32 +1418,32 @@ private class LinuxTaoPlatformContext( private fun mapPointerIcon(icon: androidx.compose.ui.input.pointer.PointerIcon): Int { when { icon === androidx.compose.ui.input.pointer.PointerIcon.Default -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT icon === androidx.compose.ui.input.pointer.PointerIcon.Text -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.TEXT + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.TEXT icon === androidx.compose.ui.input.pointer.PointerIcon.Hand -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.HAND + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.HAND icon === androidx.compose.ui.input.pointer.PointerIcon.Crosshair -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.CROSSHAIR + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.CROSSHAIR } return runCatching { val cursor = icon.javaClass.getMethod("getCursor").invoke(icon) as? java.awt.Cursor when (cursor?.type) { - java.awt.Cursor.TEXT_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.TEXT - java.awt.Cursor.HAND_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.HAND - java.awt.Cursor.CROSSHAIR_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.CROSSHAIR - java.awt.Cursor.WAIT_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.WAIT - java.awt.Cursor.MOVE_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.MOVE + java.awt.Cursor.TEXT_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.TEXT + java.awt.Cursor.HAND_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.HAND + java.awt.Cursor.CROSSHAIR_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.CROSSHAIR + java.awt.Cursor.WAIT_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.WAIT + java.awt.Cursor.MOVE_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.MOVE java.awt.Cursor.E_RESIZE_CURSOR, java.awt.Cursor.W_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.EW_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.EW_RESIZE java.awt.Cursor.N_RESIZE_CURSOR, java.awt.Cursor.S_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NS_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NS_RESIZE java.awt.Cursor.NE_RESIZE_CURSOR, java.awt.Cursor.SW_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NESW_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NESW_RESIZE java.awt.Cursor.NW_RESIZE_CURSOR, java.awt.Cursor.SE_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NWSE_RESIZE - else -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NWSE_RESIZE + else -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT } - }.getOrDefault(io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT) + }.getOrDefault(dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT) } } diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt similarity index 86% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt index 998a12c74..4d382947f 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoComposeSceneHostWindows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.BroadcastFrameClock import androidx.compose.runtime.Composable @@ -23,13 +23,13 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoGlBridge -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDecoBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoEventCode -import io.github.kdroidfilter.nucleus.window.tao.TaoModifierMask -import io.github.kdroidfilter.nucleus.window.tao.TaoTouchEvent -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.window.tao.NativeTaoBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoGlBridge +import dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDecoBridge +import dev.nucleusframework.nucleus.window.tao.TaoEventCode +import dev.nucleusframework.nucleus.window.tao.TaoModifierMask +import dev.nucleusframework.nucleus.window.tao.TaoTouchEvent +import dev.nucleusframework.nucleus.window.tao.TaoWindow import kotlinx.coroutines.CoroutineDispatcher import org.jetbrains.skia.BackendRenderTarget import org.jetbrains.skia.ColorSpace @@ -171,7 +171,7 @@ internal class TaoComposeSceneHostWindows( @OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class) val dndManager = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager( getRootNode = { scene!!.rootDragAndDropNode }, outboundLauncher = ::launchWindowsOutboundDrag, ) @@ -351,9 +351,9 @@ internal class TaoComposeSceneHostWindows( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun launchWindowsOutboundDrag( - request: io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, + request: dev.nucleusframework.nucleus.window.tao.TaoDragAndDropManager.OutboundRequest, ): androidx.compose.ui.draganddrop.DragAndDropTransferAction? { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) return null + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) return null if (hwnd == 0L) return null val allowed = @@ -362,16 +362,16 @@ internal class TaoComposeSceneHostWindows( acc or when (action) { androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_MOVE + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_MOVE androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link -> - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_LINK + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_LINK else -> 0 } }.let { if (it == 0) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY } else { it } @@ -383,18 +383,18 @@ internal class TaoComposeSceneHostWindows( ?.map { it.absolutePath } ?.toTypedArray() val effect = - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.nativeStartDrag( + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.nativeStartDrag( hwnd = hwnd, files = files, text = request.text, allowedEffects = allowed, ) return when (effect) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY -> + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Copy - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_MOVE -> + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_MOVE -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Move - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_LINK -> + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_LINK -> androidx.compose.ui.draganddrop.DragAndDropTransferAction.Link else -> null } @@ -402,17 +402,17 @@ internal class TaoComposeSceneHostWindows( @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private fun registerInboundDnD() { - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) { + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "windows DnD lib not loaded — inbound disabled", ) return } val callback = InboundDnDCallback() val rc = - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge .nativeRegister(hwnd, callback) - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics .log("RegisterDragDrop rc=$rc") } @@ -423,7 +423,7 @@ internal class TaoComposeSceneHostWindows( */ @OptIn(InternalComposeUiApi::class, androidx.compose.ui.ExperimentalComposeUiApi::class) private inner class InboundDnDCallback : - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.Callback { + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.Callback { private fun rootNode() = scene?.rootDragAndDropNode private fun makeDragEvent( @@ -432,15 +432,15 @@ internal class TaoComposeSceneHostWindows( files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { val payload = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) val transferable = - io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) val native = - io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDragEvent( + dev.nucleusframework.nucleus.window.tao.TaoSyntheticDragEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -461,15 +461,15 @@ internal class TaoComposeSceneHostWindows( files: Array?, ): androidx.compose.ui.draganddrop.DragAndDropEvent { val payload = - io.github.kdroidfilter.nucleus.window.tao.TaoDragAndDropPayload( + dev.nucleusframework.nucleus.window.tao.TaoDragAndDropPayload( files = files?.toList() ?: emptyList(), ) val transferable = - io.github.kdroidfilter.nucleus.window.tao.TaoFilesTransferable( + dev.nucleusframework.nucleus.window.tao.TaoFilesTransferable( files = payload.files.map { java.io.File(it) }, ) val native = - io.github.kdroidfilter.nucleus.window.tao.TaoSyntheticDropEvent( + dev.nucleusframework.nucleus.window.tao.TaoSyntheticDropEvent( cursorLocn = java.awt.Point(xPx, yPx), dropAction = java.awt.dnd.DnDConstants.ACTION_COPY, backingTransferable = transferable, @@ -491,15 +491,15 @@ internal class TaoComposeSceneHostWindows( keyState: Int, hasFiles: Boolean, ): Int { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "onDragEnter x=$x y=$y hasFiles=$hasFiles", ) if (!hasFiles) { - return io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + return dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE } val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) val accepted = node.acceptDragAndDropTransfer(ev) if (accepted) { @@ -507,9 +507,9 @@ internal class TaoComposeSceneHostWindows( node.onEntered(ev) } return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE } } @@ -522,18 +522,18 @@ internal class TaoComposeSceneHostWindows( ): Int { val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE val ev = makeDragEvent(x, y, null) node.onMoved(ev) return if (node.hasEligibleDropTarget) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE } } override fun onDragLeave(hwnd: Long) { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics .log("onDragLeave") val node = rootNode() ?: return val ev = makeDragEvent(-1, -1, null) @@ -548,19 +548,19 @@ internal class TaoComposeSceneHostWindows( keyState: Int, files: Array?, ): Int { - io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics.log( + dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics.log( "onDrop x=$x y=$y files=${files?.size ?: 0}", ) val node = rootNode() - ?: return io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + ?: return dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE val ev = makeDropEvent(x, y, files) val accepted = node.onDrop(ev) node.onEnded(ev) return if (accepted) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_COPY } else { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.DROP_EFFECT_NONE } } } @@ -894,25 +894,25 @@ internal class TaoComposeSceneHostWindows( for (cb in ownerMoveListeners.values.toList()) cb() } - fun nativeViewHost(): io.github.kdroidfilter.nucleus.window.tao.TaoNativeViewHost? { + fun nativeViewHost(): dev.nucleusframework.nucleus.window.tao.TaoNativeViewHost? { if (hwnd == 0L) return null - if (!io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge.isLoaded) return null + if (!dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge.isLoaded) return null val parent = hwnd - return object : io.github.kdroidfilter.nucleus.window.tao.TaoNativeViewHost { + return object : dev.nucleusframework.nucleus.window.tao.TaoNativeViewHost { override fun attach(childHandle: Long) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge .nativeAttach(parent, childHandle) } override fun detach(childHandle: Long) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge .nativeDetach(childHandle) } override fun setFrame(handle: Long, xPx: Int, yPx: Int, widthPx: Int, heightPx: Int) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge .nativeSetFrame(parent, handle, xPx, yPx, widthPx, heightPx) } override fun setCornerRadius(handle: Long, radiusPx: Float) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge .nativeSetCornerRadius(parent, handle, radiusPx) } } @@ -949,8 +949,8 @@ internal class TaoComposeSceneHostWindows( attachmentHandle = 0L } if (hwnd != 0L) { - if (io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) { - io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge + if (dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge.isLoaded) { + dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge .nativeRevoke(hwnd) } NativeTaoWindowsDecoBridge.nativeUninstallDecoration(hwnd) @@ -993,11 +993,11 @@ internal class TaoComposeSceneHostWindows( private fun mapButton(code: Int): androidx.compose.ui.input.pointer.PointerButton = when (code) { - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.LEFT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.LEFT -> androidx.compose.ui.input.pointer.PointerButton.Primary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.RIGHT -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.RIGHT -> androidx.compose.ui.input.pointer.PointerButton.Secondary - io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton.MIDDLE -> + dev.nucleusframework.nucleus.window.tao.TaoMouseButton.MIDDLE -> androidx.compose.ui.input.pointer.PointerButton.Tertiary else -> androidx.compose.ui.input.pointer.PointerButton.Primary } @@ -1035,32 +1035,32 @@ private class WindowsTaoPlatformContext( private fun mapPointerIcon(icon: androidx.compose.ui.input.pointer.PointerIcon): Int { when { icon === androidx.compose.ui.input.pointer.PointerIcon.Default -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT icon === androidx.compose.ui.input.pointer.PointerIcon.Text -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.TEXT + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.TEXT icon === androidx.compose.ui.input.pointer.PointerIcon.Hand -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.HAND + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.HAND icon === androidx.compose.ui.input.pointer.PointerIcon.Crosshair -> - return io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.CROSSHAIR + return dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.CROSSHAIR } return runCatching { val cursor = icon.javaClass.getMethod("getCursor").invoke(icon) as? java.awt.Cursor when (cursor?.type) { - java.awt.Cursor.TEXT_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.TEXT - java.awt.Cursor.HAND_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.HAND - java.awt.Cursor.CROSSHAIR_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.CROSSHAIR - java.awt.Cursor.WAIT_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.WAIT - java.awt.Cursor.MOVE_CURSOR -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.MOVE + java.awt.Cursor.TEXT_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.TEXT + java.awt.Cursor.HAND_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.HAND + java.awt.Cursor.CROSSHAIR_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.CROSSHAIR + java.awt.Cursor.WAIT_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.WAIT + java.awt.Cursor.MOVE_CURSOR -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.MOVE java.awt.Cursor.E_RESIZE_CURSOR, java.awt.Cursor.W_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.EW_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.EW_RESIZE java.awt.Cursor.N_RESIZE_CURSOR, java.awt.Cursor.S_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NS_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NS_RESIZE java.awt.Cursor.NE_RESIZE_CURSOR, java.awt.Cursor.SW_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NESW_RESIZE + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NESW_RESIZE java.awt.Cursor.NW_RESIZE_CURSOR, java.awt.Cursor.SE_RESIZE_CURSOR -> - io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.NWSE_RESIZE - else -> io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT + dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.NWSE_RESIZE + else -> dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT } - }.getOrDefault(io.github.kdroidfilter.nucleus.window.tao.TaoCursorIcon.DEFAULT) + }.getOrDefault(dev.nucleusframework.nucleus.window.tao.TaoCursorIcon.DEFAULT) } } diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoInteropTransaction.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoInteropTransaction.kt similarity index 96% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoInteropTransaction.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoInteropTransaction.kt index 1fb74ff10..b1e37f69e 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoInteropTransaction.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoInteropTransaction.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render /** * Mirrors `UIKitInteropTransaction` from Compose Multiplatform iOS. diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoLinuxOverlayController.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoLinuxOverlayController.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoLinuxOverlayController.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoLinuxOverlayController.kt index f86e2fcf1..dd1265668 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoLinuxOverlayController.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoLinuxOverlayController.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.unit.IntSize -import io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge -import io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton +import dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge +import dev.nucleusframework.nucleus.window.tao.TaoMouseButton /** * Linux-only counterpart of macOS's `NativeViewOverlayController` — @@ -16,7 +16,7 @@ import io.github.kdroidfilter.nucleus.window.tao.TaoMouseButton * which is exactly what we want for non-interactive overlay pixels. * * For *interactive* overlay regions (a `BasicTextField`, a `Button`, - * etc., wrapped with [io.github.kdroidfilter.nucleus.window.tao.consumeOverlayPointerEvents]) + * etc., wrapped with [dev.nucleusframework.nucleus.window.tao.consumeOverlayPointerEvents]) * we materialise an invisible `GtkEventBox` inside Tao's GtkOverlay, * positioned at the rect Compose reported. Clicks in the rect hit * the EventBox first (it's stacked above the embedded widget in diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoNativeWireFormat.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoNativeWireFormat.kt similarity index 94% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoNativeWireFormat.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoNativeWireFormat.kt index 9485f2e0a..84aec4f1e 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoNativeWireFormat.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoNativeWireFormat.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render /** * Wire-format codes shared between the Kotlin side and the native diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHost.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHost.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHost.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHost.kt index 38890e160..63b22674e 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHost.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHost.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.compositionLocalOf diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHostWindows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHostWindows.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHostWindows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHostWindows.kt index 979260ebb..aec3f2681 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupHostWindows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupHostWindows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.compositionLocalOf diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayer.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayer.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayer.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayer.kt index 88993a135..2bca0d771 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayer.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayer.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionContext @@ -22,8 +22,8 @@ import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntRect import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge -import io.github.kdroidfilter.nucleus.window.tao.PopupNativeBridge +import dev.nucleusframework.nucleus.window.tao.NativeMetalBridge +import dev.nucleusframework.nucleus.window.tao.PopupNativeBridge import org.jetbrains.skia.DirectContext /** diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt similarity index 98% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt index b4ebb4e29..84c61fcca 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoPopupSceneLayerWindows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionContext @@ -22,7 +22,7 @@ import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntRect import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection -import io.github.kdroidfilter.nucleus.window.tao.PopupNativeBridgeWindows +import dev.nucleusframework.nucleus.window.tao.PopupNativeBridgeWindows import org.jetbrains.skia.DirectContext /** diff --git a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoSyntheticKey.kt b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoSyntheticKey.kt similarity index 97% rename from decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoSyntheticKey.kt rename to decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoSyntheticKey.kt index 50b1160e4..46ca24009 100644 --- a/decorated-window-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/window/tao/render/TaoSyntheticKey.kt +++ b/decorated-window-tao/src/main/kotlin/dev/nucleusframework/nucleus/window/tao/render/TaoSyntheticKey.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.window.tao.render +package dev.nucleusframework.nucleus.window.tao.render import androidx.compose.ui.InternalComposeUiApi import androidx.compose.ui.input.key.Key diff --git a/decorated-window-tao/src/main/native/linux/nucleus_tao_egl.c b/decorated-window-tao/src/main/native/linux/nucleus_tao_egl.c index bd480ded3..28573d3ac 100644 --- a/decorated-window-tao/src/main/native/linux/nucleus_tao_egl.c +++ b/decorated-window-tao/src/main/native/linux/nucleus_tao_egl.c @@ -615,7 +615,7 @@ typedef struct { * Returns an opaque attachment handle, or 0 on failure. */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeAttachX11( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeAttachX11( JNIEnv *env, jclass clazz, jlong xdisplayPtr, jlong xidLong, jint widthPx, jint heightPx) @@ -961,7 +961,7 @@ static void (*const wl_registry_listener[])(void) = { * just expressed through Wayland protocol primitives. */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeAttachWayland( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeAttachWayland( JNIEnv *env, jclass clazz, jlong wlDisplayPtr, jlong wlSurfacePtr, jint widthPx, jint heightPx) @@ -1284,7 +1284,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeAttachWa } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeDetach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeDetach( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1329,7 +1329,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeDetach( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeMakeCurrent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeMakeCurrent( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1346,7 +1346,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeMakeCurr * only be current on one thread at a time. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeReleaseCurrent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeReleaseCurrent( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1356,7 +1356,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeReleaseC } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeResize( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeResize( JNIEnv *env, jclass clazz, jlong handle, jint widthPx, jint heightPx, jfloat scale) { (void) env; (void) clazz; @@ -1387,7 +1387,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeResize( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativePresent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativePresent( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1397,7 +1397,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativePresent( } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeWidth( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeWidth( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1406,7 +1406,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeWidth( } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeHeight( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeHeight( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -1441,7 +1441,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeHeight( * X11-default support would require always materialising a child window * for Compose, which is left as a follow-up. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeSetInputRegion( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeSetInputRegion( JNIEnv *env, jclass clazz, jlong handle, jfloatArray rectsPx, jint count) { (void) clazz; @@ -1568,7 +1568,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeSetInput * Skia starts asking for entry points. */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoEglBridge_nativeGetProcAddrFunctionPointer( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoEglBridge_nativeGetProcAddrFunctionPointer( JNIEnv *env, jclass clazz) { (void) env; (void) clazz; diff --git a/decorated-window-tao/src/main/native/linux/nucleus_tao_linux_widget.c b/decorated-window-tao/src/main/native/linux/nucleus_tao_linux_widget.c index cf9243ef3..2e5f56096 100644 --- a/decorated-window-tao/src/main/native/linux/nucleus_tao_linux_widget.c +++ b/decorated-window-tao/src/main/native/linux/nucleus_tao_linux_widget.c @@ -337,7 +337,7 @@ static GtkWidget *resolve_overlay_for_window(GtkWidget *gtk_window) { #define EXPORT JNIEXPORT __attribute__((visibility("default"))) EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeAttach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeAttach( JNIEnv *env, jclass clazz, jlong gtk_window_ptr, jlong widget_ptr) { (void) env; (void) clazz; @@ -382,7 +382,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native } EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeDetach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeDetach( JNIEnv *env, jclass clazz, jlong widget_ptr) { (void) env; (void) clazz; @@ -397,7 +397,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native } EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeSetFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeSetFrame( JNIEnv *env, jclass clazz, jlong gtk_window_ptr, jlong widget_ptr, jint x_logical, jint y_logical, jint w_logical, jint h_logical) @@ -456,7 +456,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native * TextField. Equivalent in spirit to macOS's * `[window makeFirstResponder:overlay]` on click. */ EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeRequestKeyboardFocus( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeRequestKeyboardFocus( JNIEnv *env, jclass clazz, jlong gtk_window_ptr) { (void) env; (void) clazz; @@ -610,7 +610,7 @@ static gboolean on_input_box_motion_notify(GtkWidget *widget, void *event_ptr, } EXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeAddInputBox( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeAddInputBox( JNIEnv *env, jclass clazz, jlong gtk_window_ptr) { (void) env; (void) clazz; @@ -672,7 +672,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native } EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeMoveInputBox( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeMoveInputBox( JNIEnv *env, jclass clazz, jlong box_ptr, jint x_logical, jint y_logical, jint w_logical, jint h_logical) { @@ -700,7 +700,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native } EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeSetInputBoxCallback( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeSetInputBoxCallback( JNIEnv *env, jclass clazz, jlong box_ptr, jobject callback) { (void) clazz; @@ -720,7 +720,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_native } EXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeRemoveInputBox( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxWidgetBridge_nativeRemoveInputBox( JNIEnv *env, jclass clazz, jlong box_ptr) { (void) env; (void) clazz; diff --git a/decorated-window-tao/src/main/native/macos/NucleusTaoMetal.m b/decorated-window-tao/src/main/native/macos/NucleusTaoMetal.m index faf3e7a80..788c09f29 100644 --- a/decorated-window-tao/src/main/native/macos/NucleusTaoMetal.m +++ b/decorated-window-tao/src/main/native/macos/NucleusTaoMetal.m @@ -100,7 +100,7 @@ static void ensureMetalJVMCached(JNIEnv *env) { dispatch_once(&onceToken, ^{ (*env)->GetJavaVM(env, &sMetalJVM); jclass local = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/window/tao/NativeMetalBridge"); + "dev/nucleusframework/nucleus/window/tao/NativeMetalBridge"); if (local) { sMetalBridgeClass = (*env)->NewGlobalRef(env, local); (*env)->DeleteLocalRef(env, local); @@ -659,7 +659,7 @@ - (void)didExitFS:(NSNotification *)n { static void ensureFrameClassLoaded(JNIEnv *env) { if (gFrameClass != NULL) return; - jclass local = (*env)->FindClass(env, "io/github/kdroidfilter/nucleus/window/tao/render/MetalFrame"); + jclass local = (*env)->FindClass(env, "dev/nucleusframework/nucleus/window/tao/render/MetalFrame"); if (local == NULL) return; gFrameClass = (jclass) (*env)->NewGlobalRef(env, local); (*env)->DeleteLocalRef(env, local); @@ -668,10 +668,10 @@ static void ensureFrameClassLoaded(JNIEnv *env) { } // ── JNI entry points ───────────────────────────────────────────────────── -// Symbol naming follows io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge +// Symbol naming follows dev.nucleusframework.nucleus.window.tao.NativeMetalBridge JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeAttach( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeAttach( JNIEnv *env, jclass clazz, jlong nsViewPtr) { NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; @@ -739,7 +739,7 @@ static void ensureFrameClassLoaded(JNIEnv *env) { * children of a host NSView whose own observer already manages the FS * dance. */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeAttachOverlay( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeAttachOverlay( JNIEnv *env, jclass clazz, jlong nsViewPtr) { NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; if (view == nil) return 0; @@ -792,7 +792,7 @@ static void ensureFrameClassLoaded(JNIEnv *env) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeConfigureChrome( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeConfigureChrome( JNIEnv *env, jclass clazz, jlong nsViewPtr) { NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; if (view == nil) return; @@ -957,7 +957,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeApplyButtonLayout( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeApplyButtonLayout( JNIEnv *env, jclass clazz, jlong nsViewPtr, jfloat titleBarHeight) { NTLOG("nativeApplyButtonLayout h=%.1f", titleBarHeight); NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; @@ -981,7 +981,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { * Mirrors `decorated-window-jni`'s `JniMacTitleBarBridge.nativeSetRTL`. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeSetButtonLayoutRtl( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeSetButtonLayoutRtl( JNIEnv *env, jclass clazz, jlong nsViewPtr, jboolean isRtl) { NTLOG("nativeSetButtonLayoutRtl rtl=%d", (int)isRtl); NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; @@ -1016,7 +1016,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { * modern chrome behaviours. Cheap query — caches the result in a static. */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeIsMacOSTahoeOrLater( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeIsMacOSTahoeOrLater( JNIEnv *env, jclass clazz) { static jboolean cached = (jboolean) -1; if (cached != (jboolean) -1) return cached; @@ -1032,7 +1032,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { * Liquid-Glass-friendly chrome path. No-op on macOS < 26. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeApplyLargeCornerRadius( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeApplyLargeCornerRadius( JNIEnv *env, jclass clazz, jlong nsViewPtr, jboolean enabled) { NSView *view = (__bridge NSView *)(void *)(uintptr_t)nsViewPtr; if (view == nil) return; @@ -1062,7 +1062,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeDetach( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeDetach( JNIEnv *env, jclass clazz, jlong handle) { if (handle == 0) return; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1084,21 +1084,21 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeDevicePtr( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeDevicePtr( JNIEnv *env, jclass clazz, jlong handle) { if (handle == 0) return 0; return (jlong)(uintptr_t) (__bridge void *) HANDLE_OF(handle)->device; } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeQueuePtr( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeQueuePtr( JNIEnv *env, jclass clazz, jlong handle) { if (handle == 0) return 0; return (jlong)(uintptr_t) (__bridge void *) HANDLE_OF(handle)->queue; } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeResize( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeResize( JNIEnv *env, jclass clazz, jlong handle, jint widthPx, jint heightPx, jfloat scale) { if (handle == 0) return; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1118,7 +1118,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT jobject JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeBeginFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeBeginFrame( JNIEnv *env, jclass clazz, jlong handle) { if (handle == 0) return NULL; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1151,7 +1151,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeIsInTransition( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeIsInTransition( JNIEnv *env, jclass clazz, jlong handle) { if (handle == 0) return JNI_FALSE; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1159,7 +1159,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativePresent( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativePresent( JNIEnv *env, jclass clazz, jlong handle, jlong drawablePtr) { if (handle == 0 || drawablePtr == 0) return; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1178,7 +1178,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { * the enclosing CATransaction together with AppKit mutations made by * `nativePresentWithInterop`'s callback. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeSetPresentsWithTransaction( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeSetPresentsWithTransaction( JNIEnv *env, jclass clazz, jlong handle, jboolean enabled) { (void)env; (void)clazz; if (handle == 0) return; @@ -1198,7 +1198,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { * nativeSetPresentsWithTransaction) so [drawable present] joins our * outer CATransaction instead of being scheduled out of band. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativePresentWithInterop( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativePresentWithInterop( JNIEnv *env, jclass clazz, jlong handle, jlong drawablePtr, jobject interopActions) { if (handle == 0 || drawablePtr == 0) return; NucleusTaoMetalAttachment *att = HANDLE_OF(handle); @@ -1250,7 +1250,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { // All entry points hop to the AppKit main queue before touching AppKit. JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeSetNewFullscreenControls( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeSetNewFullscreenControls( JNIEnv *env, jclass clazz, jlong nsViewPtr, jboolean enabled) { if (nsViewPtr == 0) return; ensureMetalJVMCached(env); @@ -1274,7 +1274,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeInstallMenuBarMonitor( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeInstallMenuBarMonitor( JNIEnv *env, jclass clazz, jlong nsViewPtr) { if (nsViewPtr == 0) return; ensureMetalJVMCached(env); @@ -1290,7 +1290,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeRemoveMenuBarMonitor( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeRemoveMenuBarMonitor( JNIEnv *env, jclass clazz, jlong nsViewPtr) { if (nsViewPtr == 0) return; void *rawPtr = (void *)(uintptr_t)nsViewPtr; @@ -1307,7 +1307,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeSetMenuBarOffset( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeSetMenuBarOffset( JNIEnv *env, jclass clazz, jlong nsViewPtr, jfloat offsetPt) { if (nsViewPtr == 0) return; void *rawPtr = (void *)(uintptr_t)nsViewPtr; @@ -1326,7 +1326,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeUpdateFullScreenButtons( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeUpdateFullScreenButtons( JNIEnv *env, jclass clazz, jlong nsViewPtr) { if (nsViewPtr == 0) return; void *rawPtr = (void *)(uintptr_t)nsViewPtr; @@ -1343,7 +1343,7 @@ static void applyButtonConstraints(NSWindow *window, float titleBarHeight) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeMetalBridge_nativeShutdown( +Java_dev_nucleusframework_nucleus_window_tao_NativeMetalBridge_nativeShutdown( JNIEnv *env, jclass clazz) { // Stop further dispatch_async work and silence JNI callbacks. Cleanup of // remaining monitors is best-effort: a JVM shutdown hook may run very diff --git a/decorated-window-tao/src/main/native/macos/decoration.m b/decorated-window-tao/src/main/native/macos/decoration.m index c2c2772ee..22c443597 100644 --- a/decorated-window-tao/src/main/native/macos/decoration.m +++ b/decorated-window-tao/src/main/native/macos/decoration.m @@ -70,12 +70,12 @@ static jlongArray make_rect_array(JNIEnv *env, NSRect r, CGFloat scale) { /* ================================================================== */ /* JNI exports */ -/* Package: io.github.kdroidfilter.nucleus.window.tao */ +/* Package: dev.nucleusframework.nucleus.window.tao */ /* Class: NativeTaoMacOsDecoBridge */ /* ================================================================== */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeSetOwner( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeSetOwner( JNIEnv *env, jclass clazz, jlong childViewLong, jlong ownerViewLong, jboolean centerOnOwner) { (void)env; (void)clazz; @@ -119,7 +119,7 @@ static jlongArray make_rect_array(JNIEnv *env, NSRect r, CGFloat scale) { } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetWindowRect( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetWindowRect( JNIEnv *env, jclass clazz, jlong nsViewLong) { (void)clazz; @@ -133,7 +133,7 @@ static jlongArray make_rect_array(JNIEnv *env, NSRect r, CGFloat scale) { } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetPrimaryMonitorWorkArea( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetPrimaryMonitorWorkArea( JNIEnv *env, jclass clazz) { (void)clazz; @@ -145,7 +145,7 @@ static jlongArray make_rect_array(JNIEnv *env, NSRect r, CGFloat scale) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetPrimaryMonitorScaleMilli( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeGetPrimaryMonitorScaleMilli( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -171,7 +171,7 @@ static jlongArray make_rect_array(JNIEnv *env, NSRect r, CGFloat scale) { * Sizes are in **points** (logical pixels). Pass non-positive values to * leave the corresponding dimension unchanged. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeApplyContentMinSize( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDecoBridge_nativeApplyContentMinSize( JNIEnv *env, jclass clazz, jlong nsViewLong, jdouble widthPts, jdouble heightPts) { (void)env; (void)clazz; diff --git a/decorated-window-tao/src/main/native/macos/dnd.m b/decorated-window-tao/src/main/native/macos/dnd.m index 8eb8e0cc7..898cdcd9b 100644 --- a/decorated-window-tao/src/main/native/macos/dnd.m +++ b/decorated-window-tao/src/main/native/macos/dnd.m @@ -407,7 +407,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { * pasteboard types we accept. Returns 0 on success, negative on failure. */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeRegister( JNIEnv *env, jclass cls, jlong nsView, jobject callback) { (void)cls; @@ -441,7 +441,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { * fast-path on a missing state and become inert. */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeRevoke( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeRevoke( JNIEnv *env, jclass cls, jlong nsView) { (void)env; (void)cls; @@ -462,7 +462,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { * Kotlin's perspective — matches the Win32 `DoDragDrop` contract. */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeStartDrag( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsDndBridge_nativeStartDrag( JNIEnv *env, jclass cls, jlong nsView, jobjectArray files, jstring text, jint allowedEffects) { (void)cls; diff --git a/decorated-window-tao/src/main/native/macos/native_view.m b/decorated-window-tao/src/main/native/macos/native_view.m index d7c644fc5..5eeed54af 100644 --- a/decorated-window-tao/src/main/native/macos/native_view.m +++ b/decorated-window-tao/src/main/native/macos/native_view.m @@ -245,7 +245,7 @@ - (void)updateTrackingAreas { /* ================================================================== */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeAddSubview( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeAddSubview( JNIEnv *env, jclass clazz, jlong parentPtr, jlong childPtr) { (void)env; (void)clazz; @@ -257,7 +257,7 @@ - (void)updateTrackingAreas { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeRemoveSubview( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeRemoveSubview( JNIEnv *env, jclass clazz, jlong childPtr) { (void)env; (void)clazz; @@ -267,7 +267,7 @@ - (void)updateTrackingAreas { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetSubviewFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetSubviewFrame( JNIEnv *env, jclass clazz, jlong parentPtr, jlong childPtr, jint xPx, jint yPx, jint widthPx, jint heightPx) @@ -310,7 +310,7 @@ - (void)updateTrackingAreas { * to mean "make it a circle". */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetSubviewCornerRadius( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetSubviewCornerRadius( JNIEnv *env, jclass clazz, jlong parentPtr, jlong childPtr, jfloat radiusPx) { (void)env; (void)clazz; @@ -353,7 +353,7 @@ - (void)updateTrackingAreas { * `WKWebView`). Without an event callback installed via * [nativeSetOverlayCallback], the overlay is fully passthrough. */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeCreateOverlay( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeCreateOverlay( JNIEnv *env, jclass clazz, jlong parentNsViewPtr) { (void)env; (void)clazz; @@ -386,7 +386,7 @@ - (void)updateTrackingAreas { /* Repositions the overlay inside its parent. Bounds in physical pixels, * top-left origin (matches Compose's `boundsInWindow`). */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayFrame( JNIEnv *env, jclass clazz, jlong overlayPtr, jint xPx, jint yPx, jint widthPx, jint heightPx) { @@ -413,7 +413,7 @@ - (void)updateTrackingAreas { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayCallback( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayCallback( JNIEnv *env, jclass clazz, jlong overlayPtr, jobject callback) { (void)clazz; @@ -438,7 +438,7 @@ - (void)updateTrackingAreas { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayRegions( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeSetOverlayRegions( JNIEnv *env, jclass clazz, jlong overlayPtr, jfloatArray rectsPx, jint count) { (void)clazz; @@ -466,7 +466,7 @@ - (void)updateTrackingAreas { * whether to consume key events from the host's pre-existing Tao * key-forwarding pipeline. */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeIsFirstResponder( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeIsFirstResponder( JNIEnv *env, jclass clazz, jlong overlayPtr) { (void)env; (void)clazz; @@ -478,7 +478,7 @@ - (void)updateTrackingAreas { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeReleaseOverlay( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoMacOsNativeViewBridge_nativeReleaseOverlay( JNIEnv *env, jclass clazz, jlong overlayPtr) { (void)clazz; diff --git a/decorated-window-tao/src/main/native/macos/popup_panel.m b/decorated-window-tao/src/main/native/macos/popup_panel.m index 08f923108..14e472869 100644 --- a/decorated-window-tao/src/main/native/macos/popup_panel.m +++ b/decorated-window-tao/src/main/native/macos/popup_panel.m @@ -376,12 +376,12 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji /* ================================================================== */ /* JNI exports */ -/* Package: io.github.kdroidfilter.nucleus.window.tao */ +/* Package: dev.nucleusframework.nucleus.window.tao */ /* Class: PopupNativeBridge */ /* ================================================================== */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeCreatePanel( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeCreatePanel( JNIEnv *env, jclass clazz, jlong parentNsViewPtr, jint xPx, jint yPx, jint widthPx, jint heightPx) @@ -429,7 +429,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetFrameInWindow( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetFrameInWindow( JNIEnv *env, jclass clazz, jlong panelPtr, jint xPx, jint yPx, jint widthPx, jint heightPx) @@ -444,7 +444,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeOrderFront( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeOrderFront( JNIEnv *env, jclass clazz, jlong panelPtr) { (void)env; (void)clazz; @@ -454,7 +454,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeOrderOut( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeOrderOut( JNIEnv *env, jclass clazz, jlong panelPtr) { (void)env; (void)clazz; @@ -464,7 +464,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetFocusable( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetFocusable( JNIEnv *env, jclass clazz, jlong panelPtr, jboolean focusable) { (void)env; (void)clazz; @@ -488,7 +488,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji * subviews (a WKWebView etc.). Used for "watermark"-style popups that * should be visible but not block interaction. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetIgnoresMouseEvents( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetIgnoresMouseEvents( JNIEnv *env, jclass clazz, jlong panelPtr, jboolean ignore) { (void)env; (void)clazz; @@ -502,7 +502,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji * native subview (WKWebView etc.). When disabled (default) the panel * intercepts everything — what Compose `Popup` / `DropdownMenu` need. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetRegionHitTestEnabled( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetRegionHitTestEnabled( JNIEnv *env, jclass clazz, jlong panelPtr, jboolean enable) { (void)env; (void)clazz; @@ -520,7 +520,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji * `hitTest:` returns hit only inside one of these rects. Pass count=0 * to clear (full passthrough). */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetInteractiveRegions( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetInteractiveRegions( JNIEnv *env, jclass clazz, jlong panelPtr, jfloatArray rectsPx, jint count) { (void)clazz; @@ -545,7 +545,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeSetEventCallback( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeSetEventCallback( JNIEnv *env, jclass clazz, jlong panelPtr, jobject callback) { (void)clazz; @@ -582,7 +582,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji * The monitor returns the event unchanged so AppKit dispatches it * normally (we observe; we don't consume). */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeInstallOutsideClickMonitor( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeInstallOutsideClickMonitor( JNIEnv *env, jclass clazz, jlong panelPtr, jobject listener) { (void)clazz; @@ -630,7 +630,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeUninstallOutsideClickMonitor( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeUninstallOutsideClickMonitor( JNIEnv *env, jclass clazz, jlong panelPtr) { (void)clazz; @@ -648,7 +648,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeRelease( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeRelease( JNIEnv *env, jclass clazz, jlong panelPtr) { (void)clazz; @@ -685,7 +685,7 @@ static NSRect to_screen_frame(NSWindow *parent, jint xPx, jint yPx, jint wPx, ji } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridge_nativeContentNsView( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridge_nativeContentNsView( JNIEnv *env, jclass clazz, jlong panelPtr) { (void)env; (void)clazz; diff --git a/decorated-window-tao/src/main/native/src/cursor.rs b/decorated-window-tao/src/main/native/src/cursor.rs index cc3e63a5d..d61c560f4 100644 --- a/decorated-window-tao/src/main/native/src/cursor.rs +++ b/decorated-window-tao/src/main/native/src/cursor.rs @@ -37,7 +37,7 @@ fn cursor_from_code(code: jint) -> CursorIcon { } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetCursorIcon( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetCursorIcon( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/a11y.rs b/decorated-window-tao/src/main/native/src/platform/linux/a11y.rs index 1ba04788b..0a09dce2b 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/a11y.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/a11y.rs @@ -743,7 +743,7 @@ fn forward_action_to_jvm( ) { let Some(jvm) = JAVA_VM.get() else { return }; let Ok(mut env) = jvm.attach_current_thread() else { return }; - let class_name = "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge"; + let class_name = "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge"; let node_id = request.target.0 as i64; // Map back to the bitmask the Kotlin controller already understands. @@ -899,7 +899,7 @@ fn forward_action_to_jvm( // don't have to lock back into the Tao `WINDOWS` map from the AT-SPI side. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( _env: JNIEnv, _class: JClass, handle: jlong, @@ -942,7 +942,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( _env: JNIEnv, _class: JClass, handle: jlong, @@ -958,7 +958,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( env: JNIEnv, _class: JClass, handle: jlong, @@ -1042,7 +1042,7 @@ fn apply_parsed(handle: i64, parsed: ParsedSnapshot, partial: bool) -> jboolean } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( env: JNIEnv, _class: JClass, handle: jlong, @@ -1073,7 +1073,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -1094,7 +1094,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -1106,7 +1106,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( _env: JNIEnv, _class: JClass, ) { @@ -1117,7 +1117,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -1133,7 +1133,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// of its actual product name. Must be called before the first Adapter is /// constructed; later calls are silently ignored. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( mut env: JNIEnv, _class: JClass, name: jni::objects::JString, @@ -1146,7 +1146,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( _env: JNIEnv, _class: JClass, handle: jlong, @@ -1188,7 +1188,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// values; AccessKit applies them as-is to its Component.GetExtents /// implementation. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11ySetRootBounds( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11ySetRootBounds( _env: JNIEnv, _class: JClass, handle: jlong, @@ -1284,7 +1284,7 @@ fn scopeguard_restore( } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yResolveX11Bounds( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yResolveX11Bounds( _env: JNIEnv, _class: JClass, handle: jlong, @@ -1383,7 +1383,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// `onFocusChanged` so AT-SPI's `STATE_ACTIVE` flag on the toplevel matches /// the actual X focus. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11ySetWindowFocus( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11ySetWindowFocus( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/decoration.rs b/decorated-window-tao/src/main/native/src/platform/linux/decoration.rs index 0b36b90b4..e9d4e95cb 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/decoration.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/decoration.rs @@ -40,7 +40,7 @@ fn with_window(handle: jlong, f: impl FnOnce(&Window) -> Option) -> Option /// `WINDOWS` map, so the references obtained from `gtk_window()` are valid /// for the duration of this call. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxSetDialogOwner( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxSetDialogOwner( _env: JNIEnv, _class: JClass, child_handle: jlong, @@ -77,7 +77,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// `DecoratedDialog.kt` stays portable. Returns `null` when the geometry /// isn't yet resolvable (window not realised / hidden on Wayland). #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxGetWindowRect( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxGetWindowRect( env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/dnd.rs b/decorated-window-tao/src/main/native/src/platform/linux/dnd.rs index d12d19337..4e511941e 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/dnd.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/dnd.rs @@ -629,7 +629,7 @@ fn start_outbound( // ── JNI exports ──────────────────────────────────────────────────────────── #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeRegister( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeRegister( env: JNIEnv, _class: JClass, handle: jlong, @@ -649,7 +649,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoL } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeRevoke( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeRevoke( _env: JNIEnv, _class: JClass, handle: jlong, @@ -663,7 +663,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoL #[no_mangle] #[allow(unused_mut)] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeStartDrag( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxDndBridge_nativeStartDrag( mut env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/handles.rs b/decorated-window-tao/src/main/native/src/platform/linux/handles.rs index 2913070f5..a5a839fa7 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/handles.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/handles.rs @@ -26,7 +26,7 @@ use crate::state::WINDOWS; /// `raw_window_handle_rwh_06`/`raw_display_handle_rwh_06` impls and expose the /// underlying pointers directly. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxHandles( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxHandles( env: JNIEnv, _class: JClass, handle: jlong, @@ -79,7 +79,7 @@ fn fill_linux_handles(window: &Window, out: &mut [jlong; 3]) { /// passing to the C-side widget embedding helpers in /// `nucleus_tao_linux_widget.c`. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxGtkWindow( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxGtkWindow( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/monitor.rs b/decorated-window-tao/src/main/native/src/platform/linux/monitor.rs index ba26d28bf..50e63dcbc 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/monitor.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/monitor.rs @@ -42,7 +42,7 @@ fn primary_monitor(window: &Window) -> Option { /// origin. Falls back to the full monitor geometry when GDK can't report /// a work area (e.g. some Wayland compositors). #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxPrimaryMonitorWorkArea( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxPrimaryMonitorWorkArea( env: JNIEnv, _class: JClass, handle: jlong, @@ -85,7 +85,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// Used as a scale source for the centring math when the window's own /// scale factor is not yet resolvable. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeLinuxPrimaryMonitorScaleMilli( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeLinuxPrimaryMonitorScaleMilli( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/linux/touch.rs b/decorated-window-tao/src/main/native/src/platform/linux/touch.rs index 62557c0ab..16d684600 100644 --- a/decorated-window-tao/src/main/native/src/platform/linux/touch.rs +++ b/decorated-window-tao/src/main/native/src/platform/linux/touch.rs @@ -502,7 +502,7 @@ fn revoke(handle: u64) { // ── JNI exports ──────────────────────────────────────────────────────────── #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxTouchBridge_nativeRegister( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxTouchBridge_nativeRegister( env: JNIEnv, _class: JClass, handle: jlong, @@ -522,7 +522,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoL } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoLinuxTouchBridge_nativeRevoke( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoLinuxTouchBridge_nativeRevoke( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/macos/a11y.rs b/decorated-window-tao/src/main/native/src/platform/macos/a11y.rs index 3b24ceda4..abf52c535 100644 --- a/decorated-window-tao/src/main/native/src/platform/macos/a11y.rs +++ b/decorated-window-tao/src/main/native/src/platform/macos/a11y.rs @@ -32,7 +32,7 @@ use crate::state::JAVA_VM; // ── JNI exports ─────────────────────────────────────────────────────────── #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( _env: JNIEnv, _class: JClass, ns_view: jlong, @@ -42,7 +42,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( _env: JNIEnv, _class: JClass, ns_view: jlong, @@ -52,7 +52,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( env: JNIEnv, _class: JClass, ns_view: jlong, @@ -74,7 +74,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -83,7 +83,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -92,7 +92,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -101,7 +101,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( _env: JNIEnv, _class: JClass, ) { @@ -109,7 +109,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( _env: JNIEnv, _class: JClass, ns_view: jlong, @@ -121,7 +121,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// No-op on macOS — VoiceOver reads `CFBundleName` for the app name. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( _env: JNIEnv, _class: JClass, _name: JString, @@ -132,7 +132,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// is still at v4 and rejects anything else. Returning `JNI_FALSE` keeps the /// JVM-side controller from believing a partial succeeded. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( _env: JNIEnv, _class: JClass, _ns_view: jlong, @@ -158,7 +158,7 @@ pub extern "C" fn nucleus_tao_a11y_set_text( let slice = unsafe { std::slice::from_raw_parts(utf8, len as usize) }; let Ok(text) = std::str::from_utf8(slice) else { return }; if let Ok(mut env) = jvm.attach_current_thread() { - let class = match env.find_class("io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge") { + let class = match env.find_class("dev/nucleusframework/nucleus/window/tao/NativeTaoBridge") { Ok(c) => c, Err(_) => return, }; @@ -187,7 +187,7 @@ pub extern "C" fn nucleus_tao_a11y_invoke_custom_action( ) { let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { - let class = match env.find_class("io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge") { + let class = match env.find_class("dev/nucleusframework/nucleus/window/tao/NativeTaoBridge") { Ok(c) => c, Err(_) => return, }; @@ -216,7 +216,7 @@ pub extern "C" fn nucleus_tao_a11y_scroll_by( ) { let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { - let class = match env.find_class("io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge") { + let class = match env.find_class("dev/nucleusframework/nucleus/window/tao/NativeTaoBridge") { Ok(c) => c, Err(_) => return, }; @@ -246,7 +246,7 @@ pub extern "C" fn nucleus_tao_a11y_set_selection( ) { let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { - let class = match env.find_class("io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge") { + let class = match env.find_class("dev/nucleusframework/nucleus/window/tao/NativeTaoBridge") { Ok(c) => c, Err(_) => return, }; @@ -277,7 +277,7 @@ pub extern "C" fn nucleus_tao_a11y_invoke_action( ) { let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { - let class = match env.find_class("io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge") { + let class = match env.find_class("dev/nucleusframework/nucleus/window/tao/NativeTaoBridge") { Ok(c) => c, Err(_) => return, }; diff --git a/decorated-window-tao/src/main/native/src/platform/macos/apple_events.rs b/decorated-window-tao/src/main/native/src/platform/macos/apple_events.rs index cd5f6fc9f..1c05d3f33 100644 --- a/decorated-window-tao/src/main/native/src/platform/macos/apple_events.rs +++ b/decorated-window-tao/src/main/native/src/platform/macos/apple_events.rs @@ -15,7 +15,7 @@ use crate::platform::macos::ffi::nucleus_tao_apple_events_install; use crate::state::JAVA_VM; #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeAppleEventsInstall( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeAppleEventsInstall( _env: JNIEnv, _class: JClass, ) { @@ -33,7 +33,7 @@ pub extern "C" fn nucleus_tao_apple_events_dispatch(utf8: *const u8, len: i32) { let Ok(url) = std::str::from_utf8(slice) else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, diff --git a/decorated-window-tao/src/main/native/src/platform/macos/handles.rs b/decorated-window-tao/src/main/native/src/platform/macos/handles.rs index 99862482c..e05dd4215 100644 --- a/decorated-window-tao/src/main/native/src/platform/macos/handles.rs +++ b/decorated-window-tao/src/main/native/src/platform/macos/handles.rs @@ -11,7 +11,7 @@ use crate::state::WINDOWS; /// Returns the underlying NSView pointer so the JVM can attach a CAMetalLayer. /// Must be called on the macOS main thread (i.e. from a Tao event handler). #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeNsViewHandle( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeNsViewHandle( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/macos/ime.rs b/decorated-window-tao/src/main/native/src/platform/macos/ime.rs index d745c3b71..4dfc0476d 100644 --- a/decorated-window-tao/src/main/native/src/platform/macos/ime.rs +++ b/decorated-window-tao/src/main/native/src/platform/macos/ime.rs @@ -13,7 +13,7 @@ use crate::platform::macos::ffi::{ use crate::state::WINDOWS; #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeActivateInputContext( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeActivateInputContext( _env: JNIEnv, _class: JClass, handle: jlong, @@ -38,7 +38,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// `firstRectForCharacterRange:` returning a rect with non-zero size — Tao's /// stock impl returns size 0×0, which short-circuits the picker. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetImeRect( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetImeRect( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/macos/text_overlay.rs b/decorated-window-tao/src/main/native/src/platform/macos/text_overlay.rs index 522830f69..ba4a62770 100644 --- a/decorated-window-tao/src/main/native/src/platform/macos/text_overlay.rs +++ b/decorated-window-tao/src/main/native/src/platform/macos/text_overlay.rs @@ -15,7 +15,7 @@ use crate::platform::macos::ffi::{ use crate::state::WINDOWS; #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeAttachTextOverlay( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeAttachTextOverlay( _env: JNIEnv, _class: JClass, handle: jlong, @@ -32,7 +32,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeFocusTextOverlay( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeFocusTextOverlay( _env: JNIEnv, _class: JClass, focused: jboolean, diff --git a/decorated-window-tao/src/main/native/src/platform/windows/a11y.rs b/decorated-window-tao/src/main/native/src/platform/windows/a11y.rs index 67db446ba..7b0284de8 100644 --- a/decorated-window-tao/src/main/native/src/platform/windows/a11y.rs +++ b/decorated-window-tao/src/main/native/src/platform/windows/a11y.rs @@ -149,7 +149,7 @@ extern "system" fn invoke_action_trampoline(hwnd: i64, node_id: u64, action: u16 let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, @@ -176,7 +176,7 @@ extern "system" fn set_text_trampoline( let Ok(text) = std::str::from_utf8(slice) else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, @@ -201,7 +201,7 @@ extern "system" fn set_selection_trampoline( let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, @@ -226,7 +226,7 @@ extern "system" fn scroll_by_trampoline( let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, @@ -251,7 +251,7 @@ extern "system" fn custom_action_trampoline( let Some(jvm) = JAVA_VM.get() else { return }; if let Ok(mut env) = jvm.attach_current_thread() { let class = match env.find_class( - "io/github/kdroidfilter/nucleus/window/tao/NativeTaoBridge", + "dev/nucleusframework/nucleus/window/tao/NativeTaoBridge", ) { Ok(c) => c, Err(_) => return, @@ -272,7 +272,7 @@ extern "system" fn custom_action_trampoline( // ── JNI exports ─────────────────────────────────────────────────────────── #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yAttach( _env: JNIEnv, _class: JClass, hwnd: jlong, @@ -284,7 +284,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yDetach( _env: JNIEnv, _class: JClass, hwnd: jlong, @@ -296,7 +296,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplySnapshot( env: JNIEnv, _class: JClass, hwnd: jlong, @@ -323,7 +323,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// we default to true to keep snapshots flowing while a UIA client is /// attached. The native side still fast-paths when no listener is bound. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsActive( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -331,7 +331,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yConsumeResync( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -340,7 +340,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// No-op on Windows; per-HWND tracking lives in the C DLL. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yNotePushed( _env: JNIEnv, _class: JClass, ) { @@ -348,7 +348,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// No screen-reader-detect API exposed yet on Windows; report false. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yIsVoiceOverRunning( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -357,7 +357,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// TODO: emit `UIA_AutomationFocusChangedEventId` via `UiaRaiseAutomationEvent`. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yPostFocusChanged( _env: JNIEnv, _class: JClass, _hwnd: jlong, @@ -367,7 +367,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// No-op on Windows — UIA reads the HWND title for the app name. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11ySetAppName( _env: JNIEnv, _class: JClass, _name: jni::objects::JString, @@ -378,7 +378,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// parser is still at v4 and rejects anything else. Returning `JNI_FALSE` /// keeps the JVM-side controller from believing a partial succeeded. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeA11yApplyPartialSnapshot( _env: JNIEnv, _class: JClass, _ns_view: jlong, diff --git a/decorated-window-tao/src/main/native/src/platform/windows/handles.rs b/decorated-window-tao/src/main/native/src/platform/windows/handles.rs index 311363e58..91126528c 100644 --- a/decorated-window-tao/src/main/native/src/platform/windows/handles.rs +++ b/decorated-window-tao/src/main/native/src/platform/windows/handles.rs @@ -13,7 +13,7 @@ use crate::state::WINDOWS; /// Returns the underlying HWND so the JVM can attach a WGL context and apply /// custom decoration via the `nucleus_tao_windows_deco` helper. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeHwndHandle( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeHwndHandle( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/src/window_jni.rs b/decorated-window-tao/src/main/native/src/window_jni.rs index 34da1b4eb..74501c15a 100644 --- a/decorated-window-tao/src/main/native/src/window_jni.rs +++ b/decorated-window-tao/src/main/native/src/window_jni.rs @@ -2,7 +2,7 @@ // // All of these are thin "post a UserEvent on the loop proxy" or "look up the // Window in WINDOWS and read state" wrappers. Symbol naming follows the -// package `io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge`. +// package `dev.nucleusframework.nucleus.window.tao.NativeTaoBridge`. use jni::objects::{JClass, JString}; use jni::sys::{jboolean, jdouble, jint, jlong, JNI_FALSE, JNI_TRUE}; @@ -12,7 +12,7 @@ use crate::events::UserEvent; use crate::state::{clear_event_loop_proxy, send_user_event, JAVA_VM, WINDOWS}; #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeRunBlocking( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeRunBlocking( env: JNIEnv, _class: JClass, callback: jni::objects::JObject, @@ -56,7 +56,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeCreateWindow( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeCreateWindow( mut env: JNIEnv, _class: JClass, handle: jlong, @@ -83,7 +83,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetVisible( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetVisible( _env: JNIEnv, _class: JClass, handle: jlong, @@ -96,7 +96,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetTitle( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetTitle( mut env: JNIEnv, _class: JClass, handle: jlong, @@ -113,7 +113,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeRequestRedraw( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeRequestRedraw( _env: JNIEnv, _class: JClass, handle: jlong, @@ -124,7 +124,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeRequestClose( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeRequestClose( _env: JNIEnv, _class: JClass, handle: jlong, @@ -135,7 +135,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeExit( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeExit( _env: JNIEnv, _class: JClass, ) { @@ -145,7 +145,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// Wakes the Tao event loop so a queued `TaoMainDispatcher` block runs on the /// next tick. Cheap no-op when the loop is already busy. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeWake( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeWake( _env: JNIEnv, _class: JClass, ) { @@ -156,7 +156,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// this also de-minimizes the window so the foreground activation actually /// takes effect (a minimized HWND ignores `SetForegroundWindow`). #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeFocus( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeFocus( _env: JNIEnv, _class: JClass, handle: jlong, @@ -167,7 +167,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeIsAvailable( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeIsAvailable( _env: JNIEnv, _class: JClass, ) -> jboolean { @@ -192,7 +192,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// don't drive a modal AppKit-style loop and the Compose-side hit-testing is /// reliable enough. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeDragWindow( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeDragWindow( _env: JNIEnv, _class: JClass, handle: jlong, @@ -226,7 +226,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeIsMaximized( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeIsMaximized( _env: JNIEnv, _class: JClass, handle: jlong, @@ -250,7 +250,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetMaximized( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetMaximized( _env: JNIEnv, _class: JClass, handle: jlong, @@ -263,7 +263,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetMinimized( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetMinimized( _env: JNIEnv, _class: JClass, handle: jlong, @@ -276,7 +276,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetAlwaysOnTop( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetAlwaysOnTop( _env: JNIEnv, _class: JClass, handle: jlong, @@ -289,7 +289,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetFocusable( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetFocusable( _env: JNIEnv, _class: JClass, handle: jlong, @@ -302,7 +302,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetMinInnerSize( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetMinInnerSize( _env: JNIEnv, _class: JClass, handle: jlong, @@ -317,7 +317,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetWindowIcon( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetWindowIcon( env: JNIEnv, _class: JClass, handle: jlong, @@ -342,7 +342,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetInnerSize( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetInnerSize( _env: JNIEnv, _class: JClass, handle: jlong, @@ -357,7 +357,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetOuterPosition( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetOuterPosition( _env: JNIEnv, _class: JClass, handle: jlong, @@ -372,7 +372,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeIsFullscreen( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeIsFullscreen( _env: JNIEnv, _class: JClass, handle: jlong, @@ -396,7 +396,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB } #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeSetFullscreen( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeSetFullscreen( _env: JNIEnv, _class: JClass, handle: jlong, @@ -411,7 +411,7 @@ pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoB /// Returns the current scale factor of the window (Retina = 2.0, 3.0…). /// Encoded as `(scale * 1000) as i32` to keep a single JNI signature. #[no_mangle] -pub extern "system" fn Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoBridge_nativeScaleFactor( +pub extern "system" fn Java_dev_nucleusframework_nucleus_window_tao_NativeTaoBridge_nativeScaleFactor( _env: JNIEnv, _class: JClass, handle: jlong, diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 4dbc0919c..6e22c48c1 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -363,7 +363,7 @@ static BOOL ensure_callback_methods(JNIEnv *env, jobject callback) { * RegisterDragDrop. Returns 0 on success, negative on failure. */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeRegister( JNIEnv *env, jclass cls, jlong hwnd, jobject callback) { (void)cls; @@ -413,7 +413,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeR * nativeRegister calls. */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeRevoke( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeRevoke( JNIEnv *env, jclass cls, jlong hwnd) { (void)env; (void)cls; @@ -711,7 +711,7 @@ static IDropSourceVtbl g_drop_source_vtbl = { /* ---- nativeStartDrag JNI export ------------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeStartDrag( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDndBridge_nativeStartDrag( JNIEnv *env, jclass cls, jlong hwnd, jobjectArray files, jstring text, jint allowedEffects) { (void)cls; (void)hwnd; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_gl.c index 17d50d50f..80a70da8f 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_gl.c @@ -155,12 +155,12 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { /* ================================================================== */ /* JNI exports */ -/* Package: io.github.kdroidfilter.nucleus.window.tao */ +/* Package: dev.nucleusframework.nucleus.window.tao */ /* Class: NativeTaoGlBridge */ /* ================================================================== */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeAttach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeAttach( JNIEnv *env, jclass clazz, jlong hwndLong) { (void)env; (void)clazz; @@ -262,7 +262,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeAttach( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeDetach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeDetach( JNIEnv *env, jclass clazz, jlong handle) { (void)env; (void)clazz; @@ -276,7 +276,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeDetach( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeMakeCurrent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeMakeCurrent( JNIEnv *env, jclass clazz, jlong handle) { (void)env; (void)clazz; @@ -286,7 +286,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeMakeCurre } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeResize( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeResize( JNIEnv *env, jclass clazz, jlong handle, jint widthPx, jint heightPx, jfloat scale) { (void)env; (void)clazz; @@ -301,7 +301,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeResize( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativePresent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativePresent( JNIEnv *env, jclass clazz, jlong handle) { (void)env; (void)clazz; @@ -311,7 +311,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativePresent( } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeWidth( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeWidth( JNIEnv *env, jclass clazz, jlong handle) { (void)env; (void)clazz; @@ -320,7 +320,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeWidth( } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoGlBridge_nativeHeight( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoGlBridge_nativeHeight( JNIEnv *env, jclass clazz, jlong handle) { (void)env; (void)clazz; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_deco.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_deco.c index 88084bb74..4e4a45f71 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_deco.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_deco.c @@ -260,12 +260,12 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { /* ================================================================== */ /* JNI exports */ -/* Package: io.github.kdroidfilter.nucleus.window.tao */ +/* Package: dev.nucleusframework.nucleus.window.tao */ /* Class: NativeTaoWindowsDecoBridge */ /* ================================================================== */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeInstallDecoration( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeInstallDecoration( JNIEnv *env, jclass clazz, jlong hwndLong, jint titleBarHeightPx) { (void)env; (void)clazz; @@ -303,7 +303,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeUninstallDecoration( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeUninstallDecoration( JNIEnv *env, jclass clazz, jlong hwndLong) { (void)env; (void)clazz; @@ -326,7 +326,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetTitleBarHeight( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetTitleBarHeight( JNIEnv *env, jclass clazz, jlong hwndLong, jint heightPx) { (void)env; (void)clazz; @@ -339,7 +339,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native /* Background color (ARGB) — synced to DWM caption/border color and dark-mode * flag so the "sheet of glass" composited during resize matches the theme. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetBackgroundColor( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetBackgroundColor( JNIEnv *env, jclass clazz, jlong hwndLong, jint argb) { (void)env; (void)clazz; @@ -366,7 +366,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetFullscreen( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetFullscreen( JNIEnv *env, jclass clazz, jlong hwndLong, jboolean fullscreen) { (void)env; (void)clazz; @@ -437,7 +437,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeIsFullscreen( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeIsFullscreen( JNIEnv *env, jclass clazz, jlong hwndLong) { (void)env; (void)clazz; @@ -455,7 +455,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native * Used by DecoratedDialog to make the dialog behave like a real JDialog. * Pass ownerHwndLong == 0 to clear the owner. */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetOwner( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeSetOwner( JNIEnv *env, jclass clazz, jlong childHwndLong, jlong ownerHwndLong) { (void)env; (void)clazz; @@ -474,7 +474,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native * (pre-Windows 10 1607). Used by DecoratedWindow when the window's own * scale factor isn't yet resolvable (pre-onWindowReady). */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetPrimaryMonitorScaleMilli( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetPrimaryMonitorScaleMilli( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -502,7 +502,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native * screen minus the taskbar) in physical pixels. Used by DecoratedWindow to * resolve [WindowPosition.Aligned] for the initial outer position. */ JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetPrimaryMonitorWorkArea( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetPrimaryMonitorWorkArea( JNIEnv *env, jclass clazz) { (void)clazz; @@ -523,7 +523,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_native * coordinates (physical pixels). Used by DecoratedDialog to centre itself on * its parent. Returns NULL if hwnd is invalid. */ JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetWindowRect( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsDecoBridge_nativeGetWindowRect( JNIEnv *env, jclass clazz, jlong hwndLong) { (void)clazz; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c index b44c15911..27d83c58a 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c @@ -45,7 +45,7 @@ static HWND hwnd_from_jlong(jlong v) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeAttach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeAttach( JNIEnv *env, jclass clazz, jlong parentHwnd, jlong childHwnd) { (void)env; (void)clazz; HWND parent = hwnd_from_jlong(parentHwnd); @@ -89,7 +89,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeDetach( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeDetach( JNIEnv *env, jclass clazz, jlong childHwnd) { (void)env; (void)clazz; HWND child = hwnd_from_jlong(childHwnd); @@ -103,7 +103,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeSetFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeSetFrame( JNIEnv *env, jclass clazz, jlong parentHwnd, jlong childHwnd, jint xPx, jint yPx, jint widthPx, jint heightPx) { (void)env; (void)clazz; (void)parentHwnd; @@ -116,7 +116,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_ } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeIsFocusInTree( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeIsFocusInTree( JNIEnv *env, jclass clazz, jlong parentHwnd) { (void)env; (void)clazz; HWND parent = hwnd_from_jlong(parentHwnd); @@ -128,7 +128,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeSetCornerRadius( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsNativeViewBridge_nativeSetCornerRadius( JNIEnv *env, jclass clazz, jlong parentHwnd, jlong childHwnd, jfloat radiusPx) { (void)env; (void)clazz; (void)parentHwnd; HWND child = hwnd_from_jlong(childHwnd); diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index 0045ef344..c760e9113 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -435,7 +435,7 @@ static void ensureClassRegistered(void) { /* ============================================================ */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeCreateOverlay( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeCreateOverlay( JNIEnv *env, jclass clazz, jlong ownerHwnd) { (void)clazz; if (sJVM == NULL) (*env)->GetJavaVM(env, &sJVM); @@ -498,7 +498,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayFrame( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayFrame( JNIEnv *env, jclass clazz, jlong overlay, jint xPx, jint yPx, jint widthPx, jint heightPx) { (void)env; (void)clazz; @@ -519,7 +519,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayRegions( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayRegions( JNIEnv *env, jclass clazz, jlong overlay, jfloatArray rectsXYWHPx, jint count) { (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -580,7 +580,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayCallback( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayCallback( JNIEnv *env, jclass clazz, jlong overlay, jobject callback) { (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -593,7 +593,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayKeyCallback( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetOverlayKeyCallback( JNIEnv *env, jclass clazz, jlong overlay, jobject callback) { (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -605,7 +605,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeMakeCurrent( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeMakeCurrent( JNIEnv *env, jclass clazz, jlong overlay) { (void)env; (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -614,7 +614,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSwapBuffers( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSwapBuffers( JNIEnv *env, jclass clazz, jlong overlay) { (void)env; (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -624,7 +624,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetCursor( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeSetCursor( JNIEnv *env, jclass clazz, jlong overlay, jint cursorCode) { (void)env; (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; @@ -646,7 +646,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeReleaseOverlay( +Java_dev_nucleusframework_nucleus_window_tao_NativeTaoWindowsOverlayBridge_nativeReleaseOverlay( JNIEnv *env, jclass clazz, jlong overlay) { (void)clazz; OverlayState *s = (OverlayState *)(uintptr_t)overlay; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index 55dff1c75..abc7d8670 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -340,7 +340,7 @@ static void ensurePopupClassRegistered(void) { /* ============================================================ */ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeCreatePanel( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeCreatePanel( JNIEnv *env, jclass clazz, jlong parentHwnd, jint xPx, jint yPx, jint widthPx, jint heightPx) { (void)clazz; if (sJVM == NULL) (*env)->GetJavaVM(env, &sJVM); @@ -395,7 +395,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeCr } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetFrameInWindow( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetFrameInWindow( JNIEnv *env, jclass clazz, jlong panel, jint xPx, jint yPx, jint widthPx, jint heightPx) { (void)env; (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -410,7 +410,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSe } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetFocusable( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetFocusable( JNIEnv *env, jclass clazz, jlong panel, jboolean focusable) { (void)env; (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -419,7 +419,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSe } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeContentHwnd( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeContentHwnd( JNIEnv *env, jclass clazz, jlong panel) { (void)env; (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -427,7 +427,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeCo } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeMakeCurrent( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeMakeCurrent( JNIEnv *env, jclass clazz, jlong panel) { (void)env; (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -436,7 +436,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeMa } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSwapBuffers( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeSwapBuffers( JNIEnv *env, jclass clazz, jlong panel) { (void)env; (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -446,7 +446,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSw } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetEventCallback( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeSetEventCallback( JNIEnv *env, jclass clazz, jlong panel, jobject callback) { (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -458,7 +458,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeSe } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeInstallOutsideClickMonitor( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeInstallOutsideClickMonitor( JNIEnv *env, jclass clazz, jlong panel, jobject listener) { (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -477,7 +477,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeIn } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeUninstallOutsideClickMonitor( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeUninstallOutsideClickMonitor( JNIEnv *env, jclass clazz, jlong panel) { (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; @@ -493,7 +493,7 @@ Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeUn } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_window_tao_PopupNativeBridgeWindows_nativeRelease( +Java_dev_nucleusframework_nucleus_window_tao_PopupNativeBridgeWindows_nativeRelease( JNIEnv *env, jclass clazz, jlong panel) { (void)clazz; PopupState *p = (PopupState *)(uintptr_t)panel; diff --git a/decorated-window-tao/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-tao/reachability-metadata.json b/decorated-window-tao/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-tao/reachability-metadata.json similarity index 77% rename from decorated-window-tao/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-tao/reachability-metadata.json rename to decorated-window-tao/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-tao/reachability-metadata.json index a79d01776..8ed0a9d21 100644 --- a/decorated-window-tao/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.decorated-window-tao/reachability-metadata.json +++ b/decorated-window-tao/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.decorated-window-tao/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoBridge", "jniAccessible": true, "methods": [ { "name": "dispatchDeepLink", "parameterTypes": ["java.lang.String"] }, @@ -15,11 +15,11 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.TaoDeepLinkBridge", + "type": "dev.nucleusframework.nucleus.window.tao.TaoDeepLinkBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoBridge$EventCallback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoBridge$EventCallback", "jniAccessible": true, "methods": [ { @@ -67,7 +67,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.TaoApplication$EventDispatcher", + "type": "dev.nucleusframework.nucleus.window.tao.TaoApplication$EventDispatcher", "jniAccessible": true, "allDeclaredFields": true, "methods": [ @@ -116,7 +116,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeMetalBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeMetalBridge", "jniAccessible": true, "methods": [ { @@ -129,7 +129,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.MetalFrame", + "type": "dev.nucleusframework.nucleus.window.tao.render.MetalFrame", "jniAccessible": true, "methods": [ { @@ -152,23 +152,23 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoGlBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoGlBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDecoBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDecoBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsNativeViewBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsNativeViewBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsOverlayBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsOverlayBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsOverlayBridge$OverlayEventCallback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsOverlayBridge$OverlayEventCallback", "jniAccessible": true, "methods": [ { "name": "onPointerEvent", "parameterTypes": ["int","float","float","int","int"] }, @@ -176,7 +176,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeViewOverlayControllerWindows$OverlayCallback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeViewOverlayControllerWindows$OverlayCallback", "jniAccessible": true, "methods": [ { "name": "onPointerEvent", "parameterTypes": ["int","float","float","int","int"] }, @@ -184,18 +184,18 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsOverlayBridge$OverlayKeyCallback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsOverlayBridge$OverlayKeyCallback", "jniAccessible": true, "methods": [ { "name": "onKeyEvent", "parameterTypes": ["int","int","int","int"] } ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.PopupNativeBridgeWindows", + "type": "dev.nucleusframework.nucleus.window.tao.PopupNativeBridgeWindows", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.PopupNativeBridgeWindows$EventCallback", + "type": "dev.nucleusframework.nucleus.window.tao.PopupNativeBridgeWindows$EventCallback", "jniAccessible": true, "methods": [ { "name": "onPointerEvent", "parameterTypes": ["int","float","float","int","int"] }, @@ -204,14 +204,14 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.PopupNativeBridgeWindows$OutsideClickListener", + "type": "dev.nucleusframework.nucleus.window.tao.PopupNativeBridgeWindows$OutsideClickListener", "jniAccessible": true, "methods": [ { "name": "onOutsideClick", "parameterTypes": ["int","int"] } ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoPopupSceneLayerWindows$PopupEventCallback", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoPopupSceneLayerWindows$PopupEventCallback", "jniAccessible": true, "methods": [ { "name": "onPointerEvent", "parameterTypes": ["int","float","float","int","int"] }, @@ -220,37 +220,37 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoPopupSceneLayerWindows$PopupOutsideListener", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoPopupSceneLayerWindows$PopupOutsideListener", "jniAccessible": true, "methods": [ { "name": "onOutsideClick", "parameterTypes": ["int","int"] } ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDecoBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDecoBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoEglBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoEglBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxWidgetBridge$OverlayInputCallback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxWidgetBridge$OverlayInputCallback", "jniAccessible": true, "methods": [ { "name": "onEvent", "parameterTypes": ["int","int","int","int","int"] } ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoWindowsDndBridge$Callback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoWindowsDndBridge$Callback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -260,7 +260,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostWindows$InboundDnDCallback", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostWindows$InboundDnDCallback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -270,11 +270,11 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoMacOsDndBridge$Callback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoMacOsDndBridge$Callback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -284,7 +284,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHost$InboundDnDCallback", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHost$InboundDnDCallback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -294,11 +294,11 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxDndBridge$Callback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxDndBridge$Callback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -308,7 +308,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostLinux$InboundDnDCallback", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostLinux$InboundDnDCallback", "jniAccessible": true, "methods": [ { "name": "onDragEnter", "parameterTypes": ["long","int","int","int","boolean"] }, @@ -318,11 +318,11 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxTouchBridge", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxTouchBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.NativeTaoLinuxTouchBridge$Callback", + "type": "dev.nucleusframework.nucleus.window.tao.NativeTaoLinuxTouchBridge$Callback", "jniAccessible": true, "methods": [ { "name": "onTouchEvent", "parameterTypes": ["long","int","int","long[]","long[]","long[]","long"] }, @@ -330,7 +330,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.window.tao.render.TaoComposeSceneHostLinux$InboundTouchCallback", + "type": "dev.nucleusframework.nucleus.window.tao.render.TaoComposeSceneHostLinux$InboundTouchCallback", "jniAccessible": true, "methods": [ { "name": "onTouchEvent", "parameterTypes": ["long","int","int","long[]","long[]","long[]","long"] }, diff --git a/docs/auto-update.md b/docs/auto-update.md index 62070396c..3474d6ebe 100644 --- a/docs/auto-update.md +++ b/docs/auto-update.md @@ -23,7 +23,7 @@ flowchart LR ``` !!! tip "Try it yourself" - Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. + Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats @@ -62,7 +62,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -96,7 +96,7 @@ releaseDate: '2026-03-01T12:00:00.000Z' ``` !!! tip - In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. + In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples @@ -174,7 +174,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts @@ -221,16 +221,16 @@ See [Publishing](publishing.md) for the full configuration reference. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.updater-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.updater-runtime:1.0.0") } ``` ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.updater.NucleusUpdater -import io.github.kdroidfilter.nucleus.updater.UpdateResult -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.updater.NucleusUpdater +import dev.nucleusframework.nucleus.updater.UpdateResult +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider val updater = NucleusUpdater { provider = GitHubProvider(owner = "myorg", repo = "myapp") @@ -281,7 +281,7 @@ NucleusUpdater { #### GitHub Releases ```kotlin -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider provider = GitHubProvider( owner = "myorg", @@ -293,7 +293,7 @@ provider = GitHubProvider( #### Generic HTTP Server ```kotlin -import io.github.kdroidfilter.nucleus.updater.provider.GenericProvider +import dev.nucleusframework.nucleus.updater.provider.GenericProvider provider = GenericProvider( baseUrl = "https://updates.example.com" @@ -459,17 +459,17 @@ To fix this, pass a client built with [`NativeHttpClient`](runtime/native-http.m ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") - implementation("io.github.kdroidfilter:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.native-http:") } ``` **2. Inject the client in the updater config** ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient -import io.github.kdroidfilter.nucleus.updater.NucleusUpdater -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient +import dev.nucleusframework.nucleus.updater.NucleusUpdater +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider val updater = NucleusUpdater { provider = GitHubProvider(owner = "myorg", repo = "myapp") @@ -482,7 +482,7 @@ The injected client is used for **both** the metadata check and the file downloa You can also compose additional options via the builder extension: ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient.withNativeSsl +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient.withNativeSsl import java.net.http.HttpClient import java.time.Duration diff --git a/docs/changelog.md b/docs/changelog.md index aeefe33a9..fe59d6bc9 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -525,7 +525,7 @@ nativeDistributions { ### Bug Fixes -- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/kdroidFilter/Nucleus/issues/53)) +- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/nucleusframework/Nucleus/issues/53)) - Promote `core-runtime` to `api` scope in `updater-runtime` and `system-color` so consumers no longer need to declare it separately. - Include generic provider in publish mode detection. - Skip Flatpak packaging gracefully when `flatpak` CLI is missing. @@ -664,15 +664,15 @@ nativeDistributions { - **Fix Windows fullscreen** — Compose for Desktop does not handle fullscreen correctly on Windows (window does not cover the taskbar). Now uses native Win32 APIs for true fullscreen, matching Edge and other native Windows applications. - **Eliminate white resize flash on Windows** — Adjust Skiko's clear color to transparent for dark themes and synchronize DWM caption/border colors for consistent Windows 11 window chrome styling. -- **Skip Android configurations in `CleanNativeLibsTransform`** — Fixes build issues when Android targets are present. ([#79](https://github.com/kdroidFilter/ComposeDeskKit/issues/79)) -- **Skip ZIP stapling to preserve blockmap** — Prevents breaking auto-update blockmap integrity during notarization. ([#70](https://github.com/kdroidFilter/ComposeDeskKit/issues/70)) -- **Detect target arch from JDK release file for cross-building** — Fixes architecture detection when cross-compiling. ([#71](https://github.com/kdroidFilter/ComposeDeskKit/issues/71)) +- **Skip Android configurations in `CleanNativeLibsTransform`** — Fixes build issues when Android targets are present. ([#79](https://github.com/nucleusframework/ComposeDeskKit/issues/79)) +- **Skip ZIP stapling to preserve blockmap** — Prevents breaking auto-update blockmap integrity during notarization. ([#70](https://github.com/nucleusframework/ComposeDeskKit/issues/70)) +- **Detect target arch from JDK release file for cross-building** — Fixes architecture detection when cross-compiling. ([#71](https://github.com/nucleusframework/ComposeDeskKit/issues/71)) - Move Windows dark mode monitoring to native thread for reliability. - Correct D-Bus `ReadOne` variant parsing for Linux accent color. ### Deprecations -- **`appStore` property deprecated** — PKG distributions are now always treated as App Store builds. The `appStore` property is no longer needed. ([#65](https://github.com/kdroidFilter/ComposeDeskKit/issues/65)) +- **`appStore` property deprecated** — PKG distributions are now always treated as App Store builds. The `appStore` property is no longer needed. ([#65](https://github.com/nucleusframework/ComposeDeskKit/issues/65)) --- @@ -822,17 +822,17 @@ The `decorated-window` module has been split into three modules: **Dependency update** — replace: ```kotlin -implementation("io.github.kdroidfilter:nucleus.decorated-window:") +implementation("dev.nucleusframework:nucleus.decorated-window:") ``` With one of: ```kotlin // JBR-based (same behavior as before) -implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:") +implementation("dev.nucleusframework:nucleus.decorated-window-jbr:") // JNI-based (no JBR dependency, works with GraalVM) -implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") +implementation("dev.nucleusframework:nucleus.decorated-window-jni:") ``` **Breaking changes in `TitleBarColors`** — the following fields have been **removed**: @@ -844,7 +844,7 @@ implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") These platform-specific button state colors are now handled internally by each module's native implementation. If you were constructing `TitleBarColors` explicitly with these fields, remove them. -**No other code changes required** — all composable APIs (`DecoratedWindow`, `DecoratedDialog`, `TitleBar`, `DialogTitleBar`), scopes, and state types are identical. No import changes needed — the package remains `io.github.kdroidfilter.nucleus.window`. +**No other code changes required** — all composable APIs (`DecoratedWindow`, `DecoratedDialog`, `TitleBar`, `DialogTitleBar`), scopes, and state types are identical. No import changes needed — the package remains `dev.nucleusframework.nucleus.window`. See [Decorated Window](runtime/decorated-window.md) for full details on choosing between JBR and JNI. diff --git a/docs/ci-cd.md b/docs/ci-cd.md index 32d95d428..d393fc8c0 100644 --- a/docs/ci-cd.md +++ b/docs/ci-cd.md @@ -7,7 +7,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -42,7 +42,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -79,7 +79,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -172,7 +172,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -225,7 +225,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -271,7 +271,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main + uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -299,7 +299,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main + uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -375,7 +375,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main + uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -432,14 +432,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main + uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: kdroidFilter/Nucleus/.github/actions/publish-release@main + uses: nucleusframework/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -467,16 +467,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -528,7 +528,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -574,5 +574,5 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually diff --git a/docs/comparison/packaging.md b/docs/comparison/packaging.md index 59533b504..6b3bd56b7 100644 --- a/docs/comparison/packaging.md +++ b/docs/comparison/packaging.md @@ -75,7 +75,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -111,7 +111,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -135,7 +135,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -159,7 +159,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -181,7 +181,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -204,7 +204,7 @@ Nucleus's CI pipeline is its strongest JVM differentiator. No other JVM tool pro | jpackage | ❌ | ❌ | ✅ (JDK built-in) | — | **4** | ??? info "Sources" - - **Nucleus**: Gradle plugin (`io.github.kdroidfilter.nucleus`), no Maven or CLI support + - **Nucleus**: Gradle plugin (`dev.nucleusframework.nucleus`), no Maven or CLI support - **Conveyor**: [Gradle/Maven integration](https://conveyor.hydraulic.dev/21.1/configs/maven-gradle/) — open-source Gradle plugin (Gradle 7+); Maven via `mvn dependency:build-classpath` CLI integration; standalone `conveyor` CLI - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE + CLI + Gradle + Maven + Ant plugins - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — CLI tool, Maven integration, npm package @@ -232,7 +232,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -259,7 +259,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -277,7 +277,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -301,7 +301,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -321,14 +321,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files @@ -350,7 +350,7 @@ The `native-ssl` module is unique in the JVM packaging space: it replaces the JS | Compose MP | ✅ | Partial | ❌ | ❌ | ❌ | ✅ | **5** | ??? info "Sources" - - **Nucleus**: [docs site](https://kdroidfilter.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` + - **Nucleus**: [docs site](https://nucleusframework.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` - **Conveyor**: [docs site](https://conveyor.hydraulic.dev/21.1/) — tutorials, 120+ config keys, CI guide, comparisons page, multiple sample projects - **install4j**: [help center](https://www.ej-technologies.com/resources/install4j/help/doc/) — extensive searchable docs - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — CLI reference only diff --git a/docs/getting-started.md b/docs/getting-started.md index 394b62ef0..2a6d606fd 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -19,11 +19,11 @@ Add the Nucleus plugin to your `build.gradle.kts`: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } ``` -The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus). No additional repository configuration is needed. +The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus). No additional repository configuration is needed. ### Runtime Libraries (Optional) @@ -34,19 +34,19 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection + single instance + deep links - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") // AOT cache runtime detection (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") // Auto-update library (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") // Custom decorated window with native title bar - implementation("io.github.kdroidfilter:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window:") } ``` diff --git a/docs/graalvm/runtime-bootstrap.md b/docs/graalvm/runtime-bootstrap.md index dbbc00f0d..6bbac1d0a 100644 --- a/docs/graalvm/runtime-bootstrap.md +++ b/docs/graalvm/runtime-bootstrap.md @@ -6,14 +6,14 @@ The `graalvm-runtime` module provides everything needed to bootstrap a Compose D ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` Then call `GraalVmInitializer.initialize()` as the **first line** of your `main()` function, before any AWT or Compose usage: ```kotlin -import io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer +import dev.nucleusframework.nucleus.graalvm.GraalVmInitializer fun main() { GraalVmInitializer.initialize() diff --git a/docs/graalvm/tasks-ci.md b/docs/graalvm/tasks-ci.md index 69c4d5e7c..d45b07c61 100644 --- a/docs/graalvm/tasks-ci.md +++ b/docs/graalvm/tasks-ci.md @@ -103,7 +103,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -163,12 +163,12 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies diff --git a/docs/index.md b/docs/index.md index dae1709ef..f3d50d558 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,10 +4,10 @@ Nucleus

-[![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/io.github.kdroidfilter.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus) -[![Maven Central](https://img.shields.io/maven-central/v/io.github.kdroidfilter/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=io.github.kdroidfilter.nucleus) -[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) +[![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) +[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) @@ -65,7 +65,7 @@ Nucleus meets you where you are: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } nucleus.application { @@ -86,7 +86,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). === "macOS" ```bash @@ -101,7 +101,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. === "Windows" - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -113,7 +113,7 @@ What you'll see: !!! tip "Test auto-update" Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -125,4 +125,4 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). diff --git a/docs/install-linux.sh b/docs/install-linux.sh index f4ffb58af..c4d4fd9b0 100755 --- a/docs/install-linux.sh +++ b/docs/install-linux.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="kdroidFilter/Nucleus" +repo="nucleusframework/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/install.sh b/docs/install.sh index eccab79a8..1d7f27cad 100755 --- a/docs/install.sh +++ b/docs/install.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="kdroidFilter/Nucleus" +repo="nucleusframework/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/llm.md b/docs/llm.md index 439be4099..683186997 100644 --- a/docs/llm.md +++ b/docs/llm.md @@ -11,7 +11,7 @@ Nucleus provides machine-readable documentation files designed for Large Languag ## How They Stay Up to Date -Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/kdroidFilter/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. +Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/nucleusframework/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. !!! tip "Contributing" Never edit `llms.txt` or `llms-full.txt` manually — edit the source `.md` files in `docs/` and the script regenerates them automatically. diff --git a/docs/llms-full.txt b/docs/llms-full.txt index b7a6e3e61..5006ff084 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -2,10 +2,10 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. -- Docs: https://nucleus.kdroidfilter.com -- GitHub: https://github.com/kdroidFilter/Nucleus -- Gradle Plugin Portal: https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus -- Maven Central: https://central.sonatype.com/search?q=io.github.kdroidfilter.nucleus +- Docs: https://nucleus.nucleusframework.com +- GitHub: https://github.com/nucleusframework/Nucleus +- Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus +- Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT **Nucleus is the Kotlin framework for native desktop apps.** Combined with Compose Multiplatform, it forms the most complete, most performant, and most deeply integrated desktop application stack ever built — on any language, any runtime, any platform. @@ -62,7 +62,7 @@ Nucleus meets you where you are: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } nucleus.application { @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). --- @@ -143,11 +143,11 @@ Add the Nucleus plugin to your `build.gradle.kts`: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } ``` -The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus). No additional repository configuration is needed. +The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus). No additional repository configuration is needed. ### Runtime Libraries (Optional) @@ -158,19 +158,19 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection + single instance + deep links - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") // AOT cache runtime detection (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") // Auto-update library (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") // Custom decorated window with native title bar - implementation("io.github.kdroidfilter:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window:") } ``` @@ -1576,7 +1576,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` @@ -2168,7 +2168,7 @@ Nucleus provides a complete auto-update solution compatible with the [electron-b ## How It Works -**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. +**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats | Platform | Updatable Formats | Not updatable (Store-managed) | @@ -2204,7 +2204,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -2237,7 +2237,7 @@ sha512: releaseDate: '2026-03-01T12:00:00.000Z' ``` -**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. +**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples Three YAML files are generated per release: @@ -2314,7 +2314,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts @@ -2361,16 +2361,16 @@ See [Publishing](publishing.md) for the full configuration reference. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.updater-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.updater-runtime:1.0.0") } ``` ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.updater.NucleusUpdater -import io.github.kdroidfilter.nucleus.updater.UpdateResult -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.updater.NucleusUpdater +import dev.nucleusframework.nucleus.updater.UpdateResult +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider val updater = NucleusUpdater { provider = GitHubProvider(owner = "myorg", repo = "myapp") @@ -2421,7 +2421,7 @@ NucleusUpdater { #### GitHub Releases ```kotlin -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider provider = GitHubProvider( owner = "myorg", @@ -2433,7 +2433,7 @@ provider = GitHubProvider( #### Generic HTTP Server ```kotlin -import io.github.kdroidfilter.nucleus.updater.provider.GenericProvider +import dev.nucleusframework.nucleus.updater.provider.GenericProvider provider = GenericProvider( baseUrl = "https://updates.example.com" @@ -2599,17 +2599,17 @@ To fix this, pass a client built with [`NativeHttpClient`](runtime/native-http.m ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") - implementation("io.github.kdroidfilter:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.native-http:") } ``` **2. Inject the client in the updater config** ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient -import io.github.kdroidfilter.nucleus.updater.NucleusUpdater -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient +import dev.nucleusframework.nucleus.updater.NucleusUpdater +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider val updater = NucleusUpdater { provider = GitHubProvider(owner = "myorg", repo = "myapp") @@ -2622,7 +2622,7 @@ The injected client is used for **both** the metadata check and the file downloa You can also compose additional options via the builder extension: ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient.withNativeSsl +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient.withNativeSsl import java.net.http.HttpClient import java.time.Duration @@ -3091,14 +3091,14 @@ To detect AOT mode at runtime (e.g. to self-terminate during training or skip he ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") // Transitive: nucleus.core-runtime is pulled in via `api` } ``` ```kotlin -import io.github.kdroidfilter.nucleus.aot.runtime.AotRuntime -import io.github.kdroidfilter.nucleus.aot.runtime.AotRuntimeMode +import dev.nucleusframework.nucleus.aot.runtime.AotRuntime +import dev.nucleusframework.nucleus.aot.runtime.AotRuntimeMode ``` ## Modes @@ -3197,8 +3197,8 @@ The `aot-runtime` module re-exports `ExecutableRuntime` and `ExecutableType` via ```kotlin // Both work: -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.aot.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.aot.runtime.ExecutableRuntime ``` --- @@ -3443,14 +3443,14 @@ The `graalvm-runtime` module provides everything needed to bootstrap a Compose D ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` Then call `GraalVmInitializer.initialize()` as the **first line** of your `main()` function, before any AWT or Compose usage: ```kotlin -import io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer +import dev.nucleusframework.nucleus.graalvm.GraalVmInitializer fun main() { GraalVmInitializer.initialize() @@ -3620,7 +3620,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -3680,15 +3680,15 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies --- @@ -3713,14 +3713,14 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup -**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). +**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: ```kotlin // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess + id("dev.nucleusframework.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess } kotlin { @@ -3757,7 +3757,7 @@ my-app/ ```kotlin plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" + id("dev.nucleusframework.nucleusnativeaccess") version "" } kotlin { @@ -3779,7 +3779,7 @@ plugins { kotlin("multiplatform") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } kotlin { @@ -3816,9 +3816,9 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. -The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. +The plugin ID is `dev.nucleusframework.nucleusnativeaccess`. ## Next steps @@ -3974,7 +3974,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. -**Full working example:** The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. +**Full working example:** The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: ### macOS @@ -4076,7 +4076,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -4092,7 +4092,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4129,7 +4129,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4222,7 +4222,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4275,7 +4275,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -4321,7 +4321,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main + uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -4349,7 +4349,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main + uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -4425,7 +4425,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main + uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -4482,14 +4482,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main + uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: kdroidFilter/Nucleus/.github/actions/publish-release@main + uses: nucleusframework/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -4517,16 +4517,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -4578,7 +4578,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4624,7 +4624,7 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually --- @@ -4637,70 +4637,70 @@ Nucleus provides runtime libraries for use in your application code. All are pub | Library | Artifact | Description | |---------|----------|-------------| -| Core Runtime | `io.github.kdroidfilter:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | -| AOT Runtime | `io.github.kdroidfilter:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | -| Updater Runtime | `io.github.kdroidfilter:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | -| Taskbar Progress | `io.github.kdroidfilter:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | -| Notification (macOS) | `io.github.kdroidfilter:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | -| Notification (Windows) | `io.github.kdroidfilter:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | -| Launcher (Windows) | `io.github.kdroidfilter:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | -| Notification (Linux) | `io.github.kdroidfilter:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | -| Launcher (Linux) | `io.github.kdroidfilter:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | -| Launcher (macOS) | `io.github.kdroidfilter:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | -| Media Control | `io.github.kdroidfilter:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | -| Menu (macOS) | `io.github.kdroidfilter:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | -| SF Symbols | `io.github.kdroidfilter:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | -| Freedesktop Icons | `io.github.kdroidfilter:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | -| Decorated Window | `io.github.kdroidfilter:nucleus.decorated-window` | Custom window decorations with native title bar | -| Decorated Window — Jewel | `io.github.kdroidfilter:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | -| Decorated Window — Material 2 | `io.github.kdroidfilter:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | -| Decorated Window — Material 3 | `io.github.kdroidfilter:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | -| Dark Mode Detector | `io.github.kdroidfilter:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | -| System Color | `io.github.kdroidfilter:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | -| Energy Manager | `io.github.kdroidfilter:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | -| Native SSL | `io.github.kdroidfilter:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | -| Native HTTP | `io.github.kdroidfilter:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | -| Native HTTP — OkHttp | `io.github.kdroidfilter:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | -| Native HTTP — Ktor | `io.github.kdroidfilter:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | -| Linux HiDPI | `io.github.kdroidfilter:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | -| Scheduler | `io.github.kdroidfilter:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | -| Service Management (macOS) | `io.github.kdroidfilter:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | -| Auto-Launch | `io.github.kdroidfilter:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | -| GraalVM Runtime | `io.github.kdroidfilter:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | +| Core Runtime | `dev.nucleusframework:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | +| AOT Runtime | `dev.nucleusframework:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | +| Updater Runtime | `dev.nucleusframework:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | +| Taskbar Progress | `dev.nucleusframework:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | +| Notification (macOS) | `dev.nucleusframework:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | +| Notification (Windows) | `dev.nucleusframework:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | +| Launcher (Windows) | `dev.nucleusframework:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | +| Notification (Linux) | `dev.nucleusframework:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | +| Launcher (Linux) | `dev.nucleusframework:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | +| Launcher (macOS) | `dev.nucleusframework:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | +| Media Control | `dev.nucleusframework:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | +| Menu (macOS) | `dev.nucleusframework:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | +| SF Symbols | `dev.nucleusframework:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | +| Freedesktop Icons | `dev.nucleusframework:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | +| Decorated Window | `dev.nucleusframework:nucleus.decorated-window` | Custom window decorations with native title bar | +| Decorated Window — Jewel | `dev.nucleusframework:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | +| Decorated Window — Material 2 | `dev.nucleusframework:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | +| Decorated Window — Material 3 | `dev.nucleusframework:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | +| Dark Mode Detector | `dev.nucleusframework:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | +| System Color | `dev.nucleusframework:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | +| Energy Manager | `dev.nucleusframework:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | +| Native SSL | `dev.nucleusframework:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | +| Native HTTP | `dev.nucleusframework:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | +| Native HTTP — OkHttp | `dev.nucleusframework:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | +| Native HTTP — Ktor | `dev.nucleusframework:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | +| Linux HiDPI | `dev.nucleusframework:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | +| Scheduler | `dev.nucleusframework:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | +| Service Management (macOS) | `dev.nucleusframework:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | +| Auto-Launch | `dev.nucleusframework:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | +| GraalVM Runtime | `dev.nucleusframework:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | ```kotlin dependencies { // Pick what you need: - implementation("io.github.kdroidfilter:nucleus.core-runtime:") - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") - implementation("io.github.kdroidfilter:nucleus.notification-macos:") - implementation("io.github.kdroidfilter:nucleus.notification-windows:") - implementation("io.github.kdroidfilter:nucleus.launcher-windows:") - implementation("io.github.kdroidfilter:nucleus.notification-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-macos:") - implementation("io.github.kdroidfilter:nucleus.media-control:") - implementation("io.github.kdroidfilter:nucleus.menu-macos:") - implementation("io.github.kdroidfilter:nucleus.sf-symbols:") - implementation("io.github.kdroidfilter:nucleus.freedesktop-icons:") - implementation("io.github.kdroidfilter:nucleus.decorated-window:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") - implementation("io.github.kdroidfilter:nucleus.darkmode-detector:") - implementation("io.github.kdroidfilter:nucleus.system-color:") - implementation("io.github.kdroidfilter:nucleus.energy-manager:") - implementation("io.github.kdroidfilter:nucleus.native-ssl:") - implementation("io.github.kdroidfilter:nucleus.native-http:") - implementation("io.github.kdroidfilter:nucleus.native-http-okhttp:") - implementation("io.github.kdroidfilter:nucleus.native-http-ktor:") - implementation("io.github.kdroidfilter:nucleus.linux-hidpi:") - implementation("io.github.kdroidfilter:nucleus.scheduler:") - implementation("io.github.kdroidfilter:nucleus.service-management-macos:") - implementation("io.github.kdroidfilter:nucleus.autolaunch:") - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.notification-macos:") + implementation("dev.nucleusframework:nucleus.notification-windows:") + implementation("dev.nucleusframework:nucleus.launcher-windows:") + implementation("dev.nucleusframework:nucleus.notification-linux:") + implementation("dev.nucleusframework:nucleus.launcher-linux:") + implementation("dev.nucleusframework:nucleus.launcher-macos:") + implementation("dev.nucleusframework:nucleus.media-control:") + implementation("dev.nucleusframework:nucleus.menu-macos:") + implementation("dev.nucleusframework:nucleus.sf-symbols:") + implementation("dev.nucleusframework:nucleus.freedesktop-icons:") + implementation("dev.nucleusframework:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") + implementation("dev.nucleusframework:nucleus.darkmode-detector:") + implementation("dev.nucleusframework:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.energy-manager:") + implementation("dev.nucleusframework:nucleus.native-ssl:") + implementation("dev.nucleusframework:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.native-http-okhttp:") + implementation("dev.nucleusframework:nucleus.native-http-ktor:") + implementation("dev.nucleusframework:nucleus.linux-hidpi:") + implementation("dev.nucleusframework:nucleus.scheduler:") + implementation("dev.nucleusframework:nucleus.service-management-macos:") + implementation("dev.nucleusframework:nucleus.autolaunch:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` @@ -4732,36 +4732,36 @@ When using a custom `configurationFiles`, add the following rules to your file t ```proguard # Nucleus decorated-window JNI (macOS) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } # Nucleus darkmode-detector JNI (macOS) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Linux) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Windows) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } # Nucleus native-ssl JNI (macOS) --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } # Nucleus native-ssl JNI (Windows) --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } ``` @@ -4780,14 +4780,14 @@ Access application metadata injected by the Nucleus Gradle plugin at runtime. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ## Usage ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.NucleusApp // Application identifier (matches packageName in the Nucleus DSL) val appId: String = NucleusApp.appId @@ -4892,13 +4892,13 @@ Detect at runtime which installer format was used to package your application. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableType +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableType ``` ## Usage @@ -4979,12 +4979,12 @@ Enforce that only one instance of your application runs at a time. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.SingleInstanceManager +import dev.nucleusframework.nucleus.core.runtime.SingleInstanceManager ``` `SingleInstanceManager` is a Kotlin `object` (singleton). It uses file-based locking to ensure single-instance behavior across platforms. @@ -5073,12 +5073,12 @@ Handle custom URL protocol links (`myapp://action?param=value`). ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler +import dev.nucleusframework.nucleus.core.runtime.DeepLinkHandler ``` `DeepLinkHandler` is a Kotlin `object` (singleton). @@ -5254,10 +5254,10 @@ Choose one implementation: ```kotlin dependencies { // Option 1: JBR-based (requires JetBrains Runtime) - implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:") + implementation("dev.nucleusframework:nucleus.decorated-window-jbr:") // Option 2: JNI-based (works on any JVM) - implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") + implementation("dev.nucleusframework:nucleus.decorated-window-jni:") } ``` @@ -5266,9 +5266,9 @@ dependencies { ```kotlin dependencies { // Optional — pick one depending on your design system - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") // Jewel (IntelliJ) - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") // Material 2 - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") // Material 3 + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") // Jewel (IntelliJ) + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") // Material 2 + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") // Material 3 } ``` @@ -5778,22 +5778,22 @@ Both modules use JNI on macOS. When ProGuard is enabled, the native bridge class ```proguard # Nucleus decorated-window-jbr JNI --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } # Nucleus decorated-window-jni JNI (all platforms) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.JniMacTitleBarBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.JniMacTitleBarBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge { +-keep class dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.utils.linux.JniLinuxWindowBridge { +-keep class dev.nucleusframework.nucleus.window.utils.linux.JniLinuxWindowBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } ``` ## RTL (Right-to-Left) Layout Support @@ -5882,12 +5882,12 @@ Add `nucleus-application` plus **exactly one** decorated-window backend: ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.nucleus-application:") + implementation("dev.nucleusframework:nucleus.nucleus-application:") // Pick exactly one backend: - implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") // any JVM (recommended) - // implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:") // JBR-only - // implementation("io.github.kdroidfilter:nucleus.decorated-window-tao:") // no-AWT, GraalVM-friendly + implementation("dev.nucleusframework:nucleus.decorated-window-jni:") // any JVM (recommended) + // implementation("dev.nucleusframework:nucleus.decorated-window-jbr:") // JBR-only + // implementation("dev.nucleusframework:nucleus.decorated-window-tao:") // no-AWT, GraalVM-friendly } ``` @@ -6085,7 +6085,7 @@ Migrating an existing AWT-only app (jbr or jni) is a two-line change for the ent ```diff - import androidx.compose.ui.window.application -+ import io.github.kdroidfilter.nucleus.application.nucleusApplication ++ import dev.nucleusframework.nucleus.application.nucleusApplication ``` ```diff @@ -6214,13 +6214,13 @@ If none of these apply, stick with `decorated-window-jni` — it is the more bat ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-tao:") + implementation("dev.nucleusframework:nucleus.decorated-window-tao:") // Optional but recommended — unified entry point that works with all three backends: - implementation("io.github.kdroidfilter:nucleus.nucleus-application:") + implementation("dev.nucleusframework:nucleus.nucleus-application:") // GraalVM bootstrap (required for native-image builds): - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` @@ -6541,7 +6541,7 @@ The `decorated-window-jewel` module provides Jewel (IntelliJ theme) wrappers aro ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` @@ -6693,7 +6693,7 @@ The `decorated-window-material2` module provides Material 2 wrappers around the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` @@ -6838,7 +6838,7 @@ The `decorated-window-material3` module provides Material 3 wrappers around the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` @@ -7011,7 +7011,7 @@ When the user toggles dark mode in their OS settings, `isSystemInDarkMode()` rec # System Tray -**Separate repository:** System Tray is maintained in its own repository with its own release cycle: [**kdroidFilter/ComposeNativeTray**](https://github.com/kdroidFilter/ComposeNativeTray). The artifact is `io.github.kdroidfilter:composenativetray`. +**Separate repository:** System Tray is maintained in its own repository with its own release cycle: [**nucleusframework/ComposeNativeTray**](https://github.com/nucleusframework/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. **ComposeNativeTray** is not a library. It is a **complete framework for building system tray applications** with Compose Desktop — the most expressive and the most powerful way to own the system tray on macOS, Windows, and Linux. Traditionally, building a tray application meant juggling platform-specific icon formats, managing menu state by hand, and hoping the result didn't look broken on half your users' machines. ComposeNativeTray erases all of that. Your tray icon is **drawn by Compose** — the same toolkit that renders your UI. Any `@Composable` becomes a tray icon: an `ImageVector`, a `Painter`, a resource, or a fully custom composable with gradients, badges, and animations. One icon definition. Every platform. Every DPI. Pixel-perfect. @@ -7066,7 +7066,7 @@ Change `isDarkMode` and the icon switches, the checkmark toggles, the label upda ```kotlin dependencies { - implementation("io.github.kdroidfilter:composenativetray:") + implementation("dev.nucleusframework:composenativetray:") } ``` @@ -7483,7 +7483,7 @@ Cross-platform notification abstraction that unifies Linux, Windows, and macOS n ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-common:") + implementation("dev.nucleusframework:nucleus.notification-common:") } ``` @@ -7492,7 +7492,7 @@ This single dependency pulls in all three platform modules (Linux, Windows, macO ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.common.* +import dev.nucleusframework.nucleus.notification.common.* // Build a notification val n = notification( @@ -7510,7 +7510,7 @@ n.send() ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.notification.common.* +import dev.nucleusframework.nucleus.notification.common.* val myNotification = notification( title = "New Message from Alice", @@ -7746,7 +7746,7 @@ Complete Kotlin mapping of Apple's [UserNotifications](https://developer.apple.c ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-macos:") + implementation("dev.nucleusframework:nucleus.notification-macos:") } ``` @@ -7755,7 +7755,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `ExecutableRuntime` (pul ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.* +import dev.nucleusframework.nucleus.notification.* // 1. Request authorization NotificationCenter.requestAuthorization( @@ -8239,7 +8239,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). No Windows or Linux native — `i ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.macos.NativeMacNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.macos.NativeMacNotificationBridge { native ; static ** on*(...); } @@ -8247,7 +8247,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). No Windows or Linux native — `i ## GraalVM -Reachability metadata is included in the JAR at `META-INF/native-image/io.github.kdroidfilter/nucleus.notification-macos/reachability-metadata.json`. No additional configuration needed. +Reachability metadata is included in the JAR at `META-INF/native-image/dev.nucleusframework/nucleus.notification-macos/reachability-metadata.json`. No additional configuration needed. --- @@ -8260,7 +8260,7 @@ Complete Kotlin mapping of the [Windows Toast Notifications API](https://learn.m ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-windows:") + implementation("dev.nucleusframework:nucleus.notification-windows:") } ``` @@ -8269,7 +8269,7 @@ Depends on `core-runtime` for `NativeLibraryLoader`, `ExecutableRuntime`, and `N ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.windows.* +import dev.nucleusframework.nucleus.notification.windows.* // 1. Initialize (auto-detects APPX vs unpackaged) WindowsNotificationCenter.initialize() @@ -8579,7 +8579,7 @@ Ships pre-built Windows DLLs (x64 + ARM64). No macOS or Linux native — `isAvai ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.windows.NativeWindowsNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.windows.NativeWindowsNotificationBridge { native ; static ** on*(...); } @@ -8587,7 +8587,7 @@ Ships pre-built Windows DLLs (x64 + ARM64). No macOS or Linux native — `isAvai ## GraalVM -Reachability metadata is included in the JAR at `META-INF/native-image/io.github.kdroidfilter/nucleus.notification-windows/reachability-metadata.json`. No additional configuration needed. +Reachability metadata is included in the JAR at `META-INF/native-image/dev.nucleusframework/nucleus.notification-windows/reachability-metadata.json`. No additional configuration needed. --- @@ -8600,7 +8600,7 @@ Complete Kotlin mapping of the [freedesktop Desktop Notifications Specification] ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-linux:") + implementation("dev.nucleusframework:nucleus.notification-linux:") } ``` @@ -8609,7 +8609,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `freedesktop-icons` for ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.linux.* +import dev.nucleusframework.nucleus.notification.linux.* // Send a simple notification with typesafe icon and sound val id = LinuxNotificationCenter.notify( @@ -8807,7 +8807,7 @@ Received in `LinuxNotificationListener.onClosed`. Icons are typesafe via the `FreedesktopIcon` sealed interface from the shared [`freedesktop-icons`](freedesktop-icons.md) module. All 338 standard names from the [freedesktop Icon Naming Specification](https://specifications.freedesktop.org/icon-naming/latest/) are available as enum constants. ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon FreedesktopIcon.Status.DIALOG_INFORMATION FreedesktopIcon.Device.PRINTER @@ -9040,7 +9040,7 @@ Ships pre-built Linux shared libraries (x86_64 + aarch64). No macOS or Windows n ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.linux.NativeLinuxNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.linux.NativeLinuxNotificationBridge { native ; static ** on*(...); } @@ -9053,7 +9053,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.notification.linux.NativeLinuxNotificationBridge", + "type": "dev.nucleusframework.nucleus.notification.linux.NativeLinuxNotificationBridge", "methods": [ { "name": "onNotificationClosed", "parameterTypes": ["int", "int"] }, { "name": "onActionInvoked", "parameterTypes": ["int", "java.lang.String"] }, @@ -9074,7 +9074,7 @@ macOS dock context menu integration via JNI. Add custom items, submenus, separat ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-macos:") + implementation("dev.nucleusframework:nucleus.launcher-macos:") } ``` @@ -9083,7 +9083,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` (pulled in transitively). ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.macos.* +import dev.nucleusframework.nucleus.launcher.macos.* // Listen for clicks MacOsDockMenu.listener = DockMenuListener { itemId -> @@ -9172,7 +9172,7 @@ DockMenuItem.separator(id = 3) ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.launcher.macos.* +import dev.nucleusframework.nucleus.launcher.macos.* // Set up a dock menu with submenus and callbacks MacOsDockMenu.listener = DockMenuListener { itemId -> @@ -9228,7 +9228,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `isAvailable` returns `false` on ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.launcher.macos.NativeMacOsDockMenuBridge { +-keep class dev.nucleusframework.nucleus.launcher.macos.NativeMacOsDockMenuBridge { native ; static ** on*(...); } @@ -9241,7 +9241,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.launcher.macos.NativeMacOsDockMenuBridge", + "type": "dev.nucleusframework.nucleus.launcher.macos.NativeMacOsDockMenuBridge", "methods": [ { "name": "onMenuItemClicked", "parameterTypes": ["int"] } ] @@ -9259,7 +9259,7 @@ Windows Launcher API via JNI — badge notifications, jump lists, overlay icons, ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-windows:") + implementation("dev.nucleusframework:nucleus.launcher-windows:") } ``` @@ -9288,8 +9288,8 @@ This module provides four Windows launcher APIs: ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.BadgeGlyph -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsBadgeManager +import dev.nucleusframework.nucleus.launcher.windows.BadgeGlyph +import dev.nucleusframework.nucleus.launcher.windows.WindowsBadgeManager // Initialize once at app startup if (WindowsBadgeManager.isAvailable) { @@ -9351,9 +9351,9 @@ Small 16×16 status icons displayed over the app's taskbar button. Works with al ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsOverlayIcon +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.WindowsOverlayIcon // Set a stock icon overlay WindowsOverlayIcon.setIcon( @@ -9393,10 +9393,10 @@ Up to 7 clickable buttons displayed in the taskbar thumbnail preview (visible wh ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.ThumbnailToolbarButton -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsThumbnailToolbar +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.ThumbnailToolbarButton +import dev.nucleusframework.nucleus.launcher.windows.WindowsThumbnailToolbar // Register buttons (once per window) WindowsThumbnailToolbar.setButtons( @@ -9474,11 +9474,11 @@ Jump lists appear when the user right-clicks the app's taskbar button. They supp ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListCategory -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListItem -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsJumpListManager +import dev.nucleusframework.nucleus.launcher.windows.JumpListCategory +import dev.nucleusframework.nucleus.launcher.windows.JumpListItem +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.WindowsJumpListManager // Set a jump list with categories and tasks WindowsJumpListManager.setJumpList( @@ -9725,7 +9725,7 @@ Complete Kotlin mapping of the [Unity Launcher API](https://wiki.ubuntu.com/Unit ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-linux:") + implementation("dev.nucleusframework:nucleus.launcher-linux:") } ``` @@ -9736,7 +9736,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `freedesktop-icons` for ### Launcher Entry (Badge, Progress, Urgency) ```kotlin -import io.github.kdroidfilter.nucleus.launcher.linux.* +import dev.nucleusframework.nucleus.launcher.linux.* val appUri = LinuxLauncherEntry.appUri("myapp.desktop") @@ -9764,8 +9764,8 @@ LinuxLauncherEntry.update(appUri, LauncherProperties( ### Dynamic Quicklist (Right-Click Menu) ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.launcher.linux.* +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.launcher.linux.* val quicklist = LinuxQuicklist("/com/example/MyApp/Menu") @@ -9948,7 +9948,7 @@ Ships pre-built Linux shared libraries (x86_64 + aarch64). `isAvailable` returns ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.launcher.linux.NativeLinuxLauncherBridge { +-keep class dev.nucleusframework.nucleus.launcher.linux.NativeLinuxLauncherBridge { native ; static ** on*(...); } @@ -9961,7 +9961,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.launcher.linux.NativeLinuxLauncherBridge", + "type": "dev.nucleusframework.nucleus.launcher.linux.NativeLinuxLauncherBridge", "methods": [ { "name": "onMenuItemEvent", "parameterTypes": ["java.lang.String", "int"] } ] @@ -9985,7 +9985,7 @@ OS-level media controls (play/pause, next/previous, seek, metadata) for your des ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.media-control:") + implementation("dev.nucleusframework:nucleus.media-control:") } ``` @@ -9994,7 +9994,7 @@ Depends on `core-runtime` (for `NativeLibraryLoader` and `NucleusApp`) and `kotl ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.media.control.* +import dev.nucleusframework.nucleus.media.control.* if (MediaControlService.isAvailable()) { // 1. Configure once — typically at app startup @@ -10250,15 +10250,15 @@ Each JVM hosts a single long-lived background worker: on Linux a dedicated threa ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.media.control.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.media.control.linux.NativeLinuxBridge { native ; static ** on*(...); } --keep class io.github.kdroidfilter.nucleus.media.control.macos.NativeMacOsBridge { +-keep class dev.nucleusframework.nucleus.media.control.macos.NativeMacOsBridge { native ; static ** on*(...); } --keep class io.github.kdroidfilter.nucleus.media.control.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.media.control.windows.NativeWindowsBridge { native ; static ** on*(...); } @@ -10280,7 +10280,7 @@ The `darkmode-detector` module solves this by providing a **reactive** `isSystem ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.darkmode-detector:") + implementation("dev.nucleusframework:nucleus.darkmode-detector:") } ``` @@ -10331,23 +10331,23 @@ The `darkmode-detector` module uses JNI native libraries on all platforms. When ```proguard # macOS — NativeDarkModeBridge is looked up by name from native code --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Linux — NativeLinuxBridge is looked up by name from native code --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Windows --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } ``` ## Compose Preview @@ -10359,7 +10359,7 @@ In Compose preview mode (`LocalInspectionMode`), the function falls back to the Debug and error messages are logged under the tags `MacOSThemeDetector`, `WindowsThemeDetector`, and `LinuxPortalThemeDetector`. Logging is off by default. To enable it, set the global flag from `core-runtime`: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` @@ -10374,7 +10374,7 @@ The `system-color` module provides **reactive** detection of the OS accent color ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.system-color:") } ``` @@ -10433,7 +10433,7 @@ Android's [Material You](https://m3.material.io/styles/color/dynamic/choosing-a- ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.system-color:") implementation("com.materialkolor:material-kolor:4.1.1") } ``` @@ -10509,7 +10509,7 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle ```proguard # macOS --keep class io.github.kdroidfilter.nucleus.systemcolor.mac.NativeMacSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.mac.NativeMacSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onAccentColorCleared(); @@ -10517,20 +10517,20 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle } # Windows --keep class io.github.kdroidfilter.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { native ; static void onAccentColorChanged(int, int, int); static void onHighContrastChanged(boolean); } # Linux --keep class io.github.kdroidfilter.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onHighContrastChanged(boolean); } --keep class io.github.kdroidfilter.nucleus.systemcolor.** { *; } +-keep class dev.nucleusframework.nucleus.systemcolor.** { *; } ``` ## Logging @@ -10538,7 +10538,7 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle Debug messages are logged under the tags `MacSystemColorDetector`, `WindowsSystemColor`, and `LinuxSystemColorDetector`. Logging is off by default. To enable it: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` @@ -10553,14 +10553,14 @@ The `system-info` module provides cross-platform system information gathering fo ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-info:") + implementation("dev.nucleusframework:nucleus.system-info:") } ``` ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.systeminfo.SystemInfo +import dev.nucleusframework.nucleus.systeminfo.SystemInfo fun main() { val os = SystemInfo.osInfo() @@ -10959,7 +10959,7 @@ On Linux, the library links only against `libdl` and `libm`. NVML (`libnvidia-ml When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.systeminfo.** { *; } +-keep class dev.nucleusframework.nucleus.systeminfo.** { *; } ``` --- @@ -10984,7 +10984,7 @@ The `energy-manager` module provides two capabilities for Compose Desktop applic ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.energy-manager:") + implementation("dev.nucleusframework:nucleus.energy-manager:") } ``` @@ -11007,7 +11007,7 @@ The module provides two levels of process-level efficiency: ### Recommended: light mode on focus loss, full mode on minimize ```kotlin -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.energymanager.EnergyManager import java.awt.event.WindowEvent import java.awt.event.WindowFocusListener @@ -11243,7 +11243,7 @@ The module ships pre-built native binaries for: When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.energymanager.** { *; } +-keep class dev.nucleusframework.nucleus.energymanager.** { *; } ``` --- @@ -11262,7 +11262,7 @@ This module was originally designed for running Compose Desktop applications com ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.linux-hidpi:") + implementation("dev.nucleusframework:nucleus.linux-hidpi:") } ``` @@ -11271,7 +11271,7 @@ dependencies { Call `getLinuxNativeScaleFactor()` **before** `application {}` (i.e. before AWT initialises): ```kotlin -import io.github.kdroidfilter.nucleus.hidpi.getLinuxNativeScaleFactor +import dev.nucleusframework.nucleus.hidpi.getLinuxNativeScaleFactor fun main() { if (System.getProperty("sun.java2d.uiScale") == null) { @@ -11317,7 +11317,7 @@ The native code uses `dlopen` to load optional dependencies (libgio for GSetting When ProGuard is enabled, preserve the JNI bridge class: ```proguard --keep class io.github.kdroidfilter.nucleus.hidpi.HiDpiLinuxBridge { +-keep class dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge { native ; } ``` @@ -11332,7 +11332,7 @@ Native taskbar/dock progress bar and attention requests on Windows, macOS, and L ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") } ``` @@ -11341,7 +11341,7 @@ dependencies { ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.taskbarprogress.TaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.TaskbarProgress import java.awt.Window // Show a progress bar at 75% @@ -11469,15 +11469,15 @@ System-wide keyboard shortcuts that fire even when the application does not have ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.global-hotkey:") + implementation("dev.nucleusframework:nucleus.global-hotkey:") } ``` ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.globalhotkey.GlobalHotKeyManager -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyModifier +import dev.nucleusframework.nucleus.globalhotkey.GlobalHotKeyManager +import dev.nucleusframework.nucleus.globalhotkey.HotKeyModifier import java.awt.event.KeyEvent GlobalHotKeyManager.initialize() @@ -11668,7 +11668,7 @@ Uses the `org.freedesktop.portal.GlobalShortcuts` XDG Desktop Portal via GIO/GDB **Requirements:** -- The application must have a valid `.desktop` file with a reverse-DNS name (e.g., `io.github.kdroidfilter.MyApp.desktop`) +- The application must have a valid `.desktop` file with a reverse-DNS name (e.g., `dev.nucleusframework.MyApp.desktop`) - The application must be launched from that `.desktop` file (or have `GIO_LAUNCHED_DESKTOP_FILE` set) - GNOME validates the `app_id` against `g_application_id_is_valid` — a plain name like `MyApp` will be rejected @@ -11680,13 +11680,13 @@ Uses the `org.freedesktop.portal.GlobalShortcuts` XDG Desktop Portal via GIO/GDB nucleus.application { nativeDistributions { appName = "MyApp" // human-readable display name - packageName = "io.github.kdroidfilter.MyApp" // becomes io.github.kdroidfilter.MyApp.desktop + packageName = "dev.nucleusframework.MyApp" // becomes dev.nucleusframework.MyApp.desktop } } ``` **`appName` is required:** Without `appName`, the application title shown in GNOME Shell and window decorations -will fall back to the full `packageName` (`io.github.kdroidfilter.MyApp`). +will fall back to the full `packageName` (`dev.nucleusframework.MyApp`). Always set both: `packageName` for the reverse-DNS identity, `appName` for the display name. **Step 2 — Launch from the `.desktop` file:** @@ -11695,7 +11695,7 @@ The portal uses `GIO_LAUNCHED_DESKTOP_FILE` (set automatically by the desktop en For development, you can set it manually: ```bash -GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/io.github.kdroidfilter.MyApp.desktop \ +GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/dev.nucleusframework.MyApp.desktop \ GIO_LAUNCHED_DESKTOP_FILE_PID=$$ \ ./my-app ``` @@ -11720,9 +11720,9 @@ The portal backend uses a dedicated GLib thread permanently attached to the JVM. If you use ProGuard/R8, keep the JNI bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { *; } --keep class io.github.kdroidfilter.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { *; } --keep class io.github.kdroidfilter.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { *; } ``` --- @@ -11735,17 +11735,17 @@ Declarative, Compose-reactive macOS application menu bar via JNI. Build a fully ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.menu-macos:") + implementation("dev.nucleusframework:nucleus.menu-macos:") } ``` -Pulls in `core-runtime`, `compose.desktop.common`, and `sf-symbols` transitively. Consumers can use type-safe SF Symbol constants via `io.github.kdroidfilter.nucleus.sfsymbols.*` without declaring `sf-symbols` explicitly. +Pulls in `core-runtime`, `compose.desktop.common`, and `sf-symbols` transitively. Consumers can use type-safe SF Symbol constants via `dev.nucleusframework.nucleus.sfsymbols.*` without declaring `sf-symbols` explicitly. ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.menu.macos.* -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.menu.macos.* +import dev.nucleusframework.nucleus.sfsymbols.* @Composable fun App() { @@ -11877,7 +11877,7 @@ Available constants: `NativeKey.Escape`, `Return`, `Tab`, `Delete`, `Backspace`, With the `sf-symbols` module (type-safe): ```kotlin -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.sfsymbols.* Item("Cut", icon = NsMenuItemImage.SystemSymbol(SFSymbolObjectsAndTools.SCISSORS)) { } Item("Inbox", icon = NsMenuItemImage.SystemSymbol(SFSymbolGeneral.TRAY_FILL)) { } @@ -12048,7 +12048,7 @@ Menu("App Services") { Item("Custom") { } } // ✗ fully yours ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.sfsymbols.* @Composable fun App() { @@ -12195,7 +12195,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `NativeMenuBar` is a no-op on non ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.menu.macos.NativeNsMenuBridge { +-keep class dev.nucleusframework.nucleus.menu.macos.NativeNsMenuBridge { native ; static ** on*(...); } @@ -12206,7 +12206,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `NativeMenuBar` is a no-op on non ```json [ { - "type": "io.github.kdroidfilter.nucleus.menu.macos.NativeNsMenuBridge", + "type": "dev.nucleusframework.nucleus.menu.macos.NativeNsMenuBridge", "methods": [ { "name": "onMenuItemAction", "parameterTypes": ["long"] }, { "name": "onMenuWillOpen", "parameterTypes": ["long"] }, @@ -12229,7 +12229,7 @@ Type-safe Kotlin constants for the [freedesktop Icon Naming Specification](https ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.freedesktop-icons:") + implementation("dev.nucleusframework:nucleus.freedesktop-icons:") } ``` @@ -12237,7 +12237,7 @@ dependencies { ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon // Standard icon from the spec (typesafe) val icon = FreedesktopIcon.Status.DIALOG_INFORMATION @@ -12287,8 +12287,8 @@ Icon names are **cross-desktop** — they are resolved from the active icon them ## Usage in Notifications ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.notification.linux.* +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.notification.linux.* LinuxNotificationCenter.notify( Notification( @@ -12304,8 +12304,8 @@ LinuxNotificationCenter.notify( ## Usage in Launcher Quicklists ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.launcher.linux.DbusmenuItem +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.launcher.linux.DbusmenuItem val items = listOf( DbusmenuItem(id = 1, label = "New Window", icon = FreedesktopIcon.Action.WINDOW_NEW), @@ -12338,7 +12338,7 @@ The `scheduler` module registers background tasks with the OS so they run even w ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.scheduler:") + implementation("dev.nucleusframework:nucleus.scheduler:") } ``` @@ -12893,7 +12893,7 @@ Each task gets a single `.properties` file. The serialized input payload #### macOS (launchd) -Generates plist files in `~/Library/LaunchAgents/` with label `io.github.kdroidfilter.nucleus..`. Managed via a JNI bridge (`MacOSLaunchdSchedulerJni`) that uses Foundation and ServiceManagement APIs for plist writing, job status queries, and next-fire-time computation. Falls back to `launchctl` shell commands when the native library is unavailable. +Generates plist files in `~/Library/LaunchAgents/` with label `dev.nucleusframework.nucleus..`. Managed via a JNI bridge (`MacOSLaunchdSchedulerJni`) that uses Foundation and ServiceManagement APIs for plist writing, job status queries, and next-fire-time computation. Falls back to `launchctl` shell commands when the native library is unavailable. #### Linux (systemd) @@ -12911,7 +12911,7 @@ Users uninstall apps without thinking about background scheduled tasks. Without - **macOS** — **no automatic cleanup.** Unlike the Linux/Windows wrapper trick, the agent's `ProgramArguments` points directly at the application binary so the entry stays visible under its real name in System Settings → "Allow in the Background". The cost: when the user trashes the .app bundle, the orphaned `.plist` in `~/Library/LaunchAgents/` is **never** reclaimed by macOS, and launchd keeps attempting to spawn the missing binary forever — throttled by `ThrottleInterval` (10 s by default), logging `cannot spawn` to `system.log` on every attempt. SMAppService (macOS 13+) does not eliminate this either, and Apple ships no guidance for "graceful uninstall of a LaunchAgent" — the macOS ecosystem treats orphaned LaunchAgents as a known limitation that an explicit cleanup step has to handle. The mitigation Nucleus offers is **in-app**: call `DesktopTaskScheduler.cancelAll()` from your app's settings ("Disable background tasks") or from any in-app sign-out / reset flow — this unloads the agents and removes the plists cleanly while the binary is still around. If the user does a plain drag-to-trash without that step, the orphan leaks; the leftover plist then has to be removed manually: ```bash - rm ~/Library/LaunchAgents/io.github.kdroidfilter.nucleus...plist + rm ~/Library/LaunchAgents/dev.nucleusframework.nucleus...plist ``` The failure mode in the meantime is the well-known throttled-log-spam — not a crash and not a security or correctness issue. @@ -12924,7 +12924,7 @@ The `scheduler-testing` module provides two levels of test support, inspired by ```kotlin dependencies { - testImplementation("io.github.kdroidfilter:nucleus.scheduler-testing:") + testImplementation("dev.nucleusframework:nucleus.scheduler-testing:") } ``` @@ -13122,7 +13122,7 @@ The workflow is: **declare agents in Gradle** → **plugin embeds plists in the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.service-management-macos:") + implementation("dev.nucleusframework:nucleus.service-management-macos:") } ``` @@ -13398,7 +13398,7 @@ MyApp.app/ When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.servicemanagement.** { *; } +-keep class dev.nucleusframework.nucleus.servicemanagement.** { *; } ``` --- @@ -13424,14 +13424,14 @@ The runtime exposes a single unified API — consumers don't need to branch on p ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.autolaunch:") + implementation("dev.nucleusframework:nucleus.autolaunch:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunch -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.autolaunch.AutoLaunch +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState ``` ## Usage @@ -13506,7 +13506,7 @@ nucleus.application { windows { appx { applicationId = "NucleusDemo" - publisherDisplayName = "KDroidFilter" + publisherDisplayName = "NucleusFramework" displayName = "Nucleus Demo" // 1. Inject into Package.appxmanifest @@ -13587,7 +13587,7 @@ Nucleus picks the right backend automatically — nothing to configure: All defaults fall back to `NucleusApp`. Override any of them **before** the first `AutoLaunch` call: ```kotlin -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig AutoLaunchConfig.taskId = "MyCustomMsixTaskId" // MSIX AutoLaunchConfig.executablePath = "C:\\Program Files\\MyApp\\MyApp.exe" // Win32, Linux systemd (full path), Linux Flatpak (basename used) @@ -13647,7 +13647,7 @@ The `native-ssl` module solves this by reading trusted certificates directly fro ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-ssl:") + implementation("dev.nucleusframework:nucleus.native-ssl:") } ``` @@ -13656,7 +13656,7 @@ dependencies { The entire API surface is the `NativeTrustManager` singleton. All properties are lazy and thread-safe. ```kotlin -import io.github.kdroidfilter.nucleus.nativessl.NativeTrustManager +import dev.nucleusframework.nucleus.nativessl.NativeTrustManager // Ready-to-use X509TrustManager (JVM defaults + OS native certs) val trustManager: X509TrustManager = NativeTrustManager.trustManager @@ -13723,11 +13723,11 @@ Certificates are deduplicated by DER content across all sources. The `native-ssl` module uses JNI native libraries on macOS and Windows. When ProGuard is enabled, the bridge classes must be preserved. The Nucleus Gradle plugin includes these rules automatically; if you need them manually: ```proguard --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } ``` @@ -13737,7 +13737,7 @@ The `native-ssl` module uses JNI native libraries on macOS and Windows. When Pro Debug messages are emitted under the tags `NativeCertificateProvider`, `NativeSslBridge`, `WindowsCertificateProvider`, `LinuxCertificateProvider`, etc. Logging is off by default. To enable it, set the global flag from `core-runtime`: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` @@ -13752,9 +13752,9 @@ Three integration modules are available — pick the one that matches your HTTP | Module | Artifact | Client | |--------|----------|--------| -| `native-http` | `io.github.kdroidfilter:nucleus.native-http` | `java.net.http.HttpClient` (JDK 11+) | -| `native-http-okhttp` | `io.github.kdroidfilter:nucleus.native-http-okhttp` | OkHttp 4 | -| `native-http-ktor` | `io.github.kdroidfilter:nucleus.native-http-ktor` | Ktor Client (engine-agnostic) | +| `native-http` | `dev.nucleusframework:nucleus.native-http` | `java.net.http.HttpClient` (JDK 11+) | +| `native-http-okhttp` | `dev.nucleusframework:nucleus.native-http-okhttp` | OkHttp 4 | +| `native-http-ktor` | `dev.nucleusframework:nucleus.native-http-ktor` | Ktor Client (engine-agnostic) | All three pull in `native-ssl` transitively — no need to declare it separately. @@ -13766,14 +13766,14 @@ All three pull in `native-ssl` transitively — no need to declare it separately ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.native-http:") } ``` ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient // Option 1 — pre-built client val client = NativeHttpClient.create() @@ -13797,7 +13797,7 @@ val client = HttpClient.newBuilder() ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http-okhttp:") + implementation("dev.nucleusframework:nucleus.native-http-okhttp:") } ``` @@ -13806,7 +13806,7 @@ OkHttp 4.x is pulled in transitively. ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.okhttp.NativeOkHttpClient +import dev.nucleusframework.nucleus.nativehttp.okhttp.NativeOkHttpClient // Option 1 — pre-built client val client = NativeOkHttpClient.create() @@ -13828,7 +13828,7 @@ val client = OkHttpClient.Builder() ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http-ktor:") + implementation("dev.nucleusframework:nucleus.native-http-ktor:") // Add exactly one Ktor engine: implementation("io.ktor:ktor-client-cio:") // CIO (coroutine-based) // or: ktor-client-java, ktor-client-okhttp, ktor-client-apache5 @@ -13840,7 +13840,7 @@ dependencies { ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.ktor.installNativeSsl +import dev.nucleusframework.nucleus.nativehttp.ktor.installNativeSsl import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO @@ -13937,7 +13937,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -13973,7 +13973,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -13997,7 +13997,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -14021,7 +14021,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -14043,7 +14043,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -14066,7 +14066,7 @@ Nucleus's CI pipeline is its strongest JVM differentiator. No other JVM tool pro | jpackage | ❌ | ❌ | ✅ (JDK built-in) | — | **4** | ??? info "Sources" - - **Nucleus**: Gradle plugin (`io.github.kdroidfilter.nucleus`), no Maven or CLI support + - **Nucleus**: Gradle plugin (`dev.nucleusframework.nucleus`), no Maven or CLI support - **Conveyor**: [Gradle/Maven integration](https://conveyor.hydraulic.dev/21.1/configs/maven-gradle/) — open-source Gradle plugin (Gradle 7+); Maven via `mvn dependency:build-classpath` CLI integration; standalone `conveyor` CLI - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE + CLI + Gradle + Maven + Ant plugins - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — CLI tool, Maven integration, npm package @@ -14094,7 +14094,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -14121,7 +14121,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -14139,7 +14139,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -14161,7 +14161,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -14181,14 +14181,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/io/github/kdroidfilter/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files @@ -14210,7 +14210,7 @@ The `native-ssl` module is unique in the JVM packaging space: it replaces the JS | Compose MP | ✅ | Partial | ❌ | ❌ | ❌ | ✅ | **5** | ??? info "Sources" - - **Nucleus**: [docs site](https://kdroidfilter.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` + - **Nucleus**: [docs site](https://nucleusframework.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` - **Conveyor**: [docs site](https://conveyor.hydraulic.dev/21.1/) — tutorials, 120+ config keys, CI guide, comparisons page, multiple sample projects - **install4j**: [help center](https://www.ej-technologies.com/resources/install4j/help/doc/) — extensive searchable docs - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — CLI reference only @@ -14490,7 +14490,7 @@ Nucleus is a drop-in extension of the official JetBrains Compose Desktop plugin. id("org.jetbrains.kotlin.jvm") version "2.3.10" id("org.jetbrains.kotlin.plugin.compose") version "2.3.10" id("org.jetbrains.compose") version "1.10.1" -+ id("io.github.kdroidfilter.nucleus") version "1.0.0" ++ id("dev.nucleusframework.nucleus") version "1.0.0" } ``` @@ -14502,7 +14502,7 @@ Replace the JetBrains Compose DSL imports with the Nucleus equivalents: ```diff -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -+import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat ++import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat ``` This applies to all DSL types used in your `build.gradle.kts` (e.g. `TargetFormat`, `CompressionLevel`, `SigningAlgorithm`, etc.). @@ -14608,16 +14608,16 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection - implementation("io.github.kdroidfilter:nucleus.core-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.core-runtime:1.0.0") // AOT cache runtime (if using enableAotCache) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.aot-runtime:1.0.0") // Auto-update (if using publish) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.updater-runtime:1.0.0") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:1.0.0") + implementation("dev.nucleusframework:nucleus.taskbar-progress:1.0.0") } ``` @@ -14626,7 +14626,7 @@ dependencies { | Feature | Before (compose) | After (nucleus) | |---------|-------------------|-----------------| | DSL entry point | `compose.desktop.application` | `nucleus.application` | -| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `io.github.kdroidfilter.nucleus.desktop.application.dsl.*` | +| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `dev.nucleusframework.nucleus.desktop.application.dsl.*` | | Target formats | DMG, PKG, MSI, EXE, DEB, RPM | + NSIS, AppX, Portable, AppImage, Snap, Flatpak, archives | | Native lib cleanup | Manual | `cleanupNativeLibs = true` | | AOT cache | Not available | `enableAotCache = true` | diff --git a/docs/llms.txt b/docs/llms.txt index 14d87dd62..2a73319ad 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -2,10 +2,10 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. -- Docs: https://nucleus.kdroidfilter.com -- GitHub: https://github.com/kdroidFilter/Nucleus -- Gradle Plugin Portal: https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus -- Maven Central: https://central.sonatype.com/search?q=io.github.kdroidfilter.nucleus +- Docs: https://nucleus.nucleusframework.com +- GitHub: https://github.com/nucleusframework/Nucleus +- Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus +- Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT **Nucleus is the Kotlin framework for native desktop apps.** Combined with Compose Multiplatform, it forms the most complete, most performant, and most deeply integrated desktop application stack ever built — on any language, any runtime, any platform. @@ -62,7 +62,7 @@ Nucleus meets you where you are: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } nucleus.application { @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). --- @@ -143,11 +143,11 @@ Add the Nucleus plugin to your `build.gradle.kts`: ```kotlin plugins { - id("io.github.kdroidfilter.nucleus") version "" + id("dev.nucleusframework.nucleus") version "" } ``` -The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus). No additional repository configuration is needed. +The plugin is available on the [Gradle Plugin Portal](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus). No additional repository configuration is needed. ### Runtime Libraries (Optional) @@ -158,19 +158,19 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection + single instance + deep links - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") // AOT cache runtime detection (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") // Auto-update library (includes core-runtime) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") // Custom decorated window with native title bar - implementation("io.github.kdroidfilter:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window:") } ``` @@ -353,70 +353,70 @@ Nucleus provides runtime libraries for use in your application code. All are pub | Library | Artifact | Description | |---------|----------|-------------| -| Core Runtime | `io.github.kdroidfilter:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | -| AOT Runtime | `io.github.kdroidfilter:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | -| Updater Runtime | `io.github.kdroidfilter:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | -| Taskbar Progress | `io.github.kdroidfilter:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | -| Notification (macOS) | `io.github.kdroidfilter:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | -| Notification (Windows) | `io.github.kdroidfilter:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | -| Launcher (Windows) | `io.github.kdroidfilter:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | -| Notification (Linux) | `io.github.kdroidfilter:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | -| Launcher (Linux) | `io.github.kdroidfilter:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | -| Launcher (macOS) | `io.github.kdroidfilter:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | -| Media Control | `io.github.kdroidfilter:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | -| Menu (macOS) | `io.github.kdroidfilter:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | -| SF Symbols | `io.github.kdroidfilter:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | -| Freedesktop Icons | `io.github.kdroidfilter:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | -| Decorated Window | `io.github.kdroidfilter:nucleus.decorated-window` | Custom window decorations with native title bar | -| Decorated Window — Jewel | `io.github.kdroidfilter:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | -| Decorated Window — Material 2 | `io.github.kdroidfilter:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | -| Decorated Window — Material 3 | `io.github.kdroidfilter:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | -| Dark Mode Detector | `io.github.kdroidfilter:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | -| System Color | `io.github.kdroidfilter:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | -| Energy Manager | `io.github.kdroidfilter:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | -| Native SSL | `io.github.kdroidfilter:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | -| Native HTTP | `io.github.kdroidfilter:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | -| Native HTTP — OkHttp | `io.github.kdroidfilter:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | -| Native HTTP — Ktor | `io.github.kdroidfilter:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | -| Linux HiDPI | `io.github.kdroidfilter:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | -| Scheduler | `io.github.kdroidfilter:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | -| Service Management (macOS) | `io.github.kdroidfilter:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | -| Auto-Launch | `io.github.kdroidfilter:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | -| GraalVM Runtime | `io.github.kdroidfilter:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | +| Core Runtime | `dev.nucleusframework:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | +| AOT Runtime | `dev.nucleusframework:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | +| Updater Runtime | `dev.nucleusframework:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | +| Taskbar Progress | `dev.nucleusframework:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | +| Notification (macOS) | `dev.nucleusframework:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | +| Notification (Windows) | `dev.nucleusframework:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | +| Launcher (Windows) | `dev.nucleusframework:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | +| Notification (Linux) | `dev.nucleusframework:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | +| Launcher (Linux) | `dev.nucleusframework:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | +| Launcher (macOS) | `dev.nucleusframework:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | +| Media Control | `dev.nucleusframework:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | +| Menu (macOS) | `dev.nucleusframework:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | +| SF Symbols | `dev.nucleusframework:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | +| Freedesktop Icons | `dev.nucleusframework:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | +| Decorated Window | `dev.nucleusframework:nucleus.decorated-window` | Custom window decorations with native title bar | +| Decorated Window — Jewel | `dev.nucleusframework:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | +| Decorated Window — Material 2 | `dev.nucleusframework:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | +| Decorated Window — Material 3 | `dev.nucleusframework:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | +| Dark Mode Detector | `dev.nucleusframework:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | +| System Color | `dev.nucleusframework:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | +| Energy Manager | `dev.nucleusframework:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | +| Native SSL | `dev.nucleusframework:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | +| Native HTTP | `dev.nucleusframework:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | +| Native HTTP — OkHttp | `dev.nucleusframework:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | +| Native HTTP — Ktor | `dev.nucleusframework:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | +| Linux HiDPI | `dev.nucleusframework:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | +| Scheduler | `dev.nucleusframework:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | +| Service Management (macOS) | `dev.nucleusframework:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | +| Auto-Launch | `dev.nucleusframework:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | +| GraalVM Runtime | `dev.nucleusframework:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | ```kotlin dependencies { // Pick what you need: - implementation("io.github.kdroidfilter:nucleus.core-runtime:") - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") - implementation("io.github.kdroidfilter:nucleus.notification-macos:") - implementation("io.github.kdroidfilter:nucleus.notification-windows:") - implementation("io.github.kdroidfilter:nucleus.launcher-windows:") - implementation("io.github.kdroidfilter:nucleus.notification-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-macos:") - implementation("io.github.kdroidfilter:nucleus.media-control:") - implementation("io.github.kdroidfilter:nucleus.menu-macos:") - implementation("io.github.kdroidfilter:nucleus.sf-symbols:") - implementation("io.github.kdroidfilter:nucleus.freedesktop-icons:") - implementation("io.github.kdroidfilter:nucleus.decorated-window:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") - implementation("io.github.kdroidfilter:nucleus.darkmode-detector:") - implementation("io.github.kdroidfilter:nucleus.system-color:") - implementation("io.github.kdroidfilter:nucleus.energy-manager:") - implementation("io.github.kdroidfilter:nucleus.native-ssl:") - implementation("io.github.kdroidfilter:nucleus.native-http:") - implementation("io.github.kdroidfilter:nucleus.native-http-okhttp:") - implementation("io.github.kdroidfilter:nucleus.native-http-ktor:") - implementation("io.github.kdroidfilter:nucleus.linux-hidpi:") - implementation("io.github.kdroidfilter:nucleus.scheduler:") - implementation("io.github.kdroidfilter:nucleus.service-management-macos:") - implementation("io.github.kdroidfilter:nucleus.autolaunch:") - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.notification-macos:") + implementation("dev.nucleusframework:nucleus.notification-windows:") + implementation("dev.nucleusframework:nucleus.launcher-windows:") + implementation("dev.nucleusframework:nucleus.notification-linux:") + implementation("dev.nucleusframework:nucleus.launcher-linux:") + implementation("dev.nucleusframework:nucleus.launcher-macos:") + implementation("dev.nucleusframework:nucleus.media-control:") + implementation("dev.nucleusframework:nucleus.menu-macos:") + implementation("dev.nucleusframework:nucleus.sf-symbols:") + implementation("dev.nucleusframework:nucleus.freedesktop-icons:") + implementation("dev.nucleusframework:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") + implementation("dev.nucleusframework:nucleus.darkmode-detector:") + implementation("dev.nucleusframework:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.energy-manager:") + implementation("dev.nucleusframework:nucleus.native-ssl:") + implementation("dev.nucleusframework:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.native-http-okhttp:") + implementation("dev.nucleusframework:nucleus.native-http-ktor:") + implementation("dev.nucleusframework:nucleus.linux-hidpi:") + implementation("dev.nucleusframework:nucleus.scheduler:") + implementation("dev.nucleusframework:nucleus.service-management-macos:") + implementation("dev.nucleusframework:nucleus.autolaunch:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` @@ -448,36 +448,36 @@ When using a custom `configurationFiles`, add the following rules to your file t ```proguard # Nucleus decorated-window JNI (macOS) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } # Nucleus darkmode-detector JNI (macOS) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Linux) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Windows) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } # Nucleus native-ssl JNI (macOS) --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } # Nucleus native-ssl JNI (Windows) --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } ``` @@ -497,7 +497,7 @@ Nucleus is a drop-in extension of the official JetBrains Compose Desktop plugin. id("org.jetbrains.kotlin.jvm") version "2.3.10" id("org.jetbrains.kotlin.plugin.compose") version "2.3.10" id("org.jetbrains.compose") version "1.10.1" -+ id("io.github.kdroidfilter.nucleus") version "1.0.0" ++ id("dev.nucleusframework.nucleus") version "1.0.0" } ``` @@ -509,7 +509,7 @@ Replace the JetBrains Compose DSL imports with the Nucleus equivalents: ```diff -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -+import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat ++import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat ``` This applies to all DSL types used in your `build.gradle.kts` (e.g. `TargetFormat`, `CompressionLevel`, `SigningAlgorithm`, etc.). @@ -615,16 +615,16 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection - implementation("io.github.kdroidfilter:nucleus.core-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.core-runtime:1.0.0") // AOT cache runtime (if using enableAotCache) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.aot-runtime:1.0.0") // Auto-update (if using publish) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.updater-runtime:1.0.0") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:1.0.0") + implementation("dev.nucleusframework:nucleus.taskbar-progress:1.0.0") } ``` @@ -633,7 +633,7 @@ dependencies { | Feature | Before (compose) | After (nucleus) | |---------|-------------------|-----------------| | DSL entry point | `compose.desktop.application` | `nucleus.application` | -| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `io.github.kdroidfilter.nucleus.desktop.application.dsl.*` | +| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `dev.nucleusframework.nucleus.desktop.application.dsl.*` | | Target formats | DMG, PKG, MSI, EXE, DEB, RPM | + NSIS, AppX, Portable, AppImage, Snap, Flatpak, archives | | Native lib cleanup | Manual | `cleanupNativeLibs = true` | | AOT cache | Not available | `enableAotCache = true` | @@ -687,71 +687,71 @@ Everything from the official plugin works unchanged: ## Documentation -- [Getting Started](https://nucleus.kdroidfilter.com/getting-started/) -- [Configuration](https://nucleus.kdroidfilter.com/configuration/) -- [macOS Targets](https://nucleus.kdroidfilter.com/targets/macos/) -- [Windows Targets](https://nucleus.kdroidfilter.com/targets/windows/) -- [Linux Targets](https://nucleus.kdroidfilter.com/targets/linux/) -- [Sandboxing](https://nucleus.kdroidfilter.com/sandboxing/) -- [Code Signing](https://nucleus.kdroidfilter.com/code-signing/) -- [Auto Update](https://nucleus.kdroidfilter.com/auto-update/) -- [Publishing](https://nucleus.kdroidfilter.com/publishing/) -- [Trusted CA Certificates](https://nucleus.kdroidfilter.com/trusted-certificates/) -- [AOT Cache](https://nucleus.kdroidfilter.com/runtime/aot-cache/) -- [GraalVM Native Image](https://nucleus.kdroidfilter.com/graalvm/index/) -- [Configuration](https://nucleus.kdroidfilter.com/graalvm/configuration/) -- [Automatic Metadata Resolution](https://nucleus.kdroidfilter.com/graalvm/automatic-metadata/) -- [Runtime Bootstrap](https://nucleus.kdroidfilter.com/graalvm/runtime-bootstrap/) -- [Tasks & CI/CD](https://nucleus.kdroidfilter.com/graalvm/tasks-ci/) -- [Nucleus Native Access](https://nucleus.kdroidfilter.com/native-access/index/) -- [Supported Types](https://nucleus.kdroidfilter.com/native-access/types/) -- [Usage & Patterns](https://nucleus.kdroidfilter.com/native-access/usage/) -- [CI/CD](https://nucleus.kdroidfilter.com/ci-cd/) -- [Runtime APIs](https://nucleus.kdroidfilter.com/runtime/index/) -- [App Metadata (`NucleusApp`)](https://nucleus.kdroidfilter.com/runtime/app-metadata/) -- [Executable Type Detection](https://nucleus.kdroidfilter.com/runtime/executable-type/) -- [Single Instance](https://nucleus.kdroidfilter.com/runtime/single-instance/) -- [Deep Links](https://nucleus.kdroidfilter.com/runtime/deep-links/) -- [Decorated Window](https://nucleus.kdroidfilter.com/runtime/decorated-window/) -- [Nucleus Application](https://nucleus.kdroidfilter.com/runtime/nucleus-application/) -- [Decorated Window — Tao backend](https://nucleus.kdroidfilter.com/runtime/decorated-window-tao/) -- [Decorated Window — Jewel](https://nucleus.kdroidfilter.com/runtime/decorated-window-jewel/) -- [Decorated Window — Material 2](https://nucleus.kdroidfilter.com/runtime/decorated-window-material2/) -- [Decorated Window — Material 3](https://nucleus.kdroidfilter.com/runtime/decorated-window-material3/) -- [System Tray](https://nucleus.kdroidfilter.com/runtime/system-tray/index/) -- [Tray API](https://nucleus.kdroidfilter.com/runtime/system-tray/tray-api/) -- [Menu DSL](https://nucleus.kdroidfilter.com/runtime/system-tray/menu-dsl/) -- [TrayApp](https://nucleus.kdroidfilter.com/runtime/system-tray/tray-app/) -- [Utilities](https://nucleus.kdroidfilter.com/runtime/system-tray/utilities/) -- [Notification (Common)](https://nucleus.kdroidfilter.com/runtime/notification-common/) -- [Notification (macOS)](https://nucleus.kdroidfilter.com/runtime/notification-macos/) -- [Notification (Windows)](https://nucleus.kdroidfilter.com/runtime/notification-windows/) -- [Notification (Linux)](https://nucleus.kdroidfilter.com/runtime/notification-linux/) -- [Launcher (macOS)](https://nucleus.kdroidfilter.com/runtime/launcher-macos/) -- [Launcher (Windows)](https://nucleus.kdroidfilter.com/runtime/launcher-windows/) -- [Launcher (Linux)](https://nucleus.kdroidfilter.com/runtime/launcher-linux/) -- [Media Control](https://nucleus.kdroidfilter.com/runtime/media-control/) -- [Dark Mode Detector](https://nucleus.kdroidfilter.com/runtime/darkmode-detector/) -- [System Color](https://nucleus.kdroidfilter.com/runtime/system-color/) -- [System Info](https://nucleus.kdroidfilter.com/runtime/system-info/) -- [Energy Manager](https://nucleus.kdroidfilter.com/runtime/energy-manager/) -- [Linux HiDPI](https://nucleus.kdroidfilter.com/runtime/linux-hidpi/) -- [Taskbar Progress](https://nucleus.kdroidfilter.com/runtime/taskbar-progress/) -- [Global Hotkey](https://nucleus.kdroidfilter.com/runtime/global-hotkey/) -- [Menu (macOS)](https://nucleus.kdroidfilter.com/runtime/menu-macos/) -- [Freedesktop Icons](https://nucleus.kdroidfilter.com/runtime/freedesktop-icons/) -- [Scheduler](https://nucleus.kdroidfilter.com/runtime/scheduler/) -- [Service Management (macOS)](https://nucleus.kdroidfilter.com/runtime/service-management-macos/) -- [Auto-Launch](https://nucleus.kdroidfilter.com/runtime/autolaunch/) -- [Native SSL](https://nucleus.kdroidfilter.com/runtime/native-ssl/) -- [Native HTTP](https://nucleus.kdroidfilter.com/runtime/native-http/) -- [Packaging](https://nucleus.kdroidfilter.com/comparison/packaging/) -- [File Dialog](https://nucleus.kdroidfilter.com/ecosystem/file-dialog/) -- [Spell Check](https://nucleus.kdroidfilter.com/ecosystem/spell-check/) -- [Migration from org.jetbrains.compose](https://nucleus.kdroidfilter.com/migration/) -- [Roadmap](https://nucleus.kdroidfilter.com/roadmap/) +- [Getting Started](https://nucleus.nucleusframework.com/getting-started/) +- [Configuration](https://nucleus.nucleusframework.com/configuration/) +- [macOS Targets](https://nucleus.nucleusframework.com/targets/macos/) +- [Windows Targets](https://nucleus.nucleusframework.com/targets/windows/) +- [Linux Targets](https://nucleus.nucleusframework.com/targets/linux/) +- [Sandboxing](https://nucleus.nucleusframework.com/sandboxing/) +- [Code Signing](https://nucleus.nucleusframework.com/code-signing/) +- [Auto Update](https://nucleus.nucleusframework.com/auto-update/) +- [Publishing](https://nucleus.nucleusframework.com/publishing/) +- [Trusted CA Certificates](https://nucleus.nucleusframework.com/trusted-certificates/) +- [AOT Cache](https://nucleus.nucleusframework.com/runtime/aot-cache/) +- [GraalVM Native Image](https://nucleus.nucleusframework.com/graalvm/index/) +- [Configuration](https://nucleus.nucleusframework.com/graalvm/configuration/) +- [Automatic Metadata Resolution](https://nucleus.nucleusframework.com/graalvm/automatic-metadata/) +- [Runtime Bootstrap](https://nucleus.nucleusframework.com/graalvm/runtime-bootstrap/) +- [Tasks & CI/CD](https://nucleus.nucleusframework.com/graalvm/tasks-ci/) +- [Nucleus Native Access](https://nucleus.nucleusframework.com/native-access/index/) +- [Supported Types](https://nucleus.nucleusframework.com/native-access/types/) +- [Usage & Patterns](https://nucleus.nucleusframework.com/native-access/usage/) +- [CI/CD](https://nucleus.nucleusframework.com/ci-cd/) +- [Runtime APIs](https://nucleus.nucleusframework.com/runtime/index/) +- [App Metadata (`NucleusApp`)](https://nucleus.nucleusframework.com/runtime/app-metadata/) +- [Executable Type Detection](https://nucleus.nucleusframework.com/runtime/executable-type/) +- [Single Instance](https://nucleus.nucleusframework.com/runtime/single-instance/) +- [Deep Links](https://nucleus.nucleusframework.com/runtime/deep-links/) +- [Decorated Window](https://nucleus.nucleusframework.com/runtime/decorated-window/) +- [Nucleus Application](https://nucleus.nucleusframework.com/runtime/nucleus-application/) +- [Decorated Window — Tao backend](https://nucleus.nucleusframework.com/runtime/decorated-window-tao/) +- [Decorated Window — Jewel](https://nucleus.nucleusframework.com/runtime/decorated-window-jewel/) +- [Decorated Window — Material 2](https://nucleus.nucleusframework.com/runtime/decorated-window-material2/) +- [Decorated Window — Material 3](https://nucleus.nucleusframework.com/runtime/decorated-window-material3/) +- [System Tray](https://nucleus.nucleusframework.com/runtime/system-tray/index/) +- [Tray API](https://nucleus.nucleusframework.com/runtime/system-tray/tray-api/) +- [Menu DSL](https://nucleus.nucleusframework.com/runtime/system-tray/menu-dsl/) +- [TrayApp](https://nucleus.nucleusframework.com/runtime/system-tray/tray-app/) +- [Utilities](https://nucleus.nucleusframework.com/runtime/system-tray/utilities/) +- [Notification (Common)](https://nucleus.nucleusframework.com/runtime/notification-common/) +- [Notification (macOS)](https://nucleus.nucleusframework.com/runtime/notification-macos/) +- [Notification (Windows)](https://nucleus.nucleusframework.com/runtime/notification-windows/) +- [Notification (Linux)](https://nucleus.nucleusframework.com/runtime/notification-linux/) +- [Launcher (macOS)](https://nucleus.nucleusframework.com/runtime/launcher-macos/) +- [Launcher (Windows)](https://nucleus.nucleusframework.com/runtime/launcher-windows/) +- [Launcher (Linux)](https://nucleus.nucleusframework.com/runtime/launcher-linux/) +- [Media Control](https://nucleus.nucleusframework.com/runtime/media-control/) +- [Dark Mode Detector](https://nucleus.nucleusframework.com/runtime/darkmode-detector/) +- [System Color](https://nucleus.nucleusframework.com/runtime/system-color/) +- [System Info](https://nucleus.nucleusframework.com/runtime/system-info/) +- [Energy Manager](https://nucleus.nucleusframework.com/runtime/energy-manager/) +- [Linux HiDPI](https://nucleus.nucleusframework.com/runtime/linux-hidpi/) +- [Taskbar Progress](https://nucleus.nucleusframework.com/runtime/taskbar-progress/) +- [Global Hotkey](https://nucleus.nucleusframework.com/runtime/global-hotkey/) +- [Menu (macOS)](https://nucleus.nucleusframework.com/runtime/menu-macos/) +- [Freedesktop Icons](https://nucleus.nucleusframework.com/runtime/freedesktop-icons/) +- [Scheduler](https://nucleus.nucleusframework.com/runtime/scheduler/) +- [Service Management (macOS)](https://nucleus.nucleusframework.com/runtime/service-management-macos/) +- [Auto-Launch](https://nucleus.nucleusframework.com/runtime/autolaunch/) +- [Native SSL](https://nucleus.nucleusframework.com/runtime/native-ssl/) +- [Native HTTP](https://nucleus.nucleusframework.com/runtime/native-http/) +- [Packaging](https://nucleus.nucleusframework.com/comparison/packaging/) +- [File Dialog](https://nucleus.nucleusframework.com/ecosystem/file-dialog/) +- [Spell Check](https://nucleus.nucleusframework.com/ecosystem/spell-check/) +- [Migration from org.jetbrains.compose](https://nucleus.nucleusframework.com/migration/) +- [Roadmap](https://nucleus.nucleusframework.com/roadmap/) ## Full LLM Documentation -- [llms-full.txt](https://nucleus.kdroidfilter.com/llms-full.txt): Complete documentation in a single file +- [llms-full.txt](https://nucleus.nucleusframework.com/llms-full.txt): Complete documentation in a single file diff --git a/docs/migration.md b/docs/migration.md index b1d6689fa..a86ecea43 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -9,7 +9,7 @@ Nucleus is a drop-in extension of the official JetBrains Compose Desktop plugin. id("org.jetbrains.kotlin.jvm") version "2.3.10" id("org.jetbrains.kotlin.plugin.compose") version "2.3.10" id("org.jetbrains.compose") version "1.10.1" -+ id("io.github.kdroidfilter.nucleus") version "1.0.0" ++ id("dev.nucleusframework.nucleus") version "1.0.0" } ``` @@ -21,7 +21,7 @@ Replace the JetBrains Compose DSL imports with the Nucleus equivalents: ```diff -import org.jetbrains.compose.desktop.application.dsl.TargetFormat -+import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat ++import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat ``` This applies to all DSL types used in your `build.gradle.kts` (e.g. `TargetFormat`, `CompressionLevel`, `SigningAlgorithm`, etc.). @@ -129,16 +129,16 @@ dependencies { implementation(compose.desktop.currentOs) // Executable type detection - implementation("io.github.kdroidfilter:nucleus.core-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.core-runtime:1.0.0") // AOT cache runtime (if using enableAotCache) - implementation("io.github.kdroidfilter:nucleus.aot-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.aot-runtime:1.0.0") // Auto-update (if using publish) - implementation("io.github.kdroidfilter:nucleus.updater-runtime:1.0.0") + implementation("dev.nucleusframework:nucleus.updater-runtime:1.0.0") // Native taskbar/dock progress bar - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:1.0.0") + implementation("dev.nucleusframework:nucleus.taskbar-progress:1.0.0") } ``` @@ -147,7 +147,7 @@ dependencies { | Feature | Before (compose) | After (nucleus) | |---------|-------------------|-----------------| | DSL entry point | `compose.desktop.application` | `nucleus.application` | -| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `io.github.kdroidfilter.nucleus.desktop.application.dsl.*` | +| DSL imports | `org.jetbrains.compose.desktop.application.dsl.*` | `dev.nucleusframework.nucleus.desktop.application.dsl.*` | | Target formats | DMG, PKG, MSI, EXE, DEB, RPM | + NSIS, AppX, Portable, AppImage, Snap, Flatpak, archives | | Native lib cleanup | Manual | `cleanupNativeLibs = true` | | AOT cache | Not available | `enableAotCache = true` | diff --git a/docs/native-access/index.md b/docs/native-access/index.md index bbb807281..50f4a3549 100644 --- a/docs/native-access/index.md +++ b/docs/native-access/index.md @@ -30,7 +30,7 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup !!! note "Separate versioning" - Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). + Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: @@ -38,7 +38,7 @@ Add the plugin to your Kotlin Multiplatform module: // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess + id("dev.nucleusframework.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess } kotlin { @@ -77,7 +77,7 @@ my-app/ ```kotlin plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" + id("dev.nucleusframework.nucleusnativeaccess") version "" } kotlin { @@ -99,7 +99,7 @@ plugins { kotlin("multiplatform") id("org.jetbrains.compose") id("org.jetbrains.kotlin.plugin.compose") - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } kotlin { @@ -136,9 +136,9 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. -The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. +The plugin ID is `dev.nucleusframework.nucleusnativeaccess`. ## Next steps diff --git a/docs/native-access/usage.md b/docs/native-access/usage.md index 611f329a4..2aa562677 100644 --- a/docs/native-access/usage.md +++ b/docs/native-access/usage.md @@ -98,7 +98,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. !!! tip "Full working example" - The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. + The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: diff --git a/docs/nucleus-application-plan.md b/docs/nucleus-application-plan.md index 7a8a668be..b31ff24fa 100644 --- a/docs/nucleus-application-plan.md +++ b/docs/nucleus-application-plan.md @@ -97,7 +97,7 @@ internal class AwtNucleusApplicationScope( } internal class TaoNucleusApplicationScope( - val taoScope: io.github.kdroidfilter.nucleus.window.tao.ApplicationScope, + val taoScope: dev.nucleusframework.nucleus.window.tao.ApplicationScope, ) : NucleusApplicationScope { override fun exitApplication() = taoScope.exitApplication() } diff --git a/docs/runtime/aot-cache.md b/docs/runtime/aot-cache.md index 1b4475164..eb40a6df1 100644 --- a/docs/runtime/aot-cache.md +++ b/docs/runtime/aot-cache.md @@ -43,14 +43,14 @@ To detect AOT mode at runtime (e.g. to self-terminate during training or skip he ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") // Transitive: nucleus.core-runtime is pulled in via `api` } ``` ```kotlin -import io.github.kdroidfilter.nucleus.aot.runtime.AotRuntime -import io.github.kdroidfilter.nucleus.aot.runtime.AotRuntimeMode +import dev.nucleusframework.nucleus.aot.runtime.AotRuntime +import dev.nucleusframework.nucleus.aot.runtime.AotRuntimeMode ``` ## Modes @@ -149,6 +149,6 @@ The `aot-runtime` module re-exports `ExecutableRuntime` and `ExecutableType` via ```kotlin // Both work: -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.aot.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.aot.runtime.ExecutableRuntime ``` diff --git a/docs/runtime/app-metadata.md b/docs/runtime/app-metadata.md index f81b584e2..1820d8d67 100644 --- a/docs/runtime/app-metadata.md +++ b/docs/runtime/app-metadata.md @@ -8,14 +8,14 @@ Access application metadata injected by the Nucleus Gradle plugin at runtime. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ## Usage ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.NucleusApp // Application identifier (matches packageName in the Nucleus DSL) val appId: String = NucleusApp.appId diff --git a/docs/runtime/autolaunch.md b/docs/runtime/autolaunch.md index e1b19f45e..e786e499b 100644 --- a/docs/runtime/autolaunch.md +++ b/docs/runtime/autolaunch.md @@ -19,14 +19,14 @@ The runtime exposes a single unified API — consumers don't need to branch on p ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.autolaunch:") + implementation("dev.nucleusframework:nucleus.autolaunch:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunch -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.autolaunch.AutoLaunch +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState ``` ## Usage @@ -101,7 +101,7 @@ nucleus.application { windows { appx { applicationId = "NucleusDemo" - publisherDisplayName = "KDroidFilter" + publisherDisplayName = "NucleusFramework" displayName = "Nucleus Demo" // 1. Inject into Package.appxmanifest @@ -188,7 +188,7 @@ Nucleus picks the right backend automatically — nothing to configure: All defaults fall back to `NucleusApp`. Override any of them **before** the first `AutoLaunch` call: ```kotlin -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchConfig +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchConfig AutoLaunchConfig.taskId = "MyCustomMsixTaskId" // MSIX AutoLaunchConfig.executablePath = "C:\\Program Files\\MyApp\\MyApp.exe" // Win32, Linux systemd (full path), Linux Flatpak (basename used) diff --git a/docs/runtime/darkmode-detector.md b/docs/runtime/darkmode-detector.md index 9fbe5901f..4560977cb 100644 --- a/docs/runtime/darkmode-detector.md +++ b/docs/runtime/darkmode-detector.md @@ -8,7 +8,7 @@ The `darkmode-detector` module solves this by providing a **reactive** `isSystem ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.darkmode-detector:") + implementation("dev.nucleusframework:nucleus.darkmode-detector:") } ``` @@ -59,23 +59,23 @@ The `darkmode-detector` module uses JNI native libraries on all platforms. When ```proguard # macOS — NativeDarkModeBridge is looked up by name from native code --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Linux — NativeLinuxBridge is looked up by name from native code --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Windows --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } ``` ## Compose Preview @@ -87,7 +87,7 @@ In Compose preview mode (`LocalInspectionMode`), the function falls back to the Debug and error messages are logged under the tags `MacOSThemeDetector`, `WindowsThemeDetector`, and `LinuxPortalThemeDetector`. Logging is off by default. To enable it, set the global flag from `core-runtime`: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` diff --git a/docs/runtime/decorated-window-jewel.md b/docs/runtime/decorated-window-jewel.md index 6ff6c6bf8..e92b486a5 100644 --- a/docs/runtime/decorated-window-jewel.md +++ b/docs/runtime/decorated-window-jewel.md @@ -6,7 +6,7 @@ The `decorated-window-jewel` module provides Jewel (IntelliJ theme) wrappers aro ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` diff --git a/docs/runtime/decorated-window-material2.md b/docs/runtime/decorated-window-material2.md index 2a6d43dfb..45771f822 100644 --- a/docs/runtime/decorated-window-material2.md +++ b/docs/runtime/decorated-window-material2.md @@ -6,7 +6,7 @@ The `decorated-window-material2` module provides Material 2 wrappers around the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` diff --git a/docs/runtime/decorated-window-material3.md b/docs/runtime/decorated-window-material3.md index 5169cf474..f41fa51bf 100644 --- a/docs/runtime/decorated-window-material3.md +++ b/docs/runtime/decorated-window-material3.md @@ -6,7 +6,7 @@ The `decorated-window-material3` module provides Material 3 wrappers around the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") // Transitive: nucleus.decorated-window is pulled in via `api` } ``` diff --git a/docs/runtime/decorated-window-tao.md b/docs/runtime/decorated-window-tao.md index 667182fcb..e7ace7ebe 100644 --- a/docs/runtime/decorated-window-tao.md +++ b/docs/runtime/decorated-window-tao.md @@ -22,13 +22,13 @@ If none of these apply, stick with `decorated-window-jni` — it is the more bat ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.decorated-window-tao:") + implementation("dev.nucleusframework:nucleus.decorated-window-tao:") // Optional but recommended — unified entry point that works with all three backends: - implementation("io.github.kdroidfilter:nucleus.nucleus-application:") + implementation("dev.nucleusframework:nucleus.nucleus-application:") // GraalVM bootstrap (required for native-image builds): - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` diff --git a/docs/runtime/decorated-window.md b/docs/runtime/decorated-window.md index ecec1a501..370941d3d 100644 --- a/docs/runtime/decorated-window.md +++ b/docs/runtime/decorated-window.md @@ -90,10 +90,10 @@ Choose one implementation: ```kotlin dependencies { // Option 1: JBR-based (requires JetBrains Runtime) - implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:") + implementation("dev.nucleusframework:nucleus.decorated-window-jbr:") // Option 2: JNI-based (works on any JVM) - implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") + implementation("dev.nucleusframework:nucleus.decorated-window-jni:") } ``` @@ -102,9 +102,9 @@ dependencies { ```kotlin dependencies { // Optional — pick one depending on your design system - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") // Jewel (IntelliJ) - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") // Material 2 - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") // Material 3 + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") // Jewel (IntelliJ) + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") // Material 2 + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") // Material 3 } ``` @@ -634,22 +634,22 @@ Both modules use JNI on macOS. When ProGuard is enabled, the native bridge class ```proguard # Nucleus decorated-window-jbr JNI --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } # Nucleus decorated-window-jni JNI (all platforms) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.JniMacTitleBarBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.JniMacTitleBarBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.utils.windows.JniWindowsDecorationBridge { +-keep class dev.nucleusframework.nucleus.window.utils.windows.JniWindowsDecorationBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.utils.linux.JniLinuxWindowBridge { +-keep class dev.nucleusframework.nucleus.window.utils.linux.JniLinuxWindowBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } ``` ## RTL (Right-to-Left) Layout Support diff --git a/docs/runtime/deep-links.md b/docs/runtime/deep-links.md index 3ad3b5b33..1bcc6c457 100644 --- a/docs/runtime/deep-links.md +++ b/docs/runtime/deep-links.md @@ -6,12 +6,12 @@ Handle custom URL protocol links (`myapp://action?param=value`). ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler +import dev.nucleusframework.nucleus.core.runtime.DeepLinkHandler ``` `DeepLinkHandler` is a Kotlin `object` (singleton). diff --git a/docs/runtime/energy-manager.md b/docs/runtime/energy-manager.md index c86574c70..aa1bcc786 100644 --- a/docs/runtime/energy-manager.md +++ b/docs/runtime/energy-manager.md @@ -18,7 +18,7 @@ The `energy-manager` module provides two capabilities for Compose Desktop applic ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.energy-manager:") + implementation("dev.nucleusframework:nucleus.energy-manager:") } ``` @@ -41,7 +41,7 @@ The module provides two levels of process-level efficiency: ### Recommended: light mode on focus loss, full mode on minimize ```kotlin -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.energymanager.EnergyManager import java.awt.event.WindowEvent import java.awt.event.WindowFocusListener @@ -277,5 +277,5 @@ The module ships pre-built native binaries for: When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.energymanager.** { *; } +-keep class dev.nucleusframework.nucleus.energymanager.** { *; } ``` diff --git a/docs/runtime/executable-type.md b/docs/runtime/executable-type.md index 096b33189..8f59b83b7 100644 --- a/docs/runtime/executable-type.md +++ b/docs/runtime/executable-type.md @@ -6,13 +6,13 @@ Detect at runtime which installer format was used to package your application. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableType +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableType ``` ## Usage diff --git a/docs/runtime/freedesktop-icons.md b/docs/runtime/freedesktop-icons.md index e7429cd23..96edf437a 100644 --- a/docs/runtime/freedesktop-icons.md +++ b/docs/runtime/freedesktop-icons.md @@ -6,7 +6,7 @@ Type-safe Kotlin constants for the [freedesktop Icon Naming Specification](https ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.freedesktop-icons:") + implementation("dev.nucleusframework:nucleus.freedesktop-icons:") } ``` @@ -16,7 +16,7 @@ dependencies { ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon // Standard icon from the spec (typesafe) val icon = FreedesktopIcon.Status.DIALOG_INFORMATION @@ -68,8 +68,8 @@ Icon names are **cross-desktop** — they are resolved from the active icon them ## Usage in Notifications ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.notification.linux.* +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.notification.linux.* LinuxNotificationCenter.notify( Notification( @@ -85,8 +85,8 @@ LinuxNotificationCenter.notify( ## Usage in Launcher Quicklists ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.launcher.linux.DbusmenuItem +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.launcher.linux.DbusmenuItem val items = listOf( DbusmenuItem(id = 1, label = "New Window", icon = FreedesktopIcon.Action.WINDOW_NEW), diff --git a/docs/runtime/global-hotkey.md b/docs/runtime/global-hotkey.md index f2a75b51c..0dbe7e09b 100644 --- a/docs/runtime/global-hotkey.md +++ b/docs/runtime/global-hotkey.md @@ -6,15 +6,15 @@ System-wide keyboard shortcuts that fire even when the application does not have ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.global-hotkey:") + implementation("dev.nucleusframework:nucleus.global-hotkey:") } ``` ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.globalhotkey.GlobalHotKeyManager -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyModifier +import dev.nucleusframework.nucleus.globalhotkey.GlobalHotKeyManager +import dev.nucleusframework.nucleus.globalhotkey.HotKeyModifier import java.awt.event.KeyEvent GlobalHotKeyManager.initialize() @@ -211,7 +211,7 @@ Uses the `org.freedesktop.portal.GlobalShortcuts` XDG Desktop Portal via GIO/GDB **Requirements:** -- The application must have a valid `.desktop` file with a reverse-DNS name (e.g., `io.github.kdroidfilter.MyApp.desktop`) +- The application must have a valid `.desktop` file with a reverse-DNS name (e.g., `dev.nucleusframework.MyApp.desktop`) - The application must be launched from that `.desktop` file (or have `GIO_LAUNCHED_DESKTOP_FILE` set) - GNOME validates the `app_id` against `g_application_id_is_valid` — a plain name like `MyApp` will be rejected @@ -223,14 +223,14 @@ Uses the `org.freedesktop.portal.GlobalShortcuts` XDG Desktop Portal via GIO/GDB nucleus.application { nativeDistributions { appName = "MyApp" // human-readable display name - packageName = "io.github.kdroidfilter.MyApp" // becomes io.github.kdroidfilter.MyApp.desktop + packageName = "dev.nucleusframework.MyApp" // becomes dev.nucleusframework.MyApp.desktop } } ``` !!! warning "`appName` is required" Without `appName`, the application title shown in GNOME Shell and window decorations - will fall back to the full `packageName` (`io.github.kdroidfilter.MyApp`). + will fall back to the full `packageName` (`dev.nucleusframework.MyApp`). Always set both: `packageName` for the reverse-DNS identity, `appName` for the display name. **Step 2 — Launch from the `.desktop` file:** @@ -240,7 +240,7 @@ The portal uses `GIO_LAUNCHED_DESKTOP_FILE` (set automatically by the desktop en For development, you can set it manually: ```bash -GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/io.github.kdroidfilter.MyApp.desktop \ +GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/dev.nucleusframework.MyApp.desktop \ GIO_LAUNCHED_DESKTOP_FILE_PID=$$ \ ./my-app ``` @@ -265,7 +265,7 @@ The portal backend uses a dedicated GLib thread permanently attached to the JVM. If you use ProGuard/R8, keep the JNI bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { *; } --keep class io.github.kdroidfilter.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { *; } --keep class io.github.kdroidfilter.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { *; } +-keep class dev.nucleusframework.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { *; } ``` diff --git a/docs/runtime/index.md b/docs/runtime/index.md index 16c60af6e..0c6ea8bb8 100644 --- a/docs/runtime/index.md +++ b/docs/runtime/index.md @@ -6,70 +6,70 @@ Nucleus provides runtime libraries for use in your application code. All are pub | Library | Artifact | Description | |---------|----------|-------------| -| Core Runtime | `io.github.kdroidfilter:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | -| AOT Runtime | `io.github.kdroidfilter:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | -| Updater Runtime | `io.github.kdroidfilter:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | -| Taskbar Progress | `io.github.kdroidfilter:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | -| Notification (macOS) | `io.github.kdroidfilter:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | -| Notification (Windows) | `io.github.kdroidfilter:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | -| Launcher (Windows) | `io.github.kdroidfilter:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | -| Notification (Linux) | `io.github.kdroidfilter:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | -| Launcher (Linux) | `io.github.kdroidfilter:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | -| Launcher (macOS) | `io.github.kdroidfilter:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | -| Media Control | `io.github.kdroidfilter:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | -| Menu (macOS) | `io.github.kdroidfilter:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | -| SF Symbols | `io.github.kdroidfilter:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | -| Freedesktop Icons | `io.github.kdroidfilter:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | -| Decorated Window | `io.github.kdroidfilter:nucleus.decorated-window` | Custom window decorations with native title bar | -| Decorated Window — Jewel | `io.github.kdroidfilter:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | -| Decorated Window — Material 2 | `io.github.kdroidfilter:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | -| Decorated Window — Material 3 | `io.github.kdroidfilter:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | -| Dark Mode Detector | `io.github.kdroidfilter:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | -| System Color | `io.github.kdroidfilter:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | -| Energy Manager | `io.github.kdroidfilter:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | -| Native SSL | `io.github.kdroidfilter:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | -| Native HTTP | `io.github.kdroidfilter:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | -| Native HTTP — OkHttp | `io.github.kdroidfilter:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | -| Native HTTP — Ktor | `io.github.kdroidfilter:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | -| Linux HiDPI | `io.github.kdroidfilter:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | -| Scheduler | `io.github.kdroidfilter:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | -| Service Management (macOS) | `io.github.kdroidfilter:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | -| Auto-Launch | `io.github.kdroidfilter:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | -| GraalVM Runtime | `io.github.kdroidfilter:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | +| Core Runtime | `dev.nucleusframework:nucleus.core-runtime` | Executable type detection, single instance, deep links, app metadata (`NucleusApp`) | +| AOT Runtime | `dev.nucleusframework:nucleus.aot-runtime` | AOT cache detection (includes core-runtime via `api`) | +| Updater Runtime | `dev.nucleusframework:nucleus.updater-runtime` | Auto-update library with update level detection and post-update events (includes core-runtime) | +| Taskbar Progress | `dev.nucleusframework:nucleus.taskbar-progress` | Native taskbar/dock progress bar and attention requests (Windows, macOS, Linux) | +| Notification (macOS) | `dev.nucleusframework:nucleus.notification-macos` | macOS UserNotifications API — local notifications, actions, badges via JNI | +| Notification (Windows) | `dev.nucleusframework:nucleus.notification-windows` | Windows Toast Notifications API — rich toasts, buttons, progress bars via JNI (WinRT) | +| Launcher (Windows) | `dev.nucleusframework:nucleus.launcher-windows` | Windows Launcher API — badge notifications, jump lists, overlay icons, and thumbnail toolbar (ITaskbarList3) via JNI | +| Notification (Linux) | `dev.nucleusframework:nucleus.notification-linux` | Freedesktop Desktop Notifications API via JNI (D-Bus) | +| Launcher (Linux) | `dev.nucleusframework:nucleus.launcher-linux` | Unity Launcher API — badge, progress, urgency, quicklist via JNI (D-Bus) | +| Launcher (macOS) | `dev.nucleusframework:nucleus.launcher-macos` | macOS dock context menu — custom items, submenus, click callbacks via JNI | +| Media Control | `dev.nucleusframework:nucleus.media-control` | OS media controls (play/pause, metadata, seek) — MPRIS D-Bus on Linux, MPNowPlayingInfoCenter on macOS, SystemMediaTransportControls on Windows via JNI | +| Menu (macOS) | `dev.nucleusframework:nucleus.menu-macos` | Complete NSMenu mapping — application menu bar, items, badges, delegates, SF Symbols via JNI | +| SF Symbols | `dev.nucleusframework:nucleus.sf-symbols` | Type-safe Apple SF Symbols constants (6 195 symbols, 21 categories) | +| Freedesktop Icons | `dev.nucleusframework:nucleus.freedesktop-icons` | Type-safe freedesktop Icon Naming Specification constants | +| Decorated Window | `dev.nucleusframework:nucleus.decorated-window` | Custom window decorations with native title bar | +| Decorated Window — Jewel | `dev.nucleusframework:nucleus.decorated-window-jewel` | Jewel (IntelliJ theme) color mapping for decorated windows | +| Decorated Window — Material 2 | `dev.nucleusframework:nucleus.decorated-window-material2` | Material 2 color mapping for decorated windows | +| Decorated Window — Material 3 | `dev.nucleusframework:nucleus.decorated-window-material3` | Material 3 color mapping for decorated windows | +| Dark Mode Detector | `dev.nucleusframework:nucleus.darkmode-detector` | Reactive OS dark mode detection via JNI | +| System Color | `dev.nucleusframework:nucleus.system-color` | Reactive system accent color and high contrast detection via JNI | +| Energy Manager | `dev.nucleusframework:nucleus.energy-manager` | Process-level and thread-level energy efficiency mode and screen-awake (caffeine) API for Windows, macOS, and Linux | +| Native SSL | `dev.nucleusframework:nucleus.native-ssl` | OS trust store integration — merges native certs with JVM defaults | +| Native HTTP | `dev.nucleusframework:nucleus.native-http` | `java.net.http.HttpClient` pre-configured with native OS trust | +| Native HTTP — OkHttp | `dev.nucleusframework:nucleus.native-http-okhttp` | OkHttp client pre-configured with native OS trust | +| Native HTTP — Ktor | `dev.nucleusframework:nucleus.native-http-ktor` | Ktor `HttpClient` extension for native OS trust (all engines) | +| Linux HiDPI | `dev.nucleusframework:nucleus.linux-hidpi` | Native HiDPI scale factor detection on Linux | +| Scheduler | `dev.nucleusframework:nucleus.scheduler` | Background task scheduling — periodic, calendar, and on-boot tasks via OS-native schedulers (launchd, systemd, Task Scheduler) | +| Service Management (macOS) | `dev.nucleusframework:nucleus.service-management-macos` | macOS SMAppService binding — login items, launch agents, launch daemons (macOS 13+) | +| Auto-Launch | `dev.nucleusframework:nucleus.autolaunch` | Cross-platform start-at-login — MSIX `StartupTask`, Win32 `HKCU\...\Run`, `SMAppService`, systemd user units, Flatpak portal | +| GraalVM Runtime | `dev.nucleusframework:nucleus.graalvm-runtime` | GraalVM native-image bootstrap + font substitutions (includes linux-hidpi) | ```kotlin dependencies { // Pick what you need: - implementation("io.github.kdroidfilter:nucleus.core-runtime:") - implementation("io.github.kdroidfilter:nucleus.aot-runtime:") - implementation("io.github.kdroidfilter:nucleus.updater-runtime:") - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") - implementation("io.github.kdroidfilter:nucleus.notification-macos:") - implementation("io.github.kdroidfilter:nucleus.notification-windows:") - implementation("io.github.kdroidfilter:nucleus.launcher-windows:") - implementation("io.github.kdroidfilter:nucleus.notification-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-linux:") - implementation("io.github.kdroidfilter:nucleus.launcher-macos:") - implementation("io.github.kdroidfilter:nucleus.media-control:") - implementation("io.github.kdroidfilter:nucleus.menu-macos:") - implementation("io.github.kdroidfilter:nucleus.sf-symbols:") - implementation("io.github.kdroidfilter:nucleus.freedesktop-icons:") - implementation("io.github.kdroidfilter:nucleus.decorated-window:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-jewel:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material2:") - implementation("io.github.kdroidfilter:nucleus.decorated-window-material3:") - implementation("io.github.kdroidfilter:nucleus.darkmode-detector:") - implementation("io.github.kdroidfilter:nucleus.system-color:") - implementation("io.github.kdroidfilter:nucleus.energy-manager:") - implementation("io.github.kdroidfilter:nucleus.native-ssl:") - implementation("io.github.kdroidfilter:nucleus.native-http:") - implementation("io.github.kdroidfilter:nucleus.native-http-okhttp:") - implementation("io.github.kdroidfilter:nucleus.native-http-ktor:") - implementation("io.github.kdroidfilter:nucleus.linux-hidpi:") - implementation("io.github.kdroidfilter:nucleus.scheduler:") - implementation("io.github.kdroidfilter:nucleus.service-management-macos:") - implementation("io.github.kdroidfilter:nucleus.autolaunch:") - implementation("io.github.kdroidfilter:nucleus.graalvm-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.aot-runtime:") + implementation("dev.nucleusframework:nucleus.updater-runtime:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.notification-macos:") + implementation("dev.nucleusframework:nucleus.notification-windows:") + implementation("dev.nucleusframework:nucleus.launcher-windows:") + implementation("dev.nucleusframework:nucleus.notification-linux:") + implementation("dev.nucleusframework:nucleus.launcher-linux:") + implementation("dev.nucleusframework:nucleus.launcher-macos:") + implementation("dev.nucleusframework:nucleus.media-control:") + implementation("dev.nucleusframework:nucleus.menu-macos:") + implementation("dev.nucleusframework:nucleus.sf-symbols:") + implementation("dev.nucleusframework:nucleus.freedesktop-icons:") + implementation("dev.nucleusframework:nucleus.decorated-window:") + implementation("dev.nucleusframework:nucleus.decorated-window-jewel:") + implementation("dev.nucleusframework:nucleus.decorated-window-material2:") + implementation("dev.nucleusframework:nucleus.decorated-window-material3:") + implementation("dev.nucleusframework:nucleus.darkmode-detector:") + implementation("dev.nucleusframework:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.energy-manager:") + implementation("dev.nucleusframework:nucleus.native-ssl:") + implementation("dev.nucleusframework:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.native-http-okhttp:") + implementation("dev.nucleusframework:nucleus.native-http-ktor:") + implementation("dev.nucleusframework:nucleus.linux-hidpi:") + implementation("dev.nucleusframework:nucleus.scheduler:") + implementation("dev.nucleusframework:nucleus.service-management-macos:") + implementation("dev.nucleusframework:nucleus.autolaunch:") + implementation("dev.nucleusframework:nucleus.graalvm-runtime:") } ``` @@ -101,36 +101,36 @@ When using a custom `configurationFiles`, add the following rules to your file t ```proguard # Nucleus decorated-window JNI (macOS) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } # Nucleus darkmode-detector JNI (macOS) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Linux) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Windows) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } # Nucleus native-ssl JNI (macOS) --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } # Nucleus native-ssl JNI (Windows) --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } ``` diff --git a/docs/runtime/launcher-linux.md b/docs/runtime/launcher-linux.md index 14ef41c63..984613f9f 100644 --- a/docs/runtime/launcher-linux.md +++ b/docs/runtime/launcher-linux.md @@ -9,7 +9,7 @@ Complete Kotlin mapping of the [Unity Launcher API](https://wiki.ubuntu.com/Unit ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-linux:") + implementation("dev.nucleusframework:nucleus.launcher-linux:") } ``` @@ -20,7 +20,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `freedesktop-icons` for ### Launcher Entry (Badge, Progress, Urgency) ```kotlin -import io.github.kdroidfilter.nucleus.launcher.linux.* +import dev.nucleusframework.nucleus.launcher.linux.* val appUri = LinuxLauncherEntry.appUri("myapp.desktop") @@ -48,8 +48,8 @@ LinuxLauncherEntry.update(appUri, LauncherProperties( ### Dynamic Quicklist (Right-Click Menu) ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.launcher.linux.* +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.launcher.linux.* val quicklist = LinuxQuicklist("/com/example/MyApp/Menu") @@ -238,7 +238,7 @@ Ships pre-built Linux shared libraries (x86_64 + aarch64). `isAvailable` returns ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.launcher.linux.NativeLinuxLauncherBridge { +-keep class dev.nucleusframework.nucleus.launcher.linux.NativeLinuxLauncherBridge { native ; static ** on*(...); } @@ -251,7 +251,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.launcher.linux.NativeLinuxLauncherBridge", + "type": "dev.nucleusframework.nucleus.launcher.linux.NativeLinuxLauncherBridge", "methods": [ { "name": "onMenuItemEvent", "parameterTypes": ["java.lang.String", "int"] } ] diff --git a/docs/runtime/launcher-macos.md b/docs/runtime/launcher-macos.md index 08e6d681f..1e7905318 100644 --- a/docs/runtime/launcher-macos.md +++ b/docs/runtime/launcher-macos.md @@ -9,7 +9,7 @@ macOS dock context menu integration via JNI. Add custom items, submenus, separat ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-macos:") + implementation("dev.nucleusframework:nucleus.launcher-macos:") } ``` @@ -18,7 +18,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` (pulled in transitively). ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.macos.* +import dev.nucleusframework.nucleus.launcher.macos.* // Listen for clicks MacOsDockMenu.listener = DockMenuListener { itemId -> @@ -111,7 +111,7 @@ DockMenuItem.separator(id = 3) ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.launcher.macos.* +import dev.nucleusframework.nucleus.launcher.macos.* // Set up a dock menu with submenus and callbacks MacOsDockMenu.listener = DockMenuListener { itemId -> @@ -167,7 +167,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `isAvailable` returns `false` on ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.launcher.macos.NativeMacOsDockMenuBridge { +-keep class dev.nucleusframework.nucleus.launcher.macos.NativeMacOsDockMenuBridge { native ; static ** on*(...); } @@ -180,7 +180,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.launcher.macos.NativeMacOsDockMenuBridge", + "type": "dev.nucleusframework.nucleus.launcher.macos.NativeMacOsDockMenuBridge", "methods": [ { "name": "onMenuItemClicked", "parameterTypes": ["int"] } ] diff --git a/docs/runtime/launcher-windows.md b/docs/runtime/launcher-windows.md index 068191bfd..cbf5e93e4 100644 --- a/docs/runtime/launcher-windows.md +++ b/docs/runtime/launcher-windows.md @@ -6,7 +6,7 @@ Windows Launcher API via JNI — badge notifications, jump lists, overlay icons, ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.launcher-windows:") + implementation("dev.nucleusframework:nucleus.launcher-windows:") } ``` @@ -35,8 +35,8 @@ This module provides four Windows launcher APIs: ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.BadgeGlyph -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsBadgeManager +import dev.nucleusframework.nucleus.launcher.windows.BadgeGlyph +import dev.nucleusframework.nucleus.launcher.windows.WindowsBadgeManager // Initialize once at app startup if (WindowsBadgeManager.isAvailable) { @@ -98,9 +98,9 @@ Small 16×16 status icons displayed over the app's taskbar button. Works with al ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsOverlayIcon +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.WindowsOverlayIcon // Set a stock icon overlay WindowsOverlayIcon.setIcon( @@ -140,10 +140,10 @@ Up to 7 clickable buttons displayed in the taskbar thumbnail preview (visible wh ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.ThumbnailToolbarButton -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsThumbnailToolbar +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.ThumbnailToolbarButton +import dev.nucleusframework.nucleus.launcher.windows.WindowsThumbnailToolbar // Register buttons (once per window) WindowsThumbnailToolbar.setButtons( @@ -221,11 +221,11 @@ Jump lists appear when the user right-clicks the app's taskbar button. They supp ### Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListCategory -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListItem -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsJumpListManager +import dev.nucleusframework.nucleus.launcher.windows.JumpListCategory +import dev.nucleusframework.nucleus.launcher.windows.JumpListItem +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.WindowsJumpListManager // Set a jump list with categories and tasks WindowsJumpListManager.setJumpList( diff --git a/docs/runtime/linux-hidpi.md b/docs/runtime/linux-hidpi.md index cf9f433dc..de59612d3 100644 --- a/docs/runtime/linux-hidpi.md +++ b/docs/runtime/linux-hidpi.md @@ -16,7 +16,7 @@ This module was originally designed for running Compose Desktop applications com ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.linux-hidpi:") + implementation("dev.nucleusframework:nucleus.linux-hidpi:") } ``` @@ -25,7 +25,7 @@ dependencies { Call `getLinuxNativeScaleFactor()` **before** `application {}` (i.e. before AWT initialises): ```kotlin -import io.github.kdroidfilter.nucleus.hidpi.getLinuxNativeScaleFactor +import dev.nucleusframework.nucleus.hidpi.getLinuxNativeScaleFactor fun main() { if (System.getProperty("sun.java2d.uiScale") == null) { @@ -71,7 +71,7 @@ The native code uses `dlopen` to load optional dependencies (libgio for GSetting When ProGuard is enabled, preserve the JNI bridge class: ```proguard --keep class io.github.kdroidfilter.nucleus.hidpi.HiDpiLinuxBridge { +-keep class dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge { native ; } ``` diff --git a/docs/runtime/media-control.md b/docs/runtime/media-control.md index 9a2cdecc5..f8243be5f 100644 --- a/docs/runtime/media-control.md +++ b/docs/runtime/media-control.md @@ -16,7 +16,7 @@ OS-level media controls (play/pause, next/previous, seek, metadata) for your des ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.media-control:") + implementation("dev.nucleusframework:nucleus.media-control:") } ``` @@ -25,7 +25,7 @@ Depends on `core-runtime` (for `NativeLibraryLoader` and `NucleusApp`) and `kotl ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.media.control.* +import dev.nucleusframework.nucleus.media.control.* if (MediaControlService.isAvailable()) { // 1. Configure once — typically at app startup @@ -291,15 +291,15 @@ Each JVM hosts a single long-lived background worker: on Linux a dedicated threa ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.media.control.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.media.control.linux.NativeLinuxBridge { native ; static ** on*(...); } --keep class io.github.kdroidfilter.nucleus.media.control.macos.NativeMacOsBridge { +-keep class dev.nucleusframework.nucleus.media.control.macos.NativeMacOsBridge { native ; static ** on*(...); } --keep class io.github.kdroidfilter.nucleus.media.control.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.media.control.windows.NativeWindowsBridge { native ; static ** on*(...); } diff --git a/docs/runtime/menu-macos.md b/docs/runtime/menu-macos.md index 4fa0d9556..e58acb1dc 100644 --- a/docs/runtime/menu-macos.md +++ b/docs/runtime/menu-macos.md @@ -6,17 +6,17 @@ Declarative, Compose-reactive macOS application menu bar via JNI. Build a fully ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.menu-macos:") + implementation("dev.nucleusframework:nucleus.menu-macos:") } ``` -Pulls in `core-runtime`, `compose.desktop.common`, and `sf-symbols` transitively. Consumers can use type-safe SF Symbol constants via `io.github.kdroidfilter.nucleus.sfsymbols.*` without declaring `sf-symbols` explicitly. +Pulls in `core-runtime`, `compose.desktop.common`, and `sf-symbols` transitively. Consumers can use type-safe SF Symbol constants via `dev.nucleusframework.nucleus.sfsymbols.*` without declaring `sf-symbols` explicitly. ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.menu.macos.* -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.menu.macos.* +import dev.nucleusframework.nucleus.sfsymbols.* @Composable fun App() { @@ -152,7 +152,7 @@ Available constants: `NativeKey.Escape`, `Return`, `Tab`, `Delete`, `Backspace`, With the `sf-symbols` module (type-safe): ```kotlin -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.sfsymbols.* Item("Cut", icon = NsMenuItemImage.SystemSymbol(SFSymbolObjectsAndTools.SCISSORS)) { } Item("Inbox", icon = NsMenuItemImage.SystemSymbol(SFSymbolGeneral.TRAY_FILL)) { } @@ -323,7 +323,7 @@ Menu("App Services") { Item("Custom") { } } // ✗ fully yours ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.sfsymbols.* +import dev.nucleusframework.nucleus.sfsymbols.* @Composable fun App() { @@ -470,7 +470,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `NativeMenuBar` is a no-op on non ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.menu.macos.NativeNsMenuBridge { +-keep class dev.nucleusframework.nucleus.menu.macos.NativeNsMenuBridge { native ; static ** on*(...); } @@ -481,7 +481,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). `NativeMenuBar` is a no-op on non ```json [ { - "type": "io.github.kdroidfilter.nucleus.menu.macos.NativeNsMenuBridge", + "type": "dev.nucleusframework.nucleus.menu.macos.NativeNsMenuBridge", "methods": [ { "name": "onMenuItemAction", "parameterTypes": ["long"] }, { "name": "onMenuWillOpen", "parameterTypes": ["long"] }, diff --git a/docs/runtime/native-http.md b/docs/runtime/native-http.md index d2a196ee5..4ecdcc21c 100644 --- a/docs/runtime/native-http.md +++ b/docs/runtime/native-http.md @@ -6,9 +6,9 @@ Three integration modules are available — pick the one that matches your HTTP | Module | Artifact | Client | |--------|----------|--------| -| `native-http` | `io.github.kdroidfilter:nucleus.native-http` | `java.net.http.HttpClient` (JDK 11+) | -| `native-http-okhttp` | `io.github.kdroidfilter:nucleus.native-http-okhttp` | OkHttp 4 | -| `native-http-ktor` | `io.github.kdroidfilter:nucleus.native-http-ktor` | Ktor Client (engine-agnostic) | +| `native-http` | `dev.nucleusframework:nucleus.native-http` | `java.net.http.HttpClient` (JDK 11+) | +| `native-http-okhttp` | `dev.nucleusframework:nucleus.native-http-okhttp` | OkHttp 4 | +| `native-http-ktor` | `dev.nucleusframework:nucleus.native-http-ktor` | Ktor Client (engine-agnostic) | All three pull in `native-ssl` transitively — no need to declare it separately. @@ -20,14 +20,14 @@ All three pull in `native-ssl` transitively — no need to declare it separately ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http:") + implementation("dev.nucleusframework:nucleus.native-http:") } ``` ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient // Option 1 — pre-built client val client = NativeHttpClient.create() @@ -51,7 +51,7 @@ val client = HttpClient.newBuilder() ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http-okhttp:") + implementation("dev.nucleusframework:nucleus.native-http-okhttp:") } ``` @@ -60,7 +60,7 @@ OkHttp 4.x is pulled in transitively. ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.okhttp.NativeOkHttpClient +import dev.nucleusframework.nucleus.nativehttp.okhttp.NativeOkHttpClient // Option 1 — pre-built client val client = NativeOkHttpClient.create() @@ -82,7 +82,7 @@ val client = OkHttpClient.Builder() ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-http-ktor:") + implementation("dev.nucleusframework:nucleus.native-http-ktor:") // Add exactly one Ktor engine: implementation("io.ktor:ktor-client-cio:") // CIO (coroutine-based) // or: ktor-client-java, ktor-client-okhttp, ktor-client-apache5 @@ -94,7 +94,7 @@ dependencies { ### Usage ```kotlin -import io.github.kdroidfilter.nucleus.nativehttp.ktor.installNativeSsl +import dev.nucleusframework.nucleus.nativehttp.ktor.installNativeSsl import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO diff --git a/docs/runtime/native-ssl.md b/docs/runtime/native-ssl.md index f891f9672..45784d71c 100644 --- a/docs/runtime/native-ssl.md +++ b/docs/runtime/native-ssl.md @@ -8,7 +8,7 @@ The `native-ssl` module solves this by reading trusted certificates directly fro ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.native-ssl:") + implementation("dev.nucleusframework:nucleus.native-ssl:") } ``` @@ -17,7 +17,7 @@ dependencies { The entire API surface is the `NativeTrustManager` singleton. All properties are lazy and thread-safe. ```kotlin -import io.github.kdroidfilter.nucleus.nativessl.NativeTrustManager +import dev.nucleusframework.nucleus.nativessl.NativeTrustManager // Ready-to-use X509TrustManager (JVM defaults + OS native certs) val trustManager: X509TrustManager = NativeTrustManager.trustManager @@ -84,11 +84,11 @@ Certificates are deduplicated by DER content across all sources. The `native-ssl` module uses JNI native libraries on macOS and Windows. When ProGuard is enabled, the bridge classes must be preserved. The Nucleus Gradle plugin includes these rules automatically; if you need them manually: ```proguard --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } ``` @@ -98,7 +98,7 @@ The `native-ssl` module uses JNI native libraries on macOS and Windows. When Pro Debug messages are emitted under the tags `NativeCertificateProvider`, `NativeSslBridge`, `WindowsCertificateProvider`, `LinuxCertificateProvider`, etc. Logging is off by default. To enable it, set the global flag from `core-runtime`: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` diff --git a/docs/runtime/notification-common.md b/docs/runtime/notification-common.md index 53f2a51e1..aa9b11f61 100644 --- a/docs/runtime/notification-common.md +++ b/docs/runtime/notification-common.md @@ -9,7 +9,7 @@ Cross-platform notification abstraction that unifies Linux, Windows, and macOS n ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-common:") + implementation("dev.nucleusframework:nucleus.notification-common:") } ``` @@ -18,7 +18,7 @@ This single dependency pulls in all three platform modules (Linux, Windows, macO ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.common.* +import dev.nucleusframework.nucleus.notification.common.* // Build a notification val n = notification( @@ -36,7 +36,7 @@ n.send() ## Full Example ```kotlin -import io.github.kdroidfilter.nucleus.notification.common.* +import dev.nucleusframework.nucleus.notification.common.* val myNotification = notification( title = "New Message from Alice", diff --git a/docs/runtime/notification-linux.md b/docs/runtime/notification-linux.md index bef6b4414..1b5741724 100644 --- a/docs/runtime/notification-linux.md +++ b/docs/runtime/notification-linux.md @@ -9,7 +9,7 @@ Complete Kotlin mapping of the [freedesktop Desktop Notifications Specification] ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-linux:") + implementation("dev.nucleusframework:nucleus.notification-linux:") } ``` @@ -18,7 +18,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `freedesktop-icons` for ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.linux.* +import dev.nucleusframework.nucleus.notification.linux.* // Send a simple notification with typesafe icon and sound val id = LinuxNotificationCenter.notify( @@ -220,7 +220,7 @@ Received in `LinuxNotificationListener.onClosed`. Icons are typesafe via the `FreedesktopIcon` sealed interface from the shared [`freedesktop-icons`](freedesktop-icons.md) module. All 338 standard names from the [freedesktop Icon Naming Specification](https://specifications.freedesktop.org/icon-naming/latest/) are available as enum constants. ```kotlin -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon FreedesktopIcon.Status.DIALOG_INFORMATION FreedesktopIcon.Device.PRINTER @@ -455,7 +455,7 @@ Ships pre-built Linux shared libraries (x86_64 + aarch64). No macOS or Windows n ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.linux.NativeLinuxNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.linux.NativeLinuxNotificationBridge { native ; static ** on*(...); } @@ -468,7 +468,7 @@ JNI reflection metadata must include the bridge class: ```json [ { - "type": "io.github.kdroidfilter.nucleus.notification.linux.NativeLinuxNotificationBridge", + "type": "dev.nucleusframework.nucleus.notification.linux.NativeLinuxNotificationBridge", "methods": [ { "name": "onNotificationClosed", "parameterTypes": ["int", "int"] }, { "name": "onActionInvoked", "parameterTypes": ["int", "java.lang.String"] }, diff --git a/docs/runtime/notification-macos.md b/docs/runtime/notification-macos.md index 358709014..2b3e2316d 100644 --- a/docs/runtime/notification-macos.md +++ b/docs/runtime/notification-macos.md @@ -9,7 +9,7 @@ Complete Kotlin mapping of Apple's [UserNotifications](https://developer.apple.c ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-macos:") + implementation("dev.nucleusframework:nucleus.notification-macos:") } ``` @@ -18,7 +18,7 @@ Depends on `core-runtime` for `NativeLibraryLoader` and `ExecutableRuntime` (pul ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.* +import dev.nucleusframework.nucleus.notification.* // 1. Request authorization NotificationCenter.requestAuthorization( @@ -508,7 +508,7 @@ Ships pre-built macOS dylibs (arm64 + x86_64). No Windows or Linux native — `i ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.macos.NativeMacNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.macos.NativeMacNotificationBridge { native ; static ** on*(...); } @@ -516,4 +516,4 @@ Ships pre-built macOS dylibs (arm64 + x86_64). No Windows or Linux native — `i ## GraalVM -Reachability metadata is included in the JAR at `META-INF/native-image/io.github.kdroidfilter/nucleus.notification-macos/reachability-metadata.json`. No additional configuration needed. +Reachability metadata is included in the JAR at `META-INF/native-image/dev.nucleusframework/nucleus.notification-macos/reachability-metadata.json`. No additional configuration needed. diff --git a/docs/runtime/notification-windows.md b/docs/runtime/notification-windows.md index 39a70a375..de08d1471 100644 --- a/docs/runtime/notification-windows.md +++ b/docs/runtime/notification-windows.md @@ -9,7 +9,7 @@ Complete Kotlin mapping of the [Windows Toast Notifications API](https://learn.m ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.notification-windows:") + implementation("dev.nucleusframework:nucleus.notification-windows:") } ``` @@ -18,7 +18,7 @@ Depends on `core-runtime` for `NativeLibraryLoader`, `ExecutableRuntime`, and `N ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.notification.windows.* +import dev.nucleusframework.nucleus.notification.windows.* // 1. Initialize (auto-detects APPX vs unpackaged) WindowsNotificationCenter.initialize() @@ -362,7 +362,7 @@ Ships pre-built Windows DLLs (x64 + ARM64). No macOS or Linux native — `isAvai ## ProGuard ```proguard --keep class io.github.kdroidfilter.nucleus.notification.windows.NativeWindowsNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.windows.NativeWindowsNotificationBridge { native ; static ** on*(...); } @@ -370,4 +370,4 @@ Ships pre-built Windows DLLs (x64 + ARM64). No macOS or Linux native — `isAvai ## GraalVM -Reachability metadata is included in the JAR at `META-INF/native-image/io.github.kdroidfilter/nucleus.notification-windows/reachability-metadata.json`. No additional configuration needed. +Reachability metadata is included in the JAR at `META-INF/native-image/dev.nucleusframework/nucleus.notification-windows/reachability-metadata.json`. No additional configuration needed. diff --git a/docs/runtime/nucleus-application.md b/docs/runtime/nucleus-application.md index 8f611b79e..899edd7c0 100644 --- a/docs/runtime/nucleus-application.md +++ b/docs/runtime/nucleus-application.md @@ -13,12 +13,12 @@ Add `nucleus-application` plus **exactly one** decorated-window backend: ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.nucleus-application:") + implementation("dev.nucleusframework:nucleus.nucleus-application:") // Pick exactly one backend: - implementation("io.github.kdroidfilter:nucleus.decorated-window-jni:") // any JVM (recommended) - // implementation("io.github.kdroidfilter:nucleus.decorated-window-jbr:") // JBR-only - // implementation("io.github.kdroidfilter:nucleus.decorated-window-tao:") // no-AWT, GraalVM-friendly + implementation("dev.nucleusframework:nucleus.decorated-window-jni:") // any JVM (recommended) + // implementation("dev.nucleusframework:nucleus.decorated-window-jbr:") // JBR-only + // implementation("dev.nucleusframework:nucleus.decorated-window-tao:") // no-AWT, GraalVM-friendly } ``` @@ -216,7 +216,7 @@ Migrating an existing AWT-only app (jbr or jni) is a two-line change for the ent ```diff - import androidx.compose.ui.window.application -+ import io.github.kdroidfilter.nucleus.application.nucleusApplication ++ import dev.nucleusframework.nucleus.application.nucleusApplication ``` ```diff diff --git a/docs/runtime/scheduler.md b/docs/runtime/scheduler.md index af540a25c..a8afe6a85 100644 --- a/docs/runtime/scheduler.md +++ b/docs/runtime/scheduler.md @@ -21,7 +21,7 @@ The `scheduler` module registers background tasks with the OS so they run even w ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.scheduler:") + implementation("dev.nucleusframework:nucleus.scheduler:") } ``` @@ -608,7 +608,7 @@ Each task gets a single `.properties` file. The serialized input payload #### macOS (launchd) -Generates plist files in `~/Library/LaunchAgents/` with label `io.github.kdroidfilter.nucleus..`. Managed via a JNI bridge (`MacOSLaunchdSchedulerJni`) that uses Foundation and ServiceManagement APIs for plist writing, job status queries, and next-fire-time computation. Falls back to `launchctl` shell commands when the native library is unavailable. +Generates plist files in `~/Library/LaunchAgents/` with label `dev.nucleusframework.nucleus..`. Managed via a JNI bridge (`MacOSLaunchdSchedulerJni`) that uses Foundation and ServiceManagement APIs for plist writing, job status queries, and next-fire-time computation. Falls back to `launchctl` shell commands when the native library is unavailable. #### Linux (systemd) @@ -626,7 +626,7 @@ Users uninstall apps without thinking about background scheduled tasks. Without - **macOS** — **no automatic cleanup.** Unlike the Linux/Windows wrapper trick, the agent's `ProgramArguments` points directly at the application binary so the entry stays visible under its real name in System Settings → "Allow in the Background". The cost: when the user trashes the .app bundle, the orphaned `.plist` in `~/Library/LaunchAgents/` is **never** reclaimed by macOS, and launchd keeps attempting to spawn the missing binary forever — throttled by `ThrottleInterval` (10 s by default), logging `cannot spawn` to `system.log` on every attempt. SMAppService (macOS 13+) does not eliminate this either, and Apple ships no guidance for "graceful uninstall of a LaunchAgent" — the macOS ecosystem treats orphaned LaunchAgents as a known limitation that an explicit cleanup step has to handle. The mitigation Nucleus offers is **in-app**: call `DesktopTaskScheduler.cancelAll()` from your app's settings ("Disable background tasks") or from any in-app sign-out / reset flow — this unloads the agents and removes the plists cleanly while the binary is still around. If the user does a plain drag-to-trash without that step, the orphan leaks; the leftover plist then has to be removed manually: ```bash - rm ~/Library/LaunchAgents/io.github.kdroidfilter.nucleus...plist + rm ~/Library/LaunchAgents/dev.nucleusframework.nucleus...plist ``` The failure mode in the meantime is the well-known throttled-log-spam — not a crash and not a security or correctness issue. @@ -639,7 +639,7 @@ The `scheduler-testing` module provides two levels of test support, inspired by ```kotlin dependencies { - testImplementation("io.github.kdroidfilter:nucleus.scheduler-testing:") + testImplementation("dev.nucleusframework:nucleus.scheduler-testing:") } ``` diff --git a/docs/runtime/service-management-macos.md b/docs/runtime/service-management-macos.md index 0c97e55bc..b457bdb8e 100644 --- a/docs/runtime/service-management-macos.md +++ b/docs/runtime/service-management-macos.md @@ -15,7 +15,7 @@ The workflow is: **declare agents in Gradle** → **plugin embeds plists in the ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.service-management-macos:") + implementation("dev.nucleusframework:nucleus.service-management-macos:") } ``` @@ -293,5 +293,5 @@ MyApp.app/ When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.servicemanagement.** { *; } +-keep class dev.nucleusframework.nucleus.servicemanagement.** { *; } ``` diff --git a/docs/runtime/single-instance.md b/docs/runtime/single-instance.md index 539c7188f..b5fc9f638 100644 --- a/docs/runtime/single-instance.md +++ b/docs/runtime/single-instance.md @@ -6,12 +6,12 @@ Enforce that only one instance of your application runs at a time. ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.core-runtime:") + implementation("dev.nucleusframework:nucleus.core-runtime:") } ``` ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.SingleInstanceManager +import dev.nucleusframework.nucleus.core.runtime.SingleInstanceManager ``` `SingleInstanceManager` is a Kotlin `object` (singleton). It uses file-based locking to ensure single-instance behavior across platforms. diff --git a/docs/runtime/system-color.md b/docs/runtime/system-color.md index 13cb13f38..a16a009c0 100644 --- a/docs/runtime/system-color.md +++ b/docs/runtime/system-color.md @@ -6,7 +6,7 @@ The `system-color` module provides **reactive** detection of the OS accent color ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.system-color:") } ``` @@ -67,7 +67,7 @@ Android's [Material You](https://m3.material.io/styles/color/dynamic/choosing-a- ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-color:") + implementation("dev.nucleusframework:nucleus.system-color:") implementation("com.materialkolor:material-kolor:4.1.1") } ``` @@ -143,7 +143,7 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle ```proguard # macOS --keep class io.github.kdroidfilter.nucleus.systemcolor.mac.NativeMacSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.mac.NativeMacSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onAccentColorCleared(); @@ -151,20 +151,20 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle } # Windows --keep class io.github.kdroidfilter.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { native ; static void onAccentColorChanged(int, int, int); static void onHighContrastChanged(boolean); } # Linux --keep class io.github.kdroidfilter.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onHighContrastChanged(boolean); } --keep class io.github.kdroidfilter.nucleus.systemcolor.** { *; } +-keep class dev.nucleusframework.nucleus.systemcolor.** { *; } ``` ## Logging @@ -172,7 +172,7 @@ When ProGuard is enabled, the native bridge classes must be preserved. The Nucle Debug messages are logged under the tags `MacSystemColorDetector`, `WindowsSystemColor`, and `LinuxSystemColorDetector`. Logging is off by default. To enable it: ```kotlin -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging allowNucleusRuntimeLogging = true ``` diff --git a/docs/runtime/system-info.md b/docs/runtime/system-info.md index f3a2a056c..5ab668b67 100644 --- a/docs/runtime/system-info.md +++ b/docs/runtime/system-info.md @@ -6,14 +6,14 @@ The `system-info` module provides cross-platform system information gathering fo ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.system-info:") + implementation("dev.nucleusframework:nucleus.system-info:") } ``` ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.systeminfo.SystemInfo +import dev.nucleusframework.nucleus.systeminfo.SystemInfo fun main() { val os = SystemInfo.osInfo() @@ -414,5 +414,5 @@ On Linux, the library links only against `libdl` and `libm`. NVML (`libnvidia-ml When ProGuard is enabled, preserve the native bridge classes: ```proguard --keep class io.github.kdroidfilter.nucleus.systeminfo.** { *; } +-keep class dev.nucleusframework.nucleus.systeminfo.** { *; } ``` diff --git a/docs/runtime/system-tray/index.md b/docs/runtime/system-tray/index.md index aa8eefb8e..08a03b9ab 100644 --- a/docs/runtime/system-tray/index.md +++ b/docs/runtime/system-tray/index.md @@ -1,7 +1,7 @@ # System Tray !!! note "Separate repository" - System Tray is maintained in its own repository with its own release cycle: [**kdroidFilter/ComposeNativeTray**](https://github.com/kdroidFilter/ComposeNativeTray). The artifact is `io.github.kdroidfilter:composenativetray`. + System Tray is maintained in its own repository with its own release cycle: [**nucleusframework/ComposeNativeTray**](https://github.com/nucleusframework/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. **ComposeNativeTray** is not a library. It is a **complete framework for building system tray applications** with Compose Desktop — the most expressive and the most powerful way to own the system tray on macOS, Windows, and Linux. @@ -62,7 +62,7 @@ Change `isDarkMode` and the icon switches, the checkmark toggles, the label upda ```kotlin dependencies { - implementation("io.github.kdroidfilter:composenativetray:") + implementation("dev.nucleusframework:composenativetray:") } ``` diff --git a/docs/runtime/taskbar-progress.md b/docs/runtime/taskbar-progress.md index 4fbc96974..e1776ba4e 100644 --- a/docs/runtime/taskbar-progress.md +++ b/docs/runtime/taskbar-progress.md @@ -6,7 +6,7 @@ Native taskbar/dock progress bar and attention requests on Windows, macOS, and L ```kotlin dependencies { - implementation("io.github.kdroidfilter:nucleus.taskbar-progress:") + implementation("dev.nucleusframework:nucleus.taskbar-progress:") } ``` @@ -15,7 +15,7 @@ dependencies { ## Quick Start ```kotlin -import io.github.kdroidfilter.nucleus.taskbarprogress.TaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.TaskbarProgress import java.awt.Window // Show a progress bar at 75% diff --git a/docs/targets/linux.md b/docs/targets/linux.md index 39c3f2f76..513788df9 100644 --- a/docs/targets/linux.md +++ b/docs/targets/linux.md @@ -229,7 +229,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` diff --git a/energy-manager/build.gradle.kts b/energy-manager/build.gradle.kts index e42c84d16..6a8df54d4 100644 --- a/energy-manager/build.gradle.kts +++ b/energy-manager/build.gradle.kts @@ -97,12 +97,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.energy-manager", publishVersion) + coordinates("dev.nucleusframework", "nucleus.energy-manager", publishVersion) pom { name.set("Nucleus Energy Manager") description.set("Process-level energy efficiency mode (EcoQoS/PRIO_DARWIN_BG) for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -113,16 +113,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManager.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManager.kt similarity index 94% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManager.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManager.kt index f81e49cb1..8cb751a9a 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManager.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManager.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.energymanager +package dev.nucleusframework.nucleus.energymanager -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.energymanager.linux.LinuxEnergyManager -import io.github.kdroidfilter.nucleus.energymanager.macos.MacOsEnergyManager -import io.github.kdroidfilter.nucleus.energymanager.windows.WindowsEnergyManager +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.energymanager.linux.LinuxEnergyManager +import dev.nucleusframework.nucleus.energymanager.macos.MacOsEnergyManager +import dev.nucleusframework.nucleus.energymanager.windows.WindowsEnergyManager import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.withContext import java.util.concurrent.Executors diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/PlatformEnergyManager.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/PlatformEnergyManager.kt similarity index 93% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/PlatformEnergyManager.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/PlatformEnergyManager.kt index 5a96e9e14..6fec4ec43 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/PlatformEnergyManager.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/PlatformEnergyManager.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.energymanager +package dev.nucleusframework.nucleus.energymanager internal interface PlatformEnergyManager { fun isAvailable(): Boolean diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/LinuxEnergyManager.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/LinuxEnergyManager.kt similarity index 91% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/LinuxEnergyManager.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/LinuxEnergyManager.kt index 00e032ca7..1b346a9bc 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/LinuxEnergyManager.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/LinuxEnergyManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.energymanager.linux +package dev.nucleusframework.nucleus.energymanager.linux -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager -import io.github.kdroidfilter.nucleus.energymanager.PlatformEnergyManager +import dev.nucleusframework.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.energymanager.PlatformEnergyManager internal object LinuxEnergyManager : PlatformEnergyManager { private fun callNative(block: () -> Int): EnergyManager.Result { diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt similarity index 87% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt index 575931fb3..a58ac702e 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/linux/NativeLinuxEnergyBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.energymanager.linux +package dev.nucleusframework.nucleus.energymanager.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_energy_manager" diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/MacOsEnergyManager.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/MacOsEnergyManager.kt similarity index 91% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/MacOsEnergyManager.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/MacOsEnergyManager.kt index 39aea8336..27cf36497 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/MacOsEnergyManager.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/MacOsEnergyManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.energymanager.macos +package dev.nucleusframework.nucleus.energymanager.macos -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager -import io.github.kdroidfilter.nucleus.energymanager.PlatformEnergyManager +import dev.nucleusframework.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.energymanager.PlatformEnergyManager internal object MacOsEnergyManager : PlatformEnergyManager { private fun callNative(block: () -> Int): EnergyManager.Result { diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt similarity index 87% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt index 38007325f..981599ba4 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/macos/NativeMacOsEnergyBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.energymanager.macos +package dev.nucleusframework.nucleus.energymanager.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_energy_manager" diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt similarity index 87% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt index 0fb1b0dde..d565ccc9a 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/NativeWindowsEnergyBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.energymanager.windows +package dev.nucleusframework.nucleus.energymanager.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_energy_manager" diff --git a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/WindowsEnergyManager.kt b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/WindowsEnergyManager.kt similarity index 91% rename from energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/WindowsEnergyManager.kt rename to energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/WindowsEnergyManager.kt index c08d33782..2f97a83d3 100644 --- a/energy-manager/src/main/kotlin/io/github/kdroidfilter/nucleus/energymanager/windows/WindowsEnergyManager.kt +++ b/energy-manager/src/main/kotlin/dev/nucleusframework/nucleus/energymanager/windows/WindowsEnergyManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.energymanager.windows +package dev.nucleusframework.nucleus.energymanager.windows -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager -import io.github.kdroidfilter.nucleus.energymanager.PlatformEnergyManager +import dev.nucleusframework.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.energymanager.PlatformEnergyManager internal object WindowsEnergyManager : PlatformEnergyManager { private fun callNative(block: () -> Int): EnergyManager.Result { diff --git a/energy-manager/src/main/native/linux/nucleus_energy_manager.c b/energy-manager/src/main/native/linux/nucleus_energy_manager.c index a69dc03d7..88eb4d932 100644 --- a/energy-manager/src/main/native/linux/nucleus_energy_manager.c +++ b/energy-manager/src/main/native/linux/nucleus_energy_manager.c @@ -38,7 +38,7 @@ /* ---- nativeIsSupported ------------------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeIsSupported( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeIsSupported( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -52,7 +52,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeEnableEfficiencyMode ---------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -83,7 +83,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeEnableThreadEfficiencyMode ---------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -114,7 +114,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeDisableThreadEfficiencyMode --------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -146,7 +146,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeEnableLightEfficiencyMode ----------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeEnableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -162,7 +162,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeDisableLightEfficiencyMode ---------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -180,7 +180,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeDisableEfficiencyMode --------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeDisableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -615,7 +615,7 @@ static int x11_uninhibit(void) { /* ---- nativeKeepScreenAwake ---------------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeKeepScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeKeepScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -647,7 +647,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeReleaseScreenAwake ------------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeReleaseScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeReleaseScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -666,7 +666,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_ /* ---- nativeIsScreenAwakeActive ------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeIsScreenAwakeActive( +Java_dev_nucleusframework_nucleus_energymanager_linux_NativeLinuxEnergyBridge_nativeIsScreenAwakeActive( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/energy-manager/src/main/native/macos/nucleus_energy_manager.c b/energy-manager/src/main/native/macos/nucleus_energy_manager.c index 606ec3434..3644a3b7f 100644 --- a/energy-manager/src/main/native/macos/nucleus_energy_manager.c +++ b/energy-manager/src/main/native/macos/nucleus_energy_manager.c @@ -42,7 +42,7 @@ /* ---- nativeIsSupported ------------------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeIsSupported( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeIsSupported( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -56,7 +56,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeEnableEfficiencyMode ---------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -91,7 +91,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeEnableLightEfficiencyMode ----------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -115,7 +115,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeDisableLightEfficiencyMode --------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -135,7 +135,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeEnableThreadEfficiencyMode ---------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeEnableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -156,7 +156,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeDisableThreadEfficiencyMode --------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -169,7 +169,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeDisableEfficiencyMode --------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeDisableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -206,7 +206,7 @@ static IOPMAssertionID g_assertionId = kIOPMNullAssertionID; /* ---- nativeKeepScreenAwake --------------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeKeepScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeKeepScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -239,7 +239,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeReleaseScreenAwake ------------------------------------ */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeReleaseScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeReleaseScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -257,7 +257,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_ /* ---- nativeIsScreenAwakeActive ----------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeIsScreenAwakeActive( +Java_dev_nucleusframework_nucleus_energymanager_macos_NativeMacOsEnergyBridge_nativeIsScreenAwakeActive( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/energy-manager/src/main/native/windows/nucleus_energy_manager.c b/energy-manager/src/main/native/windows/nucleus_energy_manager.c index 3c48d49c9..332e4c50c 100644 --- a/energy-manager/src/main/native/windows/nucleus_energy_manager.c +++ b/energy-manager/src/main/native/windows/nucleus_energy_manager.c @@ -109,7 +109,7 @@ static volatile BOOL g_screenAwakeActive = FALSE; /* ---- nativeIsSupported ------------------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeIsSupported( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeIsSupported( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -119,7 +119,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeEnableEfficiencyMode ---------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -152,7 +152,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeDisableEfficiencyMode --------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -184,7 +184,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeEnableLightEfficiencyMode ----------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -212,7 +212,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeDisableLightEfficiencyMode ---------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableLightEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableLightEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -239,7 +239,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeEnableThreadEfficiencyMode --------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeEnableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -270,7 +270,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeDisableThreadEfficiencyMode -------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableThreadEfficiencyMode( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeDisableThreadEfficiencyMode( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -309,7 +309,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri #endif JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeKeepScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeKeepScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -326,7 +326,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeReleaseScreenAwake ----------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeReleaseScreenAwake( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeReleaseScreenAwake( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -342,7 +342,7 @@ Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBri /* ---- nativeIsScreenAwakeActive ---------------------------------- */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeIsScreenAwakeActive( +Java_dev_nucleusframework_nucleus_energymanager_windows_NativeWindowsEnergyBridge_nativeIsScreenAwakeActive( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/energy-manager/src/test/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManagerTest.kt b/energy-manager/src/test/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManagerTest.kt similarity index 99% rename from energy-manager/src/test/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManagerTest.kt rename to energy-manager/src/test/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManagerTest.kt index 97c6d1823..f9a2f7988 100644 --- a/energy-manager/src/test/kotlin/io/github/kdroidfilter/nucleus/energymanager/EnergyManagerTest.kt +++ b/energy-manager/src/test/kotlin/dev/nucleusframework/nucleus/energymanager/EnergyManagerTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.energymanager +package dev.nucleusframework.nucleus.energymanager import kotlinx.coroutines.runBlocking import org.junit.Assume.assumeTrue diff --git a/example/build.gradle.kts b/example/build.gradle.kts index 5c2d05202..9fa2ac6b9 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -1,19 +1,19 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.AppImageCategory -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.ReleaseChannel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.ReleaseType -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SigningAlgorithm -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapCompression -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapConfinement -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapGrade -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapPlug -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.AppImageCategory +import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel +import dev.nucleusframework.nucleus.desktop.application.dsl.ReleaseChannel +import dev.nucleusframework.nucleus.desktop.application.dsl.ReleaseType +import dev.nucleusframework.nucleus.desktop.application.dsl.SigningAlgorithm +import dev.nucleusframework.nucleus.desktop.application.dsl.SnapCompression +import dev.nucleusframework.nucleus.desktop.application.dsl.SnapConfinement +import dev.nucleusframework.nucleus.desktop.application.dsl.SnapGrade +import dev.nucleusframework.nucleus.desktop.application.dsl.SnapPlug +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat plugins { alias(libs.plugins.kotlin) alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -157,7 +157,7 @@ nucleus.application { publish { github { enabled = true - owner = "kdroidfilter" + owner = "nucleusframework" repo = "Nucleus" channel = ReleaseChannel.Latest releaseType = ReleaseType.Release @@ -179,7 +179,7 @@ nucleus.application { // ========== LINUX ========== linux { // --- DEB package --- - debMaintainer = "KDroidFilter " + debMaintainer = "NucleusFramework " debDepends = listOf("libfuse2", "libgtk-3-0") debPackageVersion = releaseVersion @@ -227,7 +227,7 @@ nucleus.application { // --- Code signing (NEW) --- signing { enabled = true - certificateFile.set(file("packaging/KDroidFilter.pfx")) + certificateFile.set(file("packaging/NucleusFramework.pfx")) certificatePassword = "ChangeMe-Temp123!" algorithm = SigningAlgorithm.Sha256 // Timestamp servers: "http://timestamp.digicert.com", "http://timestamp.sectigo.com", "http://timestamp.globalsign.com" @@ -252,7 +252,7 @@ nucleus.application { // --- AppX/Windows Store (NEW) --- appx { applicationId = "NucleusDemo" - publisherDisplayName = "KDroidFilter" + publisherDisplayName = "NucleusFramework" displayName = "Nucleus Demo" // Auto-inject in Package.appxmanifest. // TaskId is auto-resolved to "${applicationId}StartupId" and exposed via NucleusApp.startupTaskId, @@ -260,7 +260,7 @@ nucleus.application { addAutoLaunchExtension = true // Publisher: "CN=..." publisher = "CN=D541E802-6D30-446A-864E-2E8ABD2DAA5E" - identityName = "KDroidFilter.NucleusDemo" + identityName = "NucleusFramework.NucleusDemo" // Languages: "en-US", "fr-FR", "de-DE", etc. languages = listOf("en-US", "fr-FR") backgroundColor = "#001F3F" @@ -276,7 +276,7 @@ nucleus.application { // ========== MACOS ========== macOS { - bundleID = "io.github.kdroidfilter.nucleus.demo" + bundleID = "dev.nucleusframework.nucleus.demo" appCategory = "public.app-category.utilities" dockName = "NucleusDemo" diff --git a/example/src/main/kotlin/com/example/demo/AutoLaunchScreen.kt b/example/src/main/kotlin/com/example/demo/AutoLaunchScreen.kt index a0ce04bca..942516190 100644 --- a/example/src/main/kotlin/com/example/demo/AutoLaunchScreen.kt +++ b/example/src/main/kotlin/com/example/demo/AutoLaunchScreen.kt @@ -30,11 +30,11 @@ import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunch -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchResult -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunchState -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.core.runtime.Platform.MacOS +import dev.nucleusframework.nucleus.autolaunch.AutoLaunch +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchResult +import dev.nucleusframework.nucleus.autolaunch.AutoLaunchState +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform.MacOS @Composable fun AutoLaunchScreen() { diff --git a/example/src/main/kotlin/com/example/demo/CommonNotificationsScreen.kt b/example/src/main/kotlin/com/example/demo/CommonNotificationsScreen.kt index 918117dd0..9b6384da6 100644 --- a/example/src/main/kotlin/com/example/demo/CommonNotificationsScreen.kt +++ b/example/src/main/kotlin/com/example/demo/CommonNotificationsScreen.kt @@ -31,10 +31,10 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.notification.common.NotificationHandle -import io.github.kdroidfilter.nucleus.notification.common.NotificationManager -import io.github.kdroidfilter.nucleus.notification.common.NotificationResult -import io.github.kdroidfilter.nucleus.notification.common.notification +import dev.nucleusframework.nucleus.notification.common.NotificationHandle +import dev.nucleusframework.nucleus.notification.common.NotificationManager +import dev.nucleusframework.nucleus.notification.common.NotificationResult +import dev.nucleusframework.nucleus.notification.common.notification private const val EVENT_LOG_MAX = 20 diff --git a/example/src/main/kotlin/com/example/demo/GlobalHotKeyScreen.kt b/example/src/main/kotlin/com/example/demo/GlobalHotKeyScreen.kt index 03e20bcaa..92c1db71a 100644 --- a/example/src/main/kotlin/com/example/demo/GlobalHotKeyScreen.kt +++ b/example/src/main/kotlin/com/example/demo/GlobalHotKeyScreen.kt @@ -30,11 +30,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.globalhotkey.GlobalHotKeyManager -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyModifier -import io.github.kdroidfilter.nucleus.globalhotkey.MediaKey -import io.github.kdroidfilter.nucleus.globalhotkey.plus +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.globalhotkey.GlobalHotKeyManager +import dev.nucleusframework.nucleus.globalhotkey.HotKeyModifier +import dev.nucleusframework.nucleus.globalhotkey.MediaKey +import dev.nucleusframework.nucleus.globalhotkey.plus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext diff --git a/example/src/main/kotlin/com/example/demo/LauncherScreen.kt b/example/src/main/kotlin/com/example/demo/LauncherScreen.kt index 93f95a1c8..79f4d8b82 100644 --- a/example/src/main/kotlin/com/example/demo/LauncherScreen.kt +++ b/example/src/main/kotlin/com/example/demo/LauncherScreen.kt @@ -37,11 +37,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.launcher.linux.DbusmenuItem -import io.github.kdroidfilter.nucleus.launcher.linux.LauncherProperties -import io.github.kdroidfilter.nucleus.launcher.linux.LinuxLauncherEntry -import io.github.kdroidfilter.nucleus.launcher.linux.LinuxQuicklist +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.launcher.linux.DbusmenuItem +import dev.nucleusframework.nucleus.launcher.linux.LauncherProperties +import dev.nucleusframework.nucleus.launcher.linux.LinuxLauncherEntry +import dev.nucleusframework.nucleus.launcher.linux.LinuxQuicklist private const val EVENT_LOG_MAX = 20 diff --git a/example/src/main/kotlin/com/example/demo/LinuxNotificationsScreen.kt b/example/src/main/kotlin/com/example/demo/LinuxNotificationsScreen.kt index 107c3ebe8..427e25e0f 100644 --- a/example/src/main/kotlin/com/example/demo/LinuxNotificationsScreen.kt +++ b/example/src/main/kotlin/com/example/demo/LinuxNotificationsScreen.kt @@ -40,16 +40,16 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.notification.linux.CloseReason -import io.github.kdroidfilter.nucleus.notification.linux.LinuxNotificationCenter -import io.github.kdroidfilter.nucleus.notification.linux.LinuxNotificationListener -import io.github.kdroidfilter.nucleus.notification.linux.Notification -import io.github.kdroidfilter.nucleus.notification.linux.NotificationAction -import io.github.kdroidfilter.nucleus.notification.linux.NotificationHints -import io.github.kdroidfilter.nucleus.notification.linux.NotificationSound -import io.github.kdroidfilter.nucleus.notification.linux.ServerInformation -import io.github.kdroidfilter.nucleus.notification.linux.Urgency +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.notification.linux.CloseReason +import dev.nucleusframework.nucleus.notification.linux.LinuxNotificationCenter +import dev.nucleusframework.nucleus.notification.linux.LinuxNotificationListener +import dev.nucleusframework.nucleus.notification.linux.Notification +import dev.nucleusframework.nucleus.notification.linux.NotificationAction +import dev.nucleusframework.nucleus.notification.linux.NotificationHints +import dev.nucleusframework.nucleus.notification.linux.NotificationSound +import dev.nucleusframework.nucleus.notification.linux.ServerInformation +import dev.nucleusframework.nucleus.notification.linux.Urgency import java.awt.Color import java.awt.image.BufferedImage @@ -605,7 +605,7 @@ private fun SoundDropdown( /** * Creates a small sample RGBA image for the image-data hint. */ -private fun createSampleImageData(): io.github.kdroidfilter.nucleus.notification.linux.ImageData { +private fun createSampleImageData(): dev.nucleusframework.nucleus.notification.linux.ImageData { val size = SAMPLE_IMAGE_SIZE val channels = 4 val rowstride = size * channels @@ -634,7 +634,7 @@ private fun createSampleImageData(): io.github.kdroidfilter.nucleus.notification } } - return io.github.kdroidfilter.nucleus.notification.linux.ImageData( + return dev.nucleusframework.nucleus.notification.linux.ImageData( width = size, height = size, rowstride = rowstride, diff --git a/example/src/main/kotlin/com/example/demo/MacLaunchDiagnostic.kt b/example/src/main/kotlin/com/example/demo/MacLaunchDiagnostic.kt index 9598eb283..546bff8f9 100644 --- a/example/src/main/kotlin/com/example/demo/MacLaunchDiagnostic.kt +++ b/example/src/main/kotlin/com/example/demo/MacLaunchDiagnostic.kt @@ -1,6 +1,6 @@ package com.example.demo -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform import java.io.File import java.text.SimpleDateFormat import java.util.Date diff --git a/example/src/main/kotlin/com/example/demo/MacOsLauncherScreen.kt b/example/src/main/kotlin/com/example/demo/MacOsLauncherScreen.kt index 6a2254dd1..122b99d5a 100644 --- a/example/src/main/kotlin/com/example/demo/MacOsLauncherScreen.kt +++ b/example/src/main/kotlin/com/example/demo/MacOsLauncherScreen.kt @@ -29,8 +29,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.launcher.macos.DockMenuItem -import io.github.kdroidfilter.nucleus.launcher.macos.MacOsDockMenu +import dev.nucleusframework.nucleus.launcher.macos.DockMenuItem +import dev.nucleusframework.nucleus.launcher.macos.MacOsDockMenu private const val EVENT_LOG_MAX = 20 diff --git a/example/src/main/kotlin/com/example/demo/MacOsMenuScreen.kt b/example/src/main/kotlin/com/example/demo/MacOsMenuScreen.kt index 1ada036bf..7fccfd68f 100644 --- a/example/src/main/kotlin/com/example/demo/MacOsMenuScreen.kt +++ b/example/src/main/kotlin/com/example/demo/MacOsMenuScreen.kt @@ -36,19 +36,19 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.menu.macos.NativeKeyShortcut -import io.github.kdroidfilter.nucleus.menu.macos.NativeMenuBar -import io.github.kdroidfilter.nucleus.menu.macos.NsMenuItemBadge -import io.github.kdroidfilter.nucleus.menu.macos.NsMenuItemImage -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolArrows -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolDevices -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolGeneral -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolMedia -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolObjectsAndTools -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolPower -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolShapes -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolStatus -import io.github.kdroidfilter.nucleus.sfsymbols.SFSymbolTextFormatting +import dev.nucleusframework.nucleus.menu.macos.NativeKeyShortcut +import dev.nucleusframework.nucleus.menu.macos.NativeMenuBar +import dev.nucleusframework.nucleus.menu.macos.NsMenuItemBadge +import dev.nucleusframework.nucleus.menu.macos.NsMenuItemImage +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolArrows +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolDevices +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolGeneral +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolMedia +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolObjectsAndTools +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolPower +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolShapes +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolStatus +import dev.nucleusframework.nucleus.sfsymbols.SFSymbolTextFormatting private const val EVENT_LOG_MAX = 40 diff --git a/example/src/main/kotlin/com/example/demo/Main.kt b/example/src/main/kotlin/com/example/demo/Main.kt index 7050ca174..058cf088a 100644 --- a/example/src/main/kotlin/com/example/demo/Main.kt +++ b/example/src/main/kotlin/com/example/demo/Main.kt @@ -62,30 +62,30 @@ import com.example.demo.icons.TablerTextDirectionRtl import com.example.demo.icons.VscodeCodiconsColorMode import com.materialkolor.DynamicMaterialTheme import com.materialkolor.PaletteStyle -import io.github.kdroidfilter.nucleus.aot.runtime.AotRuntime -import io.github.kdroidfilter.nucleus.application.nucleusApplication -import io.github.kdroidfilter.nucleus.autolaunch.AutoLaunch -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.core.runtime.SingleInstanceManager -import io.github.kdroidfilter.nucleus.darkmodedetector.isSystemInDarkMode -import io.github.kdroidfilter.nucleus.energymanager.EnergyManager -import io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsJumpListManager -import io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient -import io.github.kdroidfilter.nucleus.systemcolor.systemAccentColor -import io.github.kdroidfilter.nucleus.updater.NucleusUpdater -import io.github.kdroidfilter.nucleus.updater.UpdateEvent -import io.github.kdroidfilter.nucleus.updater.UpdateLevel -import io.github.kdroidfilter.nucleus.updater.UpdateResult -import io.github.kdroidfilter.nucleus.updater.provider.GitHubProvider -import io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.material.MaterialDecoratedDialog -import io.github.kdroidfilter.nucleus.window.material.MaterialDecoratedWindow -import io.github.kdroidfilter.nucleus.window.material.MaterialDialogTitleBar -import io.github.kdroidfilter.nucleus.window.material.MaterialTitleBar -import io.github.kdroidfilter.nucleus.window.newFullscreenControls +import dev.nucleusframework.nucleus.aot.runtime.AotRuntime +import dev.nucleusframework.nucleus.application.nucleusApplication +import dev.nucleusframework.nucleus.autolaunch.AutoLaunch +import dev.nucleusframework.nucleus.core.runtime.DeepLinkHandler +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.SingleInstanceManager +import dev.nucleusframework.nucleus.darkmodedetector.isSystemInDarkMode +import dev.nucleusframework.nucleus.energymanager.EnergyManager +import dev.nucleusframework.nucleus.graalvm.GraalVmInitializer +import dev.nucleusframework.nucleus.launcher.windows.WindowsJumpListManager +import dev.nucleusframework.nucleus.nativehttp.NativeHttpClient +import dev.nucleusframework.nucleus.systemcolor.systemAccentColor +import dev.nucleusframework.nucleus.updater.NucleusUpdater +import dev.nucleusframework.nucleus.updater.UpdateEvent +import dev.nucleusframework.nucleus.updater.UpdateLevel +import dev.nucleusframework.nucleus.updater.UpdateResult +import dev.nucleusframework.nucleus.updater.provider.GitHubProvider +import dev.nucleusframework.nucleus.window.macOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.material.MaterialDecoratedDialog +import dev.nucleusframework.nucleus.window.material.MaterialDecoratedWindow +import dev.nucleusframework.nucleus.window.material.MaterialDialogTitleBar +import dev.nucleusframework.nucleus.window.material.MaterialTitleBar +import dev.nucleusframework.nucleus.window.newFullscreenControls import java.io.File import java.net.URI import kotlin.system.exitProcess @@ -395,7 +395,7 @@ fun NucleusContent() { val updater = remember { NucleusUpdater { - provider = GitHubProvider(owner = "kdroidfilter", repo = "Nucleus") + provider = GitHubProvider(owner = "nucleusframework", repo = "Nucleus") httpClient = NativeHttpClient.create() } } @@ -567,7 +567,7 @@ private enum class ThemeMode { @OptIn(ExperimentalMaterial3Api::class) @Suppress("FunctionNaming", "DEPRECATION") @Composable -private fun io.github.kdroidfilter.nucleus.window.TitleBarScope.TitleBarIconButton( +private fun dev.nucleusframework.nucleus.window.TitleBarScope.TitleBarIconButton( imageVector: ImageVector, contentDescription: String, modifier: Modifier = Modifier, diff --git a/example/src/main/kotlin/com/example/demo/MediaControlScreen.kt b/example/src/main/kotlin/com/example/demo/MediaControlScreen.kt index 1d09a67c8..fa661730e 100644 --- a/example/src/main/kotlin/com/example/demo/MediaControlScreen.kt +++ b/example/src/main/kotlin/com/example/demo/MediaControlScreen.kt @@ -31,12 +31,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.media.control.MediaControlEvent -import io.github.kdroidfilter.nucleus.media.control.MediaControlService -import io.github.kdroidfilter.nucleus.media.control.MediaMetadata -import io.github.kdroidfilter.nucleus.media.control.MediaPlaybackState -import io.github.kdroidfilter.nucleus.media.control.MediaPlaybackStatus +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.media.control.MediaControlEvent +import dev.nucleusframework.nucleus.media.control.MediaControlService +import dev.nucleusframework.nucleus.media.control.MediaMetadata +import dev.nucleusframework.nucleus.media.control.MediaPlaybackState +import dev.nucleusframework.nucleus.media.control.MediaPlaybackStatus private const val EVENT_LOG_MAX = 20 diff --git a/example/src/main/kotlin/com/example/demo/NotificationsScreen.kt b/example/src/main/kotlin/com/example/demo/NotificationsScreen.kt index 51d85cf87..550475f02 100644 --- a/example/src/main/kotlin/com/example/demo/NotificationsScreen.kt +++ b/example/src/main/kotlin/com/example/demo/NotificationsScreen.kt @@ -35,26 +35,26 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.notification.ActionOption -import io.github.kdroidfilter.nucleus.notification.AuthorizationOption -import io.github.kdroidfilter.nucleus.notification.CategoryOption -import io.github.kdroidfilter.nucleus.notification.DateComponents -import io.github.kdroidfilter.nucleus.notification.DeliveredNotification -import io.github.kdroidfilter.nucleus.notification.InterruptionLevel -import io.github.kdroidfilter.nucleus.notification.NotificationAction -import io.github.kdroidfilter.nucleus.notification.NotificationAttachment -import io.github.kdroidfilter.nucleus.notification.NotificationCategory -import io.github.kdroidfilter.nucleus.notification.NotificationCenter -import io.github.kdroidfilter.nucleus.notification.NotificationCenterDelegate -import io.github.kdroidfilter.nucleus.notification.NotificationContent -import io.github.kdroidfilter.nucleus.notification.NotificationRequest -import io.github.kdroidfilter.nucleus.notification.NotificationResponse -import io.github.kdroidfilter.nucleus.notification.NotificationSettings -import io.github.kdroidfilter.nucleus.notification.NotificationSound -import io.github.kdroidfilter.nucleus.notification.NotificationTrigger -import io.github.kdroidfilter.nucleus.notification.PendingNotificationInfo -import io.github.kdroidfilter.nucleus.notification.PresentationOption -import io.github.kdroidfilter.nucleus.notification.TextInputNotificationAction +import dev.nucleusframework.nucleus.notification.ActionOption +import dev.nucleusframework.nucleus.notification.AuthorizationOption +import dev.nucleusframework.nucleus.notification.CategoryOption +import dev.nucleusframework.nucleus.notification.DateComponents +import dev.nucleusframework.nucleus.notification.DeliveredNotification +import dev.nucleusframework.nucleus.notification.InterruptionLevel +import dev.nucleusframework.nucleus.notification.NotificationAction +import dev.nucleusframework.nucleus.notification.NotificationAttachment +import dev.nucleusframework.nucleus.notification.NotificationCategory +import dev.nucleusframework.nucleus.notification.NotificationCenter +import dev.nucleusframework.nucleus.notification.NotificationCenterDelegate +import dev.nucleusframework.nucleus.notification.NotificationContent +import dev.nucleusframework.nucleus.notification.NotificationRequest +import dev.nucleusframework.nucleus.notification.NotificationResponse +import dev.nucleusframework.nucleus.notification.NotificationSettings +import dev.nucleusframework.nucleus.notification.NotificationSound +import dev.nucleusframework.nucleus.notification.NotificationTrigger +import dev.nucleusframework.nucleus.notification.PendingNotificationInfo +import dev.nucleusframework.nucleus.notification.PresentationOption +import dev.nucleusframework.nucleus.notification.TextInputNotificationAction import java.awt.Color import java.awt.image.BufferedImage import java.io.File diff --git a/example/src/main/kotlin/com/example/demo/TaskbarProgressScreen.kt b/example/src/main/kotlin/com/example/demo/TaskbarProgressScreen.kt index b5e1aaeb8..7d561fe42 100644 --- a/example/src/main/kotlin/com/example/demo/TaskbarProgressScreen.kt +++ b/example/src/main/kotlin/com/example/demo/TaskbarProgressScreen.kt @@ -26,16 +26,16 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.application.NucleusWindow -import io.github.kdroidfilter.nucleus.taskbarprogress.TaskbarProgress -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.hideTaskbarProgress -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.requestTaskbarAttention -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.setTaskbarProgress -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.showTaskbarError -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.showTaskbarIndeterminate -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.showTaskbarPaused -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.showTaskbarProgress -import io.github.kdroidfilter.nucleus.taskbarprogress.tao.stopTaskbarAttention +import dev.nucleusframework.nucleus.application.NucleusWindow +import dev.nucleusframework.nucleus.taskbarprogress.TaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.tao.hideTaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.tao.requestTaskbarAttention +import dev.nucleusframework.nucleus.taskbarprogress.tao.setTaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.tao.showTaskbarError +import dev.nucleusframework.nucleus.taskbarprogress.tao.showTaskbarIndeterminate +import dev.nucleusframework.nucleus.taskbarprogress.tao.showTaskbarPaused +import dev.nucleusframework.nucleus.taskbarprogress.tao.showTaskbarProgress +import dev.nucleusframework.nucleus.taskbarprogress.tao.stopTaskbarAttention import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/example/src/main/kotlin/com/example/demo/WindowsBadgeScreen.kt b/example/src/main/kotlin/com/example/demo/WindowsBadgeScreen.kt index 7a670ded8..4a7632b52 100644 --- a/example/src/main/kotlin/com/example/demo/WindowsBadgeScreen.kt +++ b/example/src/main/kotlin/com/example/demo/WindowsBadgeScreen.kt @@ -33,16 +33,16 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.launcher.windows.BadgeGlyph -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListCategory -import io.github.kdroidfilter.nucleus.launcher.windows.JumpListItem -import io.github.kdroidfilter.nucleus.launcher.windows.StockIcon -import io.github.kdroidfilter.nucleus.launcher.windows.TaskbarIconSource -import io.github.kdroidfilter.nucleus.launcher.windows.ThumbnailToolbarButton -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsBadgeManager -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsJumpListManager -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsOverlayIcon -import io.github.kdroidfilter.nucleus.launcher.windows.WindowsThumbnailToolbar +import dev.nucleusframework.nucleus.launcher.windows.BadgeGlyph +import dev.nucleusframework.nucleus.launcher.windows.JumpListCategory +import dev.nucleusframework.nucleus.launcher.windows.JumpListItem +import dev.nucleusframework.nucleus.launcher.windows.StockIcon +import dev.nucleusframework.nucleus.launcher.windows.TaskbarIconSource +import dev.nucleusframework.nucleus.launcher.windows.ThumbnailToolbarButton +import dev.nucleusframework.nucleus.launcher.windows.WindowsBadgeManager +import dev.nucleusframework.nucleus.launcher.windows.WindowsJumpListManager +import dev.nucleusframework.nucleus.launcher.windows.WindowsOverlayIcon +import dev.nucleusframework.nucleus.launcher.windows.WindowsThumbnailToolbar import java.awt.Window private const val EVENT_LOG_MAX = 30 diff --git a/example/src/main/kotlin/com/example/demo/WindowsNotificationsScreen.kt b/example/src/main/kotlin/com/example/demo/WindowsNotificationsScreen.kt index da5691228..717b6d79c 100644 --- a/example/src/main/kotlin/com/example/demo/WindowsNotificationsScreen.kt +++ b/example/src/main/kotlin/com/example/demo/WindowsNotificationsScreen.kt @@ -36,27 +36,27 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.notification.windows.ActivationType -import io.github.kdroidfilter.nucleus.notification.windows.AdaptiveProgressBar -import io.github.kdroidfilter.nucleus.notification.windows.AdaptiveText -import io.github.kdroidfilter.nucleus.notification.windows.DismissalReason -import io.github.kdroidfilter.nucleus.notification.windows.ToastActions -import io.github.kdroidfilter.nucleus.notification.windows.ToastAudio -import io.github.kdroidfilter.nucleus.notification.windows.ToastAudioSource -import io.github.kdroidfilter.nucleus.notification.windows.ToastBindingGeneric -import io.github.kdroidfilter.nucleus.notification.windows.ToastButton -import io.github.kdroidfilter.nucleus.notification.windows.ToastContent -import io.github.kdroidfilter.nucleus.notification.windows.ToastGenericAttributionText -import io.github.kdroidfilter.nucleus.notification.windows.ToastHeader -import io.github.kdroidfilter.nucleus.notification.windows.ToastNotificationData -import io.github.kdroidfilter.nucleus.notification.windows.ToastNotificationListener -import io.github.kdroidfilter.nucleus.notification.windows.ToastScenario -import io.github.kdroidfilter.nucleus.notification.windows.ToastSelectionBox -import io.github.kdroidfilter.nucleus.notification.windows.ToastSelectionBoxItem -import io.github.kdroidfilter.nucleus.notification.windows.ToastTextBox -import io.github.kdroidfilter.nucleus.notification.windows.ToastVisual -import io.github.kdroidfilter.nucleus.notification.windows.WindowsNotificationCenter -import io.github.kdroidfilter.nucleus.notification.windows.toast +import dev.nucleusframework.nucleus.notification.windows.ActivationType +import dev.nucleusframework.nucleus.notification.windows.AdaptiveProgressBar +import dev.nucleusframework.nucleus.notification.windows.AdaptiveText +import dev.nucleusframework.nucleus.notification.windows.DismissalReason +import dev.nucleusframework.nucleus.notification.windows.ToastActions +import dev.nucleusframework.nucleus.notification.windows.ToastAudio +import dev.nucleusframework.nucleus.notification.windows.ToastAudioSource +import dev.nucleusframework.nucleus.notification.windows.ToastBindingGeneric +import dev.nucleusframework.nucleus.notification.windows.ToastButton +import dev.nucleusframework.nucleus.notification.windows.ToastContent +import dev.nucleusframework.nucleus.notification.windows.ToastGenericAttributionText +import dev.nucleusframework.nucleus.notification.windows.ToastHeader +import dev.nucleusframework.nucleus.notification.windows.ToastNotificationData +import dev.nucleusframework.nucleus.notification.windows.ToastNotificationListener +import dev.nucleusframework.nucleus.notification.windows.ToastScenario +import dev.nucleusframework.nucleus.notification.windows.ToastSelectionBox +import dev.nucleusframework.nucleus.notification.windows.ToastSelectionBoxItem +import dev.nucleusframework.nucleus.notification.windows.ToastTextBox +import dev.nucleusframework.nucleus.notification.windows.ToastVisual +import dev.nucleusframework.nucleus.notification.windows.WindowsNotificationCenter +import dev.nucleusframework.nucleus.notification.windows.toast private const val EVENT_LOG_MAX = 20 private const val MAX_PROGRESS_VALUE = 100f @@ -373,7 +373,7 @@ private fun sendToast( silent: Boolean, events: MutableList, ) { - val children = mutableListOf() + val children = mutableListOf() children.add(AdaptiveText(title)) if (body.isNotEmpty()) children.add(AdaptiveText(body)) if (body2.isNotEmpty()) children.add(AdaptiveText(body2)) @@ -388,7 +388,7 @@ private fun sendToast( ) } - val inputs = mutableListOf() + val inputs = mutableListOf() if (useTextInput) { inputs.add(ToastTextBox(id = "reply", title = "Reply", placeholderContent = "Type here...")) } diff --git a/freedesktop-icons/build.gradle.kts b/freedesktop-icons/build.gradle.kts index 337d5f4ba..b2f71f21e 100644 --- a/freedesktop-icons/build.gradle.kts +++ b/freedesktop-icons/build.gradle.kts @@ -24,12 +24,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.freedesktop-icons", publishVersion) + coordinates("dev.nucleusframework", "nucleus.freedesktop-icons", publishVersion) pom { name.set("Nucleus Freedesktop Icons") description.set("Type-safe freedesktop icon naming specification constants for JVM desktop applications") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -40,16 +40,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/freedesktop-icons/src/main/kotlin/io/github/kdroidfilter/nucleus/freedesktop/icons/FreedesktopIcon.kt b/freedesktop-icons/src/main/kotlin/dev/nucleusframework/nucleus/freedesktop/icons/FreedesktopIcon.kt similarity index 99% rename from freedesktop-icons/src/main/kotlin/io/github/kdroidfilter/nucleus/freedesktop/icons/FreedesktopIcon.kt rename to freedesktop-icons/src/main/kotlin/dev/nucleusframework/nucleus/freedesktop/icons/FreedesktopIcon.kt index 2098e20b8..f8159c049 100644 --- a/freedesktop-icons/src/main/kotlin/io/github/kdroidfilter/nucleus/freedesktop/icons/FreedesktopIcon.kt +++ b/freedesktop-icons/src/main/kotlin/dev/nucleusframework/nucleus/freedesktop/icons/FreedesktopIcon.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.freedesktop.icons +package dev.nucleusframework.nucleus.freedesktop.icons /** * Type-safe representation of a freedesktop icon name. diff --git a/global-hotkey/build.gradle.kts b/global-hotkey/build.gradle.kts index 0506fd879..e3b6b30b9 100644 --- a/global-hotkey/build.gradle.kts +++ b/global-hotkey/build.gradle.kts @@ -81,14 +81,14 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.global-hotkey", publishVersion) + coordinates("dev.nucleusframework", "nucleus.global-hotkey", publishVersion) pom { name.set("Nucleus Global Hotkey") description.set( "Cross-platform global hotkey (system-wide keyboard shortcuts) for JVM desktop applications via JNI", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -99,16 +99,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/GlobalHotKeyManager.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/GlobalHotKeyManager.kt similarity index 96% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/GlobalHotKeyManager.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/GlobalHotKeyManager.kt index a077f9d1c..d24efc574 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/GlobalHotKeyManager.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/GlobalHotKeyManager.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.globalhotkey +package dev.nucleusframework.nucleus.globalhotkey -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge -import io.github.kdroidfilter.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge -import io.github.kdroidfilter.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge +import dev.nucleusframework.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge +import dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge import java.util.logging.Logger private const val WIN32_MOD_NOREPEAT = 0x4000 diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyListener.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyListener.kt similarity index 87% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyListener.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyListener.kt index fcbae371b..1eb694b3a 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyListener.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyListener.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.globalhotkey +package dev.nucleusframework.nucleus.globalhotkey /** Callback invoked when a registered global hotkey is pressed. */ fun interface HotKeyListener { diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyModifier.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyModifier.kt similarity index 93% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyModifier.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyModifier.kt index e921737d6..3e2b5ea5d 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/HotKeyModifier.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/HotKeyModifier.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.globalhotkey +package dev.nucleusframework.nucleus.globalhotkey /** * Modifier keys for global hotkey registration. diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/MediaKey.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/MediaKey.kt similarity index 89% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/MediaKey.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/MediaKey.kt index 76f8279df..c92b0cc75 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/MediaKey.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/MediaKey.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.globalhotkey +package dev.nucleusframework.nucleus.globalhotkey /** * Well-known media keys that can be registered as global hotkeys. diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt similarity index 86% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt index aeb27f75d..8cf2903e5 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/linux/NativeLinuxHotKeyBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.globalhotkey.linux +package dev.nucleusframework.nucleus.globalhotkey.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyListener +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.globalhotkey.HotKeyListener import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt similarity index 90% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt index eb88c2513..4362adde0 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/macos/NativeMacOsHotKeyBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.globalhotkey.macos +package dev.nucleusframework.nucleus.globalhotkey.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyListener +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.globalhotkey.HotKeyListener import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong diff --git a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt similarity index 90% rename from global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt rename to global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt index 7dcffa541..6b63c390e 100644 --- a/global-hotkey/src/main/kotlin/io/github/kdroidfilter/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt +++ b/global-hotkey/src/main/kotlin/dev/nucleusframework/nucleus/globalhotkey/windows/NativeWindowsHotKeyBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.globalhotkey.windows +package dev.nucleusframework.nucleus.globalhotkey.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.globalhotkey.HotKeyListener +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.globalhotkey.HotKeyListener import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong diff --git a/global-hotkey/src/main/native/linux/nucleus_global_hotkey_linux.c b/global-hotkey/src/main/native/linux/nucleus_global_hotkey_linux.c index 9ace32d36..e5639bfba 100644 --- a/global-hotkey/src/main/native/linux/nucleus_global_hotkey_linux.c +++ b/global-hotkey/src/main/native/linux/nucleus_global_hotkey_linux.c @@ -608,7 +608,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeInit( +Java_dev_nucleusframework_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeInit( JNIEnv *env, jclass clazz) { if (g_running) return NULL; @@ -656,7 +656,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_n } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeRegister( JNIEnv *env, jclass clazz, jlong id, jint modifiers, jint keyCode) { (void)clazz; if (!g_running) return (*env)->NewStringUTF(env, "Not initialized"); @@ -703,7 +703,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_n } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeUnregister( +Java_dev_nucleusframework_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeUnregister( JNIEnv *env, jclass clazz, jlong id) { (void)clazz; if (!g_running) return (*env)->NewStringUTF(env, "Not initialized"); @@ -728,7 +728,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_n } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeShutdown( +Java_dev_nucleusframework_nucleus_globalhotkey_linux_NativeLinuxHotKeyBridge_nativeShutdown( JNIEnv *env, jclass clazz) { (void)clazz; if (!g_running) return; diff --git a/global-hotkey/src/main/native/macos/nucleus_global_hotkey_macos.m b/global-hotkey/src/main/native/macos/nucleus_global_hotkey_macos.m index 16556cb32..d37200d4d 100644 --- a/global-hotkey/src/main/native/macos/nucleus_global_hotkey_macos.m +++ b/global-hotkey/src/main/native/macos/nucleus_global_hotkey_macos.m @@ -224,7 +224,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeInit( +Java_dev_nucleusframework_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeInit( JNIEnv *env, jclass clazz) { @autoreleasepool { if (g_eventMonitorLocal != nil || g_eventMonitorGlobal != nil) return NULL; // Already initialized @@ -278,7 +278,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeRegister( JNIEnv *env, jclass clazz, jlong id, jint modifiers, jint keyCode) { (void)clazz; @autoreleasepool { @@ -318,7 +318,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeUnregister( +Java_dev_nucleusframework_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeUnregister( JNIEnv *env, jclass clazz, jlong id) { (void)clazz; @autoreleasepool { @@ -336,7 +336,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeShutdown( +Java_dev_nucleusframework_nucleus_globalhotkey_macos_NativeMacOsHotKeyBridge_nativeShutdown( JNIEnv *env, jclass clazz) { (void)clazz; @autoreleasepool { diff --git a/global-hotkey/src/main/native/windows/nucleus_global_hotkey.cpp b/global-hotkey/src/main/native/windows/nucleus_global_hotkey.cpp index 5a4771ab0..c16467023 100644 --- a/global-hotkey/src/main/native/windows/nucleus_global_hotkey.cpp +++ b/global-hotkey/src/main/native/windows/nucleus_global_hotkey.cpp @@ -112,7 +112,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeInit( +Java_dev_nucleusframework_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeInit( JNIEnv* env, jclass clazz ) { if (g_running) return nullptr; // Already initialized @@ -155,7 +155,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBrid } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeRegister( JNIEnv* env, jclass, jlong id, jint modifiers, jint keyCode ) { if (!g_running || g_threadId == 0) { @@ -187,7 +187,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBrid } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeUnregister( +Java_dev_nucleusframework_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeUnregister( JNIEnv* env, jclass, jlong id ) { if (!g_running || g_threadId == 0) { @@ -217,7 +217,7 @@ Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBrid } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeShutdown( +Java_dev_nucleusframework_nucleus_globalhotkey_windows_NativeWindowsHotKeyBridge_nativeShutdown( JNIEnv*, jclass ) { if (!g_running || g_threadId == 0) return; diff --git a/global-hotkey/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.global-hotkey/reachability-metadata.json b/global-hotkey/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.global-hotkey/reachability-metadata.json similarity index 71% rename from global-hotkey/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.global-hotkey/reachability-metadata.json rename to global-hotkey/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.global-hotkey/reachability-metadata.json index 27138140e..a58873068 100644 --- a/global-hotkey/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.global-hotkey/reachability-metadata.json +++ b/global-hotkey/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.global-hotkey/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge", + "type": "dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge", "jniAccessible": true, "methods": [ { @@ -11,7 +11,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge", + "type": "dev.nucleusframework.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge", "jniAccessible": true, "methods": [ { @@ -21,7 +21,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge", + "type": "dev.nucleusframework.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge", "jniAccessible": true, "methods": [ { diff --git a/graalvm-runtime/build.gradle.kts b/graalvm-runtime/build.gradle.kts index a0a2a7cf3..367f50d58 100644 --- a/graalvm-runtime/build.gradle.kts +++ b/graalvm-runtime/build.gradle.kts @@ -34,12 +34,12 @@ tasks.named("javadoc") { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.graalvm-runtime", publishVersion) + coordinates("dev.nucleusframework", "nucleus.graalvm-runtime", publishVersion) pom { name.set("Nucleus GraalVM Runtime") description.set("GraalVM native-image runtime initialization and font manager substitutions") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -50,16 +50,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FcFontManagerSubstitution.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FcFontManagerSubstitution.java similarity index 96% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FcFontManagerSubstitution.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FcFontManagerSubstitution.java index 23a2f7110..fbc438c6c 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FcFontManagerSubstitution.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FcFontManagerSubstitution.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FontCreateFontSubstitution.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FontCreateFontSubstitution.java similarity index 96% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FontCreateFontSubstitution.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FontCreateFontSubstitution.java index 62254e458..23ac68a39 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/FontCreateFontSubstitution.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/FontCreateFontSubstitution.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsLinux.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsLinux.java similarity index 86% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsLinux.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsLinux.java index e32f245f5..47e0a745e 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsLinux.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsLinux.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import org.graalvm.nativeimage.Platform; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindows.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindows.java similarity index 86% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindows.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindows.java index 177130629..8efd8552d 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindows.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindows.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import org.graalvm.nativeimage.Platform; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindowsOrLinux.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindowsOrLinux.java similarity index 88% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindowsOrLinux.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindowsOrLinux.java index 4f6784b0d..3a2943876 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/IsWindowsOrLinux.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/IsWindowsOrLinux.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import org.graalvm.nativeimage.Platform; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/Win32FontManagerSubstitution.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/Win32FontManagerSubstitution.java similarity index 95% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/Win32FontManagerSubstitution.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/Win32FontManagerSubstitution.java index ecf63c604..b2c28e366 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/font/Win32FontManagerSubstitution.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/font/Win32FontManagerSubstitution.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.font; +package dev.nucleusframework.nucleus.graalvm.font; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/AppNameResolver.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/AppNameResolver.java similarity index 98% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/AppNameResolver.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/AppNameResolver.java index 35423a72b..00e07761a 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/AppNameResolver.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/AppNameResolver.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.wmclass; +package dev.nucleusframework.nucleus.graalvm.wmclass; import java.io.File; import java.io.InputStream; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/IsLinux.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/IsLinux.java similarity index 85% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/IsLinux.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/IsLinux.java index 785a3c3c6..030ce0b51 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/IsLinux.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/IsLinux.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.wmclass; +package dev.nucleusframework.nucleus.graalvm.wmclass; import org.graalvm.nativeimage.Platform; diff --git a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java similarity index 94% rename from graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java rename to graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java index 79c5f770b..73c8641cc 100644 --- a/graalvm-runtime/src/main/java/io/github/kdroidfilter/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java +++ b/graalvm-runtime/src/main/java/dev/nucleusframework/nucleus/graalvm/wmclass/XToolkitAppNameSubstitution.java @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.graalvm.wmclass; +package dev.nucleusframework.nucleus.graalvm.wmclass; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; diff --git a/graalvm-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/graalvm/GraalVmInitializer.kt b/graalvm-runtime/src/main/kotlin/dev/nucleusframework/nucleus/graalvm/GraalVmInitializer.kt similarity index 96% rename from graalvm-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/graalvm/GraalVmInitializer.kt rename to graalvm-runtime/src/main/kotlin/dev/nucleusframework/nucleus/graalvm/GraalVmInitializer.kt index 185dd5be7..6870b894b 100644 --- a/graalvm-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/graalvm/GraalVmInitializer.kt +++ b/graalvm-runtime/src/main/kotlin/dev/nucleusframework/nucleus/graalvm/GraalVmInitializer.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.graalvm +package dev.nucleusframework.nucleus.graalvm -import io.github.kdroidfilter.nucleus.hidpi.applyLinuxHiDpiScale +import dev.nucleusframework.nucleus.hidpi.applyLinuxHiDpiScale import java.io.File import java.nio.charset.Charset diff --git a/graalvm-runtime/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.graalvm-runtime/native-image.properties b/graalvm-runtime/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.graalvm-runtime/native-image.properties similarity index 100% rename from graalvm-runtime/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.graalvm-runtime/native-image.properties rename to graalvm-runtime/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.graalvm-runtime/native-image.properties diff --git a/jewel-sample/build.gradle.kts b/jewel-sample/build.gradle.kts index cc7b8ddaf..e465a10dc 100644 --- a/jewel-sample/build.gradle.kts +++ b/jewel-sample/build.gradle.kts @@ -1,13 +1,13 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SigningAlgorithm -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel +import dev.nucleusframework.nucleus.desktop.application.dsl.SigningAlgorithm +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } val isMac = @@ -132,17 +132,17 @@ nucleus.application { packageName = "JewelSample" packageVersion = "1.0.0" - homepage = "https://github.com/kdroidFilter/Nucleus" + homepage = "https://github.com/nucleusframework/Nucleus" linux { - debMaintainer = "KDroidFilter " + debMaintainer = "NucleusFramework " debDepends = listOf("libfuse2", "libgtk-3-0") } windows { signing { enabled = true - certificateFile.set(rootProject.file("example/packaging/KDroidFilter.pfx")) + certificateFile.set(rootProject.file("example/packaging/NucleusFramework.pfx")) certificatePassword = "ChangeMe-Temp123!" algorithm = SigningAlgorithm.Sha256 timestampServer = "http://timestamp.digicert.com" @@ -150,7 +150,7 @@ nucleus.application { } macOS { - bundleID = "io.github.kdroidfilter.jewelsample" + bundleID = "dev.nucleusframework.jewelsample" dockName = "JewelSample" } } diff --git a/jewel-sample/proguard-rules.pro b/jewel-sample/proguard-rules.pro index b0a5e9188..3c6c58d77 100644 --- a/jewel-sample/proguard-rules.pro +++ b/jewel-sample/proguard-rules.pro @@ -229,7 +229,7 @@ # --- Fix: Community enum used with valueOf() for Kiddush Levana opinion selection --- # The Community enum is resolved at runtime via Enum.valueOf(code) where code is stored # in AppSettings. If R8/ProGuard optimizes or unboxes this enum, valueOf() will fail. --keep enum io.github.kdroidfilter.seforimapp.features.onboarding.userprofile.Community { *; } +-keep enum dev.nucleusframework.seforimapp.features.onboarding.userprofile.Community { *; } # ============================================================================= @@ -239,43 +239,43 @@ # ============================================================================= # Nucleus decorated-window JNI (macOS) --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } # Nucleus darkmode-detector JNI (macOS) # NativeDarkModeBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Linux) # NativeLinuxBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Windows) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } # Nucleus native-ssl JNI (macOS) --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } # Nucleus native-ssl JNI (Windows) --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } # Nucleus system-color JNI (macOS) --keep class io.github.kdroidfilter.nucleus.systemcolor.mac.NativeMacSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.mac.NativeMacSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onAccentColorCleared(); @@ -283,38 +283,38 @@ } # Nucleus system-color JNI (Linux) --keep class io.github.kdroidfilter.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onHighContrastChanged(boolean); } # Nucleus system-color JNI (Windows) --keep class io.github.kdroidfilter.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { native ; static void onAccentColorChanged(int, int, int); static void onHighContrastChanged(boolean); } --keep class io.github.kdroidfilter.nucleus.systemcolor.** { *; } +-keep class dev.nucleusframework.nucleus.systemcolor.** { *; } # Nucleus energy-manager JNI (macOS) --keep class io.github.kdroidfilter.nucleus.energymanager.macos.NativeMacOsEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.macos.NativeMacOsEnergyBridge { native ; } # Nucleus energy-manager JNI (Linux) --keep class io.github.kdroidfilter.nucleus.energymanager.linux.NativeLinuxEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.linux.NativeLinuxEnergyBridge { native ; } # Nucleus energy-manager JNI (Windows) --keep class io.github.kdroidfilter.nucleus.energymanager.windows.NativeWindowsEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.windows.NativeWindowsEnergyBridge { native ; } --keep class io.github.kdroidfilter.nucleus.energymanager.** { *; } +-keep class dev.nucleusframework.nucleus.energymanager.** { *; } # Nucleus linux-hidpi JNI --keep class io.github.kdroidfilter.nucleus.hidpi.HiDpiLinuxBridge { +-keep class dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge { native ; } diff --git a/jewel-sample/src/main/kotlin/jewelsample/Main.kt b/jewel-sample/src/main/kotlin/jewelsample/Main.kt index 3a38032f9..6032abc05 100644 --- a/jewel-sample/src/main/kotlin/jewelsample/Main.kt +++ b/jewel-sample/src/main/kotlin/jewelsample/Main.kt @@ -15,14 +15,14 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.DecoratedWindow -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.nucleusApplication -import io.github.kdroidfilter.nucleus.darkmodedetector.isSystemInDarkMode -import io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.jewel.rememberJewelTitleBarStyle -import io.github.kdroidfilter.nucleus.window.jewel.rememberJewelWindowStyle +import dev.nucleusframework.nucleus.application.DecoratedWindow +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.nucleusApplication +import dev.nucleusframework.nucleus.darkmodedetector.isSystemInDarkMode +import dev.nucleusframework.nucleus.graalvm.GraalVmInitializer +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.jewel.rememberJewelTitleBarStyle +import dev.nucleusframework.nucleus.window.jewel.rememberJewelWindowStyle import jewelsample.view.TitleBarView import jewelsample.viewmodel.MainViewModel import jewelsample.viewmodel.MainViewModel.currentView diff --git a/jewel-sample/src/main/kotlin/jewelsample/view/TitleBarView.kt b/jewel-sample/src/main/kotlin/jewelsample/view/TitleBarView.kt index bf44b1ea8..ff5e7c217 100644 --- a/jewel-sample/src/main/kotlin/jewelsample/view/TitleBarView.kt +++ b/jewel-sample/src/main/kotlin/jewelsample/view/TitleBarView.kt @@ -12,10 +12,10 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.newFullscreenControls +import dev.nucleusframework.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.macOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.newFullscreenControls import jewelsample.IntUiThemes import jewelsample.showcase.ShowcaseIcons import jewelsample.showcase.views.forCurrentOs diff --git a/jewel-sample/src/main/packaging/Info.plist b/jewel-sample/src/main/packaging/Info.plist index 11e472308..189da35af 100644 --- a/jewel-sample/src/main/packaging/Info.plist +++ b/jewel-sample/src/main/packaging/Info.plist @@ -7,7 +7,7 @@ CFBundleDisplayName Jewel Sample CFBundleIdentifier - io.github.kdroidfilter.composedeskkit.jewelsample + dev.nucleusframework.composedeskkit.jewelsample CFBundleVersion 1.0.0 CFBundleShortVersionString diff --git a/launcher-linux/build.gradle.kts b/launcher-linux/build.gradle.kts index c9067b516..81189019d 100644 --- a/launcher-linux/build.gradle.kts +++ b/launcher-linux/build.gradle.kts @@ -60,12 +60,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.launcher-linux", publishVersion) + coordinates("dev.nucleusframework", "nucleus.launcher-linux", publishVersion) pom { name.set("Nucleus Launcher Linux") description.set("Unity Launcher API (com.canonical.Unity.LauncherEntry) for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -76,16 +76,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/DbusmenuItem.kt b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/DbusmenuItem.kt similarity index 94% rename from launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/DbusmenuItem.kt rename to launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/DbusmenuItem.kt index a3607c1b8..618d47954 100644 --- a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/DbusmenuItem.kt +++ b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/DbusmenuItem.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.linux +package dev.nucleusframework.nucleus.launcher.linux -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon /** * Represents a single menu item in a `com.canonical.dbusmenu` quicklist. diff --git a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LauncherProperties.kt b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LauncherProperties.kt similarity index 94% rename from launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LauncherProperties.kt rename to launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LauncherProperties.kt index 5a0b55e99..5236883f1 100644 --- a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LauncherProperties.kt +++ b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LauncherProperties.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.linux +package dev.nucleusframework.nucleus.launcher.linux /** * Properties that can be set on a Unity Launcher entry. diff --git a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxLauncherEntry.kt b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxLauncherEntry.kt similarity index 98% rename from launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxLauncherEntry.kt rename to launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxLauncherEntry.kt index 2782d61f1..702d7b578 100644 --- a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxLauncherEntry.kt +++ b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxLauncherEntry.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.linux +package dev.nucleusframework.nucleus.launcher.linux /** * Entry point for the Unity Launcher API on Linux. diff --git a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxQuicklist.kt b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxQuicklist.kt similarity index 98% rename from launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxQuicklist.kt rename to launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxQuicklist.kt index 751cd593d..5c726f5f9 100644 --- a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/LinuxQuicklist.kt +++ b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/LinuxQuicklist.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.linux +package dev.nucleusframework.nucleus.launcher.linux import javax.swing.SwingUtilities diff --git a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt similarity index 94% rename from launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt rename to launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt index c061ed5dc..ecf60b6af 100644 --- a/launcher-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt +++ b/launcher-linux/src/main/kotlin/dev/nucleusframework/nucleus/launcher/linux/NativeLinuxLauncherBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.linux +package dev.nucleusframework.nucleus.launcher.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_launcher_linux" diff --git a/launcher-linux/src/main/native/linux/nucleus_launcher_linux.c b/launcher-linux/src/main/native/linux/nucleus_launcher_linux.c index 9c35326d2..f335fd983 100644 --- a/launcher-linux/src/main/native/linux/nucleus_launcher_linux.c +++ b/launcher-linux/src/main/native/linux/nucleus_launcher_linux.c @@ -208,7 +208,7 @@ static GDBusConnection *get_connection(void) { static int ensure_callback_ids(JNIEnv *env) { if (g_bridge_class != NULL) return 1; jclass cls = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/launcher/linux/NativeLinuxLauncherBridge"); + "dev/nucleusframework/nucleus/launcher/linux/NativeLinuxLauncherBridge"); if (!cls) { if ((*env)->ExceptionCheck(env)) (*env)->ExceptionClear(env); return 0; } g_bridge_class = (jclass)(*env)->NewGlobalRef(env, cls); (*env)->DeleteLocalRef(env, cls); @@ -254,7 +254,7 @@ static GVariant *build_properties_variant( /* ===================================================================== */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeUpdate( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeUpdate( JNIEnv *env, jclass clazz, jstring j_app_uri, jboolean has_count, jlong count, jint count_visible, jboolean has_progress, jdouble progress, jint progress_visible, @@ -359,7 +359,7 @@ static void *query_thread_func(void *arg) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeRegisterQueryHandler( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeRegisterQueryHandler( JNIEnv *env, jclass clazz, jstring j_app_uri) { (void)clazz; @@ -395,7 +395,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeSetState( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeSetState( JNIEnv *env, jclass clazz, jboolean has_count, jlong count, jint count_visible, jboolean has_progress, jdouble progress, jint progress_visible, @@ -416,7 +416,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nat } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeUnregister( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeUnregister( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -753,7 +753,7 @@ static void free_menu_item(MenuItem *item) { /* ===================================================================== */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeSetMenu( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeSetMenu( JNIEnv *env, jclass clazz, jstring j_object_path, jintArray j_ids, jintArray j_parent_ids, @@ -918,7 +918,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nat /* ===================================================================== */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeDestroyMenu( +Java_dev_nucleusframework_nucleus_launcher_linux_NativeLinuxLauncherBridge_nativeDestroyMenu( JNIEnv *env, jclass clazz, jstring j_object_path) { (void)clazz; diff --git a/launcher-macos/build.gradle.kts b/launcher-macos/build.gradle.kts index e6ed6c13f..67dac5e9a 100644 --- a/launcher-macos/build.gradle.kts +++ b/launcher-macos/build.gradle.kts @@ -59,12 +59,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.launcher-macos", publishVersion) + coordinates("dev.nucleusframework", "nucleus.launcher-macos", publishVersion) pom { name.set("Nucleus Launcher macOS") description.set("macOS dock context menu for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -75,16 +75,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuItem.kt b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuItem.kt similarity index 94% rename from launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuItem.kt rename to launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuItem.kt index 9ef244e90..19a8c8f67 100644 --- a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuItem.kt +++ b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuItem.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.macos +package dev.nucleusframework.nucleus.launcher.macos /** * Represents a single item in the macOS dock context menu. diff --git a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuListener.kt b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuListener.kt similarity index 78% rename from launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuListener.kt rename to launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuListener.kt index 1e6103203..dff7bbcb1 100644 --- a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/DockMenuListener.kt +++ b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/DockMenuListener.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.macos +package dev.nucleusframework.nucleus.launcher.macos /** Listener for dock menu item clicks. */ fun interface DockMenuListener { diff --git a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/MacOsDockMenu.kt b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/MacOsDockMenu.kt similarity index 97% rename from launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/MacOsDockMenu.kt rename to launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/MacOsDockMenu.kt index b35823396..623effdb6 100644 --- a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/MacOsDockMenu.kt +++ b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/MacOsDockMenu.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.macos +package dev.nucleusframework.nucleus.launcher.macos /** * macOS dock context menu integration via JNI. diff --git a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt similarity index 85% rename from launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt rename to launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt index 6a05b8b1e..4afc2ff3b 100644 --- a/launcher-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt +++ b/launcher-macos/src/main/kotlin/dev/nucleusframework/nucleus/launcher/macos/NativeMacOsDockMenuBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.macos +package dev.nucleusframework.nucleus.launcher.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import javax.swing.SwingUtilities private const val LIBRARY_NAME = "nucleus_launcher_macos" diff --git a/launcher-macos/src/main/native/macos/nucleus_launcher_macos.m b/launcher-macos/src/main/native/macos/nucleus_launcher_macos.m index 75616e178..bf0512bff 100644 --- a/launcher-macos/src/main/native/macos/nucleus_launcher_macos.m +++ b/launcher-macos/src/main/native/macos/nucleus_launcher_macos.m @@ -21,7 +21,7 @@ static NSMenu *g_dockMenu = nil; static BOOL g_swizzled = NO; -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/launcher/macos/NativeMacOsDockMenuBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/launcher/macos/NativeMacOsDockMenuBridge" // ============================================================================ // JNI helpers @@ -257,7 +257,7 @@ static void freeMenuData(MenuItemData *data, jsize count) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_macos_NativeMacOsDockMenuBridge_nativeSetDockMenu( +Java_dev_nucleusframework_nucleus_launcher_macos_NativeMacOsDockMenuBridge_nativeSetDockMenu( JNIEnv *env, jclass clazz, jintArray ids, jobjectArray titles, jbooleanArray enabled, jintArray parentIndices, jbooleanArray separators) { @@ -277,7 +277,7 @@ static void freeMenuData(MenuItemData *data, jsize count) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_macos_NativeMacOsDockMenuBridge_nativeClearDockMenu( +Java_dev_nucleusframework_nucleus_launcher_macos_NativeMacOsDockMenuBridge_nativeClearDockMenu( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/launcher-windows/build.gradle.kts b/launcher-windows/build.gradle.kts index 55dce7562..3a129f430 100644 --- a/launcher-windows/build.gradle.kts +++ b/launcher-windows/build.gradle.kts @@ -54,12 +54,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.launcher-windows", publishVersion) + coordinates("dev.nucleusframework", "nucleus.launcher-windows", publishVersion) pom { name.set("Nucleus Launcher Windows") description.set("Windows Launcher API (Badge Notifications) for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -70,16 +70,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/BadgeGlyph.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/BadgeGlyph.kt similarity index 92% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/BadgeGlyph.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/BadgeGlyph.kt index 09eaa01d6..732ffcccf 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/BadgeGlyph.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/BadgeGlyph.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * Predefined badge glyph icons for Windows badge notifications. diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListCategory.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListCategory.kt similarity index 87% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListCategory.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListCategory.kt index 843aa8b8b..95d327728 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListCategory.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListCategory.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * A named category in a Windows Jump List. diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListItem.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListItem.kt similarity index 95% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListItem.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListItem.kt index 0de64d455..07d932843 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/JumpListItem.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/JumpListItem.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * A single item in a Windows Jump List (custom category or user task). diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/KnownCategory.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/KnownCategory.kt similarity index 87% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/KnownCategory.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/KnownCategory.kt index 95fc73bde..83be8dc69 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/KnownCategory.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/KnownCategory.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * Built-in jump list categories managed by Windows. diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt similarity index 83% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt index bcb589406..055069c11 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsBadgeBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_launcher_windows" diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt similarity index 91% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt index dc6f7c3fc..771dfee6e 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsJumpListBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_launcher_windows" diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt similarity index 92% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt index a8075e31f..5caa7c12f 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/NativeWindowsTaskbarBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.awt.Window private const val LIBRARY_NAME = "nucleus_launcher_windows" diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/StockIcon.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/StockIcon.kt similarity index 98% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/StockIcon.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/StockIcon.kt index e7caa588d..f49a6addd 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/StockIcon.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/StockIcon.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * Type-safe mapping of Windows Shell Stock Icons ([SHSTOCKICONID]). diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/TaskbarIconSource.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/TaskbarIconSource.kt similarity index 93% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/TaskbarIconSource.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/TaskbarIconSource.kt index eb6e55ae8..f46b91c0b 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/TaskbarIconSource.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/TaskbarIconSource.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * Source for a Windows taskbar icon (overlay icons, thumbnail toolbar buttons, jump list items). diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbBarClickListener.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbBarClickListener.kt similarity index 83% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbBarClickListener.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbBarClickListener.kt index dd747a071..7b2d26773 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbBarClickListener.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbBarClickListener.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * Callback for thumbnail toolbar button clicks. diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbnailToolbarButton.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbnailToolbarButton.kt similarity index 97% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbnailToolbarButton.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbnailToolbarButton.kt index 961d5959f..ef23b0b6e 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/ThumbnailToolbarButton.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/ThumbnailToolbarButton.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows /** * A button on the Windows taskbar thumbnail toolbar. diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsBadgeManager.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsBadgeManager.kt similarity index 96% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsBadgeManager.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsBadgeManager.kt index 4b84cdaa1..c27a1b213 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsBadgeManager.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsBadgeManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.util.logging.Logger /** diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsJumpListManager.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsJumpListManager.kt similarity index 97% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsJumpListManager.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsJumpListManager.kt index 65f2f4be9..2f5837e83 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsJumpListManager.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsJumpListManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.util.logging.Logger /** diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsOverlayIcon.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsOverlayIcon.kt similarity index 98% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsOverlayIcon.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsOverlayIcon.kt index e8d7bb9f5..0114502df 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsOverlayIcon.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsOverlayIcon.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows import java.awt.Window import java.util.logging.Logger diff --git a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsThumbnailToolbar.kt b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsThumbnailToolbar.kt similarity index 99% rename from launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsThumbnailToolbar.kt rename to launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsThumbnailToolbar.kt index db1071044..273de453e 100644 --- a/launcher-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/launcher/windows/WindowsThumbnailToolbar.kt +++ b/launcher-windows/src/main/kotlin/dev/nucleusframework/nucleus/launcher/windows/WindowsThumbnailToolbar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.launcher.windows +package dev.nucleusframework.nucleus.launcher.windows import java.awt.Window import java.util.concurrent.ConcurrentHashMap diff --git a/launcher-windows/src/main/native/windows/nucleus_launcher_windows.cpp b/launcher-windows/src/main/native/windows/nucleus_launcher_windows.cpp index a91b37502..6cfb0c6f1 100644 --- a/launcher-windows/src/main/native/windows/nucleus_launcher_windows.cpp +++ b/launcher-windows/src/main/native/windows/nucleus_launcher_windows.cpp @@ -313,7 +313,7 @@ static HRESULT setBadgeXml(const std::wstring &value) { extern "C" { JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeInitialize( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeInitialize( JNIEnv *env, jclass clazz, jstring jAumid, jboolean jIsAppx ) { std::lock_guard lock(g_mutex); @@ -357,7 +357,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_na } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeSetBadgeNumber( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeSetBadgeNumber( JNIEnv *env, jclass clazz, jint value ) { std::lock_guard lock(g_mutex); @@ -370,7 +370,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_na } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeSetBadgeGlyph( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeSetBadgeGlyph( JNIEnv *env, jclass clazz, jstring jGlyph ) { std::lock_guard lock(g_mutex); @@ -383,7 +383,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_na } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeClearBadge( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeClearBadge( JNIEnv *env, jclass clazz ) { std::lock_guard lock(g_mutex); @@ -394,7 +394,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_na } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeUninitialize( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsBadgeBridge_nativeUninitialize( JNIEnv *env, jclass clazz ) { std::lock_guard lock(g_mutex); @@ -408,7 +408,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsBadgeBridge_na // ============================================================================ JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeSetProcessAppId( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeSetProcessAppId( JNIEnv *env, jclass clazz, jstring jAumid ) { std::wstring aumid = toWString(env, jAumid); @@ -426,7 +426,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeBeginList( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeBeginList( JNIEnv *env, jclass clazz, jstring jAumid, jboolean jIsAppx ) { std::lock_guard lock(g_jl_mutex); @@ -468,7 +468,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAppendCategory( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAppendCategory( JNIEnv *env, jclass clazz, jstring jName, jobjectArray jTitles, jobjectArray jArguments, jobjectArray jDescriptions, jintArray jIconTypes, jobjectArray jIconPaths, jintArray jIconIndices @@ -517,7 +517,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAppendKnownCategory( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAppendKnownCategory( JNIEnv *env, jclass clazz, jint categoryId ) { std::lock_guard lock(g_jl_mutex); @@ -530,7 +530,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAddUserTasks( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeAddUserTasks( JNIEnv *env, jclass clazz, jobjectArray jTitles, jobjectArray jArguments, jobjectArray jDescriptions, jintArray jIconTypes, jobjectArray jIconPaths, jintArray jIconIndices, @@ -584,7 +584,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeCommitList( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeCommitList( JNIEnv *env, jclass clazz ) { std::lock_guard lock(g_jl_mutex); @@ -598,7 +598,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeDeleteList( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsJumpListBridge_nativeDeleteList( JNIEnv *env, jclass clazz, jstring jAumid, jboolean jIsAppx ) { std::lock_guard lock(g_jl_mutex); @@ -777,7 +777,7 @@ static void CleanupThumbBarState(JNIEnv *env, HWND hwnd) { // ============================================================================ JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeGetHwnd( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeGetHwnd( JNIEnv *env, jclass, jobject awtWindow) { HWND hwnd = GetHwndFromAwtWindow(env, awtWindow); @@ -789,7 +789,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ // ============================================================================ JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeSetOverlayIcon( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeSetOverlayIcon( JNIEnv *env, jclass, jobject awtWindow, jint iconType, jstring jIconPath, jint iconIndex, jstring jDescription) { @@ -812,7 +812,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeClearOverlayIcon( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeClearOverlayIcon( JNIEnv *env, jclass, jobject awtWindow) { std::lock_guard lock(g_tb_mutex); @@ -831,7 +831,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ // ============================================================================ JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarSetButtons( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarSetButtons( JNIEnv *env, jclass, jobject awtWindow, jintArray jIds, jobjectArray jTooltips, jintArray jFlags, jintArray jIconTypes, jobjectArray jIconPaths, jintArray jIconIndices, @@ -885,7 +885,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ // Resolve the method via the interface class, not GetObjectClass(jCallback). // Kotlin's `fun interface` lambdas produce synthetic classes that are not // registered as JNI-accessible under GraalVM native-image. - jclass cbClass = env->FindClass("io/github/kdroidfilter/nucleus/launcher/windows/ThumbBarClickListener"); + jclass cbClass = env->FindClass("dev/nucleusframework/nucleus/launcher/windows/ThumbBarClickListener"); jmethodID method = cbClass ? env->GetMethodID(cbClass, "onThumbButtonClick", "(I)V") : nullptr; if (cbClass) env->DeleteLocalRef(cbClass); if (method) { @@ -933,7 +933,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ state->buttonsAdded = true; if (jCallback) { - jclass cbClass = env->FindClass("io/github/kdroidfilter/nucleus/launcher/windows/ThumbBarClickListener"); + jclass cbClass = env->FindClass("dev/nucleusframework/nucleus/launcher/windows/ThumbBarClickListener"); jmethodID method = cbClass ? env->GetMethodID(cbClass, "onThumbButtonClick", "(I)V") : nullptr; if (cbClass) env->DeleteLocalRef(cbClass); if (method) { @@ -948,7 +948,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUpdateButtons( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUpdateButtons( JNIEnv *env, jclass, jobject awtWindow, jintArray jIds, jobjectArray jTooltips, jintArray jFlags, jintArray jIconTypes, jobjectArray jIconPaths, jintArray jIconIndices) @@ -993,7 +993,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUnregister( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUnregister( JNIEnv *env, jclass, jobject awtWindow) { std::lock_guard lock(g_tb_mutex); @@ -1004,7 +1004,7 @@ Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_ } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUnregisterByHwnd( +Java_dev_nucleusframework_nucleus_launcher_windows_NativeWindowsTaskbarBridge_nativeThumbBarUnregisterByHwnd( JNIEnv *env, jclass, jlong jHwnd) { std::lock_guard lock(g_tb_mutex); diff --git a/launcher-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.launcher-windows/reachability-metadata.json b/launcher-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.launcher-windows/reachability-metadata.json similarity index 54% rename from launcher-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.launcher-windows/reachability-metadata.json rename to launcher-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.launcher-windows/reachability-metadata.json index 0af9af427..c2ab6f445 100644 --- a/launcher-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.launcher-windows/reachability-metadata.json +++ b/launcher-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.launcher-windows/reachability-metadata.json @@ -1,19 +1,19 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsBadgeBridge", + "type": "dev.nucleusframework.nucleus.launcher.windows.NativeWindowsBadgeBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsJumpListBridge", + "type": "dev.nucleusframework.nucleus.launcher.windows.NativeWindowsJumpListBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsTaskbarBridge", + "type": "dev.nucleusframework.nucleus.launcher.windows.NativeWindowsTaskbarBridge", "jniAccessible": true }, { - "type": "io.github.kdroidfilter.nucleus.launcher.windows.ThumbBarClickListener", + "type": "dev.nucleusframework.nucleus.launcher.windows.ThumbBarClickListener", "jniAccessible": true, "methods": [ { diff --git a/linux-hidpi/build.gradle.kts b/linux-hidpi/build.gradle.kts index cdef09d7e..256911705 100644 --- a/linux-hidpi/build.gradle.kts +++ b/linux-hidpi/build.gradle.kts @@ -59,14 +59,14 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.linux-hidpi", publishVersion) + coordinates("dev.nucleusframework", "nucleus.linux-hidpi", publishVersion) pom { name.set("Nucleus Linux HiDPI") description.set( "Native HiDPI scale factor detection for Compose Desktop on Linux (GSettings, GDK_SCALE, Xft.dpi)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -77,16 +77,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/HiDpiLinuxBridge.kt b/linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/HiDpiLinuxBridge.kt similarity index 88% rename from linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/HiDpiLinuxBridge.kt rename to linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/HiDpiLinuxBridge.kt index c99459a96..8cec1892c 100644 --- a/linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/HiDpiLinuxBridge.kt +++ b/linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/HiDpiLinuxBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.hidpi +package dev.nucleusframework.nucleus.hidpi -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_linux_hidpi_jni" diff --git a/linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/LinuxHiDpi.kt b/linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/LinuxHiDpi.kt similarity index 98% rename from linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/LinuxHiDpi.kt rename to linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/LinuxHiDpi.kt index 36cee140b..0f3b35b52 100644 --- a/linux-hidpi/src/main/kotlin/io/github/kdroidfilter/nucleus/hidpi/LinuxHiDpi.kt +++ b/linux-hidpi/src/main/kotlin/dev/nucleusframework/nucleus/hidpi/LinuxHiDpi.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.hidpi +package dev.nucleusframework.nucleus.hidpi /** * Returns the native HiDPI scale factor for the current Linux display, diff --git a/linux-hidpi/src/main/native/linux/nucleus_hidpi_linux.c b/linux-hidpi/src/main/native/linux/nucleus_hidpi_linux.c index fa680b10d..800aa1cd8 100644 --- a/linux-hidpi/src/main/native/linux/nucleus_hidpi_linux.c +++ b/linux-hidpi/src/main/native/linux/nucleus_hidpi_linux.c @@ -158,7 +158,7 @@ static double readXftScale(void) { /* nativeGetScaleFactor — JNI entry point */ /* ------------------------------------------------------------------ */ JNIEXPORT jdouble JNICALL -Java_io_github_kdroidfilter_nucleus_hidpi_HiDpiLinuxBridge_nativeGetScaleFactor( +Java_dev_nucleusframework_nucleus_hidpi_HiDpiLinuxBridge_nativeGetScaleFactor( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -198,7 +198,7 @@ Java_io_github_kdroidfilter_nucleus_hidpi_HiDpiLinuxBridge_nativeGetScaleFactor( /* by the desktop session. */ /* ------------------------------------------------------------------ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_hidpi_HiDpiLinuxBridge_nativeApplyScaleToEnv( +Java_dev_nucleusframework_nucleus_hidpi_HiDpiLinuxBridge_nativeApplyScaleToEnv( JNIEnv *env, jclass clazz, jint scale) { (void)env; (void)clazz; diff --git a/linux-hidpi/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.linux-hidpi/native-image.properties b/linux-hidpi/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.linux-hidpi/native-image.properties new file mode 100644 index 000000000..d7626f2aa --- /dev/null +++ b/linux-hidpi/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.linux-hidpi/native-image.properties @@ -0,0 +1 @@ +Args = --initialize-at-run-time=dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge diff --git a/linux-hidpi/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.linux-hidpi/native-image.properties b/linux-hidpi/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.linux-hidpi/native-image.properties deleted file mode 100644 index abf6be571..000000000 --- a/linux-hidpi/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.linux-hidpi/native-image.properties +++ /dev/null @@ -1 +0,0 @@ -Args = --initialize-at-run-time=io.github.kdroidfilter.nucleus.hidpi.HiDpiLinuxBridge diff --git a/media-control/build.gradle.kts b/media-control/build.gradle.kts index b5e52cab5..6d5189459 100644 --- a/media-control/build.gradle.kts +++ b/media-control/build.gradle.kts @@ -102,7 +102,7 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.media-control", publishVersion) + coordinates("dev.nucleusframework", "nucleus.media-control", publishVersion) pom { name.set("Nucleus Media Control") @@ -110,7 +110,7 @@ mavenPublishing { "OS-level media controls (play/pause, metadata, seek) via MPRIS (Linux), " + "MPNowPlayingInfoCenter (macOS), and SMTC (Windows)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -121,16 +121,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlEvent.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlEvent.kt similarity index 96% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlEvent.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlEvent.kt index 30d5c6c93..ca7b71fe6 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlEvent.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlEvent.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.media.control +package dev.nucleusframework.nucleus.media.control /** * Events sent by the OS media controls to the application. diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlService.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlService.kt similarity index 95% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlService.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlService.kt index 7482bf371..992a8299a 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaControlService.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaControlService.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.media.control - -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.media.control.linux.NativeLinuxBridge -import io.github.kdroidfilter.nucleus.media.control.macos.NativeMacOsBridge -import io.github.kdroidfilter.nucleus.media.control.windows.NativeWindowsBridge +package dev.nucleusframework.nucleus.media.control + +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.media.control.linux.NativeLinuxBridge +import dev.nucleusframework.nucleus.media.control.macos.NativeMacOsBridge +import dev.nucleusframework.nucleus.media.control.windows.NativeWindowsBridge import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import javax.swing.SwingUtilities diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaMetadata.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaMetadata.kt similarity index 92% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaMetadata.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaMetadata.kt index 01cd2057e..ea9a3c310 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaMetadata.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaMetadata.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.media.control +package dev.nucleusframework.nucleus.media.control /** * Media metadata for the system media center. diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaPlaybackStatus.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaPlaybackStatus.kt similarity index 89% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaPlaybackStatus.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaPlaybackStatus.kt index a3f91d448..7820e79de 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/MediaPlaybackStatus.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/MediaPlaybackStatus.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.media.control +package dev.nucleusframework.nucleus.media.control /** The current playback status of the media player. */ enum class MediaPlaybackStatus { diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/linux/NativeLinuxBridge.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/linux/NativeLinuxBridge.kt similarity index 92% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/linux/NativeLinuxBridge.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/linux/NativeLinuxBridge.kt index 7e1dc0072..bcf016aac 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/linux/NativeLinuxBridge.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/linux/NativeLinuxBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.media.control.linux +package dev.nucleusframework.nucleus.media.control.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_media_control_linux" diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/macos/NativeMacOsBridge.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/macos/NativeMacOsBridge.kt similarity index 92% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/macos/NativeMacOsBridge.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/macos/NativeMacOsBridge.kt index 10b609f5e..752faad4e 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/macos/NativeMacOsBridge.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/macos/NativeMacOsBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.media.control.macos +package dev.nucleusframework.nucleus.media.control.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_media_control_macos" diff --git a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/windows/NativeWindowsBridge.kt b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/windows/NativeWindowsBridge.kt similarity index 92% rename from media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/windows/NativeWindowsBridge.kt rename to media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/windows/NativeWindowsBridge.kt index 34c8e7071..1718acc69 100644 --- a/media-control/src/main/kotlin/io/github/kdroidfilter/nucleus/media/control/windows/NativeWindowsBridge.kt +++ b/media-control/src/main/kotlin/dev/nucleusframework/nucleus/media/control/windows/NativeWindowsBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.media.control.windows +package dev.nucleusframework.nucleus.media.control.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_media_control_windows" diff --git a/media-control/src/main/native/linux/nucleus_media_control_linux.c b/media-control/src/main/native/linux/nucleus_media_control_linux.c index c75516f1e..77c78216e 100644 --- a/media-control/src/main/native/linux/nucleus_media_control_linux.c +++ b/media-control/src/main/native/linux/nucleus_media_control_linux.c @@ -151,7 +151,7 @@ static void release_env(int attached) { static int ensure_callback_ids(JNIEnv *env) { if (g_bridge_class != NULL) return 1; jclass cls = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/media/control/linux/NativeLinuxBridge"); + "dev/nucleusframework/nucleus/media/control/linux/NativeLinuxBridge"); if (!cls) { if ((*env)->ExceptionCheck(env)) (*env)->ExceptionClear(env); return 0; } g_bridge_class = (jclass)(*env)->NewGlobalRef(env, cls); (*env)->DeleteLocalRef(env, cls); @@ -294,7 +294,7 @@ static GVariant *build_metadata_locked(void) { char track_path[96]; snprintf(track_path, sizeof(track_path), - "/io/github/kdroidfilter/nucleus/track/%" G_GUINT64_FORMAT, + "/dev/nucleusframework/nucleus/track/%" G_GUINT64_FORMAT, g_track_counter); g_variant_builder_add(&b, "{sv}", "mpris:trackid", g_variant_new_object_path(track_path)); @@ -658,7 +658,7 @@ static void *service_thread_func(void *arg) { /* ===================================================================== */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeConfigure( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeConfigure( JNIEnv *env, jclass clazz, jstring j_bus_name, jstring j_display_name) { (void)clazz; @@ -675,7 +675,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeSetMetadata( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeSetMetadata( JNIEnv *env, jclass clazz, jstring j_title, jstring j_artist, jstring j_album, jstring j_cover, jlong duration_ms) { @@ -704,7 +704,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeSetPlaybackState( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeSetPlaybackState( JNIEnv *env, jclass clazz, jint status, jlong position_ms) { (void)env; (void)clazz; @@ -733,7 +733,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeSetVolume( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeSetVolume( JNIEnv *env, jclass clazz, jdouble volume) { (void)env; (void)clazz; @@ -750,7 +750,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_native } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeStartListening( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeStartListening( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -777,7 +777,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_native } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_linux_NativeLinuxBridge_nativeStopListening( +Java_dev_nucleusframework_nucleus_media_control_linux_NativeLinuxBridge_nativeStopListening( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/media-control/src/main/native/macos/nucleus_media_control_macos.m b/media-control/src/main/native/macos/nucleus_media_control_macos.m index d17fba24f..771079902 100644 --- a/media-control/src/main/native/macos/nucleus_media_control_macos.m +++ b/media-control/src/main/native/macos/nucleus_media_control_macos.m @@ -29,7 +29,7 @@ #define STATUS_PAUSED 1 #define STATUS_PLAYING 2 -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/media/control/macos/NativeMacOsBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/media/control/macos/NativeMacOsBridge" // ============================================================================ // Globals @@ -178,7 +178,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeConfigure( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeConfigure( JNIEnv *env, jclass clazz, jstring jBusName, jstring jDisplayName) { (void)env; (void)clazz; (void)jBusName; (void)jDisplayName; @@ -186,7 +186,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeSetMetadata( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeSetMetadata( JNIEnv *env, jclass clazz, jstring jTitle, jstring jArtist, jstring jAlbum, jstring jCover, jlong durationMs) { @@ -240,7 +240,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeSetPlaybackState( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeSetPlaybackState( JNIEnv *env, jclass clazz, jint status, jlong positionMs) { (void)env; (void)clazz; @@ -265,7 +265,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeSetVolume( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeSetVolume( JNIEnv *env, jclass clazz, jdouble volume) { (void)env; (void)clazz; (void)volume; @@ -277,7 +277,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { // ============================================================================ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeStartListening( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeStartListening( JNIEnv *env, jclass clazz) { (void)clazz; @@ -356,7 +356,7 @@ static void loadArtworkAsync(NSString *url, uint64_t counter) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_macos_NativeMacOsBridge_nativeStopListening( +Java_dev_nucleusframework_nucleus_media_control_macos_NativeMacOsBridge_nativeStopListening( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/media-control/src/main/native/windows/nucleus_media_control_windows.cpp b/media-control/src/main/native/windows/nucleus_media_control_windows.cpp index 8be3015ec..0492a6853 100644 --- a/media-control/src/main/native/windows/nucleus_media_control_windows.cpp +++ b/media-control/src/main/native/windows/nucleus_media_control_windows.cpp @@ -54,7 +54,7 @@ using namespace ABI::Windows::Media; using namespace ABI::Windows::Foundation; using namespace ABI::Windows::Storage::Streams; -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/media/control/windows/NativeWindowsBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/media/control/windows/NativeWindowsBridge" // ============================================================================ // Globals @@ -420,7 +420,7 @@ static void patchStartMenuShortcut(const std::wstring &appName, const std::wstri extern "C" { JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeConfigure( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeConfigure( JNIEnv *env, jclass, jstring jAumid, jstring jDisplayName ) { std::lock_guard lock(g_mutex); @@ -453,7 +453,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_na } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeSetMetadata( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeSetMetadata( JNIEnv *env, jclass, jstring jTitle, jstring jArtist, jstring jAlbum, jstring jCoverUrl, jlong durationMs ) { @@ -529,7 +529,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_na } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeSetPlaybackState( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeSetPlaybackState( JNIEnv *, jclass, jint status, jlong positionMs ) { std::lock_guard lock(g_mutex); @@ -555,14 +555,14 @@ Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_na } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeSetVolume( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeSetVolume( JNIEnv *, jclass, jdouble /*volume*/ ) { // SMTC has no per-app volume channel — no-op. } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeStartListening( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeStartListening( JNIEnv *, jclass ) { std::lock_guard lock(g_mutex); @@ -574,7 +574,7 @@ Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_na } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_media_control_windows_NativeWindowsBridge_nativeStopListening( +Java_dev_nucleusframework_nucleus_media_control_windows_NativeWindowsBridge_nativeStopListening( JNIEnv *, jclass ) { std::lock_guard lock(g_mutex); diff --git a/media-control/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.media-control/reachability-metadata.json b/media-control/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.media-control/reachability-metadata.json similarity index 89% rename from media-control/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.media-control/reachability-metadata.json rename to media-control/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.media-control/reachability-metadata.json index 862b71c31..6482e2e7f 100644 --- a/media-control/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.media-control/reachability-metadata.json +++ b/media-control/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.media-control/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.media.control.linux.NativeLinuxBridge", + "type": "dev.nucleusframework.nucleus.media.control.linux.NativeLinuxBridge", "jniAccessible": true, "methods": [ { "name": "nativeConfigure", "parameterTypes": ["java.lang.String", "java.lang.String"] }, @@ -14,7 +14,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.media.control.macos.NativeMacOsBridge", + "type": "dev.nucleusframework.nucleus.media.control.macos.NativeMacOsBridge", "jniAccessible": true, "methods": [ { "name": "nativeConfigure", "parameterTypes": ["java.lang.String", "java.lang.String"] }, @@ -27,7 +27,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.media.control.windows.NativeWindowsBridge", + "type": "dev.nucleusframework.nucleus.media.control.windows.NativeWindowsBridge", "jniAccessible": true, "methods": [ { "name": "nativeConfigure", "parameterTypes": ["java.lang.String", "java.lang.String"] }, diff --git a/menu-macos/build.gradle.kts b/menu-macos/build.gradle.kts index 8303e1f9c..90037dc91 100644 --- a/menu-macos/build.gradle.kts +++ b/menu-macos/build.gradle.kts @@ -63,14 +63,14 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.menu-macos", publishVersion) + coordinates("dev.nucleusframework", "nucleus.menu-macos", publishVersion) pom { name.set("Nucleus Menu macOS") description.set( "Complete NSMenu / NSMenuItem / NSMenuItemBadge / NSMenuDelegate mapping for JVM desktop applications via JNI", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -81,16 +81,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeMenuBar.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeMenuBar.kt similarity index 99% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeMenuBar.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeMenuBar.kt index 004d37508..5d3c1c890 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeMenuBar.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeMenuBar.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeNsMenuBridge.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeNsMenuBridge.kt similarity index 98% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeNsMenuBridge.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeNsMenuBridge.kt index f4958f0af..5cacbc45d 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NativeNsMenuBridge.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NativeNsMenuBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.util.concurrent.ConcurrentHashMap import javax.swing.SwingUtilities diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenu.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenu.kt similarity index 99% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenu.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenu.kt index 8e6105de5..24a6922f7 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenu.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenu.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos import java.util.concurrent.atomic.AtomicBoolean diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuDelegate.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuDelegate.kt similarity index 95% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuDelegate.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuDelegate.kt index fc70f2450..9657873f8 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuDelegate.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuDelegate.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos /** * Kotlin mapping of NSMenuDelegate. diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItem.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItem.kt similarity index 99% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItem.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItem.kt index 687cc359e..c6b2af35d 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItem.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItem.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos import java.util.concurrent.atomic.AtomicBoolean diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItemBadge.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItemBadge.kt similarity index 96% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItemBadge.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItemBadge.kt index 79ca7d4f8..32ceb545b 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuItemBadge.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuItemBadge.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos /** * Represents an NSMenuItemBadge (macOS 14+). diff --git a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuTypes.kt b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuTypes.kt similarity index 94% rename from menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuTypes.kt rename to menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuTypes.kt index 7778418b8..d47bdb018 100644 --- a/menu-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/menu/macos/NsMenuTypes.kt +++ b/menu-macos/src/main/kotlin/dev/nucleusframework/nucleus/menu/macos/NsMenuTypes.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.menu.macos +package dev.nucleusframework.nucleus.menu.macos /** NSControlStateValue used by NSMenuItem.state. */ enum class NsMenuItemState( @@ -91,7 +91,7 @@ sealed class NsMenuItemImage { /** * SF Symbol image (macOS 11+). * - * Accepts a raw symbol name string or a type-safe [SFSymbol][io.github.kdroidfilter.nucleus.sfsymbols.SFSymbol] + * Accepts a raw symbol name string or a type-safe [SFSymbol][dev.nucleusframework.nucleus.sfsymbols.SFSymbol] * constant from the `sf-symbols` module. * * ```kotlin @@ -106,9 +106,9 @@ sealed class NsMenuItemImage { val name: String, val accessibilityDescription: String? = null, ) : NsMenuItemImage() { - /** Creates an image from a type-safe [SFSymbol][io.github.kdroidfilter.nucleus.sfsymbols.SFSymbol] constant. */ + /** Creates an image from a type-safe [SFSymbol][dev.nucleusframework.nucleus.sfsymbols.SFSymbol] constant. */ constructor( - symbol: io.github.kdroidfilter.nucleus.sfsymbols.SFSymbol, + symbol: dev.nucleusframework.nucleus.sfsymbols.SFSymbol, accessibilityDescription: String? = null, ) : this(symbol.symbolName, accessibilityDescription) } diff --git a/menu-macos/src/main/native/macos/nucleus_menu_macos.m b/menu-macos/src/main/native/macos/nucleus_menu_macos.m index 27914139d..6326447c1 100644 --- a/menu-macos/src/main/native/macos/nucleus_menu_macos.m +++ b/menu-macos/src/main/native/macos/nucleus_menu_macos.m @@ -17,9 +17,9 @@ // ============================================================================ #define JNI_FN(name) \ - Java_io_github_kdroidfilter_nucleus_menu_macos_NativeNsMenuBridge_##name + Java_dev_nucleusframework_nucleus_menu_macos_NativeNsMenuBridge_##name -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/menu/macos/NativeNsMenuBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/menu/macos/NativeNsMenuBridge" // ============================================================================ // Handle helpers diff --git a/menu-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.menu-macos/reachability-metadata.json b/menu-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.menu-macos/reachability-metadata.json similarity index 91% rename from menu-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.menu-macos/reachability-metadata.json rename to menu-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.menu-macos/reachability-metadata.json index 0a0fd2879..0efded72e 100644 --- a/menu-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.menu-macos/reachability-metadata.json +++ b/menu-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.menu-macos/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.menu.macos.NativeNsMenuBridge", + "type": "dev.nucleusframework.nucleus.menu.macos.NativeNsMenuBridge", "jniAccessible": true, "methods": [ { diff --git a/mkdocs.yml b/mkdocs.yml index 706779a87..88ed02874 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,8 +1,8 @@ site_name: Nucleus site_description: The Kotlin framework for native desktop apps — deep OS integration (notifications, tray, launcher, decorated windows, scheduler, media control) plus packaging on macOS, Windows, and Linux site_url: https://nucleusframework.dev -repo_url: https://github.com/kdroidFilter/Nucleus -repo_name: kdroidFilter/Nucleus +repo_url: https://github.com/nucleusframework/Nucleus +repo_name: nucleusframework/Nucleus edit_uri: edit/main/docs/ theme: @@ -156,9 +156,9 @@ markdown_extensions: extra_css: - stylesheets/extra.css -copyright: Made with ❤️ by Elie Gambache - KdroidFilter +copyright: Made with ❤️ by Elie Gambache - KdroidFilter extra: social: - icon: fontawesome/brands/github - link: https://github.com/kdroidFilter/Nucleus + link: https://github.com/nucleusframework/Nucleus diff --git a/native-http-ktor/build.gradle.kts b/native-http-ktor/build.gradle.kts index 4268c56c4..a54c5ccb2 100644 --- a/native-http-ktor/build.gradle.kts +++ b/native-http-ktor/build.gradle.kts @@ -38,12 +38,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.native-http-ktor", publishVersion) + coordinates("dev.nucleusframework", "nucleus.native-http-ktor", publishVersion) pom { name.set("Nucleus Native HTTP Ktor") description.set("Engine-agnostic Ktor HttpClient extension with native OS certificate trust") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -54,16 +54,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/native-http-ktor/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt b/native-http-ktor/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt similarity index 93% rename from native-http-ktor/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt rename to native-http-ktor/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt index d75533f43..d2507e2cd 100644 --- a/native-http-ktor/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt +++ b/native-http-ktor/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtension.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativehttp.ktor +package dev.nucleusframework.nucleus.nativehttp.ktor -import io.github.kdroidfilter.nucleus.nativessl.NativeTrustManager +import dev.nucleusframework.nucleus.nativessl.NativeTrustManager import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngineConfig diff --git a/native-http-ktor/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt b/native-http-ktor/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt similarity index 95% rename from native-http-ktor/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt rename to native-http-ktor/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt index 1a9eba392..cb8853ec8 100644 --- a/native-http-ktor/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt +++ b/native-http-ktor/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/ktor/NativeSslKtorExtensionTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.nativehttp.ktor +package dev.nucleusframework.nucleus.nativehttp.ktor import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO diff --git a/native-http-okhttp/build.gradle.kts b/native-http-okhttp/build.gradle.kts index 750a89326..58ce91c01 100644 --- a/native-http-okhttp/build.gradle.kts +++ b/native-http-okhttp/build.gradle.kts @@ -30,12 +30,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.native-http-okhttp", publishVersion) + coordinates("dev.nucleusframework", "nucleus.native-http-okhttp", publishVersion) pom { name.set("Nucleus Native HTTP OkHttp") description.set("OkHttpClient factory with native OS certificate trust") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -46,16 +46,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/native-http-okhttp/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt b/native-http-okhttp/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt similarity index 73% rename from native-http-okhttp/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt rename to native-http-okhttp/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt index 494e0ecf4..8e25781dc 100644 --- a/native-http-okhttp/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt +++ b/native-http-okhttp/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClient.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativehttp.okhttp +package dev.nucleusframework.nucleus.nativehttp.okhttp -import io.github.kdroidfilter.nucleus.nativessl.NativeTrustManager +import dev.nucleusframework.nucleus.nativessl.NativeTrustManager import okhttp3.OkHttpClient object NativeOkHttpClient { diff --git a/native-http-okhttp/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt b/native-http-okhttp/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt similarity index 90% rename from native-http-okhttp/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt rename to native-http-okhttp/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt index 2a44a953f..0a3f2d3e4 100644 --- a/native-http-okhttp/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt +++ b/native-http-okhttp/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/okhttp/NativeOkHttpClientTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.nativehttp.okhttp +package dev.nucleusframework.nucleus.nativehttp.okhttp import okhttp3.Request import org.junit.Assert.assertEquals diff --git a/native-http/build.gradle.kts b/native-http/build.gradle.kts index 2c4e633f4..e25234e91 100644 --- a/native-http/build.gradle.kts +++ b/native-http/build.gradle.kts @@ -29,12 +29,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.native-http", publishVersion) + coordinates("dev.nucleusframework", "nucleus.native-http", publishVersion) pom { name.set("Nucleus Native HTTP") description.set("java.net.http.HttpClient factory with native OS certificate trust") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -45,16 +45,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/native-http/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClient.kt b/native-http/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClient.kt similarity index 82% rename from native-http/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClient.kt rename to native-http/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClient.kt index 5d0096824..058800bd1 100644 --- a/native-http/src/main/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClient.kt +++ b/native-http/src/main/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClient.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativehttp +package dev.nucleusframework.nucleus.nativehttp -import io.github.kdroidfilter.nucleus.nativessl.NativeTrustManager +import dev.nucleusframework.nucleus.nativessl.NativeTrustManager import java.net.http.HttpClient import javax.net.ssl.SSLParameters diff --git a/native-http/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClientTest.kt b/native-http/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClientTest.kt similarity index 92% rename from native-http/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClientTest.kt rename to native-http/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClientTest.kt index fbaad3d00..135f2b58a 100644 --- a/native-http/src/test/kotlin/io/github/kdroidfilter/nucleus/nativehttp/NativeHttpClientTest.kt +++ b/native-http/src/test/kotlin/dev/nucleusframework/nucleus/nativehttp/NativeHttpClientTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.nativehttp +package dev.nucleusframework.nucleus.nativehttp import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue diff --git a/native-ssl/build.gradle.kts b/native-ssl/build.gradle.kts index ee7e994b8..0b65b0da9 100644 --- a/native-ssl/build.gradle.kts +++ b/native-ssl/build.gradle.kts @@ -78,12 +78,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.native-ssl", publishVersion) + coordinates("dev.nucleusframework", "nucleus.native-ssl", publishVersion) pom { name.set("Nucleus Native SSL") description.set("Native OS certificate trust integration for JVM applications on macOS") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -94,16 +94,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/Logger.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/Logger.kt similarity index 80% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/Logger.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/Logger.kt index 207c10470..951034c0d 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/Logger.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/Logger.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativessl +package dev.nucleusframework.nucleus.nativessl -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging internal fun debugln( tag: String, diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeCertificateProvider.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeCertificateProvider.kt similarity index 77% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeCertificateProvider.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeCertificateProvider.kt index 1e00dd3c6..22b385c34 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeCertificateProvider.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeCertificateProvider.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.nativessl +package dev.nucleusframework.nucleus.nativessl -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.nativessl.linux.LinuxCertificateProvider -import io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge -import io.github.kdroidfilter.nucleus.nativessl.windows.WindowsCertificateProvider +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.nativessl.linux.LinuxCertificateProvider +import dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge +import dev.nucleusframework.nucleus.nativessl.windows.WindowsCertificateProvider import java.security.cert.CertificateFactory import java.security.cert.X509Certificate diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeTrustManager.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt similarity index 97% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeTrustManager.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt index 284ecfb16..28a0b4d79 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeTrustManager.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.nativessl +package dev.nucleusframework.nucleus.nativessl import java.security.KeyStore import javax.net.ssl.SSLContext diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/linux/LinuxCertificateProvider.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/linux/LinuxCertificateProvider.kt similarity index 97% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/linux/LinuxCertificateProvider.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/linux/LinuxCertificateProvider.kt index 0696633e3..2aadf7f21 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/linux/LinuxCertificateProvider.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/linux/LinuxCertificateProvider.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativessl.linux +package dev.nucleusframework.nucleus.nativessl.linux -import io.github.kdroidfilter.nucleus.nativessl.debugln +import dev.nucleusframework.nucleus.nativessl.debugln import java.io.BufferedReader import java.io.File import java.io.InputStreamReader diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/mac/NativeSslBridge.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/mac/NativeSslBridge.kt similarity index 84% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/mac/NativeSslBridge.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/mac/NativeSslBridge.kt index a97db5c44..4999d441b 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/mac/NativeSslBridge.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/mac/NativeSslBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.nativessl.mac +package dev.nucleusframework.nucleus.nativessl.mac -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.nativessl.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.nativessl.debugln import java.util.logging.Level import java.util.logging.Logger diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsCertificateProvider.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsCertificateProvider.kt similarity index 96% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsCertificateProvider.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsCertificateProvider.kt index 1f4a6fe45..c422f6f3f 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsCertificateProvider.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsCertificateProvider.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.nativessl.windows +package dev.nucleusframework.nucleus.nativessl.windows -import io.github.kdroidfilter.nucleus.nativessl.debugln +import dev.nucleusframework.nucleus.nativessl.debugln import java.security.KeyStore private const val TAG = "WindowsCertificateProvider" diff --git a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsSslBridge.kt b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsSslBridge.kt similarity index 83% rename from native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsSslBridge.kt rename to native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsSslBridge.kt index a9f7ccc9c..b78eecc55 100644 --- a/native-ssl/src/main/kotlin/io/github/kdroidfilter/nucleus/nativessl/windows/WindowsSslBridge.kt +++ b/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/windows/WindowsSslBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.nativessl.windows +package dev.nucleusframework.nucleus.nativessl.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.nativessl.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.nativessl.debugln import java.util.logging.Level import java.util.logging.Logger diff --git a/native-ssl/src/main/native/macos/NucleusSslBridge.m b/native-ssl/src/main/native/macos/NucleusSslBridge.m index 059bda07d..1e196f2b3 100644 --- a/native-ssl/src/main/native/macos/NucleusSslBridge.m +++ b/native-ssl/src/main/native/macos/NucleusSslBridge.m @@ -212,7 +212,7 @@ static BOOL isTrustedRoot(SecCertificateRef cert) { } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_nativessl_mac_NativeSslBridge_nativeGetSystemCertificates( +Java_dev_nucleusframework_nucleus_nativessl_mac_NativeSslBridge_nativeGetSystemCertificates( JNIEnv *env, jclass clazz) { CFMutableArrayRef allDer = diff --git a/native-ssl/src/main/native/windows/NucleusSslBridge.c b/native-ssl/src/main/native/windows/NucleusSslBridge.c index d8d096cd3..f58b1feee 100644 --- a/native-ssl/src/main/native/windows/NucleusSslBridge.c +++ b/native-ssl/src/main/native/windows/NucleusSslBridge.c @@ -141,7 +141,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_nativessl_windows_WindowsSslBridge_nativeGetSystemCertificates( +Java_dev_nucleusframework_nucleus_nativessl_windows_WindowsSslBridge_nativeGetSystemCertificates( JNIEnv *env, jclass clazz) { (void)clazz; diff --git a/native-ssl/src/test/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeSslTest.kt b/native-ssl/src/test/kotlin/dev/nucleusframework/nucleus/nativessl/NativeSslTest.kt similarity index 97% rename from native-ssl/src/test/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeSslTest.kt rename to native-ssl/src/test/kotlin/dev/nucleusframework/nucleus/nativessl/NativeSslTest.kt index 4b24f6ab2..de61803ec 100644 --- a/native-ssl/src/test/kotlin/io/github/kdroidfilter/nucleus/nativessl/NativeSslTest.kt +++ b/native-ssl/src/test/kotlin/dev/nucleusframework/nucleus/nativessl/NativeSslTest.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.nativessl +package dev.nucleusframework.nucleus.nativessl -import io.github.kdroidfilter.nucleus.nativessl.linux.LinuxCertificateProvider -import io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge -import io.github.kdroidfilter.nucleus.nativessl.windows.WindowsCertificateProvider -import io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge +import dev.nucleusframework.nucleus.nativessl.linux.LinuxCertificateProvider +import dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge +import dev.nucleusframework.nucleus.nativessl.windows.WindowsCertificateProvider +import dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue import org.junit.Test diff --git a/notification-common/build.gradle.kts b/notification-common/build.gradle.kts index c8c31b97e..700cc8647 100644 --- a/notification-common/build.gradle.kts +++ b/notification-common/build.gradle.kts @@ -33,12 +33,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.notification-common", publishVersion) + coordinates("dev.nucleusframework", "nucleus.notification-common", publishVersion) pom { name.set("Nucleus Notification Common") description.set("Cross-platform notification abstraction for Compose Desktop (Windows + macOS + Linux)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -49,16 +49,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/DismissReason.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/DismissReason.kt similarity index 88% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/DismissReason.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/DismissReason.kt index 31b7ca583..7c7f77acb 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/DismissReason.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/DismissReason.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.common +package dev.nucleusframework.nucleus.notification.common /** Unified reason why a notification was dismissed, mapped from platform-specific reasons. */ enum class DismissReason { diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/Notification.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/Notification.kt similarity index 98% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/Notification.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/Notification.kt index ab3e6c76b..ee0ac74cb 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/Notification.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/Notification.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.common +package dev.nucleusframework.nucleus.notification.common private const val MAX_BUTTONS = 5 diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationHandle.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationHandle.kt similarity index 75% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationHandle.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationHandle.kt index c42371ed4..4175e7a9c 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationHandle.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationHandle.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.notification.common +package dev.nucleusframework.nucleus.notification.common -import io.github.kdroidfilter.nucleus.notification.common.internal.PlatformDispatcher +import dev.nucleusframework.nucleus.notification.common.internal.PlatformDispatcher /** * Opaque handle to a sent notification. diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationManager.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationManager.kt similarity index 87% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationManager.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationManager.kt index fd47802eb..f78b5634d 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationManager.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationManager.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.notification.common +package dev.nucleusframework.nucleus.notification.common -import io.github.kdroidfilter.nucleus.notification.common.internal.DispatcherFactory -import io.github.kdroidfilter.nucleus.notification.common.internal.PlatformDispatcher +import dev.nucleusframework.nucleus.notification.common.internal.DispatcherFactory +import dev.nucleusframework.nucleus.notification.common.internal.PlatformDispatcher import java.util.logging.Logger /** diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationResult.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationResult.kt similarity index 85% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationResult.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationResult.kt index 861f6975b..5a244a8bd 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/NotificationResult.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/NotificationResult.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.common +package dev.nucleusframework.nucleus.notification.common /** Result of sending a notification. */ sealed class NotificationResult { diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/CallbackRegistry.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/CallbackRegistry.kt similarity index 87% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/CallbackRegistry.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/CallbackRegistry.kt index 89ff5bb4d..ac264ad58 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/CallbackRegistry.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/CallbackRegistry.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal +package dev.nucleusframework.nucleus.notification.common.internal import java.util.concurrent.ConcurrentHashMap diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/DispatcherFactory.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/DispatcherFactory.kt similarity index 92% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/DispatcherFactory.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/DispatcherFactory.kt index 5f4814d51..22f5611c2 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/DispatcherFactory.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/DispatcherFactory.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal +package dev.nucleusframework.nucleus.notification.common.internal import java.util.Locale diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/LinuxDispatcher.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/LinuxDispatcher.kt similarity index 82% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/LinuxDispatcher.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/LinuxDispatcher.kt index f6dcd884e..74b38e8e5 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/LinuxDispatcher.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/LinuxDispatcher.kt @@ -1,18 +1,18 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal - -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon -import io.github.kdroidfilter.nucleus.notification.common.DismissReason -import io.github.kdroidfilter.nucleus.notification.common.Notification -import io.github.kdroidfilter.nucleus.notification.common.NotificationHandle -import io.github.kdroidfilter.nucleus.notification.common.NotificationResult -import io.github.kdroidfilter.nucleus.notification.linux.CloseReason -import io.github.kdroidfilter.nucleus.notification.linux.LinuxNotificationCenter -import io.github.kdroidfilter.nucleus.notification.linux.LinuxNotificationListener -import io.github.kdroidfilter.nucleus.notification.linux.NotificationAction -import io.github.kdroidfilter.nucleus.notification.linux.NotificationHints +package dev.nucleusframework.nucleus.notification.common.internal + +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.notification.common.DismissReason +import dev.nucleusframework.nucleus.notification.common.Notification +import dev.nucleusframework.nucleus.notification.common.NotificationHandle +import dev.nucleusframework.nucleus.notification.common.NotificationResult +import dev.nucleusframework.nucleus.notification.linux.CloseReason +import dev.nucleusframework.nucleus.notification.linux.LinuxNotificationCenter +import dev.nucleusframework.nucleus.notification.linux.LinuxNotificationListener +import dev.nucleusframework.nucleus.notification.linux.NotificationAction +import dev.nucleusframework.nucleus.notification.linux.NotificationHints import java.util.logging.Level import java.util.logging.Logger -import io.github.kdroidfilter.nucleus.notification.linux.Notification as LinuxNotification +import dev.nucleusframework.nucleus.notification.linux.Notification as LinuxNotification internal class LinuxDispatcher private constructor() : PlatformDispatcher { private val logger = Logger.getLogger(LinuxDispatcher::class.java.simpleName) @@ -60,7 +60,7 @@ internal class LinuxDispatcher private constructor() : PlatformDispatcher { companion object { fun createIfAvailable(): LinuxDispatcher? = try { - Class.forName("io.github.kdroidfilter.nucleus.notification.linux.LinuxNotificationCenter") + Class.forName("dev.nucleusframework.nucleus.notification.linux.LinuxNotificationCenter") LinuxDispatcher() } catch (_: ClassNotFoundException) { null diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/MacOsDispatcher.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/MacOsDispatcher.kt similarity index 85% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/MacOsDispatcher.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/MacOsDispatcher.kt index 5978c10b4..c8686edbe 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/MacOsDispatcher.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/MacOsDispatcher.kt @@ -1,21 +1,21 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal - -import io.github.kdroidfilter.nucleus.notification.ActionOption -import io.github.kdroidfilter.nucleus.notification.CategoryOption -import io.github.kdroidfilter.nucleus.notification.DeliveredNotification -import io.github.kdroidfilter.nucleus.notification.NotificationAction -import io.github.kdroidfilter.nucleus.notification.NotificationAttachment -import io.github.kdroidfilter.nucleus.notification.NotificationCategory -import io.github.kdroidfilter.nucleus.notification.NotificationCenter -import io.github.kdroidfilter.nucleus.notification.NotificationCenterDelegate -import io.github.kdroidfilter.nucleus.notification.NotificationContent -import io.github.kdroidfilter.nucleus.notification.NotificationRequest -import io.github.kdroidfilter.nucleus.notification.NotificationResponse -import io.github.kdroidfilter.nucleus.notification.PresentationOption -import io.github.kdroidfilter.nucleus.notification.common.DismissReason -import io.github.kdroidfilter.nucleus.notification.common.Notification -import io.github.kdroidfilter.nucleus.notification.common.NotificationHandle -import io.github.kdroidfilter.nucleus.notification.common.NotificationResult +package dev.nucleusframework.nucleus.notification.common.internal + +import dev.nucleusframework.nucleus.notification.ActionOption +import dev.nucleusframework.nucleus.notification.CategoryOption +import dev.nucleusframework.nucleus.notification.DeliveredNotification +import dev.nucleusframework.nucleus.notification.NotificationAction +import dev.nucleusframework.nucleus.notification.NotificationAttachment +import dev.nucleusframework.nucleus.notification.NotificationCategory +import dev.nucleusframework.nucleus.notification.NotificationCenter +import dev.nucleusframework.nucleus.notification.NotificationCenterDelegate +import dev.nucleusframework.nucleus.notification.NotificationContent +import dev.nucleusframework.nucleus.notification.NotificationRequest +import dev.nucleusframework.nucleus.notification.NotificationResponse +import dev.nucleusframework.nucleus.notification.PresentationOption +import dev.nucleusframework.nucleus.notification.common.DismissReason +import dev.nucleusframework.nucleus.notification.common.Notification +import dev.nucleusframework.nucleus.notification.common.NotificationHandle +import dev.nucleusframework.nucleus.notification.common.NotificationResult import java.util.UUID import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CountDownLatch @@ -69,7 +69,7 @@ internal class MacOsDispatcher private constructor() : PlatformDispatcher { fun createIfAvailable(): MacOsDispatcher? = try { - Class.forName("io.github.kdroidfilter.nucleus.notification.NotificationCenter") + Class.forName("dev.nucleusframework.nucleus.notification.NotificationCenter") MacOsDispatcher() } catch (_: ClassNotFoundException) { null diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/NotificationCallbacks.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/NotificationCallbacks.kt similarity index 60% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/NotificationCallbacks.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/NotificationCallbacks.kt index 6ad455f75..f6766d141 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/NotificationCallbacks.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/NotificationCallbacks.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal +package dev.nucleusframework.nucleus.notification.common.internal -import io.github.kdroidfilter.nucleus.notification.common.DismissReason +import dev.nucleusframework.nucleus.notification.common.DismissReason internal data class NotificationCallbacks( val onActivated: (() -> Unit)?, diff --git a/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/PlatformDispatcher.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/PlatformDispatcher.kt new file mode 100644 index 000000000..099774e3b --- /dev/null +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/PlatformDispatcher.kt @@ -0,0 +1,14 @@ +package dev.nucleusframework.nucleus.notification.common.internal + +import dev.nucleusframework.nucleus.notification.common.Notification +import dev.nucleusframework.nucleus.notification.common.NotificationResult + +internal interface PlatformDispatcher { + fun isAvailable(): Boolean + + fun initialize() + + fun send(notification: Notification): NotificationResult + + fun dismiss(platformId: String) +} diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/WindowsDispatcher.kt b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/WindowsDispatcher.kt similarity index 89% rename from notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/WindowsDispatcher.kt rename to notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/WindowsDispatcher.kt index e9508588a..bc144fa9a 100644 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/WindowsDispatcher.kt +++ b/notification-common/src/main/kotlin/dev/nucleusframework/nucleus/notification/common/internal/WindowsDispatcher.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal - -import io.github.kdroidfilter.nucleus.notification.common.DismissReason -import io.github.kdroidfilter.nucleus.notification.common.Notification -import io.github.kdroidfilter.nucleus.notification.common.NotificationHandle -import io.github.kdroidfilter.nucleus.notification.common.NotificationResult -import io.github.kdroidfilter.nucleus.notification.windows.DismissalReason -import io.github.kdroidfilter.nucleus.notification.windows.ToastNotificationListener -import io.github.kdroidfilter.nucleus.notification.windows.WindowsNotificationCenter -import io.github.kdroidfilter.nucleus.notification.windows.toast +package dev.nucleusframework.nucleus.notification.common.internal + +import dev.nucleusframework.nucleus.notification.common.DismissReason +import dev.nucleusframework.nucleus.notification.common.Notification +import dev.nucleusframework.nucleus.notification.common.NotificationHandle +import dev.nucleusframework.nucleus.notification.common.NotificationResult +import dev.nucleusframework.nucleus.notification.windows.DismissalReason +import dev.nucleusframework.nucleus.notification.windows.ToastNotificationListener +import dev.nucleusframework.nucleus.notification.windows.WindowsNotificationCenter +import dev.nucleusframework.nucleus.notification.windows.toast import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicLong import java.util.logging.Level @@ -84,7 +84,7 @@ internal class WindowsDispatcher private constructor() : PlatformDispatcher { fun createIfAvailable(): WindowsDispatcher? = try { - Class.forName("io.github.kdroidfilter.nucleus.notification.windows.WindowsNotificationCenter") + Class.forName("dev.nucleusframework.nucleus.notification.windows.WindowsNotificationCenter") WindowsDispatcher() } catch (_: ClassNotFoundException) { null diff --git a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/PlatformDispatcher.kt b/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/PlatformDispatcher.kt deleted file mode 100644 index 67ab2bd40..000000000 --- a/notification-common/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/common/internal/PlatformDispatcher.kt +++ /dev/null @@ -1,14 +0,0 @@ -package io.github.kdroidfilter.nucleus.notification.common.internal - -import io.github.kdroidfilter.nucleus.notification.common.Notification -import io.github.kdroidfilter.nucleus.notification.common.NotificationResult - -internal interface PlatformDispatcher { - fun isAvailable(): Boolean - - fun initialize() - - fun send(notification: Notification): NotificationResult - - fun dismiss(platformId: String) -} diff --git a/notification-linux/build.gradle.kts b/notification-linux/build.gradle.kts index 462dd7597..ffe93a867 100644 --- a/notification-linux/build.gradle.kts +++ b/notification-linux/build.gradle.kts @@ -60,12 +60,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.notification-linux", publishVersion) + coordinates("dev.nucleusframework", "nucleus.notification-linux", publishVersion) pom { name.set("Nucleus Notification Linux") description.set("Freedesktop Desktop Notifications API for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -76,16 +76,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Enums.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Enums.kt similarity index 94% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Enums.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Enums.kt index d919b63ef..033242ab5 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Enums.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Enums.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux /** * Notification urgency level as defined by the freedesktop specification. diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationCenter.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationCenter.kt similarity index 98% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationCenter.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationCenter.kt index 008a366ce..f4083f472 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationCenter.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationCenter.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux /** * Entry point for the freedesktop Desktop Notifications API on Linux. diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationListener.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationListener.kt similarity index 96% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationListener.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationListener.kt index 110db038c..ebc67d6ae 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/LinuxNotificationListener.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/LinuxNotificationListener.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux /** * Listener for asynchronous notification signals from the freedesktop notification server. diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Model.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Model.kt similarity index 97% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Model.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Model.kt index 3a6631bfe..a53a08110 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/Model.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/Model.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux -import io.github.kdroidfilter.nucleus.freedesktop.icons.FreedesktopIcon +import dev.nucleusframework.nucleus.freedesktop.icons.FreedesktopIcon /** * Raw image data to embed directly in a notification. diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NativeLinuxNotificationBridge.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NativeLinuxNotificationBridge.kt similarity index 95% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NativeLinuxNotificationBridge.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NativeLinuxNotificationBridge.kt index a4b7344f6..8b2d96d3c 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NativeLinuxNotificationBridge.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NativeLinuxNotificationBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.util.concurrent.ConcurrentHashMap import javax.swing.SwingUtilities diff --git a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NotificationSound.kt b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NotificationSound.kt similarity index 99% rename from notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NotificationSound.kt rename to notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NotificationSound.kt index 51bfac7fb..04d081f93 100644 --- a/notification-linux/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/linux/NotificationSound.kt +++ b/notification-linux/src/main/kotlin/dev/nucleusframework/nucleus/notification/linux/NotificationSound.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.linux +package dev.nucleusframework.nucleus.notification.linux /** * Typesafe representation of a notification sound name. diff --git a/notification-linux/src/main/native/linux/nucleus_notification_linux.c b/notification-linux/src/main/native/linux/nucleus_notification_linux.c index 886aca454..45b0c9a38 100644 --- a/notification-linux/src/main/native/linux/nucleus_notification_linux.c +++ b/notification-linux/src/main/native/linux/nucleus_notification_linux.c @@ -102,7 +102,7 @@ static int ensure_callback_ids(JNIEnv *env) { if (g_bridge_class != NULL) return 1; jclass cls = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/notification/linux/NativeLinuxNotificationBridge"); + "dev/nucleusframework/nucleus/notification/linux/NativeLinuxNotificationBridge"); if (cls == NULL) { if ((*env)->ExceptionCheck(env)) (*env)->ExceptionClear(env); return 0; @@ -129,7 +129,7 @@ static int ensure_callback_ids(JNIEnv *env) { /* ==== Notify =========================================================== */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeNotify( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeNotify( JNIEnv *env, jclass clazz, jstring j_app_name, jint replaces_id, @@ -356,7 +356,7 @@ Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBr /* ==== CloseNotification ================================================ */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeCloseNotification( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeCloseNotification( JNIEnv *env, jclass clazz, jint id) { (void)env; (void)clazz; @@ -383,7 +383,7 @@ Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBr /* ==== GetCapabilities ================================================== */ JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeGetCapabilities( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeGetCapabilities( JNIEnv *env, jclass clazz) { (void)clazz; @@ -427,7 +427,7 @@ Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBr /* ==== GetServerInformation ============================================= */ JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeGetServerInformation( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeGetServerInformation( JNIEnv *env, jclass clazz) { (void)clazz; @@ -619,7 +619,7 @@ static void *signal_thread_func(void *arg) { /* ==== StartListening / StopListening =================================== */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeStartListening( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeStartListening( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -648,7 +648,7 @@ Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBr } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeStopListening( +Java_dev_nucleusframework_nucleus_notification_linux_NativeLinuxNotificationBridge_nativeStopListening( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/notification-macos/build.gradle.kts b/notification-macos/build.gradle.kts index 7eab13b36..956661592 100644 --- a/notification-macos/build.gradle.kts +++ b/notification-macos/build.gradle.kts @@ -59,12 +59,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.notification-macos", publishVersion) + coordinates("dev.nucleusframework", "nucleus.notification-macos", publishVersion) pom { name.set("Nucleus Notification macOS") description.set("macOS UserNotifications API for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -75,16 +75,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Enums.kt b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Enums.kt similarity index 98% rename from notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Enums.kt rename to notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Enums.kt index 3ea45d6e6..9f69b6e9d 100644 --- a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Enums.kt +++ b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Enums.kt @@ -1,6 +1,6 @@ @file:Suppress("MagicNumber", "MaxLineLength") -package io.github.kdroidfilter.nucleus.notification +package dev.nucleusframework.nucleus.notification /** Maps UNAuthorizationStatus */ enum class AuthorizationStatus( diff --git a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Model.kt b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Model.kt similarity index 99% rename from notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Model.kt rename to notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Model.kt index 7f1e62f2c..dd76f37ca 100644 --- a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/Model.kt +++ b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/Model.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification +package dev.nucleusframework.nucleus.notification /** Date components for calendar-based triggers. Null fields are ignored (wildcard). */ data class DateComponents( diff --git a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenter.kt b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenter.kt similarity index 98% rename from notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenter.kt rename to notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenter.kt index 299930206..41d6e24a4 100644 --- a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenter.kt +++ b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenter.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.notification +package dev.nucleusframework.nucleus.notification -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.notification.macos.NativeMacNotificationBridge +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.notification.macos.NativeMacNotificationBridge import java.util.logging.Logger /** diff --git a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenterDelegate.kt b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenterDelegate.kt similarity index 95% rename from notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenterDelegate.kt rename to notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenterDelegate.kt index 21d631bd9..fa597f960 100644 --- a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/NotificationCenterDelegate.kt +++ b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/NotificationCenterDelegate.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification +package dev.nucleusframework.nucleus.notification /** * Maps UNUserNotificationCenterDelegate. diff --git a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/macos/NativeMacNotificationBridge.kt b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/macos/NativeMacNotificationBridge.kt similarity index 92% rename from notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/macos/NativeMacNotificationBridge.kt rename to notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/macos/NativeMacNotificationBridge.kt index 83e477b41..967b4cb49 100644 --- a/notification-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/macos/NativeMacNotificationBridge.kt +++ b/notification-macos/src/main/kotlin/dev/nucleusframework/nucleus/notification/macos/NativeMacNotificationBridge.kt @@ -1,19 +1,19 @@ -package io.github.kdroidfilter.nucleus.notification.macos - -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.notification.AlertStyle -import io.github.kdroidfilter.nucleus.notification.AuthorizationStatus -import io.github.kdroidfilter.nucleus.notification.DeliveredNotification -import io.github.kdroidfilter.nucleus.notification.NotificationCenterDelegate -import io.github.kdroidfilter.nucleus.notification.NotificationResponse -import io.github.kdroidfilter.nucleus.notification.NotificationSetting -import io.github.kdroidfilter.nucleus.notification.NotificationSettings -import io.github.kdroidfilter.nucleus.notification.PendingNotificationInfo -import io.github.kdroidfilter.nucleus.notification.PresentationOption -import io.github.kdroidfilter.nucleus.notification.RegisteredActionInfo -import io.github.kdroidfilter.nucleus.notification.RegisteredCategoryInfo -import io.github.kdroidfilter.nucleus.notification.ShowPreviewsSetting -import io.github.kdroidfilter.nucleus.notification.toMask +package dev.nucleusframework.nucleus.notification.macos + +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.notification.AlertStyle +import dev.nucleusframework.nucleus.notification.AuthorizationStatus +import dev.nucleusframework.nucleus.notification.DeliveredNotification +import dev.nucleusframework.nucleus.notification.NotificationCenterDelegate +import dev.nucleusframework.nucleus.notification.NotificationResponse +import dev.nucleusframework.nucleus.notification.NotificationSetting +import dev.nucleusframework.nucleus.notification.NotificationSettings +import dev.nucleusframework.nucleus.notification.PendingNotificationInfo +import dev.nucleusframework.nucleus.notification.PresentationOption +import dev.nucleusframework.nucleus.notification.RegisteredActionInfo +import dev.nucleusframework.nucleus.notification.RegisteredCategoryInfo +import dev.nucleusframework.nucleus.notification.ShowPreviewsSetting +import dev.nucleusframework.nucleus.notification.toMask import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong @@ -205,7 +205,7 @@ internal object NativeMacNotificationBridge { ) { val requests = identifiers.indices.map { i -> - io.github.kdroidfilter.nucleus.notification.PendingNotificationInfo( + dev.nucleusframework.nucleus.notification.PendingNotificationInfo( identifier = identifiers[i], title = titles[i], subtitle = subtitles[i], diff --git a/notification-macos/src/main/native/macos/NucleusNotificationBridge.m b/notification-macos/src/main/native/macos/NucleusNotificationBridge.m index 588d24a6c..f3ba894d4 100644 --- a/notification-macos/src/main/native/macos/NucleusNotificationBridge.m +++ b/notification-macos/src/main/native/macos/NucleusNotificationBridge.m @@ -9,7 +9,7 @@ static JavaVM *g_jvm = NULL; static BOOL g_hasKotlinDelegate = NO; -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/notification/macos/NativeMacNotificationBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/notification/macos/NativeMacNotificationBridge" // ============================================================================ // JNI helpers @@ -314,7 +314,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeRequestAuthorization( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeRequestAuthorization( JNIEnv *env, jclass clazz, jint optionsMask, jlong callbackId) { if (@available(macOS 10.14, *)) { ensureDelegateInstalled(); @@ -351,7 +351,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetNotificationSettings( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetNotificationSettings( JNIEnv *env, jclass clazz, jlong callbackId) { if (@available(macOS 10.14, *)) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; @@ -413,7 +413,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeAddNotificationRequest( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeAddNotificationRequest( JNIEnv *env, jclass clazz, jstring jIdentifier, jstring jTitle, jstring jSubtitle, jstring jBody, @@ -555,7 +555,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemovePendingNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemovePendingNotifications( JNIEnv *env, jclass clazz, jobjectArray jIdentifiers) { if (@available(macOS 10.14, *)) { @autoreleasepool { @@ -573,7 +573,7 @@ static void ensureDelegateInstalled(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveAllPendingNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveAllPendingNotifications( JNIEnv *env, jclass clazz) { if (@available(macOS 10.14, *)) { [[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests]; @@ -581,7 +581,7 @@ static void ensureDelegateInstalled(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetPendingNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetPendingNotifications( JNIEnv *env, jclass clazz, jlong callbackId) { if (@available(macOS 10.14, *)) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; @@ -656,7 +656,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveDeliveredNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveDeliveredNotifications( JNIEnv *env, jclass clazz, jobjectArray jIdentifiers) { if (@available(macOS 10.14, *)) { @autoreleasepool { @@ -674,7 +674,7 @@ static void ensureDelegateInstalled(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveAllDeliveredNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeRemoveAllDeliveredNotifications( JNIEnv *env, jclass clazz) { if (@available(macOS 10.14, *)) { [[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications]; @@ -682,7 +682,7 @@ static void ensureDelegateInstalled(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetDeliveredNotifications( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetDeliveredNotifications( JNIEnv *env, jclass clazz, jlong callbackId) { if (@available(macOS 10.14, *)) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; @@ -741,7 +741,7 @@ static void ensureDelegateInstalled(void) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetNotificationCategories( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetNotificationCategories( JNIEnv *env, jclass clazz, jobjectArray jCatIds, jintArray jCatOptions, jintArray jActionCatIndices, @@ -831,7 +831,7 @@ static void ensureDelegateInstalled(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetNotificationCategories( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetNotificationCategories( JNIEnv *env, jclass clazz, jlong callbackId) { if (@available(macOS 10.14, *)) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; @@ -943,7 +943,7 @@ static void fireBadgeResult(jlong callbackId, NSError * _Nullable error) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetBadgeCount( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetBadgeCount( JNIEnv *env, jclass clazz, jint count, jlong callbackId) { if (@available(macOS 13.0, *)) { // macOS 13+: use the proper UNUserNotificationCenter API @@ -970,7 +970,7 @@ static void fireBadgeResult(jlong callbackId, NSError * _Nullable error) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetBadgeCount( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeGetBadgeCount( JNIEnv *env, jclass clazz, jlong callbackId) { if (@available(macOS 13.0, *)) { // macOS 13+: no direct getter; read from NSDockTile as best effort @@ -1007,7 +1007,7 @@ static void fireBadgeResult(jlong callbackId, NSError * _Nullable error) { // ============================================================================ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetDelegate( +Java_dev_nucleusframework_nucleus_notification_macos_NativeMacNotificationBridge_nativeSetDelegate( JNIEnv *env, jclass clazz, jboolean enabled) { if (@available(macOS 10.14, *)) { g_hasKotlinDelegate = enabled; diff --git a/notification-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-macos/reachability-metadata.json b/notification-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-macos/reachability-metadata.json similarity index 96% rename from notification-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-macos/reachability-metadata.json rename to notification-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-macos/reachability-metadata.json index 904f01d39..fc77b97a1 100644 --- a/notification-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-macos/reachability-metadata.json +++ b/notification-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-macos/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.notification.macos.NativeMacNotificationBridge", + "type": "dev.nucleusframework.nucleus.notification.macos.NativeMacNotificationBridge", "jniAccessible": true, "methods": [ { diff --git a/notification-windows/build.gradle.kts b/notification-windows/build.gradle.kts index 03589bf99..42b7f7058 100644 --- a/notification-windows/build.gradle.kts +++ b/notification-windows/build.gradle.kts @@ -54,12 +54,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.notification-windows", publishVersion) + coordinates("dev.nucleusframework", "nucleus.notification-windows", publishVersion) pom { name.set("Nucleus Notification Windows") description.set("Windows Toast Notifications API for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -70,16 +70,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Enums.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Enums.kt similarity index 98% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Enums.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Enums.kt index 192dbb7a2..09b6c842c 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Enums.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Enums.kt @@ -1,6 +1,6 @@ @file:Suppress("MagicNumber") -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows // -- Activation -- diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Model.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Model.kt similarity index 99% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Model.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Model.kt index 1645aaf3c..82754ba1e 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/Model.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/Model.kt @@ -1,6 +1,6 @@ @file:Suppress("LongParameterList") -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows // ============================================================================= // Toast content — root element diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/NativeWindowsNotificationBridge.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/NativeWindowsNotificationBridge.kt similarity index 98% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/NativeWindowsNotificationBridge.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/NativeWindowsNotificationBridge.kt index d3c151da0..3fc7382a7 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/NativeWindowsNotificationBridge.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/NativeWindowsNotificationBridge.kt @@ -1,8 +1,8 @@ @file:Suppress("TooManyFunctions", "LongParameterList") -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong import javax.swing.SwingUtilities diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastContentDsl.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastContentDsl.kt similarity index 99% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastContentDsl.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastContentDsl.kt index 2dc85fc4c..78b37b11f 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastContentDsl.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastContentDsl.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows /** * Kotlin DSL for building toast notification content. diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastNotificationListener.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastNotificationListener.kt similarity index 95% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastNotificationListener.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastNotificationListener.kt index 8b08020bd..999454b90 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastNotificationListener.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastNotificationListener.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows /** * Listener for toast notification lifecycle events. diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastXmlBuilder.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastXmlBuilder.kt similarity index 99% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastXmlBuilder.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastXmlBuilder.kt index 2e7891201..6c383cf3c 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/ToastXmlBuilder.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/ToastXmlBuilder.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows /** * Builds the Windows toast notification XML from a [ToastContent] model. diff --git a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/WindowsNotificationCenter.kt b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/WindowsNotificationCenter.kt similarity index 98% rename from notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/WindowsNotificationCenter.kt rename to notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/WindowsNotificationCenter.kt index 2bddde53e..82214369b 100644 --- a/notification-windows/src/main/kotlin/io/github/kdroidfilter/nucleus/notification/windows/WindowsNotificationCenter.kt +++ b/notification-windows/src/main/kotlin/dev/nucleusframework/nucleus/notification/windows/WindowsNotificationCenter.kt @@ -1,9 +1,9 @@ @file:Suppress("TooManyFunctions") -package io.github.kdroidfilter.nucleus.notification.windows +package dev.nucleusframework.nucleus.notification.windows -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.util.logging.Logger /** diff --git a/notification-windows/src/main/native/windows/nucleus_notification_windows.cpp b/notification-windows/src/main/native/windows/nucleus_notification_windows.cpp index 454466ce4..61b654b26 100644 --- a/notification-windows/src/main/native/windows/nucleus_notification_windows.cpp +++ b/notification-windows/src/main/native/windows/nucleus_notification_windows.cpp @@ -52,7 +52,7 @@ using namespace Microsoft::WRL; using namespace ABI::Windows::UI::Notifications; using namespace ABI::Windows::Data::Xml::Dom; -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/notification/windows/NativeWindowsNotificationBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/notification/windows/NativeWindowsNotificationBridge" // ============================================================================ // Globals @@ -393,7 +393,7 @@ static void fireFailed(const std::wstring &tag, const std::wstring &group, int e extern "C" { JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeInitialize( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeInitialize( JNIEnv *env, jclass clazz, jstring jAumid, jboolean jIsAppx, jstring jAppName, jint jShortcutPolicy ) { @@ -444,7 +444,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeShowToast( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeShowToast( JNIEnv *env, jclass clazz, jstring jXml, jstring jTag, jstring jGroup, jboolean expiresOnReboot, jlong expirationTimeMs, @@ -681,7 +681,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeUpdateToast( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeUpdateToast( JNIEnv *env, jclass clazz, jstring jTag, jstring jGroup, jint sequenceNumber, jobjectArray jKeys, jobjectArray jValues, jlong callbackId @@ -748,7 +748,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeRemoveToast( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeRemoveToast( JNIEnv *env, jclass clazz, jstring jTag, jstring jGroup ) { std::lock_guard lock(g_mutex); @@ -773,7 +773,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeRemoveGroupToasts( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeRemoveGroupToasts( JNIEnv *env, jclass clazz, jstring jGroup ) { std::lock_guard lock(g_mutex); @@ -789,7 +789,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeClearAllToasts( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeClearAllToasts( JNIEnv *env, jclass clazz ) { std::lock_guard lock(g_mutex); @@ -809,7 +809,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeGetHistory( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeGetHistory( JNIEnv *env, jclass clazz, jlong callbackId ) { std::lock_guard lock(g_mutex); @@ -838,7 +838,7 @@ Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificati } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeUninitialize( +Java_dev_nucleusframework_nucleus_notification_windows_NativeWindowsNotificationBridge_nativeUninitialize( JNIEnv *env, jclass clazz ) { std::lock_guard lock(g_mutex); diff --git a/notification-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-windows/reachability-metadata.json b/notification-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-windows/reachability-metadata.json similarity index 91% rename from notification-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-windows/reachability-metadata.json rename to notification-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-windows/reachability-metadata.json index ef7db400f..e34305832 100644 --- a/notification-windows/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.notification-windows/reachability-metadata.json +++ b/notification-windows/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.notification-windows/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.notification.windows.NativeWindowsNotificationBridge", + "type": "dev.nucleusframework.nucleus.notification.windows.NativeWindowsNotificationBridge", "jniAccessible": true, "methods": [ { diff --git a/nucleus-application/build.gradle.kts b/nucleus-application/build.gradle.kts index 4e96214ae..9948af507 100644 --- a/nucleus-application/build.gradle.kts +++ b/nucleus-application/build.gradle.kts @@ -40,7 +40,7 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.nucleus-application", publishVersion) + coordinates("dev.nucleusframework", "nucleus.nucleus-application", publishVersion) pom { name.set("Nucleus Application") @@ -48,7 +48,7 @@ mavenPublishing { "Unified entry point picking the decorated-window backend " + "(JBR/JNI AWT or no-AWT Tao) and exposing a backend-agnostic window handle.", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -59,16 +59,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtDialogNucleusWindow.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtDialogNucleusWindow.kt similarity index 98% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtDialogNucleusWindow.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtDialogNucleusWindow.kt index 88e682ff4..beea7d481 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtDialogNucleusWindow.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtDialogNucleusWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.ui.awt.ComposeDialog import androidx.compose.ui.graphics.painter.Painter diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtNucleusWindow.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtNucleusWindow.kt similarity index 99% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtNucleusWindow.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtNucleusWindow.kt index 3e82718f4..348be1110 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/AwtNucleusWindow.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/AwtNucleusWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.ui.awt.ComposeWindow import androidx.compose.ui.graphics.painter.Painter diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedDialog.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedDialog.kt similarity index 89% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedDialog.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedDialog.kt index fd1084645..f295ac4e1 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedDialog.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedDialog.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -7,10 +7,10 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.window.DialogState import androidx.compose.ui.window.rememberDialogState -import io.github.kdroidfilter.nucleus.application.internal.TaoDecoratedDialogAdapter -import io.github.kdroidfilter.nucleus.window.AwtDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.DecoratedDialog as AwtDecoratedDialog +import dev.nucleusframework.nucleus.application.internal.TaoDecoratedDialogAdapter +import dev.nucleusframework.nucleus.window.AwtDecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.DecoratedDialog as AwtDecoratedDialog /** * Backend-agnostic decorated dialog. Mirrors [DecoratedWindow] but for modal / diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedWindow.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedWindow.kt similarity index 90% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedWindow.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedWindow.kt index 5372dd6cb..e9ef05a93 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/DecoratedWindow.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/DecoratedWindow.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -8,10 +8,10 @@ import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.unit.DpSize import androidx.compose.ui.window.WindowState import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.internal.TaoDecoratedWindowAdapter -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.DecoratedWindow as AwtDecoratedWindow +import dev.nucleusframework.nucleus.application.internal.TaoDecoratedWindowAdapter +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.DecoratedWindow as AwtDecoratedWindow /** * Backend-agnostic decorated window. Inside [content], `window` is a diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplication.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplication.kt similarity index 92% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplication.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplication.kt index cf0bbc6d0..0a2be5623 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplication.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplication.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.window.application -import io.github.kdroidfilter.nucleus.application.internal.TaoLauncher +import dev.nucleusframework.nucleus.application.internal.TaoLauncher /** * Single entry point for a Nucleus desktop application. @@ -64,7 +64,7 @@ internal fun resolveBackend(requested: NucleusBackend): NucleusBackend = private val TaoBackendOnClasspath: Boolean by lazy { try { Class.forName( - "io.github.kdroidfilter.nucleus.window.tao.TaoApplication", + "dev.nucleusframework.nucleus.window.tao.TaoApplication", false, NucleusBackend::class.java.classLoader, ) diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplicationScope.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplicationScope.kt similarity index 89% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplicationScope.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplicationScope.kt index 33bdd250a..59260b6c4 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusApplicationScope.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusApplicationScope.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.Stable -import io.github.kdroidfilter.nucleus.core.runtime.DeepLinkHandler -import io.github.kdroidfilter.nucleus.window.tao.TaoDeepLinkBridge +import dev.nucleusframework.nucleus.core.runtime.DeepLinkHandler +import dev.nucleusframework.nucleus.window.tao.TaoDeepLinkBridge import java.net.URI import androidx.compose.ui.window.ApplicationScope as AwtApplicationScope -import io.github.kdroidfilter.nucleus.window.tao.ApplicationScope as TaoApplicationScope +import dev.nucleusframework.nucleus.window.tao.ApplicationScope as TaoApplicationScope /** * Backend-agnostic scope exposed by [nucleusApplication]. The two concrete diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusBackend.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusBackend.kt similarity index 95% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusBackend.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusBackend.kt index c6255ba24..855c52f6d 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusBackend.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusBackend.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.staticCompositionLocalOf diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusWindow.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusWindow.kt similarity index 91% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusWindow.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusWindow.kt index f13383d20..6f353af79 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/NucleusWindow.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/NucleusWindow.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.Stable import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.awt.ComposeWindow import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.unit.DpSize -import io.github.kdroidfilter.nucleus.window.DecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.DecoratedWindowScope +import dev.nucleusframework.nucleus.window.DecoratedDialogScope +import dev.nucleusframework.nucleus.window.DecoratedWindowScope import kotlinx.coroutines.flow.StateFlow /** @@ -65,7 +65,7 @@ interface NucleusWindowUnsafe { val awtDialog: androidx.compose.ui.awt.ComposeDialog? get() = null /** Tao-owned window (no-AWT backend). */ - val taoWindow: io.github.kdroidfilter.nucleus.window.tao.TaoWindow? get() = null + val taoWindow: dev.nucleusframework.nucleus.window.tao.TaoWindow? get() = null /** Native `tao::Window` handle, opaque token suitable for FFI bridges. */ val taoHandle: Long? get() = null diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/TaoNucleusWindow.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/TaoNucleusWindow.kt similarity index 95% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/TaoNucleusWindow.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/TaoNucleusWindow.kt index 83de7d2e3..ce10d5f2a 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/TaoNucleusWindow.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/TaoNucleusWindow.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.application +package dev.nucleusframework.nucleus.application import androidx.compose.runtime.State import androidx.compose.ui.awt.ComposeWindow import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.unit.DpSize -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.tao.TaoWindow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedDialogAdapter.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedDialogAdapter.kt similarity index 75% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedDialogAdapter.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedDialogAdapter.kt index 4d57f55d3..f624f115c 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedDialogAdapter.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedDialogAdapter.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application.internal +package dev.nucleusframework.nucleus.application.internal import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -7,20 +7,20 @@ import androidx.compose.runtime.remember import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.window.DialogState -import io.github.kdroidfilter.nucleus.application.LocalNucleusBackend -import io.github.kdroidfilter.nucleus.application.LocalNucleusWindow -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedDialogScope -import io.github.kdroidfilter.nucleus.application.NucleusWindow -import io.github.kdroidfilter.nucleus.application.TaoNucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.TaoNucleusWindow -import io.github.kdroidfilter.nucleus.window.DecoratedDialogState -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.LocalIsDarkTheme -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.tao.TaoDecoratedDialogScope -import io.github.kdroidfilter.nucleus.window.tao.DecoratedDialog as TaoDecoratedDialog +import dev.nucleusframework.nucleus.application.LocalNucleusBackend +import dev.nucleusframework.nucleus.application.LocalNucleusWindow +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.NucleusDecoratedDialogScope +import dev.nucleusframework.nucleus.application.NucleusWindow +import dev.nucleusframework.nucleus.application.TaoNucleusApplicationScope +import dev.nucleusframework.nucleus.application.TaoNucleusWindow +import dev.nucleusframework.nucleus.window.DecoratedDialogState +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.LocalIsDarkTheme +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.tao.TaoDecoratedDialogScope +import dev.nucleusframework.nucleus.window.tao.DecoratedDialog as TaoDecoratedDialog internal object TaoDecoratedDialogAdapter { @Suppress("LongParameterList") diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedWindowAdapter.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedWindowAdapter.kt similarity index 78% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedWindowAdapter.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedWindowAdapter.kt index d49c2a674..933477526 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoDecoratedWindowAdapter.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoDecoratedWindowAdapter.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.application.internal +package dev.nucleusframework.nucleus.application.internal import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -8,19 +8,19 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.unit.DpSize import androidx.compose.ui.window.WindowState -import io.github.kdroidfilter.nucleus.application.LocalNucleusBackend -import io.github.kdroidfilter.nucleus.application.LocalNucleusWindow -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.NucleusDecoratedWindowScope -import io.github.kdroidfilter.nucleus.application.NucleusWindow -import io.github.kdroidfilter.nucleus.application.TaoNucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.TaoNucleusWindow -import io.github.kdroidfilter.nucleus.window.DecoratedWindowState -import io.github.kdroidfilter.nucleus.window.LocalIsDarkTheme -import io.github.kdroidfilter.nucleus.window.styling.LocalDecoratedWindowStyle -import io.github.kdroidfilter.nucleus.window.styling.LocalTitleBarStyle -import io.github.kdroidfilter.nucleus.window.tao.TaoDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.tao.DecoratedWindow as TaoDecoratedWindow +import dev.nucleusframework.nucleus.application.LocalNucleusBackend +import dev.nucleusframework.nucleus.application.LocalNucleusWindow +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.NucleusDecoratedWindowScope +import dev.nucleusframework.nucleus.application.NucleusWindow +import dev.nucleusframework.nucleus.application.TaoNucleusApplicationScope +import dev.nucleusframework.nucleus.application.TaoNucleusWindow +import dev.nucleusframework.nucleus.window.DecoratedWindowState +import dev.nucleusframework.nucleus.window.LocalIsDarkTheme +import dev.nucleusframework.nucleus.window.styling.LocalDecoratedWindowStyle +import dev.nucleusframework.nucleus.window.styling.LocalTitleBarStyle +import dev.nucleusframework.nucleus.window.tao.TaoDecoratedWindowScope +import dev.nucleusframework.nucleus.window.tao.DecoratedWindow as TaoDecoratedWindow /** * Isolates references to Tao symbols. Loaded only when the Tao backend is diff --git a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoLauncher.kt b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoLauncher.kt similarity index 70% rename from nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoLauncher.kt rename to nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoLauncher.kt index 7001abae6..1b4983308 100644 --- a/nucleus-application/src/main/kotlin/io/github/kdroidfilter/nucleus/application/internal/TaoLauncher.kt +++ b/nucleus-application/src/main/kotlin/dev/nucleusframework/nucleus/application/internal/TaoLauncher.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.application.internal +package dev.nucleusframework.nucleus.application.internal import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import io.github.kdroidfilter.nucleus.application.LocalNucleusBackend -import io.github.kdroidfilter.nucleus.application.NucleusApplicationScope -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.TaoNucleusApplicationScope -import io.github.kdroidfilter.nucleus.window.tao.TaoDeepLinkBridge -import io.github.kdroidfilter.nucleus.window.tao.taoApplication +import dev.nucleusframework.nucleus.application.LocalNucleusBackend +import dev.nucleusframework.nucleus.application.NucleusApplicationScope +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.TaoNucleusApplicationScope +import dev.nucleusframework.nucleus.window.tao.TaoDeepLinkBridge +import dev.nucleusframework.nucleus.window.tao.taoApplication /** * Isolates references to Tao symbols. Loaded only when [NucleusBackend.Tao] is diff --git a/plugin-build/gradle.properties b/plugin-build/gradle.properties index 78e6e757b..9c1fd009b 100644 --- a/plugin-build/gradle.properties +++ b/plugin-build/gradle.properties @@ -1,10 +1,10 @@ -ID=io.github.kdroidfilter.nucleus -GROUP=io.github.kdroidfilter +ID=dev.nucleusframework.nucleus +GROUP=dev.nucleusframework DISPLAY_NAME=Nucleus Gradle Plugin DESCRIPTION=A JVM desktop application packaging plugin -WEBSITE=https://github.com/kdroidfilter/Nucleus -VCS_URL=https://github.com/kdroidfilter/Nucleus -IMPLEMENTATION_CLASS=io.github.kdroidfilter.nucleus.NucleusPlugin +WEBSITE=https://github.com/nucleusframework/Nucleus +VCS_URL=https://github.com/nucleusframework/Nucleus +IMPLEMENTATION_CLASS=dev.nucleusframework.nucleus.NucleusPlugin org.gradle.parallel=true org.gradle.configuration-cache=true diff --git a/plugin-build/plugin/build.gradle.kts b/plugin-build/plugin/build.gradle.kts index 5842fed23..2fb6621a8 100644 --- a/plugin-build/plugin/build.gradle.kts +++ b/plugin-build/plugin/build.gradle.kts @@ -224,7 +224,7 @@ java { kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_11) - freeCompilerArgs.add("-opt-in=io.github.kdroidfilter.nucleus.ExperimentalNucleusLibrary") + freeCompilerArgs.add("-opt-in=dev.nucleusframework.nucleus.ExperimentalNucleusLibrary") } } @@ -236,7 +236,7 @@ val composeMaterial3Version = project.findProperty("compose.material3.version")? val pluginVersion = project.version.toString() val buildConfig = tasks.register("buildConfig", GenerateBuildConfig::class.java) { - classFqName.set("io.github.kdroidfilter.nucleus.NucleusBuildConfig") + classFqName.set("dev.nucleusframework.nucleus.NucleusBuildConfig") generatedOutputDir.set(buildConfigDir) fieldsToGenerate.put("composeVersion", composeVersion) fieldsToGenerate.put("composeMaterial3Version", composeMaterial3Version) diff --git a/plugin-build/plugin/config/ktlint/baseline.xml b/plugin-build/plugin/config/ktlint/baseline.xml index b200150ec..b6f8ca48a 100644 --- a/plugin-build/plugin/config/ktlint/baseline.xml +++ b/plugin-build/plugin/config/ktlint/baseline.xml @@ -9,33 +9,33 @@ - + - + - + - + - + - + - + - + @@ -45,19 +45,19 @@ - + - + - + - + - + @@ -66,34 +66,34 @@ - + - + - + - + - + - + - + - + - + @@ -134,71 +134,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/plugin-build/plugin/detekt-baseline-main.xml b/plugin-build/plugin/detekt-baseline-main.xml index 364bde8c0..cbe5e5e51 100644 --- a/plugin-build/plugin/detekt-baseline-main.xml +++ b/plugin-build/plugin/detekt-baseline-main.xml @@ -29,7 +29,7 @@ ForbiddenComment:configureNativeApplication.kt$// todo: dmg package version ForbiddenComment:providerUtils.kt$// todo: remove once we drop support for Gradle 6.4 HasPlatformType:gradleUtils.kt$val Project.localPropertiesFile get() = project.rootProject.file("local.properties") - InvalidPackageDeclaration:NucleusBuildConfig.kt$package io.github.kdroidfilter.nucleus + InvalidPackageDeclaration:NucleusBuildConfig.kt$package dev.nucleusframework.nucleus LargeClass:AbstractJPackageTask.kt$AbstractJPackageTask : AbstractJvmToolOperationTask LongMethod:AbstractJPackageTask.kt$AbstractJPackageTask$override fun makeArgs(tmpDir: File): MutableList<String> LongMethod:AbstractJPackageTask.kt$AbstractJPackageTask$override fun prepareWorkingDir(inputChanges: InputChanges) @@ -135,7 +135,7 @@ MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$fun macSign(providers: ProviderFactory): Provider<Boolean> MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$fun preserveWorkingDir(providers: ProviderFactory): Provider<Boolean> MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$internal const val DISABLE_RESOURCE_CONTENT_HASH_GENERATION = "org.jetbrains.compose.resources.content.hash.generation.disable" - MaxLineLength:ExperimentalNucleusLibrary.kt$ExperimentalNucleusLibrary$"This library is experimental and can be unstable. Add @OptIn(io.github.kdroidfilter.nucleus.ExperimentalNucleusLibrary::class) annotation." + MaxLineLength:ExperimentalNucleusLibrary.kt$ExperimentalNucleusLibrary$"This library is experimental and can be unstable. Add @OptIn(dev.nucleusframework.nucleus.ExperimentalNucleusLibrary::class) annotation." MaxLineLength:InfoPlistBuilder.kt$InfoPlistBuilder$appendLine("<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"https://www.apple.com/DTDs/PropertyList-1.0.dtd\">") MaxLineLength:InfoPlistBuilder.kt$InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue$"${indentForLevel(nestingLevel + 1)}<key>${key.name}</key>\n${value.asPlistEntry(nestingLevel + 1)}" MaxLineLength:JvmApplicationContext.kt$JvmApplicationContext$"Specify, which target to use by using `compose.desktop.application.from(kotlinMppTarget)`" @@ -201,8 +201,8 @@ TooManyFunctions:AbstractJPackageTask.kt$AbstractJPackageTask : AbstractJvmToolOperationTask TooManyFunctions:NucleusProjectProperties.kt$NucleusProperties TooManyFunctions:LinuxPackagePostProcessor.kt$LinuxPackagePostProcessor - TooManyFunctions:configureJvmApplication.kt$io.github.kdroidfilter.nucleus.desktop.application.internal.configureJvmApplication.kt - TooManyFunctions:fileUtils.kt$io.github.kdroidfilter.nucleus.internal.utils.fileUtils.kt + TooManyFunctions:configureJvmApplication.kt$dev.nucleusframework.nucleus.desktop.application.internal.configureJvmApplication.kt + TooManyFunctions:fileUtils.kt$dev.nucleusframework.nucleus.internal.utils.fileUtils.kt TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val minimalSupportedKgpVersion = "2.2.0" TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val minimalSupportedKgpVersionError = "e: Configuration problem: " + "Minimal supported Kotlin Gradle Plugin version is $minimalSupportedKgpVersion" TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val newComposeCompilerError = "Starting with Compose Multiplatform 1.6.10, " + "you should apply \"$newComposeCompilerKotlinSupportPluginId\" plugin." + "\nSee the migration guide https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html#migrating-a-compose-multiplatform-project" @@ -233,22 +233,22 @@ UseRequireNotNull:LinuxPackagePostProcessor.kt$LinuxPackagePostProcessor$require(compression != null) { "rpmCompressionLevel requires rpmCompression to be set" } VariableNaming:NativeApplication.kt$NativeApplication$internal val _targets = arrayListOf<KotlinNativeTarget>() WildcardImport:AbstractCheckNativeDistributionRuntime.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractJvmToolOperationTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractJvmToolOperationTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractJvmToolOperationTask.kt$import org.gradle.api.tasks.* WildcardImport:AbstractNativeMacApplicationPackageDmgTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import org.gradle.api.tasks.* WildcardImport:AbstractNotarizationTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractProguardTask.kt$import io.github.kdroidfilter.nucleus.desktop.application.internal.* - WildcardImport:AbstractProguardTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractProguardTask.kt$import dev.nucleusframework.nucleus.desktop.application.internal.* + WildcardImport:AbstractProguardTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractProguardTask.kt$import org.gradle.api.file.* WildcardImport:AbstractProguardTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractSuggestModulesTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractSuggestModulesTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractSuggestModulesTask.kt$import org.gradle.api.tasks.* - WildcardImport:InfoPlistBuilder.kt$import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* + WildcardImport:InfoPlistBuilder.kt$import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* WildcardImport:MacSigningHelper.kt$import java.nio.file.* - WildcardImport:configureJvmApplication.kt$import io.github.kdroidfilter.nucleus.desktop.application.tasks.* - WildcardImport:configureJvmApplication.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:configureJvmApplication.kt$import dev.nucleusframework.nucleus.desktop.application.tasks.* + WildcardImport:configureJvmApplication.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:fileUtils.kt$import java.io.* diff --git a/plugin-build/plugin/detekt-baseline.xml b/plugin-build/plugin/detekt-baseline.xml index 8e09a36e5..232a318d2 100644 --- a/plugin-build/plugin/detekt-baseline.xml +++ b/plugin-build/plugin/detekt-baseline.xml @@ -126,7 +126,7 @@ MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$fun macSign(providers: ProviderFactory): Provider<Boolean> MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$fun preserveWorkingDir(providers: ProviderFactory): Provider<Boolean> MaxLineLength:NucleusProjectProperties.kt$NucleusProperties$internal const val DISABLE_RESOURCE_CONTENT_HASH_GENERATION = "org.jetbrains.compose.resources.content.hash.generation.disable" - MaxLineLength:ExperimentalNucleusLibrary.kt$ExperimentalNucleusLibrary$"This library is experimental and can be unstable. Add @OptIn(io.github.kdroidfilter.nucleus.ExperimentalNucleusLibrary::class) annotation." + MaxLineLength:ExperimentalNucleusLibrary.kt$ExperimentalNucleusLibrary$"This library is experimental and can be unstable. Add @OptIn(dev.nucleusframework.nucleus.ExperimentalNucleusLibrary::class) annotation." MaxLineLength:InfoPlistBuilder.kt$InfoPlistBuilder$appendLine("<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"https://www.apple.com/DTDs/PropertyList-1.0.dtd\">") MaxLineLength:InfoPlistBuilder.kt$InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue$"${indentForLevel(nestingLevel + 1)}<key>${key.name}</key>\n${value.asPlistEntry(nestingLevel + 1)}" MaxLineLength:JvmApplicationContext.kt$JvmApplicationContext$"Specify, which target to use by using `compose.desktop.application.from(kotlinMppTarget)`" @@ -183,8 +183,8 @@ TooManyFunctions:AbstractGenerateAotCacheTask.kt$AbstractGenerateAotCacheTask : AbstractNucleusTask TooManyFunctions:AbstractJPackageTask.kt$AbstractJPackageTask : AbstractJvmToolOperationTask TooManyFunctions:NucleusProjectProperties.kt$NucleusProperties - TooManyFunctions:configureJvmApplication.kt$io.github.kdroidfilter.nucleus.desktop.application.internal.configureJvmApplication.kt - TooManyFunctions:fileUtils.kt$io.github.kdroidfilter.nucleus.internal.utils.fileUtils.kt + TooManyFunctions:configureJvmApplication.kt$dev.nucleusframework.nucleus.desktop.application.internal.configureJvmApplication.kt + TooManyFunctions:fileUtils.kt$dev.nucleusframework.nucleus.internal.utils.fileUtils.kt TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val minimalSupportedKgpVersion = "2.2.0" TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val minimalSupportedKgpVersionError = "e: Configuration problem: " + "Minimal supported Kotlin Gradle Plugin version is $minimalSupportedKgpVersion" TopLevelPropertyNaming:CheckComposeCompilerPlugin.kt$internal const val newComposeCompilerError = "Starting with Compose Multiplatform 1.6.10, " + "you should apply \"$newComposeCompilerKotlinSupportPluginId\" plugin." + "\nSee the migration guide https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html#migrating-a-compose-multiplatform-project" @@ -194,23 +194,23 @@ TopLevelPropertyNaming:configureJvmApplication.kt$internal const val nucleusTaskGroup = "compose desktop" VariableNaming:NativeApplication.kt$NativeApplication$internal val _targets = arrayListOf<KotlinNativeTarget>() WildcardImport:AbstractCheckNativeDistributionRuntime.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractJvmToolOperationTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractJvmToolOperationTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractJvmToolOperationTask.kt$import org.gradle.api.tasks.* WildcardImport:AbstractNativeMacApplicationPackageAppDirTask.kt$import org.gradle.api.tasks.* WildcardImport:AbstractNativeMacApplicationPackageDmgTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractNativeMacApplicationPackageTask.kt$import org.gradle.api.tasks.* WildcardImport:AbstractNotarizationTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractProguardTask.kt$import io.github.kdroidfilter.nucleus.desktop.application.internal.* - WildcardImport:AbstractProguardTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractProguardTask.kt$import dev.nucleusframework.nucleus.desktop.application.internal.* + WildcardImport:AbstractProguardTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractProguardTask.kt$import org.gradle.api.file.* WildcardImport:AbstractProguardTask.kt$import org.gradle.api.tasks.* - WildcardImport:AbstractSuggestModulesTask.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:AbstractSuggestModulesTask.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:AbstractSuggestModulesTask.kt$import org.gradle.api.tasks.* - WildcardImport:InfoPlistBuilder.kt$import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* + WildcardImport:InfoPlistBuilder.kt$import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* WildcardImport:MacSigningHelper.kt$import java.nio.file.* - WildcardImport:configureJvmApplication.kt$import io.github.kdroidfilter.nucleus.desktop.application.tasks.* - WildcardImport:configureJvmApplication.kt$import io.github.kdroidfilter.nucleus.internal.utils.* + WildcardImport:configureJvmApplication.kt$import dev.nucleusframework.nucleus.desktop.application.tasks.* + WildcardImport:configureJvmApplication.kt$import dev.nucleusframework.nucleus.internal.utils.* WildcardImport:fileUtils.kt$import java.io.* diff --git a/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java b/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java index 7a0dadf62..3e3f785db 100644 --- a/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java +++ b/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java @@ -2,7 +2,7 @@ * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal; +package dev.nucleusframework.nucleus.desktop.application.internal; import java.io.IOException; import java.lang.reflect.Method; diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt index 5cdb513f9..c32fadf3c 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus +package dev.nucleusframework.nucleus // We write explicitly about OptIn, because IDEA doesn't suggest it. @RequiresOptIn( "This library is experimental and can be unstable. " + - "Add @OptIn(io.github.kdroidfilter.nucleus.ExperimentalNucleusLibrary::class) annotation.", + "Add @OptIn(dev.nucleusframework.nucleus.ExperimentalNucleusLibrary::class) annotation.", ) annotation class ExperimentalNucleusLibrary diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt index 5d3f940be..0839bf8c3 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus +package dev.nucleusframework.nucleus -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplication -import io.github.kdroidfilter.nucleus.desktop.application.dsl.NativeApplication -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmApplicationInternal +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication +import dev.nucleusframework.nucleus.desktop.application.dsl.NativeApplication +import dev.nucleusframework.nucleus.desktop.application.internal.JvmApplicationInternal import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt index d46458898..12a11f358 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt @@ -5,14 +5,14 @@ @file:Suppress("unused") -package io.github.kdroidfilter.nucleus +package dev.nucleusframework.nucleus import groovy.lang.Closure -import io.github.kdroidfilter.nucleus.desktop.application.internal.configureDesktop -import io.github.kdroidfilter.nucleus.experimental.internal.configureExperimentalTargetsFlagsCheck -import io.github.kdroidfilter.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import io.github.kdroidfilter.nucleus.internal.mppExt -import io.github.kdroidfilter.nucleus.internal.utils.currentTarget +import dev.nucleusframework.nucleus.desktop.application.internal.configureDesktop +import dev.nucleusframework.nucleus.experimental.internal.configureExperimentalTargetsFlagsCheck +import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID +import dev.nucleusframework.nucleus.internal.mppExt +import dev.nucleusframework.nucleus.internal.utils.currentTarget import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.dsl.DependencyHandler diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt index f576d7432..a8ede8296 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.ProjectLayout diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt index 362ca2e19..b64052fe2 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** FreeDesktop.org main application categories for .desktop files. */ enum class AppImageCategory( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt index 0a849bfef..b7ceeae3a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl @Suppress("AbstractClassCanBeConcreteClass") // Required abstract for Gradle ObjectFactory.newInstance() abstract class AppImageSettings { diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt index 25a4ed631..769cf66e2 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt index 69027d7d9..eecb6f51a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Archive compression level for electron-builder output. */ enum class CompressionLevel( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt index 2ba9b73f7..fe5e90922 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt index 940e266fe..68634c834 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import java.io.File import java.io.Serializable diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt index 63600f39f..f7d14f807 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt index 8a2584399..d04169bf7 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.internal.utils.new -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.internal.utils.new +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.Action import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt index 6d6d15628..1dc4d5512 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.Task diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt index f39f36391..1739d5d1e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.internal.utils.new +import dev.nucleusframework.nucleus.internal.utils.new import org.gradle.api.Action import org.gradle.api.model.ObjectFactory import javax.inject.Inject diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt index 72eb9ac81..d6e5e2f79 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.file.ConfigurableFileCollection diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt index 72c8c2b2f..a8ed1037a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import java.io.Serializable diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt index 528758b7a..6299c0543 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.provider.ProviderFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt index 5fe3b3ce1..f38f171b7 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property import org.gradle.api.provider.ProviderFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt index 0e19049e9..b6ee6dd17 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt index 1a2cefc70..ed5578236 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import java.util.* diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt index 23b10f1b8..76508da3a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt index e2b4af265..b481d7334 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.file.DirectoryProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt index 39ebe0916..43383a46e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt index 1705e4f98..5bac57a80 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Publish mode for electron-builder output. */ enum class PublishMode( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt index 8db6f7d8a..22cb26fbf 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.Action import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt index 3a98233b8..be50f31af 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Update channel for auto-update publishing. */ enum class ReleaseChannel( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt index 48955e5b4..7080eed42 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** GitHub release type for publishing. */ enum class ReleaseType( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt index 1750a1fb9..62017fc6f 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Windows code-signing hash algorithm. */ enum class SigningAlgorithm( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt index a2d239fb9..83868adc4 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Snap package compression algorithm. */ enum class SnapCompression( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt index 200f4bb44..2a9bf285e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Snap package confinement level. */ enum class SnapConfinement( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt index c2ef8c6a4..66bc2def3 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Snap package quality grade. */ enum class SnapGrade( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt index 6544c6a4c..20c563aab 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl /** Well-known Snap interface plugs. */ enum class SnapPlug( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt index 3a47da074..70a9df479 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl @Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() abstract class SnapSettings { diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt index 9f1caff2f..f524ef2be 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS enum class PackagingBackend { /** App-image creation only (jpackage). */ diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt index 27332792e..d643bb5c1 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.dsl +package dev.nucleusframework.nucleus.desktop.application.dsl import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt index e6ff30d46..22d1a1ac0 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import groovy.json.JsonOutput -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.BytecodeAnalyzer -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.JniEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ResourcePattern +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.BytecodeAnalyzer +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.JniEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern import org.gradle.api.DefaultTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt index 1ec33779e..2dd0f0558 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt @@ -3,15 +3,15 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal - -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector.NativeInfo -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentArch -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +package dev.nucleusframework.nucleus.desktop.application.internal + +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeInfo +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentArch +import dev.nucleusframework.nucleus.internal.utils.currentOS import org.gradle.api.Project import org.gradle.api.artifacts.transform.InputArtifact import org.gradle.api.artifacts.transform.TransformAction diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt index b46774e3d..4c02ae891 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import groovy.json.JsonOutput import groovy.json.JsonSlurper diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt index c611ffcc1..8eccfe184 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.logging.Logger import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt index c0190efe4..2a6015415 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt @@ -5,9 +5,9 @@ @file:Suppress("ktlint:standard:filename") -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.gradle.api.logging.Logger import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt index f02861912..de73591fd 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.ioFile import org.gradle.api.file.Directory import org.gradle.api.provider.Property import org.gradle.api.provider.Provider diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt index 43664118e..0eef06cd2 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import groovy.json.JsonOutput import groovy.json.JsonSlurper diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt index 0dd78f744..96d644542 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* import java.io.File import kotlin.reflect.KProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt index 2959add36..a846c0450 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt @@ -3,18 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationBuildType -import io.github.kdroidfilter.nucleus.internal.KOTLIN_JVM_PLUGIN_ID -import io.github.kdroidfilter.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import io.github.kdroidfilter.nucleus.internal.javaSourceSets -import io.github.kdroidfilter.nucleus.internal.mppExt -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.Target -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.jdkArch -import io.github.kdroidfilter.nucleus.internal.utils.joinDashLowercaseNonEmpty +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildType +import dev.nucleusframework.nucleus.internal.KOTLIN_JVM_PLUGIN_ID +import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID +import dev.nucleusframework.nucleus.internal.javaSourceSets +import dev.nucleusframework.nucleus.internal.mppExt +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.Target +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.jdkArch +import dev.nucleusframework.nucleus.internal.utils.joinDashLowercaseNonEmpty import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.Directory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt index 35a5048c9..f3fd1a650 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.GraalvmSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationBuildTypes -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationDistributions -import io.github.kdroidfilter.nucleus.internal.utils.new +import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildTypes +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions +import dev.nucleusframework.nucleus.internal.utils.new import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt index b5d4dc26a..ddecf942a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt @@ -3,13 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.GraalvmSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplication -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationBuildTypes -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationDistributions -import io.github.kdroidfilter.nucleus.internal.utils.new +import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildTypes +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions +import dev.nucleusframework.nucleus.internal.utils.new import org.gradle.api.Action import org.gradle.api.Task import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt index cc657194b..5b33a82d3 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.Project import org.gradle.api.Task diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt index 41c282230..1e0657980 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import java.io.File import java.io.ObjectInputStream diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt index 154a5ac53..2ffcd321e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationBuildType -import io.github.kdroidfilter.nucleus.internal.utils.uppercaseFirstChar +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildType +import dev.nucleusframework.nucleus.internal.utils.uppercaseFirstChar import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.TaskProvider diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt index 8d708ec50..74a58b61d 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CalendarInterval -import io.github.kdroidfilter.nucleus.desktop.application.dsl.LaunchAgentDefinition +import dev.nucleusframework.nucleus.desktop.application.dsl.CalendarInterval +import dev.nucleusframework.nucleus.desktop.application.dsl.LaunchAgentDefinition import java.io.File /** diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt index 8976f1ebe..51d80f5ca 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.internal.utils.MacUtils +import dev.nucleusframework.nucleus.internal.utils.MacUtils import org.gradle.api.logging.Logger import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt index 07115f2e5..cab5b81c6 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.logging.Logger import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt index ec5e2ee5f..4c0e693ca 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.MacUtils -import io.github.kdroidfilter.nucleus.internal.utils.currentArch +import dev.nucleusframework.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.MacUtils +import dev.nucleusframework.nucleus.internal.utils.currentArch import java.io.File import java.util.regex.Pattern import kotlin.io.path.isExecutable diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt index 0db456f3c..afc55d6ca 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.isDylibPath +import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath import java.io.File import java.nio.file.* import kotlin.io.path.isExecutable diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt index 5bf048d7a..f281627ff 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import java.io.FilterOutputStream import java.io.OutputStream diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt index 7e6b8f18b..5c8a9d471 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import java.nio.ByteBuffer import java.nio.ByteOrder diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt index 1c16884b5..111cbb1e8 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import java.io.File import java.util.* diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt index cfcd1f679..90dafcba5 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.internal.utils.findLocalOrGlobalProperty -import io.github.kdroidfilter.nucleus.internal.utils.toBooleanProvider -import io.github.kdroidfilter.nucleus.internal.utils.valueOrNull +import dev.nucleusframework.nucleus.internal.utils.findLocalOrGlobalProperty +import dev.nucleusframework.nucleus.internal.utils.toBooleanProvider +import dev.nucleusframework.nucleus.internal.utils.valueOrNull import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderFactory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt index c512325f2..0073bb961 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal internal const val APP_RESOURCES_DIR = "compose.application.resources.dir" internal const val SKIKO_LIBRARY_PATH = "skiko.library.path" diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt index cfad3128d..71e5309dc 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.file.Directory import org.gradle.api.file.RegularFile diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt index 7727e2b3b..01a4fa666 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.DefaultTask import org.gradle.api.file.ConfigurableFileCollection diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt index c1eb98ebb..959f00a51 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal internal enum class RuntimeCompressionLevel( internal val id: Int, diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt index 2339a5b17..7ec4d5c86 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.logging.Logger import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt index abfb46b4f..0da041070 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt index ecb03feb7..b99495a8e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer /** * Classification of an Oracle repo entry relative to what the static analyzer found. diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt index e0683ff10..797cacc5a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer /** * A single reflection type entry discovered by static analysis. diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt index 87e1c0499..52fc63306 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt @@ -1,15 +1,15 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer - -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ClassForNameDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.JarResourceDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.KotlinSerializableDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.MethodHandleDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.NativeMethodDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ProxyDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ReflectionApiDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ResourceAccessDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ResourceBundleDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ServiceLoaderDetector +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer + +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ClassForNameDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.JarResourceDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.KotlinSerializableDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.MethodHandleDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.NativeMethodDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ProxyDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ReflectionApiDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ResourceAccessDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ResourceBundleDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ServiceLoaderDetector import java.io.File import java.util.jar.JarFile diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt index 8368aae21..f886e61ec 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import groovy.json.JsonSlurper import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt index d03e73eb2..6fa4834a6 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer /** * Compares analyzer output against an Oracle repo baseline and produces a gap report. diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt index de1bed38f..eb6e01867 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt index 2d1d3e2fe..767d243a9 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ResourcePattern +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern import java.util.jar.JarFile /** diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt index d2c799a3b..bf777e91f 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry import org.objectweb.asm.AnnotationVisitor import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt index 351e48f51..28eb4f919 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt index a6e9ca6c9..6123d6a45 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.JniEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.JniEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.FieldVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt index 551dc2182..7d5426b6a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt index 7382c499d..086a2bf3f 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt index b7fc0d2f4..07de9a153 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ResourcePattern +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt index 6b998a28d..cfc9ab837 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ResourcePattern +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassVisitor import org.objectweb.asm.MethodVisitor diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt index 5e91e3060..2cb4f50db 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.MethodSignature -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.ResourcePattern +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern import java.io.InputStream import java.util.jar.JarFile diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt index a158204e4..c3502bec3 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.normalizedPath +import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath import org.gradle.api.file.FileSystemLocation import org.gradle.api.provider.Provider import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt index 72e4d5c04..7fbca4c38 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt @@ -3,13 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.NucleusExtension -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.registerTask +import dev.nucleusframework.nucleus.NucleusExtension +import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.registerTask import org.gradle.api.Project import org.gradle.api.plugins.ExtensionAware import org.gradle.api.tasks.JavaExec @@ -46,7 +46,7 @@ internal fun configureDesktop( } /** - * Forwards [io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplication.mainClass] to + * Forwards [dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication.mainClass] to * `compose.desktop.application.mainClass` so that Compose Hot Reload tasks (e.g. `hotRun`, * `hotSnapshotMain`) can resolve the entry point without the user duplicating it via * `-PmainClass=...` or a manual `compose.desktop.application { ... }` block. diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt index ab7928a24..ebaee6b3e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt @@ -1,22 +1,22 @@ @file:Suppress("ktlint:standard:filename") -package io.github.kdroidfilter.nucleus.desktop.application.internal - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.FileAssociation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.GraalvmSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.PackagingBackend -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractNotarizationTask -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentArch -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.executableName -import io.github.kdroidfilter.nucleus.internal.utils.uppercaseFirstChar +package dev.nucleusframework.nucleus.desktop.application.internal + +import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation +import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.PackagingBackend +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNotarizationTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentArch +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.executableName +import dev.nucleusframework.nucleus.internal.utils.uppercaseFirstChar import org.gradle.api.DefaultTask import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Delete diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt index 239231eb7..cecbf47b5 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt @@ -5,46 +5,46 @@ @file:Suppress("TooManyFunctions") -package io.github.kdroidfilter.nucleus.desktop.application.internal - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.PackagingBackend -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.validatePackageVersions -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractCheckNativeDistributionRuntime -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractExtractNativeLibsTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractGenerateAotCacheTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractGenerateAppPropertiesTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractJLinkTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractJPackageTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractNotarizationTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractPatchCaCertificatesTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractPatchMacJvmTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractProguardTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractRunAppXTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractRunDistributableTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractStripNativeLibsFromJarsTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractSuggestModulesTask -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractJarsFlattenTask -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import io.github.kdroidfilter.nucleus.internal.KOTLIN_JVM_PLUGIN_ID -import io.github.kdroidfilter.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import io.github.kdroidfilter.nucleus.internal.javaSourceSets -import io.github.kdroidfilter.nucleus.internal.mppExt -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.dependsOn -import io.github.kdroidfilter.nucleus.internal.utils.detachedComposeGradleDependency -import io.github.kdroidfilter.nucleus.internal.utils.detachedDependency -import io.github.kdroidfilter.nucleus.internal.utils.dir -import io.github.kdroidfilter.nucleus.internal.utils.excludeTransitiveDependencies -import io.github.kdroidfilter.nucleus.internal.utils.file -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.ioFileOrNull -import io.github.kdroidfilter.nucleus.internal.utils.javaExecutable -import io.github.kdroidfilter.nucleus.internal.utils.jdkArch -import io.github.kdroidfilter.nucleus.internal.utils.provider +package dev.nucleusframework.nucleus.desktop.application.internal + +import dev.nucleusframework.nucleus.desktop.application.dsl.PackagingBackend +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.internal.validation.validatePackageVersions +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractCheckNativeDistributionRuntime +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractExtractNativeLibsTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractGenerateAotCacheTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractGenerateAppPropertiesTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractJLinkTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractJPackageTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNotarizationTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractPatchCaCertificatesTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractPatchMacJvmTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractProguardTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractRunAppXTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractRunDistributableTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractStripNativeLibsFromJarsTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractSuggestModulesTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractJarsFlattenTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask +import dev.nucleusframework.nucleus.internal.KOTLIN_JVM_PLUGIN_ID +import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID +import dev.nucleusframework.nucleus.internal.javaSourceSets +import dev.nucleusframework.nucleus.internal.mppExt +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.dependsOn +import dev.nucleusframework.nucleus.internal.utils.detachedComposeGradleDependency +import dev.nucleusframework.nucleus.internal.utils.detachedDependency +import dev.nucleusframework.nucleus.internal.utils.dir +import dev.nucleusframework.nucleus.internal.utils.excludeTransitiveDependencies +import dev.nucleusframework.nucleus.internal.utils.file +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.ioFileOrNull +import dev.nucleusframework.nucleus.internal.utils.javaExecutable +import dev.nucleusframework.nucleus.internal.utils.jdkArch +import dev.nucleusframework.nucleus.internal.utils.provider import org.gradle.api.DefaultTask import org.gradle.api.file.DuplicatesStrategy import org.gradle.api.provider.Provider diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt index 0ec6a8e4e..4002428db 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt @@ -3,17 +3,17 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.NativeApplication -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageAppDirTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageDmgTask -import io.github.kdroidfilter.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageTask -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.joinLowerCamelCase +package dev.nucleusframework.nucleus.desktop.application.internal + +import dev.nucleusframework.nucleus.desktop.application.dsl.NativeApplication +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageAppDirTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageDmgTask +import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.joinLowerCamelCase import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.TaskContainer diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt index 5bdc2f66d..659af7052 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.internal.utils.dir +import dev.nucleusframework.nucleus.internal.utils.dir import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.Directory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt index 56cfd3d14..c82ec70ff 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt @@ -3,21 +3,21 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.AppXSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.DmgSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.FileAssociation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.FlatpakSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationDistributions -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmMacOSPlatformSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.NsisSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.PublishSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SnapSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder + +import dev.nucleusframework.nucleus.desktop.application.dsl.AppXSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.DmgSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation +import dev.nucleusframework.nucleus.desktop.application.dsl.FlatpakSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmMacOSPlatformSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.NsisSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.PublishSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.SnapSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS import java.io.File /** diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt index bf657636b..445d8a06f 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder +package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder import org.gradle.api.logging.Logger import org.gradle.process.ExecOperations diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt index 5fbdc5b69..86b73dc9a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder +package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS import org.gradle.api.logging.Logger import java.io.File import java.io.IOException diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt index 3d681a587..52ee8034a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.files +package dev.nucleusframework.nucleus.desktop.application.internal.files import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt index 43589133d..06be7887a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.files +package dev.nucleusframework.nucleus.desktop.application.internal.files -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacSigner +import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner import java.io.File import java.util.zip.ZipEntry import java.util.zip.ZipInputStream diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt index 8cba24772..552744ebf 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.files +package dev.nucleusframework.nucleus.desktop.application.internal.files import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt index e66b7d223..78a2be973 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.files +package dev.nucleusframework.nucleus.desktop.application.internal.files -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS import org.gradle.api.tasks.Internal import java.io.* import java.security.DigestInputStream diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt index 6e3350a45..d074def64 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt @@ -1,6 +1,6 @@ @file:Suppress("ktlint:standard:filename") -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import groovy.json.JsonOutput import groovy.json.JsonSlurper diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt index e100fbfda..abd9b25d3 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationDistributions -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.internal.utils.OS import org.gradle.api.provider.Provider internal fun JvmApplicationContext.packageVersionFor(targetFormat: TargetFormat): Provider = diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt index 9d6e7be8e..3c595d069 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt @@ -1,6 +1,6 @@ @file:Suppress("ktlint:standard:filename") -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import groovy.json.JsonSlurper import org.gradle.api.logging.Logger diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt index cf4e17b19..b1219b1da 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.validation +package dev.nucleusframework.nucleus.desktop.application.internal.validation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.MacOSNotarizationSettings -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSNotarizationSettings +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties internal data class ValidatedMacOSNotarizationSettings( val appleID: String, diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt index 3bcf8fffe..0adcd211b 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.validation +package dev.nucleusframework.nucleus.desktop.application.internal.validation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.MacOSSigningSettings -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS import org.gradle.api.Project import org.gradle.api.provider.Provider import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt index a342b1d7a..49fd095ac 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.validation +package dev.nucleusframework.nucleus.desktop.application.internal.validation import org.gradle.api.provider.Provider diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt index 23f053f05..4b6fd5cfc 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt @@ -3,13 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.internal.validation +package dev.nucleusframework.nucleus.desktop.application.internal.validation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmApplicationContext -import io.github.kdroidfilter.nucleus.desktop.application.internal.packageBuildVersionFor -import io.github.kdroidfilter.nucleus.desktop.application.internal.packageVersionFor -import io.github.kdroidfilter.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.internal.JvmApplicationContext +import dev.nucleusframework.nucleus.desktop.application.internal.packageBuildVersionFor +import dev.nucleusframework.nucleus.desktop.application.internal.packageVersionFor +import dev.nucleusframework.nucleus.internal.utils.OS import org.gradle.api.GradleException internal fun JvmApplicationContext.validatePackageVersions() { diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt index 1ee12dbf7..bfa143edc 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt @@ -3,18 +3,18 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks - -import io.github.kdroidfilter.nucleus.desktop.application.internal.ExternalToolRunner -import io.github.kdroidfilter.nucleus.desktop.application.internal.JdkVersionProbe -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmRuntimeProperties -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.executableName -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty +package dev.nucleusframework.nucleus.desktop.application.tasks + +import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner +import dev.nucleusframework.nucleus.desktop.application.internal.JdkVersionProbe +import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.executableName +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFile import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt index bf3d99970..5106b8211 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt @@ -3,37 +3,37 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.JvmApplicationDistributions -import io.github.kdroidfilter.nucleus.desktop.application.dsl.MacOSSigningSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.ReleaseChannel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.internal.UpdateYmlGenerator -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacSigner -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacSignerImpl -import io.github.kdroidfilter.nucleus.desktop.application.internal.NoCertificateSigner -import io.github.kdroidfilter.nucleus.desktop.application.internal.WindowsKitsLocator -import io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderConfigGenerator -import io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderInvocation -import io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderToolManager -import io.github.kdroidfilter.nucleus.desktop.application.internal.electronbuilder.NodeJsDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.isDylibPath -import io.github.kdroidfilter.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT -import io.github.kdroidfilter.nucleus.desktop.application.internal.padDmgBackgroundForTitleBar -import io.github.kdroidfilter.nucleus.desktop.application.internal.readImageDimensions -import io.github.kdroidfilter.nucleus.desktop.application.internal.updateExecutableTypeInAppImage -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.validate -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.Arch -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentArch -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +package dev.nucleusframework.nucleus.desktop.application.tasks + +import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel +import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions +import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.ReleaseChannel +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.internal.UpdateYmlGenerator +import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner +import dev.nucleusframework.nucleus.desktop.application.internal.MacSignerImpl +import dev.nucleusframework.nucleus.desktop.application.internal.NoCertificateSigner +import dev.nucleusframework.nucleus.desktop.application.internal.WindowsKitsLocator +import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderConfigGenerator +import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderInvocation +import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderToolManager +import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.NodeJsDetector +import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath +import dev.nucleusframework.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT +import dev.nucleusframework.nucleus.desktop.application.internal.padDmgBackgroundForTitleBar +import dev.nucleusframework.nucleus.desktop.application.internal.readImageDimensions +import dev.nucleusframework.nucleus.desktop.application.internal.updateExecutableTypeInAppImage +import dev.nucleusframework.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings +import dev.nucleusframework.nucleus.desktop.application.internal.validation.validate +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.Arch +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentArch +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import net.coobird.thumbnailator.Thumbnails import net.coobird.thumbnailator.filters.Canvas import net.coobird.thumbnailator.geometry.Positions diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt index 6e0661908..e5a336d44 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt index 39374ddae..6ef80f286 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmRuntimeProperties -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.GradleException import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt index eff1069c9..8fe9ad04e 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt index 040467e3d..c3622e300 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt @@ -3,14 +3,14 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmRuntimeProperties -import io.github.kdroidfilter.nucleus.desktop.application.internal.RuntimeCompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.internal.cliArg -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties +import dev.nucleusframework.nucleus.desktop.application.internal.RuntimeCompressionLevel +import dev.nucleusframework.nucleus.desktop.application.internal.cliArg +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index c0881d743..d28c88490 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -3,52 +3,52 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.FileAssociation -import io.github.kdroidfilter.nucleus.desktop.application.dsl.LaunchAgentDefinition -import io.github.kdroidfilter.nucleus.desktop.application.dsl.MacOSSigningSettings -import io.github.kdroidfilter.nucleus.desktop.application.internal.LaunchAgentPlistGenerator -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.dsl.UrlProtocol -import io.github.kdroidfilter.nucleus.desktop.application.internal.APP_RESOURCES_DIR -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue -import io.github.kdroidfilter.nucleus.desktop.application.internal.JvmRuntimeProperties -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacAssetsTool -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacSigner -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacSignerImpl -import io.github.kdroidfilter.nucleus.desktop.application.internal.NoCertificateSigner -import io.github.kdroidfilter.nucleus.desktop.application.internal.PlistKeys -import io.github.kdroidfilter.nucleus.desktop.application.internal.SKIKO_LIBRARY_PATH -import io.github.kdroidfilter.nucleus.desktop.application.internal.cliArg -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.FileCopyingProcessor -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.MacJarSignFileCopyingProcessor -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.SimpleFileCopyingProcessor -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.copyTo -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.copyZipEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.findOutputFileOrDir -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.isDylibPath -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.isJarFile -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.mangledName -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.normalizedPath -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.transformJar -import io.github.kdroidfilter.nucleus.desktop.application.internal.javaOption -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.validate -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.clearDirs -import io.github.kdroidfilter.nucleus.internal.utils.currentArch -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.currentTarget -import io.github.kdroidfilter.nucleus.internal.utils.delete -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.ioFileOrNull -import io.github.kdroidfilter.nucleus.internal.utils.mkdirs -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty -import io.github.kdroidfilter.nucleus.internal.utils.stacktraceToString +package dev.nucleusframework.nucleus.desktop.application.tasks + +import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation +import dev.nucleusframework.nucleus.desktop.application.dsl.LaunchAgentDefinition +import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings +import dev.nucleusframework.nucleus.desktop.application.internal.LaunchAgentPlistGenerator +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.UrlProtocol +import dev.nucleusframework.nucleus.desktop.application.internal.APP_RESOURCES_DIR +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue +import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties +import dev.nucleusframework.nucleus.desktop.application.internal.MacAssetsTool +import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner +import dev.nucleusframework.nucleus.desktop.application.internal.MacSignerImpl +import dev.nucleusframework.nucleus.desktop.application.internal.NoCertificateSigner +import dev.nucleusframework.nucleus.desktop.application.internal.PlistKeys +import dev.nucleusframework.nucleus.desktop.application.internal.SKIKO_LIBRARY_PATH +import dev.nucleusframework.nucleus.desktop.application.internal.cliArg +import dev.nucleusframework.nucleus.desktop.application.internal.files.FileCopyingProcessor +import dev.nucleusframework.nucleus.desktop.application.internal.files.MacJarSignFileCopyingProcessor +import dev.nucleusframework.nucleus.desktop.application.internal.files.SimpleFileCopyingProcessor +import dev.nucleusframework.nucleus.desktop.application.internal.files.copyTo +import dev.nucleusframework.nucleus.desktop.application.internal.files.copyZipEntry +import dev.nucleusframework.nucleus.desktop.application.internal.files.findOutputFileOrDir +import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath +import dev.nucleusframework.nucleus.desktop.application.internal.files.isJarFile +import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName +import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath +import dev.nucleusframework.nucleus.desktop.application.internal.files.transformJar +import dev.nucleusframework.nucleus.desktop.application.internal.javaOption +import dev.nucleusframework.nucleus.desktop.application.internal.validation.validate +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.currentArch +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.currentTarget +import dev.nucleusframework.nucleus.internal.utils.delete +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.ioFileOrNull +import dev.nucleusframework.nucleus.internal.utils.mkdirs +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty +import dev.nucleusframework.nucleus.internal.utils.stacktraceToString import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt index 73df37358..a383d5e52 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.* import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.ListProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt index ba87ae782..c7e4a0025 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt @@ -3,14 +3,14 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks - -import io.github.kdroidfilter.nucleus.desktop.application.internal.InfoPlistBuilder -import io.github.kdroidfilter.nucleus.desktop.application.internal.MacAssetsTool -import io.github.kdroidfilter.nucleus.desktop.application.internal.PlistKeys -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty -import io.github.kdroidfilter.nucleus.internal.utils.nullableProperty +package dev.nucleusframework.nucleus.desktop.application.tasks + +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder +import dev.nucleusframework.nucleus.desktop.application.internal.MacAssetsTool +import dev.nucleusframework.nucleus.desktop.application.internal.PlistKeys +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt index 0f94179e5..eadd20ff7 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt @@ -3,14 +3,14 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks - -import io.github.kdroidfilter.nucleus.desktop.application.dsl.DmgContentEntry -import io.github.kdroidfilter.nucleus.desktop.application.dsl.DmgFormat -import io.github.kdroidfilter.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT -import io.github.kdroidfilter.nucleus.desktop.application.internal.readImageDimensions -import io.github.kdroidfilter.nucleus.internal.utils.ioFile -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty +package dev.nucleusframework.nucleus.desktop.application.tasks + +import dev.nucleusframework.nucleus.desktop.application.dsl.DmgContentEntry +import dev.nucleusframework.nucleus.desktop.application.dsl.DmgFormat +import dev.nucleusframework.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT +import dev.nucleusframework.nucleus.desktop.application.internal.readImageDimensions +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt index 0d3de33e4..f8a532936 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.* import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt index a10c774e2..24c1a1c0c 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt @@ -3,19 +3,19 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.dsl.MacOSNotarizationSettings -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat -import io.github.kdroidfilter.nucleus.desktop.application.internal.NOTARIZATION_REQUEST_INFO_FILE_NAME -import io.github.kdroidfilter.nucleus.desktop.application.internal.NotarizationRequestInfo -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.checkExistingFile -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.findOutputFileOrDir -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.ValidatedMacOSNotarizationSettings -import io.github.kdroidfilter.nucleus.desktop.application.internal.validation.validate -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.MacUtils -import io.github.kdroidfilter.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSNotarizationSettings +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.internal.NOTARIZATION_REQUEST_INFO_FILE_NAME +import dev.nucleusframework.nucleus.desktop.application.internal.NotarizationRequestInfo +import dev.nucleusframework.nucleus.desktop.application.internal.files.checkExistingFile +import dev.nucleusframework.nucleus.desktop.application.internal.files.findOutputFileOrDir +import dev.nucleusframework.nucleus.desktop.application.internal.validation.ValidatedMacOSNotarizationSettings +import dev.nucleusframework.nucleus.desktop.application.internal.validation.validate +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.MacUtils +import dev.nucleusframework.nucleus.internal.utils.ioFile import org.gradle.api.file.DirectoryProperty import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputDirectory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt index 38926b4d2..0730478ba 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.GradleException import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt index ff9172bbb..60dc6db90 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFile import org.gradle.api.provider.Property diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt index f9307e650..a2a53b249 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt @@ -3,13 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.* -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.mangledName -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.normalizedPath -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.desktop.application.internal.* +import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName +import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.* import org.gradle.api.file.* import org.gradle.api.provider.Property import org.gradle.api.provider.Provider diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt index abbadf065..cfe25a484 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.Input diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt index 8061cd72f..f5cff972d 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt @@ -3,13 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.OS -import io.github.kdroidfilter.nucleus.internal.utils.currentOS -import io.github.kdroidfilter.nucleus.internal.utils.executableName -import io.github.kdroidfilter.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.OS +import dev.nucleusframework.nucleus.internal.utils.currentOS +import dev.nucleusframework.nucleus.internal.utils.executableName +import dev.nucleusframework.nucleus.internal.utils.ioFile import org.gradle.api.file.Directory import org.gradle.api.provider.Provider import org.gradle.api.tasks.Input diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt index 0077c7d53..58e9ae7be 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.NativeLibArchDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.mangledName -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector +import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFile diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt index 5d9c239e9..aabf8c715 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt @@ -3,14 +3,14 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.application.tasks +package dev.nucleusframework.nucleus.desktop.application.tasks -import io.github.kdroidfilter.nucleus.desktop.application.dsl.DEFAULT_RUNTIME_MODULES -import io.github.kdroidfilter.nucleus.desktop.application.internal.ExternalToolRunner -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.normalizedPath -import io.github.kdroidfilter.nucleus.desktop.tasks.AbstractNucleusTask -import io.github.kdroidfilter.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.desktop.application.dsl.DEFAULT_RUNTIME_MODULES +import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath +import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask +import dev.nucleusframework.nucleus.internal.utils.* import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.Directory import org.gradle.api.file.RegularFileProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt index fd56012b3..6aaf1d758 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.tasks +package dev.nucleusframework.nucleus.desktop.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.copyZipEntry -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.isJarFile -import io.github.kdroidfilter.nucleus.internal.utils.delete -import io.github.kdroidfilter.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.desktop.application.internal.files.copyZipEntry +import dev.nucleusframework.nucleus.desktop.application.internal.files.isJarFile +import dev.nucleusframework.nucleus.internal.utils.delete +import dev.nucleusframework.nucleus.internal.utils.ioFile import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFileProperty import org.gradle.api.tasks.Classpath diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt index 1e71c0493..bc801ae43 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.tasks +package dev.nucleusframework.nucleus.desktop.tasks -import io.github.kdroidfilter.nucleus.desktop.application.internal.ExternalToolRunner -import io.github.kdroidfilter.nucleus.desktop.application.internal.NucleusProperties -import io.github.kdroidfilter.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner +import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.DefaultTask import org.gradle.api.file.ArchiveOperations import org.gradle.api.file.Directory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt index 27f3c598c..514f46dc4 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt @@ -3,11 +3,11 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.desktop.tasks +package dev.nucleusframework.nucleus.desktop.tasks -import io.github.kdroidfilter.nucleus.NucleusBuildConfig -import io.github.kdroidfilter.nucleus.internal.utils.clearDirs -import io.github.kdroidfilter.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.NucleusBuildConfig +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.ioFile import org.gradle.api.file.Directory import org.gradle.api.file.FileSystemLocation import org.gradle.api.file.RegularFile diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt index d6f048790..b246b7998 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.experimental.internal +package dev.nucleusframework.nucleus.experimental.internal -import io.github.kdroidfilter.nucleus.internal.utils.findLocalOrGlobalProperty +import dev.nucleusframework.nucleus.internal.utils.findLocalOrGlobalProperty import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinTarget diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt index 93bed5be2..dc92d5761 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal -import io.github.kdroidfilter.nucleus.internal.ComposeCompilerArtifactProvider.DefaultCompiler.pluginArtifact +import dev.nucleusframework.nucleus.internal.ComposeCompilerArtifactProvider.DefaultCompiler.pluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact internal class ComposeCompilerArtifactProvider( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt index a44595d2c..ee1369baf 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal import org.gradle.api.DefaultTask import org.gradle.api.Project diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt index 8d73a82cd..6e7744723 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal import kotlin.math.min diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt index 018f09c6f..13b30a0e8 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt @@ -3,12 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal internal const val KOTLIN_MPP_PLUGIN_ID = "org.jetbrains.kotlin.multiplatform" internal const val KOTLIN_JVM_PLUGIN_ID = "org.jetbrains.kotlin.jvm" internal const val KOTLIN_ANDROID_PLUGIN_ID = "org.jetbrains.kotlin.android" internal const val KOTLIN_JS_PLUGIN_ID = "org.jetbrains.kotlin.js" -internal const val NUCLEUS_PLUGIN_ID = "io.github.kdroidfilter.nucleus" +internal const val NUCLEUS_PLUGIN_ID = "dev.nucleusframework.nucleus" internal const val IDEA_IMPORT_TASK_NAME = "prepareKotlinIdeaImport" diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt index dac666b14..f8d4aedb2 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal -import io.github.kdroidfilter.nucleus.NucleusExtension +import dev.nucleusframework.nucleus.NucleusExtension import org.gradle.api.Project import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.SourceSetContainer diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt index 38aa700e1..9e88aaeb9 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal +package dev.nucleusframework.nucleus.internal import kotlin.reflect.KProperty diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt index 64e4f82df..80e500ea8 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils import java.io.PrintWriter import java.io.StringWriter diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt index 2222d7de0..37d6f0bab 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils import org.gradle.api.Project import org.gradle.api.file.Directory diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt index 6ee121099..c18101b87 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt @@ -3,9 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils -import io.github.kdroidfilter.nucleus.NucleusBuildConfig +import dev.nucleusframework.nucleus.NucleusBuildConfig import org.gradle.api.DomainObjectCollection import org.gradle.api.Project import org.gradle.api.artifacts.Configuration diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt index eb744f6f4..1c6635e3c 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt @@ -3,10 +3,10 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils -import io.github.kdroidfilter.nucleus.desktop.application.internal.files.checkExistingFile -import io.github.kdroidfilter.nucleus.desktop.application.tasks.MIN_JAVA_RUNTIME_VERSION +import dev.nucleusframework.nucleus.desktop.application.internal.files.checkExistingFile +import dev.nucleusframework.nucleus.desktop.application.tasks.MIN_JAVA_RUNTIME_VERSION import org.gradle.api.provider.Provider import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt index 15471400a..5709057c6 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils import org.gradle.api.Project import org.gradle.api.Task diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt index ea56d79bb..027977c63 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils internal fun String.uppercaseFirstChar(): String = transformFirstCharIfNeeded( diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt index bb09a3f79..4b80a840a 100644 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -package io.github.kdroidfilter.nucleus.internal.utils +package dev.nucleusframework.nucleus.internal.utils import org.gradle.api.Project import org.gradle.api.Task diff --git a/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro b/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro index fe46de660..304e7ba93 100644 --- a/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro +++ b/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro @@ -141,44 +141,44 @@ -dontnote com.sun.jna.** # Nucleus decorated-window JNI --keep class io.github.kdroidfilter.nucleus.window.utils.macos.NativeMacBridge { +-keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; } --keep class io.github.kdroidfilter.nucleus.window.** { *; } +-keep class dev.nucleusframework.nucleus.window.** { *; } # Nucleus darkmode-detector JNI (macOS) # NativeDarkModeBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.mac.NativeDarkModeBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.mac.NativeDarkModeBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Linux) # NativeLinuxBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.linux.NativeLinuxBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.linux.NativeLinuxBridge { native ; static void onThemeChanged(boolean); } # Nucleus darkmode-detector JNI (Windows) --keep class io.github.kdroidfilter.nucleus.darkmodedetector.windows.NativeWindowsBridge { +-keep class dev.nucleusframework.nucleus.darkmodedetector.windows.NativeWindowsBridge { native ; } --keep class io.github.kdroidfilter.nucleus.darkmodedetector.** { *; } +-keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } # Nucleus native-ssl JNI (macOS) --keep class io.github.kdroidfilter.nucleus.nativessl.mac.NativeSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { native ; } # Nucleus native-ssl JNI (Windows) --keep class io.github.kdroidfilter.nucleus.nativessl.windows.WindowsSslBridge { +-keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } # Nucleus system-color JNI (macOS) # NativeMacSystemColorBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.systemcolor.mac.NativeMacSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.mac.NativeMacSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onAccentColorCleared(); @@ -187,7 +187,7 @@ # Nucleus system-color JNI (Linux) # NativeLinuxSystemColorBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge { native ; static void onAccentColorChanged(float, float, float); static void onHighContrastChanged(boolean); @@ -195,36 +195,36 @@ # Nucleus system-color JNI (Windows) # NativeWindowsSystemColorBridge is looked up by name from native code (FindClass + GetStaticMethodID) --keep class io.github.kdroidfilter.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { +-keep class dev.nucleusframework.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge { native ; static void onAccentColorChanged(int, int, int); static void onHighContrastChanged(boolean); } --keep class io.github.kdroidfilter.nucleus.systemcolor.** { *; } +-keep class dev.nucleusframework.nucleus.systemcolor.** { *; } # Nucleus energy-manager JNI (macOS) --keep class io.github.kdroidfilter.nucleus.energymanager.macos.NativeMacOsEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.macos.NativeMacOsEnergyBridge { native ; } # Nucleus energy-manager JNI (Linux) --keep class io.github.kdroidfilter.nucleus.energymanager.linux.NativeLinuxEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.linux.NativeLinuxEnergyBridge { native ; } # Nucleus energy-manager JNI (Windows) --keep class io.github.kdroidfilter.nucleus.energymanager.windows.NativeWindowsEnergyBridge { +-keep class dev.nucleusframework.nucleus.energymanager.windows.NativeWindowsEnergyBridge { native ; } --keep class io.github.kdroidfilter.nucleus.energymanager.** { *; } +-keep class dev.nucleusframework.nucleus.energymanager.** { *; } # Nucleus linux-hidpi JNI --keep class io.github.kdroidfilter.nucleus.hidpi.HiDpiLinuxBridge { +-keep class dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge { native ; } # Nucleus notification-windows JNI — static callbacks invoked from native via FindClass/GetStaticMethodID --keep class io.github.kdroidfilter.nucleus.notification.windows.NativeWindowsNotificationBridge { +-keep class dev.nucleusframework.nucleus.notification.windows.NativeWindowsNotificationBridge { native ; static void onToastActivated(java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String[]); static void onToastDismissed(java.lang.String, java.lang.String, int); @@ -233,37 +233,37 @@ static void onToastUpdated(long, java.lang.String); static void onHistoryResult(long, java.lang.String[], java.lang.String[], java.lang.String); } --keep class io.github.kdroidfilter.nucleus.notification.windows.** { *; } --keep class io.github.kdroidfilter.nucleus.notification.common.** { *; } +-keep class dev.nucleusframework.nucleus.notification.windows.** { *; } +-keep class dev.nucleusframework.nucleus.notification.common.** { *; } # Nucleus media-control JNI — native code uses FindClass(BRIDGE_CLASS) + static callbacks --keep class io.github.kdroidfilter.nucleus.mediacontrol.** { *; } +-keep class dev.nucleusframework.nucleus.mediacontrol.** { *; } # Nucleus scheduler JNI --keep class io.github.kdroidfilter.nucleus.scheduler.** { *; } +-keep class dev.nucleusframework.nucleus.scheduler.** { *; } # Nucleus global-hotkey JNI — onHotKey is invoked from native code via JNI --keep class io.github.kdroidfilter.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { +-keep class dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { native ; static void onHotKey(long, int, int); } --keep class io.github.kdroidfilter.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { +-keep class dev.nucleusframework.nucleus.globalhotkey.macos.NativeMacOsHotKeyBridge { native ; static void onHotKey(long, int, int); } --keep class io.github.kdroidfilter.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { +-keep class dev.nucleusframework.nucleus.globalhotkey.linux.NativeLinuxHotKeyBridge { native ; static void onHotKey(long, int, int); } # Nucleus launcher-windows JNI — ThumbBarClickListener.onThumbButtonClick is invoked from native --keep class io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsBadgeBridge { native ; } --keep class io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsJumpListBridge { native ; } --keep class io.github.kdroidfilter.nucleus.launcher.windows.NativeWindowsTaskbarBridge { native ; } --keep interface io.github.kdroidfilter.nucleus.launcher.windows.ThumbBarClickListener { +-keep class dev.nucleusframework.nucleus.launcher.windows.NativeWindowsBadgeBridge { native ; } +-keep class dev.nucleusframework.nucleus.launcher.windows.NativeWindowsJumpListBridge { native ; } +-keep class dev.nucleusframework.nucleus.launcher.windows.NativeWindowsTaskbarBridge { native ; } +-keep interface dev.nucleusframework.nucleus.launcher.windows.ThumbBarClickListener { void onThumbButtonClick(int); } --keep class * implements io.github.kdroidfilter.nucleus.launcher.windows.ThumbBarClickListener { +-keep class * implements dev.nucleusframework.nucleus.launcher.windows.ThumbBarClickListener { void onThumbButtonClick(int); } diff --git a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-mediaplayer.json b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-mediaplayer.json index 449513559..99f0c013d 100644 --- a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-mediaplayer.json +++ b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-mediaplayer.json @@ -2,19 +2,19 @@ "_meta": { "description": "Compose MediaPlayer Windows (MediaFoundation via JNA)", "matchPackages": [ - "io.github.kdroidfilter.composemediaplayer" + "dev.nucleusframework.composemediaplayer" ] }, "reflection": [ { - "type": "io.github.kdroidfilter.composemediaplayer.windows.MediaFoundationLib", + "type": "dev.nucleusframework.composemediaplayer.windows.MediaFoundationLib", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true, "jniAccessible": true }, { - "type": "io.github.kdroidfilter.composemediaplayer.windows.MediaFoundationLib$NativeVideoMetadata", + "type": "dev.nucleusframework.composemediaplayer.windows.MediaFoundationLib$NativeVideoMetadata", "allDeclaredFields": true, "allDeclaredConstructors": true } diff --git a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-webview-wry.json b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-webview-wry.json index fd707af05..ad20a93cc 100644 --- a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-webview-wry.json +++ b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/compose-webview-wry.json @@ -2,269 +2,269 @@ "_meta": { "description": "Compose WebView (Wry/UniFFI) native bindings", "matchPackages": [ - "io.github.kdroidfilter.webview.wry" + "dev.nucleusframework.webview.wry" ] }, "reflection": [ { - "type": "io.github.kdroidfilter.webview.wry.IntegrityCheckingUniffiLib", + "type": "dev.nucleusframework.webview.wry.IntegrityCheckingUniffiLib", "allDeclaredMethods": true, "allDeclaredFields": true, "allDeclaredConstructors": true, "jniAccessible": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiLib", + "type": "dev.nucleusframework.webview.wry.UniffiLib", "allDeclaredMethods": true, "allDeclaredFields": true, "allDeclaredConstructors": true, "jniAccessible": true }, { - "type": "io.github.kdroidfilter.webview.wry.ForeignBytesStruct", + "type": "dev.nucleusframework.webview.wry.ForeignBytesStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.ForeignBytesStruct$ByValue", + "type": "dev.nucleusframework.webview.wry.ForeignBytesStruct$ByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.RustBufferStruct", + "type": "dev.nucleusframework.webview.wry.RustBufferStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.RustBufferStruct$ByValue", + "type": "dev.nucleusframework.webview.wry.RustBufferStruct$ByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.RustBufferStruct$ByReference", + "type": "dev.nucleusframework.webview.wry.RustBufferStruct$ByReference", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiCallbackInterfaceFree", + "type": "dev.nucleusframework.webview.wry.UniffiCallbackInterfaceFree", "methods": [{"name": "callback", "parameterTypes": ["long"]}] }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiCallbackInterfaceJavaScriptCallbackMethod0", - "methods": [{"name": "callback", "parameterTypes": ["long", "io.github.kdroidfilter.webview.wry.RustBufferStruct$ByValue", "com.sun.jna.Pointer", "io.github.kdroidfilter.webview.wry.UniffiRustCallStatusStruct$ByReference"]}] + "type": "dev.nucleusframework.webview.wry.UniffiCallbackInterfaceJavaScriptCallbackMethod0", + "methods": [{"name": "callback", "parameterTypes": ["long", "dev.nucleusframework.webview.wry.RustBufferStruct$ByValue", "com.sun.jna.Pointer", "dev.nucleusframework.webview.wry.UniffiRustCallStatusStruct$ByReference"]}] }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiCallbackInterfaceNativeLoggerMethod0" + "type": "dev.nucleusframework.webview.wry.UniffiCallbackInterfaceNativeLoggerMethod0" }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiCallbackInterfaceNavigationHandlerMethod0", - "methods": [{"name": "callback", "parameterTypes": ["long", "io.github.kdroidfilter.webview.wry.RustBufferStruct$ByValue", "com.sun.jna.ptr.ByteByReference", "io.github.kdroidfilter.webview.wry.UniffiRustCallStatusStruct$ByReference"]}] + "type": "dev.nucleusframework.webview.wry.UniffiCallbackInterfaceNavigationHandlerMethod0", + "methods": [{"name": "callback", "parameterTypes": ["long", "dev.nucleusframework.webview.wry.RustBufferStruct$ByValue", "com.sun.jna.ptr.ByteByReference", "dev.nucleusframework.webview.wry.UniffiRustCallStatusStruct$ByReference"]}] }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiRustCallStatusStruct", + "type": "dev.nucleusframework.webview.wry.UniffiRustCallStatusStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiRustCallStatusStruct$ByValue", + "type": "dev.nucleusframework.webview.wry.UniffiRustCallStatusStruct$ByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiRustCallStatusStruct$ByReference", + "type": "dev.nucleusframework.webview.wry.UniffiRustCallStatusStruct$ByReference", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStruct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructF32Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructF32Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructF32Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructF32Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructF64Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructF64Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructF64Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructF64Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI8Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI8Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI8Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI8Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI16Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI16Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI16Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI16Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI32Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI32Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI32Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI32Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI64Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI64Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructI64Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructI64Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU8Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU8Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU8Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU8Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU16Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU16Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU16Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU16Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU32Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU32Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU32Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU32Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU64Struct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU64Struct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructU64Struct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructU64Struct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructPointerStruct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructPointerStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructPointerStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructPointerStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructRustBufferStruct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructRustBufferStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructRustBufferStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructRustBufferStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructVoidStruct", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructVoidStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiForeignFutureStructVoidStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiForeignFutureStructVoidStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceJavaScriptCallbackStruct", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceJavaScriptCallbackStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceJavaScriptCallbackStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceJavaScriptCallbackStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceNativeLoggerStruct", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceNativeLoggerStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceNativeLoggerStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceNativeLoggerStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceNavigationHandlerStruct", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceNavigationHandlerStruct", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.UniffiVTableCallbackInterfaceNavigationHandlerStruct$UniffiByValue", + "type": "dev.nucleusframework.webview.wry.UniffiVTableCallbackInterfaceNavigationHandlerStruct$UniffiByValue", "allDeclaredFields": true, "allDeclaredConstructors": true }, { - "type": "io.github.kdroidfilter.webview.wry.WryWebViewPanel" + "type": "dev.nucleusframework.webview.wry.WryWebViewPanel" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceJavaScriptCallback$onResult" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceJavaScriptCallback$onResult" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceJavaScriptCallback$uniffiFree" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceJavaScriptCallback$uniffiFree" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceNativeLogger$handleLog" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceNativeLogger$handleLog" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceNativeLogger$uniffiFree" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceNativeLogger$uniffiFree" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceNavigationHandler$handleNavigation" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceNavigationHandler$handleNavigation" }, { - "type": "io.github.kdroidfilter.webview.wry.uniffiCallbackInterfaceNavigationHandler$uniffiFree" + "type": "dev.nucleusframework.webview.wry.uniffiCallbackInterfaceNavigationHandler$uniffiFree" } ], "resources": [ diff --git a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/knotify.json b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/knotify.json index 1decb1629..13527f32e 100644 --- a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/knotify.json +++ b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/knotify.json @@ -2,50 +2,50 @@ "_meta": { "description": "KNotify Windows toast notification library", "matchPackages": [ - "io.github.kdroidfilter.knotify" + "dev.nucleusframework.knotify" ] }, "reflection": [ { - "type": "io.github.kdroidfilter.knotify.platform.windows.callbacks.ToastActivatedActionCallback", + "type": "dev.nucleusframework.knotify.platform.windows.callbacks.ToastActivatedActionCallback", "methods": [{"name": "invoke", "parameterTypes": ["com.sun.jna.Pointer", "int"]}] }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.callbacks.ToastActivatedCallback", + "type": "dev.nucleusframework.knotify.platform.windows.callbacks.ToastActivatedCallback", "methods": [{"name": "invoke", "parameterTypes": ["com.sun.jna.Pointer"]}] }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.callbacks.ToastDismissedCallback", + "type": "dev.nucleusframework.knotify.platform.windows.callbacks.ToastDismissedCallback", "methods": [{"name": "invoke", "parameterTypes": ["com.sun.jna.Pointer", "int"]}] }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.callbacks.ToastFailedCallback" + "type": "dev.nucleusframework.knotify.platform.windows.callbacks.ToastFailedCallback" }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$activatedActionCallback$1" + "type": "dev.nucleusframework.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$activatedActionCallback$1" }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$activatedCallback$1" + "type": "dev.nucleusframework.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$activatedCallback$1" }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$dismissedCallback$1" + "type": "dev.nucleusframework.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$dismissedCallback$1" }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$failedCallback$1" + "type": "dev.nucleusframework.knotify.platform.windows.provider.WindowsNotificationProvider$createCallbacks$failedCallback$1" }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.nativeintegration.WinToastLibC", + "type": "dev.nucleusframework.knotify.platform.windows.nativeintegration.WinToastLibC", "allDeclaredMethods": true }, { - "type": "io.github.kdroidfilter.knotify.platform.windows.nativeintegration.ExtendedUser32", + "type": "dev.nucleusframework.knotify.platform.windows.nativeintegration.ExtendedUser32", "allDeclaredMethods": true }, { - "type": {"proxy": ["io.github.kdroidfilter.knotify.platform.windows.nativeintegration.WinToastLibC"]} + "type": {"proxy": ["dev.nucleusframework.knotify.platform.windows.nativeintegration.WinToastLibC"]} }, { - "type": {"proxy": ["io.github.kdroidfilter.knotify.platform.windows.nativeintegration.ExtendedUser32"]} + "type": {"proxy": ["dev.nucleusframework.knotify.platform.windows.nativeintegration.ExtendedUser32"]} } ] } diff --git a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/platformtools.json b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/platformtools.json index 1eecaa72d..d05726022 100644 --- a/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/platformtools.json +++ b/plugin-build/plugin/src/main/resources/nucleus/graalvm/library-metadata/platformtools.json @@ -2,14 +2,14 @@ "_meta": { "description": "KDroid PlatformTools (clipboard, etc.)", "matchPackages": [ - "io.github.kdroidfilter.platformtools" + "dev.nucleusframework.platformtools" ] }, "reflection": [ { "type": { "proxy": [ - "io.github.kdroidfilter.platformtools.clipboardmanager.windows.User32Extended" + "dev.nucleusframework.platformtools.clipboardmanager.windows.User32Extended" ] } } diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPaddingTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPaddingTest.kt index c405e4313..55e58ff9a 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPaddingTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPaddingTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal +package dev.nucleusframework.nucleus.desktop.application.internal import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzerIntegrationTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzerIntegrationTest.kt index e72edac80..25392fdea 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzerIntegrationTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzerIntegrationTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ClassForNameDetectorTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ClassForNameDetectorTest.kt index f9468f30d..3df6dce9a 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ClassForNameDetectorTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ClassForNameDetectorTest.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ClassForNameDetector -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.isValidClassName +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ClassForNameDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.isValidClassName import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/NativeMethodDetectorTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/NativeMethodDetectorTest.kt index dbdf3cc66..dd5d4716a 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/NativeMethodDetectorTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/NativeMethodDetectorTest.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.NativeMethodDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.NativeMethodDetector import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue import org.junit.Test diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoCoverageTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoCoverageTest.kt index 8d8c18a8e..b229523f7 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoCoverageTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoCoverageTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import org.junit.Assert.assertTrue import org.junit.Assert.fail diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ReflectionApiDetectorTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ReflectionApiDetectorTest.kt index eda4c1629..ffa783805 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ReflectionApiDetectorTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ReflectionApiDetectorTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResourceDetectorTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResourceDetectorTest.kt index bdc12c639..e832e2f61 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResourceDetectorTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResourceDetectorTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ServiceLoaderDetectorTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ServiceLoaderDetectorTest.kt index 6789f4489..993d68162 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ServiceLoaderDetectorTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ServiceLoaderDetectorTest.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer -import io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer.detectors.ServiceLoaderDetector +import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ServiceLoaderDetector import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue diff --git a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ZayitAnalyzerTest.kt b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ZayitAnalyzerTest.kt index 4571fdd47..42b7621a1 100644 --- a/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ZayitAnalyzerTest.kt +++ b/plugin-build/plugin/src/test/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ZayitAnalyzerTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.desktop.application.internal.analyzer +package dev.nucleusframework.nucleus.desktop.application.internal.analyzer import org.junit.Assert.assertTrue import org.junit.Assume.assumeTrue diff --git a/sample-cmp/build.gradle.kts b/sample-cmp/build.gradle.kts index c6a864c18..808b8cf44 100644 --- a/sample-cmp/build.gradle.kts +++ b/sample-cmp/build.gradle.kts @@ -5,7 +5,7 @@ plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.jetbrainsCompose) alias(libs.plugins.kotlinComposePlugin) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } kotlin { diff --git a/sample-jni/build.gradle.kts b/sample-jni/build.gradle.kts index 4ecffdb82..8e945de0e 100644 --- a/sample-jni/build.gradle.kts +++ b/sample-jni/build.gradle.kts @@ -1,11 +1,11 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -29,7 +29,7 @@ kotlin { } nucleus.application { - mainClass = "io.github.kdroidfilter.samplejni.MainKt" + mainClass = "dev.nucleusframework.samplejni.MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg) diff --git a/sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/ActionsTab.kt b/sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/ActionsTab.kt similarity index 97% rename from sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/ActionsTab.kt rename to sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/ActionsTab.kt index 7318a0785..963b26142 100644 --- a/sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/ActionsTab.kt +++ b/sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/ActionsTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.samplejni +package dev.nucleusframework.samplejni import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -24,7 +24,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import io.github.kdroidfilter.nucleus.application.NucleusWindow +import dev.nucleusframework.nucleus.application.NucleusWindow @Composable fun ActionsTab( diff --git a/sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/Main.kt b/sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/Main.kt similarity index 88% rename from sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/Main.kt rename to sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/Main.kt index b55e19287..84d22fd94 100644 --- a/sample-jni/src/main/kotlin/io/github/kdroidfilter/samplejni/Main.kt +++ b/sample-jni/src/main/kotlin/dev/nucleusframework/samplejni/Main.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.samplejni +package dev.nucleusframework.samplejni import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -28,22 +28,22 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.application.DecoratedWindow -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.nucleusApplication -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.sampleshared.EventsTab -import io.github.kdroidfilter.sampleshared.FancyDemo -import io.github.kdroidfilter.sampleshared.PALETTE -import io.github.kdroidfilter.sampleshared.ScrollTab -import io.github.kdroidfilter.sampleshared.Tab -import io.github.kdroidfilter.sampleshared.TabBar -import io.github.kdroidfilter.sampleshared.logEvent +import dev.nucleusframework.nucleus.application.DecoratedWindow +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.nucleusApplication +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.macOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.sampleshared.EventsTab +import dev.nucleusframework.sampleshared.FancyDemo +import dev.nucleusframework.sampleshared.PALETTE +import dev.nucleusframework.sampleshared.ScrollTab +import dev.nucleusframework.sampleshared.Tab +import dev.nucleusframework.sampleshared.TabBar +import dev.nucleusframework.sampleshared.logEvent fun main() = nucleusApplication(backend = NucleusBackend.Awt) { diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/A11yTab.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/A11yTab.kt similarity index 99% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/A11yTab.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/A11yTab.kt index 238895ea6..7a877fad3 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/A11yTab.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/A11yTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.background import androidx.compose.foundation.border diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/Common.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/Common.kt similarity index 98% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/Common.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/Common.kt index 759bede53..b4c8d3fd7 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/Common.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/Common.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ComplexTab.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ComplexTab.kt similarity index 99% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ComplexTab.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ComplexTab.kt index e7c7c7a1a..f00899808 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ComplexTab.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ComplexTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.background import androidx.compose.foundation.border diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/EventsTab.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/EventsTab.kt similarity index 98% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/EventsTab.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/EventsTab.kt index a1694fb2b..b422ff7be 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/EventsTab.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/EventsTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/FancyDemo.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/FancyDemo.kt similarity index 99% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/FancyDemo.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/FancyDemo.kt index 1a489afa2..9e4734642 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/FancyDemo.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/FancyDemo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.animateFloat diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ScrollTab.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ScrollTab.kt similarity index 98% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ScrollTab.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ScrollTab.kt index 2d4c131ad..232ce8788 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ScrollTab.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ScrollTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.VerticalScrollbar import androidx.compose.foundation.background diff --git a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ZoomTab.kt b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ZoomTab.kt similarity index 99% rename from sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ZoomTab.kt rename to sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ZoomTab.kt index d30c788b0..64de6f2da 100644 --- a/sample-shared/src/main/kotlin/io/github/kdroidfilter/sampleshared/ZoomTab.kt +++ b/sample-shared/src/main/kotlin/dev/nucleusframework/sampleshared/ZoomTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampleshared +package dev.nucleusframework.sampleshared import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/sample-tao/build.gradle.kts b/sample-tao/build.gradle.kts index 4076bf591..3fe1036c4 100644 --- a/sample-tao/build.gradle.kts +++ b/sample-tao/build.gradle.kts @@ -1,12 +1,12 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -42,7 +42,7 @@ tasks.withType().configureEach { } nucleus.application { - mainClass = "io.github.kdroidfilter.sampletao.MainKt" + mainClass = "dev.nucleusframework.sampletao.MainKt" // NOTE: -XstartOnFirstThread is intentionally NOT in `jvmArgs` here. The // Nucleus plugin forwards `jvmArgs` to native-image too, where the flag @@ -72,7 +72,7 @@ nucleus.application { packageVersion = "1.0.0" macOS { - bundleID = "io.github.kdroidfilter.sampletao" + bundleID = "dev.nucleusframework.sampletao" // macOsSdkVersion defaults to "26.0" in the Nucleus plugin — vtool // patches the binary's loader command so macOS 26 enables the // Liquid-Glass / large-corner-radius treatment automatically. diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/ActionsTab.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/ActionsTab.kt similarity index 99% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/ActionsTab.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/ActionsTab.kt index 81a0e42f3..2e4088165 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/ActionsTab.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/ActionsTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -34,7 +34,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.WindowPlacement -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.window.tao.TaoWindow @Composable fun ActionsTab( diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/Main.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/Main.kt similarity index 94% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/Main.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/Main.kt index 3205ac283..201e1a5c6 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/Main.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/Main.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background @@ -30,17 +30,17 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.rememberWindowState import java.awt.datatransfer.StringSelection -import io.github.kdroidfilter.nucleus.application.DecoratedWindow -import io.github.kdroidfilter.nucleus.application.NucleusBackend -import io.github.kdroidfilter.nucleus.application.nucleusApplication -import io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer -import io.github.kdroidfilter.nucleus.window.NucleusDecoratedWindowTheme -import io.github.kdroidfilter.nucleus.window.TitleBar -import io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.styling.TitleBarColors -import io.github.kdroidfilter.nucleus.window.styling.TitleBarMetrics -import io.github.kdroidfilter.nucleus.window.styling.TitleBarStyle -import io.github.kdroidfilter.sampleshared.* +import dev.nucleusframework.nucleus.application.DecoratedWindow +import dev.nucleusframework.nucleus.application.NucleusBackend +import dev.nucleusframework.nucleus.application.nucleusApplication +import dev.nucleusframework.nucleus.graalvm.GraalVmInitializer +import dev.nucleusframework.nucleus.window.NucleusDecoratedWindowTheme +import dev.nucleusframework.nucleus.window.TitleBar +import dev.nucleusframework.nucleus.window.macOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.styling.TitleBarColors +import dev.nucleusframework.nucleus.window.styling.TitleBarMetrics +import dev.nucleusframework.nucleus.window.styling.TitleBarStyle +import dev.nucleusframework.sampleshared.* fun main() { GraalVmInitializer.initialize() @@ -50,7 +50,7 @@ fun main() { @OptIn(ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class) @Composable private fun DnDStage0Banner(onLog: (String) -> Unit) { - val diag = io.github.kdroidfilter.nucleus.window.tao.TaoDnDDiagnostics + val diag = dev.nucleusframework.nucleus.window.tao.TaoDnDDiagnostics var dropCount by remember { mutableStateOf(0) } var lastDrop by remember { mutableStateOf(null) } val dropTarget = remember { diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleSwiftUIBridge.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleSwiftUIBridge.kt similarity index 97% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleSwiftUIBridge.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleSwiftUIBridge.kt index 26c39942c..c851a0cca 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleSwiftUIBridge.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleSwiftUIBridge.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao import java.io.File import java.lang.foreign.Arena @@ -22,7 +22,7 @@ import kotlin.io.path.Path * * The Swift handle pointer is tracked as an opaque [MemorySegment]; the * `NSView*` pointer is exposed as a `Long` so it slots straight into - * [io.github.kdroidfilter.nucleus.window.tao.NucleusPlatformView.NsView] + * [dev.nucleusframework.nucleus.window.tao.NucleusPlatformView.NsView] * without further conversion. */ internal object SampleSwiftUIBridge { diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewBridge.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewBridge.kt similarity index 88% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewBridge.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewBridge.kt index d45c74b0b..c7fea70ba 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewBridge.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader internal object SampleWebViewBridge { private const val LIBRARY_NAME = "sample_tao_webview" diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewController.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewController.kt similarity index 97% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewController.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewController.kt index 074b87a75..5cf7fa626 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewController.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewController.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform /** * Backend-agnostic façade over the macOS WKWebView and Linux diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewLinuxBridge.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewLinuxBridge.kt similarity index 91% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewLinuxBridge.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewLinuxBridge.kt index 986b4fab9..3c39a2541 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewLinuxBridge.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewLinuxBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to `linux/sample_webview.c`. Linux equivalent of the diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewWindowsBridge.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewWindowsBridge.kt similarity index 96% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewWindowsBridge.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewWindowsBridge.kt index c0c2a25a8..6b3c0baea 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SampleWebViewWindowsBridge.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SampleWebViewWindowsBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader /** * JNI bridge to the C++ WebView2 wrapper at diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SwiftUITab.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SwiftUITab.kt similarity index 95% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SwiftUITab.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SwiftUITab.kt index 8fff82010..49bcf2384 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/SwiftUITab.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/SwiftUITab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -26,10 +26,10 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.tao.NativeView -import io.github.kdroidfilter.nucleus.window.tao.NucleusPlatformView -import io.github.kdroidfilter.nucleus.window.tao.consumeOverlayPointerEvents +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.tao.NativeView +import dev.nucleusframework.nucleus.window.tao.NucleusPlatformView +import dev.nucleusframework.nucleus.window.tao.consumeOverlayPointerEvents import java.lang.foreign.MemorySegment /** diff --git a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/WebViewTab.kt b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/WebViewTab.kt similarity index 97% rename from sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/WebViewTab.kt rename to sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/WebViewTab.kt index 1e0739992..e66eca246 100644 --- a/sample-tao/src/main/kotlin/io/github/kdroidfilter/sampletao/WebViewTab.kt +++ b/sample-tao/src/main/kotlin/dev/nucleusframework/sampletao/WebViewTab.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.sampletao +package dev.nucleusframework.sampletao import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.RepeatMode @@ -47,11 +47,11 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.window.tao.LocalTaoWindow -import io.github.kdroidfilter.nucleus.window.tao.NativeView -import io.github.kdroidfilter.nucleus.window.tao.NucleusPlatformView -import io.github.kdroidfilter.nucleus.window.tao.consumeOverlayPointerEvents +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.window.tao.LocalTaoWindow +import dev.nucleusframework.nucleus.window.tao.NativeView +import dev.nucleusframework.nucleus.window.tao.NucleusPlatformView +import dev.nucleusframework.nucleus.window.tao.consumeOverlayPointerEvents import kotlinx.coroutines.delay private const val INITIAL_URL = "https://nucleusframework.dev" diff --git a/sample-tao/src/main/native/linux/sample_webview.c b/sample-tao/src/main/native/linux/sample_webview.c index 86fc4c6f9..dae0eac21 100644 --- a/sample-tao/src/main/native/linux/sample_webview.c +++ b/sample-tao/src/main/native/linux/sample_webview.c @@ -23,7 +23,7 @@ #include JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCreate( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeCreate( JNIEnv *env, jclass clazz) { (void) env; (void) clazz; @@ -38,7 +38,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCreate( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeRelease( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeRelease( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -58,7 +58,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeRelease( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeLoadUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeLoadUrl( JNIEnv *env, jclass clazz, jlong handle, jstring url_str) { (void) clazz; @@ -71,7 +71,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeLoadUrl( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeGoBack( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -80,7 +80,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeGoBack( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeGoForward( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -89,7 +89,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeGoForward( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeReload( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeReload( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -98,7 +98,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeReload( } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCanGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeCanGoBack( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -108,7 +108,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCanGoBack( } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCanGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeCanGoForward( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; @@ -118,7 +118,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCanGoForwar } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCurrentUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeCurrentUrl( JNIEnv *env, jclass clazz, jlong handle) { (void) clazz; @@ -130,7 +130,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeCurrentUrl( } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewLinuxBridge_nativeIsLoading( +Java_dev_nucleusframework_sampletao_SampleWebViewLinuxBridge_nativeIsLoading( JNIEnv *env, jclass clazz, jlong handle) { (void) env; (void) clazz; diff --git a/sample-tao/src/main/native/macos/sample_webview.m b/sample-tao/src/main/native/macos/sample_webview.m index eda4d4c13..b026c1862 100644 --- a/sample-tao/src/main/native/macos/sample_webview.m +++ b/sample-tao/src/main/native/macos/sample_webview.m @@ -16,7 +16,7 @@ #include JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeCreate( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeCreate( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -28,7 +28,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeLoadUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeLoadUrl( JNIEnv *env, jclass clazz, jlong viewPtr, jstring urlStr) { (void)clazz; @@ -46,7 +46,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeGoBack( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -56,7 +56,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeGoForward( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -66,7 +66,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeReload( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeReload( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -76,7 +76,7 @@ } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeCanGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeCanGoBack( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -86,7 +86,7 @@ } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeCanGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeCanGoForward( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -96,7 +96,7 @@ } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeIsLoading( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeIsLoading( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; @@ -106,7 +106,7 @@ } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeCurrentUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeCurrentUrl( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)clazz; @@ -118,7 +118,7 @@ } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewBridge_nativeRelease( +Java_dev_nucleusframework_sampletao_SampleWebViewBridge_nativeRelease( JNIEnv *env, jclass clazz, jlong viewPtr) { (void)env; (void)clazz; diff --git a/sample-tao/src/main/native/windows/sample_webview.cpp b/sample-tao/src/main/native/windows/sample_webview.cpp index 55f7154d1..124c9a231 100644 --- a/sample-tao/src/main/native/windows/sample_webview.cpp +++ b/sample-tao/src/main/native/windows/sample_webview.cpp @@ -548,7 +548,7 @@ static WebViewState *lookup(jlong handle) { extern "C" { JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCreate( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeCreate( JNIEnv *env, jclass, jlong parentHwnd, jstring initialUrl) { if (parentHwnd == 0) return 0; HWND parent = reinterpret_cast(static_cast(parentHwnd)); @@ -567,7 +567,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCreate( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeRelease( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeRelease( JNIEnv *, jclass, jlong handle) { WebViewState *s = nullptr; { @@ -581,7 +581,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeRelease( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeLoadUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeLoadUrl( JNIEnv *env, jclass, jlong handle, jstring url) { WebViewState *s = lookup(handle); if (!s || !s->webview) return; @@ -590,42 +590,42 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeLoadUrl( } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeGoBack( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); if (s && s->webview) s->webview->GoBack(); } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeGoForward( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); if (s && s->webview) s->webview->GoForward(); } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeReload( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeReload( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); if (s && s->webview) s->webview->Reload(); } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCanGoBack( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeCanGoBack( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); return (s && s->canGoBack.load(std::memory_order_acquire)) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCanGoForward( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeCanGoForward( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); return (s && s->canGoForward.load(std::memory_order_acquire)) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCurrentUrl( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeCurrentUrl( JNIEnv *env, jclass, jlong handle) { WebViewState *s = lookup(handle); if (!s) return nullptr; @@ -638,14 +638,14 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeCurrentUr } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeIsLoading( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeIsLoading( JNIEnv *, jclass, jlong handle) { WebViewState *s = lookup(handle); return (s && s->isLoading.load(std::memory_order_acquire)) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeSetBounds( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeSetBounds( JNIEnv *, jclass, jlong handle, jint xPx, jint yPx, jint widthPx, jint heightPx) { WebViewState *s = lookup(handle); if (!s) return; @@ -663,7 +663,7 @@ Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeSetBounds } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_sampletao_SampleWebViewWindowsBridge_nativeSetCornerRadius( +Java_dev_nucleusframework_sampletao_SampleWebViewWindowsBridge_nativeSetCornerRadius( JNIEnv *, jclass, jlong handle, jfloat radiusPx) { WebViewState *s = lookup(handle); if (!s) return; diff --git a/scheduler-demo/build.gradle.kts b/scheduler-demo/build.gradle.kts index 5a530ee1c..f520b1c05 100644 --- a/scheduler-demo/build.gradle.kts +++ b/scheduler-demo/build.gradle.kts @@ -1,5 +1,5 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SigningAlgorithm -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.SigningAlgorithm +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { @@ -7,7 +7,7 @@ plugins { alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) alias(libs.plugins.kotlinxSerialization) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -59,7 +59,7 @@ nucleus.application { windows { signing { enabled = true - certificateFile.set(rootProject.file("example/packaging/KDroidFilter.pfx")) + certificateFile.set(rootProject.file("example/packaging/NucleusFramework.pfx")) certificatePassword = "ChangeMe-Temp123!" algorithm = SigningAlgorithm.Sha256 timestampServer = "http://timestamp.digicert.com" @@ -74,10 +74,10 @@ nucleus.application { appx { applicationId = "SchedulerDemo" - publisherDisplayName = "KDroidFilter" + publisherDisplayName = "NucleusFramework" displayName = "Scheduler Demo" publisher = "CN=D541E802-6D30-446A-864E-2E8ABD2DAA5E" - identityName = "KDroidFilter.SchedulerDemo" + identityName = "NucleusFramework.SchedulerDemo" languages = listOf("en-US", "fr-FR") } } diff --git a/scheduler-demo/src/main/kotlin/schedulerdemo/Main.kt b/scheduler-demo/src/main/kotlin/schedulerdemo/Main.kt index 8bf716708..a48882a2e 100644 --- a/scheduler-demo/src/main/kotlin/schedulerdemo/Main.kt +++ b/scheduler-demo/src/main/kotlin/schedulerdemo/Main.kt @@ -3,11 +3,11 @@ package schedulerdemo import androidx.compose.ui.Alignment import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.application -import io.github.kdroidfilter.nucleus.darkmodedetector.isSystemInDarkMode -import io.github.kdroidfilter.nucleus.scheduler.DesktopBootReceiver -import io.github.kdroidfilter.nucleus.scheduler.TaskRegistry -import io.github.kdroidfilter.nucleus.window.jewel.JewelDecoratedWindow -import io.github.kdroidfilter.nucleus.window.jewel.JewelTitleBar +import dev.nucleusframework.nucleus.darkmodedetector.isSystemInDarkMode +import dev.nucleusframework.nucleus.scheduler.DesktopBootReceiver +import dev.nucleusframework.nucleus.scheduler.TaskRegistry +import dev.nucleusframework.nucleus.window.jewel.JewelDecoratedWindow +import dev.nucleusframework.nucleus.window.jewel.JewelTitleBar import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme import org.jetbrains.jewel.intui.standalone.theme.createDefaultTextStyle diff --git a/scheduler-demo/src/main/kotlin/schedulerdemo/SchedulerDemoView.kt b/scheduler-demo/src/main/kotlin/schedulerdemo/SchedulerDemoView.kt index a884f59f7..fd317cff9 100644 --- a/scheduler-demo/src/main/kotlin/schedulerdemo/SchedulerDemoView.kt +++ b/scheduler-demo/src/main/kotlin/schedulerdemo/SchedulerDemoView.kt @@ -23,10 +23,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.scheduler.CronExpression -import io.github.kdroidfilter.nucleus.scheduler.DesktopTaskScheduler -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.CronExpression +import dev.nucleusframework.nucleus.scheduler.DesktopTaskScheduler +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest import org.jetbrains.jewel.ui.component.DefaultButton import org.jetbrains.jewel.ui.component.GroupHeader import org.jetbrains.jewel.ui.component.OutlinedButton diff --git a/scheduler-demo/src/main/kotlin/schedulerdemo/task/SampleTasks.kt b/scheduler-demo/src/main/kotlin/schedulerdemo/task/SampleTasks.kt index a9f4dc970..538aab471 100644 --- a/scheduler-demo/src/main/kotlin/schedulerdemo/task/SampleTasks.kt +++ b/scheduler-demo/src/main/kotlin/schedulerdemo/task/SampleTasks.kt @@ -1,10 +1,10 @@ package schedulerdemo.task -import io.github.kdroidfilter.nucleus.scheduler.DesktopTask -import io.github.kdroidfilter.nucleus.scheduler.TaskContext -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskResult -import io.github.kdroidfilter.nucleus.scheduler.inputData +import dev.nucleusframework.nucleus.scheduler.DesktopTask +import dev.nucleusframework.nucleus.scheduler.TaskContext +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskResult +import dev.nucleusframework.nucleus.scheduler.inputData import kotlinx.serialization.Serializable import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/scheduler-testing/build.gradle.kts b/scheduler-testing/build.gradle.kts index f27353b9d..bf8441c07 100644 --- a/scheduler-testing/build.gradle.kts +++ b/scheduler-testing/build.gradle.kts @@ -32,12 +32,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.scheduler-testing", publishVersion) + coordinates("dev.nucleusframework", "nucleus.scheduler-testing", publishVersion) pom { name.set("Nucleus Scheduler Testing") description.set("In-memory test scheduler for Nucleus scheduler module") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -48,16 +48,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestConstraintChecker.kt b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestConstraintChecker.kt similarity index 87% rename from scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestConstraintChecker.kt rename to scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestConstraintChecker.kt index 7639bcc3a..d8a426a1d 100644 --- a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestConstraintChecker.kt +++ b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestConstraintChecker.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.scheduler.testing - -import io.github.kdroidfilter.nucleus.scheduler.Constraints -import io.github.kdroidfilter.nucleus.scheduler.DesktopBootReceiver -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.NetworkType -import io.github.kdroidfilter.nucleus.scheduler.internal.ConstraintChecker -import io.github.kdroidfilter.nucleus.scheduler.internal.ConstraintResult +package dev.nucleusframework.nucleus.scheduler.testing + +import dev.nucleusframework.nucleus.scheduler.Constraints +import dev.nucleusframework.nucleus.scheduler.DesktopBootReceiver +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.NetworkType +import dev.nucleusframework.nucleus.scheduler.internal.ConstraintChecker +import dev.nucleusframework.nucleus.scheduler.internal.ConstraintResult import java.io.Closeable /** diff --git a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt similarity index 92% rename from scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt rename to scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt index b7fc527fa..76c2e3fdc 100644 --- a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt +++ b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestDesktopTaskScheduler.kt @@ -1,20 +1,20 @@ -package io.github.kdroidfilter.nucleus.scheduler.testing - -import io.github.kdroidfilter.nucleus.scheduler.Constraints -import io.github.kdroidfilter.nucleus.scheduler.DesktopTaskScheduler -import io.github.kdroidfilter.nucleus.scheduler.ExistingTaskPolicy -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.LastTaskResult -import io.github.kdroidfilter.nucleus.scheduler.TaskContext -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRegistry -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest -import io.github.kdroidfilter.nucleus.scheduler.TaskResult -import io.github.kdroidfilter.nucleus.scheduler.TaskState -import io.github.kdroidfilter.nucleus.scheduler.internal.ConstraintChecker -import io.github.kdroidfilter.nucleus.scheduler.internal.ConstraintResult -import io.github.kdroidfilter.nucleus.scheduler.internal.PlatformScheduler +package dev.nucleusframework.nucleus.scheduler.testing + +import dev.nucleusframework.nucleus.scheduler.Constraints +import dev.nucleusframework.nucleus.scheduler.DesktopTaskScheduler +import dev.nucleusframework.nucleus.scheduler.ExistingTaskPolicy +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.LastTaskResult +import dev.nucleusframework.nucleus.scheduler.TaskContext +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRegistry +import dev.nucleusframework.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.TaskResult +import dev.nucleusframework.nucleus.scheduler.TaskState +import dev.nucleusframework.nucleus.scheduler.internal.ConstraintChecker +import dev.nucleusframework.nucleus.scheduler.internal.ConstraintResult +import dev.nucleusframework.nucleus.scheduler.internal.PlatformScheduler import java.io.Closeable import kotlin.time.Duration @@ -187,7 +187,7 @@ public class TestDesktopTaskScheduler( * Otherwise the return value is the [TaskResult] produced by `doWork()`. * * @throws IllegalStateException if the task is not enqueued - * @throws io.github.kdroidfilter.nucleus.scheduler.TaskNotFoundException if [taskId] is not in [registry] + * @throws dev.nucleusframework.nucleus.scheduler.TaskNotFoundException if [taskId] is not in [registry] */ public suspend fun runTask( taskId: TaskId, diff --git a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestTaskRunner.kt b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestTaskRunner.kt similarity index 79% rename from scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestTaskRunner.kt rename to scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestTaskRunner.kt index 75f0faa1c..2e9297f4b 100644 --- a/scheduler-testing/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/TestTaskRunner.kt +++ b/scheduler-testing/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/testing/TestTaskRunner.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.scheduler.testing +package dev.nucleusframework.nucleus.scheduler.testing -import io.github.kdroidfilter.nucleus.scheduler.DesktopTask -import io.github.kdroidfilter.nucleus.scheduler.TaskContext -import io.github.kdroidfilter.nucleus.scheduler.TaskData -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskResult +import dev.nucleusframework.nucleus.scheduler.DesktopTask +import dev.nucleusframework.nucleus.scheduler.TaskContext +import dev.nucleusframework.nucleus.scheduler.TaskData +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskResult /** * Runs a [DesktopTask] in isolation without any OS scheduler involvement. diff --git a/scheduler-testing/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/SchedulerTestingTest.kt b/scheduler-testing/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/testing/SchedulerTestingTest.kt similarity index 95% rename from scheduler-testing/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/SchedulerTestingTest.kt rename to scheduler-testing/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/testing/SchedulerTestingTest.kt index dea45a70f..b421ccf01 100644 --- a/scheduler-testing/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/testing/SchedulerTestingTest.kt +++ b/scheduler-testing/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/testing/SchedulerTestingTest.kt @@ -1,18 +1,18 @@ -package io.github.kdroidfilter.nucleus.scheduler.testing - -import io.github.kdroidfilter.nucleus.scheduler.DesktopTask -import io.github.kdroidfilter.nucleus.scheduler.DesktopTaskScheduler -import io.github.kdroidfilter.nucleus.scheduler.ExistingTaskPolicy -import io.github.kdroidfilter.nucleus.scheduler.LastTaskResult -import io.github.kdroidfilter.nucleus.scheduler.TaskContext -import io.github.kdroidfilter.nucleus.scheduler.TaskData -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskRegistry -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest -import io.github.kdroidfilter.nucleus.scheduler.TaskResult -import io.github.kdroidfilter.nucleus.scheduler.TaskState -import io.github.kdroidfilter.nucleus.scheduler.decode -import io.github.kdroidfilter.nucleus.scheduler.inputData +package dev.nucleusframework.nucleus.scheduler.testing + +import dev.nucleusframework.nucleus.scheduler.DesktopTask +import dev.nucleusframework.nucleus.scheduler.DesktopTaskScheduler +import dev.nucleusframework.nucleus.scheduler.ExistingTaskPolicy +import dev.nucleusframework.nucleus.scheduler.LastTaskResult +import dev.nucleusframework.nucleus.scheduler.TaskContext +import dev.nucleusframework.nucleus.scheduler.TaskData +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskRegistry +import dev.nucleusframework.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.TaskResult +import dev.nucleusframework.nucleus.scheduler.TaskState +import dev.nucleusframework.nucleus.scheduler.decode +import dev.nucleusframework.nucleus.scheduler.inputData import kotlinx.coroutines.runBlocking import kotlinx.serialization.Serializable import kotlin.test.Test diff --git a/scheduler/build.gradle.kts b/scheduler/build.gradle.kts index f1ef0b36a..2ad567236 100644 --- a/scheduler/build.gradle.kts +++ b/scheduler/build.gradle.kts @@ -85,12 +85,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.scheduler", publishVersion) + coordinates("dev.nucleusframework", "nucleus.scheduler", publishVersion) pom { name.set("Nucleus Scheduler") description.set("OS-level background task scheduling for Compose Desktop (systemd user timers on Linux)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -101,16 +101,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/Constraints.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/Constraints.kt similarity index 98% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/Constraints.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/Constraints.kt index 2c765b1c2..95b2a043c 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/Constraints.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/Constraints.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Describes conditions that must be met before a scheduled task executes. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/CronExpression.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/CronExpression.kt similarity index 97% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/CronExpression.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/CronExpression.kt index 3a76c2c30..72797e051 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/CronExpression.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/CronExpression.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import java.time.DayOfWeek import java.time.LocalTime diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopBootReceiver.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopBootReceiver.kt similarity index 91% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopBootReceiver.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopBootReceiver.kt index d311b5214..52b913e38 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopBootReceiver.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopBootReceiver.kt @@ -1,13 +1,13 @@ -package io.github.kdroidfilter.nucleus.scheduler - -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.scheduler.internal.ConstraintChecker -import io.github.kdroidfilter.nucleus.scheduler.internal.LinuxSystemdScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.MacOSLaunchdScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.SystemInfoConstraintChecker -import io.github.kdroidfilter.nucleus.scheduler.internal.TaskMetadataStore -import io.github.kdroidfilter.nucleus.scheduler.internal.WindowsTaskScheduler +package dev.nucleusframework.nucleus.scheduler + +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.scheduler.internal.ConstraintChecker +import dev.nucleusframework.nucleus.scheduler.internal.LinuxSystemdScheduler +import dev.nucleusframework.nucleus.scheduler.internal.MacOSLaunchdScheduler +import dev.nucleusframework.nucleus.scheduler.internal.SystemInfoConstraintChecker +import dev.nucleusframework.nucleus.scheduler.internal.TaskMetadataStore +import dev.nucleusframework.nucleus.scheduler.internal.WindowsTaskScheduler import kotlinx.coroutines.runBlocking import java.util.logging.Level import java.util.logging.Logger diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTask.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTask.kt similarity index 93% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTask.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTask.kt index bd4b8c611..c59ed1092 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTask.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTask.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * A unit of work that can be scheduled to run in the background, diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTaskScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTaskScheduler.kt similarity index 86% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTaskScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTaskScheduler.kt index eea761652..afa29f9b9 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/DesktopTaskScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/DesktopTaskScheduler.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.scheduler.internal.LinuxSystemdScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.MacOSLaunchdScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.NoopScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.PlatformScheduler -import io.github.kdroidfilter.nucleus.scheduler.internal.WindowsTaskScheduler +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.scheduler.internal.LinuxSystemdScheduler +import dev.nucleusframework.nucleus.scheduler.internal.MacOSLaunchdScheduler +import dev.nucleusframework.nucleus.scheduler.internal.NoopScheduler +import dev.nucleusframework.nucleus.scheduler.internal.PlatformScheduler +import dev.nucleusframework.nucleus.scheduler.internal.WindowsTaskScheduler import java.util.logging.Logger /** diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/ExistingTaskPolicy.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/ExistingTaskPolicy.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/ExistingTaskPolicy.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/ExistingTaskPolicy.kt index 96ad599bd..d53a24c37 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/ExistingTaskPolicy.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/ExistingTaskPolicy.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Controls what happens when [DesktopTaskScheduler.enqueue] is called diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/InternalSchedulerApi.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/InternalSchedulerApi.kt similarity index 92% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/InternalSchedulerApi.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/InternalSchedulerApi.kt index 0841cf81c..7412f07d5 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/InternalSchedulerApi.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/InternalSchedulerApi.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Marks declarations that are internal to the scheduler infrastructure diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/LastTaskResult.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/LastTaskResult.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/LastTaskResult.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/LastTaskResult.kt index c553479a4..721e39c84 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/LastTaskResult.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/LastTaskResult.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/RetryPolicy.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/RetryPolicy.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/RetryPolicy.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/RetryPolicy.kt index 02584d621..98bf779e4 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/RetryPolicy.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/RetryPolicy.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskContext.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskContext.kt similarity index 95% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskContext.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskContext.kt index 5be2054e6..a1dacb2c9 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskContext.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskContext.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import kotlinx.serialization.KSerializer import kotlinx.serialization.serializer diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskData.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskData.kt similarity index 98% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskData.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskData.kt index b3dd91fa4..7ae5857ec 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskData.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskData.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import kotlinx.serialization.KSerializer import kotlinx.serialization.json.Json diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskId.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskId.kt similarity index 94% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskId.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskId.kt index 43bb0d1df..fcd63b1a1 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskId.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskId.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Strongly-typed identifier for a scheduled task. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskInfo.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskInfo.kt similarity index 95% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskInfo.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskInfo.kt index 0151828fc..6006abe4c 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskInfo.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Runtime information about a scheduled task. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRegistry.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRegistry.kt similarity index 97% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRegistry.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRegistry.kt index 1cfe5baf6..cc2b22ac3 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRegistry.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRegistry.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * Maps task IDs to factory lambdas that create [DesktopTask] instances. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRequest.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRequest.kt similarity index 99% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRequest.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRequest.kt index 0abb5b8f0..9afe37769 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskRequest.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskRequest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler import kotlinx.serialization.KSerializer import kotlinx.serialization.serializer diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskResult.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskResult.kt similarity index 93% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskResult.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskResult.kt index 6ce808f96..ec0a1824a 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/TaskResult.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/TaskResult.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler +package dev.nucleusframework.nucleus.scheduler /** * The outcome of a [DesktopTask.doWork] invocation. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConstraintChecker.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConstraintChecker.kt similarity index 79% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConstraintChecker.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConstraintChecker.kt index 2a0d54d10..a1add999b 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConstraintChecker.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConstraintChecker.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.scheduler.Constraints -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.Constraints +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi /** * Result of evaluating [Constraints] against the current system state. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdScheduler.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdScheduler.kt index 6e23af860..ea0702463 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdScheduler.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal - -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.scheduler.ExistingTaskPolicy -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest -import io.github.kdroidfilter.nucleus.scheduler.TaskState +package dev.nucleusframework.nucleus.scheduler.internal + +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.scheduler.ExistingTaskPolicy +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.TaskState import java.io.File import java.util.logging.Logger diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt similarity index 92% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt index bdeb22145..fa7b45932 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/LinuxSystemdSchedulerJni.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_scheduler_linux" diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt similarity index 97% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt index 053f5874b..9808e98ff 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdScheduler.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal - -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.scheduler.ExistingTaskPolicy -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest -import io.github.kdroidfilter.nucleus.scheduler.TaskState +package dev.nucleusframework.nucleus.scheduler.internal + +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.scheduler.ExistingTaskPolicy +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.TaskState import java.io.File import java.util.concurrent.TimeUnit import java.util.logging.Level @@ -20,7 +20,7 @@ import java.util.logging.Logger * falling back to shell commands otherwise. * * Each task creates a plist with label - * `io.github.kdroidfilter.nucleus.{appId}.{taskId}`. + * `dev.nucleusframework.nucleus.{appId}.{taskId}`. */ @OptIn(InternalSchedulerApi::class) @Suppress("TooManyFunctions") @@ -28,7 +28,7 @@ internal object MacOSLaunchdScheduler : PlatformScheduler { private val logger = Logger.getLogger(MacOSLaunchdScheduler::class.java.name) private const val SCHEDULER_ARG = "--nucleus-scheduler-run" private const val COMMAND_TIMEOUT_SECONDS = 10L - private const val LABEL_PREFIX = "io.github.kdroidfilter.nucleus" + private const val LABEL_PREFIX = "dev.nucleusframework.nucleus" private const val CAL_NOT_SET = -1 private val useNative: Boolean = MacOSLaunchdSchedulerJni.isLoaded diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt similarity index 95% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt index e2bfb5809..dcecb7b1d 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/MacOSLaunchdSchedulerJni.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_scheduler" diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/NoopScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/NoopScheduler.kt similarity index 64% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/NoopScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/NoopScheduler.kt index c770b4a72..8865e0df9 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/NoopScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/NoopScheduler.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest /** * No-op scheduler for unsupported platforms. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/PlatformScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/PlatformScheduler.kt similarity index 75% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/PlatformScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/PlatformScheduler.kt index 66abf8060..33112ef1f 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/PlatformScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/PlatformScheduler.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest /** * Platform-specific scheduler backend. diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt similarity index 89% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt index 335f16d35..649c5301c 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/SystemInfoConstraintChecker.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.scheduler.Constraints -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.NetworkType -import io.github.kdroidfilter.nucleus.systeminfo.SystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.scheduler.Constraints +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.NetworkType +import dev.nucleusframework.nucleus.systeminfo.SystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus import java.util.logging.Logger /** diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskMetadataStore.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskMetadataStore.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskMetadataStore.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskMetadataStore.kt index 9e5c13000..bb69b0b1a 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskMetadataStore.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskMetadataStore.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.scheduler.Constraints -import io.github.kdroidfilter.nucleus.scheduler.LastTaskResult -import io.github.kdroidfilter.nucleus.scheduler.NetworkType -import io.github.kdroidfilter.nucleus.scheduler.TaskContext -import io.github.kdroidfilter.nucleus.scheduler.TaskData -import io.github.kdroidfilter.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.scheduler.Constraints +import dev.nucleusframework.nucleus.scheduler.LastTaskResult +import dev.nucleusframework.nucleus.scheduler.NetworkType +import dev.nucleusframework.nucleus.scheduler.TaskContext +import dev.nucleusframework.nucleus.scheduler.TaskData +import dev.nucleusframework.nucleus.scheduler.TaskId import kotlinx.serialization.json.Json import java.io.File import java.util.Properties diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskWrapperScript.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskWrapperScript.kt similarity index 97% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskWrapperScript.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskWrapperScript.kt index f08d42cdf..47f673545 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/TaskWrapperScript.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/TaskWrapperScript.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.scheduler.TaskId import java.io.File /** diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskScheduler.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskScheduler.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskScheduler.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskScheduler.kt index 148e7949e..7200c8f06 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskScheduler.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskScheduler.kt @@ -1,12 +1,12 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal - -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp -import io.github.kdroidfilter.nucleus.scheduler.ExistingTaskPolicy -import io.github.kdroidfilter.nucleus.scheduler.InternalSchedulerApi -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskInfo -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest -import io.github.kdroidfilter.nucleus.scheduler.TaskState +package dev.nucleusframework.nucleus.scheduler.internal + +import dev.nucleusframework.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.scheduler.ExistingTaskPolicy +import dev.nucleusframework.nucleus.scheduler.InternalSchedulerApi +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskInfo +import dev.nucleusframework.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.TaskState import java.io.File import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt similarity index 96% rename from scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt rename to scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt index 5840b0192..62cba1ca0 100644 --- a/scheduler/src/main/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt +++ b/scheduler/src/main/kotlin/dev/nucleusframework/nucleus/scheduler/internal/WindowsTaskSchedulerJni.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_scheduler" diff --git a/scheduler/src/main/native/linux/nucleus_scheduler_linux.c b/scheduler/src/main/native/linux/nucleus_scheduler_linux.c index e1268bcdb..37e0d3bf9 100644 --- a/scheduler/src/main/native/linux/nucleus_scheduler_linux.c +++ b/scheduler/src/main/native/linux/nucleus_scheduler_linux.c @@ -25,7 +25,7 @@ /* ---- JNI class name macro --------------------------------------------- */ -#define JNI_PREFIX Java_io_github_kdroidfilter_nucleus_scheduler_internal_LinuxSystemdSchedulerJni_ +#define JNI_PREFIX Java_dev_nucleusframework_nucleus_scheduler_internal_LinuxSystemdSchedulerJni_ #define CONCAT2(a, b) a##b #define CONCAT(a, b) CONCAT2(a, b) #define JNI_FN(name) CONCAT(JNI_PREFIX, name) diff --git a/scheduler/src/main/native/macos/nucleus_scheduler.m b/scheduler/src/main/native/macos/nucleus_scheduler.m index 369b1f62f..b94db9487 100644 --- a/scheduler/src/main/native/macos/nucleus_scheduler.m +++ b/scheduler/src/main/native/macos/nucleus_scheduler.m @@ -14,7 +14,7 @@ // ============================================================================ #define JNI_CLASS(name) \ - Java_io_github_kdroidfilter_nucleus_scheduler_internal_MacOSLaunchdSchedulerJni_##name + Java_dev_nucleusframework_nucleus_scheduler_internal_MacOSLaunchdSchedulerJni_##name // ============================================================================ // JNI helpers diff --git a/scheduler/src/main/native/windows/nucleus_scheduler.cpp b/scheduler/src/main/native/windows/nucleus_scheduler.cpp index de6f223f8..098c16000 100644 --- a/scheduler/src/main/native/windows/nucleus_scheduler.cpp +++ b/scheduler/src/main/native/windows/nucleus_scheduler.cpp @@ -402,13 +402,13 @@ static jstring createTaskInternal( } // ─── JNI prefix ───────────────────────────────────────────────────────────── -// Package: io.github.kdroidfilter.nucleus.scheduler.internal +// Package: dev.nucleusframework.nucleus.scheduler.internal // Class: WindowsTaskSchedulerJni // Double indirection so JNI_CLASS is expanded before ## concatenation #define PASTE_(a, b) a##b #define PASTE(a, b) PASTE_(a, b) -#define JNI_CLASS Java_io_github_kdroidfilter_nucleus_scheduler_internal_WindowsTaskSchedulerJni_ +#define JNI_CLASS Java_dev_nucleusframework_nucleus_scheduler_internal_WindowsTaskSchedulerJni_ #define JNI_FN(name) JNIEXPORT auto JNICALL PASTE(JNI_CLASS, name) // ─── Task creation ────────────────────────────────────────────────────────── diff --git a/scheduler/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.scheduler/reachability-metadata.json b/scheduler/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.scheduler/reachability-metadata.json similarity index 94% rename from scheduler/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.scheduler/reachability-metadata.json rename to scheduler/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.scheduler/reachability-metadata.json index 3e1ff0aee..be46e02d9 100644 --- a/scheduler/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.scheduler/reachability-metadata.json +++ b/scheduler/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.scheduler/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.scheduler.internal.WindowsTaskSchedulerJni", + "type": "dev.nucleusframework.nucleus.scheduler.internal.WindowsTaskSchedulerJni", "jniAccessible": true, "methods": [ { @@ -51,7 +51,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.scheduler.internal.MacOSLaunchdSchedulerJni", + "type": "dev.nucleusframework.nucleus.scheduler.internal.MacOSLaunchdSchedulerJni", "jniAccessible": true, "methods": [ { @@ -85,7 +85,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.scheduler.internal.LinuxSystemdSchedulerJni", + "type": "dev.nucleusframework.nucleus.scheduler.internal.LinuxSystemdSchedulerJni", "jniAccessible": true, "methods": [ { diff --git a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt similarity index 97% rename from scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt rename to scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt index bd6fbcd29..b89a8ef64 100644 --- a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt +++ b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/AppendCalendarIntervalTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal import kotlin.test.Test import kotlin.test.assertFailsWith diff --git a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/BuildTimerUnitTest.kt b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/BuildTimerUnitTest.kt similarity index 92% rename from scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/BuildTimerUnitTest.kt rename to scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/BuildTimerUnitTest.kt index a2b4bcb8c..0ca1c1883 100644 --- a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/BuildTimerUnitTest.kt +++ b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/BuildTimerUnitTest.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal -import io.github.kdroidfilter.nucleus.scheduler.CronExpression -import io.github.kdroidfilter.nucleus.scheduler.TaskId -import io.github.kdroidfilter.nucleus.scheduler.TaskRequest +import dev.nucleusframework.nucleus.scheduler.CronExpression +import dev.nucleusframework.nucleus.scheduler.TaskId +import dev.nucleusframework.nucleus.scheduler.TaskRequest import java.time.LocalTime import kotlin.test.Test import kotlin.test.assertFalse diff --git a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt similarity index 97% rename from scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt rename to scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt index 039c8218b..e5a3397b3 100644 --- a/scheduler/src/test/kotlin/io/github/kdroidfilter/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt +++ b/scheduler/src/test/kotlin/dev/nucleusframework/nucleus/scheduler/internal/ConvertCronToSchtasksTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.scheduler.internal +package dev.nucleusframework.nucleus.scheduler.internal import kotlin.test.Test import kotlin.test.assertEquals diff --git a/scripts/generate-llms-docs.py b/scripts/generate-llms-docs.py index edde0ea99..5f8a395ec 100644 --- a/scripts/generate-llms-docs.py +++ b/scripts/generate-llms-docs.py @@ -39,7 +39,7 @@ "runtime/index.md", } -SITE_URL = "https://nucleus.kdroidfilter.com" +SITE_URL = "https://nucleus.nucleusframework.com" # --------------------------------------------------------------------------- # Nav extraction (no PyYAML needed) @@ -144,9 +144,9 @@ def convert_admonition(m: re.Match) -> str: Compatible with any JVM application, optimized for Compose Desktop. - Docs: {site_url} -- GitHub: https://github.com/kdroidFilter/Nucleus -- Gradle Plugin Portal: https://plugins.gradle.org/plugin/io.github.kdroidfilter.nucleus -- Maven Central: https://central.sonatype.com/search?q=io.github.kdroidfilter.nucleus +- GitHub: https://github.com/nucleusframework/Nucleus +- Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus +- Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT """.format(site_url=SITE_URL) diff --git a/service-management-demo/build.gradle.kts b/service-management-demo/build.gradle.kts index 7b056bad9..39b4e2fae 100644 --- a/service-management-demo/build.gradle.kts +++ b/service-management-demo/build.gradle.kts @@ -1,11 +1,11 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -45,12 +45,12 @@ nucleus.application { packageVersion = "1.0.0" macOS { - bundleID = "io.github.kdroidfilter.nucleus.servicemanagement.demo" + bundleID = "dev.nucleusframework.nucleus.servicemanagement.demo" appCategory = "public.app-category.utilities" dockName = "SMAppService Demo" launchAgents { - agent("io.github.kdroidfilter.nucleus.servicemanagement.demo.notifier") { + agent("dev.nucleusframework.nucleus.servicemanagement.demo.notifier") { arguments("--notify") startInterval(900) } diff --git a/service-management-demo/src/main/kotlin/servicemanagementdemo/Main.kt b/service-management-demo/src/main/kotlin/servicemanagementdemo/Main.kt index 2e0cd68fc..3948f22d3 100644 --- a/service-management-demo/src/main/kotlin/servicemanagementdemo/Main.kt +++ b/service-management-demo/src/main/kotlin/servicemanagementdemo/Main.kt @@ -25,14 +25,14 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Window import androidx.compose.ui.window.application -import io.github.kdroidfilter.nucleus.notification.common.notification -import io.github.kdroidfilter.nucleus.servicemanagement.AppService -import io.github.kdroidfilter.nucleus.servicemanagement.AppServiceManager +import dev.nucleusframework.nucleus.notification.common.notification +import dev.nucleusframework.nucleus.servicemanagement.AppService +import dev.nucleusframework.nucleus.servicemanagement.AppServiceManager import java.awt.EventQueue import java.time.LocalTime import java.time.format.DateTimeFormatter -private const val AGENT_LABEL = "io.github.kdroidfilter.nucleus.servicemanagement.demo.notifier" +private const val AGENT_LABEL = "dev.nucleusframework.nucleus.servicemanagement.demo.notifier" fun main(args: Array) { if ("--notify" in args) { diff --git a/service-management-macos/build.gradle.kts b/service-management-macos/build.gradle.kts index a41052b59..32857f7fe 100644 --- a/service-management-macos/build.gradle.kts +++ b/service-management-macos/build.gradle.kts @@ -59,12 +59,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.service-management-macos", publishVersion) + coordinates("dev.nucleusframework", "nucleus.service-management-macos", publishVersion) pom { name.set("Nucleus Service Management macOS") description.set("macOS SMAppService API for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -75,16 +75,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppService.kt b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppService.kt similarity index 97% rename from service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppService.kt rename to service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppService.kt index 5ad9fe730..cbb600ef2 100644 --- a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppService.kt +++ b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppService.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.servicemanagement +package dev.nucleusframework.nucleus.servicemanagement /** * Describes an app service to manage with [AppServiceManager]. diff --git a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceException.kt b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceException.kt similarity index 71% rename from service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceException.kt rename to service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceException.kt index 69f6b20f2..35b8a619e 100644 --- a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceException.kt +++ b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceException.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.servicemanagement +package dev.nucleusframework.nucleus.servicemanagement /** * Thrown when an [AppServiceManager] operation fails. diff --git a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceManager.kt b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceManager.kt similarity index 96% rename from service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceManager.kt rename to service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceManager.kt index a56b116bd..489c1ae2b 100644 --- a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceManager.kt +++ b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceManager.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.servicemanagement +package dev.nucleusframework.nucleus.servicemanagement -import io.github.kdroidfilter.nucleus.servicemanagement.macos.NativeMacServiceManagementBridge +import dev.nucleusframework.nucleus.servicemanagement.macos.NativeMacServiceManagementBridge import java.util.logging.Logger /** diff --git a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceStatus.kt b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceStatus.kt similarity index 93% rename from service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceStatus.kt rename to service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceStatus.kt index bf900bdfe..6fb8c6d6c 100644 --- a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/AppServiceStatus.kt +++ b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/AppServiceStatus.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.servicemanagement +package dev.nucleusframework.nucleus.servicemanagement /** * Maps `SMAppServiceStatus` from Apple's ServiceManagement framework. diff --git a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt similarity index 95% rename from service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt rename to service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt index 79cc70a1d..ba3eb736c 100644 --- a/service-management-macos/src/main/kotlin/io/github/kdroidfilter/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt +++ b/service-management-macos/src/main/kotlin/dev/nucleusframework/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.servicemanagement.macos +package dev.nucleusframework.nucleus.servicemanagement.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicLong diff --git a/service-management-macos/src/main/native/macos/NucleusServiceManagementBridge.m b/service-management-macos/src/main/native/macos/NucleusServiceManagementBridge.m index e46292244..a3460f629 100644 --- a/service-management-macos/src/main/native/macos/NucleusServiceManagementBridge.m +++ b/service-management-macos/src/main/native/macos/NucleusServiceManagementBridge.m @@ -8,7 +8,7 @@ static JavaVM *g_jvm = NULL; -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/servicemanagement/macos/NativeMacServiceManagementBridge" // Service types (must match AppService.kt companion constants) #define TYPE_LOGIN_ITEM 0 @@ -99,7 +99,7 @@ static jstring toJString(JNIEnv *env, NSString *str) { // ============================================================================ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeIsAvailable( +Java_dev_nucleusframework_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeIsAvailable( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; if (@available(macOS 13.0, *)) { @@ -109,7 +109,7 @@ static jstring toJString(JNIEnv *env, NSString *str) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeRegister( +Java_dev_nucleusframework_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeRegister( JNIEnv *env, jclass clazz, jint type, jstring jidentifier) { (void)clazz; @@ -140,7 +140,7 @@ static jstring toJString(JNIEnv *env, NSString *str) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeUnregister( +Java_dev_nucleusframework_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeUnregister( JNIEnv *env, jclass clazz, jint type, jstring jidentifier, jlong callbackId) { (void)clazz; @@ -225,7 +225,7 @@ static jstring toJString(JNIEnv *env, NSString *str) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeGetStatus( +Java_dev_nucleusframework_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeGetStatus( JNIEnv *env, jclass clazz, jint type, jstring jidentifier) { (void)clazz; @@ -245,7 +245,7 @@ static jstring toJString(JNIEnv *env, NSString *str) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeOpenSystemSettingsLoginItems( +Java_dev_nucleusframework_nucleus_servicemanagement_macos_NativeMacServiceManagementBridge_nativeOpenSystemSettingsLoginItems( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/service-management-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.service-management-macos/reachability-metadata.json b/service-management-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.service-management-macos/reachability-metadata.json similarity index 71% rename from service-management-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.service-management-macos/reachability-metadata.json rename to service-management-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.service-management-macos/reachability-metadata.json index cbed6c281..13836b111 100644 --- a/service-management-macos/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.service-management-macos/reachability-metadata.json +++ b/service-management-macos/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.service-management-macos/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.servicemanagement.macos.NativeMacServiceManagementBridge", + "type": "dev.nucleusframework.nucleus.servicemanagement.macos.NativeMacServiceManagementBridge", "jniAccessible": true, "methods": [ { diff --git a/sf-symbols/build.gradle.kts b/sf-symbols/build.gradle.kts index 8408c41d0..e8f254036 100644 --- a/sf-symbols/build.gradle.kts +++ b/sf-symbols/build.gradle.kts @@ -24,12 +24,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.sf-symbols", publishVersion) + coordinates("dev.nucleusframework", "nucleus.sf-symbols", publishVersion) pom { name.set("Nucleus SF Symbols") description.set("Type-safe Apple SF Symbols constants for JVM desktop applications (macOS 11+)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -40,16 +40,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbol.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbol.kt similarity index 93% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbol.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbol.kt index f115efc77..deb0b4e34 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbol.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbol.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** * Type-safe representation of an Apple SF Symbol name. diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolArrows.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolArrows.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolArrows.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolArrows.kt index 1100d9d52..09f72982e 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolArrows.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolArrows.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Arrows (535 symbols). */ enum class SFSymbolArrows( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommerce.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommerce.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommerce.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommerce.kt index 08afc789a..ea9fc773a 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommerce.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommerce.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Commerce (264 symbols). */ enum class SFSymbolCommerce( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommunication.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommunication.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommunication.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommunication.kt index 3a23e37e7..2af9f0d6b 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolCommunication.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolCommunication.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Communication (101 symbols). */ enum class SFSymbolCommunication( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolConnectivity.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolConnectivity.kt similarity index 96% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolConnectivity.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolConnectivity.kt index 411e1ee79..154f89baf 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolConnectivity.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolConnectivity.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Connectivity (27 symbols). */ enum class SFSymbolConnectivity( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolDevices.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolDevices.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolDevices.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolDevices.kt index 077144ed8..5050f2f98 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolDevices.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolDevices.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Devices (349 symbols). */ enum class SFSymbolDevices( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolGeneral.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolGeneral.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolGeneral.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolGeneral.kt index fbe827cd0..abc1c73b8 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolGeneral.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolGeneral.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — General (1362 symbols). */ enum class SFSymbolGeneral( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHealth.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHealth.kt similarity index 98% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHealth.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHealth.kt index 513c14af5..cd495f029 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHealth.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHealth.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Health (57 symbols). */ enum class SFSymbolHealth( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHuman.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHuman.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHuman.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHuman.kt index e0d39a541..b150c7898 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolHuman.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolHuman.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Human (596 symbols). */ enum class SFSymbolHuman( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLetters.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLetters.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLetters.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLetters.kt index 02c026e8b..ac4bc85eb 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLetters.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLetters.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Letters (142 symbols). */ enum class SFSymbolLetters( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLocation.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLocation.kt similarity index 97% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLocation.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLocation.kt index 9f8ac36df..1e25d3b73 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolLocation.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolLocation.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Location (47 symbols). */ enum class SFSymbolLocation( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolMedia.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolMedia.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolMedia.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolMedia.kt index a44e4e075..39a6b9cca 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolMedia.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolMedia.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Media (238 symbols). */ enum class SFSymbolMedia( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolNumbers.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolNumbers.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolNumbers.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolNumbers.kt index 6a788e92e..240bf1603 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolNumbers.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolNumbers.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Numbers (301 symbols). */ @Suppress("EnumNaming") diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt index 2cbb281b2..270a8709e 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolObjectsAndTools.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — ObjectsAndTools (358 symbols). */ enum class SFSymbolObjectsAndTools( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolPower.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolPower.kt similarity index 98% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolPower.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolPower.kt index b9f165d40..24a8e2546 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolPower.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolPower.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Power (76 symbols). */ enum class SFSymbolPower( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolSecurity.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolSecurity.kt similarity index 98% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolSecurity.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolSecurity.kt index c30d8db3a..4790318e7 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolSecurity.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolSecurity.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Security (62 symbols). */ enum class SFSymbolSecurity( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolShapes.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolShapes.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolShapes.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolShapes.kt index 296d0c2c5..16dd5a25a 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolShapes.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolShapes.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Shapes (542 symbols). */ enum class SFSymbolShapes( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolStatus.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolStatus.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolStatus.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolStatus.kt index e3f20d40c..8d9ff7bc7 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolStatus.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolStatus.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Status (273 symbols). */ enum class SFSymbolStatus( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTextFormatting.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTextFormatting.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTextFormatting.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTextFormatting.kt index 57fad79b9..df9b07c88 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTextFormatting.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTextFormatting.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — TextFormatting (117 symbols). */ enum class SFSymbolTextFormatting( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTime.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTime.kt similarity index 98% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTime.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTime.kt index 73e5f9940..6153ffb6a 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTime.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTime.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Time (45 symbols). */ enum class SFSymbolTime( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTransportation.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTransportation.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTransportation.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTransportation.kt index 8142c124e..c1b9a2d28 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolTransportation.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolTransportation.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Transportation (417 symbols). */ enum class SFSymbolTransportation( diff --git a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolWeather.kt b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolWeather.kt similarity index 99% rename from sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolWeather.kt rename to sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolWeather.kt index 42c991981..4d199edee 100644 --- a/sf-symbols/src/main/kotlin/io/github/kdroidfilter/nucleus/sfsymbols/SFSymbolWeather.kt +++ b/sf-symbols/src/main/kotlin/dev/nucleusframework/nucleus/sfsymbols/SFSymbolWeather.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.sfsymbols +package dev.nucleusframework.nucleus.sfsymbols /** SF Symbols — Weather (286 symbols). */ enum class SFSymbolWeather( diff --git a/system-color/build.gradle.kts b/system-color/build.gradle.kts index 1ed09326b..a21ee2e1e 100644 --- a/system-color/build.gradle.kts +++ b/system-color/build.gradle.kts @@ -98,12 +98,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.system-color", publishVersion) + coordinates("dev.nucleusframework", "nucleus.system-color", publishVersion) pom { name.set("Nucleus System Color") description.set("Reactive system accent color and contrast mode detection for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -114,16 +114,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/Logger.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/Logger.kt similarity index 79% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/Logger.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/Logger.kt index 9365b001b..074bcdfee 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/Logger.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/Logger.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.systemcolor +package dev.nucleusframework.nucleus.systemcolor -import io.github.kdroidfilter.nucleus.core.runtime.tools.allowNucleusRuntimeLogging +import dev.nucleusframework.nucleus.core.runtime.tools.allowNucleusRuntimeLogging internal fun debugln( tag: String, diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/SystemColor.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/SystemColor.kt similarity index 64% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/SystemColor.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/SystemColor.kt index 892e796ab..01c83670f 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/SystemColor.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/SystemColor.kt @@ -1,17 +1,17 @@ -package io.github.kdroidfilter.nucleus.systemcolor +package dev.nucleusframework.nucleus.systemcolor import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.systemcolor.linux.isLinuxAccentColorSupported -import io.github.kdroidfilter.nucleus.systemcolor.linux.linuxAccentColor -import io.github.kdroidfilter.nucleus.systemcolor.linux.linuxHighContrast -import io.github.kdroidfilter.nucleus.systemcolor.mac.MacSystemColorDetector -import io.github.kdroidfilter.nucleus.systemcolor.mac.isMacOsInHighContrast -import io.github.kdroidfilter.nucleus.systemcolor.mac.macOsAccentColor -import io.github.kdroidfilter.nucleus.systemcolor.windows.WindowsSystemColorDetector -import io.github.kdroidfilter.nucleus.systemcolor.windows.windowsAccentColor -import io.github.kdroidfilter.nucleus.systemcolor.windows.windowsHighContrast +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.systemcolor.linux.isLinuxAccentColorSupported +import dev.nucleusframework.nucleus.systemcolor.linux.linuxAccentColor +import dev.nucleusframework.nucleus.systemcolor.linux.linuxHighContrast +import dev.nucleusframework.nucleus.systemcolor.mac.MacSystemColorDetector +import dev.nucleusframework.nucleus.systemcolor.mac.isMacOsInHighContrast +import dev.nucleusframework.nucleus.systemcolor.mac.macOsAccentColor +import dev.nucleusframework.nucleus.systemcolor.windows.WindowsSystemColorDetector +import dev.nucleusframework.nucleus.systemcolor.windows.windowsAccentColor +import dev.nucleusframework.nucleus.systemcolor.windows.windowsHighContrast /** * Returns whether the current platform supports system accent color detection. diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/LinuxSystemColor.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/LinuxSystemColor.kt similarity index 95% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/LinuxSystemColor.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/LinuxSystemColor.kt index 355343b4c..0d973f75e 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/LinuxSystemColor.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/LinuxSystemColor.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.systemcolor.linux +package dev.nucleusframework.nucleus.systemcolor.linux import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.function.Consumer private const val TAG = "LinuxSystemColorDetector" diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt similarity index 92% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt index 748f5a756..d0bc499d0 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.systemcolor.linux +package dev.nucleusframework.nucleus.systemcolor.linux import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/MacSystemColor.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/MacSystemColor.kt similarity index 95% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/MacSystemColor.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/MacSystemColor.kt index 7bc30cf12..408bc82b7 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/MacSystemColor.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/MacSystemColor.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.systemcolor.mac +package dev.nucleusframework.nucleus.systemcolor.mac import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.function.Consumer private const val TAG = "MacSystemColorDetector" diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt similarity index 93% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt index 2301e57d5..8e282caf8 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/mac/NativeMacSystemColorBridge.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.systemcolor.mac +package dev.nucleusframework.nucleus.systemcolor.mac import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt similarity index 93% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt index 8ebb6c2ee..ce619a086 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge.kt @@ -1,8 +1,8 @@ -package io.github.kdroidfilter.nucleus.systemcolor.windows +package dev.nucleusframework.nucleus.systemcolor.windows import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.concurrent.ConcurrentHashMap import java.util.function.Consumer diff --git a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/WindowsSystemColor.kt b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/WindowsSystemColor.kt similarity index 95% rename from system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/WindowsSystemColor.kt rename to system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/WindowsSystemColor.kt index 5e117c9ed..c91a294cb 100644 --- a/system-color/src/main/kotlin/io/github/kdroidfilter/nucleus/systemcolor/windows/WindowsSystemColor.kt +++ b/system-color/src/main/kotlin/dev/nucleusframework/nucleus/systemcolor/windows/WindowsSystemColor.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.systemcolor.windows +package dev.nucleusframework.nucleus.systemcolor.windows import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.systemcolor.debugln +import dev.nucleusframework.nucleus.systemcolor.debugln import java.util.function.Consumer private const val TAG = "WindowsSystemColor" diff --git a/system-color/src/main/native/linux/nucleus_systemcolor_linux.c b/system-color/src/main/native/linux/nucleus_systemcolor_linux.c index c4d5e1ec6..56ace0ead 100644 --- a/system-color/src/main/native/linux/nucleus_systemcolor_linux.c +++ b/system-color/src/main/native/linux/nucleus_systemcolor_linux.c @@ -202,7 +202,7 @@ static void notify_accent_color_changed(double r, double g, double b) { } jclass cls = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge"); if (cls) { jmethodID mid = (*env)->GetStaticMethodID(env, cls, "onAccentColorChanged", "(FFF)V"); if (mid) { @@ -229,7 +229,7 @@ static void notify_high_contrast_changed(int isHigh) { } jclass cls = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/linux/NativeLinuxSystemColorBridge"); if (cls) { jmethodID mid = (*env)->GetStaticMethodID(env, cls, "onHighContrastChanged", "(Z)V"); if (mid) { @@ -359,7 +359,7 @@ static void *watch_thread_proc(void *arg) { /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeGetAccentColor( +Java_dev_nucleusframework_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeGetAccentColor( JNIEnv *env, jclass clazz, jfloatArray out) { (void)clazz; double r = 0, g = 0, b = 0; @@ -370,14 +370,14 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBrid } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeIsHighContrast( +Java_dev_nucleusframework_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeIsHighContrast( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; return read_high_contrast() ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeIsAccentColorSupported( +Java_dev_nucleusframework_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeIsAccentColorSupported( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; double r, g, b; @@ -385,7 +385,7 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBrid } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; if (g_watching) return; @@ -395,7 +395,7 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBrid } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_systemcolor_linux_NativeLinuxSystemColorBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; if (!g_watching) return; diff --git a/system-color/src/main/native/macos/NucleusSystemColorBridge.m b/system-color/src/main/native/macos/NucleusSystemColorBridge.m index 473941a9a..f4dd39894 100644 --- a/system-color/src/main/native/macos/NucleusSystemColorBridge.m +++ b/system-color/src/main/native/macos/NucleusSystemColorBridge.m @@ -30,7 +30,7 @@ static void notifyAccentColorChanged(void) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/mac/NativeMacSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/mac/NativeMacSystemColorBridge"); if (bridgeClass != NULL) { if (!isAccentColorSet()) { // Multicolor mode: notify with null @@ -82,7 +82,7 @@ static void notifyContrastChanged(void) { accessibilityDisplayShouldIncreaseContrast] ? JNI_TRUE : JNI_FALSE; jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/mac/NativeMacSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/mac/NativeMacSystemColorBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onContrastChanged", "(Z)V"); @@ -102,7 +102,7 @@ static void notifyContrastChanged(void) { // --- JNI exports --- JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeGetAccentColor( +Java_dev_nucleusframework_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeGetAccentColor( JNIEnv *env, jclass clazz, jfloatArray out) { @autoreleasepool { // In multicolor mode, AppleAccentColor is absent — return false so Kotlin gets null @@ -126,7 +126,7 @@ static void notifyContrastChanged(void) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeIsHighContrast( +Java_dev_nucleusframework_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeIsHighContrast( JNIEnv *env, jclass clazz) { @autoreleasepool { return [[NSWorkspace sharedWorkspace] @@ -135,7 +135,7 @@ static void notifyContrastChanged(void) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeIsAccentColorSupported( +Java_dev_nucleusframework_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeIsAccentColorSupported( JNIEnv *env, jclass clazz) { if (@available(macOS 10.14, *)) { return JNI_TRUE; @@ -144,7 +144,7 @@ static void notifyContrastChanged(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { if (g_colorObserver != nil) return; @@ -168,7 +168,7 @@ static void notifyContrastChanged(void) { } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_systemcolor_mac_NativeMacSystemColorBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { if (g_colorObserver != nil) { [[NSNotificationCenter defaultCenter] removeObserver:g_colorObserver]; diff --git a/system-color/src/main/native/windows/nucleus_systemcolor_windows.c b/system-color/src/main/native/windows/nucleus_systemcolor_windows.c index 4ee84217b..0842052b8 100644 --- a/system-color/src/main/native/windows/nucleus_systemcolor_windows.c +++ b/system-color/src/main/native/windows/nucleus_systemcolor_windows.c @@ -111,7 +111,7 @@ static void notifyAccentColorChanged(int r, int g, int b) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onAccentColorChanged", "(III)V"); @@ -143,7 +143,7 @@ static void notifyHighContrastChanged(BOOL isHigh) { } jclass bridgeClass = (*env)->FindClass(env, - "io/github/kdroidfilter/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge"); + "dev/nucleusframework/nucleus/systemcolor/windows/NativeWindowsSystemColorBridge"); if (bridgeClass != NULL) { jmethodID method = (*env)->GetStaticMethodID(env, bridgeClass, "onHighContrastChanged", "(Z)V"); @@ -237,7 +237,7 @@ static DWORD WINAPI watchThreadProc(LPVOID param) { /* ------------------------------------------------------------------ */ JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeGetAccentColor( +Java_dev_nucleusframework_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeGetAccentColor( JNIEnv *env, jclass clazz, jintArray out) { (void)clazz; int r = 0, g = 0, b = 0; @@ -249,14 +249,14 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColor } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeIsHighContrast( +Java_dev_nucleusframework_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeIsHighContrast( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; return isHighContrast() ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeIsAccentColorSupported( +Java_dev_nucleusframework_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeIsAccentColorSupported( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; int r, g, b; @@ -264,7 +264,7 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColor } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeStartObserving( +Java_dev_nucleusframework_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeStartObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; if (g_watchThread != NULL) return; @@ -275,7 +275,7 @@ Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColor } JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeStopObserving( +Java_dev_nucleusframework_nucleus_systemcolor_windows_NativeWindowsSystemColorBridge_nativeStopObserving( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; if (g_watchThread == NULL) return; diff --git a/system-color/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-color/reachability-metadata.json b/system-color/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-color/reachability-metadata.json similarity index 79% rename from system-color/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-color/reachability-metadata.json rename to system-color/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-color/reachability-metadata.json index d26c8c936..785640c9c 100644 --- a/system-color/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-color/reachability-metadata.json +++ b/system-color/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-color/reachability-metadata.json @@ -1,7 +1,7 @@ { "reflection": [ { - "type": "io.github.kdroidfilter.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge", + "type": "dev.nucleusframework.nucleus.systemcolor.windows.NativeWindowsSystemColorBridge", "jniAccessible": true, "methods": [ { @@ -15,7 +15,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.systemcolor.mac.NativeMacSystemColorBridge", + "type": "dev.nucleusframework.nucleus.systemcolor.mac.NativeMacSystemColorBridge", "jniAccessible": true, "methods": [ { @@ -33,7 +33,7 @@ ] }, { - "type": "io.github.kdroidfilter.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge", + "type": "dev.nucleusframework.nucleus.systemcolor.linux.NativeLinuxSystemColorBridge", "jniAccessible": true, "methods": [ { diff --git a/system-info-demo/build.gradle.kts b/system-info-demo/build.gradle.kts index 8d62f58d4..b8d64c9ac 100644 --- a/system-info-demo/build.gradle.kts +++ b/system-info-demo/build.gradle.kts @@ -1,13 +1,13 @@ -import io.github.kdroidfilter.nucleus.desktop.application.dsl.CompressionLevel -import io.github.kdroidfilter.nucleus.desktop.application.dsl.SigningAlgorithm -import io.github.kdroidfilter.nucleus.desktop.application.dsl.TargetFormat +import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel +import dev.nucleusframework.nucleus.desktop.application.dsl.SigningAlgorithm +import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { kotlin("jvm") alias(libs.plugins.kotlinComposePlugin) alias(libs.plugins.jetbrainsCompose) - id("io.github.kdroidfilter.nucleus") + id("dev.nucleusframework.nucleus") } dependencies { @@ -82,16 +82,16 @@ nucleus.application { packageName = "SystemInfo" packageVersion = "1.0.0" - homepage = "https://github.com/kdroidFilter/Nucleus" + homepage = "https://github.com/nucleusframework/Nucleus" linux { - debMaintainer = "KDroidFilter " + debMaintainer = "NucleusFramework " } windows { signing { enabled = true - certificateFile.set(rootProject.file("example/packaging/KDroidFilter.pfx")) + certificateFile.set(rootProject.file("example/packaging/NucleusFramework.pfx")) certificatePassword = "ChangeMe-Temp123!" algorithm = SigningAlgorithm.Sha256 timestampServer = "http://timestamp.digicert.com" @@ -99,7 +99,7 @@ nucleus.application { } macOS { - bundleID = "io.github.kdroidfilter.systeminfo" + bundleID = "dev.nucleusframework.systeminfo" dockName = "SystemInfo" } } diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/Main.kt b/system-info-demo/src/main/kotlin/systeminfodemo/Main.kt index ccfcb00bf..a3a81996f 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/Main.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/Main.kt @@ -4,14 +4,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.application import androidx.compose.ui.window.rememberWindowState -import io.github.kdroidfilter.nucleus.window.jewel.JewelDecoratedWindow +import dev.nucleusframework.nucleus.window.jewel.JewelDecoratedWindow import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme import systeminfodemo.ui.AppContent import systeminfodemo.ui.AppTitleBar import systeminfodemo.ui.buildIslandsTheme fun main() { - io.github.kdroidfilter.nucleus.graalvm.GraalVmInitializer + dev.nucleusframework.nucleus.graalvm.GraalVmInitializer .initialize() application { diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/ui/AppContent.kt b/system-info-demo/src/main/kotlin/systeminfodemo/ui/AppContent.kt index 50335341a..0e28bff4e 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/ui/AppContent.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/ui/AppContent.kt @@ -34,10 +34,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import io.github.kdroidfilter.nucleus.window.AwtDecoratedWindowScope -import io.github.kdroidfilter.nucleus.window.jewel.JewelTitleBar -import io.github.kdroidfilter.nucleus.window.macOSLargeCornerRadius -import io.github.kdroidfilter.nucleus.window.newFullscreenControls +import dev.nucleusframework.nucleus.window.AwtDecoratedWindowScope +import dev.nucleusframework.nucleus.window.jewel.JewelTitleBar +import dev.nucleusframework.nucleus.window.macOSLargeCornerRadius +import dev.nucleusframework.nucleus.window.newFullscreenControls import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.ui.Orientation import org.jetbrains.jewel.ui.component.Divider diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/ui/Theme.kt b/system-info-demo/src/main/kotlin/systeminfodemo/ui/Theme.kt index 3dda9cfec..fe26fbe59 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/ui/Theme.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/ui/Theme.kt @@ -4,8 +4,8 @@ package systeminfodemo.ui import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color -import io.github.kdroidfilter.nucleus.darkmodedetector.isSystemInDarkMode -import io.github.kdroidfilter.nucleus.systemcolor.systemAccentColor +import dev.nucleusframework.nucleus.darkmodedetector.isSystemInDarkMode +import dev.nucleusframework.nucleus.systemcolor.systemAccentColor import org.jetbrains.jewel.foundation.BorderColors import org.jetbrains.jewel.foundation.GlobalColors import org.jetbrains.jewel.foundation.OutlineColors diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/NetworkPanel.kt b/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/NetworkPanel.kt index 24ff85cbe..dee7737bb 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/NetworkPanel.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/NetworkPanel.kt @@ -6,7 +6,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus import systeminfodemo.ui.InfoRow import systeminfodemo.ui.SectionCard import systeminfodemo.ui.formatBytes diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/OverviewPanel.kt b/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/OverviewPanel.kt index 7cf2aa6ab..1ad1ff71d 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/OverviewPanel.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/ui/panels/OverviewPanel.kt @@ -11,7 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus import systeminfodemo.ui.InfoRow import systeminfodemo.ui.LineChart import systeminfodemo.ui.ProgressBar diff --git a/system-info-demo/src/main/kotlin/systeminfodemo/viewmodel/SystemInfoViewModel.kt b/system-info-demo/src/main/kotlin/systeminfodemo/viewmodel/SystemInfoViewModel.kt index d5742bbf8..0750de1c8 100644 --- a/system-info-demo/src/main/kotlin/systeminfodemo/viewmodel/SystemInfoViewModel.kt +++ b/system-info-demo/src/main/kotlin/systeminfodemo/viewmodel/SystemInfoViewModel.kt @@ -2,20 +2,20 @@ package systeminfodemo.viewmodel -import io.github.kdroidfilter.nucleus.systeminfo.SystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo +import dev.nucleusframework.nucleus.systeminfo.SystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/system-info/build.gradle.kts b/system-info/build.gradle.kts index dcaa58a02..9611eb624 100644 --- a/system-info/build.gradle.kts +++ b/system-info/build.gradle.kts @@ -96,14 +96,14 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.system-info", publishVersion) + coordinates("dev.nucleusframework", "nucleus.system-info", publishVersion) pom { name.set("Nucleus System Info") description.set( "Cross-platform system information (CPU, memory, disks, network, processes, hardware) for JVM desktop applications", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -114,16 +114,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/PlatformSystemInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/PlatformSystemInfo.kt new file mode 100644 index 000000000..ddebb123b --- /dev/null +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/PlatformSystemInfo.kt @@ -0,0 +1,50 @@ +package dev.nucleusframework.nucleus.systeminfo + +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo + +@Suppress("TooManyFunctions") +internal interface PlatformSystemInfo { + fun isAvailable(): Boolean + + fun osInfo(): OsInfo? + + fun memoryInfo(): MemoryInfo? + + fun cpuInfo(): CpuGlobalInfo? + + fun disks(): List + + fun components(): List + + fun networks(): List + + fun users(): List + + fun motherboard(): MotherboardInfo? + + fun product(): ProductInfo? + + fun processes(): List + + fun process(pid: Long): ProcessInfo? + + fun gpus(): List + + fun batteryInfo(): BatteryInfo? + + fun idleTime(): Long + + fun connectivityInfo(): ConnectivityInfo? +} diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfo.kt similarity index 54% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfo.kt index 47f24d4f3..6767b35b6 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfo.kt @@ -1,22 +1,22 @@ -package io.github.kdroidfilter.nucleus.systeminfo - -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.systeminfo.linux.LinuxSystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.macos.MacOsSystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo -import io.github.kdroidfilter.nucleus.systeminfo.windows.WindowsSystemInfo +package dev.nucleusframework.nucleus.systeminfo + +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.systeminfo.linux.LinuxSystemInfo +import dev.nucleusframework.nucleus.systeminfo.macos.MacOsSystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo +import dev.nucleusframework.nucleus.systeminfo.windows.WindowsSystemInfo @Suppress("TooManyFunctions") object SystemInfo { diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/LinuxSystemInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/LinuxSystemInfo.kt similarity index 93% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/LinuxSystemInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/LinuxSystemInfo.kt index c2f9bc577..1f07cd9aa 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/LinuxSystemInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/LinuxSystemInfo.kt @@ -1,22 +1,22 @@ -package io.github.kdroidfilter.nucleus.systeminfo.linux +package dev.nucleusframework.nucleus.systeminfo.linux -import io.github.kdroidfilter.nucleus.systeminfo.PlatformSystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryState -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo +import dev.nucleusframework.nucleus.systeminfo.PlatformSystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryState +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo @Suppress("TooManyFunctions", "ReturnCount") internal object LinuxSystemInfo : PlatformSystemInfo { diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt similarity index 98% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt index efd47d5b6..62ffe0876 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.systeminfo.linux +package dev.nucleusframework.nucleus.systeminfo.linux -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_system_info" diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/MacOsSystemInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/MacOsSystemInfo.kt similarity index 93% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/MacOsSystemInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/MacOsSystemInfo.kt index 02bde59ce..7abd0c755 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/MacOsSystemInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/MacOsSystemInfo.kt @@ -1,22 +1,22 @@ -package io.github.kdroidfilter.nucleus.systeminfo.macos +package dev.nucleusframework.nucleus.systeminfo.macos -import io.github.kdroidfilter.nucleus.systeminfo.PlatformSystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryState -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo +import dev.nucleusframework.nucleus.systeminfo.PlatformSystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryState +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo @Suppress("TooManyFunctions", "ReturnCount") internal object MacOsSystemInfo : PlatformSystemInfo { diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt similarity index 98% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt index 503a69170..9b14a6cd9 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.systeminfo.macos +package dev.nucleusframework.nucleus.systeminfo.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_system_info" diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryInfo.kt similarity index 89% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryInfo.kt index effa970c4..8044b34de 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class BatteryInfo( val stateOfCharge: Float, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryState.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryState.kt similarity index 59% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryState.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryState.kt index f9cb47b2b..a0dd4450c 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/BatteryState.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/BatteryState.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model enum class BatteryState { Charging, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ComponentInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ComponentInfo.kt similarity index 69% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ComponentInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ComponentInfo.kt index e1018d34a..260e8f94a 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ComponentInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ComponentInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class ComponentInfo( val label: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ConnectivityInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ConnectivityInfo.kt similarity index 77% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ConnectivityInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ConnectivityInfo.kt index 139f9a85a..9ef5defcf 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ConnectivityInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ConnectivityInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class ConnectivityInfo( val isConnected: Boolean, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuGlobalInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuGlobalInfo.kt similarity index 68% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuGlobalInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuGlobalInfo.kt index 18158c6db..4ceb55298 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuGlobalInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuGlobalInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class CpuGlobalInfo( val globalCpuUsage: Float, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuInfo.kt similarity index 72% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuInfo.kt index 134b50b38..4a10d41b5 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/CpuInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/CpuInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class CpuInfo( val name: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/DiskInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/DiskInfo.kt similarity index 81% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/DiskInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/DiskInfo.kt index c83daad13..51aa37342 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/DiskInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/DiskInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class DiskInfo( val name: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/GpuInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/GpuInfo.kt similarity index 89% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/GpuInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/GpuInfo.kt index d59a0fcff..ed33a1c44 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/GpuInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/GpuInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class GpuInfo( val name: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MemoryInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MemoryInfo.kt similarity index 78% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MemoryInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MemoryInfo.kt index 2d1cb9207..2c1e5fdcf 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MemoryInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MemoryInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class MemoryInfo( val totalMemory: Long, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MotherboardInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MotherboardInfo.kt similarity index 74% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MotherboardInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MotherboardInfo.kt index 4c929b0c9..f7f31cc76 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/MotherboardInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/MotherboardInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class MotherboardInfo( val name: String?, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/NetworkInterfaceInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/NetworkInterfaceInfo.kt similarity index 84% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/NetworkInterfaceInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/NetworkInterfaceInfo.kt index 62ef7f386..786874f83 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/NetworkInterfaceInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/NetworkInterfaceInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class NetworkInterfaceInfo( val name: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/OsInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/OsInfo.kt similarity index 82% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/OsInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/OsInfo.kt index 6b77819f4..339628cb3 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/OsInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/OsInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class OsInfo( val name: String?, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProcessInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProcessInfo.kt similarity index 85% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProcessInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProcessInfo.kt index ec50f5252..bd023b0fc 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProcessInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProcessInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class ProcessInfo( val pid: Long, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProductInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProductInfo.kt similarity index 78% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProductInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProductInfo.kt index 44f494ef2..5ac38f02c 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/ProductInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/ProductInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class ProductInfo( val name: String?, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/UserInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/UserInfo.kt similarity index 68% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/UserInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/UserInfo.kt index df088ead0..3783f8de7 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/model/UserInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/model/UserInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.systeminfo.model +package dev.nucleusframework.nucleus.systeminfo.model data class UserInfo( val name: String, diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt similarity index 98% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt index 36555dd98..c2a1754bc 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.systeminfo.windows +package dev.nucleusframework.nucleus.systeminfo.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_system_info" diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/WindowsSystemInfo.kt b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/WindowsSystemInfo.kt similarity index 93% rename from system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/WindowsSystemInfo.kt rename to system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/WindowsSystemInfo.kt index ffc581dda..c74cf345c 100644 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/windows/WindowsSystemInfo.kt +++ b/system-info/src/main/kotlin/dev/nucleusframework/nucleus/systeminfo/windows/WindowsSystemInfo.kt @@ -1,22 +1,22 @@ -package io.github.kdroidfilter.nucleus.systeminfo.windows +package dev.nucleusframework.nucleus.systeminfo.windows -import io.github.kdroidfilter.nucleus.systeminfo.PlatformSystemInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryState -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MeteredStatus -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo +import dev.nucleusframework.nucleus.systeminfo.PlatformSystemInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryInfo +import dev.nucleusframework.nucleus.systeminfo.model.BatteryState +import dev.nucleusframework.nucleus.systeminfo.model.ComponentInfo +import dev.nucleusframework.nucleus.systeminfo.model.ConnectivityInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuGlobalInfo +import dev.nucleusframework.nucleus.systeminfo.model.CpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.DiskInfo +import dev.nucleusframework.nucleus.systeminfo.model.GpuInfo +import dev.nucleusframework.nucleus.systeminfo.model.MemoryInfo +import dev.nucleusframework.nucleus.systeminfo.model.MeteredStatus +import dev.nucleusframework.nucleus.systeminfo.model.MotherboardInfo +import dev.nucleusframework.nucleus.systeminfo.model.NetworkInterfaceInfo +import dev.nucleusframework.nucleus.systeminfo.model.OsInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProcessInfo +import dev.nucleusframework.nucleus.systeminfo.model.ProductInfo +import dev.nucleusframework.nucleus.systeminfo.model.UserInfo @Suppress("TooManyFunctions", "ReturnCount") internal object WindowsSystemInfo : PlatformSystemInfo { diff --git a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/PlatformSystemInfo.kt b/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/PlatformSystemInfo.kt deleted file mode 100644 index dbcafe054..000000000 --- a/system-info/src/main/kotlin/io/github/kdroidfilter/nucleus/systeminfo/PlatformSystemInfo.kt +++ /dev/null @@ -1,50 +0,0 @@ -package io.github.kdroidfilter.nucleus.systeminfo - -import io.github.kdroidfilter.nucleus.systeminfo.model.BatteryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ComponentInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ConnectivityInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.CpuGlobalInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.DiskInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.GpuInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MemoryInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.MotherboardInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.NetworkInterfaceInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.OsInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProcessInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.ProductInfo -import io.github.kdroidfilter.nucleus.systeminfo.model.UserInfo - -@Suppress("TooManyFunctions") -internal interface PlatformSystemInfo { - fun isAvailable(): Boolean - - fun osInfo(): OsInfo? - - fun memoryInfo(): MemoryInfo? - - fun cpuInfo(): CpuGlobalInfo? - - fun disks(): List - - fun components(): List - - fun networks(): List - - fun users(): List - - fun motherboard(): MotherboardInfo? - - fun product(): ProductInfo? - - fun processes(): List - - fun process(pid: Long): ProcessInfo? - - fun gpus(): List - - fun batteryInfo(): BatteryInfo? - - fun idleTime(): Long - - fun connectivityInfo(): ConnectivityInfo? -} diff --git a/system-info/src/main/native/linux/nucleus_system_info_battery.c b/system-info/src/main/native/linux/nucleus_system_info_battery.c index 9f659c14a..9d8e29a6d 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_battery.c +++ b/system-info/src/main/native/linux/nucleus_system_info_battery.c @@ -183,19 +183,19 @@ static long get_energy_full_uwh(const char *bat) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryPresent( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryPresent( JNIEnv *env, jclass clazz) { return find_battery_path() != NULL ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryExternalConnected( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryExternalConnected( JNIEnv *env, jclass clazz) { return is_ac_online() ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryIsCharging( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryIsCharging( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return JNI_FALSE; @@ -207,7 +207,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryFullyCharged( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryFullyCharged( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return JNI_FALSE; @@ -219,7 +219,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryCurrentCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryCurrentCapacity( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -227,7 +227,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryMaxCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryMaxCapacity( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -235,7 +235,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryDesignCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryDesignCapacity( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -243,7 +243,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryCycleCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryCycleCount( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -253,7 +253,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryVoltage( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryVoltage( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -263,7 +263,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryAmperage( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryAmperage( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return 0; @@ -287,7 +287,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryTemperature( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryTemperature( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return (jfloat)NAN; @@ -298,7 +298,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryTimeRemaining( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryTimeRemaining( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return -1; @@ -337,7 +337,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryManufacturer( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryManufacturer( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return NULL; @@ -348,7 +348,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryModelName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatteryModelName( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return NULL; @@ -359,7 +359,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatterySerialNumber( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBatterySerialNumber( JNIEnv *env, jclass clazz) { const char *bat = find_battery_path(); if (!bat) return NULL; diff --git a/system-info/src/main/native/linux/nucleus_system_info_common.h b/system-info/src/main/native/linux/nucleus_system_info_common.h index f0c25227a..f549691a5 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_common.h +++ b/system-info/src/main/native/linux/nucleus_system_info_common.h @@ -10,7 +10,7 @@ #include // JNI class path for the Linux bridge -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/systeminfo/linux/NativeLinuxSystemInfoBridge" // Helper: create a Java String from a C string, handling NULL gracefully static inline jstring to_jstring(JNIEnv *env, const char *str) { diff --git a/system-info/src/main/native/linux/nucleus_system_info_component.c b/system-info/src/main/native/linux/nucleus_system_info_component.c index b99fffd58..e434a4818 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_component.c +++ b/system-info/src/main/native/linux/nucleus_system_info_component.c @@ -87,14 +87,14 @@ static void refresh_components(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentCount( JNIEnv *env, jclass clazz) { refresh_components(); return (jint)g_component_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentLabels( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentLabels( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; const char **arr = (const char **)malloc(g_component_count * sizeof(char *)); @@ -105,7 +105,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); @@ -117,7 +117,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentMaxTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentMaxTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); @@ -129,7 +129,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentCriticalTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeComponentCriticalTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); diff --git a/system-info/src/main/native/linux/nucleus_system_info_connectivity.c b/system-info/src/main/native/linux/nucleus_system_info_connectivity.c index 7e2a6723b..264a64e0c 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_connectivity.c +++ b/system-info/src/main/native/linux/nucleus_system_info_connectivity.c @@ -137,7 +137,7 @@ static int portalGetMetered(GioFuncs *f, GDBusConnection *conn) { // --------------------------------------------------------------------------- JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeIsNetworkConnected( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeIsNetworkConnected( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; @@ -165,7 +165,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge // --------------------------------------------------------------------------- JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGetMeteredStatus( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGetMeteredStatus( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/system-info/src/main/native/linux/nucleus_system_info_cpu.c b/system-info/src/main/native/linux/nucleus_system_info_cpu.c index 6a028413f..e05d253ae 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_cpu.c +++ b/system-info/src/main/native/linux/nucleus_system_info_cpu.c @@ -128,13 +128,13 @@ static void compute_per_cpu_usage(float *usages, int count) { } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGlobalCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGlobalCpuUsage( JNIEnv *env, jclass clazz) { return (jfloat)compute_global_cpu_usage(); } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativePhysicalCoreCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativePhysicalCoreCount( JNIEnv *env, jclass clazz) { // Count unique "core id" entries per "physical id" in /proc/cpuinfo FILE *f = fopen("/proc/cpuinfo", "r"); @@ -170,13 +170,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuCount( JNIEnv *env, jclass clazz) { return (jint)count_logical_cpus(); } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuNames( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -193,7 +193,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuVendorIds( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -210,7 +210,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuBrands( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuBrands( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -227,7 +227,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuFrequencies( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuFrequencies( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -245,7 +245,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuUsages( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; diff --git a/system-info/src/main/native/linux/nucleus_system_info_disk.c b/system-info/src/main/native/linux/nucleus_system_info_disk.c index 5b3124efe..4d25e3702 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_disk.c +++ b/system-info/src/main/native/linux/nucleus_system_info_disk.c @@ -107,14 +107,14 @@ static void refresh_disks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskCount( JNIEnv *env, jclass clazz) { refresh_disks(); return (jint)g_disk_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskNames( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskNames( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -125,7 +125,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskFileSystems( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskFileSystems( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -136,7 +136,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskMountPoints( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskMountPoints( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -147,7 +147,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskTotalSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskTotalSpaces( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -159,7 +159,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskAvailableSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskAvailableSpaces( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -171,7 +171,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskKinds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskKinds( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -182,7 +182,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskRemovable( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskRemovable( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); @@ -194,7 +194,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskReadOnly( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDiskReadOnly( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); diff --git a/system-info/src/main/native/linux/nucleus_system_info_gpu.c b/system-info/src/main/native/linux/nucleus_system_info_gpu.c index afbbe239d..550f55bf8 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_gpu.c +++ b/system-info/src/main/native/linux/nucleus_system_info_gpu.c @@ -641,7 +641,7 @@ static void refresh_all_gpus(void) { // --------------------------------------------------------------------------- JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuCount( JNIEnv *env, jclass cls) { (void)env; (void)cls; refresh_all_gpus(); @@ -649,7 +649,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuNames( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -659,7 +659,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuVendorIds( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -671,7 +671,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDeviceIds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDeviceIds( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -683,7 +683,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDedicatedVideoMemories( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDedicatedVideoMemories( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -695,7 +695,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDedicatedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDedicatedSystemMemories( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -707,7 +707,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuSharedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuSharedSystemMemories( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -719,7 +719,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDriverVersions( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuDriverVersions( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -729,7 +729,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuTemperatures( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -741,7 +741,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuUsages( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -753,7 +753,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuMemoryUsed( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuMemoryUsed( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -765,7 +765,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuCoreClocks( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuCoreClocks( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -777,7 +777,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuMemoryClocks( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuMemoryClocks( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -789,7 +789,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuFanSpeeds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuFanSpeeds( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); @@ -801,7 +801,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuPowerDraws( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeGpuPowerDraws( JNIEnv *env, jclass cls) { (void)cls; ensure_gpus_initialized(); diff --git a/system-info/src/main/native/linux/nucleus_system_info_hardware.c b/system-info/src/main/native/linux/nucleus_system_info_hardware.c index 6e4475f83..6f54236f5 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_hardware.c +++ b/system-info/src/main/native/linux/nucleus_system_info_hardware.c @@ -18,74 +18,74 @@ static jstring read_dmi_field(JNIEnv *env, const char *field) { // Motherboard JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardName( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "board_name"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardVendor( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardVendor( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "board_vendor"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardVersion( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardVersion( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "board_version"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardSerial( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardSerial( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "board_serial"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardAssetTag( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeMotherboardAssetTag( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "board_asset_tag"); } // Product JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductName( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_name"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductFamily( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductFamily( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_family"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductSerial( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductSerial( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_serial"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductSku( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductSku( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_sku"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductUuid( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductUuid( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_uuid"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductVersion( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductVersion( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "product_version"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductVendor( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProductVendor( JNIEnv *env, jclass clazz) { return read_dmi_field(env, "sys_vendor"); } diff --git a/system-info/src/main/native/linux/nucleus_system_info_idle.c b/system-info/src/main/native/linux/nucleus_system_info_idle.c index 38b45b033..8e171262d 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_idle.c +++ b/system-info/src/main/native/linux/nucleus_system_info_idle.c @@ -248,7 +248,7 @@ static jlong getIdleTimeFreedesktopDBus(GioFuncs *f) { // --------------------------------------------------------------------------- JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeIdleTimeSeconds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeIdleTimeSeconds( JNIEnv *env, jclass clazz) { (void)env; (void)clazz; diff --git a/system-info/src/main/native/linux/nucleus_system_info_memory.c b/system-info/src/main/native/linux/nucleus_system_info_memory.c index 6c99220ff..8ef80846a 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_memory.c +++ b/system-info/src/main/native/linux/nucleus_system_info_memory.c @@ -39,7 +39,7 @@ static int read_meminfo(meminfo_t *mi) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeTotalMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeTotalMemory( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -47,7 +47,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeFreeMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeFreeMemory( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -55,7 +55,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeAvailableMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeAvailableMemory( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -63,7 +63,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUsedMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUsedMemory( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -71,7 +71,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeTotalSwap( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeTotalSwap( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -79,7 +79,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeFreeSwap( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeFreeSwap( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; @@ -87,7 +87,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUsedSwap( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUsedSwap( JNIEnv *env, jclass clazz) { meminfo_t mi; if (read_meminfo(&mi) != 0) return 0; diff --git a/system-info/src/main/native/linux/nucleus_system_info_network.c b/system-info/src/main/native/linux/nucleus_system_info_network.c index a8987302b..77e427f19 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_network.c +++ b/system-info/src/main/native/linux/nucleus_system_info_network.c @@ -80,14 +80,14 @@ static void refresh_networks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkCount( JNIEnv *env, jclass clazz) { refresh_networks(); return (jint)g_net_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkNames( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkNames( JNIEnv *env, jclass clazz) { if (g_net_count <= 0) return NULL; const char **arr = (const char **)malloc(g_net_count * sizeof(char *)); @@ -99,7 +99,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge #define LONG_ARRAY_GETTER(jni_name, field) \ JNIEXPORT jlongArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_net_count <= 0) return NULL; \ jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); \ @@ -119,7 +119,7 @@ LONG_ARRAY_GETTER(nativeNetworkErrorsTransmitted, tx_errors) LONG_ARRAY_GETTER(nativeNetworkMtus, mtu) JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkMacAddresses( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeNetworkMacAddresses( JNIEnv *env, jclass clazz) { if (g_net_count <= 0) return NULL; const char **arr = (const char **)malloc(g_net_count * sizeof(char *)); diff --git a/system-info/src/main/native/linux/nucleus_system_info_os.c b/system-info/src/main/native/linux/nucleus_system_info_os.c index 5bd75c0c8..56326dd12 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_os.c +++ b/system-info/src/main/native/linux/nucleus_system_info_os.c @@ -31,7 +31,7 @@ static char *parse_os_release(const char *key) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeOsName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeOsName( JNIEnv *env, jclass clazz) { char *name = parse_os_release("NAME"); if (!name) return NULL; @@ -41,7 +41,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeKernelVersion( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeKernelVersion( JNIEnv *env, jclass clazz) { struct utsname info; if (uname(&info) != 0) return NULL; @@ -49,7 +49,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeOsVersion( JNIEnv *env, jclass clazz) { char *version = parse_os_release("VERSION_ID"); if (!version) return NULL; @@ -59,7 +59,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeLongOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeLongOsVersion( JNIEnv *env, jclass clazz) { char *name = parse_os_release("PRETTY_NAME"); if (!name) { @@ -83,7 +83,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDistributionId( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeDistributionId( JNIEnv *env, jclass clazz) { char *id = parse_os_release("ID"); if (!id) return to_jstring(env, "linux"); @@ -93,7 +93,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeHostName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeHostName( JNIEnv *env, jclass clazz) { char buf[256]; if (gethostname(buf, sizeof(buf)) != 0) return NULL; @@ -101,7 +101,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuArch( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeCpuArch( JNIEnv *env, jclass clazz) { struct utsname info; if (uname(&info) != 0) return NULL; @@ -109,7 +109,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUptime( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUptime( JNIEnv *env, jclass clazz) { struct sysinfo si; if (sysinfo(&si) != 0) return 0; @@ -117,7 +117,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBootTime( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeBootTime( JNIEnv *env, jclass clazz) { struct sysinfo si; if (sysinfo(&si) != 0) return 0; diff --git a/system-info/src/main/native/linux/nucleus_system_info_process.c b/system-info/src/main/native/linux/nucleus_system_info_process.c index d6d4d936c..7ebca8dad 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_process.c +++ b/system-info/src/main/native/linux/nucleus_system_info_process.c @@ -164,7 +164,7 @@ static void refresh_processes(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessCount( JNIEnv *env, jclass clazz) { refresh_processes(); return (jint)g_proc_count; @@ -172,7 +172,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge #define PROC_STRING_ARRAY(jni_name, field) \ JNIEXPORT jobjectArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_proc_count <= 0) return NULL; \ const char **arr = (const char **)malloc(g_proc_count * sizeof(char *)); \ @@ -184,7 +184,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge #define PROC_LONG_ARRAY(jni_name, field) \ JNIEXPORT jlongArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_proc_count <= 0) return NULL; \ jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); \ @@ -209,7 +209,7 @@ PROC_STRING_ARRAY(nativeProcessCwds, cwd) PROC_STRING_ARRAY(nativeProcessRoots, root) JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessCpuUsages( JNIEnv *env, jclass clazz) { if (g_proc_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_proc_count * sizeof(jfloat)); @@ -229,7 +229,7 @@ static int read_single_process(long pid, proc_entry_t *pe) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidName( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidName( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; @@ -237,7 +237,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidExe( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidExe( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; @@ -245,7 +245,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidMemory( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return 0; @@ -253,7 +253,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidVirtualMemory( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidVirtualMemory( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return 0; @@ -261,7 +261,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCpuUsage( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return 0.0f; @@ -269,7 +269,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidStatus( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidStatus( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; @@ -277,7 +277,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidStartTime( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidStartTime( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return 0; @@ -285,7 +285,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidRunTime( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidRunTime( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return 0; @@ -293,7 +293,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidParentPid( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidParentPid( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return -1; @@ -301,7 +301,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCmd( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCmd( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; @@ -309,7 +309,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCwd( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidCwd( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; @@ -317,7 +317,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidRoot( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeProcessByPidRoot( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((long)pid, &pe) != 0) return NULL; diff --git a/system-info/src/main/native/linux/nucleus_system_info_user.c b/system-info/src/main/native/linux/nucleus_system_info_user.c index ff66db1d2..60d330b86 100644 --- a/system-info/src/main/native/linux/nucleus_system_info_user.c +++ b/system-info/src/main/native/linux/nucleus_system_info_user.c @@ -64,14 +64,14 @@ static void refresh_users(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserCount( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserCount( JNIEnv *env, jclass clazz) { refresh_users(); return (jint)g_user_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserNames( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserNames( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -82,7 +82,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserIds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserIds( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -93,7 +93,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserGroupIds( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserGroupIds( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -104,7 +104,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserGroups( +Java_dev_nucleusframework_nucleus_systeminfo_linux_NativeLinuxSystemInfoBridge_nativeUserGroups( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); diff --git a/system-info/src/main/native/macos/nucleus_system_info_battery.c b/system-info/src/main/native/macos/nucleus_system_info_battery.c index d54f782e6..9e8bc6075 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_battery.c +++ b/system-info/src/main/native/macos/nucleus_system_info_battery.c @@ -63,7 +63,7 @@ static int32_t get_raw_or_standard_capacity(CFDictionaryRef dict, CFStringRef ra } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryPresent( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryPresent( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return JNI_FALSE; @@ -73,7 +73,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryExternalConnected( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryExternalConnected( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return JNI_FALSE; @@ -83,7 +83,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryIsCharging( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryIsCharging( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return JNI_FALSE; @@ -93,7 +93,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryFullyCharged( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryFullyCharged( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return JNI_FALSE; @@ -103,7 +103,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryCurrentCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryCurrentCapacity( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -114,7 +114,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryMaxCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryMaxCapacity( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -125,7 +125,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryDesignCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryDesignCapacity( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -135,7 +135,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryCycleCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryCycleCount( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -145,7 +145,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryVoltage( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryVoltage( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -155,7 +155,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryAmperage( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryAmperage( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return 0; @@ -165,7 +165,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryTemperature( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryTemperature( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return (jfloat)NAN; @@ -176,7 +176,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryTimeRemaining( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryTimeRemaining( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return -1; @@ -188,7 +188,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryManufacturer( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryManufacturer( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return NULL; @@ -200,7 +200,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryModelName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatteryModelName( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return NULL; @@ -212,7 +212,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatterySerialNumber( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBatterySerialNumber( JNIEnv *env, jclass clazz) { CFDictionaryRef props = copy_battery_properties(); if (!props) return NULL; diff --git a/system-info/src/main/native/macos/nucleus_system_info_common.h b/system-info/src/main/native/macos/nucleus_system_info_common.h index 1e555a33b..dea153585 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_common.h +++ b/system-info/src/main/native/macos/nucleus_system_info_common.h @@ -11,7 +11,7 @@ #include // JNI class path for the macOS bridge -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/systeminfo/macos/NativeMacOsSystemInfoBridge" // Helper: create a Java String from a C string, handling NULL gracefully static inline jstring to_jstring(JNIEnv *env, const char *str) { diff --git a/system-info/src/main/native/macos/nucleus_system_info_component.c b/system-info/src/main/native/macos/nucleus_system_info_component.c index 7db366423..ffcf714a5 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_component.c +++ b/system-info/src/main/native/macos/nucleus_system_info_component.c @@ -383,14 +383,14 @@ static void refresh_components(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentCount( JNIEnv *env, jclass clazz) { refresh_components(); return (jint)g_component_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentLabels( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentLabels( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; const char **arr = (const char **)malloc(g_component_count * sizeof(char *)); @@ -401,7 +401,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); @@ -413,7 +413,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentMaxTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentMaxTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); @@ -425,7 +425,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentCriticalTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeComponentCriticalTemperatures( JNIEnv *env, jclass clazz) { if (g_component_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_component_count * sizeof(jfloat)); diff --git a/system-info/src/main/native/macos/nucleus_system_info_connectivity.c b/system-info/src/main/native/macos/nucleus_system_info_connectivity.c index 6b540988b..f9ab9839b 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_connectivity.c +++ b/system-info/src/main/native/macos/nucleus_system_info_connectivity.c @@ -41,7 +41,7 @@ static bool query_network_path(path_snapshot_t *out) { } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeIsNetworkConnected( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeIsNetworkConnected( JNIEnv *env, jclass clazz) { path_snapshot_t snap; @@ -50,7 +50,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGetMeteredStatus( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGetMeteredStatus( JNIEnv *env, jclass clazz) { path_snapshot_t snap; diff --git a/system-info/src/main/native/macos/nucleus_system_info_cpu.c b/system-info/src/main/native/macos/nucleus_system_info_cpu.c index 3a09036a8..b1bfbca1e 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_cpu.c +++ b/system-info/src/main/native/macos/nucleus_system_info_cpu.c @@ -147,7 +147,7 @@ static void read_cpu_ticks(float *global_usage, float *per_cpu_usages, int count } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGlobalCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGlobalCpuUsage( JNIEnv *env, jclass clazz) { float usage = 0.0f; read_cpu_ticks(&usage, NULL, 0); @@ -155,7 +155,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativePhysicalCoreCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativePhysicalCoreCount( JNIEnv *env, jclass clazz) { int32_t count = 0; sysctl_int32("hw.physicalcpu", &count); @@ -163,13 +163,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuCount( JNIEnv *env, jclass clazz) { return (jint)count_logical_cpus(); } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuNames( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -186,7 +186,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuVendorIds( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -201,7 +201,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuBrands( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuBrands( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -219,7 +219,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuFrequencies( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuFrequencies( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; @@ -235,7 +235,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuUsages( JNIEnv *env, jclass clazz) { int count = count_logical_cpus(); if (count <= 0 || count > MAX_CPUS) return NULL; diff --git a/system-info/src/main/native/macos/nucleus_system_info_disk.c b/system-info/src/main/native/macos/nucleus_system_info_disk.c index abe8ac67c..d64eab888 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_disk.c +++ b/system-info/src/main/native/macos/nucleus_system_info_disk.c @@ -161,14 +161,14 @@ static void refresh_disks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskCount( JNIEnv *env, jclass clazz) { refresh_disks(); return (jint)g_disk_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskNames( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskNames( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -179,7 +179,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskFileSystems( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskFileSystems( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -190,7 +190,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskMountPoints( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskMountPoints( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -201,7 +201,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskTotalSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskTotalSpaces( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -213,7 +213,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskAvailableSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskAvailableSpaces( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -225,7 +225,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskKinds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskKinds( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; const char **arr = (const char **)malloc(g_disk_count * sizeof(char *)); @@ -236,7 +236,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskRemovable( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskRemovable( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); @@ -248,7 +248,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskReadOnly( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDiskReadOnly( JNIEnv *env, jclass clazz) { if (g_disk_count <= 0) return NULL; jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); diff --git a/system-info/src/main/native/macos/nucleus_system_info_gpu.c b/system-info/src/main/native/macos/nucleus_system_info_gpu.c index 5b759d7d8..1075221d8 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_gpu.c +++ b/system-info/src/main/native/macos/nucleus_system_info_gpu.c @@ -446,14 +446,14 @@ static void refresh_gpus(void) { // ---- JNI exports: static info ---- JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuCount( JNIEnv *env, jclass clazz) { refresh_gpus(); return (jint)g_gpu_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuNames( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; const char **arr = (const char **)malloc(g_gpu_count * sizeof(char *)); @@ -464,7 +464,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuVendorIds( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -476,7 +476,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDeviceIds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDeviceIds( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -488,7 +488,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDedicatedVideoMemories( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDedicatedVideoMemories( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -500,7 +500,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDedicatedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDedicatedSystemMemories( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -512,7 +512,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuSharedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuSharedSystemMemories( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -524,7 +524,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDriverVersions( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuDriverVersions( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; const char **arr = (const char **)malloc(g_gpu_count * sizeof(char *)); @@ -537,7 +537,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge // ---- JNI exports: live metrics ---- JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuTemperatures( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -549,7 +549,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuUsages( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -561,7 +561,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuMemoryUsed( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuMemoryUsed( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -573,7 +573,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuCoreClocks( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuCoreClocks( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jint *vals = (jint *)malloc(g_gpu_count * sizeof(jint)); @@ -585,7 +585,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuMemoryClocks( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuMemoryClocks( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jint *vals = (jint *)malloc(g_gpu_count * sizeof(jint)); @@ -597,7 +597,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuFanSpeeds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuFanSpeeds( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -609,7 +609,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuPowerDraws( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeGpuPowerDraws( JNIEnv *env, jclass clazz) { if (g_gpu_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); diff --git a/system-info/src/main/native/macos/nucleus_system_info_hardware.c b/system-info/src/main/native/macos/nucleus_system_info_hardware.c index 387d5885f..956c7b256 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_hardware.c +++ b/system-info/src/main/native/macos/nucleus_system_info_hardware.c @@ -51,7 +51,7 @@ static char *read_platform_property(const char *property_name) { // Motherboard — on Mac, "board" maps to the logic board JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardName( JNIEnv *env, jclass clazz) { char *val = read_platform_property("board-id"); if (!val) return NULL; @@ -61,7 +61,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardVendor( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardVendor( JNIEnv *env, jclass clazz) { char *val = read_platform_property("manufacturer"); if (!val) return to_jstring(env, "Apple Inc."); @@ -71,7 +71,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardVersion( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardVersion( JNIEnv *env, jclass clazz) { char *val = read_platform_property("version"); if (!val) return NULL; @@ -81,7 +81,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardSerial( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardSerial( JNIEnv *env, jclass clazz) { char *val = read_platform_property("IOPlatformSerialNumber"); if (!val) return NULL; @@ -91,7 +91,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardAssetTag( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeMotherboardAssetTag( JNIEnv *env, jclass clazz) { // Macs don't have asset tags in IORegistry return NULL; @@ -99,7 +99,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge // Product JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductName( JNIEnv *env, jclass clazz) { char *val = read_platform_property("product-name"); if (!val) { @@ -113,7 +113,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductFamily( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductFamily( JNIEnv *env, jclass clazz) { // Derive family from model identifier (e.g., "MacBookPro18,1" -> "MacBook Pro") char *model = sysctl_string("hw.model"); @@ -132,7 +132,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductSerial( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductSerial( JNIEnv *env, jclass clazz) { char *val = read_platform_property("IOPlatformSerialNumber"); if (!val) return NULL; @@ -142,7 +142,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductSku( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductSku( JNIEnv *env, jclass clazz) { // Macs don't have SKU in IORegistry; use hw.model as closest equivalent char *val = sysctl_string("hw.model"); @@ -153,7 +153,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductUuid( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductUuid( JNIEnv *env, jclass clazz) { char *val = read_platform_property("IOPlatformUUID"); if (!val) return NULL; @@ -163,7 +163,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductVersion( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductVersion( JNIEnv *env, jclass clazz) { char *val = sysctl_string("hw.model"); if (!val) return NULL; @@ -173,7 +173,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductVendor( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProductVendor( JNIEnv *env, jclass clazz) { char *val = read_platform_property("manufacturer"); if (!val) return to_jstring(env, "Apple Inc."); diff --git a/system-info/src/main/native/macos/nucleus_system_info_idle.c b/system-info/src/main/native/macos/nucleus_system_info_idle.c index a880756e3..1162f139f 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_idle.c +++ b/system-info/src/main/native/macos/nucleus_system_info_idle.c @@ -5,7 +5,7 @@ #include JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeIdleTimeSeconds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeIdleTimeSeconds( JNIEnv *env, jclass clazz) { io_iterator_t iter = 0; if (IOServiceGetMatchingServices(kIOMainPortDefault, diff --git a/system-info/src/main/native/macos/nucleus_system_info_memory.c b/system-info/src/main/native/macos/nucleus_system_info_memory.c index 7fb1ddd52..5f9c68692 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_memory.c +++ b/system-info/src/main/native/macos/nucleus_system_info_memory.c @@ -20,7 +20,7 @@ static int get_vm_stats(vm_statistics64_data_t *stats) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeTotalMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeTotalMemory( JNIEnv *env, jclass clazz) { int64_t total = 0; sysctl_int64("hw.memsize", &total); @@ -28,7 +28,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeFreeMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeFreeMemory( JNIEnv *env, jclass clazz) { vm_statistics64_data_t stats; if (get_vm_stats(&stats) != 0) return 0; @@ -36,7 +36,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeAvailableMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeAvailableMemory( JNIEnv *env, jclass clazz) { int64_t total = 0; sysctl_int64("hw.memsize", &total); @@ -50,7 +50,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUsedMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUsedMemory( JNIEnv *env, jclass clazz) { vm_statistics64_data_t stats; if (get_vm_stats(&stats) != 0) return 0; @@ -77,7 +77,7 @@ static int get_swap_info(swap_info_t *si) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeTotalSwap( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeTotalSwap( JNIEnv *env, jclass clazz) { swap_info_t si; if (get_swap_info(&si) != 0) return 0; @@ -85,7 +85,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeFreeSwap( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeFreeSwap( JNIEnv *env, jclass clazz) { swap_info_t si; if (get_swap_info(&si) != 0) return 0; @@ -93,7 +93,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUsedSwap( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUsedSwap( JNIEnv *env, jclass clazz) { swap_info_t si; if (get_swap_info(&si) != 0) return 0; diff --git a/system-info/src/main/native/macos/nucleus_system_info_network.c b/system-info/src/main/native/macos/nucleus_system_info_network.c index 75e711d94..936d4500a 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_network.c +++ b/system-info/src/main/native/macos/nucleus_system_info_network.c @@ -83,14 +83,14 @@ static void refresh_networks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkCount( JNIEnv *env, jclass clazz) { refresh_networks(); return (jint)g_net_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkNames( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkNames( JNIEnv *env, jclass clazz) { if (g_net_count <= 0) return NULL; const char **arr = (const char **)malloc(g_net_count * sizeof(char *)); @@ -102,7 +102,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge #define LONG_ARRAY_GETTER(jni_name, field) \ JNIEXPORT jlongArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_net_count <= 0) return NULL; \ jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); \ @@ -122,7 +122,7 @@ LONG_ARRAY_GETTER(nativeNetworkErrorsTransmitted, tx_errors) LONG_ARRAY_GETTER(nativeNetworkMtus, mtu) JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkMacAddresses( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeNetworkMacAddresses( JNIEnv *env, jclass clazz) { if (g_net_count <= 0) return NULL; const char **arr = (const char **)malloc(g_net_count * sizeof(char *)); diff --git a/system-info/src/main/native/macos/nucleus_system_info_os.c b/system-info/src/main/native/macos/nucleus_system_info_os.c index 6362ae2a0..6c9786624 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_os.c +++ b/system-info/src/main/native/macos/nucleus_system_info_os.c @@ -26,13 +26,13 @@ static const char *macos_codename(int major, int minor) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeOsName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeOsName( JNIEnv *env, jclass clazz) { return to_jstring(env, "macOS"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeKernelVersion( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeKernelVersion( JNIEnv *env, jclass clazz) { char *ver = sysctl_string("kern.osrelease"); if (!ver) return NULL; @@ -42,7 +42,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeOsVersion( JNIEnv *env, jclass clazz) { char *ver = sysctl_string("kern.osproductversion"); if (!ver) return NULL; @@ -52,7 +52,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeLongOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeLongOsVersion( JNIEnv *env, jclass clazz) { char *version = sysctl_string("kern.osproductversion"); char *kernel = sysctl_string("kern.osrelease"); @@ -76,13 +76,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDistributionId( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeDistributionId( JNIEnv *env, jclass clazz) { return to_jstring(env, "macos"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeHostName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeHostName( JNIEnv *env, jclass clazz) { char buf[256]; if (gethostname(buf, sizeof(buf)) != 0) return NULL; @@ -90,7 +90,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuArch( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeCpuArch( JNIEnv *env, jclass clazz) { char *arch = sysctl_string("hw.machine"); if (!arch) return NULL; @@ -108,7 +108,7 @@ static int64_t get_boot_time_sec(void) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUptime( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUptime( JNIEnv *env, jclass clazz) { int64_t boot = get_boot_time_sec(); if (boot == 0) return 0; @@ -116,7 +116,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBootTime( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeBootTime( JNIEnv *env, jclass clazz) { return (jlong)get_boot_time_sec(); } diff --git a/system-info/src/main/native/macos/nucleus_system_info_process.c b/system-info/src/main/native/macos/nucleus_system_info_process.c index 99b45248d..5999fb34b 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_process.c +++ b/system-info/src/main/native/macos/nucleus_system_info_process.c @@ -127,7 +127,7 @@ static void refresh_processes(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessCount( JNIEnv *env, jclass clazz) { refresh_processes(); return (jint)g_proc_count; @@ -135,7 +135,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge #define PROC_STRING_ARRAY(jni_name, field) \ JNIEXPORT jobjectArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_proc_count <= 0) return NULL; \ const char **arr = (const char **)malloc(g_proc_count * sizeof(char *)); \ @@ -147,7 +147,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge #define PROC_LONG_ARRAY(jni_name, field) \ JNIEXPORT jlongArray JNICALL \ -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_##jni_name( \ JNIEnv *env, jclass clazz) { \ if (g_proc_count <= 0) return NULL; \ jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); \ @@ -172,7 +172,7 @@ PROC_STRING_ARRAY(nativeProcessCwds, cwd) PROC_STRING_ARRAY(nativeProcessRoots, root) JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessCpuUsages( JNIEnv *env, jclass clazz) { if (g_proc_count <= 0) return NULL; jfloat *vals = (jfloat *)malloc(g_proc_count * sizeof(jfloat)); @@ -190,7 +190,7 @@ static int read_single_process(pid_t pid, proc_entry_t *pe) { } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidName( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidName( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; @@ -198,7 +198,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidExe( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidExe( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; @@ -206,7 +206,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidMemory( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return 0; @@ -214,7 +214,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidVirtualMemory( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidVirtualMemory( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return 0; @@ -222,7 +222,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCpuUsage( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return 0.0f; @@ -230,7 +230,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidStatus( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidStatus( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; @@ -238,7 +238,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidStartTime( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidStartTime( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return 0; @@ -246,7 +246,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidRunTime( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidRunTime( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return 0; @@ -254,7 +254,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidParentPid( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidParentPid( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return -1; @@ -262,7 +262,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCmd( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCmd( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; @@ -270,7 +270,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCwd( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidCwd( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; @@ -278,7 +278,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidRoot( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeProcessByPidRoot( JNIEnv *env, jclass clazz, jlong pid) { proc_entry_t pe; if (read_single_process((pid_t)pid, &pe) != 0) return NULL; diff --git a/system-info/src/main/native/macos/nucleus_system_info_user.c b/system-info/src/main/native/macos/nucleus_system_info_user.c index 218c045d3..8715d1b2e 100644 --- a/system-info/src/main/native/macos/nucleus_system_info_user.c +++ b/system-info/src/main/native/macos/nucleus_system_info_user.c @@ -63,14 +63,14 @@ static void refresh_users(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserCount( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserCount( JNIEnv *env, jclass clazz) { refresh_users(); return (jint)g_user_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserNames( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserNames( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -81,7 +81,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserIds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserIds( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -92,7 +92,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserGroupIds( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserGroupIds( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); @@ -103,7 +103,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserGroups( +Java_dev_nucleusframework_nucleus_systeminfo_macos_NativeMacOsSystemInfoBridge_nativeUserGroups( JNIEnv *env, jclass clazz) { if (g_user_count <= 0) return NULL; const char **arr = (const char **)malloc(g_user_count * sizeof(char *)); diff --git a/system-info/src/main/native/windows/nucleus_system_info_battery.c b/system-info/src/main/native/windows/nucleus_system_info_battery.c index 1a58a1c20..76fb075c3 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_battery.c +++ b/system-info/src/main/native/windows/nucleus_system_info_battery.c @@ -219,7 +219,7 @@ static BatteryData *get_battery(void) { // The Kotlin side should call nativeBatteryPresent first, which triggers the query. JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryPresent( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryPresent( JNIEnv *env, jclass clazz) { // Re-query each time batteryPresent is called (it's always called first) g_battery_queried = FALSE; @@ -228,7 +228,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryExternalConnected( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryExternalConnected( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return JNI_FALSE; @@ -236,7 +236,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryIsCharging( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryIsCharging( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return JNI_FALSE; @@ -244,7 +244,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryFullyCharged( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryFullyCharged( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return JNI_FALSE; @@ -258,7 +258,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryCurrentCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryCurrentCapacity( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -267,7 +267,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryMaxCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryMaxCapacity( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -275,7 +275,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryDesignCapacity( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryDesignCapacity( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -283,7 +283,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryCycleCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryCycleCount( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -291,7 +291,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryVoltage( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryVoltage( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -299,7 +299,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryAmperage( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryAmperage( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return 0; @@ -309,7 +309,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryTemperature( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryTemperature( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid || !bat->temperature_valid) return (jfloat)NAN; @@ -318,7 +318,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryTimeRemaining( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryTimeRemaining( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return -1; @@ -348,7 +348,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryManufacturer( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryManufacturer( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return NULL; @@ -356,7 +356,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryModelName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatteryModelName( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return NULL; @@ -364,7 +364,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatterySerialNumber( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBatterySerialNumber( JNIEnv *env, jclass clazz) { BatteryData *bat = get_battery(); if (!bat->valid) return NULL; diff --git a/system-info/src/main/native/windows/nucleus_system_info_common.h b/system-info/src/main/native/windows/nucleus_system_info_common.h index 37c2f0a04..5145d2c91 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_common.h +++ b/system-info/src/main/native/windows/nucleus_system_info_common.h @@ -20,7 +20,7 @@ #include // JNI class path for the Windows bridge -#define BRIDGE_CLASS "io/github/kdroidfilter/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge" +#define BRIDGE_CLASS "dev/nucleusframework/nucleus/systeminfo/windows/NativeWindowsSystemInfoBridge" // Helper: convert a wide string to a UTF-8 malloc'd string. Caller must free. static inline char *wchar_to_utf8(const wchar_t *wstr) { diff --git a/system-info/src/main/native/windows/nucleus_system_info_component.c b/system-info/src/main/native/windows/nucleus_system_info_component.c index f0cd3c197..041f563d3 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_component.c +++ b/system-info/src/main/native/windows/nucleus_system_info_component.c @@ -7,31 +7,31 @@ #include "nucleus_system_info_common.h" JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentCount( JNIEnv *env, jclass clazz) { return 0; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentLabels( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentLabels( JNIEnv *env, jclass clazz) { return to_string_array(env, NULL, 0); } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentTemperatures( JNIEnv *env, jclass clazz) { return (*env)->NewFloatArray(env, 0); } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentMaxTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentMaxTemperatures( JNIEnv *env, jclass clazz) { return (*env)->NewFloatArray(env, 0); } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentCriticalTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeComponentCriticalTemperatures( JNIEnv *env, jclass clazz) { return (*env)->NewFloatArray(env, 0); } diff --git a/system-info/src/main/native/windows/nucleus_system_info_connectivity.c b/system-info/src/main/native/windows/nucleus_system_info_connectivity.c index 9ab00bee0..7ecb498d6 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_connectivity.c +++ b/system-info/src/main/native/windows/nucleus_system_info_connectivity.c @@ -6,7 +6,7 @@ #include JNIEXPORT jboolean JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeIsNetworkConnected( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeIsNetworkConnected( JNIEnv *env, jclass clazz) { HRESULT hrInit = CoInitializeEx(NULL, COINIT_MULTITHREADED); @@ -36,7 +36,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGetMeteredStatus( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGetMeteredStatus( JNIEnv *env, jclass clazz) { HRESULT hrInit = CoInitializeEx(NULL, COINIT_MULTITHREADED); diff --git a/system-info/src/main/native/windows/nucleus_system_info_cpu.c b/system-info/src/main/native/windows/nucleus_system_info_cpu.c index 71aa1b7f1..e581c26f1 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_cpu.c +++ b/system-info/src/main/native/windows/nucleus_system_info_cpu.c @@ -207,7 +207,7 @@ static void refresh_perf_data(void) { } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGlobalCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGlobalCpuUsage( JNIEnv *env, jclass clazz) { FILETIME idle_ft, kernel_ft, user_ft; if (!GetSystemTimes(&idle_ft, &kernel_ft, &user_ft)) return 0.0f; @@ -240,7 +240,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativePhysicalCoreCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativePhysicalCoreCount( JNIEnv *env, jclass clazz) { DWORD len = 0; GetLogicalProcessorInformationEx(RelationProcessorCore, NULL, &len); @@ -267,13 +267,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuCount( JNIEnv *env, jclass clazz) { return get_logical_cpu_count(); } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuNames( JNIEnv *env, jclass clazz) { int count = get_logical_cpu_count(); const char **names = (const char **)malloc(count * sizeof(char *)); @@ -290,7 +290,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuVendorIds( JNIEnv *env, jclass clazz) { int count = get_logical_cpu_count(); char vendor[16]; @@ -304,7 +304,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuBrands( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuBrands( JNIEnv *env, jclass clazz) { int count = get_logical_cpu_count(); char brand[64]; @@ -328,7 +328,7 @@ typedef struct { } MY_PROCESSOR_POWER_INFORMATION; JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuFrequencies( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuFrequencies( JNIEnv *env, jclass clazz) { int count = get_logical_cpu_count(); jlongArray arr = (*env)->NewLongArray(env, count); @@ -372,7 +372,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuUsages( JNIEnv *env, jclass clazz) { int count = get_logical_cpu_count(); jfloatArray arr = (*env)->NewFloatArray(env, count); diff --git a/system-info/src/main/native/windows/nucleus_system_info_disk.c b/system-info/src/main/native/windows/nucleus_system_info_disk.c index 39f672acb..db7411e76 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_disk.c +++ b/system-info/src/main/native/windows/nucleus_system_info_disk.c @@ -115,14 +115,14 @@ static void refresh_disks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskCount( JNIEnv *env, jclass clazz) { refresh_disks(); return g_disk_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskNames( JNIEnv *env, jclass clazz) { const char *names[MAX_DISKS]; for (int i = 0; i < g_disk_count; i++) names[i] = g_disks[i].name; @@ -130,7 +130,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskFileSystems( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskFileSystems( JNIEnv *env, jclass clazz) { const char *fs[MAX_DISKS]; for (int i = 0; i < g_disk_count; i++) fs[i] = g_disks[i].file_system; @@ -138,7 +138,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskMountPoints( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskMountPoints( JNIEnv *env, jclass clazz) { const char *mps[MAX_DISKS]; for (int i = 0; i < g_disk_count; i++) mps[i] = g_disks[i].mount_point; @@ -146,7 +146,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskTotalSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskTotalSpaces( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_disk_count); jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -158,7 +158,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskAvailableSpaces( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskAvailableSpaces( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_disk_count); jlong *vals = (jlong *)malloc(g_disk_count * sizeof(jlong)); @@ -170,7 +170,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskKinds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskKinds( JNIEnv *env, jclass clazz) { const char *kinds[MAX_DISKS]; for (int i = 0; i < g_disk_count; i++) kinds[i] = g_disks[i].kind; @@ -178,7 +178,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskRemovable( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskRemovable( JNIEnv *env, jclass clazz) { jbooleanArray arr = (*env)->NewBooleanArray(env, g_disk_count); jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); @@ -190,7 +190,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jbooleanArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskReadOnly( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDiskReadOnly( JNIEnv *env, jclass clazz) { jbooleanArray arr = (*env)->NewBooleanArray(env, g_disk_count); jboolean *vals = (jboolean *)malloc(g_disk_count * sizeof(jboolean)); diff --git a/system-info/src/main/native/windows/nucleus_system_info_gpu.c b/system-info/src/main/native/windows/nucleus_system_info_gpu.c index 9b942664d..963215102 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_gpu.c +++ b/system-info/src/main/native/windows/nucleus_system_info_gpu.c @@ -686,14 +686,14 @@ static void refresh_gpus(void) { // ============================================================================ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuCount( JNIEnv *env, jclass clazz) { refresh_gpus(); return g_gpu_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuNames( JNIEnv *env, jclass clazz) { const char *names[MAX_GPUS]; for (int i = 0; i < g_gpu_count; i++) names[i] = g_gpus[i].name; @@ -701,7 +701,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuVendorIds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuVendorIds( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -712,7 +712,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDeviceIds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDeviceIds( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -723,7 +723,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDedicatedVideoMemories( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDedicatedVideoMemories( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -734,7 +734,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDedicatedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDedicatedSystemMemories( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -745,7 +745,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuSharedSystemMemories( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuSharedSystemMemories( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -756,7 +756,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDriverVersions( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuDriverVersions( JNIEnv *env, jclass clazz) { const char *versions[MAX_GPUS]; for (int i = 0; i < g_gpu_count; i++) versions[i] = g_gpus[i].driver_version; @@ -766,7 +766,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr // Live metrics JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuTemperatures( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuTemperatures( JNIEnv *env, jclass clazz) { jfloatArray arr = (*env)->NewFloatArray(env, g_gpu_count); jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -777,7 +777,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuUsages( JNIEnv *env, jclass clazz) { jfloatArray arr = (*env)->NewFloatArray(env, g_gpu_count); jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -788,7 +788,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuMemoryUsed( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuMemoryUsed( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_gpu_count); jlong *vals = (jlong *)malloc(g_gpu_count * sizeof(jlong)); @@ -799,7 +799,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuCoreClocks( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuCoreClocks( JNIEnv *env, jclass clazz) { jintArray arr = (*env)->NewIntArray(env, g_gpu_count); jint *vals = (jint *)malloc(g_gpu_count * sizeof(jint)); @@ -810,7 +810,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jintArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuMemoryClocks( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuMemoryClocks( JNIEnv *env, jclass clazz) { jintArray arr = (*env)->NewIntArray(env, g_gpu_count); jint *vals = (jint *)malloc(g_gpu_count * sizeof(jint)); @@ -821,7 +821,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuFanSpeeds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuFanSpeeds( JNIEnv *env, jclass clazz) { jfloatArray arr = (*env)->NewFloatArray(env, g_gpu_count); jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); @@ -832,7 +832,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuPowerDraws( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeGpuPowerDraws( JNIEnv *env, jclass clazz) { jfloatArray arr = (*env)->NewFloatArray(env, g_gpu_count); jfloat *vals = (jfloat *)malloc(g_gpu_count * sizeof(jfloat)); diff --git a/system-info/src/main/native/windows/nucleus_system_info_hardware.c b/system-info/src/main/native/windows/nucleus_system_info_hardware.c index 0cb47bcd4..421d5ff21 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_hardware.c +++ b/system-info/src/main/native/windows/nucleus_system_info_hardware.c @@ -112,7 +112,7 @@ static const BYTE *find_smbios_struct(BYTE type, BYTE *out_length) { // --- Motherboard (Type 2) --- JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardName( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(2, &len); @@ -121,7 +121,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardVendor( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardVendor( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(2, &len); @@ -130,7 +130,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardVersion( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardVersion( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(2, &len); @@ -139,7 +139,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardSerial( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardSerial( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(2, &len); @@ -148,7 +148,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardAssetTag( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeMotherboardAssetTag( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(2, &len); @@ -159,7 +159,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr // --- Product (Type 1) --- JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductName( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -168,7 +168,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductFamily( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductFamily( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -177,7 +177,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductSerial( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductSerial( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -186,7 +186,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductSku( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductSku( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -195,7 +195,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductUuid( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductUuid( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -228,7 +228,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductVersion( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductVersion( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); @@ -237,7 +237,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductVendor( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProductVendor( JNIEnv *env, jclass clazz) { BYTE len; const BYTE *s = find_smbios_struct(1, &len); diff --git a/system-info/src/main/native/windows/nucleus_system_info_idle.c b/system-info/src/main/native/windows/nucleus_system_info_idle.c index 91f906c11..4428bcaad 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_idle.c +++ b/system-info/src/main/native/windows/nucleus_system_info_idle.c @@ -3,7 +3,7 @@ #include "nucleus_system_info_common.h" JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeIdleTimeSeconds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeIdleTimeSeconds( JNIEnv *env, jclass clazz) { LASTINPUTINFO lii; lii.cbSize = sizeof(LASTINPUTINFO); diff --git a/system-info/src/main/native/windows/nucleus_system_info_memory.c b/system-info/src/main/native/windows/nucleus_system_info_memory.c index b1fde2148..15550f8df 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_memory.c +++ b/system-info/src/main/native/windows/nucleus_system_info_memory.c @@ -10,7 +10,7 @@ static BOOL get_mem_status(MEMORYSTATUSEX *ms) { } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeTotalMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeTotalMemory( JNIEnv *env, jclass clazz) { MEMORYSTATUSEX ms; if (!get_mem_status(&ms)) return 0; @@ -18,7 +18,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeFreeMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeFreeMemory( JNIEnv *env, jclass clazz) { MEMORYSTATUSEX ms; if (!get_mem_status(&ms)) return 0; @@ -26,7 +26,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeAvailableMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeAvailableMemory( JNIEnv *env, jclass clazz) { MEMORYSTATUSEX ms; if (!get_mem_status(&ms)) return 0; @@ -34,7 +34,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUsedMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUsedMemory( JNIEnv *env, jclass clazz) { MEMORYSTATUSEX ms; if (!get_mem_status(&ms)) return 0; @@ -42,7 +42,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeTotalSwap( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeTotalSwap( JNIEnv *env, jclass clazz) { PERFORMANCE_INFORMATION pi; pi.cb = sizeof(pi); @@ -53,7 +53,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeFreeSwap( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeFreeSwap( JNIEnv *env, jclass clazz) { PERFORMANCE_INFORMATION pi; pi.cb = sizeof(pi); @@ -70,7 +70,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUsedSwap( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUsedSwap( JNIEnv *env, jclass clazz) { PERFORMANCE_INFORMATION pi; pi.cb = sizeof(pi); diff --git a/system-info/src/main/native/windows/nucleus_system_info_network.c b/system-info/src/main/native/windows/nucleus_system_info_network.c index b0a40c63e..e8905c90c 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_network.c +++ b/system-info/src/main/native/windows/nucleus_system_info_network.c @@ -104,14 +104,14 @@ static void refresh_networks(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkCount( JNIEnv *env, jclass clazz) { refresh_networks(); return g_net_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkNames( JNIEnv *env, jclass clazz) { const char *names[MAX_NETWORKS]; for (int i = 0; i < g_net_count; i++) names[i] = g_nets[i].name; @@ -119,7 +119,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkReceivedBytes( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkReceivedBytes( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -131,7 +131,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkTransmittedBytes( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkTransmittedBytes( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -143,7 +143,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkReceivedPackets( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkReceivedPackets( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -155,7 +155,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkTransmittedPackets( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkTransmittedPackets( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -167,7 +167,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkErrorsReceived( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkErrorsReceived( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -179,7 +179,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkErrorsTransmitted( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkErrorsTransmitted( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); @@ -191,7 +191,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkMacAddresses( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkMacAddresses( JNIEnv *env, jclass clazz) { const char *macs[MAX_NETWORKS]; for (int i = 0; i < g_net_count; i++) macs[i] = g_nets[i].mac_address; @@ -199,7 +199,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkMtus( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeNetworkMtus( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_net_count); jlong *vals = (jlong *)malloc(g_net_count * sizeof(jlong)); diff --git a/system-info/src/main/native/windows/nucleus_system_info_os.c b/system-info/src/main/native/windows/nucleus_system_info_os.c index 150be13b4..f71a03604 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_os.c +++ b/system-info/src/main/native/windows/nucleus_system_info_os.c @@ -6,7 +6,7 @@ #define NT_CURRENT_VERSION L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion" JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeOsName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeOsName( JNIEnv *env, jclass clazz) { char *product = reg_read_string(HKEY_LOCAL_MACHINE, NT_CURRENT_VERSION, L"ProductName"); if (!product) return to_jstring(env, "Windows"); @@ -42,7 +42,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeKernelVersion( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeKernelVersion( JNIEnv *env, jclass clazz) { char *build = reg_read_string(HKEY_LOCAL_MACHINE, NT_CURRENT_VERSION, L"CurrentBuildNumber"); if (!build) return NULL; @@ -60,7 +60,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeOsVersion( JNIEnv *env, jclass clazz) { DWORD major = 0, minor = 0; if (!reg_read_dword(HKEY_LOCAL_MACHINE, NT_CURRENT_VERSION, L"CurrentMajorVersionNumber", &major)) @@ -78,7 +78,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeLongOsVersion( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeLongOsVersion( JNIEnv *env, jclass clazz) { char *product = reg_read_string(HKEY_LOCAL_MACHINE, NT_CURRENT_VERSION, L"ProductName"); char *display_ver = reg_read_string(HKEY_LOCAL_MACHINE, NT_CURRENT_VERSION, L"DisplayVersion"); @@ -124,13 +124,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDistributionId( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeDistributionId( JNIEnv *env, jclass clazz) { return to_jstring(env, "windows"); } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeHostName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeHostName( JNIEnv *env, jclass clazz) { wchar_t buf[256]; DWORD size = sizeof(buf) / sizeof(buf[0]); @@ -139,7 +139,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuArch( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeCpuArch( JNIEnv *env, jclass clazz) { SYSTEM_INFO si; GetNativeSystemInfo(&si); @@ -154,13 +154,13 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUptime( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUptime( JNIEnv *env, jclass clazz) { return (jlong)(GetTickCount64() / 1000ULL); } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBootTime( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeBootTime( JNIEnv *env, jclass clazz) { ULONGLONG uptime_ms = GetTickCount64(); FILETIME ft; diff --git a/system-info/src/main/native/windows/nucleus_system_info_process.c b/system-info/src/main/native/windows/nucleus_system_info_process.c index 58552e8ef..ff2f7abe1 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_process.c +++ b/system-info/src/main/native/windows/nucleus_system_info_process.c @@ -168,14 +168,14 @@ static int fill_single_process(DWORD pid, process_entry_t *p) { // --- JNI bulk process functions --- JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCount( JNIEnv *env, jclass clazz) { refresh_processes(); return g_proc_count; } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessPids( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessPids( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -187,7 +187,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessNames( JNIEnv *env, jclass clazz) { const char *names[MAX_PROCS]; for (int i = 0; i < g_proc_count; i++) names[i] = g_procs[i].name; @@ -195,7 +195,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessExes( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessExes( JNIEnv *env, jclass clazz) { const char *exes[MAX_PROCS]; for (int i = 0; i < g_proc_count; i++) exes[i] = g_procs[i].exe; @@ -203,7 +203,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessMemories( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessMemories( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -215,7 +215,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessVirtualMemories( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessVirtualMemories( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -227,7 +227,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloatArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCpuUsages( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCpuUsages( JNIEnv *env, jclass clazz) { jfloatArray arr = (*env)->NewFloatArray(env, g_proc_count); jfloat *vals = (jfloat *)malloc(g_proc_count * sizeof(jfloat)); @@ -239,7 +239,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessStatuses( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessStatuses( JNIEnv *env, jclass clazz) { const char *statuses[MAX_PROCS]; for (int i = 0; i < g_proc_count; i++) statuses[i] = g_procs[i].status; @@ -247,7 +247,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessStartTimes( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessStartTimes( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -259,7 +259,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessRunTimes( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessRunTimes( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -271,7 +271,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlongArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessParentPids( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessParentPids( JNIEnv *env, jclass clazz) { jlongArray arr = (*env)->NewLongArray(env, g_proc_count); jlong *vals = (jlong *)malloc(g_proc_count * sizeof(jlong)); @@ -283,7 +283,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCmds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCmds( JNIEnv *env, jclass clazz) { const char *cmds[MAX_PROCS]; for (int i = 0; i < g_proc_count; i++) cmds[i] = g_procs[i].cmd; @@ -291,7 +291,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCwds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessCwds( JNIEnv *env, jclass clazz) { const char *cwds[MAX_PROCS]; for (int i = 0; i < g_proc_count; i++) cwds[i] = g_procs[i].cwd; @@ -299,7 +299,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessRoots( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessRoots( JNIEnv *env, jclass clazz) { // Windows doesn't have a per-process root concept; use exe drive root const char *roots[MAX_PROCS]; @@ -321,7 +321,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr // --- Single process by PID --- JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidName( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidName( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; @@ -329,7 +329,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidExe( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidExe( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; @@ -337,7 +337,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidMemory( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return 0; @@ -345,7 +345,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidVirtualMemory( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidVirtualMemory( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return 0; @@ -353,7 +353,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jfloat JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCpuUsage( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCpuUsage( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return 0.0f; @@ -361,7 +361,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidStatus( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidStatus( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; @@ -369,7 +369,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidStartTime( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidStartTime( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return 0; @@ -377,7 +377,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidRunTime( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidRunTime( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return 0; @@ -385,7 +385,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jlong JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidParentPid( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidParentPid( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return -1; @@ -393,7 +393,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCmd( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCmd( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; @@ -401,7 +401,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCwd( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidCwd( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; @@ -409,7 +409,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jstring JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidRoot( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeProcessByPidRoot( JNIEnv *env, jclass clazz, jlong pid) { process_entry_t p; if (!fill_single_process((DWORD)pid, &p)) return NULL; diff --git a/system-info/src/main/native/windows/nucleus_system_info_user.c b/system-info/src/main/native/windows/nucleus_system_info_user.c index 57d54e102..9196b7106 100644 --- a/system-info/src/main/native/windows/nucleus_system_info_user.c +++ b/system-info/src/main/native/windows/nucleus_system_info_user.c @@ -107,14 +107,14 @@ static void refresh_users(void) { } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserCount( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserCount( JNIEnv *env, jclass clazz) { refresh_users(); return g_user_count; } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserNames( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserNames( JNIEnv *env, jclass clazz) { const char *names[MAX_USERS]; for (int i = 0; i < g_user_count; i++) names[i] = g_users[i].name; @@ -122,7 +122,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserIds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserIds( JNIEnv *env, jclass clazz) { const char *ids[MAX_USERS]; for (int i = 0; i < g_user_count; i++) ids[i] = g_users[i].sid_str; @@ -130,7 +130,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserGroupIds( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserGroupIds( JNIEnv *env, jclass clazz) { const char *gids[MAX_USERS]; for (int i = 0; i < g_user_count; i++) gids[i] = g_users[i].primary_gid; @@ -138,7 +138,7 @@ Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBr } JNIEXPORT jobjectArray JNICALL -Java_io_github_kdroidfilter_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserGroups( +Java_dev_nucleusframework_nucleus_systeminfo_windows_NativeWindowsSystemInfoBridge_nativeUserGroups( JNIEnv *env, jclass clazz) { const char *groups[MAX_USERS]; for (int i = 0; i < g_user_count; i++) groups[i] = g_users[i].groups; diff --git a/system-info/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-info/reachability-metadata.json b/system-info/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-info/reachability-metadata.json new file mode 100644 index 000000000..8f80e8280 --- /dev/null +++ b/system-info/src/main/resources/META-INF/native-image/dev.nucleusframework/nucleus.system-info/reachability-metadata.json @@ -0,0 +1,19 @@ +{ + "reflection": [ + { + "type": "dev.nucleusframework.nucleus.systeminfo.linux.NativeLinuxSystemInfoBridge", + "jniAccessible": true, + "methods": [] + }, + { + "type": "dev.nucleusframework.nucleus.systeminfo.macos.NativeMacOsSystemInfoBridge", + "jniAccessible": true, + "methods": [] + }, + { + "type": "dev.nucleusframework.nucleus.systeminfo.windows.NativeWindowsSystemInfoBridge", + "jniAccessible": true, + "methods": [] + } + ] +} diff --git a/system-info/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-info/reachability-metadata.json b/system-info/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-info/reachability-metadata.json deleted file mode 100644 index a91a2ce52..000000000 --- a/system-info/src/main/resources/META-INF/native-image/io.github.kdroidfilter/nucleus.system-info/reachability-metadata.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "reflection": [ - { - "type": "io.github.kdroidfilter.nucleus.systeminfo.linux.NativeLinuxSystemInfoBridge", - "jniAccessible": true, - "methods": [] - }, - { - "type": "io.github.kdroidfilter.nucleus.systeminfo.macos.NativeMacOsSystemInfoBridge", - "jniAccessible": true, - "methods": [] - }, - { - "type": "io.github.kdroidfilter.nucleus.systeminfo.windows.NativeWindowsSystemInfoBridge", - "jniAccessible": true, - "methods": [] - } - ] -} diff --git a/system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoSmokeTest.kt b/system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoSmokeTest.kt similarity index 99% rename from system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoSmokeTest.kt rename to system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoSmokeTest.kt index 1e072128f..4edc1f454 100644 --- a/system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoSmokeTest.kt +++ b/system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoSmokeTest.kt @@ -1,6 +1,6 @@ @file:Suppress("MaxLineLength") -package io.github.kdroidfilter.nucleus.systeminfo +package dev.nucleusframework.nucleus.systeminfo import kotlin.test.Test import kotlin.test.assertNotNull diff --git a/system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoTest.kt b/system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoTest.kt similarity index 98% rename from system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoTest.kt rename to system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoTest.kt index 39e44a435..63bff4d1a 100644 --- a/system-info/src/test/kotlin/io/github/kdroidfilter/nucleus/systeminfo/SystemInfoTest.kt +++ b/system-info/src/test/kotlin/dev/nucleusframework/nucleus/systeminfo/SystemInfoTest.kt @@ -1,6 +1,6 @@ @file:Suppress("MaxLineLength") -package io.github.kdroidfilter.nucleus.systeminfo +package dev.nucleusframework.nucleus.systeminfo import kotlin.test.Test import kotlin.test.assertNotNull diff --git a/taskbar-progress-tao/build.gradle.kts b/taskbar-progress-tao/build.gradle.kts index 336c2cba4..f78520c2f 100644 --- a/taskbar-progress-tao/build.gradle.kts +++ b/taskbar-progress-tao/build.gradle.kts @@ -38,12 +38,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.taskbar-progress-tao", publishVersion) + coordinates("dev.nucleusframework", "nucleus.taskbar-progress-tao", publishVersion) pom { name.set("Nucleus Taskbar Progress (Tao)") description.set("Tao-backend bridge for Nucleus Taskbar Progress: composable helpers reading LocalTaoWindow.") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -54,16 +54,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt b/taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt similarity index 94% rename from taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt rename to taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt index babbb1b4f..ef44c5e71 100644 --- a/taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt +++ b/taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/NucleusTaskbarProgress.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.tao +package dev.nucleusframework.nucleus.taskbarprogress.tao -import io.github.kdroidfilter.nucleus.application.NucleusWindow -import io.github.kdroidfilter.nucleus.taskbarprogress.TaskbarProgress +import dev.nucleusframework.nucleus.application.NucleusWindow +import dev.nucleusframework.nucleus.taskbarprogress.TaskbarProgress import java.util.concurrent.Executors /** @@ -111,7 +111,7 @@ object NucleusTaskbarProgress { private inline fun dispatch( window: NucleusWindow, crossinline awt: (java.awt.Window) -> Boolean, - crossinline tao: (io.github.kdroidfilter.nucleus.window.tao.TaoWindow) -> Boolean, + crossinline tao: (dev.nucleusframework.nucleus.window.tao.TaoWindow) -> Boolean, ): Boolean { val awtWindow = window.unsafe.awtWindow val taoWindow = window.unsafe.taoWindow diff --git a/taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt b/taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt similarity index 91% rename from taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt rename to taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt index 13dd410ab..ec58a248d 100644 --- a/taskbar-progress-tao/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt +++ b/taskbar-progress-tao/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/tao/TaoTaskbarProgress.kt @@ -1,11 +1,11 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.tao +package dev.nucleusframework.nucleus.taskbarprogress.tao import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.taskbarprogress.TaskbarProgress -import io.github.kdroidfilter.nucleus.window.tao.LocalTaoWindow -import io.github.kdroidfilter.nucleus.window.tao.TaoWindow +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.taskbarprogress.TaskbarProgress +import dev.nucleusframework.nucleus.window.tao.LocalTaoWindow +import dev.nucleusframework.nucleus.window.tao.TaoWindow /** * Tao-backend façade over [TaskbarProgress]. On Windows it resolves the HWND diff --git a/taskbar-progress/build.gradle.kts b/taskbar-progress/build.gradle.kts index 29f4a6356..e48e422e3 100644 --- a/taskbar-progress/build.gradle.kts +++ b/taskbar-progress/build.gradle.kts @@ -79,12 +79,12 @@ tasks.configureEach { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.taskbar-progress", publishVersion) + coordinates("dev.nucleusframework", "nucleus.taskbar-progress", publishVersion) pom { name.set("Nucleus Taskbar Progress") description.set("Cross-platform taskbar/dock progress indicator for Compose Desktop (Windows + macOS + Linux)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -95,16 +95,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/TaskbarProgress.kt b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/TaskbarProgress.kt similarity index 96% rename from taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/TaskbarProgress.kt rename to taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/TaskbarProgress.kt index 60011016f..1fba0fb89 100644 --- a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/TaskbarProgress.kt +++ b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/TaskbarProgress.kt @@ -1,10 +1,10 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress +package dev.nucleusframework.nucleus.taskbarprogress -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.taskbarprogress.linux.LinuxDesktopFileDetector -import io.github.kdroidfilter.nucleus.taskbarprogress.linux.NativeLinuxTaskbarBridge -import io.github.kdroidfilter.nucleus.taskbarprogress.macos.NativeMacOsTaskbarBridge -import io.github.kdroidfilter.nucleus.taskbarprogress.windows.NativeWindowsTaskbarBridge +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.taskbarprogress.linux.LinuxDesktopFileDetector +import dev.nucleusframework.nucleus.taskbarprogress.linux.NativeLinuxTaskbarBridge +import dev.nucleusframework.nucleus.taskbarprogress.macos.NativeMacOsTaskbarBridge +import dev.nucleusframework.nucleus.taskbarprogress.windows.NativeWindowsTaskbarBridge import java.awt.Window /** diff --git a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt similarity index 51% rename from taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt rename to taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt index 1ba365d37..053dc621f 100644 --- a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt +++ b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/LinuxDesktopFileDetector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.linux +package dev.nucleusframework.nucleus.taskbarprogress.linux -import io.github.kdroidfilter.nucleus.core.runtime.tools.LinuxDesktopFileDetector as CoreDetector +import dev.nucleusframework.nucleus.core.runtime.tools.LinuxDesktopFileDetector as CoreDetector /** Delegates to [CoreDetector] in core-runtime. */ internal object LinuxDesktopFileDetector { diff --git a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt similarity index 88% rename from taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt rename to taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt index f9b121f5a..587833de3 100644 --- a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt +++ b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/linux/NativeLinuxTaskbarBridge.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.linux +package dev.nucleusframework.nucleus.taskbarprogress.linux -import io.github.kdroidfilter.nucleus.launcher.linux.LauncherProperties -import io.github.kdroidfilter.nucleus.launcher.linux.LinuxLauncherEntry +import dev.nucleusframework.nucleus.launcher.linux.LauncherProperties +import dev.nucleusframework.nucleus.launcher.linux.LinuxLauncherEntry private const val STATE_NO_PROGRESS = 0x00 diff --git a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt similarity index 81% rename from taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt rename to taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt index 9fabfd02a..fa1ee4510 100644 --- a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt +++ b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/macos/NativeMacOsTaskbarBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.macos +package dev.nucleusframework.nucleus.taskbarprogress.macos -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader private const val LIBRARY_NAME = "nucleus_taskbar_progress" diff --git a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt similarity index 88% rename from taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt rename to taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt index e00856274..7d045b553 100644 --- a/taskbar-progress/src/main/kotlin/io/github/kdroidfilter/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt +++ b/taskbar-progress/src/main/kotlin/dev/nucleusframework/nucleus/taskbarprogress/windows/NativeWindowsTaskbarBridge.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.taskbarprogress.windows +package dev.nucleusframework.nucleus.taskbarprogress.windows -import io.github.kdroidfilter.nucleus.core.runtime.NativeLibraryLoader +import dev.nucleusframework.nucleus.core.runtime.NativeLibraryLoader import java.awt.Window private const val LIBRARY_NAME = "nucleus_taskbar_progress" diff --git a/taskbar-progress/src/main/native/macos/nucleus_taskbar_progress_macos.m b/taskbar-progress/src/main/native/macos/nucleus_taskbar_progress_macos.m index fc9ec508e..131c12f80 100644 --- a/taskbar-progress/src/main/native/macos/nucleus_taskbar_progress_macos.m +++ b/taskbar-progress/src/main/native/macos/nucleus_taskbar_progress_macos.m @@ -117,7 +117,7 @@ static void runOnMain(void (^block)(void)) { /* ---- JNI: nativeSetDockProgress ----------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeSetDockProgress( +Java_dev_nucleusframework_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeSetDockProgress( JNIEnv *env, jclass clazz, jlong completed, jlong total) { (void)env; (void)clazz; @@ -149,7 +149,7 @@ static void runOnMain(void (^block)(void)) { /* ---- JNI: nativeSetDockState -------------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeSetDockState( +Java_dev_nucleusframework_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeSetDockState( JNIEnv *env, jclass clazz, jint flags) { (void)env; (void)clazz; @@ -183,7 +183,7 @@ static void runOnMain(void (^block)(void)) { /* ---- JNI: nativeRequestAttention ---------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeRequestAttention( +Java_dev_nucleusframework_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeRequestAttention( JNIEnv *env, jclass clazz, jint type) { (void)env; (void)clazz; @@ -206,7 +206,7 @@ static void runOnMain(void (^block)(void)) { /* ---- JNI: nativeCancelAttention ----------------------------------- */ JNIEXPORT void JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeCancelAttention( +Java_dev_nucleusframework_nucleus_taskbarprogress_macos_NativeMacOsTaskbarBridge_nativeCancelAttention( JNIEnv *env, jclass clazz, jint requestId) { (void)env; (void)clazz; diff --git a/taskbar-progress/src/main/native/windows/nucleus_taskbar_progress.c b/taskbar-progress/src/main/native/windows/nucleus_taskbar_progress.c index a24ea933e..49b988b8d 100644 --- a/taskbar-progress/src/main/native/windows/nucleus_taskbar_progress.c +++ b/taskbar-progress/src/main/native/windows/nucleus_taskbar_progress.c @@ -266,7 +266,7 @@ static jint SetProgressStateByHwnd(HWND hwnd, jint flags) { /* ---- AWT-window-driven entrypoints ------------------------------- */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgress( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgress( JNIEnv *env, jclass clazz, jobject awtWindow, jlong completed, jlong total) { HWND hwnd; @@ -278,7 +278,7 @@ Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbar /* ---- HWND-driven entrypoints (used by non-AWT backends, e.g. Tao) - */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressByHwnd( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressByHwnd( JNIEnv *env, jclass clazz, jlong hwnd, jlong completed, jlong total) { (void)env; (void)clazz; @@ -286,7 +286,7 @@ Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbar } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressStateByHwnd( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressStateByHwnd( JNIEnv *env, jclass clazz, jlong hwnd, jint flags) { (void)env; (void)clazz; @@ -294,7 +294,7 @@ Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbar } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressState( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeSetProgressState( JNIEnv *env, jclass clazz, jobject awtWindow, jint flags) { HWND hwnd; @@ -352,7 +352,7 @@ static jint RequestAttentionByHwnd(HWND hwnd, jint type) { * type: 0 = stop, 1 = informational (tray only, 4 flashes), 2 = critical (all, until foreground) */ JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeRequestAttention( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeRequestAttention( JNIEnv *env, jclass clazz, jobject awtWindow, jint type) { HWND hwnd; @@ -362,7 +362,7 @@ Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbar } JNIEXPORT jint JNICALL -Java_io_github_kdroidfilter_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeRequestAttentionByHwnd( +Java_dev_nucleusframework_nucleus_taskbarprogress_windows_NativeWindowsTaskbarBridge_nativeRequestAttentionByHwnd( JNIEnv *env, jclass clazz, jlong hwnd, jint type) { (void)env; (void)clazz; diff --git a/tmp/souvlaki b/tmp/souvlaki deleted file mode 160000 index 023e1a98f..000000000 --- a/tmp/souvlaki +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 023e1a98f2b31704cfc48c160809ed3c5e139345 diff --git a/updater-runtime/build.gradle.kts b/updater-runtime/build.gradle.kts index dc2c12230..72486f3c6 100644 --- a/updater-runtime/build.gradle.kts +++ b/updater-runtime/build.gradle.kts @@ -31,12 +31,12 @@ kotlin { } mavenPublishing { - coordinates("io.github.kdroidfilter", "nucleus.updater-runtime", publishVersion) + coordinates("dev.nucleusframework", "nucleus.updater-runtime", publishVersion) pom { name.set("Nucleus Updater Runtime") description.set("Updater runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -47,16 +47,16 @@ mavenPublishing { developers { developer { - id.set("kdroidfilter") - name.set("kdroidFilter") - url.set("https://github.com/kdroidFilter") + id.set("nucleusframework") + name.set("nucleusframework") + url.set("https://github.com/nucleusframework") } } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/DownloadProgress.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/DownloadProgress.kt similarity index 77% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/DownloadProgress.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/DownloadProgress.kt index 78ce599ba..dc6cca1c6 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/DownloadProgress.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/DownloadProgress.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater import java.io.File diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/NucleusUpdater.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt similarity index 91% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/NucleusUpdater.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt index 913457229..93781578a 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/NucleusUpdater.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt @@ -1,18 +1,18 @@ -package io.github.kdroidfilter.nucleus.updater - -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableType -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.updater.exception.ChecksumException -import io.github.kdroidfilter.nucleus.updater.exception.NetworkException -import io.github.kdroidfilter.nucleus.updater.exception.NoMatchingFileException -import io.github.kdroidfilter.nucleus.updater.exception.UpdateException -import io.github.kdroidfilter.nucleus.updater.internal.ChecksumVerifier -import io.github.kdroidfilter.nucleus.updater.internal.FileSelector -import io.github.kdroidfilter.nucleus.updater.internal.PlatformInfo -import io.github.kdroidfilter.nucleus.updater.internal.PlatformInstaller -import io.github.kdroidfilter.nucleus.updater.internal.UpdateMarker -import io.github.kdroidfilter.nucleus.updater.internal.YamlParser +package dev.nucleusframework.nucleus.updater + +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.core.runtime.ExecutableType +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.updater.exception.ChecksumException +import dev.nucleusframework.nucleus.updater.exception.NetworkException +import dev.nucleusframework.nucleus.updater.exception.NoMatchingFileException +import dev.nucleusframework.nucleus.updater.exception.UpdateException +import dev.nucleusframework.nucleus.updater.internal.ChecksumVerifier +import dev.nucleusframework.nucleus.updater.internal.FileSelector +import dev.nucleusframework.nucleus.updater.internal.PlatformInfo +import dev.nucleusframework.nucleus.updater.internal.PlatformInstaller +import dev.nucleusframework.nucleus.updater.internal.UpdateMarker +import dev.nucleusframework.nucleus.updater.internal.YamlParser import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEvent.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateEvent.kt similarity index 85% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEvent.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateEvent.kt index 04c0b83ae..bb0d0ae1f 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEvent.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateEvent.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater /** * Represents a completed update detected at application startup. diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateInfo.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateInfo.kt similarity index 86% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateInfo.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateInfo.kt index cf9552a30..62f8f1090 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateInfo.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateInfo.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater data class UpdateInfo( val version: String, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateLevel.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateLevel.kt similarity index 62% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateLevel.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateLevel.kt index 884d45c91..2154e5e70 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateLevel.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateLevel.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater enum class UpdateLevel { MAJOR, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateResult.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateResult.kt similarity index 69% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateResult.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateResult.kt index 8a171f839..c08ad35dd 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateResult.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdateResult.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.updater.exception.UpdateException +import dev.nucleusframework.nucleus.updater.exception.UpdateException sealed class UpdateResult { data class Available( diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdaterConfig.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdaterConfig.kt similarity index 79% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdaterConfig.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdaterConfig.kt index 313f67793..6d9665b72 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/UpdaterConfig.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/UpdaterConfig.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.core.runtime.ExecutableRuntime -import io.github.kdroidfilter.nucleus.updater.provider.UpdateProvider +import dev.nucleusframework.nucleus.core.runtime.ExecutableRuntime +import dev.nucleusframework.nucleus.updater.provider.UpdateProvider import java.net.http.HttpClient class UpdaterConfig { @@ -18,7 +18,7 @@ class UpdaterConfig { /** * Custom HTTP client used for all update checks and downloads. * Defaults to a standard client with redirect following enabled. - * Override with [io.github.kdroidfilter.nucleus.nativehttp.NativeHttpClient.create] to + * Override with [dev.nucleusframework.nucleus.nativehttp.NativeHttpClient.create] to * trust enterprise or user-installed certificates. */ var httpClient: HttpClient? = null diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/Version.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/Version.kt similarity index 98% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/Version.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/Version.kt index b28153f92..07b80f3de 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/Version.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/Version.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater import kotlin.math.min diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/exception/UpdateException.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/exception/UpdateException.kt similarity index 91% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/exception/UpdateException.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/exception/UpdateException.kt index 7d49f6255..f891b23e8 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/exception/UpdateException.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/exception/UpdateException.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater.exception +package dev.nucleusframework.nucleus.updater.exception open class UpdateException( message: String, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/ChecksumVerifier.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/ChecksumVerifier.kt similarity index 93% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/ChecksumVerifier.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/ChecksumVerifier.kt index 96d1a947c..8d7a701d7 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/ChecksumVerifier.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/ChecksumVerifier.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal import java.io.File import java.security.MessageDigest diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/FileSelector.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/FileSelector.kt similarity index 96% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/FileSelector.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/FileSelector.kt index 21ae697be..7ca483d98 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/FileSelector.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/FileSelector.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform internal object FileSelector { // Formats that share .exe and need suffix-based matching in the filename. diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInfo.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInfo.kt similarity index 86% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInfo.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInfo.kt index 99eaf41f3..b2c032129 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInfo.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInfo.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform internal enum class Arch { X64, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInstaller.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInstaller.kt similarity index 98% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInstaller.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInstaller.kt index 5855b44da..67e59b35e 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/PlatformInstaller.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/PlatformInstaller.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform import java.io.File import kotlin.system.exitProcess diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/UpdateMarker.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/UpdateMarker.kt similarity index 95% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/UpdateMarker.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/UpdateMarker.kt index c315aa4e0..33f554149 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/UpdateMarker.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/UpdateMarker.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal -import io.github.kdroidfilter.nucleus.core.runtime.NucleusApp +import dev.nucleusframework.nucleus.core.runtime.NucleusApp import java.io.File /** diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/YamlParser.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/YamlParser.kt similarity index 96% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/YamlParser.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/YamlParser.kt index b86bfee3f..a60cc12b4 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/internal/YamlParser.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/internal/YamlParser.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.internal +package dev.nucleusframework.nucleus.updater.internal -import io.github.kdroidfilter.nucleus.updater.exception.ParseException +import dev.nucleusframework.nucleus.updater.exception.ParseException internal data class YamlMetadata( val version: String, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GenericProvider.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GenericProvider.kt similarity index 87% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GenericProvider.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GenericProvider.kt index 469782f88..6173100b1 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GenericProvider.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GenericProvider.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.provider +package dev.nucleusframework.nucleus.updater.provider -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform class GenericProvider( val baseUrl: String, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GitHubProvider.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GitHubProvider.kt similarity index 90% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GitHubProvider.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GitHubProvider.kt index 40df89916..14d686745 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/GitHubProvider.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/GitHubProvider.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.provider +package dev.nucleusframework.nucleus.updater.provider -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform class GitHubProvider( val owner: String, diff --git a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/UpdateProvider.kt b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/UpdateProvider.kt similarity index 70% rename from updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/UpdateProvider.kt rename to updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/UpdateProvider.kt index 23057bc42..0bf4f0f15 100644 --- a/updater-runtime/src/main/kotlin/io/github/kdroidfilter/nucleus/updater/provider/UpdateProvider.kt +++ b/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/provider/UpdateProvider.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater.provider +package dev.nucleusframework.nucleus.updater.provider -import io.github.kdroidfilter.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.core.runtime.Platform interface UpdateProvider { fun getUpdateMetadataUrl( diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/ChecksumVerifierTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/ChecksumVerifierTest.kt similarity index 94% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/ChecksumVerifierTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/ChecksumVerifierTest.kt index 7b197b116..c3c340284 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/ChecksumVerifierTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/ChecksumVerifierTest.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.updater.internal.ChecksumVerifier +import dev.nucleusframework.nucleus.updater.internal.ChecksumVerifier import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FakeUpdateProvider.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FakeUpdateProvider.kt similarity index 66% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FakeUpdateProvider.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FakeUpdateProvider.kt index 3ab00d30b..a0faaef61 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FakeUpdateProvider.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FakeUpdateProvider.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.updater.provider.UpdateProvider +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.updater.provider.UpdateProvider class FakeUpdateProvider : UpdateProvider { override fun getUpdateMetadataUrl( diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FileSelectorTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FileSelectorTest.kt similarity index 94% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FileSelectorTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FileSelectorTest.kt index 2bad6d70d..fb8883008 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/FileSelectorTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/FileSelectorTest.kt @@ -1,9 +1,9 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.core.runtime.Platform -import io.github.kdroidfilter.nucleus.updater.internal.Arch -import io.github.kdroidfilter.nucleus.updater.internal.FileSelector -import io.github.kdroidfilter.nucleus.updater.internal.YamlFileEntry +import dev.nucleusframework.nucleus.core.runtime.Platform +import dev.nucleusframework.nucleus.updater.internal.Arch +import dev.nucleusframework.nucleus.updater.internal.FileSelector +import dev.nucleusframework.nucleus.updater.internal.YamlFileEntry import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEventTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateEventTest.kt similarity index 95% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEventTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateEventTest.kt index 8b5ce85d8..8aea008c8 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateEventTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateEventTest.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.updater.internal.UpdateMarker +import dev.nucleusframework.nucleus.updater.internal.UpdateMarker import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateMarkerTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateMarkerTest.kt similarity index 94% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateMarkerTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateMarkerTest.kt index 26a35364f..736c96657 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/UpdateMarkerTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/UpdateMarkerTest.kt @@ -1,6 +1,6 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.updater.internal.UpdateMarker +import dev.nucleusframework.nucleus.updater.internal.UpdateMarker import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/VersionTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/VersionTest.kt similarity index 98% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/VersionTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/VersionTest.kt index 3d0dda598..585e84c48 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/VersionTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/VersionTest.kt @@ -1,4 +1,4 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue diff --git a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/YamlParserTest.kt b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/YamlParserTest.kt similarity index 95% rename from updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/YamlParserTest.kt rename to updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/YamlParserTest.kt index 73580519e..b73840f12 100644 --- a/updater-runtime/src/test/kotlin/io/github/kdroidfilter/nucleus/updater/YamlParserTest.kt +++ b/updater-runtime/src/test/kotlin/dev/nucleusframework/nucleus/updater/YamlParserTest.kt @@ -1,7 +1,7 @@ -package io.github.kdroidfilter.nucleus.updater +package dev.nucleusframework.nucleus.updater -import io.github.kdroidfilter.nucleus.updater.exception.ParseException -import io.github.kdroidfilter.nucleus.updater.internal.YamlParser +import dev.nucleusframework.nucleus.updater.exception.ParseException +import dev.nucleusframework.nucleus.updater.internal.YamlParser import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test From 670027d8e3d35876e3bf69dcb9c2b38d6f9dc8ee Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 14:21:30 +0300 Subject: [PATCH 02/30] Fix unstaged deleted files --- .../application/internal/JdkVersionProbe.java | 45 - .../nucleus/ExperimentalNucleusLibrary.kt | 8 - .../kdroidfilter/nucleus/NucleusExtension.kt | 46 - .../kdroidfilter/nucleus/NucleusPlugin.kt | 339 ---- .../application/dsl/AbstractDistributions.kt | 43 - .../application/dsl/AppImageCategory.kt | 23 - .../application/dsl/AppImageSettings.kt | 21 - .../desktop/application/dsl/AppXSettings.kt | 80 - .../application/dsl/CompressionLevel.kt | 15 - .../desktop/application/dsl/DmgSettings.kt | 124 -- .../application/dsl/FileAssociation.kt | 12 - .../application/dsl/FlatpakSettings.kt | 40 - .../application/dsl/GraalvmSettings.kt | 81 - .../desktop/application/dsl/JvmApplication.kt | 49 - .../dsl/JvmApplicationBuildTypes.kt | 53 - .../dsl/JvmApplicationDistributions.kt | 134 -- .../application/dsl/LaunchAgentSettings.kt | 146 -- .../dsl/MacOSNotarizationSettings.kt | 108 -- .../application/dsl/MacOSSigningSettings.kt | 55 - .../application/dsl/NativeApplication.kt | 58 - .../dsl/NativeApplicationDistributions.kt | 31 - .../desktop/application/dsl/NsisSettings.kt | 66 - .../application/dsl/PlatformSettings.kt | 219 --- .../application/dsl/ProguardSettings.kt | 29 - .../desktop/application/dsl/PublishMode.kt | 20 - .../application/dsl/PublishSettings.kt | 90 - .../desktop/application/dsl/ReleaseChannel.kt | 15 - .../desktop/application/dsl/ReleaseType.kt | 15 - .../application/dsl/SigningAlgorithm.kt | 15 - .../application/dsl/SnapCompression.kt | 14 - .../application/dsl/SnapConfinement.kt | 15 - .../desktop/application/dsl/SnapGrade.kt | 14 - .../desktop/application/dsl/SnapPlug.kt | 27 - .../desktop/application/dsl/SnapSettings.kt | 43 - .../desktop/application/dsl/TargetFormat.kt | 98 -- .../application/dsl/WindowsSigningSettings.kt | 57 - .../internal/AnalyzeStaticMetadataTask.kt | 155 -- .../internal/CleanNativeLibsTransform.kt | 231 --- .../internal/CleanupGraalvmMetadataTask.kt | 562 ------ .../internal/DmgBackgroundPadding.kt | 75 - .../application/internal/ExecutableType.kt | 141 -- .../internal/ExternalToolRunner.kt | 118 -- .../internal/FilterLibraryMetadataTask.kt | 136 -- .../application/internal/InfoPlistBuilder.kt | 176 -- .../internal/JvmApplicationContext.kt | 108 -- .../internal/JvmApplicationData.kt | 45 - .../internal/JvmApplicationInternal.kt | 91 - .../internal/JvmApplicationRuntimeFiles.kt | 82 - .../internal/JvmRuntimeProperties.kt | 38 - .../desktop/application/internal/JvmTasks.kt | 52 - .../internal/LaunchAgentPlistGenerator.kt | 107 -- .../application/internal/MacAssetsTool.kt | 123 -- .../application/internal/MacOsMachOPatcher.kt | 60 - .../desktop/application/internal/MacSigner.kt | 171 -- .../application/internal/MacSigningHelper.kt | 38 - .../application/internal/MultiOutputStream.kt | 34 - .../internal/NativeLibArchDetector.kt | 236 --- .../internal/NotarizationRequestInfo.kt | 41 - .../internal/NucleusProjectProperties.kt | 90 - .../internal/NucleusSystemProperties.kt | 12 - .../internal/PatchedJavaLauncher.kt | 66 - .../ResolveReachabilityMetadataTask.kt | 167 -- .../internal/RuntimeCompressionLevel.kt | 16 - .../internal/UpdateYmlGenerator.kt | 96 -- .../internal/WindowsKitsLocator.kt | 72 - .../internal/analyzer/AnalysisReport.kt | 101 -- .../internal/analyzer/AnalysisResult.kt | 97 -- .../internal/analyzer/BytecodeAnalyzer.kt | 320 ---- .../internal/analyzer/OracleRepoParser.kt | 212 --- .../internal/analyzer/ResultComparator.kt | 165 -- .../detectors/ClassForNameDetector.kt | 233 --- .../analyzer/detectors/JarResourceDetector.kt | 86 - .../detectors/KotlinSerializableDetector.kt | 124 -- .../detectors/MethodHandleDetector.kt | 200 --- .../detectors/NativeMethodDetector.kt | 200 --- .../analyzer/detectors/ProxyDetector.kt | 66 - .../detectors/ReflectionApiDetector.kt | 224 --- .../detectors/ResourceAccessDetector.kt | 133 -- .../detectors/ResourceBundleDetector.kt | 113 -- .../detectors/ServiceLoaderDetector.kt | 58 - .../application/internal/cliArgUtils.kt | 47 - .../application/internal/configureDesktop.kt | 111 -- .../internal/configureGraalvmApplication.kt | 1516 ----------------- .../internal/configureJvmApplication.kt | 1170 ------------- .../internal/configureNativeApplication.kt | 165 -- .../application/internal/dirLayoutUtils.kt | 27 - .../ElectronBuilderConfigGenerator.kt | 717 -------- .../ElectronBuilderToolManager.kt | 169 -- .../electronbuilder/NodeJsDetector.kt | 116 -- .../internal/files/FileCopyingProcessor.kt | 15 - .../files/MacJarSignFileCopyingProcessor.kt | 91 - .../files/SimpleFileCopyingProcessor.kt | 17 - .../application/internal/files/fileUtils.kt | 124 -- .../internal/mergeNativeImageConfig.kt | 616 ------- .../application/internal/packageVersions.kt | 69 - .../internal/resolveMetadataRepository.kt | 177 -- .../ValidatedMacOSNotarizationSettings.kt | 168 -- .../ValidatedMacOSSigningSettings.kt | 109 -- .../internal/validation/validateBundleID.kt | 28 - .../validation/validatePackageVersions.kt | 206 --- .../AbstractCheckNativeDistributionRuntime.kt | 146 -- .../AbstractElectronBuilderPackageTask.kt | 1464 ---------------- .../tasks/AbstractExtractNativeLibsTask.kt | 197 --- .../tasks/AbstractGenerateAotCacheTask.kt | 477 ------ .../AbstractGenerateAppPropertiesTask.kt | 68 - .../application/tasks/AbstractJLinkTask.kt | 76 - .../application/tasks/AbstractJPackageTask.kt | 910 ---------- .../tasks/AbstractJvmToolOperationTask.kt | 90 - ...ctNativeMacApplicationPackageAppDirTask.kt | 143 -- ...tractNativeMacApplicationPackageDmgTask.kt | 350 ---- ...AbstractNativeMacApplicationPackageTask.kt | 50 - .../tasks/AbstractPatchCaCertificatesTask.kt | 169 -- .../tasks/AbstractPatchMacJvmTask.kt | 113 -- .../application/tasks/AbstractProguardTask.kt | 187 -- .../application/tasks/AbstractRunAppXTask.kt | 138 -- .../tasks/AbstractRunDistributableTask.kt | 71 - .../AbstractStripNativeLibsFromJarsTask.kt | 152 -- .../tasks/AbstractSuggestModulesTask.kt | 88 - .../desktop/tasks/AbstractJarsFlattenTask.kt | 123 -- .../desktop/tasks/AbstractNucleusTask.kt | 58 - ...ctUnpackDefaultApplicationResourcesTask.kt | 91 - .../internal/checkExperimentalTargets.kt | 101 -- .../ComposeCompilerArtifactProvider.kt | 75 - .../nucleus/internal/IdeaImportTask.kt | 35 - .../kdroidfilter/nucleus/internal/Version.kt | 61 - .../nucleus/internal/constants.kt | 14 - .../nucleus/internal/projectExtensions.kt | 35 - .../nucleus/internal/requiredDslProperty.kt | 29 - .../nucleus/internal/utils/diagnosticUtils.kt | 16 - .../nucleus/internal/utils/fileUtils.kt | 69 - .../nucleus/internal/utils/gradleUtils.kt | 74 - .../nucleus/internal/utils/osUtils.kt | 139 -- .../nucleus/internal/utils/providerUtils.kt | 45 - .../nucleus/internal/utils/stringUtils.kt | 49 - .../nucleus/internal/utils/taskUtils.kt | 35 - 135 files changed, 19515 deletions(-) delete mode 100644 plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt delete mode 100644 plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt diff --git a/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java b/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java deleted file mode 100644 index 3e3f785db..000000000 --- a/plugin-build/plugin/src/main/java/io/github/kdroidfilter/nucleus/desktop/application/internal/JdkVersionProbe.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ -package dev.nucleusframework.nucleus.desktop.application.internal; - -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Properties; - -public class JdkVersionProbe { - public final static String JDK_MAJOR_VERSION_KEY = "jdk.major.version"; - public final static String JDK_VENDOR_KEY = "jdk.vendor"; - - public static void main(String[] args) throws IOException { - Properties properties = new Properties(); - properties.setProperty(JDK_MAJOR_VERSION_KEY, getJDKMajorVersion()); - properties.setProperty(JDK_VENDOR_KEY, System.getProperty("java.vendor")); - properties.storeToXML(System.out, null); - } - - private static String getJDKMajorVersion() { - Class runtimeClass = Runtime.class; - try { - Method version = runtimeClass.getMethod("version"); - Object runtimeVer = version.invoke(runtimeClass); - Class runtimeVerClass = runtimeVer.getClass(); - try { - int feature = (int) runtimeVerClass.getMethod("feature").invoke(runtimeVer); - return (Integer.valueOf(feature)).toString(); - } catch (NoSuchMethodException e) { - int major = (int) runtimeVerClass.getMethod("major").invoke(runtimeVer); - return (Integer.valueOf(major)).toString(); - } - } catch (Exception e) { - String javaVersion = System.getProperty("java.version"); - String[] parts = javaVersion.split("\\."); - if (parts.length > 2 && "1".equalsIgnoreCase(parts[0])) { - return parts[1]; - } else { - throw new IllegalStateException("Could not determine JDK version from string: '" + javaVersion + "'"); - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt deleted file mode 100644 index c32fadf3c..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/ExperimentalNucleusLibrary.kt +++ /dev/null @@ -1,8 +0,0 @@ -package dev.nucleusframework.nucleus - -// We write explicitly about OptIn, because IDEA doesn't suggest it. -@RequiresOptIn( - "This library is experimental and can be unstable. " + - "Add @OptIn(dev.nucleusframework.nucleus.ExperimentalNucleusLibrary::class) annotation.", -) -annotation class ExperimentalNucleusLibrary diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt deleted file mode 100644 index 0839bf8c3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusExtension.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus - -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication -import dev.nucleusframework.nucleus.desktop.application.dsl.NativeApplication -import dev.nucleusframework.nucleus.desktop.application.internal.JvmApplicationInternal -import org.gradle.api.Action -import org.gradle.api.Project -import org.gradle.api.model.ObjectFactory -import org.gradle.api.plugins.ExtensionAware -import javax.inject.Inject - -abstract class NucleusExtension - @Inject - constructor( - project: Project, - private val objectFactory: ObjectFactory, - ) : ExtensionAware { - val dependencies = NucleusPlugin.Dependencies(project) - - internal var isJvmApplicationInitialized = false - private set - val application: JvmApplication by lazy { - isJvmApplicationInitialized = true - objectFactory.newInstance(JvmApplicationInternal::class.java, "main") - } - - fun application(fn: Action) { - fn.execute(application) - } - - internal var isNativeApplicationInitialized = false - private set - val nativeApplication: NativeApplication by lazy { - isNativeApplicationInitialized = true - objectFactory.newInstance(NativeApplication::class.java, "main") - } - - fun nativeApplication(fn: Action) { - fn.execute(nativeApplication) - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt deleted file mode 100644 index 12a11f358..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/NucleusPlugin.kt +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -@file:Suppress("unused") - -package dev.nucleusframework.nucleus - -import groovy.lang.Closure -import dev.nucleusframework.nucleus.desktop.application.internal.configureDesktop -import dev.nucleusframework.nucleus.experimental.internal.configureExperimentalTargetsFlagsCheck -import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import dev.nucleusframework.nucleus.internal.mppExt -import dev.nucleusframework.nucleus.internal.utils.currentTarget -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.artifacts.dsl.DependencyHandler -import org.gradle.api.artifacts.dsl.RepositoryHandler -import org.gradle.api.artifacts.repositories.MavenArtifactRepository -import org.gradle.api.plugins.ExtensionAware -import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler - -internal val composeVersion get() = NucleusBuildConfig.composeVersion -internal val composeMaterial3Version get() = NucleusBuildConfig.composeMaterial3Version - -@Suppress("AbstractClassCanBeConcreteClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class NucleusPlugin : Plugin { - override fun apply(project: Project) { - val nucleusExtension = project.extensions.create("nucleus", NucleusExtension::class.java, project) - - if ((project.dependencies as? ExtensionAware)?.extensions?.findByName("nucleus") == null) { - project.dependencies.extensions.add("nucleus", Dependencies(project)) - } - - if (!project.buildFile.endsWith(".gradle.kts")) { - setUpGroovyDslExtensions(project) - } - - project.afterEvaluate { - configureDesktop(project, nucleusExtension) - project.plugins.withId(KOTLIN_MPP_PLUGIN_ID) { - val mppExt = project.mppExt - project.configureExperimentalTargetsFlagsCheck(mppExt) - } - } - } - - @Suppress("DEPRECATION") - class Dependencies( - project: Project, - ) { - val desktop = DesktopDependencies - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.animation:animation:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val animation get() = composeDependency("org.jetbrains.compose.animation:animation") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.animation:animation-graphics:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val animationGraphics get() = composeDependency("org.jetbrains.compose.animation:animation-graphics") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.foundation:foundation:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val foundation get() = composeDependency("org.jetbrains.compose.foundation:foundation") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.material:material:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val material get() = composeDependency("org.jetbrains.compose.material:material") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.material3:material3:\${NucleusBuildConfig.composeMaterial3Version}\"", - ), - ) - val material3 get() = composeMaterial3Dependency("org.jetbrains.compose.material3:material3") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.material3:material3-adaptive-navigation-suite:" + - "\${NucleusBuildConfig.composeMaterial3Version}\"", - ), - ) - val material3AdaptiveNavigationSuite get() = - composeMaterial3Dependency( - "org.jetbrains.compose.material3:material3-adaptive-navigation-suite", - ) - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.runtime:runtime:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val runtime get() = composeDependency("org.jetbrains.compose.runtime:runtime") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.runtime:runtime-saveable:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val runtimeSaveable get() = composeDependency("org.jetbrains.compose.runtime:runtime-saveable") - - @Deprecated( - "Specify dependency directly", - replaceWith = ReplaceWith("\"org.jetbrains.compose.ui:ui:\${NucleusBuildConfig.composeVersion}\""), - ) - val ui get() = composeDependency("org.jetbrains.compose.ui:ui") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.ui:ui-test:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - @ExperimentalNucleusLibrary - val uiTest get() = composeDependency("org.jetbrains.compose.ui:ui-test") - - @Deprecated( - "Use org.jetbrains.compose.ui:ui-tooling module instead", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.ui:ui-tooling:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val uiTooling get() = composeDependency("org.jetbrains.compose.ui:ui-tooling") - - @Deprecated( - "Specify dependency directly", - replaceWith = ReplaceWith("\"org.jetbrains.compose.ui:ui-util:\${NucleusBuildConfig.composeVersion}\""), - ) - val uiUtil get() = composeDependency("org.jetbrains.compose.ui:ui-util") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.ui:ui-tooling-preview:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val preview get() = composeDependency("org.jetbrains.compose.ui:ui-tooling-preview") - - @Deprecated( - "This artifact is pinned to version 1.7.3 and will not receive updates. " + - "Either use this version explicitly or migrate to Material Symbols (vector resources). " + - "See https://kotlinlang.org/docs/multiplatform/whats-new-compose-180.html", - replaceWith = ReplaceWith("\"org.jetbrains.compose.material:material-icons-extended:1.7.3\""), - ) - val materialIconsExtended get() = "org.jetbrains.compose.material:material-icons-extended:1.7.3" - - @Deprecated("Specify dependency directly") - val components get() = CommonComponentsDependencies - } - - @Deprecated("Specify dependency directly") - object DesktopDependencies { - @Deprecated("Specify dependency directly") - val components = DesktopComponentsDependencies - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val common = composeDependency("org.jetbrains.compose.desktop:desktop") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-linux-x64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val linux_x64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-linux-x64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-linux-arm64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val linux_arm64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-linux-arm64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-windows-x64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val windows_x64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-windows-x64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-windows-arm64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val windows_arm64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-windows-arm64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-macos-x64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val macos_x64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-macos-x64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.desktop:desktop-jvm-macos-arm64:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val macos_arm64 = composeDependency("org.jetbrains.compose.desktop:desktop-jvm-macos-arm64") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.ui:ui-test-junit4:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val uiTestJUnit4 get() = composeDependency("org.jetbrains.compose.ui:ui-test-junit4") - - val currentOs by lazy { - composeDependency("org.jetbrains.compose.desktop:desktop-jvm-${currentTarget.id}") - } - } - - @Deprecated("Specify dependency directly") - object CommonComponentsDependencies { - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.components:components-resources:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val resources = composeDependency("org.jetbrains.compose.components:components-resources") - - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.ui:ui-tooling-preview:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - val uiToolingPreview = composeDependency("org.jetbrains.compose.components:components-ui-tooling-preview") - } - - object DesktopComponentsDependencies { - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.components:components-splitpane:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - @ExperimentalNucleusLibrary - val splitPane = composeDependency("org.jetbrains.compose.components:components-splitpane") - - @Suppress("MaxLineLength") - @Deprecated( - "Specify dependency directly", - replaceWith = - ReplaceWith( - "\"org.jetbrains.compose.components:components-animatedimage:\${NucleusBuildConfig.composeVersion}\"", - ), - ) - @ExperimentalNucleusLibrary - val animatedImage = composeDependency("org.jetbrains.compose.components:components-animatedimage") - } -} - -fun RepositoryHandler.jetbrainsCompose(): MavenArtifactRepository = - maven { repo -> repo.setUrl("https://packages.jetbrains.team/maven/p/cmp/dev") } - -fun KotlinDependencyHandler.compose(groupWithArtifact: String) = composeDependency(groupWithArtifact) - -fun DependencyHandler.compose(groupWithArtifact: String) = composeDependency(groupWithArtifact) - -private fun composeDependency(groupWithArtifact: String) = "$groupWithArtifact:$composeVersion" - -private fun composeMaterial3Dependency(groupWithArtifact: String) = "$groupWithArtifact:$composeMaterial3Version" - -private fun setUpGroovyDslExtensions(project: Project) { - project.plugins.withId("org.jetbrains.kotlin.multiplatform") { - (project.extensions.getByName("kotlin") as? ExtensionAware)?.apply { - if (extensions.findByName("nucleus") == null) { - extensions.add("nucleus", NucleusPlugin.Dependencies(project)) - } - } - } - (project.repositories as? ExtensionAware)?.extensions?.apply { - if (findByName("jetbrainsCompose") == null) { - add( - "jetbrainsCompose", - object : Closure(project.repositories) { - fun doCall(): MavenArtifactRepository = project.repositories.jetbrainsCompose() - }, - ) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt deleted file mode 100644 index a8ede8296..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AbstractDistributions.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.ProjectLayout -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import java.util.* -import javax.inject.Inject - -abstract class AbstractDistributions { - @get:Inject - internal abstract val objects: ObjectFactory - - @get:Inject - internal abstract val layout: ProjectLayout - - val outputBaseDir: DirectoryProperty = - objects.directoryProperty().apply { - set(layout.buildDirectory.dir("compose/binaries")) - } - - var appName: String? = null - var packageName: String? = null - var packageVersion: String? = null - var copyright: String? = null - - var description: String? = null - var vendor: String? = null - var homepage: String? = null - val appResourcesRootDir: DirectoryProperty = objects.directoryProperty() - val licenseFile: RegularFileProperty = objects.fileProperty() - - var targetFormats: Set = EnumSet.noneOf(TargetFormat::class.java) - - open fun targetFormats(vararg formats: TargetFormat) { - targetFormats = EnumSet.copyOf(formats.toList()) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt deleted file mode 100644 index b64052fe2..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageCategory.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** FreeDesktop.org main application categories for .desktop files. */ -enum class AppImageCategory( - internal val id: String, -) { - AudioVideo("AudioVideo"), - Development("Development"), - Education("Education"), - Game("Game"), - Graphics("Graphics"), - Network("Network"), - Office("Office"), - Science("Science"), - Settings("Settings"), - System("System"), - Utility("Utility"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt deleted file mode 100644 index b7ceeae3a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppImageSettings.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -@Suppress("AbstractClassCanBeConcreteClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class AppImageSettings { - /** Desktop file category. */ - var category: AppImageCategory? = null - - /** Desktop file generic name */ - var genericName: String? = null - - /** Synopsis (short description for .desktop) */ - var synopsis: String? = null - - /** Additional desktop file entries (key=value) */ - var desktopEntries: Map = emptyMap() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt deleted file mode 100644 index 769cf66e2..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/AppXSettings.kt +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -@Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class AppXSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** Application user model ID */ - var applicationId: String? = null - - /** Publisher display name */ - var publisherDisplayName: String? = null - - /** Display name for the Windows Store */ - var displayName: String? = null - - /** Publisher identity (e.g., "CN=MyCompany") */ - var publisher: String? = null - - /** Identity name (e.g., "MyCompany.MyApp") */ - var identityName: String? = null - - /** Languages supported (e.g., "en-US") */ - var languages: List? = null - - /** Add auto-launch on startup capability. Default: false */ - var addAutoLaunchExtension: Boolean = false - - /** - * StartupTask TaskId used by the auto-launch extension. Exposed at runtime via - * `NucleusApp.startupTaskId` so `AutoLaunch` can address the correct task. - * - * Default when [addAutoLaunchExtension] is `true`: `"SlackStartup"` — this is the - * value electron-builder hardcodes in the generated manifest (legacy leftover from - * its Slack origins). **Overriding this property alone does NOT change the manifest** — - * it only changes the TaskId the runtime looks up, which would cause MSIX - * `StartupTask.GetAsync` to fail. Only override if you are also post-processing - * the generated `AppxManifest.xml` to match. - */ - var startupTaskId: String? = null - - /** Background color of the app tile (e.g. "#464646"). Default: null */ - var backgroundColor: String? = null - - /** Whether to overlay the app name on tile images. Default: false */ - var showNameOnTiles: Boolean = false - - /** Whether to set the build number. Default: false */ - var setBuildNumber: Boolean = false - - /** MinVersion for the manifest (e.g. "10.0.14316.0"). Default: null */ - var minVersion: String? = null - - /** MaxVersionTested for the manifest (e.g. "10.0.16299.0"). Default: null */ - var maxVersionTested: String? = null - - /** AppX capabilities (e.g. "runFullTrust"). Default: null */ - var capabilities: List? = null - - /** Store tile logo (mapped as `StoreLogo.png`) */ - val storeLogo: RegularFileProperty = objects.fileProperty() - - /** Small tile logo (mapped as `Square44x44Logo.png`) */ - val square44x44Logo: RegularFileProperty = objects.fileProperty() - - /** Medium tile logo (mapped as `Square150x150Logo.png`) */ - val square150x150Logo: RegularFileProperty = objects.fileProperty() - - /** Wide tile logo (mapped as `Wide310x150Logo.png`) */ - val wide310x150Logo: RegularFileProperty = objects.fileProperty() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt deleted file mode 100644 index eecb6f51a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/CompressionLevel.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Archive compression level for electron-builder output. */ -enum class CompressionLevel( - internal val id: String, -) { - Store("store"), - Normal("normal"), - Maximum("maximum"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt deleted file mode 100644 index fe5e90922..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/DmgSettings.kt +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -@Suppress("AbstractClassCanBeConcreteClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class DmgSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** Background image for the DMG window (.tiff or .png) */ - val background: RegularFileProperty = objects.fileProperty() - - /** Background color as CSS color (e.g. "#ffffff"). Overridden by [background] if set. */ - var backgroundColor: String? = null - - /** Badge icon shown when the DMG is mounted */ - val badgeIcon: RegularFileProperty = objects.fileProperty() - - /** Volume icon (.icns) */ - val icon: RegularFileProperty = objects.fileProperty() - - /** Icon size in pixels. Default: null (electron-builder uses 80) */ - var iconSize: Int? = null - - /** Icon text size in pixels. Default: null (electron-builder uses 12) */ - var iconTextSize: Int? = null - - /** Volume name. Supports ${productName} and ${version} placeholders. */ - var title: String? = null - - /** DMG image format. Default: null (electron-builder uses UDZO) */ - var format: DmgFormat? = null - - /** DMG image size (e.g. "150m", "4g"). Default: null (auto-sized) */ - var size: String? = null - - /** Whether to shrink the DMG image. Default: null (electron-builder uses true) */ - var shrink: Boolean? = null - - /** Sign the DMG image. Default: false */ - var sign: Boolean = false - - val window: DmgWindowSettings = objects.newInstance(DmgWindowSettings::class.java) - - fun window(fn: Action) { - fn.execute(window) - } - - internal val contents: MutableList = mutableListOf() - - /** Add a content entry (icon position) to the DMG layout. */ - fun content( - x: Int, - y: Int, - type: DmgContentType? = null, - name: String? = null, - path: String? = null, - ) { - contents.add(DmgContentEntry(x = x, y = y, type = type, name = name, path = path)) - } -} - -/** DMG image format passed to hdiutil / electron-builder. */ -enum class DmgFormat( - val id: String, -) { - /** UDIF read/write image */ - UDRW("UDRW"), - - /** UDIF read-only image */ - UDRO("UDRO"), - - /** UDIF ADC-compressed image */ - UDCO("UDCO"), - - /** UDIF zlib-compressed image */ - UDZO("UDZO"), - - /** UDIF bzip2-compressed image */ - UDBZ("UDBZ"), - - /** UDIF lzfse-compressed image */ - ULFO("ULFO"), -} - -@Suppress("AbstractClassCanBeConcreteClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class DmgWindowSettings { - /** Window x position. Default: null (electron-builder uses 400) */ - var x: Int? = null - - /** Window y position. Default: null (electron-builder uses 100) */ - var y: Int? = null - - /** Window width. Default: null (electron-builder uses 540) */ - var width: Int? = null - - /** Window height. Default: null (electron-builder uses 380) */ - var height: Int? = null -} - -data class DmgContentEntry( - val x: Int, - val y: Int, - val type: DmgContentType? = null, - val name: String? = null, - val path: String? = null, -) - -/** Type of content entry in DMG layout. */ -enum class DmgContentType( - val id: String, -) { - Link("link"), - File("file"), - Dir("dir"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt deleted file mode 100644 index 68634c834..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FileAssociation.kt +++ /dev/null @@ -1,12 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.dsl - -import java.io.File -import java.io.Serializable - -@Suppress("SerialVersionUIDInSerializableClass") // Gradle plugin data class, serialVersionUID not needed -internal data class FileAssociation( - val mimeType: String, - val extension: String, - val description: String, - val iconFile: File?, -) : Serializable diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt deleted file mode 100644 index f7d14f807..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/FlatpakSettings.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -abstract class FlatpakSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** Freedesktop runtime. Default: "org.freedesktop.Platform" */ - var runtime: String = "org.freedesktop.Platform" - - /** Runtime version. Default: "23.08" */ - var runtimeVersion: String = "23.08" - - /** SDK. Default: "org.freedesktop.Sdk" */ - var sdk: String = "org.freedesktop.Sdk" - - /** Branch name. Default: "master" */ - var branch: String = "master" - - /** finish-args for sandboxing */ - var finishArgs: List = - listOf( - "--share=ipc", - "--socket=x11", - "--socket=wayland", - "--socket=pulseaudio", - "--device=dri", - ) - - /** License file */ - val license: RegularFileProperty = objects.fileProperty() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt deleted file mode 100644 index d04169bf7..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/GraalvmSettings.kt +++ /dev/null @@ -1,81 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.internal.utils.new -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.Action -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.MapProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.SetProperty -import org.gradle.jvm.toolchain.JvmVendorSpec -import javax.inject.Inject - -abstract class GraalvmSettings - @Inject - constructor( - objects: ObjectFactory, - ) { - val isEnabled: Property = objects.notNullProperty(false) - - @Suppress("MagicNumber") - val javaLanguageVersion: Property = objects.notNullProperty(25) - val jvmVendor: Property = objects.nullableProperty() - val imageName: Property = objects.nullableProperty() - val march: Property = objects.notNullProperty("native") - val buildArgs: ListProperty = objects.listProperty(String::class.java) - val nativeImageConfigBaseDir: DirectoryProperty = objects.directoryProperty() - val macOS: GraalvmMacOSSettings = objects.new() - val metadataRepository: MetadataRepositorySettings = objects.new() - - fun macOS(fn: Action) { - fn.execute(macOS) - } - - fun metadataRepository(fn: Action) { - fn.execute(metadataRepository) - } - } - -abstract class GraalvmMacOSSettings - @Inject - constructor( - objects: ObjectFactory, - ) { - val cStubsSrc: RegularFileProperty = objects.fileProperty() - val minimumSystemVersion: Property = objects.notNullProperty("12.0") - val macOsSdkVersion: Property = objects.notNullProperty("26.0") - } - -/** - * Settings for the Oracle GraalVM Reachability Metadata Repository. - * When enabled, metadata from the repository is automatically resolved - * for runtime classpath dependencies and passed to native-image. - * - * @see oracle/graalvm-reachability-metadata - */ -abstract class MetadataRepositorySettings - @Inject - constructor( - objects: ObjectFactory, - ) { - /** Whether to use the Oracle metadata repository. Defaults to true. */ - val enabled: Property = objects.notNullProperty(true) - - /** Version of the metadata repository artifact. */ - val version: Property = objects.notNullProperty("0.10.6") - - /** Module coordinates (group:artifact) to exclude from repository resolution. */ - val excludedModules: SetProperty = - objects.setProperty(String::class.java) - - /** - * Override the metadata version used for specific modules. - * Key: "group:artifact", value: metadata directory version in the repository. - */ - val moduleToConfigVersion: MapProperty = - objects.mapProperty(String::class.java, String::class.java) - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt deleted file mode 100644 index 1dc4d5512..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplication.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.Task -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.tasks.SourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget - -abstract class JvmApplication { - abstract fun from(from: SourceSet) - - abstract fun from(from: KotlinTarget) - - abstract fun disableDefaultConfiguration() - - abstract fun dependsOn(vararg tasks: Task) - - abstract fun dependsOn(vararg tasks: String) - - abstract fun fromFiles(vararg files: Any) - - abstract var mainClass: String? - abstract val mainJar: RegularFileProperty - abstract var javaHome: String - abstract val args: MutableList - - abstract fun args(vararg args: String) - - abstract val jvmArgs: MutableList - - abstract fun jvmArgs(vararg jvmArgs: String) - - abstract val nativeDistributions: JvmApplicationDistributions - - abstract fun nativeDistributions(fn: Action) - - abstract val buildTypes: JvmApplicationBuildTypes - - abstract fun buildTypes(fn: Action) - - abstract val graalvm: GraalvmSettings - - abstract fun graalvm(fn: Action) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt deleted file mode 100644 index 1739d5d1e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationBuildTypes.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.internal.utils.new -import org.gradle.api.Action -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -abstract class JvmApplicationBuildTypes - @Inject - constructor( - objects: ObjectFactory, - ) { - /** - * The default build type does not have a classifier - * to preserve compatibility with tasks, existing before - * the introduction of the release build type, - * e.g. we don't want to break existing packageDmg, - * createDistributable tasks after the introduction - * of packageReleaseDmg and createReleaseDistributable tasks. - */ - internal val default: JvmApplicationBuildType = objects.new("") - - val release: JvmApplicationBuildType = - objects.new("release").apply { - proguard.isEnabled.set(true) - } - - fun release(fn: Action) { - fn.execute(release) - } - } - -abstract class JvmApplicationBuildType - @Inject - constructor( - /** - * A classifier distinguishes tasks and directories of one build type from another. - * E.g. `release` build type produces packageReleaseDmg task. - */ - internal val classifier: String, - objects: ObjectFactory, - ) { - val proguard: ProguardSettings = objects.new() - - fun proguard(fn: Action) { - fn.execute(proguard) - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt deleted file mode 100644 index d6e5e2f79..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/JvmApplicationDistributions.kt +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.file.ConfigurableFileCollection -import java.io.File -import java.io.Serializable - -internal val DEFAULT_RUNTIME_MODULES = - arrayOf( - "java.base", - "java.desktop", - "java.logging", - "java.net.http", - "jdk.accessibility", - "jdk.crypto.ec", - ) - -abstract class JvmApplicationDistributions : AbstractDistributions() { - @Suppress("DoubleMutabilityForCollection", "SpreadOperator") - var modules = arrayListOf(*DEFAULT_RUNTIME_MODULES) - - fun modules(vararg modules: String) { - this.modules.addAll(modules.toList()) - } - - var includeAllModules: Boolean = false - - /** Strip native libraries for non-target platforms from dependency JARs to reduce package size. */ - var cleanupNativeLibs: Boolean = false - - /** Splash screen image filename relative to appResources (e.g. "splash.png"). */ - var splashImage: String? = null - - /** Enable JDK 25+ AOT cache generation for faster application startup. */ - var enableAotCache: Boolean = false - - /** - * Whether any of the configured target formats require sandboxing - * (store formats like PKG, AppX, Flatpak) AND are compatible with the current OS. - */ - internal val hasStoreFormats: Boolean - get() = targetFormats.any { it.isStoreFormat && it.isCompatibleWithCurrentOS } - - val linux: LinuxPlatformSettings = objects.newInstance(LinuxPlatformSettings::class.java) - - open fun linux(fn: Action) { - fn.execute(linux) - } - - val macOS: JvmMacOSPlatformSettings = objects.newInstance(JvmMacOSPlatformSettings::class.java) - - open fun macOS(fn: Action) { - fn.execute(macOS) - } - - val windows: WindowsPlatformSettings = objects.newInstance(WindowsPlatformSettings::class.java) - - fun windows(fn: Action) { - fn.execute(windows) - } - - @JvmOverloads - fun fileAssociation( - mimeType: String, - extension: String, - description: String, - linuxIconFile: File? = null, - windowsIconFile: File? = null, - macOSIconFile: File? = null, - ) { - linux.fileAssociation(mimeType, extension, description, linuxIconFile) - windows.fileAssociation(mimeType, extension, description, windowsIconFile) - macOS.fileAssociation(mimeType, extension, description, macOSIconFile) - } - - // --- Publishing --- - - val publish: PublishSettings = objects.newInstance(PublishSettings::class.java) - - fun publish(fn: Action) { - fn.execute(publish) - } - - // --- Compression level for archive formats --- - - var compressionLevel: CompressionLevel? = null - - // --- Artifact name template (e.g., "\${name}-\${version}-\${arch}.\${ext}") --- - - var artifactName: String = "\${name}-\${version}-\${os}-\${arch}.\${ext}" - - // --- Trusted CA certificates for the bundled JVM --- - - /** - * CA certificate files (PEM/DER) to import into the bundled JDK's `cacerts` keystore. - * - * Example: - * ```kotlin - * nativeDistributions { - * trustedCertificates.from(files("certs/my-ca.crt", "certs/company-ca.pem")) - * } - * ``` - * - * Each certificate is imported using `keytool -import -trustcacerts`. The alias is - * derived from the filename (lowercased, non-alphanumeric characters replaced with `-`). - * Import is idempotent: if an alias already exists it is silently skipped. - */ - val trustedCertificates: ConfigurableFileCollection = objects.fileCollection() - - // --- URL protocol handlers (deep linking) --- - - val protocols: MutableList = mutableListOf() - - fun protocol( - name: String, - vararg schemes: String, - ) { - protocols.add(UrlProtocol(name, schemes.toList())) - } -} - -data class UrlProtocol( - val name: String, - val schemes: List, -) : Serializable { - companion object { - private const val serialVersionUID: Long = 1L - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt deleted file mode 100644 index a8ed1037a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/LaunchAgentSettings.kt +++ /dev/null @@ -1,146 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import java.io.Serializable - -/** - * DSL block for declaring macOS launch agents to embed in the app bundle - * at `Contents/Library/LaunchAgents/`. - * - * These agents are registered at runtime via `SMAppService.agent(plistName:)`. - * - * ```kotlin - * macOS { - * launchAgents { - * agent("com.myapp.sync") { - * bundleProgram("Contents/MacOS/MyApp") - * arguments("--sync") - * startInterval(900) // every 15 minutes - * } - * } - * } - * ``` - */ -class LaunchAgentSettings : Serializable { - internal val agents: MutableList = mutableListOf() - - /** - * Declares a launch agent with the given label. - * - * @param label unique reverse-DNS identifier (e.g. `"com.myapp.background-sync"`) - */ - fun agent(label: String, fn: Action) { - val definition = LaunchAgentDefinition(label) - fn.execute(definition) - agents.add(definition) - } - - companion object { - private const val serialVersionUID = 1L - } -} - -/** - * Defines a single launch agent plist to embed in the app bundle. - */ -class LaunchAgentDefinition( - /** Unique reverse-DNS label for the agent (maps to `Label` plist key). */ - val label: String, -) : Serializable { - internal var bundleProgram: String? = null - internal var programArguments: MutableList = mutableListOf() - internal var startInterval: Int? = null - internal var runAtLoad: Boolean = false - internal var keepAlive: Boolean = false - internal var calendarIntervals: MutableList = mutableListOf() - internal var processType: String = "Background" - - /** - * Path to the executable relative to the app bundle root. - * - * Example: `"Contents/MacOS/MyApp"` - */ - fun bundleProgram(path: String) { - bundleProgram = path - } - - /** - * Additional arguments passed to the program. - * The bundle program path is automatically prepended. - */ - fun arguments(vararg args: String) { - programArguments.addAll(args) - } - - /** - * Run the agent at a fixed interval (in seconds). - * Minimum recommended: 900 (15 minutes). - */ - fun startInterval(seconds: Int) { - startInterval = seconds - } - - /** Run the agent immediately when loaded by launchd. */ - fun runAtLoad(enabled: Boolean = true) { - runAtLoad = enabled - } - - /** Restart the agent automatically if it exits. */ - fun keepAlive(enabled: Boolean = true) { - keepAlive = enabled - } - - /** Set the process type (`Background`, `Standard`, `Adaptive`). Defaults to `Background`. */ - fun processType(type: String) { - processType = type - } - - /** - * Adds a calendar-based schedule (maps to `StartCalendarInterval`). - * Multiple calls create an array of intervals. - * - * ```kotlin - * calendar { hour = 9; minute = 30 } // daily at 09:30 - * calendar { weekday = 1; hour = 8; minute = 0 } // every Monday at 08:00 - * ``` - */ - fun calendar(fn: Action) { - val interval = CalendarInterval() - fn.execute(interval) - calendarIntervals.add(interval) - } - - /** The plist filename: `{label}.plist`. */ - val plistFileName: String get() = "$label.plist" - - companion object { - private const val serialVersionUID = 1L - } -} - -/** - * A calendar interval for launchd's `StartCalendarInterval`. - * - * All fields are optional — omitted fields act as wildcards. - * Weekday uses launchd convention: 0 = Sunday, 1 = Monday, ..., 6 = Saturday. - */ -class CalendarInterval : Serializable { - /** Month of the year (1–12). */ - var month: Int? = null - - /** Day of the month (1–31). */ - var day: Int? = null - - /** Day of the week (0 = Sunday, 1 = Monday, ..., 6 = Saturday). */ - var weekday: Int? = null - - /** Hour of the day (0–23). */ - var hour: Int? = null - - /** Minute of the hour (0–59). */ - var minute: Int? = null - - companion object { - private const val serialVersionUID = 1L - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt deleted file mode 100644 index 403b178bb..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSNotarizationSettings.kt +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.provider.ProviderFactory -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.Optional -import javax.inject.Inject - -abstract class MacOSNotarizationSettings { - @get:Inject - protected abstract val objects: ObjectFactory - - @get:Inject - protected abstract val providers: ProviderFactory - - @get:Input - @get:Optional - val appleID: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationAppleID(providers)) - } - - @get:Input - @get:Optional - val password: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationPassword(providers)) - } - - @get:Input - @get:Optional - val teamID: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationTeamID(providers)) - } - - /** - * Name of a `notarytool` keychain profile created via `xcrun notarytool store-credentials`. - * When set, notarization uses `--keychain-profile ` instead of `--apple-id`/`--team-id`/password. - * Mutually exclusive with the `appleID`/`password`/`teamID` mode. - */ - @get:Input - @get:Optional - val keychainProfile: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationKeychainProfile(providers)) - } - - /** - * Optional path to the keychain that stores the `keychainProfile` credentials. - * Forwarded to `notarytool` as `--keychain `. Only used when [keychainProfile] is set. - */ - @get:Input - @get:Optional - val keychainPath: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationKeychainPath(providers)) - } - - /** - * Path to the App Store Connect API key file (`.p8`). - * Forwarded to `notarytool` as `--key `. - * Mutually exclusive with the apple-id and keychain-profile modes; the trio - * [apiKey], [apiKeyId] and [apiIssuer] must all be set together. - */ - @get:Input - @get:Optional - val apiKey: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationApiKey(providers)) - } - - /** - * App Store Connect API key ID (the 10-character identifier shown in App Store Connect). - * Forwarded to `notarytool` as `--key-id `. - */ - @get:Input - @get:Optional - val apiKeyId: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationApiKeyId(providers)) - } - - /** - * App Store Connect API issuer ID (the team's issuer UUID). - * Forwarded to `notarytool` as `--issuer `. - */ - @get:Input - @get:Optional - val apiIssuer: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macNotarizationApiIssuer(providers)) - } - - @Deprecated("This option is no longer supported and got replaced by teamID", level = DeprecationLevel.ERROR) - @get:Internal - val ascProvider: Property = - objects.nullableProperty() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt deleted file mode 100644 index f38f171b7..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/MacOSSigningSettings.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.provider.ProviderFactory -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Optional -import javax.inject.Inject - -abstract class MacOSSigningSettings { - @get:Inject - protected abstract val objects: ObjectFactory - - @get:Inject - protected abstract val providers: ProviderFactory - - @get:Input - val sign: Property = - objects.notNullProperty().apply { - set( - NucleusProperties - .macSign(providers) - .orElse(false), - ) - } - - @get:Input - @get:Optional - val identity: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macSignIdentity(providers)) - } - - @get:Input - @get:Optional - val keychain: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macSignKeychain(providers)) - } - - @get:Input - @get:Optional - val prefix: Property = - objects.nullableProperty().apply { - set(NucleusProperties.macSignPrefix(providers)) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt deleted file mode 100644 index b6ee6dd17..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplication.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.model.ObjectFactory -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget -import org.jetbrains.kotlin.konan.target.Family -import javax.inject.Inject - -abstract class NativeApplication - @Inject - constructor( - @Suppress("unused") - val name: String, - objects: ObjectFactory, - ) { - @get:Inject - internal abstract val objects: ObjectFactory - - @Suppress("VariableNaming") - internal val _targets = arrayListOf() - - fun targets(vararg targets: KotlinTarget) { - val nonNativeTargets = arrayListOf() - val nonMacOSTargets = arrayListOf() - for (target in targets) { - if (target is KotlinNativeTarget) { - if (target.konanTarget.family == Family.OSX) { - _targets.add(target) - } else { - nonMacOSTargets.add(target) - } - } else { - nonNativeTargets.add(target) - } - } - - check(nonNativeTargets.isEmpty() && nonMacOSTargets.isEmpty()) { - buildString { - appendLine("compose.nativeApplication.targets supports only Kotlin/Native macOS targets for now:") - nonNativeTargets.forEach { appendLine("* '${it.name}' is not a native target;") } - nonMacOSTargets.forEach { appendLine("* '${it.name}' is not a macOS target;") } - } - } - } - - val distributions: NativeApplicationDistributions = - objects.newInstance(NativeApplicationDistributions::class.java) - - fun distributions(fn: Action) { - fn.execute(distributions) - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt deleted file mode 100644 index ed5578236..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import java.util.* - -abstract class NativeApplicationDistributions : AbstractDistributions() { - private val supportedFormats = EnumSet.of(TargetFormat.Dmg) - - override fun targetFormats(vararg formats: TargetFormat) { - val unsupportedFormats = formats.filter { it !in supportedFormats } - if (unsupportedFormats.isNotEmpty()) { - error( - "nativeApplication.distributions.targetFormats " + - "does not support the following formats: " + - unsupportedFormats.joinToString(", "), - ) - } - super.targetFormats(*formats) - } - - val macOS: NativeApplicationMacOSPlatformSettings = objects.newInstance(NativeApplicationMacOSPlatformSettings::class.java) - - open fun macOS(fn: Action) { - fn.execute(macOS) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt deleted file mode 100644 index 76508da3a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/NsisSettings.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -abstract class NsisSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** One-click installer (no wizard). Default: true */ - var oneClick: Boolean = true - - /** Allow elevation to admin. Default: false */ - var allowElevation: Boolean = false - - /** Install per-machine (all users). Default: false */ - var perMachine: Boolean = false - - /** Allow user to change install directory. Default: false */ - var allowToChangeInstallationDirectory: Boolean = false - - /** Create desktop shortcut. Default: true */ - var createDesktopShortcut: Boolean = true - - /** Create start menu shortcut. Default: true */ - var createStartMenuShortcut: Boolean = true - - /** Run app after install finishes. Default: true */ - var runAfterFinish: Boolean = true - - /** Installer icon file (.ico) */ - val installerIcon: RegularFileProperty = objects.fileProperty() - - /** Uninstaller icon file (.ico) */ - val uninstallerIcon: RegularFileProperty = objects.fileProperty() - - /** License file (.txt, .rtf, .html) */ - val license: RegularFileProperty = objects.fileProperty() - - /** Custom NSIS include script (.nsh) */ - val includeScript: RegularFileProperty = objects.fileProperty() - - /** Custom NSIS script (.nsi) */ - val script: RegularFileProperty = objects.fileProperty() - - /** Delete app data on uninstall. Default: false */ - var deleteAppDataOnUninstall: Boolean = false - - /** Multi-language installer. Default: false */ - var multiLanguageInstaller: Boolean = false - - /** Installer languages (e.g., "en_US", "de_DE") */ - var installerLanguages: List = emptyList() - - /** Installer header image (assisted/wizard only) */ - val installerHeader: RegularFileProperty = objects.fileProperty() - - /** Installer sidebar bitmap (assisted/wizard only) */ - val installerSidebar: RegularFileProperty = objects.fileProperty() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt deleted file mode 100644 index b481d7334..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PlatformSettings.kt +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import java.io.File -import javax.inject.Inject - -abstract class AbstractPlatformSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - val iconFile: RegularFileProperty = objects.fileProperty() - var packageVersion: String? = null - - internal val fileAssociations: MutableSet = mutableSetOf() - - @JvmOverloads - fun fileAssociation( - mimeType: String, - extension: String, - description: String, - iconFile: File? = null, - ) { - fileAssociations.add(FileAssociation(mimeType, extension, description, iconFile)) - } -} - -abstract class AbstractMacOSPlatformSettings : AbstractPlatformSettings() { - var packageName: String? = null - - var packageBuildVersion: String? = null - var dmgPackageVersion: String? = null - var dmgPackageBuildVersion: String? = null - var appCategory: String? = null - var minimumSystemVersion: String? = null - var installationPath: String? = null - var layeredIconDir: DirectoryProperty = objects.directoryProperty() - - /** - * An application's unique identifier across Apple's ecosystem. - * - * May only contain alphanumeric characters (A-Z,a-z,0-9), hyphen (-) and period (.) characters - * - * Use of a reverse DNS notation (e.g. com.mycompany.myapp) is recommended. - */ - var bundleID: String? = null - - val signing: MacOSSigningSettings = objects.newInstance(MacOSSigningSettings::class.java) - - fun signing(fn: Action) { - fn.execute(signing) - } - - val notarization: MacOSNotarizationSettings = objects.newInstance(MacOSNotarizationSettings::class.java) - - fun notarization(fn: Action) { - fn.execute(notarization) - } - - val dmg: DmgSettings = objects.newInstance(DmgSettings::class.java) - - fun dmg(fn: Action) { - fn.execute(dmg) - } -} - -abstract class NativeApplicationMacOSPlatformSettings : AbstractMacOSPlatformSettings() - -abstract class JvmMacOSPlatformSettings : AbstractMacOSPlatformSettings() { - var dockName: String? = null - var setDockNameSameAsPackageName: Boolean = true - - /** - * Previously used to enable App Store signing for PKG builds. - * - * This property is now ignored — PKG is always treated as an App Store format. - * Store-specific signing (sandbox entitlements, "3rd Party Mac Developer" certificates, - * provisioning profiles, `productsign`) is applied automatically when the target format - * is [TargetFormat.Pkg]. - */ - @Deprecated( - "PKG is always built for the App Store. This property is ignored and will be removed in a future release.", - level = DeprecationLevel.WARNING, - ) - var appStore: Boolean = false - val entitlementsFile: RegularFileProperty = objects.fileProperty() - val runtimeEntitlementsFile: RegularFileProperty = objects.fileProperty() - var pkgPackageVersion: String? = null - var pkgPackageBuildVersion: String? = null - - val provisioningProfile: RegularFileProperty = objects.fileProperty() - val runtimeProvisioningProfile: RegularFileProperty = objects.fileProperty() - - /** - * Target macOS SDK version to set in the app launcher's Mach-O headers via vtool. - * This allows AppKit to enable features gated behind a specific SDK version - * (e.g. Liquid Glass requires SDK 26.0). - * - * Set to null to disable patching. Defaults to "26.0". - * Only effective on macOS; ignored on other platforms. - */ - var macOsSdkVersion: String? = "26.0" - - /** - * Configures launch agent plists to embed in the macOS app bundle - * at `Contents/Library/LaunchAgents/`. - * - * These agents are registered at runtime via `SMAppService.agent(plistName:)`. - * - * ```kotlin - * macOS { - * launchAgents { - * agent("com.myapp.sync") { - * bundleProgram("Contents/MacOS/MyApp") - * arguments("--sync") - * startInterval(900) - * } - * } - * } - * ``` - */ - val launchAgents: LaunchAgentSettings = LaunchAgentSettings() - - fun launchAgents(fn: Action) { - fn.execute(launchAgents) - } - - internal val infoPlistSettings = InfoPlistSettings() - - fun infoPlist(fn: Action) { - fn.execute(infoPlistSettings) - } -} - -open class InfoPlistSettings { - var extraKeysRawXml: String? = null -} - -abstract class LinuxPlatformSettings : AbstractPlatformSettings() { - var shortcut: Boolean = false - - /** - * Value for StartupWMClass in desktop entry. - * - * If null, Nucleus derives a default from `mainClass` by replacing dots with hyphens. - */ - var startupWMClass: String? = null - var packageName: String? = null - var appRelease: String? = null - var appCategory: String? = null - var debMaintainer: String? = null - var menuGroup: String? = null - var rpmLicenseType: String? = null - var debPackageVersion: String? = null - var rpmPackageVersion: String? = null - - /** Additional Debian dependencies for .deb packages. */ - var debDepends: List = emptyList() - - /** Additional RPM requires for .rpm packages. */ - var rpmRequires: List = emptyList() - - val snap: SnapSettings = objects.newInstance(SnapSettings::class.java) - - fun snap(fn: Action) { - fn.execute(snap) - } - - val flatpak: FlatpakSettings = objects.newInstance(FlatpakSettings::class.java) - - fun flatpak(fn: Action) { - fn.execute(flatpak) - } - - val appImage: AppImageSettings = objects.newInstance(AppImageSettings::class.java) - - fun appImage(fn: Action) { - fn.execute(appImage) - } -} - -abstract class WindowsPlatformSettings : AbstractPlatformSettings() { - var packageName: String? = null - var console: Boolean = false - var dirChooser: Boolean = true - var perUserInstall: Boolean = false - var shortcut: Boolean = false - var menu: Boolean = false - get() = field || menuGroup != null - var menuGroup: String? = null - var upgradeUuid: String? = null - var msiPackageVersion: String? = null - var exePackageVersion: String? = null - - val nsis: NsisSettings = objects.newInstance(NsisSettings::class.java) - - fun nsis(fn: Action) { - fn.execute(nsis) - } - - val appx: AppXSettings = objects.newInstance(AppXSettings::class.java) - - fun appx(fn: Action) { - fn.execute(appx) - } - - val signing: WindowsSigningSettings = objects.newInstance(WindowsSigningSettings::class.java) - - fun signing(fn: Action) { - fn.execute(signing) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt deleted file mode 100644 index 43383a46e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ProguardSettings.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import javax.inject.Inject - -private const val DEFAULT_PROGUARD_VERSION = "7.7.0" - -abstract class ProguardSettings - @Inject - constructor( - objects: ObjectFactory, - ) { - val version: Property = objects.notNullProperty(DEFAULT_PROGUARD_VERSION) - val maxHeapSize: Property = objects.nullableProperty() - val configurationFiles: ConfigurableFileCollection = objects.fileCollection() - val isEnabled: Property = objects.notNullProperty(false) - val obfuscate: Property = objects.notNullProperty(false) - val optimize: Property = objects.notNullProperty(true) - val joinOutputJars: Property = objects.notNullProperty(false) - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt deleted file mode 100644 index 5bac57a80..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishMode.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Publish mode for electron-builder output. */ -enum class PublishMode( - internal val id: String, -) { - /** Disable auto-update publishing. latest-*.yml metadata is still generated locally for all updatable formats. */ - Never("never"), - - /** Publish to GitHub/S3 if configured (detects git tag). */ - Auto("onTag"), - - /** Always publish even without git tag. */ - Always("always"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt deleted file mode 100644 index 22cb26fbf..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/PublishSettings.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.Action -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -abstract class PublishSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** Publish mode for electron-builder. Default: [PublishMode.Never] */ - var publishMode: PublishMode = PublishMode.Never - - val github: GitHubPublishSettings = objects.newInstance(GitHubPublishSettings::class.java) - - fun github(fn: Action) { - fn.execute(github) - } - - val s3: S3PublishSettings = objects.newInstance(S3PublishSettings::class.java) - - fun s3(fn: Action) { - fn.execute(s3) - } - - val generic: GenericPublishSettings = objects.newInstance(GenericPublishSettings::class.java) - - fun generic(fn: Action) { - fn.execute(generic) - } -} - -@Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class GitHubPublishSettings { - /** Enable publishing to GitHub Releases. Default: false */ - var enabled: Boolean = false - - /** GitHub repository owner */ - var owner: String? = null - - /** GitHub repository name */ - var repo: String? = null - - /** GitHub token (or use GITHUB_TOKEN env var) */ - var token: String? = null - - /** Release channel. Default: [ReleaseChannel.Latest] */ - var channel: ReleaseChannel = ReleaseChannel.Latest - - /** Release type. Default: [ReleaseType.Release] */ - var releaseType: ReleaseType = ReleaseType.Release -} - -@Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class GenericPublishSettings { - /** Enable publishing via generic HTTP server. Default: false */ - var enabled: Boolean = false - - /** Base URL where update files will be hosted (e.g., "https://updates.example.com/releases/") */ - var url: String? = null - - /** Update channel. Default: [ReleaseChannel.Latest] */ - var channel: ReleaseChannel = ReleaseChannel.Latest - - /** Use multiple range requests for differential downloads. Default: true */ - var useMultipleRangeRequest: Boolean = true -} - -@Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class S3PublishSettings { - /** Enable publishing to S3. Default: false */ - var enabled: Boolean = false - - /** S3 bucket name */ - var bucket: String? = null - - /** AWS region */ - var region: String? = null - - /** Path prefix within the bucket */ - var path: String? = null - - /** ACL for uploaded objects (e.g., "public-read") */ - var acl: String? = null -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt deleted file mode 100644 index be50f31af..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseChannel.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Update channel for auto-update publishing. */ -enum class ReleaseChannel( - internal val id: String, -) { - Latest("latest"), - Beta("beta"), - Alpha("alpha"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt deleted file mode 100644 index 7080eed42..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/ReleaseType.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** GitHub release type for publishing. */ -enum class ReleaseType( - internal val id: String, -) { - Release("release"), - Draft("draft"), - Prerelease("prerelease"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt deleted file mode 100644 index 62017fc6f..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SigningAlgorithm.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Windows code-signing hash algorithm. */ -enum class SigningAlgorithm( - internal val id: String, -) { - Sha1("sha1"), - Sha256("sha256"), - Sha512("sha512"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt deleted file mode 100644 index 83868adc4..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapCompression.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Snap package compression algorithm. */ -enum class SnapCompression( - internal val id: String, -) { - Xz("xz"), - Lzo("lzo"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt deleted file mode 100644 index 2a9bf285e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapConfinement.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Snap package confinement level. */ -enum class SnapConfinement( - internal val id: String, -) { - Strict("strict"), - Classic("classic"), - Devmode("devmode"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt deleted file mode 100644 index 66bc2def3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapGrade.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Snap package quality grade. */ -enum class SnapGrade( - internal val id: String, -) { - Stable("stable"), - Devel("devel"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt deleted file mode 100644 index 20c563aab..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapPlug.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -/** Well-known Snap interface plugs. */ -enum class SnapPlug( - internal val id: String, -) { - Desktop("desktop"), - DesktopLegacy("desktop-legacy"), - Home("home"), - X11("x11"), - Wayland("wayland"), - Unity7("unity7"), - BrowserSupport("browser-support"), - Network("network"), - NetworkBind("network-bind"), - Gsettings("gsettings"), - AudioPlayback("audio-playback"), - AudioRecord("audio-record"), - Opengl("opengl"), - RemovableMedia("removable-media"), - Cups("cups"), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt deleted file mode 100644 index 70a9df479..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/SnapSettings.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -@Suppress("UnnecessaryAbstractClass") // Required abstract for Gradle ObjectFactory.newInstance() -abstract class SnapSettings { - /** Confinement level. Default: [SnapConfinement.Strict] */ - var confinement: SnapConfinement = SnapConfinement.Strict - - /** Quality grade. Default: [SnapGrade.Stable] */ - var grade: SnapGrade = SnapGrade.Stable - - /** Short summary (max 78 chars) */ - var summary: String? = null - - /** Base snap. Default: "core22" */ - var base: String? = null - - /** Snap interfaces (plugs) */ - var plugs: List = - listOf( - SnapPlug.Desktop, - SnapPlug.DesktopLegacy, - SnapPlug.Home, - SnapPlug.X11, - SnapPlug.Wayland, - SnapPlug.Unity7, - SnapPlug.BrowserSupport, - SnapPlug.Network, - SnapPlug.Gsettings, - SnapPlug.AudioPlayback, - SnapPlug.Opengl, - ) - - /** Auto-start on login. Default: false */ - var autoStart: Boolean = false - - /** Compression algorithm. Default: null (uses snap default) */ - var compression: SnapCompression? = null -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt deleted file mode 100644 index f524ef2be..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/TargetFormat.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS - -enum class PackagingBackend { - /** App-image creation only (jpackage). */ - JPACKAGE, - - /** Full packaging via electron-builder --prepackaged. */ - ELECTRON_BUILDER, -} - -enum class TargetFormat( - internal val id: String, - internal val targetOS: OS, - val backend: PackagingBackend, -) { - // --- Formats using jpackage (app-image only) --- - RawAppImage("app-image", currentOS, PackagingBackend.JPACKAGE), - - // --- Existing formats migrated to electron-builder --- - Pkg("pkg", OS.MacOS, PackagingBackend.ELECTRON_BUILDER), - Deb("deb", OS.Linux, PackagingBackend.ELECTRON_BUILDER), - Rpm("rpm", OS.Linux, PackagingBackend.ELECTRON_BUILDER), - Dmg("dmg", OS.MacOS, PackagingBackend.ELECTRON_BUILDER), - Exe("exe", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - Msi("msi", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - - // --- New formats (electron-builder only) --- - Nsis("nsis", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - NsisWeb("nsis-web", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - Portable("portable", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - AppX("appx", OS.Windows, PackagingBackend.ELECTRON_BUILDER), - AppImage("AppImage", OS.Linux, PackagingBackend.ELECTRON_BUILDER), - Snap("snap", OS.Linux, PackagingBackend.ELECTRON_BUILDER), - Flatpak("flatpak", OS.Linux, PackagingBackend.ELECTRON_BUILDER), - Zip("zip", currentOS, PackagingBackend.ELECTRON_BUILDER), - Tar("tar.gz", currentOS, PackagingBackend.ELECTRON_BUILDER), - SevenZ("7z", currentOS, PackagingBackend.ELECTRON_BUILDER), - ; - - val isCompatibleWithCurrentOS: Boolean by lazy { isCompatibleWith(currentOS) } - - /** Whether this format is a store format that requires sandboxing (App Store, Windows Store, Flatpak). */ - val isStoreFormat: Boolean - get() = this in setOf(Pkg, AppX, Flatpak) - - /** - * Whether this format supports auto-update but electron-builder does not generate latest-*.yml for it. - * electron-builder natively generates yml for: NSIS, NSIS-Web, DMG, AppImage, DEB, RPM. - * This property is true only for formats that need the plugin to generate it: MSI and Portable. - */ - val needsPluginUpdateYml: Boolean - get() = this == Msi || this == Portable - - /** Returns the auto-update YML filename for this format and channel. */ - fun updateYmlFilename(channel: ReleaseChannel): String { - val prefix = channel.id - val suffix = when (targetOS) { - OS.Windows -> "" - OS.MacOS -> "-mac" - OS.Linux -> "-linux" - } - return "$prefix$suffix.yml" - } - - internal fun isCompatibleWith(os: OS): Boolean = os == targetOS - - val outputDirName: String - get() = if (this == RawAppImage) "app" else id - - val fileExt: String - get() { - check(this != RawAppImage) { "$this cannot have a file extension" } - return ".$id" - } - - /** - * The electron-builder target name used in CLI arguments. - * Maps this format to the target identifier expected by electron-builder. - */ - internal val electronBuilderTarget: String - get() = - when (this) { - Exe, Nsis -> "nsis" - NsisWeb -> "nsis-web" - Tar -> "tar.gz" - SevenZ -> "7z" - RawAppImage -> error("RawAppImage uses jpackage, not electron-builder") - else -> id - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt deleted file mode 100644 index de90f0f04..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/dsl/WindowsSigningSettings.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.dsl - -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import javax.inject.Inject - -abstract class WindowsSigningSettings { - @get:Inject - internal abstract val objects: ObjectFactory - - /** Enable Windows code signing. Default: false */ - var enabled: Boolean = false - - /** Certificate file (.pfx/.p12) */ - val certificateFile: RegularFileProperty = objects.fileProperty() - - /** Certificate password */ - var certificatePassword: String? = null - - /** Certificate SHA1 thumbprint (for store certs) */ - var certificateSha1: String? = null - - /** Certificate subject name */ - var certificateSubjectName: String? = null - - /** Timestamp server URL */ - var timestampServer: String? = null - - /** Signing hash algorithm. Default: [SigningAlgorithm.Sha256] */ - var algorithm: SigningAlgorithm = SigningAlgorithm.Sha256 - - /** - * Publisher name, exactly as in the code signing certificate. - * Required by electron-builder when signing with Azure Artifact Signing. - * If unset, falls back to `nativeDistributions.vendor`. - */ - var publisherName: String? = null - - // --- Azure Artifact Signing --- - - /** Azure tenant ID for Artifact Signing */ - var azureTenantId: String? = null - - /** Azure Artifact Signing endpoint URL */ - var azureEndpoint: String? = null - - /** Azure certificate profile name */ - var azureCertificateProfileName: String? = null - - /** Azure Code Signing account name */ - var azureCodeSigningAccountName: String? = null -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt deleted file mode 100644 index 22d1a1ac0..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt +++ /dev/null @@ -1,155 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import groovy.json.JsonOutput -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.BytecodeAnalyzer -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.JniEntry -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern -import org.gradle.api.DefaultTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.tasks.CacheableTask -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import java.io.File - -/** - * Statically analyzes bytecode in all runtime classpath JARs and generates - * GraalVM reachability metadata (reflection, JNI, resources) that can be - * detected without running the application. - * - * The output directory contains a `reachability-metadata.json` file in the - * standard GraalVM format, ready to be passed as `-H:ConfigurationFileDirectories=`. - */ -@CacheableTask -abstract class AnalyzeStaticMetadataTask : DefaultTask() { - /** The runtime classpath JARs to analyze. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val runtimeClasspath: ConfigurableFileCollection - - /** Output directory where reachability-metadata.json is written. */ - @get:OutputDirectory - abstract val outputDir: DirectoryProperty - - @TaskAction - fun analyze() { - val classpathEntries = runtimeClasspath.files.filter { it.exists() } - val jars = classpathEntries.filter { it.name.endsWith(".jar") } - val classDirs = classpathEntries.filter { it.isDirectory } - if (jars.isEmpty() && classDirs.isEmpty()) { - logger.info("No JARs or class directories to analyze for static metadata") - return - } - - logger.lifecycle( - "Static bytecode analysis: scanning ${jars.size} JARs" + - if (classDirs.isNotEmpty()) " + ${classDirs.size} class directories" else "", - ) - - val result = BytecodeAnalyzer.analyzeClasspath(classpathEntries) - - val allReflection = result.allReflectionEntries - val jniEntries = result.jniEntries - val resources = result.resourcePatterns - - logger.lifecycle( - "Static analysis found: " + - "${allReflection.size} reflection, " + - "${jniEntries.size} JNI, " + - "${resources.size} resource entries", - ) - - val outDir = outputDir.get().asFile - outDir.mkdirs() - - val json = buildReachabilityMetadataJson(allReflection, jniEntries, resources) - File(outDir, "reachability-metadata.json").writeText(json) - - logger.lifecycle("Static metadata written to: $outDir") - } -} - -/** - * Builds a reachability-metadata.json string in the GraalVM format from analysis results. - */ -internal fun buildReachabilityMetadataJson( - reflectionEntries: Set, - jniEntries: Set, - resourcePatterns: Set, -): String { - val root = mutableMapOf() - - if (reflectionEntries.isNotEmpty()) { - root["reflection"] = - reflectionEntries - .sortedBy { it.type } - .map { it.toJsonMap() } - } - - if (jniEntries.isNotEmpty()) { - root["jni"] = - jniEntries - .sortedBy { it.type } - .map { it.toJsonMap() } - } - - if (resourcePatterns.isNotEmpty()) { - root["resources"] = - resourcePatterns - .sortedBy { it.glob ?: it.bundle ?: "" } - .map { it.toJsonMap() } - } - - return JsonOutput.prettyPrint(JsonOutput.toJson(root)) + "\n" -} - -private fun ReflectionEntry.toJsonMap(): Map { - val map = mutableMapOf("type" to type) - if (allDeclaredFields) map["allDeclaredFields"] = true - if (allDeclaredMethods) map["allDeclaredMethods"] = true - if (allDeclaredConstructors) map["allDeclaredConstructors"] = true - if (allPublicFields) map["allPublicFields"] = true - if (allPublicMethods) map["allPublicMethods"] = true - if (allPublicConstructors) map["allPublicConstructors"] = true - if (unsafeAllocated) map["unsafeAllocated"] = true - if (methods.isNotEmpty()) { - map["methods"] = methods.sortedBy { it.name }.map { it.toJsonMap() } - } - if (fields.isNotEmpty()) { - map["fields"] = fields.sorted().map { mapOf("name" to it) } - } - return map -} - -private fun JniEntry.toJsonMap(): Map { - val map = mutableMapOf("type" to type) - if (jniAccessible) map["jniAccessible"] = true - if (methods.isNotEmpty()) { - map["methods"] = methods.sortedBy { it.name }.map { it.toJsonMap() } - } - if (fields.isNotEmpty()) { - map["fields"] = fields.sorted().map { mapOf("name" to it) } - } - return map -} - -private fun MethodSignature.toJsonMap(): Map { - val map = mutableMapOf("name" to name) - if (parameterTypes.isNotEmpty()) { - map["parameterTypes"] = parameterTypes - } - return map -} - -private fun ResourcePattern.toJsonMap(): Map { - val map = mutableMapOf() - if (glob != null) map["glob"] = glob - if (bundle != null) map["bundle"] = bundle - if (module != null) map["module"] = module - return map -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt deleted file mode 100644 index 2dd0f0558..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeInfo -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentArch -import dev.nucleusframework.nucleus.internal.utils.currentOS -import org.gradle.api.Project -import org.gradle.api.artifacts.transform.InputArtifact -import org.gradle.api.artifacts.transform.TransformAction -import org.gradle.api.artifacts.transform.TransformOutputs -import org.gradle.api.artifacts.transform.TransformParameters -import org.gradle.api.attributes.Attribute -import org.gradle.api.file.FileSystemLocation -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.work.DisableCachingByDefault -import java.io.BufferedInputStream -import java.io.BufferedOutputStream -import java.io.FileOutputStream -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -@DisableCachingByDefault(because = "Stripping native libs from JARs is fast and not worth caching") -internal abstract class CleanNativeLibsTransform : TransformAction { - interface Parameters : TransformParameters { - @get:org.gradle.api.tasks.Input - val targetOs: Property - - @get:org.gradle.api.tasks.Input - val targetArch: Property - } - - @get:InputArtifact - @get:PathSensitive(PathSensitivity.NAME_ONLY) - abstract val inputArtifact: Provider - - override fun transform(outputs: TransformOutputs) { - val inputFile = inputArtifact.get().asFile - if (!inputFile.name.endsWith(".jar")) { - outputs.file(inputFile) - return - } - - val targetOs = parameters.targetOs.get() - val targetArch = parameters.targetArch.get() - val expectedOs = - mapOs(targetOs) ?: run { - outputs.file(inputFile) - return - } - val expectedArch = - mapArch(targetArch) ?: run { - outputs.file(inputFile) - return - } - - // First pass: determine which entries to remove - val entriesToRemove = mutableSetOf() - ZipInputStream(BufferedInputStream(inputFile.inputStream())).use { zis -> - var entry = zis.nextEntry - while (entry != null) { - if (!entry.isDirectory && NativeLibArchDetector.isNativeLib(entry.name)) { - // Only process files with native extensions (.dll, .so, .dylib, .jnilib) - // Never touch .class or other Java files - val pathInfo = NativeLibArchDetector.detectFromPath(entry.name) - - if (pathInfo.os != NativeOs.UNKNOWN && pathInfo.arch != NativeArch.UNKNOWN) { - // Path has both OS and arch indicators - if (shouldRemoveByInfo(pathInfo, expectedOs, expectedArch)) { - entriesToRemove.add(entry.name) - } - } else { - // Fall back to binary header detection - val header = ByteArray(64) - val bytesRead = readFully(zis, header) - if (bytesRead > 0) { - val headerInfo = NativeLibArchDetector.detectFromHeader(header.copyOf(bytesRead)) - if (shouldRemoveByInfo(headerInfo, expectedOs, expectedArch)) { - entriesToRemove.add(entry.name) - } - } - } - } - entry = zis.nextEntry - } - } - - if (entriesToRemove.isEmpty()) { - outputs.file(inputFile) - return - } - - // Second pass: copy JAR without removed entries - val outputFile = outputs.file(inputFile.name) - ZipInputStream(BufferedInputStream(inputFile.inputStream())).use { zis -> - ZipOutputStream(BufferedOutputStream(FileOutputStream(outputFile))).use { zos -> - var entry = zis.nextEntry - while (entry != null) { - val shouldSkip = !entry.isDirectory && entry.name in entriesToRemove - - if (!shouldSkip) { - zos.putNextEntry( - ZipEntry(entry.name).apply { - time = entry.time - if (entry.method == ZipEntry.STORED) { - method = ZipEntry.STORED - size = entry.size - compressedSize = entry.compressedSize - crc = entry.crc - } - }, - ) - if (!entry.isDirectory) { - zis.copyTo(zos) - } - zos.closeEntry() - } - entry = zis.nextEntry - } - } - } - } - - private fun shouldRemoveByInfo( - info: NativeInfo, - expectedOs: NativeOs, - expectedArch: NativeArch, - ): Boolean { - // Exotic/unsupported OS (freebsd, aix, android, etc.) → always remove - if (info.os == NativeOs.OTHER) return true - // Known OS that doesn't match target → remove - if (info.os != NativeOs.UNKNOWN && info.os != expectedOs) return true - // OS matches but exotic/unsupported arch (ppc, arm32, riscv, etc.) → remove - if (info.arch == NativeArch.OTHER) return true - // OS matches but arch doesn't → remove (unless arch is unknown/universal) - if (info.os == expectedOs && - info.arch != NativeArch.UNKNOWN && - info.arch != NativeArch.UNIVERSAL && - info.arch != expectedArch - ) { - return true - } - return false - } - - private fun mapOs(os: String): NativeOs? = - when (os) { - "windows" -> NativeOs.WINDOWS - "linux" -> NativeOs.LINUX - "macos" -> NativeOs.MACOS - else -> null - } - - private fun mapArch(arch: String): NativeArch? = - when (arch) { - "x64" -> NativeArch.X64 - "arm64" -> NativeArch.ARM64 - else -> null - } - - private fun readFully( - input: java.io.InputStream, - buffer: ByteArray, - ): Int { - var totalRead = 0 - while (totalRead < buffer.size) { - val read = input.read(buffer, totalRead, buffer.size - totalRead) - if (read == -1) break - totalRead += read - } - return totalRead - } -} - -private val NATIVE_LIBS_CLEANED = Attribute.of("native-libs-cleaned", Boolean::class.javaObjectType) - -internal fun registerCleanNativeLibsTransform(project: Project) { - val osName = - when (currentOS) { - OS.Windows -> "windows" - OS.Linux -> "linux" - OS.MacOS -> "macos" - } - val archName = - when (currentArch) { - Arch.X64 -> "x64" - Arch.Arm64 -> "arm64" - } - - project.dependencies.registerTransform(CleanNativeLibsTransform::class.java) { spec -> - spec.from.attribute(NATIVE_LIBS_CLEANED, false) - spec.to.attribute(NATIVE_LIBS_CLEANED, true) - spec.parameters.targetOs.set(osName) - spec.parameters.targetArch.set(archName) - } - - project.configurations.configureEach { configuration -> - val name = configuration.name - if (name.endsWith("RuntimeClasspath", ignoreCase = true) && !name.contains("Test", ignoreCase = true)) { - // Skip Android configurations to avoid breaking Android builds. - // Android's dexing transforms produce directories, not JARs, so applying - // our JAR-based transform to Android configurations causes failures. - val isAndroid = configuration.attributes.keySet().any { it.name.startsWith("com.android") } - // Skip Compose Hot Reload dev classpath: its custom usage type - // (compose-dev-java-runtime) consumes project variants that can't be - // disambiguated when an extra attribute is added. Hot Reload runs the - // app in-place and never packages, so native-lib cleanup is a no-op. - val isHotReload = name.contains("HotReload", ignoreCase = true) - if (!isAndroid && !isHotReload) { - configuration.attributes.attribute(NATIVE_LIBS_CLEANED, true) - } - } - } - - project.dependencies.artifactTypes.configureEach { artifactType -> - if (artifactType.name == "jar") { - artifactType.attributes.attribute(NATIVE_LIBS_CLEANED, false) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt deleted file mode 100644 index 4c02ae891..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt +++ /dev/null @@ -1,562 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import groovy.json.JsonOutput -import groovy.json.JsonSlurper -import org.gradle.api.DefaultTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.File - -/** - * Cleans up the project's manual `reachability-metadata.json` by removing entries - * that are already covered by Nucleus-managed metadata sources: - * - * - **L1**: Per-library metadata filtered from plugin JAR + library JARs on classpath - * - **L2**: Oracle GraalVM Reachability Metadata Repository (per-dependency) - * - **L3**: Platform-specific metadata (AWT/Java2D) shipped in the plugin JAR - * - **Static analysis**: Reflection/JNI/resource entries detected from bytecode - * - **native-image.properties**: `-H:IncludeResources=` patterns from library JARs - * - * Run with: `./gradlew cleanupGraalvmMetadata` - */ -@DisableCachingByDefault(because = "Modifies user source files in-place") -abstract class CleanupGraalvmMetadataTask : DefaultTask() { - /** Runtime classpath JARs (for L1 library metadata + native-image.properties). */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val runtimeClasspath: ConfigurableFileCollection - - /** File listing Oracle repo metadata directories (output of resolveGraalvmReachabilityMetadata). */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - @get:Optional - abstract val metadataRepoDirsFile: RegularFileProperty - - /** Static analysis output directory containing reachability-metadata.json. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - @get:Optional - abstract val staticAnalysisDir: ConfigurableFileCollection - - /** Current platform name (windows, macos, linux) for L3 metadata. */ - @get:Input - abstract val platformName: Property - - /** Main class name (optional, used to baseline the main entry point). */ - @get:Input - @get:Optional - abstract val mainClass: Property - - /** The project's native-image config directory to clean up. */ - @get:Input - abstract val configDir: Property - - @TaskAction - fun cleanup() { - val targetDir = configDir.get() - val targetFile = File(targetDir, "reachability-metadata.json") - if (!targetFile.exists()) { - logger.lifecycle("No reachability-metadata.json found in $targetDir — nothing to clean up") - return - } - - val slurper = JsonSlurper() - - // Collect baseline entries from all managed sources - val libraryEntries = mutableMapOf>>() - val libraryProxies = mutableSetOf() - val libraryResourceJsons = mutableSetOf() - val libraryResourceGlobs = mutableListOf>() - val includeResourcePatterns = mutableListOf() - - // Source 1: L1 — library JARs on classpath (META-INF/native-image/**/reachability-metadata.json) - // + native-image.properties IncludeResources patterns - var l1Count = 0 - for (file in runtimeClasspath.files) { - if (!file.exists() || !file.name.endsWith(".jar")) continue - try { - java.util.jar.JarFile(file).use { jar -> - for (entry in jar.entries()) { - if (entry.name.contains("META-INF/native-image/") && - entry.name.endsWith("reachability-metadata.json") - ) { - val text = jar.getInputStream(entry).bufferedReader().readText() - val before = countBaselineTypes(libraryEntries) - collectBaseline(slurper, text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) - l1Count += countBaselineTypes(libraryEntries) - before - } - - if (entry.name.contains("META-INF/native-image/") && - entry.name.endsWith("native-image.properties") - ) { - val props = java.util.Properties() - jar.getInputStream(entry).use { props.load(it) } - val args = props.getProperty("Args") ?: continue - val regex = Regex("""-H:IncludeResources=(\S+)""") - for (match in regex.findAll(args)) { - try { - includeResourcePatterns.add(Regex(match.groupValues[1])) - } catch (_: Exception) { - // Skip malformed patterns - } - } - } - } - } - } catch (_: Exception) { - // Skip unreadable JARs - } - } - - // Source 2: L2 — Oracle repo metadata directories - var l2Count = 0 - val repoDirsFile = metadataRepoDirsFile.orNull?.asFile - if (repoDirsFile != null && repoDirsFile.exists()) { - val dirs = repoDirsFile.readText().trim() - for (dirPath in dirs.lines()) { - if (dirPath.isBlank()) continue - val dir = File(dirPath) - if (!dir.isDirectory) continue - // New format - val newFormatFile = File(dir, "reachability-metadata.json") - if (newFormatFile.exists()) { - val before = countBaselineTypes(libraryEntries) - collectBaseline( - slurper, - newFormatFile.readText(), - libraryEntries, - libraryProxies, - libraryResourceJsons, - libraryResourceGlobs, - ) - l2Count += countBaselineTypes(libraryEntries) - before - } - // Old format - for (oldFile in listOf("reflect-config.json", "jni-config.json")) { - val f = File(dir, oldFile) - if (!f.exists()) continue - val section = if (oldFile.startsWith("reflect")) "reflection" else "jni" - - @Suppress("UNCHECKED_CAST") - val entries = slurper.parseText(f.readText()) as? List> ?: continue - val sectionMap = libraryEntries.getOrPut(section) { mutableMapOf() } - for (e in entries) { - val typeName = e["type"] as? String ?: continue - val existing = sectionMap[typeName] - if (existing == null) { - sectionMap[typeName] = e.toMutableMap() - l2Count++ - } else { - mergeTypeEntryInto(e, existing) - } - } - } - // Old-format resource-config.json - val resFile = File(dir, "resource-config.json") - if (resFile.exists()) { - @Suppress("UNCHECKED_CAST") - val resRoot = slurper.parseText(resFile.readText()) as? Map - - @Suppress("UNCHECKED_CAST") - val resources = resRoot?.get("resources") as? Map - - @Suppress("UNCHECKED_CAST") - val includes = resources?.get("includes") as? List> - includes?.forEach { inc -> - val pattern = inc["pattern"] as? String - if (pattern != null) { - libraryResourceGlobs.add(Pair(null, pattern)) - libraryResourceJsons.add(JsonOutput.toJson(mapOf("glob" to pattern))) - } - } - } - } - } - - // Source 3: L3 — platform-specific metadata from plugin JAR - var l3Count = 0 - val platform = platformName.get() - val resourcePath = "nucleus/graalvm/platform-metadata/$platform-reachability-metadata.json" - val stream = javaClass.classLoader.getResourceAsStream(resourcePath) - if (stream != null) { - val text = stream.bufferedReader().use { it.readText() } - val before = countBaselineTypes(libraryEntries) - collectBaseline(slurper, text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) - l3Count = countBaselineTypes(libraryEntries) - before - } - - // Source 4: Static analysis output - var staticCount = 0 - for (dir in staticAnalysisDir.files) { - val staticFile = if (dir.isDirectory) File(dir, "reachability-metadata.json") else dir - if (staticFile.exists() && staticFile.name.endsWith(".json")) { - val before = countBaselineTypes(libraryEntries) - collectBaseline( - slurper, - staticFile.readText(), - libraryEntries, - libraryProxies, - libraryResourceJsons, - libraryResourceGlobs, - ) - staticCount = countBaselineTypes(libraryEntries) - before - } - } - - // Add main class to baseline - val mc = mainClass.orNull - if (!mc.isNullOrBlank()) { - val reflectionMap = libraryEntries.getOrPut("reflection") { mutableMapOf() } - val mainClassEntry = - mutableMapOf( - "type" to mc, - "jniAccessible" to true, - "methods" to - listOf( - mapOf("name" to "main", "parameterTypes" to listOf("java.lang.String[]")), - ), - ) - val existing = reflectionMap[mc] - if (existing == null) { - reflectionMap[mc] = mainClassEntry - } else { - mergeTypeEntryInto(mainClassEntry, existing) - } - } - - logger.lifecycle( - "Metadata baseline: L1=$l1Count types, L2=$l2Count types, " + - "L3=$l3Count types, static=$staticCount types, " + - "${includeResourcePatterns.size} resource patterns", - ) - - // Parse the project's manual config - @Suppress("UNCHECKED_CAST") - val targetRoot = slurper.parseText(targetFile.readText()) as MutableMap - var totalRemoved = 0 - val removedEntries = mutableListOf() - - // Clean reflection/jni sections against same-section AND cross-section baselines - // (static analyzer puts SQLite in "jni", manual config may have it in "reflection") - for (projectSection in listOf("reflection", "jni")) { - @Suppress("UNCHECKED_CAST") - val targetArray = targetRoot[projectSection] as? MutableList> ?: continue - val before = targetArray.size - - targetArray.removeAll { projectEntry -> - // Handle proxy entries: {"type": {"proxy": [...]}} - val proxyKey = proxyKey(projectEntry) - if (proxyKey != null) { - if (proxyKey in libraryProxies) { - removedEntries.add(" [$projectSection proxy] $proxyKey") - return@removeAll true - } - return@removeAll false - } - - val typeName = projectEntry["type"] as? String ?: return@removeAll false - - // Check same section first, then cross-section - for (baselineSection in listOf("reflection", "jni")) { - val sectionMap = libraryEntries[baselineSection] ?: continue - val libEntry = sectionMap[typeName] ?: continue - if (libraryCoversProjectEntry(libEntry, projectEntry)) { - val source = if (baselineSection == projectSection) baselineSection else "$projectSection via $baselineSection" - removedEntries.add(" [$source] $typeName") - return@removeAll true - } - } - - // For Kotlin data objects: tracing agent emits Foo$Companion with serializer(), - // but the actual class is Foo (no Companion class exists). If the parent class - // is in the baseline with serializer(), consider the Companion entry covered. - if (typeName.endsWith("\$Companion")) { - val parentType = typeName.removeSuffix("\$Companion") - for (baselineSection in listOf("reflection", "jni")) { - val sectionMap = libraryEntries[baselineSection] ?: continue - val parentEntry = sectionMap[parentType] ?: continue - - @Suppress("UNCHECKED_CAST") - val parentMethods = parentEntry["methods"] as? List> - val hasSerializer = parentMethods?.any { it["name"] == "serializer" } == true - if (hasSerializer) { - removedEntries.add(" [$projectSection via parent] $typeName") - return@removeAll true - } - } - } - - false - } - totalRemoved += before - targetArray.size - } - - // Clean resources section - @Suppress("UNCHECKED_CAST") - val targetResources = targetRoot["resources"] as? MutableList> - if (targetResources != null) { - val before = targetResources.size - targetResources.removeAll { entry -> - val covered = - isResourceEntryCovered( - entry, - libraryResourceJsons, - libraryResourceGlobs, - includeResourcePatterns, - ) - if (covered) { - val glob = entry["glob"] ?: entry["bundle"] ?: "?" - removedEntries.add(" [resource] $glob") - } - covered - } - totalRemoved += before - targetResources.size - } - - if (totalRemoved > 0) { - // Remove empty sections - for (section in listOf("reflection", "jni", "resources", "bundles", "serialization")) { - @Suppress("UNCHECKED_CAST") - val arr = targetRoot[section] as? List<*> - if (arr != null && arr.isEmpty()) { - targetRoot.remove(section) - } - } - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetRoot)) + "\n") - logger.lifecycle("Removed $totalRemoved entries from $targetFile:") - removedEntries.forEach { logger.lifecycle(it) } - } else { - logger.lifecycle("No redundant entries found — manual config is already clean") - } - - // Report remaining entries - var remaining = 0 - for (section in listOf("reflection", "jni")) { - @Suppress("UNCHECKED_CAST") - val arr = targetRoot[section] as? List<*> - remaining += arr?.size ?: 0 - } - @Suppress("UNCHECKED_CAST") - val resArr = targetRoot["resources"] as? List<*> - remaining += resArr?.size ?: 0 - logger.lifecycle("Remaining manual entries: $remaining") - } - - private fun countBaselineTypes(entries: Map>>): Int = entries.values.sumOf { it.size } - - /** Extract a canonical key for proxy entries, or null if not a proxy. */ - @Suppress("UNCHECKED_CAST") - private fun proxyKey(entry: Map): String? { - val typeValue = entry["type"] as? Map ?: return null - val proxyList = typeValue["proxy"] as? List ?: return null - return proxyList.sorted().joinToString(",") - } - - private fun collectBaseline( - slurper: JsonSlurper, - jsonText: String, - libraryEntries: MutableMap>>, - libraryProxies: MutableSet, - libraryResourceJsons: MutableSet, - libraryResourceGlobs: MutableList>, - ) { - @Suppress("UNCHECKED_CAST") - val root = slurper.parseText(jsonText) as? Map ?: return - - for (section in listOf("reflection", "jni")) { - @Suppress("UNCHECKED_CAST") - val entries = root[section] as? List> ?: continue - val sectionMap = libraryEntries.getOrPut(section) { mutableMapOf() } - for (e in entries) { - // Handle proxy entries - val pk = proxyKey(e) - if (pk != null) { - libraryProxies.add(pk) - continue - } - val typeName = e["type"] as? String ?: continue - val existing = sectionMap[typeName] - if (existing == null) { - sectionMap[typeName] = e.toMutableMap() - } else { - mergeTypeEntryInto(e, existing) - } - } - } - - @Suppress("UNCHECKED_CAST") - val resources = root["resources"] as? List> ?: return - for (e in resources) { - libraryResourceJsons.add(JsonOutput.toJson(e)) - val glob = e["glob"] as? String - if (glob != null) { - val module = e["module"] as? String - libraryResourceGlobs.add(Pair(module, glob)) - } - } - } - - /** Merge source entry into target, only upgrading (never downgrading). */ - private fun mergeTypeEntryInto( - source: Map, - target: MutableMap, - ) { - val broadFlags = - listOf( - "allDeclaredFields", - "allDeclaredMethods", - "allDeclaredConstructors", - "allPublicFields", - "allPublicMethods", - "allPublicConstructors", - "unsafeAllocated", - "jniAccessible", - ) - for (flag in broadFlags) { - if (source[flag] == true) target[flag] = true - } - - for (memberKey in listOf("methods", "fields", "queriedMethods")) { - @Suppress("UNCHECKED_CAST") - val sourceMembers = source[memberKey] as? List> ?: continue - - @Suppress("UNCHECKED_CAST") - val targetMembers = - (target[memberKey] as? MutableList>) - ?: mutableListOf>().also { target[memberKey] = it } - - val existingSigs = targetMembers.map { sig(it) }.toMutableSet() - for (m in sourceMembers) { - val s = sig(m) - if (s !in existingSigs) { - targetMembers.add(m) - existingSigs.add(s) - } - } - } - } - - private fun sig(obj: Map): String { - val name = obj["name"] as? String ?: "" - - @Suppress("UNCHECKED_CAST") - val params = (obj["parameterTypes"] as? List)?.joinToString(",") ?: "" - return "$name($params)" - } - - /** - * True if the baseline entry fully covers the project entry. - * When checking cross-section (jni baseline vs reflection project), the jniAccessible - * flag mismatch is ignored since having the type in jni config is sufficient. - */ - private fun libraryCoversProjectEntry( - libEntry: Map, - projectEntry: Map, - ): Boolean { - // Check broad flags: if project needs a flag, library must have it - // Exception: jniAccessible — if the type exists in the jni section baseline, - // the flag is implicitly satisfied - val broadFlags = - listOf( - "allDeclaredFields", - "allDeclaredMethods", - "allDeclaredConstructors", - "allPublicFields", - "allPublicMethods", - "allPublicConstructors", - "unsafeAllocated", - ) - for (flag in broadFlags) { - if (projectEntry[flag] == true && libEntry[flag] != true) return false - } - - for (memberKey in listOf("methods", "fields", "queriedMethods")) { - @Suppress("UNCHECKED_CAST") - val projectMembers = projectEntry[memberKey] as? List> - if (projectMembers.isNullOrEmpty()) continue - - val allDeclaredKey = - when (memberKey) { - "fields" -> "allDeclaredFields" - "methods", "queriedMethods" -> "allDeclaredMethods" - else -> null - } - if (allDeclaredKey != null && libEntry[allDeclaredKey] == true) continue - - @Suppress("UNCHECKED_CAST") - val libMembers = libEntry[memberKey] as? List> ?: return false - - val libSigs = libMembers.map { sig(it) }.toSet() - for (pm in projectMembers) { - if (sig(pm) !in libSigs) return false - } - } - - return true - } - - /** True if a resource entry is covered by the baseline. */ - private fun isResourceEntryCovered( - entry: Map, - libraryResourceJsons: Set, - libraryResourceGlobs: List>, - includeResourcePatterns: List, - ): Boolean { - if (JsonOutput.toJson(entry) in libraryResourceJsons) return true - - val glob = entry["glob"] as? String ?: return false - val module = entry["module"] as? String - - for ((libModule, libGlob) in libraryResourceGlobs) { - if (module != libModule) continue - if (libGlob.contains('*') || libGlob.contains('?')) { - if (globMatches(libGlob, glob)) return true - } - // Exact match - if (libGlob == glob) return true - } - - if (module == null) { - for (pattern in includeResourcePatterns) { - if (pattern.matches(glob)) return true - } - } - - return false - } - - private fun globMatches( - pattern: String, - path: String, - ): Boolean { - val regex = - buildString { - append("^") - for (ch in pattern) { - when (ch) { - '*' -> append(".*") - '?' -> append(".") - '.', '(', ')', '[', ']', '{', '}', '\\', '^', '$', '|', '+' -> { - append("\\") - append(ch) - } - else -> append(ch) - } - } - append("$") - } - return try { - Regex(regex).matches(path) - } catch (_: Exception) { - false - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt deleted file mode 100644 index 8eccfe184..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/DmgBackgroundPadding.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.logging.Logger -import java.io.File -import javax.imageio.ImageIO - -/** - * Height of the macOS DMG window title bar in pixels. - * - * The Finder window bounds include the title bar, so the visible content area - * is `boundsHeight - titleBarHeight`. This constant is used by the native - * AppleScript DMG path and the electron-builder path to ensure the window - * is large enough for the full background image to be visible. - */ -internal const val MACOS_DMG_TITLE_BAR_HEIGHT = 28 - -/** - * Copies a DMG background image to [outputDir] without modification. - * - * electron-builder uses the image dimensions as the DMG window size. - * The macOS title bar takes [MACOS_DMG_TITLE_BAR_HEIGHT] pixels, so the window - * height is adjusted accordingly in the generated config (windowOverride). - * - * TIFF files must never be re-encoded because ImageIO destroys Apple's - * multi-resolution TIFF metadata (2x + 1x layers with DPI info). - * PNG files are also copied directly to avoid any quality loss from re-encoding. - * - * @return the copied image file in [outputDir] - */ -internal fun padDmgBackgroundForTitleBar( - source: File, - outputDir: File, - logger: Logger? = null, -): File { - outputDir.mkdirs() - val output = File(outputDir, source.name) - source.copyTo(output, overwrite = true) - logger?.info("Copied DMG background directly: ${source.name}") - - // Also copy the @2x Retina variant if present alongside the source - val retinaSource = File(source.parentFile, "${source.nameWithoutExtension}@2x.${source.extension}") - if (retinaSource.isFile) { - retinaSource.copyTo(File(outputDir, retinaSource.name), overwrite = true) - logger?.info("Copied @2x Retina DMG background: ${retinaSource.name}") - } - - return output -} - -/** - * Reads the dimensions of an image file. - * - * @return a [Pair] of (width, height) in pixels, or `null` if the image cannot be read. - */ -internal fun readImageDimensions(file: File): Pair? { - return try { - val readers = ImageIO.getImageReadersBySuffix(file.extension) - if (!readers.hasNext()) return null - val reader = readers.next() - ImageIO.createImageInputStream(file).use { stream -> - reader.input = stream - val width = reader.getWidth(0) - val height = reader.getHeight(0) - reader.dispose() - width to height - } - } catch (_: Exception) { - null - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt deleted file mode 100644 index 2a6015415..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExecutableType.kt +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -@file:Suppress("ktlint:standard:filename") - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import org.gradle.api.logging.Logger -import java.io.File - -internal const val EXECUTABLE_TYPE_DEV = "dev" -private const val JAVA_OPTIONS_SECTION = "[JavaOptions]" -private const val JAVA_OPTIONS_PREFIX = "java-options=" -private const val EXECUTABLE_TYPE_OPTION_PREFIX = "$JAVA_OPTIONS_PREFIX-D$APP_EXECUTABLE_TYPE=" - -internal val TargetFormat.executableTypeValue: String - get() = - when (this) { - TargetFormat.Exe -> "exe" - TargetFormat.Msi -> "msi" - TargetFormat.Dmg -> "dmg" - TargetFormat.Pkg -> "pkg" - TargetFormat.Deb -> "deb" - TargetFormat.Rpm -> "rpm" - TargetFormat.RawAppImage -> EXECUTABLE_TYPE_DEV - TargetFormat.AppImage -> "appimage" - TargetFormat.Nsis -> "nsis" - TargetFormat.NsisWeb -> "nsis-web" - TargetFormat.Portable -> "portable" - TargetFormat.AppX -> "appx" - TargetFormat.Snap -> "snap" - TargetFormat.Flatpak -> "flatpak" - TargetFormat.Zip -> "zip" - TargetFormat.Tar -> "tar" - TargetFormat.SevenZ -> "7z" - } - -internal fun updateExecutableTypeInAppImage( - appImageDir: File, - targetFormat: TargetFormat, - logger: Logger, - appVersion: String? = null, -) { - val cfgFiles = - appImageDir - .walkTopDown() - .filter { it.isFile && it.extension.equals("cfg", ignoreCase = true) && it.name != "jvm.cfg" } - .toList() - - if (cfgFiles.isEmpty()) { - // GraalVM native image: no .cfg launcher, write a marker file next to the binary - writeExecutableTypeMarker(appImageDir, targetFormat, appVersion, logger) - return - } - - cfgFiles.forEach { cfgFile -> - updateExecutableTypeInCfg(cfgFile, targetFormat.executableTypeValue) - } -} - -internal const val EXECUTABLE_TYPE_MARKER = ".nucleus-executable-type" - -private fun writeExecutableTypeMarker( - appImageDir: File, - targetFormat: TargetFormat, - appVersion: String?, - logger: Logger, -) { - // Find the directory that contains the native binary - val dir = findNativeBinaryDir(appImageDir) - if (dir == null) { - logger.warn("Could not locate native binary directory in ${appImageDir.absolutePath}") - return - } - val marker = dir.resolve(EXECUTABLE_TYPE_MARKER) - val content = - buildString { - appendLine(targetFormat.executableTypeValue) - if (appVersion != null) appendLine(appVersion) - } - marker.writeText(content) - logger.info("Wrote executable type '${targetFormat.executableTypeValue}' (version=$appVersion) to ${marker.absolutePath}") -} - -private fun findNativeBinaryDir(appImageDir: File): File? { - // macOS: AppName.app/Contents/MacOS/ - val macOsDir = - appImageDir - .walkTopDown() - .maxDepth(3) - .firstOrNull { it.isDirectory && it.name == "MacOS" && it.parentFile?.name == "Contents" } - if (macOsDir != null) return macOsDir - - // Linux/Windows GraalVM native image: the binary sits directly in appImageDir. - // The runtime reads the marker from the parent of the executable - // (ProcessHandle.current().info().command() → parentFile), so the marker - // must be written to the same directory as the binary. - return appImageDir -} - -private fun updateExecutableTypeInCfg( - cfgFile: File, - executableType: String, -) { - val updatedOption = "$JAVA_OPTIONS_PREFIX-D$APP_EXECUTABLE_TYPE=$executableType" - val lines = cfgFile.readLines().toMutableList() - var inJavaOptions = false - var javaOptionsSectionIndex = -1 - var replaced = false - - lines.forEachIndexed { index, line -> - val trimmed = line.trim() - when { - trimmed == JAVA_OPTIONS_SECTION -> { - inJavaOptions = true - if (javaOptionsSectionIndex == -1) { - javaOptionsSectionIndex = index - } - } - trimmed.startsWith("[") -> inJavaOptions = false - inJavaOptions && trimmed.startsWith(EXECUTABLE_TYPE_OPTION_PREFIX) && !replaced -> { - lines[index] = updatedOption - replaced = true - } - } - } - - if (!replaced) { - if (javaOptionsSectionIndex == -1) { - lines.add(JAVA_OPTIONS_SECTION) - lines.add(updatedOption) - } else { - lines.add(javaOptionsSectionIndex + 1, updatedOption) - } - } - - cfgFile.writeText(lines.joinToString(System.lineSeparator())) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt deleted file mode 100644 index de73591fd..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ExternalToolRunner.kt +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.internal.utils.ioFile -import org.gradle.api.file.Directory -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.process.ExecOperations -import org.gradle.process.ExecResult -import java.io.ByteArrayInputStream -import java.io.File -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter - -internal class ExternalToolRunner( - private val verbose: Property, - private val logsDir: Provider, - private val execOperations: ExecOperations, -) { - internal enum class LogToConsole { - Always, - Never, - OnlyWhenVerbose, - } - - operator fun invoke( - tool: File, - args: Collection, - environment: Map = emptyMap(), - workingDir: File? = null, - checkExitCodeIsNormal: Boolean = true, - processStdout: Function1? = null, - logToConsole: LogToConsole = LogToConsole.OnlyWhenVerbose, - stdinStr: String? = null, - sensitiveArgs: Set = emptySet(), - ): ExecResult { - val logsDir = logsDir.ioFile - logsDir.mkdirs() - - val toolName = tool.nameWithoutExtension - val outFile = logsDir.resolve("$toolName-${currentTimeStamp()}-out.txt") - val errFile = logsDir.resolve("$toolName-${currentTimeStamp()}-err.txt") - - val result = - outFile.outputStream().buffered().use { outFileStream -> - errFile.outputStream().buffered().use { errFileStream -> - execOperations.exec { spec -> - spec.executable = tool.absolutePath - spec.args(*args.toTypedArray()) - workingDir?.let { wd -> spec.workingDir(wd) } - spec.environment(environment) - // check exit value later - spec.isIgnoreExitValue = true - - if (stdinStr != null) { - spec.standardInput = ByteArrayInputStream(stdinStr.toByteArray()) - } - - @Suppress("NAME_SHADOWING") - val logToConsole = - when (logToConsole) { - LogToConsole.Always -> true - LogToConsole.Never -> false - LogToConsole.OnlyWhenVerbose -> verbose.get() - } - if (logToConsole) { - spec.standardOutput = spec.standardOutput.alsoOutputTo(outFileStream) - spec.errorOutput = spec.errorOutput.alsoOutputTo(errFileStream) - } else { - spec.standardOutput = outFileStream - spec.errorOutput = errFileStream - } - } - } - } - - if (checkExitCodeIsNormal && result.exitValue != 0) { - val errMsg = - buildString { - appendLine("External tool execution failed:") - val cmd = - ( - listOf(tool.absolutePath) + - args.map { - if (it in sensitiveArgs) "****" else it - } - ).joinToString(", ") - appendLine("* Command: [$cmd]") - appendLine("* Working dir: [${workingDir?.absolutePath.orEmpty()}]") - appendLine("* Exit code: ${result.exitValue}") - appendLine("* Standard output log: ${outFile.absolutePath}") - appendLine("* Error log: ${errFile.absolutePath}") - } - - error(errMsg) - } - - if (processStdout != null) { - processStdout(outFile.readText()) - } - - if (result.exitValue == 0) { - outFile.delete() - errFile.delete() - } - - return result - } - - private fun currentTimeStamp() = - LocalDateTime - .now() - .format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt deleted file mode 100644 index 0eef06cd2..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt +++ /dev/null @@ -1,136 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import groovy.json.JsonOutput -import groovy.json.JsonSlurper -import org.gradle.api.DefaultTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.tasks.CacheableTask -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import java.io.File -import java.util.jar.JarFile - -/** - * Filters per-library GraalVM metadata based on the runtime classpath and merges - * the result into a single `reachability-metadata.json`. - * - * Each per-library file lives in `nucleus/graalvm/library-metadata/` inside the plugin - * JAR and may declare `_meta.matchPackages`. If present, the file is only included when - * at least one classpath JAR contains classes under one of those package prefixes. - * Files without `matchPackages` are always included. - */ -@CacheableTask -abstract class FilterLibraryMetadataTask : DefaultTask() { - /** The runtime classpath JARs/dirs to check for conditional library presence. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val runtimeClasspath: ConfigurableFileCollection - - /** Output directory where the merged `reachability-metadata.json` is written. */ - @get:OutputDirectory - abstract val outputDir: DirectoryProperty - - @TaskAction - fun filter() { - val classpathPackages = buildClasspathPackageIndex(runtimeClasspath.files) - - val metadataDir = "nucleus/graalvm/library-metadata" - val index = - javaClass.classLoader - .getResourceAsStream("$metadataDir/index.txt") - ?.bufferedReader() - ?.readLines() - ?.filter { it.isNotBlank() } - ?: emptyList() - - val slurper = JsonSlurper() - val mergedReflection = mutableListOf() - val mergedResources = mutableListOf() - var includedCount = 0 - var skippedCount = 0 - - for (fileName in index) { - val stream = javaClass.classLoader.getResourceAsStream("$metadataDir/$fileName") ?: continue - - @Suppress("UNCHECKED_CAST") - val root = slurper.parseText(stream.bufferedReader().use { it.readText() }) as Map - - @Suppress("UNCHECKED_CAST") - val meta = root["_meta"] as? Map - - @Suppress("UNCHECKED_CAST") - val matchPackages = meta?.get("matchPackages") as? List - - if (matchPackages != null) { - val found = matchPackages.any { prefix -> classpathPackages.any { it.startsWith(prefix) } } - if (!found) { - skippedCount++ - logger.info("Skipping $fileName: no matching packages on classpath") - continue - } - } - - includedCount++ - - @Suppress("UNCHECKED_CAST") - val reflection = root["reflection"] as? List - if (reflection != null) mergedReflection.addAll(reflection) - - @Suppress("UNCHECKED_CAST") - val resources = root["resources"] as? List - if (resources != null) mergedResources.addAll(resources) - } - - val merged = mutableMapOf() - if (mergedReflection.isNotEmpty()) merged["reflection"] = mergedReflection - if (mergedResources.isNotEmpty()) merged["resources"] = mergedResources - - val outDir = outputDir.get().asFile - outDir.mkdirs() - File(outDir, "reachability-metadata.json") - .writeText(JsonOutput.prettyPrint(JsonOutput.toJson(merged)) + "\n") - - logger.lifecycle( - "Library metadata: included $includedCount files, skipped $skippedCount conditional files", - ) - } -} - -/** - * Scans classpath JARs and class directories to build a set of all Java package names present. - * Only reads the ZIP central directory (fast) — no class file parsing. - */ -private fun buildClasspathPackageIndex(files: Set): Set { - val packages = mutableSetOf() - for (file in files) { - if (!file.exists()) continue - if (file.isDirectory) { - file - .walkTopDown() - .filter { it.isFile && it.name.endsWith(".class") } - .forEach { classFile -> - val relative = classFile.relativeTo(file).path - val pkg = relative.substringBeforeLast('/', "").replace('/', '.') - if (pkg.isNotEmpty()) packages.add(pkg) - } - } else if (file.name.endsWith(".jar")) { - try { - JarFile(file).use { jar -> - for (entry in jar.entries()) { - if (entry.name.endsWith(".class") && !entry.isDirectory) { - val pkg = entry.name.substringBeforeLast('/', "").replace('/', '.') - if (pkg.isNotEmpty()) packages.add(pkg) - } - } - } - } catch (_: Exception) { - // Skip unreadable JARs - } - } - } - return packages -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt deleted file mode 100644 index 96d644542..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/InfoPlistBuilder.kt +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* -import java.io.File -import kotlin.reflect.KProperty - -private const val indent = " " - -private fun indentForLevel(level: Int) = indent.repeat(level) - -internal class InfoPlistBuilder( - private val extraPlistKeysRawXml: String? = null, -) { - internal sealed class InfoPlistValue { - abstract fun asPlistEntry(nestingLevel: Int): String - - data class InfoPlistListValue( - val elements: List, - ) : InfoPlistValue() { - override fun asPlistEntry(nestingLevel: Int): String = - if (elements.isEmpty()) { - "${indentForLevel(nestingLevel)}" - } else { - elements.joinToString( - separator = "\n", - prefix = "${indentForLevel(nestingLevel)}\n", - postfix = "\n${indentForLevel(nestingLevel)}", - ) { - it.asPlistEntry(nestingLevel + 1) - } - } - - constructor(vararg elements: InfoPlistValue) : this(elements.asList()) - } - - data class InfoPlistMapValue( - val elements: Map, - ) : InfoPlistValue() { - override fun asPlistEntry(nestingLevel: Int): String = - if (elements.isEmpty()) { - "${indentForLevel(nestingLevel)}" - } else { - elements.entries.joinToString( - separator = "\n", - prefix = "${indentForLevel(nestingLevel)}\n", - postfix = "\n${indentForLevel(nestingLevel)}", - ) { (key, value) -> - "${indentForLevel(nestingLevel + 1)}${key.name}\n${value.asPlistEntry(nestingLevel + 1)}" - } - } - - constructor(vararg elements: Pair) : this(elements.toMap()) - } - - data class InfoPlistStringValue( - val value: String, - ) : InfoPlistValue() { - override fun asPlistEntry(nestingLevel: Int): String = - if (value.isEmpty()) { - "${indentForLevel( - nestingLevel, - )}" - } else { - "${indentForLevel(nestingLevel)}$value" - } - } - - data class InfoPlistBooleanValue( - val value: Boolean, - ) : InfoPlistValue() { - override fun asPlistEntry(nestingLevel: Int): String { - val tag = if (value) "true" else "false" - return "${indentForLevel(nestingLevel)}<$tag/>" - } - } - } - - private val values = LinkedHashMap() - - operator fun get(key: InfoPlistKey): InfoPlistValue? = values[key] - - operator fun set( - key: InfoPlistKey, - value: String?, - ) = set(key, value?.let(::InfoPlistStringValue)) - - operator fun set( - key: InfoPlistKey, - value: List?, - ) = set(key, value?.let(::InfoPlistListValue)) - - operator fun set( - key: InfoPlistKey, - value: Map?, - ) = set(key, value?.let(::InfoPlistMapValue)) - - operator fun set( - key: InfoPlistKey, - value: Boolean?, - ) = set(key, value?.let(InfoPlistValue::InfoPlistBooleanValue)) - - operator fun set( - key: InfoPlistKey, - value: InfoPlistValue?, - ) { - if (value != null) { - values[key] = value - } else { - values.remove(key) - } - } - - fun writeToFile(file: File) { - file.writer().buffered().use { writer -> - writer.run { - appendLine("") - appendLine("") - appendLine("") - appendLine("${indentForLevel(1)}") - for ((k, v) in values) { - appendLine("${indentForLevel(2)}${k.name}") - appendLine(v.asPlistEntry(2)) - } - extraPlistKeysRawXml?.let { appendLine(it) } - appendLine("${indentForLevel(1)}") - appendLine("") - } - } - } -} - -internal data class InfoPlistKey( - val name: String, -) - -internal object PlistKeys { - private operator fun getValue( - thisRef: PlistKeys, - property: KProperty<*>, - ): InfoPlistKey = InfoPlistKey(property.name) - - val LSMinimumSystemVersion by this - val CFBundleDevelopmentRegion by this - val CFBundleAllowMixedLocalizations by this - val CFBundleDocumentTypes by this - val CFBundleTypeRole by this - val CFBundleTypeExtensions by this - val CFBundleTypeIconFile by this - val CFBundleTypeMIMETypes by this - val CFBundleTypeName by this - val CFBundleTypeOSTypes by this - val CFBundleExecutable by this - val CFBundleIconFile by this - val CFBundleIconName by this - val CFBundleIdentifier by this - val CFBundleInfoDictionaryVersion by this - val CFBundleName by this - val CFBundleDisplayName by this - val CFBundlePackageType by this - val CFBundleShortVersionString by this - val CFBundleSignature by this - val LSApplicationCategoryType by this - val CFBundleVersion by this - val NSHumanReadableCopyright by this - val NSSupportsAutomaticGraphicsSwitching by this - val NSHighResolutionCapable by this - val ITSAppUsesNonExemptEncryption by this - val CFBundleURLTypes by this - val CFBundleURLName by this - val CFBundleURLSchemes by this -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt deleted file mode 100644 index a846c0450..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationContext.kt +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildType -import dev.nucleusframework.nucleus.internal.KOTLIN_JVM_PLUGIN_ID -import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import dev.nucleusframework.nucleus.internal.javaSourceSets -import dev.nucleusframework.nucleus.internal.mppExt -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.Target -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.jdkArch -import dev.nucleusframework.nucleus.internal.utils.joinDashLowercaseNonEmpty -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.file.Directory -import org.gradle.api.provider.Provider -import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget - -internal data class JvmApplicationContext( - val project: Project, - private val appInternal: JvmApplicationInternal, - val buildType: JvmApplicationBuildType, - private val taskGroup: String = NUCLEUS_TASK_GROUP, -) { - val app: JvmApplicationData - get() = appInternal.data - - val appDirName: String - get() = joinDashLowercaseNonEmpty(appInternal.name, buildType.classifier) - - val appTmpDir: Provider - get() = - project.layout.buildDirectory.dir( - "compose/tmp/$appDirName", - ) - - fun T.useAppRuntimeFiles(fn: T.(JvmApplicationRuntimeFiles) -> Unit) { - val runtimeFiles = - app.jvmApplicationRuntimeFilesProvider?.jvmApplicationRuntimeFiles(project) - ?: JvmApplicationRuntimeFiles( - allRuntimeJars = app.fromFiles, - mainJar = app.mainJar, - taskDependencies = app.dependenciesTaskNames.toTypedArray(), - ) - runtimeFiles.configureUsageBy(this, fn) - } - - /** Architecture of the configured JDK (may differ from the Gradle daemon's arch when cross-building). */ - val targetArch by lazy { jdkArch(java.io.File(app.javaHome)) } - - /** Target combining the current OS with the configured JDK's architecture. */ - val targetTarget by lazy { Target(currentOS, targetArch) } - - val tasks = JvmTasks(project, buildType, taskGroup) - - val packageNameProvider: Provider - get() = project.provider { appInternal.nativeDistributions.packageName ?: project.name } - - /** - * Resolves the platform-specific application ID: - * - macOS: bundleID > macOS.packageName > root packageName > project.name - * - Linux: linux.packageName > root packageName > project.name - * - Windows: windows.packageName > root packageName > project.name - */ - fun resolvedAppIdProvider(): Provider = - project.provider { - val dist = appInternal.nativeDistributions - when (currentOS) { - OS.MacOS -> { - val mac = dist.macOS - mac.bundleID ?: mac.packageName ?: dist.packageName ?: project.name - } - OS.Linux -> dist.linux.packageName ?: dist.packageName ?: project.name - OS.Windows -> dist.windows.packageName ?: dist.packageName ?: project.name - } - } - - inline fun provider(noinline fn: () -> T): Provider = project.provider(fn) - - fun configureDefaultApp() { - if (project.plugins.hasPlugin(KOTLIN_MPP_PLUGIN_ID)) { - var isJvmTargetConfigured = false - project.mppExt.targets.all { target -> - if (target is KotlinJvmTarget) { - if (!isJvmTargetConfigured) { - appInternal.from(target) - isJvmTargetConfigured = true - } else { - project.logger.error( - "w: Default configuration for Compose Desktop Application is disabled: " + - "multiple Kotlin JVM targets definitions are detected. " + - "Specify, which target to use by using `compose.desktop.application.from(kotlinMppTarget)`", - ) - appInternal.disableDefaultConfiguration() - } - } - } - } else if (project.plugins.hasPlugin(KOTLIN_JVM_PLUGIN_ID)) { - val mainSourceSet = project.javaSourceSets.getByName("main") - appInternal.from(mainSourceSet) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt deleted file mode 100644 index f3fd1a650..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationData.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildTypes -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions -import dev.nucleusframework.nucleus.internal.utils.new -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory -import javax.inject.Inject - -internal open class JvmApplicationData - @Inject - constructor( - objects: ObjectFactory, - private val providers: ProviderFactory, - ) { - var jvmApplicationRuntimeFilesProvider: JvmApplicationRuntimeFilesProvider? = null - var isDefaultConfigurationEnabled: Boolean = true - val fromFiles: ConfigurableFileCollection = objects.fileCollection() - val dependenciesTaskNames: MutableList = ArrayList() - var mainClass: String? = null - val mainJar: RegularFileProperty = objects.fileProperty() - - private var customJavaHome: String? = null - var javaHome: String - get() = customJavaHome ?: System.getProperty("java.home") ?: error("'java.home' system property is not set") - set(value) { - customJavaHome = value - } - val javaHomeProvider: Provider - get() = providers.provider { javaHome } - val args: MutableList = ArrayList() - val jvmArgs: MutableList = ArrayList() - val nativeDistributions: JvmApplicationDistributions = objects.new() - val buildTypes: JvmApplicationBuildTypes = objects.new() - val graalvm: GraalvmSettings = objects.new() - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt deleted file mode 100644 index ddecf942a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationInternal.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildTypes -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions -import dev.nucleusframework.nucleus.internal.utils.new -import org.gradle.api.Action -import org.gradle.api.Task -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.model.ObjectFactory -import org.gradle.api.tasks.SourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget -import javax.inject.Inject - -internal open class JvmApplicationInternal - @Inject - constructor( - val name: String, - objects: ObjectFactory, - ) : JvmApplication() { - internal val data: JvmApplicationData = objects.new() - - final override fun from(from: SourceSet) { - data.jvmApplicationRuntimeFilesProvider = JvmApplicationRuntimeFilesProvider.FromGradleSourceSet(from) - } - - final override fun from(from: KotlinTarget) { - check(from is KotlinJvmTarget) { - "Non JVM Kotlin MPP targets are not supported: ${from.javaClass.canonicalName} " + - "is not subtype of ${KotlinJvmTarget::class.java.canonicalName}" - } - data.jvmApplicationRuntimeFilesProvider = JvmApplicationRuntimeFilesProvider.FromKotlinMppTarget(from) - } - - final override fun disableDefaultConfiguration() { - data.isDefaultConfigurationEnabled = false - } - - final override fun fromFiles(vararg files: Any) { - data.fromFiles.from(*files) - } - - final override fun dependsOn(vararg tasks: String) { - data.dependenciesTaskNames.addAll(tasks) - } - - final override fun dependsOn(vararg tasks: Task) { - tasks.mapTo(data.dependenciesTaskNames) { it.path } - } - - final override var mainClass: String? by data::mainClass - final override val mainJar: RegularFileProperty by data::mainJar - final override var javaHome: String by data::javaHome - - final override val args: MutableList by data::args - - final override fun args(vararg args: String) { - data.args.addAll(args) - } - - final override val jvmArgs: MutableList by data::jvmArgs - - final override fun jvmArgs(vararg jvmArgs: String) { - data.jvmArgs.addAll(jvmArgs) - } - - final override val nativeDistributions: JvmApplicationDistributions by data::nativeDistributions - - final override fun nativeDistributions(fn: Action) { - fn.execute(data.nativeDistributions) - } - - final override val buildTypes: JvmApplicationBuildTypes by data::buildTypes - - final override fun buildTypes(fn: Action) { - fn.execute(data.buildTypes) - } - - final override val graalvm: GraalvmSettings by data::graalvm - - final override fun graalvm(fn: Action) { - fn.execute(data.graalvm) - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt deleted file mode 100644 index 5b33a82d3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmApplicationRuntimeFiles.kt +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.file.FileCollection -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.SourceSet -import org.gradle.jvm.tasks.Jar -import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget - -internal class JvmApplicationRuntimeFiles( - val allRuntimeJars: FileCollection, - val mainJar: Provider, - private val taskDependencies: Array, -) { - operator fun component1() = allRuntimeJars - - operator fun component2() = mainJar - - fun configureUsageBy( - task: T, - fn: T.(JvmApplicationRuntimeFiles) -> Unit, - ) { - task.dependsOn(taskDependencies) - task.fn(this) - } -} - -internal sealed class JvmApplicationRuntimeFilesProvider { - abstract fun jvmApplicationRuntimeFiles(project: Project): JvmApplicationRuntimeFiles - - abstract class GradleJvmApplicationRuntimeFilesProvider : JvmApplicationRuntimeFilesProvider() { - protected abstract val jarTaskName: String - protected abstract val runtimeFiles: FileCollection - - override fun jvmApplicationRuntimeFiles(project: Project): JvmApplicationRuntimeFiles { - val jarTask = project.tasks.named(jarTaskName, Jar::class.java) - val mainJar = jarTask.flatMap { it.archiveFile } - val runtimeJarFiles = - project.objects.fileCollection().apply { - from(mainJar) - from(runtimeFiles.filter { it.path.endsWith(".jar") }) - } - return JvmApplicationRuntimeFiles(runtimeJarFiles, mainJar, arrayOf(jarTask)) - } - } - - class FromGradleSourceSet( - private val sourceSet: SourceSet, - ) : GradleJvmApplicationRuntimeFilesProvider() { - override val jarTaskName: String - get() = sourceSet.jarTaskName - - override val runtimeFiles: FileCollection - get() = sourceSet.runtimeClasspath - } - - class FromKotlinMppTarget( - private val target: KotlinJvmTarget, - ) : GradleJvmApplicationRuntimeFilesProvider() { - override val jarTaskName: String - get() = target.artifactsTaskName - - override val runtimeFiles: FileCollection - get() = target.compilations.getByName("main").runtimeDependencyFiles - } - - class Custom( - private val runtimeJarFiles: FileCollection, - private val mainJar: Provider, - private val taskDependencies: Array, - ) : JvmApplicationRuntimeFilesProvider() { - override fun jvmApplicationRuntimeFiles(project: Project): JvmApplicationRuntimeFiles = - JvmApplicationRuntimeFiles(runtimeJarFiles, mainJar, taskDependencies) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt deleted file mode 100644 index 1e0657980..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmRuntimeProperties.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import java.io.File -import java.io.ObjectInputStream -import java.io.ObjectOutputStream -import java.io.Serializable - -internal data class JvmRuntimeProperties( - val majorVersion: Int, - val availableModules: List, -) : Serializable { - companion object { - @Suppress("unused") - private val serialVersionUid: Long = 0 - - fun writeToFile( - properties: JvmRuntimeProperties, - file: File, - ) { - file.parentFile.mkdirs() - file.delete() - file.createNewFile() - ObjectOutputStream(file.outputStream().buffered()).use { oos -> - oos.writeObject(properties) - } - } - - fun readFromFile(file: File): JvmRuntimeProperties = - ObjectInputStream(file.inputStream().buffered()).use { ois -> - ois.readObject() as JvmRuntimeProperties - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt deleted file mode 100644 index 2ffcd321e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/JvmTasks.kt +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationBuildType -import dev.nucleusframework.nucleus.internal.utils.uppercaseFirstChar -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.tasks.TaskProvider - -internal class JvmTasks( - private val project: Project, - private val buildType: JvmApplicationBuildType, - private val taskGroup: String? = NUCLEUS_TASK_GROUP, -) { - /** - * Registers new Compose/Desktop tasks. - * Naming pattern for tasks is: [taskNameAction][taskNameClassifier][taskNameObject] - * Where: - * [taskNameAction] -- name for a task's action (e.g. 'run' or 'package') - * taskNameDisambiguationClassifier -- optional name for an disambiguation classifier (e.g. 'release') - * [taskNameObject] -- name for an object of action (e.g. 'distributable' or 'dmg') - * Examples: 'runDistributable', 'runReleaseDistributable', 'packageDmg', 'packageReleaseDmg' - */ - inline fun register( - taskNameAction: String, - taskNameObject: String = "", - args: List = emptyList(), - noinline configureFn: T.() -> Unit = {}, - ): TaskProvider { - val buildTypeClassifier = buildType.classifier.uppercaseFirstChar() - val objectClassifier = taskNameObject.uppercaseFirstChar() - val taskName = "$taskNameAction$buildTypeClassifier$objectClassifier" - return register(taskName, klass = T::class.java, args = args, configureFn = configureFn) - } - - fun register( - name: String, - klass: Class, - args: List, - configureFn: T.() -> Unit, - ): TaskProvider = - project.tasks.register(name, klass, *args.toTypedArray()).apply { - configure { task -> - task.group = taskGroup - task.configureFn() - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt deleted file mode 100644 index 74a58b61d..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt +++ /dev/null @@ -1,107 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.CalendarInterval -import dev.nucleusframework.nucleus.desktop.application.dsl.LaunchAgentDefinition -import java.io.File - -/** - * Generates macOS launchd agent plist files from [LaunchAgentDefinition] DSL objects. - */ -internal object LaunchAgentPlistGenerator { - - fun generate(agent: LaunchAgentDefinition, destDir: File, packageName: String) { - destDir.mkdirs() - val resolvedBundleProgram = agent.bundleProgram ?: "Contents/MacOS/$packageName" - val plist = buildPlistXml(agent, resolvedBundleProgram) - File(destDir, agent.plistFileName).writeText(plist) - } - - @Suppress("NestedBlockDepth") - private fun buildPlistXml(agent: LaunchAgentDefinition, resolvedBundleProgram: String): String = buildString { - appendLine("""""") - appendLine("""""") - appendLine("""""") - appendLine("") - - plistKey("Label", agent.label) - - plistKey("BundleProgram", resolvedBundleProgram) - - // ProgramArguments — always include bundle program as first arg - val allArgs = buildList { - add(resolvedBundleProgram) - addAll(agent.programArguments) - } - if (allArgs.isNotEmpty()) { - appendLine(" ProgramArguments") - appendLine(" ") - for (arg in allArgs) { - appendLine(" $arg") - } - appendLine(" ") - } - - agent.startInterval?.let { plistKey("StartInterval", it) } - - if (agent.calendarIntervals.isNotEmpty()) { - appendLine(" StartCalendarInterval") - if (agent.calendarIntervals.size == 1) { - appendCalendarDict(agent.calendarIntervals[0], indent = " ") - } else { - appendLine(" ") - for (interval in agent.calendarIntervals) { - appendCalendarDict(interval, indent = " ") - } - appendLine(" ") - } - } - - if (agent.runAtLoad) plistKey("RunAtLoad", true) - if (agent.keepAlive) plistKey("KeepAlive", true) - - plistKey("ProcessType", agent.processType) - - appendLine("") - appendLine("") - } - - private fun StringBuilder.plistKey(key: String, value: String) { - appendLine(" $key") - appendLine(" $value") - } - - private fun StringBuilder.plistKey(key: String, value: Int) { - appendLine(" $key") - appendLine(" $value") - } - - private fun StringBuilder.plistKey(key: String, value: Boolean) { - appendLine(" $key") - appendLine(" <${if (value) "true" else "false"}/>") - } - - private fun StringBuilder.appendCalendarDict(interval: CalendarInterval, indent: String) { - appendLine("$indent") - interval.month?.let { - appendLine("$indent Month") - appendLine("$indent $it") - } - interval.day?.let { - appendLine("$indent Day") - appendLine("$indent $it") - } - interval.weekday?.let { - appendLine("$indent Weekday") - appendLine("$indent $it") - } - interval.hour?.let { - appendLine("$indent Hour") - appendLine("$indent $it") - } - interval.minute?.let { - appendLine("$indent Minute") - appendLine("$indent $it") - } - appendLine("$indent") - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt deleted file mode 100644 index 51d80f5ca..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacAssetsTool.kt +++ /dev/null @@ -1,123 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.internal.utils.MacUtils -import org.gradle.api.logging.Logger -import java.io.File - -internal class MacAssetsTool( - private val runTool: ExternalToolRunner, - private val logger: Logger, -) { - fun compileAssets( - iconDir: File, - workingDir: File, - minimumSystemVersion: String?, - ): File { - val toolVersion = checkAssetsToolVersion() - logger.info("compile mac assets is starting, supported actool version:$toolVersion") - - val result = - runTool( - tool = MacUtils.xcrun, - args = - listOf( - "actool", - iconDir.absolutePath, // Input asset catalog - "--compile", - workingDir.absolutePath, - "--app-icon", - iconDir.name.removeSuffix(".icon"), - "--enable-on-demand-resources", - "NO", - "--development-region", - "en", - "--target-device", - "mac", - "--platform", - "macosx", - "--enable-icon-stack-fallback-generation=disabled", - "--include-all-app-icons", - "--minimum-deployment-target", - minimumSystemVersion ?: "10.13", - "--output-partial-info-plist", - "/dev/null", - ), - ) - - if (result.exitValue != 0) { - error("Could not compile the layered icons directory into Assets.car.") - } - if (!assetsFile(workingDir).exists()) { - error("Could not find Assets.car in the working directory.") - } - return workingDir.resolve("Assets.car") - } - - fun assetsFile(workingDir: File): File = workingDir.resolve("Assets.car") - - private fun checkAssetsToolVersion(): String { - val requiredVersion = 26.0 - var outputContent = "" - val result = - runTool( - tool = MacUtils.xcrun, - args = listOf("actool", "--version"), - processStdout = { outputContent = it }, - ) - - if (result.exitValue != 0) { - error( - "Could not get actool version: Command `xcrun actool -version` exited with code ${result.exitValue}\nStdOut: $outputContent\n", - ) - } - - val versionString: String? = - try { - var versionContent = "" - runTool( - tool = MacUtils.plutil, - args = - listOf( - "-extract", - "com\\.apple\\.actool\\.version.short-bundle-version", - "raw", - "-expect", - "string", - "-o", - "-", - "-", - ), - stdinStr = outputContent, - processStdout = { - versionContent = it - }, - ) - versionContent - } catch (e: Exception) { - error("Could not check actool version. Error: ${e.message}") - } - - if (versionString.isNullOrBlank()) { - error("Could not extract short-bundle-version from actool output: '$outputContent'. Assuming it meets requirements.") - } - - val majorVersion = - versionString - .split(".") - .firstOrNull() - ?.toIntOrNull() - ?: error( - "Could not get actool major version from version string '$versionString' . Output was: '$outputContent'. Assuming it meets requirements.", - ) - - if (majorVersion < requiredVersion) { - error( - "Unsupported actool version: $versionString. " + - "Version $requiredVersion or higher is required. " + - "Please update your Xcode Command Line Tools.", - ) - } else { - return versionString - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt deleted file mode 100644 index cab5b81c6..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacOsMachOPatcher.kt +++ /dev/null @@ -1,60 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.logging.Logger -import java.io.File - -/** - * Patches the LC_BUILD_VERSION of a Mach-O binary using vtool. - * Sets both the minimum deployment target (minos) and the SDK version, - * enabling SDK-gated AppKit features (e.g. Liquid Glass on macOS 26+). - * - * @return true if the patch succeeded, false if vtool is missing or failed. - */ -internal fun patchMachOBuildVersion( - binary: File, - minVersion: String, - sdkVersion: String, - logger: Logger, -): Boolean { - val vtool = File("/usr/bin/vtool") - if (!vtool.exists()) { - logger.warn( - "vtool not found at /usr/bin/vtool — skipping macOS build version patch. " + - "Install Xcode Command Line Tools to enable this feature.", - ) - return false - } - - logger.lifecycle("Patching ${binary.name} LC_BUILD_VERSION: minos=$minVersion sdk=$sdkVersion") - - // Remove existing code signature (vtool cannot modify signed binaries) - ProcessBuilder("codesign", "--remove-signature", binary.absolutePath) - .redirectErrorStream(true) - .start() - .waitFor() - - val vtoolExit = - ProcessBuilder( - vtool.absolutePath, - "-set-build-version", - "macos", - minVersion, - sdkVersion, - "-tool", - "ld", - "0.0", - "-replace", - "-output", - binary.absolutePath, - binary.absolutePath, - ).redirectErrorStream(true) - .start() - .waitFor() - - if (vtoolExit != 0) { - logger.warn("vtool exited with code $vtoolExit for ${binary.name} — build version patch may have failed") - return false - } - - return true -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt deleted file mode 100644 index 4c0e693ca..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigner.kt +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.MacUtils -import dev.nucleusframework.nucleus.internal.utils.currentArch -import java.io.File -import java.util.regex.Pattern -import kotlin.io.path.isExecutable - -internal abstract class MacSigner( - protected val runTool: ExternalToolRunner, -) { - /** - * If [entitlements] file is provided, executables are signed with entitlements. - * Set [forceEntitlements] to `true` to sign all types of files with the provided [entitlements]. - */ - abstract fun sign( - file: File, - entitlements: File? = null, - forceEntitlements: Boolean = false, - ) - - fun unsign(file: File) { - runTool.unsign(file) - } - - abstract val settings: ValidatedMacOSSigningSettings? -} - -internal class NoCertificateSigner( - runTool: ExternalToolRunner, -) : MacSigner(runTool) { - override fun sign( - file: File, - entitlements: File?, - forceEntitlements: Boolean, - ) { - unsign(file) - if (currentArch == Arch.Arm64) { - // Apple Silicon requires binaries to be signed - // For local builds, ad hoc signatures are OK - // https://wiki.lazarus.freepascal.org/Code_Signing_for_macOS - val args = arrayListOf("-vvvv", "--sign", "-", "--options", "runtime", "--force") - entitlements?.let { - args.add("--entitlements") - args.add(entitlements.absolutePath) - } - args.add(file.absolutePath) - runTool.codesign(*args.toTypedArray()) - } - } - - override val settings: ValidatedMacOSSigningSettings? - get() = null -} - -internal class MacSignerImpl( - override val settings: ValidatedMacOSSigningSettings, - runTool: ExternalToolRunner, -) : MacSigner(runTool) { - @Transient - private var signKeyValue: String? = null - - override fun sign( - file: File, - entitlements: File?, - forceEntitlements: Boolean, - ) { - // sign key calculation is delayed to avoid - // creating an external process during the configuration - // phase, which became an error in Gradle 8.1 - // https://github.com/JetBrains/compose-multiplatform/issues/3060 - val signKey = - signKeyValue ?: run { - runTool( - MacUtils.security, - args = - listOfNotNull( - "find-certificate", - "-a", - "-c", - settings.fullDeveloperID, - settings.keychain?.absolutePath, - ), - processStdout = { signKeyValue = matchCertificates(it) }, - ) - signKeyValue!! - } - runTool.unsign(file) - runTool.sign( - file = file, - signKey = signKey, - entitlements = entitlements?.takeIf { forceEntitlements || file.isExecutable }, - prefix = settings.prefix, - keychain = settings.keychain, - ) - } - - private fun matchCertificates(certificates: String): String { - // When the developer id contains non-ascii characters, the output of `security find-certificate` is - // slightly different. The `alis` line first has the hex-encoded developer id, then some spaces, - // and then the developer id with non-ascii characters encoded as octal. - // See https://bugs.openjdk.org/browse/JDK-8308042 - val regex = Pattern.compile("\"alis\"=(0x[0-9A-F]+)?\\s*\"([^\"]+)\"") - val m = regex.matcher(certificates) - if (!m.find()) { - val keychainPath = settings.keychain?.absolutePath - error( - "Could not find certificate for '${settings.identity}'" + - " in keychain [${keychainPath.orEmpty()}]", - ) - } - val hexEncoded = m.group(1) - if (hexEncoded.isNullOrBlank()) { - // Regular case; developer id only has ascii characters - val result = m.group(2) - if (m.find()) { - error( - "Multiple matching certificates are found for '${settings.fullDeveloperID}'. " + - "Please specify keychain containing unique matching certificate.", - ) - } - return result - } else { - return hexEncoded - .substring(2) - .chunked(2) - .map { it.toInt(16).toByte() } - .toByteArray() - .toString(Charsets.UTF_8) - } - } -} - -private fun ExternalToolRunner.codesign(vararg args: String) = this(MacUtils.codesign, args.toList()) - -private fun ExternalToolRunner.unsign(file: File) = codesign("-vvvv", "--remove-signature", file.absolutePath) - -private fun ExternalToolRunner.sign( - file: File, - signKey: String, - entitlements: File?, - prefix: String?, - keychain: File?, -) = codesign( - "-vvvv", - "--timestamp", - "--options", - "runtime", - "--force", - *optionalArg("--prefix", prefix), - "--sign", - signKey, - *optionalArg("--keychain", keychain?.absolutePath), - *optionalArg("--entitlements", entitlements?.absolutePath), - file.absolutePath, -) - -private fun optionalArg( - arg: String, - value: String?, -): Array = if (value != null) arrayOf(arg, value) else emptyArray() - -private val File.isExecutable: Boolean - get() = toPath().isExecutable() diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt deleted file mode 100644 index afc55d6ca..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MacSigningHelper.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath -import java.io.File -import java.nio.file.* -import kotlin.io.path.isExecutable -import kotlin.io.path.isRegularFile - -internal class MacSigningHelper( - private val macSigner: MacSigner, - private val runtimeProvisioningProfile: File?, - private val entitlementsFile: File?, - private val runtimeEntitlementsFile: File?, - destinationDir: File, - packageName: String, -) { - private val appDir = destinationDir.resolve("$packageName.app") - private val runtimeDir = appDir.resolve("Contents/runtime") - - fun modifyRuntimeIfNeeded() { - // Resign the runtime completely (and also the app dir only) - // Sign all libs and executables in runtime - runtimeDir.walk().forEach { file -> - val path = file.toPath() - if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS) && (path.isExecutable() || file.name.isDylibPath)) { - macSigner.sign(file, runtimeEntitlementsFile) - } - } - - macSigner.sign(runtimeDir, runtimeEntitlementsFile, forceEntitlements = true) - macSigner.sign(appDir, entitlementsFile, forceEntitlements = true) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt deleted file mode 100644 index f281627ff..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/MultiOutputStream.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import java.io.FilterOutputStream -import java.io.OutputStream - -internal class MultiOutputStream( - mainStream: OutputStream, - private val secondaryStream: OutputStream, -) : FilterOutputStream(mainStream) { - override fun write(b: Int) { - super.write(b) - secondaryStream.write(b) - } - - override fun flush() { - super.flush() - secondaryStream.flush() - } - - override fun close() { - try { - super.close() - } finally { - secondaryStream.close() - } - } -} - -internal fun OutputStream.alsoOutputTo(secondaryStream: OutputStream): OutputStream = MultiOutputStream(this, secondaryStream) diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt deleted file mode 100644 index 5c8a9d471..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NativeLibArchDetector.kt +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import java.nio.ByteBuffer -import java.nio.ByteOrder - -internal object NativeLibArchDetector { - enum class NativeArch { X86, X64, ARM64, UNIVERSAL, OTHER, UNKNOWN } - - enum class NativeOs { WINDOWS, LINUX, MACOS, OTHER, UNKNOWN } - - data class NativeInfo( - val os: NativeOs, - val arch: NativeArch, - ) - - private val NATIVE_EXTENSIONS = setOf(".dll", ".so", ".dylib", ".jnilib") - - fun isNativeLib(fileName: String): Boolean { - val lower = fileName.lowercase() - return NATIVE_EXTENSIONS.any { lower.endsWith(it) } - } - - // --- Path-based detection --- - - private data class OsToken( - val token: String, - val os: NativeOs, - ) - - private data class ArchToken( - val token: String, - val arch: NativeArch, - ) - - private val OS_TOKENS = - listOf( - // Specific compound tokens must come before their prefixes - OsToken("linux-android", NativeOs.OTHER), - OsToken("linux-musl", NativeOs.LINUX), - OsToken("win32", NativeOs.WINDOWS), - OsToken("windows", NativeOs.WINDOWS), - OsToken("win", NativeOs.WINDOWS), - OsToken("darwin", NativeOs.MACOS), - OsToken("macos", NativeOs.MACOS), - OsToken("mac", NativeOs.MACOS), - OsToken("osx", NativeOs.MACOS), - OsToken("linux", NativeOs.LINUX), - OsToken("freebsd", NativeOs.OTHER), - OsToken("openbsd", NativeOs.OTHER), - OsToken("dragonflybsd", NativeOs.OTHER), - OsToken("aix", NativeOs.OTHER), - OsToken("sunos", NativeOs.OTHER), - ) - - private val ARCH_TOKENS = - listOf( - ArchToken("x86-64", NativeArch.X64), - ArchToken("x86_64", NativeArch.X64), - ArchToken("amd64", NativeArch.X64), - ArchToken("x64", NativeArch.X64), - ArchToken("aarch64", NativeArch.ARM64), - ArchToken("arm64", NativeArch.ARM64), - ArchToken("x86", NativeArch.X86), - ArchToken("i386", NativeArch.X86), - ArchToken("arm", NativeArch.OTHER), - ArchToken("armel", NativeArch.OTHER), - ArchToken("armv6", NativeArch.OTHER), - ArchToken("armv7", NativeArch.OTHER), - ArchToken("ppc", NativeArch.OTHER), - ArchToken("ppc64", NativeArch.OTHER), - ArchToken("ppc64le", NativeArch.OTHER), - ArchToken("s390x", NativeArch.OTHER), - ArchToken("riscv64", NativeArch.OTHER), - ArchToken("mips64", NativeArch.OTHER), - ArchToken("mips64el", NativeArch.OTHER), - ArchToken("loongarch64", NativeArch.OTHER), - ArchToken("sparc", NativeArch.OTHER), - ArchToken("sparcv9", NativeArch.OTHER), - ) - - /** - * Detect platform from a JAR entry path by analyzing path segments. - * Returns non-UNKNOWN info only when the path clearly indicates a platform-specific directory. - */ - fun detectFromPath(entryPath: String): NativeInfo { - // Split into path segments and the compound tokens within segments - // e.g. "com/sun/jna/linux-x86-64/libjnidispatch.so" → segments: [com, sun, jna, linux-x86-64, libjnidispatch.so] - val segments = entryPath.split('/') - - var detectedOs = NativeOs.UNKNOWN - var detectedArch = NativeArch.UNKNOWN - - for (segment in segments) { - val lower = segment.lowercase() - - // Try longer/more specific tokens first — sorted by length desc - if (detectedOs == NativeOs.UNKNOWN) { - for (osToken in OS_TOKENS) { - if (matchesToken(lower, osToken.token)) { - detectedOs = osToken.os - break - } - } - } - - if (detectedArch == NativeArch.UNKNOWN) { - for (archToken in ARCH_TOKENS) { - if (matchesToken(lower, archToken.token)) { - detectedArch = archToken.arch - break - } - } - } - - // Some segments encode both OS and arch, e.g. "linux-x86-64" or "win32-x86-64" - // Re-check same segment for arch using delimiter-aware matching - if (detectedOs != NativeOs.UNKNOWN && detectedArch == NativeArch.UNKNOWN) { - for (archToken in ARCH_TOKENS) { - if (matchesToken(lower, archToken.token)) { - detectedArch = archToken.arch - break - } - } - } - } - - return NativeInfo(detectedOs, detectedArch) - } - - /** Check if a path segment matches a token as a whole or as a delimited part */ - private fun matchesToken( - segment: String, - token: String, - ): Boolean { - if (segment == token) return true - // Match as a delimited part: "linux-x86-64" should match "linux" and "x86-64" - // Delimiters: -, _, . - val idx = segment.indexOf(token) - if (idx < 0) return false - val before = if (idx > 0) segment[idx - 1] else '-' - val after = if (idx + token.length < segment.length) segment[idx + token.length] else '-' - return (before == '-' || before == '_' || before == '.') && - (after == '-' || after == '_' || after == '.') - } - - // --- Binary header detection --- - - fun detectFromHeader(bytes: ByteArray): NativeInfo { - if (bytes.size < 4) return NativeInfo(NativeOs.UNKNOWN, NativeArch.UNKNOWN) - - // PE (.dll) — starts with MZ - if (bytes[0] == 0x4D.toByte() && bytes[1] == 0x5A.toByte()) { - return detectPE(bytes) - } - - // ELF (.so) — starts with 0x7F ELF - if (bytes[0] == 0x7F.toByte() && - bytes[1] == 0x45.toByte() && - bytes[2] == 0x4C.toByte() && - bytes[3] == 0x46.toByte() - ) { - return detectELF(bytes) - } - - // Mach-O / fat binary - val magic = ByteBuffer.wrap(bytes, 0, 4).int - return when (magic) { - 0xFEEDFACF.toInt() -> detectMachO(bytes, ByteOrder.LITTLE_ENDIAN) - 0xCFFAEDFE.toInt() -> detectMachO(bytes, ByteOrder.BIG_ENDIAN) - 0xFEEDFACE.toInt() -> detectMachO(bytes, ByteOrder.LITTLE_ENDIAN) - 0xCEFAEDFE.toInt() -> detectMachO(bytes, ByteOrder.BIG_ENDIAN) - 0xCAFEBABE.toInt() -> NativeInfo(NativeOs.MACOS, NativeArch.UNIVERSAL) - else -> NativeInfo(NativeOs.UNKNOWN, NativeArch.UNKNOWN) - } - } - - private fun detectPE(bytes: ByteArray): NativeInfo { - if (bytes.size < 0x40) return NativeInfo(NativeOs.WINDOWS, NativeArch.UNKNOWN) - val peOffset = ByteBuffer.wrap(bytes, 0x3C, 4).order(ByteOrder.LITTLE_ENDIAN).int - val machineOffset = peOffset + 4 - if (bytes.size < machineOffset + 2) return NativeInfo(NativeOs.WINDOWS, NativeArch.UNKNOWN) - val machine = - ByteBuffer - .wrap(bytes, machineOffset, 2) - .order(ByteOrder.LITTLE_ENDIAN) - .short - .toInt() and 0xFFFF - val arch = - when (machine) { - 0x8664 -> NativeArch.X64 - 0x014C -> NativeArch.X86 - 0xAA64 -> NativeArch.ARM64 - else -> NativeArch.UNKNOWN - } - return NativeInfo(NativeOs.WINDOWS, arch) - } - - private fun detectELF(bytes: ByteArray): NativeInfo { - if (bytes.size < 20) return NativeInfo(NativeOs.LINUX, NativeArch.UNKNOWN) - val order = if (bytes[5] == 2.toByte()) ByteOrder.BIG_ENDIAN else ByteOrder.LITTLE_ENDIAN - val eMachine = - ByteBuffer - .wrap(bytes, 18, 2) - .order(order) - .short - .toInt() and 0xFFFF - val arch = - when (eMachine) { - 0x3E -> NativeArch.X64 - 0xB7 -> NativeArch.ARM64 - 0x03 -> NativeArch.X86 - else -> NativeArch.UNKNOWN - } - return NativeInfo(NativeOs.LINUX, arch) - } - - private fun detectMachO( - bytes: ByteArray, - order: ByteOrder, - ): NativeInfo { - if (bytes.size < 8) return NativeInfo(NativeOs.MACOS, NativeArch.UNKNOWN) - val cpuType = ByteBuffer.wrap(bytes, 4, 4).order(order).int - val arch = - when (cpuType) { - 0x01000007 -> NativeArch.X64 - 0x0100000C -> NativeArch.ARM64 - else -> NativeArch.UNKNOWN - } - return NativeInfo(NativeOs.MACOS, arch) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt deleted file mode 100644 index 111cbb1e8..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NotarizationRequestInfo.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import java.io.File -import java.util.* - -internal const val NOTARIZATION_REQUEST_INFO_FILE_NAME = "notarization-request.properties" - -internal data class NotarizationRequestInfo( - var uuid: String = "", - var uploadTime: String = "", -) { - fun loadFrom(file: File) { - val properties = - Properties().apply { - file.inputStream().buffered().use { input -> - load(input) - } - } - uuid = properties.getProperty(UUID) ?: uuid - uploadTime = properties.getProperty(UPLOAD_TIME) ?: uploadTime - } - - fun saveTo(file: File) { - val properties = Properties() - properties[UUID] = uuid - properties[UPLOAD_TIME] = uploadTime - file.outputStream().buffered().use { output -> - properties.store(output, null) - } - } - - companion object { - private const val UUID = "uuid" - private const val UPLOAD_TIME = "upload.time" - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt deleted file mode 100644 index bbc6cdf09..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusProjectProperties.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.internal.utils.findLocalOrGlobalProperty -import dev.nucleusframework.nucleus.internal.utils.toBooleanProvider -import dev.nucleusframework.nucleus.internal.utils.valueOrNull -import org.gradle.api.Project -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory - -internal object NucleusProperties { - internal const val VERBOSE = "compose.desktop.verbose" - internal const val PRESERVE_WD = "compose.preserve.working.dir" - internal const val MAC_SIGN = "compose.desktop.mac.sign" - internal const val MAC_SIGN_ID = "compose.desktop.mac.signing.identity" - internal const val MAC_SIGN_KEYCHAIN = "compose.desktop.mac.signing.keychain" - internal const val MAC_SIGN_PREFIX = "compose.desktop.mac.signing.prefix" - internal const val MAC_NOTARIZATION_APPLE_ID = "compose.desktop.mac.notarization.appleID" - internal const val MAC_NOTARIZATION_PASSWORD = "compose.desktop.mac.notarization.password" - internal const val MAC_NOTARIZATION_TEAM_ID_PROVIDER = "compose.desktop.mac.notarization.teamID" - internal const val MAC_NOTARIZATION_KEYCHAIN_PROFILE = "compose.desktop.mac.notarization.keychainProfile" - internal const val MAC_NOTARIZATION_KEYCHAIN_PATH = "compose.desktop.mac.notarization.keychainPath" - internal const val MAC_NOTARIZATION_API_KEY = "compose.desktop.mac.notarization.apiKey" - internal const val MAC_NOTARIZATION_API_KEY_ID = "compose.desktop.mac.notarization.apiKeyId" - internal const val MAC_NOTARIZATION_API_ISSUER = "compose.desktop.mac.notarization.apiIssuer" - internal const val CHECK_JDK_VENDOR = "compose.desktop.packaging.checkJdkVendor" - internal const val DISABLE_MULTIMODULE_RESOURCES = "org.jetbrains.compose.resources.multimodule.disable" - internal const val SYNC_RESOURCES_PROPERTY = "compose.ios.resources.sync" - internal const val DISABLE_RESOURCE_CONTENT_HASH_GENERATION = "org.jetbrains.compose.resources.content.hash.generation.disable" - internal const val ELECTRON_BUILDER_NODE_PATH = "compose.electronBuilder.nodePath" - internal const val ELECTRON_BUILDER_PUBLISH_MODE = "compose.electronBuilder.publishMode" - - fun isVerbose(providers: ProviderFactory): Provider = providers.valueOrNull(VERBOSE).toBooleanProvider(false) - - fun preserveWorkingDir(providers: ProviderFactory): Provider = providers.valueOrNull(PRESERVE_WD).toBooleanProvider(false) - - fun macSign(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_SIGN).toBooleanProvider(false) - - fun macSignIdentity(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_SIGN_ID) - - fun macSignKeychain(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_SIGN_KEYCHAIN) - - fun macSignPrefix(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_SIGN_PREFIX) - - @Suppress("MaxLineLength") - fun macNotarizationAppleID(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_APPLE_ID) - - @Suppress("MaxLineLength") - fun macNotarizationPassword(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_PASSWORD) - - @Suppress("MaxLineLength") - fun macNotarizationTeamID(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_TEAM_ID_PROVIDER) - - @Suppress("MaxLineLength") - fun macNotarizationKeychainProfile(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_KEYCHAIN_PROFILE) - - @Suppress("MaxLineLength") - fun macNotarizationKeychainPath(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_KEYCHAIN_PATH) - - @Suppress("MaxLineLength") - fun macNotarizationApiKey(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_API_KEY) - - @Suppress("MaxLineLength") - fun macNotarizationApiKeyId(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_API_KEY_ID) - - @Suppress("MaxLineLength") - fun macNotarizationApiIssuer(providers: ProviderFactory): Provider = providers.valueOrNull(MAC_NOTARIZATION_API_ISSUER) - - fun checkJdkVendor(providers: ProviderFactory): Provider = providers.valueOrNull(CHECK_JDK_VENDOR).toBooleanProvider(true) - - fun disableMultimoduleResources(providers: ProviderFactory): Provider = - providers.valueOrNull(DISABLE_MULTIMODULE_RESOURCES).toBooleanProvider(false) - - fun disableResourceContentHashGeneration(providers: ProviderFactory): Provider = - providers.valueOrNull(DISABLE_RESOURCE_CONTENT_HASH_GENERATION).toBooleanProvider(false) - - @Suppress("MaxLineLength") - fun electronBuilderNodePath(providers: ProviderFactory): Provider = providers.valueOrNull(ELECTRON_BUILDER_NODE_PATH) - - @Suppress("MaxLineLength") - fun electronBuilderPublishMode(providers: ProviderFactory): Provider = providers.valueOrNull(ELECTRON_BUILDER_PUBLISH_MODE) - - // providers.valueOrNull works only with root gradle.properties - fun dontSyncResources(project: Project): Provider = - project.findLocalOrGlobalProperty(SYNC_RESOURCES_PROPERTY).map { it == "false" } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt deleted file mode 100644 index 0073bb961..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/NucleusSystemProperties.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -internal const val APP_RESOURCES_DIR = "compose.application.resources.dir" -internal const val SKIKO_LIBRARY_PATH = "skiko.library.path" -internal const val CONFIGURE_SWING_GLOBALS = "compose.application.configure.swing.globals" -internal const val APP_EXECUTABLE_TYPE = "nucleus.executable.type" -internal const val APP_ID = "nucleus.app.id" diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt deleted file mode 100644 index 71e5309dc..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/PatchedJavaLauncher.kt +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.file.Directory -import org.gradle.api.file.RegularFile -import org.gradle.api.model.ObjectFactory -import org.gradle.jvm.toolchain.JavaInstallationMetadata -import org.gradle.jvm.toolchain.JavaLanguageVersion -import org.gradle.jvm.toolchain.JavaLauncher -import java.io.File - -/** - * [JavaLauncher] pointing to a vtool-patched copy of the source JDK's `java` - * binary. Metadata is derived from the source JDK's `release` file so Gradle's - * toolchain validation accepts the launcher alongside `executable`. Using a - * real [JavaLauncher] — instead of launching the patched binary via - * [ProcessBuilder] — keeps Gradle's [org.gradle.api.tasks.JavaExec] in charge - * of the fork, so IntelliJ's Gradle debugger can inject JDWP and manage the - * process lifecycle (breakpoints, stop button). - */ -internal class PatchedJavaLauncher( - private val patchedJavaBinary: File, - private val patchedJavaHome: File, - private val sourceJavaHome: File, - private val objects: ObjectFactory, -) : JavaLauncher { - private val lazyMetadata by lazy { buildMetadata() } - - override fun getMetadata(): JavaInstallationMetadata = lazyMetadata - - override fun getExecutablePath(): RegularFile = - objects.fileProperty().also { it.set(patchedJavaBinary) }.get() - - private fun buildMetadata(): JavaInstallationMetadata { - val releaseProps = readReleaseFile(sourceJavaHome) - val rawJavaVersion = releaseProps["JAVA_VERSION"] ?: "0" - val languageMajor = rawJavaVersion.substringBefore('.').toIntOrNull() ?: 0 - val runtimeVersion = releaseProps["JAVA_RUNTIME_VERSION"] ?: rawJavaVersion - val jvmVersion = releaseProps["JAVA_VERSION"] ?: rawJavaVersion - val vendor = releaseProps["IMPLEMENTOR"] ?: "Unknown" - val installation: Directory = objects.directoryProperty().also { it.set(patchedJavaHome) }.get() - return object : JavaInstallationMetadata { - override fun getLanguageVersion(): JavaLanguageVersion = JavaLanguageVersion.of(languageMajor.coerceAtLeast(1)) - override fun getJavaRuntimeVersion(): String = runtimeVersion - override fun getJvmVersion(): String = jvmVersion - override fun getVendor(): String = vendor - override fun getInstallationPath(): Directory = installation - override fun isCurrentJvm(): Boolean = false - } - } - - private fun readReleaseFile(javaHome: File): Map { - val release = File(javaHome, "release") - if (!release.exists()) return emptyMap() - return release.readLines() - .mapNotNull { line -> - val idx = line.indexOf('=') - if (idx <= 0) null else line.substring(0, idx) to line.substring(idx + 1).trim('"') - } - .toMap() - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt deleted file mode 100644 index 01a4fa666..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt +++ /dev/null @@ -1,167 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.DefaultTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.provider.MapProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.SetProperty -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.File - -/** - * Resolves GraalVM reachability metadata from the Oracle repository for runtime dependencies. - * - * This task is configuration-cache compatible: all inputs are declared as Gradle properties - * and file collections, so no `Project`/`Configuration` references are serialized. - */ -@DisableCachingByDefault(because = "Resolves external metadata repository; output depends on extracted ZIP contents") -abstract class ResolveReachabilityMetadataTask : DefaultTask() { - @get:Input - abstract val repoEnabled: Property - - @get:Input - abstract val repoVersion: Property - - @get:Input - abstract val excludedModules: SetProperty - - @get:Input - abstract val moduleToConfigVersion: MapProperty - - /** The metadata repository ZIP file(s) resolved from Maven. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val metadataZipFiles: ConfigurableFileCollection - - /** The runtime classpath JARs — used to list dependency coordinates. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val runtimeClasspath: ConfigurableFileCollection - - @get:Input - abstract val outputDirsFile: Property - - @get:Input - abstract val extractionDir: Property - - @TaskAction - fun resolve() { - val outFile = outputDirsFile.get() - outFile.parentFile.mkdirs() - - if (!repoEnabled.get()) { - outFile.writeText("") - return - } - - val zipFile = metadataZipFiles.files.firstOrNull() - if (zipFile == null) { - logger.warn("GraalVM reachability metadata repository ZIP not found") - outFile.writeText("") - return - } - - // Build artifact info from classpath file names. - // FileCollection doesn't carry Maven coordinates, so we parse artifact coordinates - // from JAR file paths following the Gradle cache layout. - val artifacts = parseArtifactsFromClasspath(runtimeClasspath.files) - - if (artifacts.isEmpty()) { - logger.info("No runtime artifacts found, skipping metadata repository resolution") - outFile.writeText("") - return - } - - val version = repoVersion.get() - val excluded = excludedModules.getOrElse(emptySet()) - val overrides = moduleToConfigVersion.getOrElse(emptyMap()) - val outputDir = extractionDir.get() - - val dirs = - resolveMetadataRepositoryFromArtifacts( - zipFile = zipFile, - version = version, - excludedModules = excluded, - moduleToConfigVersion = overrides, - artifacts = artifacts, - outputDir = outputDir, - logger = logger, - ) - - outFile.writeText(dirs.joinToString("\n") { it.absolutePath }) - - if (dirs.isNotEmpty()) { - logger.lifecycle( - "Resolved ${dirs.size} metadata entries from Oracle repository v$version", - ) - } - } -} - -/** - * Parse artifact coordinates from classpath JAR file paths. - * Gradle caches JARs in: `~/.gradle/caches/modules-2/files-2.1/////-.jar` - * Maven local stores in: `~/.m2/repository////-.jar` - */ -internal data class ArtifactCoordinates( - val group: String, - val name: String, - val version: String, -) - -internal fun parseArtifactsFromClasspath(files: Set): List { - val artifacts = mutableListOf() - val seen = mutableSetOf() - - for (file in files) { - if (!file.name.endsWith(".jar")) continue - val coords = - parseGradleCacheCoordinates(file) - ?: parseMavenLocalCoordinates(file) - ?: continue - val key = "${coords.group}:${coords.name}" - if (key !in seen) { - artifacts.add(coords) - seen.add(key) - } - } - return artifacts -} - -/** - * Gradle cache layout: `/modules-2/files-2.1/////` - */ -private fun parseGradleCacheCoordinates(file: File): ArtifactCoordinates? { - val parts = file.absolutePath.replace('\\', '/').split('/') - val filesIdx = parts.indexOfLast { it == "files-2.1" } - if (filesIdx < 0 || filesIdx + 4 >= parts.size) return null - return ArtifactCoordinates( - group = parts[filesIdx + 1], - name = parts[filesIdx + 2], - version = parts[filesIdx + 3], - ) -} - -/** - * Maven local layout: `////` - * Group path uses '/' separators (e.g., `org/apache/lucene`). - */ -private fun parseMavenLocalCoordinates(file: File): ArtifactCoordinates? { - val parts = file.absolutePath.replace('\\', '/').split('/') - val repoIdx = parts.indexOfLast { it == "repository" } - if (repoIdx < 0 || repoIdx + 3 >= parts.size) return null - val version = parts[parts.size - 2] - val name = parts[parts.size - 3] - val groupParts = parts.subList(repoIdx + 1, parts.size - 3) - if (groupParts.isEmpty()) return null - return ArtifactCoordinates( - group = groupParts.joinToString("."), - name = name, - version = version, - ) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt deleted file mode 100644 index 959f00a51..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/RuntimeCompressionLevel.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -internal enum class RuntimeCompressionLevel( - internal val id: Int, -) { - // For ID values see the docs on "--compress" https://docs.oracle.com/javase/9/tools/jlink.htm - - NO_COMPRESSION(0), - CONSTANT_STRING_SHARING(1), - ZIP(2), -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt deleted file mode 100644 index 7ec4d5c86..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/UpdateYmlGenerator.kt +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import org.gradle.api.logging.Logger -import java.io.File -import java.security.MessageDigest -import java.time.Instant -import java.time.format.DateTimeFormatter -import java.util.Base64 - -/** - * Generates electron-builder-compatible auto-update metadata (latest-*.yml) - * for target formats where electron-builder does not produce them natively - * (e.g. MSI, Portable, AppImage, DEB, RPM, DMG). - */ -internal object UpdateYmlGenerator { - private const val BUFFER_SIZE = 8192 - private val SKIP_EXTENSIONS = setOf("yml", "yaml", "blockmap", "json") - - /** - * Generates the auto-update YML file if it does not already exist. - * When electron-builder natively generates the file (e.g. for NSIS), this is a no-op. - */ - fun generateIfMissing( - outputDir: File, - ymlFilename: String, - version: String, - logger: Logger, - ) { - val ymlFile = File(outputDir, ymlFilename) - if (ymlFile.exists()) { - logger.info("Auto-update metadata already exists: ${ymlFile.name}, skipping generation") - return - } - - val installerFiles = outputDir.listFiles { f -> - f.isFile && - !f.name.startsWith(".") && - f.extension.lowercase() !in SKIP_EXTENSIONS - }?.sortedBy { it.name } ?: emptyList() - - if (installerFiles.isEmpty()) { - logger.warn("No installer files found in ${outputDir.absolutePath}, skipping update YML generation") - return - } - - val releaseDate = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") - .withZone(java.time.ZoneOffset.UTC) - .format(Instant.now()) - - val filesEntries = buildString { - for (file in installerFiles) { - val hash = sha512Base64(file) - appendLine(" - url: ${file.name}") - appendLine(" sha512: $hash") - appendLine(" size: ${file.length()}") - val blockmap = File(outputDir, "${file.name}.blockmap") - if (blockmap.exists()) { - appendLine(" blockMapSize: ${blockmap.length()}") - } - } - } - - val firstFile = installerFiles.first() - val firstHash = sha512Base64(firstFile) - - val content = buildString { - appendLine("version: $version") - appendLine("files:") - append(filesEntries) - appendLine("path: ${firstFile.name}") - appendLine("sha512: $firstHash") - appendLine("releaseDate: '$releaseDate'") - } - - ymlFile.writeText(content) - logger.lifecycle("Generated auto-update metadata: ${ymlFile.name}") - } - - private fun sha512Base64(file: File): String { - val digest = MessageDigest.getInstance("SHA-512") - file.inputStream().buffered().use { input -> - val buffer = ByteArray(BUFFER_SIZE) - var read = input.read(buffer) - while (read != -1) { - digest.update(buffer, 0, read) - read = input.read(buffer) - } - } - return Base64.getEncoder().encodeToString(digest.digest()) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt deleted file mode 100644 index 0da041070..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/WindowsKitsLocator.kt +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import java.io.File - -internal object WindowsKitsLocator { - private val versionRegex = Regex("""\d+(\.\d+){3}""") - - fun locateSignTool(architecture: String): File? = locateToolWithFallback("signtool.exe", architecture) - - fun locateRc(architecture: String): File? = locateToolWithFallback("rc.exe", architecture) - - private fun locateToolWithFallback( - toolName: String, - architecture: String, - ): File? { - // Try the requested architecture first, then fall back to x64 - // (Windows ARM64 can run x64 binaries via WoW64 emulation) - val fallbackArchitectures = - if (architecture != "x64") listOf(architecture, "x64") else listOf(architecture) - for (arch in fallbackArchitectures) { - val result = locateTool(toolName, arch) - if (result != null) return result - } - return null - } - - @Suppress("ReturnCount") - private fun locateTool( - toolName: String, - architecture: String, - ): File? { - val kitsRoot = findWindowsKitsRoot() ?: return null - val binDir = kitsRoot.resolve("bin") - - val directCandidate = binDir.resolve(architecture).resolve(toolName) - if (directCandidate.isFile) return directCandidate - - return binDir - .listFiles() - ?.asSequence() - ?.filter { it.isDirectory && versionRegex.matches(it.name) } - ?.sortedWith { left, right -> compareVersions(parseVersion(right.name), parseVersion(left.name)) } - ?.map { it.resolve(architecture).resolve(toolName) } - ?.firstOrNull { it.isFile } - } - - private fun findWindowsKitsRoot(): File? { - val programFiles = System.getenv("ProgramFiles(x86)") ?: System.getenv("ProgramFiles") ?: return null - val candidates = listOf("Windows Kits/10", "Windows Kits/11") - return candidates.asSequence().map { File(programFiles, it) }.firstOrNull { it.isDirectory } - } - - private fun parseVersion(version: String): List = version.split('.').mapNotNull { it.toIntOrNull() } - - private fun compareVersions( - left: List, - right: List, - ): Int { - val maxSize = maxOf(left.size, right.size) - for (index in 0 until maxSize) { - val leftValue = left.getOrElse(index) { 0 } - val rightValue = right.getOrElse(index) { 0 } - if (leftValue != rightValue) return leftValue.compareTo(rightValue) - } - return 0 - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt deleted file mode 100644 index b99495a8e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisReport.kt +++ /dev/null @@ -1,101 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer - -/** - * Classification of an Oracle repo entry relative to what the static analyzer found. - */ -internal enum class DetectionStatus { - /** Found by static analysis — no tracing agent needed. */ - DETECTED, - - /** Class found but not all methods/fields — agent may refine. */ - PARTIALLY_DETECTED, - - /** Present in Oracle repo but impossible to find statically — agent required. */ - NOT_DETECTABLE, - - /** Found by analyzer but not in Oracle repo — potential new discovery. */ - EXTRA, -} - -/** - * A single entry in the gap analysis report. - */ -internal data class GapReportEntry( - val type: String, - val status: DetectionStatus, - val reason: String? = null, - val missingMethods: Set = emptySet(), - val missingFields: Set = emptySet(), -) - -/** - * Gap analysis report comparing analyzer output against an Oracle repo baseline. - */ -internal data class AnalysisReport( - val entries: List, -) { - val detected: List - get() = entries.filter { it.status == DetectionStatus.DETECTED } - - val partiallyDetected: List - get() = entries.filter { it.status == DetectionStatus.PARTIALLY_DETECTED } - - val notDetectable: List - get() = entries.filter { it.status == DetectionStatus.NOT_DETECTABLE } - - val extra: List - get() = entries.filter { it.status == DetectionStatus.EXTRA } - - /** - * Formats the report as a human-readable string. - */ - fun format(): String = - buildString { - appendLine("=== Static Bytecode Analysis Gap Report ===") - appendLine() - appendLine("Summary:") - appendLine(" DETECTED: ${detected.size}") - appendLine(" PARTIALLY_DETECTED: ${partiallyDetected.size}") - appendLine(" NOT_DETECTABLE: ${notDetectable.size}") - appendLine(" EXTRA: ${extra.size}") - - if (notDetectable.isNotEmpty()) { - appendLine() - appendLine("--- NOT_DETECTABLE (agent required) ---") - for (entry in notDetectable) { - appendLine(" ${entry.type}") - if (entry.reason != null) { - appendLine(" Reason: ${entry.reason}") - } - } - } - - if (partiallyDetected.isNotEmpty()) { - appendLine() - appendLine("--- PARTIALLY_DETECTED (agent may refine) ---") - for (entry in partiallyDetected) { - appendLine(" ${entry.type}") - if (entry.missingMethods.isNotEmpty()) { - appendLine( - " Missing methods: ${entry.missingMethods.joinToString { - "${it.name}(${it.parameterTypes.joinToString( - ",", - )})" - }}", - ) - } - if (entry.missingFields.isNotEmpty()) { - appendLine(" Missing fields: ${entry.missingFields.joinToString()}") - } - } - } - - if (extra.isNotEmpty()) { - appendLine() - appendLine("--- EXTRA (new discoveries) ---") - for (entry in extra) { - appendLine(" ${entry.type}") - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt deleted file mode 100644 index 797cacc5a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/AnalysisResult.kt +++ /dev/null @@ -1,97 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer - -/** - * A single reflection type entry discovered by static analysis. - */ -internal data class ReflectionEntry( - val type: String, - val allDeclaredFields: Boolean = false, - val allDeclaredMethods: Boolean = false, - val allDeclaredConstructors: Boolean = false, - val allPublicFields: Boolean = false, - val allPublicMethods: Boolean = false, - val allPublicConstructors: Boolean = false, - val unsafeAllocated: Boolean = false, - val methods: Set = emptySet(), - val fields: Set = emptySet(), -) - -/** - * A single JNI type entry discovered by static analysis. - */ -internal data class JniEntry( - val type: String, - val methods: Set = emptySet(), - val fields: Set = emptySet(), - val jniAccessible: Boolean = false, -) - -/** - * A method signature with name and parameter types. - */ -internal data class MethodSignature( - val name: String, - val parameterTypes: List = emptyList(), -) - -/** - * A resource access pattern discovered by static analysis. - */ -internal data class ResourcePattern( - val glob: String? = null, - val bundle: String? = null, - val module: String? = null, -) - -/** - * Aggregated results from all detectors running over a set of JARs. - */ -internal data class AnalysisResult( - val reflectionEntries: Set = emptySet(), - val jniEntries: Set = emptySet(), - val resourcePatterns: Set = emptySet(), - val serviceLoaderEntries: Set = emptySet(), -) { - /** - * All reflection entries including service loader implementations, - * merged by type so each type appears only once with combined methods/fields/flags. - */ - val allReflectionEntries: Set - get() = mergeReflectionEntries(reflectionEntries + serviceLoaderEntries) - - /** - * Merges this result with another. - */ - operator fun plus(other: AnalysisResult): AnalysisResult = - AnalysisResult( - reflectionEntries = reflectionEntries + other.reflectionEntries, - jniEntries = jniEntries + other.jniEntries, - resourcePatterns = resourcePatterns + other.resourcePatterns, - serviceLoaderEntries = serviceLoaderEntries + other.serviceLoaderEntries, - ) -} - -/** - * Merges reflection entries that share the same type into a single entry - * with combined methods, fields, and the union of boolean flags. - * This prevents duplicate type entries in the output JSON. - */ -internal fun mergeReflectionEntries(entries: Set): Set = - entries - .groupBy { it.type } - .map { (_, group) -> - group.reduce { acc, e -> - ReflectionEntry( - type = acc.type, - allDeclaredFields = acc.allDeclaredFields || e.allDeclaredFields, - allDeclaredMethods = acc.allDeclaredMethods || e.allDeclaredMethods, - allDeclaredConstructors = acc.allDeclaredConstructors || e.allDeclaredConstructors, - allPublicFields = acc.allPublicFields || e.allPublicFields, - allPublicMethods = acc.allPublicMethods || e.allPublicMethods, - allPublicConstructors = acc.allPublicConstructors || e.allPublicConstructors, - unsafeAllocated = acc.unsafeAllocated || e.unsafeAllocated, - methods = acc.methods + e.methods, - fields = acc.fields + e.fields, - ) - } - }.toSet() diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt deleted file mode 100644 index 52fc63306..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt +++ /dev/null @@ -1,320 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ClassForNameDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.JarResourceDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.KotlinSerializableDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.MethodHandleDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.NativeMethodDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ProxyDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ReflectionApiDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ResourceAccessDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ResourceBundleDetector -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors.ServiceLoaderDetector -import java.io.File -import java.util.jar.JarFile - -/** - * Main entry point: scans one or more JARs and produces an [AnalysisResult]. - */ -internal object BytecodeAnalyzer { - /** - * Analyzes a single JAR file. - */ - fun analyzeJar(jarPath: File): AnalysisResult { - require(jarPath.exists() && jarPath.name.endsWith(".jar")) { - "Not a valid JAR: $jarPath" - } - - val jniEntries = mutableSetOf() - val reflectionEntries = mutableSetOf() - val resourcePatterns = mutableSetOf() - val serviceLoaderEntries = mutableSetOf() - val jniReferencedTypes = mutableSetOf() - val jniFieldTypes = mutableSetOf() - val jniSuperclassTypes = mutableSetOf() - // Index: internal class name (com/foo/Bar) -> class bytes, for second-pass JNI callback resolution - val classBytesIndex = mutableMapOf() - - JarFile(jarPath).use { jar -> - // Service loader detection (scans META-INF/services/) - val serviceResult = ServiceLoaderDetector.detect(jar) - serviceLoaderEntries.addAll(serviceResult.reflectionEntries) - resourcePatterns.addAll(serviceResult.resourcePatterns) - - // JAR resource detection (native libs, properties, analysis resources) - resourcePatterns.addAll(JarResourceDetector.detect(jar)) - - // Pass 1: scan all .class files - for (entry in jar.entries()) { - if (!entry.name.endsWith(".class") || entry.name.startsWith("META-INF/")) continue - - val classBytes = - try { - jar.getInputStream(entry).use { it.readBytes() } - } catch (_: Exception) { - continue - } - - // Index by internal class name for second-pass lookup - val internalName = entry.name.removeSuffix(".class") - classBytesIndex[internalName] = classBytes - - try { - // Native method detection -> JNI entries + referenced types + field types + superclass - val nativeResult = NativeMethodDetector.detectWithReferences(classBytes) - jniEntries.addAll(nativeResult.jniEntries) - jniReferencedTypes.addAll(nativeResult.referencedTypes) - jniFieldTypes.addAll(nativeResult.jniClassFieldTypes) - nativeResult.superclassType?.let { jniSuperclassTypes.add(it) } - - analyzeClassBytes(classBytes, jniEntries, reflectionEntries, resourcePatterns, jniReferencedTypes) - } catch (_: IllegalArgumentException) { - // ASM does not support this class file version (e.g. JDK 25+) — skip - } - } - - // Pass 2: resolve JNI callback types — field types, parameter/return types, - // superclasses of JNI classes, and inner classes of callback types - val allJniCallbackCandidates = jniFieldTypes + jniReferencedTypes + jniSuperclassTypes - resolveJniCallbackTypes(allJniCallbackCandidates, classBytesIndex, jniEntries) - - // Pass 3: enrich JNI classes themselves with fields + non-native methods - // Native code accesses fields and calls non-native methods on JNI classes too - enrichJniClassEntries(classBytesIndex, jniEntries) - } - - // Add remaining JNI-referenced types that weren't resolved as callbacks - for (refType in jniReferencedTypes) { - if (jniEntries.none { it.type == refType }) { - jniEntries.add(JniEntry(type = refType)) - } - } - - return AnalysisResult( - reflectionEntries = reflectionEntries, - jniEntries = jniEntries, - resourcePatterns = resourcePatterns, - serviceLoaderEntries = serviceLoaderEntries, - ) - } - - /** - * Analyzes a directory of compiled .class files (e.g. build/classes/kotlin/jvm/main). - */ - fun analyzeClassDir(dir: File): AnalysisResult { - if (!dir.exists() || !dir.isDirectory) return AnalysisResult() - - val jniEntries = mutableSetOf() - val reflectionEntries = mutableSetOf() - val resourcePatterns = mutableSetOf() - val serviceLoaderEntries = mutableSetOf() - val jniReferencedTypes = mutableSetOf() - val jniFieldTypes = mutableSetOf() - val jniSuperclassTypes = mutableSetOf() - val classBytesIndex = mutableMapOf() - - // Scan META-INF/services/ in class directories - val servicesDir = File(dir, "META-INF/services") - if (servicesDir.isDirectory) { - servicesDir.listFiles()?.filter { it.isFile }?.forEach { serviceFile -> - val serviceName = serviceFile.name - resourcePatterns.add(ResourcePattern(glob = "META-INF/services/$serviceName")) - val implementations = - serviceFile - .readLines() - .map { it.substringBefore('#').trim() } - .filter { it.isNotEmpty() } - for (impl in implementations) { - serviceLoaderEntries.add( - ReflectionEntry( - type = impl, - methods = setOf(MethodSignature("", emptyList())), - ), - ) - } - } - } - - // Pass 1: scan all .class files recursively - dir - .walkTopDown() - .filter { it.isFile && it.extension == "class" } - .forEach { classFile -> - val classBytes = - try { - classFile.readBytes() - } catch (_: Exception) { - return@forEach - } - - val relativePath = classFile.relativeTo(dir).path.removeSuffix(".class") - classBytesIndex[relativePath] = classBytes - - try { - val nativeResult = NativeMethodDetector.detectWithReferences(classBytes) - jniEntries.addAll(nativeResult.jniEntries) - jniReferencedTypes.addAll(nativeResult.referencedTypes) - jniFieldTypes.addAll(nativeResult.jniClassFieldTypes) - nativeResult.superclassType?.let { jniSuperclassTypes.add(it) } - - analyzeClassBytes(classBytes, jniEntries, reflectionEntries, resourcePatterns, jniReferencedTypes) - } catch (_: IllegalArgumentException) { - // ASM does not support this class file version (e.g. JDK 25+) — skip - } - } - - // Pass 2: resolve JNI callback types (including superclasses and inner classes) - val allJniCallbackCandidates = jniFieldTypes + jniReferencedTypes + jniSuperclassTypes - resolveJniCallbackTypes(allJniCallbackCandidates, classBytesIndex, jniEntries) - - // Pass 3: enrich JNI classes themselves with fields + non-native methods - enrichJniClassEntries(classBytesIndex, jniEntries) - - for (refType in jniReferencedTypes) { - if (jniEntries.none { it.type == refType }) { - jniEntries.add(JniEntry(type = refType)) - } - } - - return AnalysisResult( - reflectionEntries = reflectionEntries, - jniEntries = jniEntries, - resourcePatterns = resourcePatterns, - serviceLoaderEntries = serviceLoaderEntries, - ) - } - - /** - * Analyzes a classpath that may contain both JARs and class directories. - */ - fun analyzeClasspath(files: Iterable): AnalysisResult { - var merged = AnalysisResult() - for (file in files) { - merged = merged + - when { - file.isDirectory -> analyzeClassDir(file) - file.isFile && file.name.endsWith(".jar") -> analyzeJar(file) - else -> continue - } - } - return merged - } - - /** - * Analyzes multiple JARs and merges results. - */ - fun analyzeJars(jarPaths: List): AnalysisResult { - var merged = AnalysisResult() - for (jar in jarPaths) { - merged = merged + analyzeJar(jar) - } - return merged - } - - /** - * Resolves JNI callback types: for each type found as a field, parameter, or superclass - * in a JNI class, scan that class to extract all non-private methods/fields as JNI-accessible - * entries. Also expands to inner classes (e.g., Function -> Function$Aggregate, Function$Window). - */ - private fun resolveJniCallbackTypes( - callbackCandidates: Set, - classBytesIndex: Map, - jniEntries: MutableSet, - ) { - // Expand candidates with inner classes found in the classBytesIndex - val expandedCandidates = mutableSetOf() - expandedCandidates.addAll(callbackCandidates) - - for (typeName in callbackCandidates) { - val internalPrefix = typeName.replace('.', '/') + "$" - for (key in classBytesIndex.keys) { - if (key.startsWith(internalPrefix)) { - expandedCandidates.add(key.replace('/', '.')) - } - } - } - - for (typeName in expandedCandidates) { - // Skip JDK types and types already fully covered - if (typeName.startsWith("java.") || typeName.startsWith("javax.")) continue - if (jniEntries.any { it.type == typeName && it.methods.isNotEmpty() }) continue - - // Look up the class bytes by internal name (com/foo/Bar) - val internalName = typeName.replace('.', '/') - val classBytes = classBytesIndex[internalName] ?: continue - - val callbackEntry = - try { - NativeMethodDetector.extractJniCallbackEntry(classBytes) - } catch (_: IllegalArgumentException) { - continue - } - if (callbackEntry != null && (callbackEntry.methods.isNotEmpty() || callbackEntry.fields.isNotEmpty())) { - // Remove any existing bare entry and replace with the detailed one - jniEntries.removeAll { it.type == typeName } - jniEntries.add(callbackEntry) - } - } - } - - /** - * Enriches JNI class entries (classes that declare native methods) with their - * non-private fields and non-native methods. Native code typically accesses fields - * via GetFieldID and calls non-native methods via CallMethod on these classes. - */ - private fun enrichJniClassEntries( - classBytesIndex: Map, - jniEntries: MutableSet, - ) { - // Collect types that have native methods (they have methods in their JNI entry) - val nativeClassTypes = - jniEntries - .filter { it.methods.isNotEmpty() && !it.jniAccessible } - .map { it.type } - .toList() - - for (typeName in nativeClassTypes) { - val internalName = typeName.replace('.', '/') - val classBytes = classBytesIndex[internalName] ?: continue - - val fullEntry = - try { - NativeMethodDetector.extractJniCallbackEntry(classBytes) ?: continue - } catch (_: IllegalArgumentException) { - continue - } - - // Merge: keep native methods from pass 1, add fields + non-native methods from callback scan - val existingEntry = jniEntries.first { it.type == typeName } - val mergedMethods = existingEntry.methods + fullEntry.methods - val mergedFields = fullEntry.fields - - jniEntries.remove(existingEntry) - jniEntries.add( - JniEntry( - type = typeName, - methods = mergedMethods, - fields = mergedFields, - jniAccessible = true, - ), - ) - } - } - - private fun analyzeClassBytes( - classBytes: ByteArray, - @Suppress("UNUSED_PARAMETER") jniEntries: MutableSet, - reflectionEntries: MutableSet, - resourcePatterns: MutableSet, - @Suppress("UNUSED_PARAMETER") jniReferencedTypes: MutableSet, - ) { - // Note: NativeMethodDetector is now called separately by the caller (pass 1) - reflectionEntries.addAll(ClassForNameDetector.detect(classBytes)) - reflectionEntries.addAll(ReflectionApiDetector.detect(classBytes)) - resourcePatterns.addAll(ResourceBundleDetector.detect(classBytes)) - resourcePatterns.addAll(ResourceAccessDetector.detect(classBytes)) - reflectionEntries.addAll(MethodHandleDetector.detect(classBytes)) - reflectionEntries.addAll(ProxyDetector.detect(classBytes)) - reflectionEntries.addAll(KotlinSerializableDetector.detect(classBytes)) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt deleted file mode 100644 index f886e61ec..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt +++ /dev/null @@ -1,212 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer - -import groovy.json.JsonSlurper -import java.io.File - -/** - * Parses Oracle GraalVM Reachability Metadata Repository old-format JSON files - * (reflect-config.json, jni-config.json, resource-config.json) into [AnalysisResult]. - * - * The Oracle repo uses individual config files per type (reflect-config.json, jni-config.json) - * which are JSON arrays, unlike the newer reachability-metadata.json format. - */ -internal object OracleRepoParser { - // Instantiate locally per call — JsonSlurper is not thread-safe - private fun slurper() = JsonSlurper() - - /** - * Parses all config files in a metadata directory. - */ - fun parseMetadataDir(dir: File): AnalysisResult { - val reflectConfig = File(dir, "reflect-config.json") - val jniConfig = File(dir, "jni-config.json") - val resourceConfig = File(dir, "resource-config.json") - - val reflectionEntries = if (reflectConfig.exists()) parseReflectConfig(reflectConfig) else emptySet() - val jniEntries = if (jniConfig.exists()) parseJniConfig(jniConfig) else emptySet() - val resourcePatterns = if (resourceConfig.exists()) parseResourceConfig(resourceConfig) else emptySet() - - return AnalysisResult( - reflectionEntries = reflectionEntries, - jniEntries = jniEntries, - resourcePatterns = resourcePatterns, - ) - } - - /** - * Parses a reflect-config.json (old format: JSON array of type entries). - */ - fun parseReflectConfig(file: File): Set = parseTypeArray(file).map { it.toReflectionEntry() }.toSet() - - /** - * Parses a jni-config.json (old format: JSON array of type entries). - */ - fun parseJniConfig(file: File): Set = parseTypeArray(file).map { it.toJniEntry() }.toSet() - - /** - * Parses a resource-config.json. - * Old format: `{ "resources": { "includes": [...] }, "bundles": [...] }` - * New format: `{ "resources": [...], "bundles": [...] }` - */ - fun parseResourceConfig(file: File): Set { - val patterns = mutableSetOf() - - @Suppress("UNCHECKED_CAST") - val root = slurper().parseText(file.readText()) as? Map ?: return emptySet() - - // Handle old format: resources.includes - @Suppress("UNCHECKED_CAST") - val resources = root["resources"] - when (resources) { - is Map<*, *> -> { - @Suppress("UNCHECKED_CAST") - val includes = resources["includes"] as? List> ?: emptyList() - for (entry in includes) { - val pattern = entry["pattern"] as? String - if (pattern != null) { - patterns.add(ResourcePattern(glob = pattern)) - } - } - } - is List<*> -> { - @Suppress("UNCHECKED_CAST") - for (entry in resources as List>) { - val glob = entry["glob"] as? String - if (glob != null) { - patterns.add(ResourcePattern(glob = glob)) - } - } - } - } - - // Handle bundles - @Suppress("UNCHECKED_CAST") - val bundles = root["bundles"] as? List> - if (bundles != null) { - for (entry in bundles) { - val name = entry["name"] as? String - if (name != null) { - patterns.add(ResourcePattern(bundle = name)) - } - } - } - - return patterns - } - - /** - * Parses a new-format reachability-metadata.json (wrapped in object with sections). - */ - fun parseReachabilityMetadata(file: File): AnalysisResult { - @Suppress("UNCHECKED_CAST") - val root = slurper().parseText(file.readText()) as? Map ?: return AnalysisResult() - - @Suppress("UNCHECKED_CAST") - val reflectionArray = root["reflection"] as? List> ?: emptyList() - - @Suppress("UNCHECKED_CAST") - val jniArray = root["jni"] as? List> ?: emptyList() - - val reflectionEntries = reflectionArray.map { parseTypeMap(it).toReflectionEntry() }.toSet() - val jniEntries = jniArray.map { parseTypeMap(it).toJniEntry() }.toSet() - - val resourcePatterns = mutableSetOf() - - @Suppress("UNCHECKED_CAST") - val resources = root["resources"] as? List> - if (resources != null) { - for (entry in resources) { - val glob = entry["glob"] as? String - val bundle = entry["bundle"] as? String - val module = entry["module"] as? String - if (glob != null || bundle != null) { - resourcePatterns.add(ResourcePattern(glob = glob, bundle = bundle, module = module)) - } - } - } - - return AnalysisResult( - reflectionEntries = reflectionEntries, - jniEntries = jniEntries, - resourcePatterns = resourcePatterns, - ) - } - - // Internal parsed type representation before converting to ReflectionEntry or JniEntry - private data class ParsedType( - val name: String, - val allDeclaredFields: Boolean = false, - val allDeclaredMethods: Boolean = false, - val allDeclaredConstructors: Boolean = false, - val allPublicFields: Boolean = false, - val allPublicMethods: Boolean = false, - val allPublicConstructors: Boolean = false, - val unsafeAllocated: Boolean = false, - val methods: Set = emptySet(), - val fields: Set = emptySet(), - ) { - fun toReflectionEntry() = - ReflectionEntry( - type = name, - allDeclaredFields = allDeclaredFields, - allDeclaredMethods = allDeclaredMethods, - allDeclaredConstructors = allDeclaredConstructors, - allPublicFields = allPublicFields, - allPublicMethods = allPublicMethods, - allPublicConstructors = allPublicConstructors, - unsafeAllocated = unsafeAllocated, - methods = methods, - fields = fields, - ) - - fun toJniEntry() = - JniEntry( - type = name, - methods = methods, - fields = fields, - ) - } - - @Suppress("UNCHECKED_CAST") - private fun parseTypeArray(file: File): List { - val array = slurper().parseText(file.readText()) as? List> ?: return emptyList() - return array.mapNotNull { map -> parseTypeMap(map).takeIf { it.name.isNotEmpty() } } - } - - @Suppress("UNCHECKED_CAST") - private fun parseTypeMap(map: Map): ParsedType { - val name = (map["name"] as? String) ?: (map["type"] as? String) ?: "" - - val methods = mutableSetOf() - val methodsList = map["methods"] as? List> - if (methodsList != null) { - for (m in methodsList) { - val mName = m["name"] as? String ?: continue - val params = (m["parameterTypes"] as? List) ?: emptyList() - methods.add(MethodSignature(mName, params)) - } - } - - val fields = mutableSetOf() - val fieldsList = map["fields"] as? List> - if (fieldsList != null) { - for (f in fieldsList) { - val fName = f["name"] as? String ?: continue - fields.add(fName) - } - } - - return ParsedType( - name = name, - allDeclaredFields = map["allDeclaredFields"] == true, - allDeclaredMethods = map["allDeclaredMethods"] == true, - allDeclaredConstructors = map["allDeclaredConstructors"] == true, - allPublicFields = map["allPublicFields"] == true, - allPublicMethods = map["allPublicMethods"] == true, - allPublicConstructors = map["allPublicConstructors"] == true, - unsafeAllocated = map["unsafeAllocated"] == true, - methods = methods, - fields = fields, - ) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt deleted file mode 100644 index 6fa4834a6..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/ResultComparator.kt +++ /dev/null @@ -1,165 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer - -/** - * Compares analyzer output against an Oracle repo baseline and produces a gap report. - * - * For each entry in the Oracle baseline: - * - DETECTED: the analyzer found the type with all required methods/fields - * - PARTIALLY_DETECTED: the analyzer found the type but some methods/fields are missing - * - NOT_DETECTABLE: the analyzer couldn't find the type at all - * - * For entries found by the analyzer but not in the baseline: EXTRA - */ -internal object ResultComparator { - /** - * Compares reflection entries from the analyzer against an Oracle baseline. - */ - fun compareReflection( - analyzerResult: AnalysisResult, - oracleBaseline: AnalysisResult, - ): AnalysisReport { - val entries = mutableListOf() - val analyzerByType = analyzerResult.allReflectionEntries.associateBy { it.type } - val oracleByType = oracleBaseline.reflectionEntries.associateBy { it.type } - - // Check each Oracle entry against analyzer output - for ((type, oracleEntry) in oracleByType) { - val analyzerEntry = analyzerByType[type] - - if (analyzerEntry == null) { - entries.add( - GapReportEntry( - type = type, - status = DetectionStatus.NOT_DETECTABLE, - reason = inferNotDetectableReason(type), - ), - ) - continue - } - - // Check if all required methods/fields are present - val missingMethods = oracleEntry.methods - analyzerEntry.methods - val missingFields = oracleEntry.fields - analyzerEntry.fields - - // If Oracle has broad flags that analyzer didn't set, consider partial - val hasMissingBroadFlags = hasMissingBroadFlags(oracleEntry, analyzerEntry) - - when { - missingMethods.isEmpty() && missingFields.isEmpty() && !hasMissingBroadFlags -> { - entries.add(GapReportEntry(type = type, status = DetectionStatus.DETECTED)) - } - else -> { - entries.add( - GapReportEntry( - type = type, - status = DetectionStatus.PARTIALLY_DETECTED, - missingMethods = missingMethods, - missingFields = missingFields, - ), - ) - } - } - } - - // Check for extra entries found by analyzer but not in Oracle - for (type in analyzerByType.keys) { - if (type !in oracleByType) { - entries.add(GapReportEntry(type = type, status = DetectionStatus.EXTRA)) - } - } - - return AnalysisReport(entries = entries.sortedBy { it.type }) - } - - /** - * Compares JNI entries from the analyzer against an Oracle baseline. - */ - fun compareJni( - analyzerResult: AnalysisResult, - oracleBaseline: AnalysisResult, - ): AnalysisReport { - val entries = mutableListOf() - val analyzerByType = analyzerResult.jniEntries.associateBy { it.type } - val oracleByType = oracleBaseline.jniEntries.associateBy { it.type } - - for ((type, oracleEntry) in oracleByType) { - val analyzerEntry = analyzerByType[type] - - if (analyzerEntry == null) { - entries.add( - GapReportEntry( - type = type, - status = DetectionStatus.NOT_DETECTABLE, - reason = inferNotDetectableReason(type), - ), - ) - continue - } - - val missingMethods = oracleEntry.methods - analyzerEntry.methods - val missingFields = oracleEntry.fields - analyzerEntry.fields - - when { - missingMethods.isEmpty() && missingFields.isEmpty() -> { - entries.add(GapReportEntry(type = type, status = DetectionStatus.DETECTED)) - } - else -> { - entries.add( - GapReportEntry( - type = type, - status = DetectionStatus.PARTIALLY_DETECTED, - missingMethods = missingMethods, - missingFields = missingFields, - ), - ) - } - } - } - - for (type in analyzerByType.keys) { - if (type !in oracleByType) { - entries.add(GapReportEntry(type = type, status = DetectionStatus.EXTRA)) - } - } - - return AnalysisReport(entries = entries.sortedBy { it.type }) - } - - /** - * Full comparison covering reflection, JNI, and resources. - */ - fun compare( - analyzerResult: AnalysisResult, - oracleBaseline: AnalysisResult, - ): AnalysisReport { - val reflectionReport = compareReflection(analyzerResult, oracleBaseline) - val jniReport = compareJni(analyzerResult, oracleBaseline) - return AnalysisReport(entries = reflectionReport.entries + jniReport.entries) - } - - private fun hasMissingBroadFlags( - oracle: ReflectionEntry, - analyzer: ReflectionEntry, - ): Boolean = - (oracle.allDeclaredFields && !analyzer.allDeclaredFields) || - (oracle.allDeclaredMethods && !analyzer.allDeclaredMethods) || - (oracle.allDeclaredConstructors && !analyzer.allDeclaredConstructors) || - (oracle.allPublicFields && !analyzer.allPublicFields) || - (oracle.allPublicMethods && !analyzer.allPublicMethods) || - (oracle.allPublicConstructors && !analyzer.allPublicConstructors) - - /** - * Heuristically infers why a type couldn't be detected statically. - */ - private fun inferNotDetectableReason(type: String): String = - when { - type.contains("\$\$") || type.contains("CGLIB") || type.contains("ByteBuddy") -> - "Dynamic proxy/bytecode generation" - type.contains("sun.") || type.contains("jdk.internal") -> - "JDK internal class, loaded via runtime callback" - type.endsWith("Impl") || type.endsWith("Factory") -> - "Likely loaded via framework configuration or XML" - else -> - "Dynamic class loading or framework-driven instantiation" - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt deleted file mode 100644 index eb6e01867..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt +++ /dev/null @@ -1,233 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes - -/** - * Detects class loading calls with literal string arguments and produces reflection entries. - * - * Detected patterns: - * - `Class.forName("literal")` - * - `MethodHandles.Lookup.findClass("literal")` (used by Lucene) - * - Custom class-loading wrappers: any method named `loadClass`, `isClassAvailable`, - * `classForName`, etc. where the argument is a FQCN literal - * - * Uses a local variable tracker to follow string constants through ASTORE/ALOAD - * pairs that typically appear between LDC and INVOKESTATIC in compiled bytecode. - * Also collects all string constants in the method that look like class names. - */ -internal object ClassForNameDetector { - // Method names that indicate class loading (covers common wrappers like Sentry's LoadClass) - private val CLASS_LOADING_METHOD_NAMES = - setOf( - "forName", - "loadClass", - "findClass", - "classForName", - "isClassAvailable", - "getOrLoadClass", - "forNameOrNull", - ) - - fun detect(classBytes: ByteArray): Set { - val entries = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = - object : MethodVisitor(Opcodes.ASM9) { - // Track string constants in local variable slots - private val localStrings = mutableMapOf() - - // The most recent string constant on the stack - private var stackString: String? = null - - // All string constants seen that look like class names, for forName calls - // that use variables loaded from elsewhere - private var hasClassLoadingCall = false - private val candidateClassNames = mutableSetOf() - - override fun visitLdcInsn(value: Any?) { - stackString = value as? String - val str = value as? String - if (str != null && isValidClassName(str)) { - candidateClassNames.add(str) - } - } - - override fun visitVarInsn( - opcode: Int, - varIndex: Int, - ) { - when (opcode) { - Opcodes.ASTORE -> { - // Store the current stack string into the local variable slot - val str = stackString - if (str != null) { - localStrings[varIndex] = str - } - stackString = null - } - Opcodes.ALOAD -> { - // Load a string from a local variable back to the stack - stackString = localStrings[varIndex] - } - else -> stackString = null - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - if (isClassLoadingCall(opcode, owner, name, descriptor)) { - hasClassLoadingCall = true - val className = stackString - if (className != null && isValidClassName(className)) { - entries.add(ReflectionEntry(type = className)) - } - } - stackString = null - } - - override fun visitInsn(opcode: Int) { - // DUP preserves stack state, others clear it - if (opcode != Opcodes.DUP && opcode != Opcodes.DUP2) { - stackString = null - } - } - - override fun visitFieldInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ) { - stackString = null - } - - override fun visitIntInsn( - opcode: Int, - operand: Int, - ) { - stackString = null - } - - override fun visitTypeInsn( - opcode: Int, - type: String, - ) { - stackString = null - } - - override fun visitJumpInsn( - opcode: Int, - label: org.objectweb.asm.Label, - ) { - // Don't clear stack string on jumps — conditional forName patterns - } - - override fun visitEnd() { - // If this method has class loading calls with unresolved string args, - // add candidate class names — but only those that weren't already - // directly matched. Apply stricter validation to reduce false positives - // from log messages or SQL queries that resemble FQCNs. - if (hasClassLoadingCall) { - for (name in candidateClassNames) { - if (isStrictClassName(name)) { - entries.add(ReflectionEntry(type = name)) - } - } - } - } - } - }, - 0, - ) - return entries - } - - /** - * Returns true if the method call is a class loading operation. - */ - private fun isClassLoadingCall( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ): Boolean { - // Class.forName(String) / Class.forName(String, boolean, ClassLoader) - if (opcode == Opcodes.INVOKESTATIC && - owner == "java/lang/Class" && - name == "forName" - ) { - return true - } - - // MethodHandles.Lookup.findClass(String) — used by Lucene - if (opcode == Opcodes.INVOKEVIRTUAL && - owner == "java/lang/invoke/MethodHandles\$Lookup" && - name == "findClass" - ) { - return true - } - - // Generic class-loading wrappers: any method taking a String as first arg - // whose name matches known patterns (e.g., Sentry LoadClass.loadClass) - if (name in CLASS_LOADING_METHOD_NAMES && - descriptor.startsWith("(Ljava/lang/String;") - ) { - return true - } - - return false - } -} - -/** - * Basic validation that a string looks like a fully qualified class name. - * Used for direct Class.forName argument tracking. - */ -internal fun isValidClassName(name: String): Boolean { - if (name.isBlank() || name.length < 3) return false - if (name.contains(' ') || name.contains('\t') || name.contains('\n')) return false - if (!name.contains('.')) return false - // Allow array types like "[Ljava.lang.String;" - val cleaned = name.removePrefix("[").removePrefix("L").removeSuffix(";") - return cleaned.split('.').all { segment -> - segment.isNotEmpty() && (segment[0].isJavaIdentifierStart() || segment[0] == '$') - } -} - -/** - * Stricter validation for candidate class names used in the fallback `visitEnd()` path. - * Requires at least 2 dot-separated segments, all segments must be valid Java identifiers, - * and the string must not contain characters unusual in class names. - */ -private fun isStrictClassName(name: String): Boolean { - if (!isValidClassName(name)) return false - // Must have at least 2 dots (e.g., "com.example.ClassName") - val dotCount = name.count { it == '.' } - if (dotCount < 2) return false - // No characters that appear in sentences but not in class names - if (name.any { it in "=:;,!?(){}[]<>\"'@#%&*+/\\" }) return false - // Every segment must be a valid Java identifier (no numbers starting a segment, no hyphens) - val cleaned = name.removePrefix("[").removePrefix("L").removeSuffix(";") - return cleaned.split('.').all { segment -> - segment.isNotEmpty() && - segment[0].isJavaIdentifierStart() && - segment.all { ch -> ch.isJavaIdentifierPart() } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt deleted file mode 100644 index 767d243a9..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt +++ /dev/null @@ -1,86 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern -import java.util.jar.JarFile - -/** - * Scans JAR entries to detect resources that GraalVM native-image needs to include: - * - Native libraries (.so, .dll, .dylib, .jnilib) - * - Properties files at root or known paths (excluding META-INF) - * - Text resources in known framework resource directories (Lucene, ICU4J, etc.) - */ -internal object JarResourceDetector { - private val NATIVE_LIB_EXTENSIONS = setOf("so", "dll", "dylib", "jnilib", "a") - - private val RESOURCE_EXTENSIONS = setOf("properties", "txt", "xml", "json", "cfg", "conf") - - // NLP/analysis directory names specific enough to avoid false positives - private val ANALYSIS_PATH_SEGMENTS = - arrayOf( - "/stopwords/", - "/dictionaries/", - "/snowball/", - "/hunspell/", - "/charfilter/", - "/stemmer/", - ) - - // Framework prefixes known to contain runtime-loaded resources - private val FRAMEWORK_RESOURCE_PREFIXES = - arrayOf( - "org/apache/lucene/", - "com/ibm/icu/impl/data/", - "opennlp/", - ) - - fun detect(jarFile: JarFile): Set { - val patterns = mutableSetOf() - - for (entry in jarFile.entries()) { - if (entry.isDirectory) continue - val name = entry.name - - // Skip class files and META-INF signatures/manifests - if (name.endsWith(".class")) continue - if (name.startsWith("META-INF/MANIFEST.MF")) continue - if (name.startsWith("META-INF/maven/")) continue - if (name.startsWith("META-INF/versions/")) continue - if (name.endsWith(".SF") || name.endsWith(".RSA") || name.endsWith(".DSA")) continue - - val ext = name.substringAfterLast('.', "") - - when { - // Native libraries — always include, they're loaded at runtime - ext in NATIVE_LIB_EXTENSIONS -> { - patterns.add(ResourcePattern(glob = name)) - } - - // Properties files — commonly loaded via getResourceAsStream at runtime - // Include root-level and known framework paths - ext == "properties" && !name.startsWith("META-INF/") -> { - patterns.add(ResourcePattern(glob = name)) - } - - // Text/config resources in known framework or NLP analysis directories - ext in RESOURCE_EXTENSIONS && isAnalysisResourcePath(name) -> { - patterns.add(ResourcePattern(glob = name)) - } - } - } - - return patterns - } - - /** - * Checks whether the path belongs to a known framework resource directory - * or contains a specific NLP/analysis directory segment. - * - * Avoids generic substrings like "/resources/" or "/data/" that would match - * arbitrary Java package paths (e.g. `com/company/data/Service.xml`). - */ - private fun isAnalysisResourcePath(name: String): Boolean { - if (FRAMEWORK_RESOURCE_PREFIXES.any { name.startsWith(it) }) return true - if (ANALYSIS_PATH_SEGMENTS.any { name.contains(it) }) return true - return false - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt deleted file mode 100644 index bf777e91f..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/KotlinSerializableDetector.kt +++ /dev/null @@ -1,124 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import org.objectweb.asm.AnnotationVisitor -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.FieldVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes - -/** - * Detects classes annotated with `@kotlinx.serialization.Serializable` and produces - * reflection entries for the fields and methods that the serialization runtime accesses - * reflectively (especially in GraalVM native-image where the generated serializer - * needs to find `INSTANCE`, `serializer()`, and the `$serializer` companion). - * - * For sealed class hierarchies used in navigation (e.g. Compose Navigation), - * each subclass needs reflection access for its `INSTANCE` field and `serializer()` method. - */ -internal object KotlinSerializableDetector { - private const val SERIALIZABLE_DESC = "Lkotlinx/serialization/Serializable;" - - fun detect(classBytes: ByteArray): Set { - val entries = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept(SerializableClassVisitor(entries), 0) - return entries - } - - private class SerializableClassVisitor( - private val entries: MutableSet, - ) : ClassVisitor(Opcodes.ASM9) { - private var className = "" - private var isSerializable = false - private var hasInstanceField = false - private var hasSerializerMethod = false - private val fields = mutableSetOf() - private val methods = mutableSetOf() - - override fun visit( - version: Int, - access: Int, - name: String, - signature: String?, - superName: String?, - interfaces: Array?, - ) { - className = name.replace('/', '.') - } - - override fun visitAnnotation( - descriptor: String, - visible: Boolean, - ): AnnotationVisitor? { - if (descriptor == SERIALIZABLE_DESC) { - isSerializable = true - } - return null - } - - override fun visitField( - access: Int, - name: String, - descriptor: String, - signature: String?, - value: Any?, - ): FieldVisitor? { - if (isSerializable) { - if (name == "INSTANCE") { - hasInstanceField = true - fields.add("INSTANCE") - } else if (name == "\$cachedSerializer\$delegate" || name == "Companion") { - fields.add(name) - } - } - return null - } - - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor? { - if (isSerializable) { - if (name == "serializer" && descriptor.startsWith("()")) { - hasSerializerMethod = true - methods.add(MethodSignature("serializer")) - } else if (name == "") { - val paramTypes = - org.objectweb.asm.Type - .getArgumentTypes(descriptor) - .map { asmTypeToJavaName(it) } - methods.add(MethodSignature("", paramTypes)) - } - } - return null - } - - override fun visitEnd() { - if (isSerializable) { - entries.add( - ReflectionEntry( - type = className, - fields = fields, - methods = methods, - ), - ) - // Emit Companion.serializer() entry for navigation-compose and similar - // frameworks that reflectively call serializer() on the Companion object - if ("Companion" in fields) { - entries.add( - ReflectionEntry( - type = "$className\$Companion", - methods = setOf(MethodSignature("serializer")), - ), - ) - } - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt deleted file mode 100644 index 28eb4f919..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt +++ /dev/null @@ -1,200 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes -import org.objectweb.asm.Type - -/** - * Detects `MethodHandles.Lookup.findVirtual/findStatic/findGetter/findSetter` calls - * with traceable target class and string literal method/field names. - * - * Typical bytecode pattern: - * ``` - * LDC Type com/example/Foo // target class - * LDC "methodName" // member name - * ... MethodType args ... - * INVOKEVIRTUAL Lookup.findVirtual - * ``` - * - * The detector tracks both the most recent class type (from `LDC Type`) and string - * constant to resolve the target class and member name. - */ -internal object MethodHandleDetector { - private val FIND_METHOD_NAMES = - setOf( - "findVirtual", - "findStatic", - "findSpecial", - ) - - private val FIND_FIELD_NAMES = - setOf( - "findGetter", - "findSetter", - "findStaticGetter", - "findStaticSetter", - ) - - fun detect(classBytes: ByteArray): Set { - val entries = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = - object : MethodVisitor(Opcodes.ASM9) { - // Track the most recent class type from LDC (e.g., LDC Type com/example/Foo) - private var lastClassType: String? = null - - // Track local variable slots that hold class types - private val localClassTypes = mutableMapOf() - private var lastStringConstant: String? = null - private val localStrings = mutableMapOf() - - override fun visitCode() { - lastClassType = null - localClassTypes.clear() - lastStringConstant = null - localStrings.clear() - } - - override fun visitLdcInsn(value: Any?) { - when (value) { - is Type -> { - if (value.sort == Type.OBJECT) { - lastClassType = value.className - } - lastStringConstant = null - } - is String -> { - lastStringConstant = value - } - else -> { - lastStringConstant = null - } - } - } - - override fun visitVarInsn( - opcode: Int, - varIndex: Int, - ) { - when (opcode) { - Opcodes.ASTORE -> { - if (lastClassType != null) { - localClassTypes[varIndex] = lastClassType!! - } - if (lastStringConstant != null) { - localStrings[varIndex] = lastStringConstant!! - } - lastClassType = null - lastStringConstant = null - } - Opcodes.ALOAD -> { - lastClassType = localClassTypes[varIndex] ?: lastClassType - lastStringConstant = localStrings[varIndex] - } - else -> { - lastStringConstant = null - } - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - if (opcode == Opcodes.INVOKEVIRTUAL && - owner == "java/lang/invoke/MethodHandles\$Lookup" - ) { - val targetClass = lastClassType - val memberName = lastStringConstant - - if (targetClass != null) { - when { - name in FIND_METHOD_NAMES && memberName != null -> { - entries.add( - ReflectionEntry( - type = targetClass, - methods = setOf(MethodSignature(memberName)), - ), - ) - } - name in FIND_FIELD_NAMES && memberName != null -> { - entries.add( - ReflectionEntry( - type = targetClass, - fields = setOf(memberName), - ), - ) - } - name == "findConstructor" -> { - entries.add( - ReflectionEntry( - type = targetClass, - methods = setOf(MethodSignature("")), - ), - ) - } - } - } - } - lastClassType = null - lastStringConstant = null - } - - override fun visitInsn(opcode: Int) { - if (opcode != Opcodes.DUP && opcode != Opcodes.DUP2) { - lastStringConstant = null - } - } - - override fun visitFieldInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ) { - lastStringConstant = null - } - - override fun visitIntInsn( - opcode: Int, - operand: Int, - ) { - lastStringConstant = null - } - - override fun visitTypeInsn( - opcode: Int, - type: String, - ) { - lastStringConstant = null - } - - override fun visitJumpInsn( - opcode: Int, - label: org.objectweb.asm.Label, - ) { - // Don't clear — conditional patterns - } - } - }, - 0, - ) - - return entries - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt deleted file mode 100644 index 6123d6a45..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/NativeMethodDetector.kt +++ /dev/null @@ -1,200 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.JniEntry -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.FieldVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes -import org.objectweb.asm.Type - -/** - * Detects native methods (ACC_NATIVE flag) in class files and produces JNI entries. - * - * Also extracts types referenced in native method signatures (parameters AND return types) - * since GraalVM JNI configs need all types accessible from native code. - */ -internal object NativeMethodDetector { - data class NativeMethodResult( - val jniEntries: Set, - val referencedTypes: Set, - /** Field types of classes that have native methods (potential JNI callback types). */ - val jniClassFieldTypes: Set, - /** Superclass of classes that have native methods (native code often calls superclass methods). */ - val superclassType: String? = null, - ) - - fun detect(classBytes: ByteArray): Set = detectWithReferences(classBytes).jniEntries - - fun detectWithReferences(classBytes: ByteArray): NativeMethodResult { - val entries = mutableMapOf>() - val referencedTypes = mutableSetOf() - val fieldTypes = mutableSetOf() - var hasNativeMethods = false - var superClassName: String? = null - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - private lateinit var className: String - - override fun visit( - version: Int, - access: Int, - name: String, - signature: String?, - superName: String?, - interfaces: Array?, - ) { - className = name.replace('/', '.') - if (superName != null && superName != "java/lang/Object") { - superClassName = superName.replace('/', '.') - } - } - - override fun visitField( - access: Int, - name: String, - descriptor: String, - signature: String?, - value: Any?, - ): FieldVisitor? { - // Collect field types — we'll use them if this class has native methods - val fieldType = Type.getType(descriptor) - collectObjectTypes(fieldType, fieldTypes) - return null - } - - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor? { - if (access and Opcodes.ACC_NATIVE != 0) { - hasNativeMethods = true - val argTypes = Type.getArgumentTypes(descriptor) - val retType = Type.getReturnType(descriptor) - val paramTypes = argTypes.map { asmTypeToJavaName(it) } - - entries - .getOrPut(className) { mutableSetOf() } - .add(MethodSignature(name, paramTypes)) - - for (t in argTypes) { - collectObjectTypes(t, referencedTypes) - } - collectObjectTypes(retType, referencedTypes) - } - return null - } - }, - ClassReader.SKIP_CODE or ClassReader.SKIP_DEBUG, - ) - - // Only report field types and superclass if this class actually has native methods - val jniFieldTypes = if (hasNativeMethods) fieldTypes else emptySet() - val superType = if (hasNativeMethods) superClassName else null - - val jniEntries = entries.map { (type, methods) -> JniEntry(type = type, methods = methods) }.toSet() - return NativeMethodResult(jniEntries, referencedTypes, jniFieldTypes, superType) - } - - /** - * Scans a class to extract all non-private methods and fields, producing a JNI entry - * with `jniAccessible` semantics. Used for types referenced as fields in JNI classes - * (these are callback types called from native code). - */ - fun extractJniCallbackEntry(classBytes: ByteArray): JniEntry? { - var className = "" - val methods = mutableSetOf() - val fields = mutableSetOf() - - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visit( - version: Int, - access: Int, - name: String, - signature: String?, - superName: String?, - interfaces: Array?, - ) { - className = name.replace('/', '.') - } - - override fun visitField( - access: Int, - name: String, - descriptor: String, - signature: String?, - value: Any?, - ): FieldVisitor? { - // Include non-private fields (native code accesses these via GetFieldID/GetStaticFieldID) - if (access and Opcodes.ACC_PRIVATE == 0) { - fields.add(name) - } - return null - } - - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor? { - // Include non-private non-static methods (native code calls these via CallMethod) - // Also include constructors - if (name == "") return null - if (access and Opcodes.ACC_PRIVATE != 0 && name != "") return null - - val paramTypes = Type.getArgumentTypes(descriptor).map { asmTypeToJavaName(it) } - methods.add(MethodSignature(name, paramTypes)) - return null - } - }, - ClassReader.SKIP_CODE or ClassReader.SKIP_DEBUG, - ) - - if (className.isEmpty()) return null - return JniEntry(type = className, methods = methods, fields = fields, jniAccessible = true) - } - - /** - * Recursively collects all object types from an ASM Type (handles arrays). - */ - private fun collectObjectTypes( - type: Type, - into: MutableSet, - ) { - when (type.sort) { - Type.OBJECT -> into.add(type.className) - Type.ARRAY -> collectObjectTypes(type.elementType, into) - } - } -} - -/** - * Converts an ASM Type to a Java source-level type name as used in GraalVM configs. - */ -internal fun asmTypeToJavaName(type: Type): String = - when (type.sort) { - Type.BOOLEAN -> "boolean" - Type.BYTE -> "byte" - Type.CHAR -> "char" - Type.SHORT -> "short" - Type.INT -> "int" - Type.LONG -> "long" - Type.FLOAT -> "float" - Type.DOUBLE -> "double" - Type.VOID -> "void" - Type.ARRAY -> { - val elementType = asmTypeToJavaName(type.elementType) - elementType + "[]".repeat(type.dimensions) - } - Type.OBJECT -> type.className - else -> type.className - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt deleted file mode 100644 index 7d5426b6a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ProxyDetector.kt +++ /dev/null @@ -1,66 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes -import org.objectweb.asm.Type - -/** - * Detects `Proxy.newProxyInstance(...)` calls and attempts to trace the interface types - * passed as the second argument. - * - * When the interfaces are loaded via `new Class[]{SomeInterface.class}`, the detector - * can extract the concrete interface names. - */ -internal object ProxyDetector { - fun detect(classBytes: ByteArray): Set { - val entries = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = - object : MethodVisitor(Opcodes.ASM9) { - private val recentClasses = mutableListOf() - - override fun visitCode() { - recentClasses.clear() - } - - override fun visitLdcInsn(value: Any?) { - if (value is Type && value.sort == Type.OBJECT) { - recentClasses.add(value.className) - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - if (opcode == Opcodes.INVOKESTATIC && - owner == "java/lang/reflect/Proxy" && - name == "newProxyInstance" - ) { - for (cls in recentClasses) { - entries.add(ReflectionEntry(type = cls)) - } - } - recentClasses.clear() - } - } - }, - 0, - ) - return entries - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt deleted file mode 100644 index 086a2bf3f..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt +++ /dev/null @@ -1,224 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes -import org.objectweb.asm.Type - -/** - * Detects reflective access via: - * - `cls.getMethod("name")`, `cls.getDeclaredField("name")`, etc. - * - `.class` literal references (LDC of Type.OBJECT) when used before reflection APIs - * - `Class.forName("name").newInstance()` and similar patterns - * - * Tracks both string constants and class constants through local variable stores/loads. - */ -internal object ReflectionApiDetector { - private val METHOD_LOOKUPS = setOf("getMethod", "getDeclaredMethod") - private val FIELD_LOOKUPS = setOf("getField", "getDeclaredField") - private val CONSTRUCTOR_LOOKUPS = setOf("getConstructor", "getDeclaredConstructor") - private val ALL_MEMBER_LOOKUPS = - METHOD_LOOKUPS + FIELD_LOOKUPS + CONSTRUCTOR_LOOKUPS + - setOf("getMethods", "getDeclaredMethods", "getFields", "getDeclaredFields") - - fun detect(classBytes: ByteArray): Set { - val results = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = MethodReflectionVisitor(results) - }, - 0, - ) - return results - } - - private class MethodReflectionVisitor( - private val results: MutableSet, - ) : MethodVisitor(Opcodes.ASM9) { - // Track string constants in local variables - private val localStrings = mutableMapOf() - - // Track class references (from .class literals or Class.forName results) in local variables - private val localClasses = mutableMapOf() - - private var stackString: String? = null - private var stackClass: String? = null - - override fun visitLdcInsn(value: Any?) { - when (value) { - is String -> { - stackString = value - stackClass = null - } - is Type -> { - if (value.sort == Type.OBJECT) { - // .class literal, e.g. MyClass.class → LDC Type("Lcom/example/MyClass;") - stackClass = value.className - stackString = null - } - } - else -> { - stackString = null - stackClass = null - } - } - } - - override fun visitVarInsn( - opcode: Int, - varIndex: Int, - ) { - when (opcode) { - Opcodes.ASTORE -> { - stackString?.let { localStrings[varIndex] = it } - stackClass?.let { localClasses[varIndex] = it } - stackString = null - stackClass = null - } - Opcodes.ALOAD -> { - stackString = localStrings[varIndex] - stackClass = localClasses[varIndex] - } - else -> { - stackString = null - stackClass = null - } - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - // Track Class.forName results - if (opcode == Opcodes.INVOKESTATIC && - owner == "java/lang/Class" && - name == "forName" - ) { - val className = stackString - if (className != null && isValidClassName(className)) { - stackClass = className - } else { - stackClass = null - } - stackString = null - return - } - - // Track .newInstance() on a known class - if (opcode == Opcodes.INVOKEVIRTUAL && - owner == "java/lang/Class" && - name == "newInstance" - ) { - val cls = stackClass - if (cls != null) { - results.add( - ReflectionEntry( - type = cls, - methods = setOf(MethodSignature("")), - ), - ) - } - stackString = null - stackClass = null - return - } - - // Check for reflection API calls on Class - if (opcode == Opcodes.INVOKEVIRTUAL && owner == "java/lang/Class" && name in ALL_MEMBER_LOOKUPS) { - val targetClass = stackClass - val memberName = stackString - - if (targetClass != null) { - when { - name in METHOD_LOOKUPS && memberName != null -> - results.add( - ReflectionEntry( - type = targetClass, - methods = setOf(MethodSignature(memberName)), - ), - ) - name in FIELD_LOOKUPS && memberName != null -> - results.add( - ReflectionEntry( - type = targetClass, - fields = setOf(memberName), - ), - ) - name in CONSTRUCTOR_LOOKUPS -> - results.add( - ReflectionEntry( - type = targetClass, - methods = setOf(MethodSignature("")), - ), - ) - name == "getMethods" || name == "getDeclaredMethods" -> - results.add( - ReflectionEntry(type = targetClass, allDeclaredMethods = true), - ) - name == "getFields" || name == "getDeclaredFields" -> - results.add( - ReflectionEntry(type = targetClass, allDeclaredFields = true), - ) - } - } - } - - stackString = null - stackClass = null - } - - override fun visitInsn(opcode: Int) { - if (opcode != Opcodes.DUP && opcode != Opcodes.DUP2) { - stackString = null - stackClass = null - } - } - - override fun visitFieldInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ) { - stackString = null - stackClass = null - } - - override fun visitIntInsn( - opcode: Int, - operand: Int, - ) { - stackString = null - stackClass = null - } - - override fun visitTypeInsn( - opcode: Int, - type: String, - ) { - stackString = null - stackClass = null - } - - override fun visitJumpInsn( - opcode: Int, - label: org.objectweb.asm.Label, - ) { - // Don't clear on jumps — reflection is often in branched code - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt deleted file mode 100644 index 07de9a153..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt +++ /dev/null @@ -1,133 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes - -/** - * Detects `getResource("literal")` and `getResourceAsStream("literal")` calls - * and produces resource glob entries. - * - * Tracks string constants through local variable ASTORE/ALOAD pairs to handle: - * ```java - * String path = "/config/app.properties"; - * this.getClass().getResourceAsStream(path); - * ``` - */ -internal object ResourceAccessDetector { - private val RESOURCE_METHODS = setOf("getResource", "getResourceAsStream") - - private val RESOURCE_OWNERS = - setOf( - "java/lang/Class", - "java/lang/ClassLoader", - ) - - fun detect(classBytes: ByteArray): Set { - val patterns = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = - object : MethodVisitor(Opcodes.ASM9) { - private var stackString: String? = null - private val localStrings = mutableMapOf() - - override fun visitLdcInsn(value: Any?) { - stackString = value as? String - } - - override fun visitVarInsn( - opcode: Int, - varIndex: Int, - ) { - when (opcode) { - Opcodes.ASTORE -> { - val str = stackString - if (str != null) { - localStrings[varIndex] = str - } - stackString = null - } - Opcodes.ALOAD -> { - stackString = localStrings[varIndex] - } - else -> stackString = null - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - if (opcode == Opcodes.INVOKEVIRTUAL && - owner in RESOURCE_OWNERS && - name in RESOURCE_METHODS && - stackString != null - ) { - val path = normalizeResourcePath(stackString!!) - if (path.isNotEmpty()) { - patterns.add(ResourcePattern(glob = path)) - } - } - stackString = null - } - - override fun visitInsn(opcode: Int) { - if (opcode != Opcodes.DUP && opcode != Opcodes.DUP2) { - stackString = null - } - } - - override fun visitFieldInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ) { - stackString = null - } - - override fun visitIntInsn( - opcode: Int, - operand: Int, - ) { - stackString = null - } - - override fun visitTypeInsn( - opcode: Int, - type: String, - ) { - stackString = null - } - - override fun visitJumpInsn( - opcode: Int, - label: org.objectweb.asm.Label, - ) { - // Don't clear — conditional resource access patterns - } - } - }, - 0, - ) - return patterns - } - - /** - * Removes leading slash from absolute resource paths. - */ - private fun normalizeResourcePath(path: String): String = path.removePrefix("/") -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt deleted file mode 100644 index cfc9ab837..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ResourceBundleDetector.kt +++ /dev/null @@ -1,113 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern -import org.objectweb.asm.ClassReader -import org.objectweb.asm.ClassVisitor -import org.objectweb.asm.MethodVisitor -import org.objectweb.asm.Opcodes - -/** - * Detects `ResourceBundle.getBundle("literal")` calls and produces resource bundle entries. - * - * Tracks string constants through local variable ASTORE/ALOAD pairs to handle - * patterns where the bundle name is stored in a variable before the getBundle call. - */ -internal object ResourceBundleDetector { - fun detect(classBytes: ByteArray): Set { - val patterns = mutableSetOf() - val reader = ClassReader(classBytes) - reader.accept( - object : ClassVisitor(Opcodes.ASM9) { - override fun visitMethod( - access: Int, - name: String, - descriptor: String, - signature: String?, - exceptions: Array?, - ): MethodVisitor = - object : MethodVisitor(Opcodes.ASM9) { - private var stackString: String? = null - private val localStrings = mutableMapOf() - - override fun visitLdcInsn(value: Any?) { - stackString = value as? String - } - - override fun visitVarInsn( - opcode: Int, - varIndex: Int, - ) { - when (opcode) { - Opcodes.ASTORE -> { - val str = stackString - if (str != null) { - localStrings[varIndex] = str - } - stackString = null - } - Opcodes.ALOAD -> { - stackString = localStrings[varIndex] - } - else -> stackString = null - } - } - - override fun visitMethodInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - isInterface: Boolean, - ) { - if (opcode == Opcodes.INVOKESTATIC && - owner == "java/util/ResourceBundle" && - name == "getBundle" && - stackString != null - ) { - patterns.add(ResourcePattern(bundle = stackString)) - } - stackString = null - } - - override fun visitInsn(opcode: Int) { - if (opcode != Opcodes.DUP && opcode != Opcodes.DUP2) { - stackString = null - } - } - - override fun visitFieldInsn( - opcode: Int, - owner: String, - name: String, - descriptor: String, - ) { - stackString = null - } - - override fun visitIntInsn( - opcode: Int, - operand: Int, - ) { - stackString = null - } - - override fun visitTypeInsn( - opcode: Int, - type: String, - ) { - stackString = null - } - - override fun visitJumpInsn( - opcode: Int, - label: org.objectweb.asm.Label, - ) { - // Don't clear — conditional getBundle patterns - } - } - }, - 0, - ) - return patterns - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt deleted file mode 100644 index 2cb4f50db..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt +++ /dev/null @@ -1,58 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.internal.analyzer.detectors - -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.MethodSignature -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ReflectionEntry -import dev.nucleusframework.nucleus.desktop.application.internal.analyzer.ResourcePattern -import java.io.InputStream -import java.util.jar.JarFile - -/** - * Detects ServiceLoader service providers by scanning META-INF/services/ files in JARs. - * - * Each service file produces: - * - Reflection entries for each implementation class (with no-arg constructor) - * - A resource pattern for the service file itself - */ -internal object ServiceLoaderDetector { - data class ServiceResult( - val reflectionEntries: Set, - val resourcePatterns: Set, - ) - - fun detect(jarFile: JarFile): ServiceResult { - val reflectionEntries = mutableSetOf() - val resourcePatterns = mutableSetOf() - - for (entry in jarFile.entries()) { - if (!entry.name.startsWith("META-INF/services/") || entry.isDirectory) continue - - val serviceName = entry.name.removePrefix("META-INF/services/") - if (serviceName.isEmpty() || serviceName.contains('/')) continue - - resourcePatterns.add(ResourcePattern(glob = entry.name)) - - val implementations = parseServiceFile(jarFile.getInputStream(entry)) - for (impl in implementations) { - reflectionEntries.add( - ReflectionEntry( - type = impl, - methods = setOf(MethodSignature("", emptyList())), - ), - ) - } - } - - return ServiceResult(reflectionEntries, resourcePatterns) - } - - /** - * Parses a META-INF/services/ file, returning implementation class names. - */ - internal fun parseServiceFile(input: InputStream): List = - input.bufferedReader().useLines { lines -> - lines - .map { it.substringBefore('#').trim() } - .filter { it.isNotEmpty() } - .toList() - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt deleted file mode 100644 index c3502bec3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/cliArgUtils.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath -import org.gradle.api.file.FileSystemLocation -import org.gradle.api.provider.Provider -import java.io.File - -internal fun MutableCollection.cliArg( - name: String, - value: T?, - fn: (T) -> String = defaultToString(), -) { - if (value is Boolean) { - if (value) add(name) - } else if (value != null) { - add(name) - add(fn(value)) - } -} - -internal fun MutableCollection.cliArg( - name: String, - value: Provider, - fn: (T) -> String = defaultToString(), -) { - cliArg(name, value.orNull, fn) -} - -internal fun MutableCollection.javaOption(value: String) { - cliArg("--java-options", "'$value'") -} - -private fun defaultToString(): (T) -> String = - { - val asString = - when (it) { - is FileSystemLocation -> it.asFile.normalizedPath() - is File -> it.normalizedPath() - else -> it.toString() - } - "\"$asString\"" - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt deleted file mode 100644 index 7fbca4c38..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureDesktop.kt +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.NucleusExtension -import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.registerTask -import org.gradle.api.Project -import org.gradle.api.plugins.ExtensionAware -import org.gradle.api.tasks.JavaExec - -private const val DECORATED_WINDOW_TAO_DEPENDENCY_NAME = "decorated-window-tao" - -internal fun configureDesktop( - project: Project, - nucleusExtension: NucleusExtension, -) { - if (nucleusExtension.isJvmApplicationInitialized) { - val appInternal = nucleusExtension.application as JvmApplicationInternal - val defaultBuildType = appInternal.data.buildTypes.default - val appData = JvmApplicationContext(project, appInternal, defaultBuildType) - appData.configureJvmApplication() - - if (appInternal.data.graalvm.isEnabled - .getOrElse(false) - ) { - appData.configureGraalvmApplication() - } - - propagateMainClassToComposeApplication(project, appInternal) - injectStartOnFirstThreadForTaoHotReload(project) - } - - if (nucleusExtension.isNativeApplicationInitialized) { - val unpackDefaultResources = - project.registerTask( - "unpackDefaultNativeApplicationResources", - ) {} - configureNativeApplication(project, nucleusExtension.nativeApplication, unpackDefaultResources) - } -} - -/** - * Forwards [dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplication.mainClass] to - * `compose.desktop.application.mainClass` so that Compose Hot Reload tasks (e.g. `hotRun`, - * `hotSnapshotMain`) can resolve the entry point without the user duplicating it via - * `-PmainClass=...` or a manual `compose.desktop.application { ... }` block. - * - * This runs in Nucleus's `afterEvaluate`, which fires AFTER the Compose plugin's own - * `afterEvaluate` (because Nucleus is applied last in user build scripts). By then Compose - * has already inspected its `_isJvmApplicationInitialized` flag, so initializing the - * `application` extension here cannot trigger duplicate task registration. - * - * Reflection is intentional: a hard dependency on the Compose Gradle plugin classes would - * couple Nucleus's classpath to a specific Compose version. Reflection lets this become a - * silent no-op on projects that don't apply the Compose plugin at all. - */ -private fun propagateMainClassToComposeApplication( - project: Project, - appInternal: JvmApplicationInternal, -) { - val mainClass = appInternal.data.mainClass ?: return - val compose = project.extensions.findByName("compose") as? ExtensionAware ?: return - val desktop = compose.extensions.findByName("desktop") as? ExtensionAware ?: return - runCatching { - // `desktop.application` is lazy (org.jetbrains.compose.desktop.DesktopExtension). - // Accessing it via reflection avoids a compile-time dependency on the Compose plugin. - val applicationGetter = desktop.javaClass.getMethod("getApplication") - val composeApplication = applicationGetter.invoke(desktop) ?: return - val mainClassSetter = composeApplication.javaClass.methods - .firstOrNull { it.name == "setMainClass" && it.parameterCount == 1 } - ?: return - mainClassSetter.invoke(composeApplication, mainClass) - } -} - -/** - * Adds `-XstartOnFirstThread` to Compose Hot Reload's `JavaExec` tasks on macOS when the - * project depends on `decorated-window-tao`. The TAO backend drives a winit/Tao native - * event loop that must run on macOS thread 0; the standard `compose.desktop.application.run` - * relies on AWT seizing the main thread to provide a reachable run loop, but Hot Reload's - * JavaExec doesn't add the flag and the agent classloader can change AWT init ordering - * enough to leave TAO's main-thread bouncing without a target — manifests as a launched - * process with no visible window. - * - * The flag is harmless on JBR (the runtime Hot Reload requires), and is gated on TAO - * presence to avoid affecting plain AWT/Skiko Compose Desktop projects. - */ -private fun injectStartOnFirstThreadForTaoHotReload(project: Project) { - if (currentOS != OS.MacOS) return - if (!projectUsesTaoBackend(project)) return - - project.tasks.withType(JavaExec::class.java).configureEach { task -> - if (!task.isHotReloadJavaExec()) return@configureEach - task.jvmArgs("-XstartOnFirstThread") - } -} - -private fun projectUsesTaoBackend(project: Project): Boolean = - project.configurations.any { config -> - config.dependencies.any { it.name == DECORATED_WINDOW_TAO_DEPENDENCY_NAME } - } - -private fun JavaExec.isHotReloadJavaExec(): Boolean = - generateSequence>(javaClass) { it.superclass } - .any { it.name.startsWith("org.jetbrains.compose.reload") } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt deleted file mode 100644 index ebaee6b3e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureGraalvmApplication.kt +++ /dev/null @@ -1,1516 +0,0 @@ -@file:Suppress("ktlint:standard:filename") - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation -import dev.nucleusframework.nucleus.desktop.application.dsl.GraalvmSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.PackagingBackend -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNotarizationTask -import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentArch -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.executableName -import dev.nucleusframework.nucleus.internal.utils.uppercaseFirstChar -import org.gradle.api.DefaultTask -import org.gradle.api.tasks.Copy -import org.gradle.api.tasks.Delete -import org.gradle.api.tasks.Exec -import org.gradle.api.tasks.JavaExec -import org.gradle.api.tasks.TaskProvider -import org.gradle.jvm.tasks.Jar -import org.gradle.jvm.toolchain.JavaLanguageVersion -import org.gradle.jvm.toolchain.JavaToolchainService -import java.io.File - -private val graalvmDefaultJvmArgs: List = - buildList { - add("-D$CONFIGURE_SWING_GLOBALS=true") - if (currentOS == OS.MacOS) { - add("--add-opens=java.desktop/sun.awt=ALL-UNNAMED") - add("--add-opens=java.desktop/sun.lwawt=ALL-UNNAMED") - add("--add-opens=java.desktop/sun.lwawt.macosx=ALL-UNNAMED") - } - } - -@Suppress("LongMethod", "CyclomaticComplexMethod") -internal fun JvmApplicationContext.configureGraalvmApplication() { - val graalvm = app.graalvm - val javaToolchains = project.extensions.getByType(JavaToolchainService::class.java) - - val graalvmLauncher = - javaToolchains.launcherFor { spec -> - spec.languageVersion.set(JavaLanguageVersion.of(graalvm.javaLanguageVersion.get())) - if (graalvm.jvmVendor.isPresent) { - spec.vendor.set(graalvm.jvmVendor) - } - } - - val graalvmHome = - graalvmLauncher.map { launcher -> - launcher.metadata.installationPath.asFile.absolutePath - } - - val nativeImageConfigDir = graalvm.nativeImageConfigBaseDir - val mainClassName = app.mainClass - - // ── Uber JAR (reuse existing task) ── - - // We need the uber JAR from the existing pipeline (respects build type classifier) - val uberJarTaskName = "package${buildType.classifier.uppercaseFirstChar()}UberJarForCurrentOS" - val packageUberJar = project.tasks.named(uberJarTaskName, Jar::class.java) - - // ── runWithNativeAgent ── - // Agent writes to a temp dir, then automatically merges into the real config - // without overwriting manually enriched entries (e.g. allDeclaredFields). - - val agentTempDir = appTmpDir.map { it.dir("graalvm/agentOutput") } - - val runWithNativeAgent = - tasks.register( - taskNameAction = "run", - taskNameObject = "withNativeAgent", - ) { - description = "Run the app with the GraalVM native-image-agent to collect reflection metadata" - - mainClass.set(app.mainClass) - setExecutable( - graalvmLauncher - .get() - .executablePath.asFile.absolutePath, - ) - - useAppRuntimeFiles { (runtimeJars, _) -> - classpath = runtimeJars - } - - jvmArgs = - buildList { - addAll(graalvmDefaultJvmArgs) - addAll( - app.jvmArgs.filter { arg -> - // Exclude jpackage-specific artificial args - !arg.startsWith("-splash:\$APPDIR/") && - !arg.startsWith("-D$APP_EXECUTABLE_TYPE=") && - !arg.startsWith("-D$APP_RESOURCES_DIR=") - }, - ) - - if (currentOS == OS.MacOS) { - val dockName = - app.nativeDistributions.appName - ?: app.nativeDistributions.packageName - ?: project.name - add("-Dapple.awt.application.name=$dockName") - } - - val tempDir = - agentTempDir - .get() - .asFile - .apply { mkdirs() } - .absolutePath - add("-agentlib:native-image-agent=config-output-dir=$tempDir") - } - - args = app.args - - // Capture all values at configuration time to avoid serializing - // JvmApplicationContext into the configuration cache. - val resolvedTargetDir: File = - if (nativeImageConfigDir.isPresent) { - nativeImageConfigDir.get().asFile - } else { - project.layout.projectDirectory - .dir("graalvm") - .asFile - } - val resolvedAgentDir: File = agentTempDir.get().asFile - val resolvedPlatform: String = - when (currentOS) { - OS.Windows -> "windows" - OS.MacOS -> "macos" - OS.Linux -> "linux" - } - val resolvedMainClass: String? = mainClassName - val resolvedRepoDirsFile: File = appTmpDir.get().file("graalvm/metadataRepoDirs.txt").asFile - val resolvedStaticDir: File = appTmpDir.get().dir("graalvm/staticAnalysis").asFile - val resolvedLibraryMetadataDir: File = appTmpDir.get().dir("graalvm/libraryMetadata").asFile - - // After the agent finishes, merge results into the real config - doLast { - mergeReachabilityMetadata(resolvedAgentDir, resolvedTargetDir) - - // Also merge individual config files the agent may produce - listOf( - "reflect-config.json", - "jni-config.json", - "resource-config.json", - "proxy-config.json", - "serialization-config.json", - ).forEach { fileName -> - mergeJsonArrayConfig( - agentFile = File(resolvedAgentDir, fileName), - targetFile = File(resolvedTargetDir, fileName), - ) - } - - // Deduplicate: remove entries already provided by library JARs (L1), - // plugin platform metadata (L3), Oracle repo (L2), static analysis, - // and native-image.properties resource patterns. - val runtimeClasspath = classpath.files - - // Collect extra metadata directories: Oracle repo (L2), static analysis, library metadata (L1) - val extraDirs = mutableListOf() - if (resolvedRepoDirsFile.exists()) { - resolvedRepoDirsFile.readLines().filter { it.isNotBlank() }.forEach { extraDirs.add(File(it)) } - } - if (resolvedStaticDir.isDirectory) { - extraDirs.add(resolvedStaticDir) - } - if (resolvedLibraryMetadataDir.isDirectory) { - extraDirs.add(resolvedLibraryMetadataDir) - } - - deduplicateAgainstLibraryMetadata(runtimeClasspath, resolvedTargetDir, resolvedPlatform, resolvedMainClass, extraDirs) - - logger.lifecycle("Native-image agent config merged into: $resolvedTargetDir") - } - } - - // ── Platform-specific pre-compile tasks ── - - val nativeCompileDir = appTmpDir.map { it.dir("graalvm/nativeCompile") } - val imageName = graalvm.imageName.orElse(packageNameProvider) - val binaryName = imageName.map { executableName(it) } - - // macOS: compile C stubs (built-in stub unless user overrides via cStubsSrc) - val compileStubs = - if (currentOS == OS.MacOS) { - // Resolve the stub source file and output at configuration time to - // avoid capturing DSL/Project references in the doLast closure, - // which would break the configuration cache. - val resolvedStubSrc: File? = - graalvm.macOS.cStubsSrc.orNull - ?.asFile - val stubOutFile: File = appTmpDir.get().asFile.resolve("graalvm/cursor_stub.o") - val stubCFile: File = appTmpDir.get().asFile.resolve("graalvm/cursor_stub.c") - - tasks.register( - taskNameAction = "compile", - taskNameObject = "graalvmStubs", - ) { - description = "Compile C stubs for symbols referenced by AWT flat-namespace dylibs" - - outputs.file(stubOutFile) - if (resolvedStubSrc != null) { - inputs.file(resolvedStubSrc) - } - - doLast { - val srcFile = - resolvedStubSrc ?: run { - // Generate the default no-op stub in the temp dir. - stubCFile.parentFile.mkdirs() - stubCFile.writeText( - """ - /* Stub for the removed java.awt.Cursor.finalizeImpl() native method. - libawt.dylib was compiled with -flat_namespace and references this symbol. - A no-op stub exports the symbol so dyld can satisfy the reference at load time. */ - void Java_java_awt_Cursor_finalizeImpl(void) {} - """.trimIndent(), - ) - stubCFile - } - - stubOutFile.parentFile.mkdirs() - val process = - ProcessBuilder("clang", "-c", srcFile.absolutePath, "-o", stubOutFile.absolutePath) - .inheritIO() - .start() - check(process.waitFor() == 0) { "clang failed compiling $srcFile" } - } - } - } else { - null - } - - // ── Default resources (icons, entitlements) — reuse the one from configureJvmApplication ── - - val unpackDefaultResources = - project.tasks.named( - "unpackDefaultComposeDesktopJvmApplicationResources", - AbstractUnpackDefaultApplicationResourcesTask::class.java, - ) - - // Windows: generate .rc resource and compile to .res - val generateWindowsResources = - if (currentOS == OS.Windows) { - // Capture all DSL values at configuration time to avoid serializing - // Project/SourceSet references into the configuration cache. - val winPkgName = packageNameProvider - val winPkgVersion = provider { app.nativeDistributions.packageVersion ?: "1.0.0" } - val winCopyright = provider { app.nativeDistributions.copyright ?: "" } - val winDescription = provider { app.nativeDistributions.description ?: packageNameProvider.get() } - val winIconFile = - app.nativeDistributions.windows.iconFile - .orElse(unpackDefaultResources.flatMap { it.resources.windowsIcon }) - - tasks.register( - taskNameAction = "generate", - taskNameObject = "graalvmWindowsResources", - ) { - dependsOn(unpackDefaultResources) - description = "Generate and compile Windows resource file (.rc -> .res) for native image icon and version info" - - val rcFile = appTmpDir.map { it.file("graalvm/icon.rc") } - val resFile = appTmpDir.map { it.file("graalvm/icon.res") } - - outputs.file(resFile) - inputs.file(winIconFile) - inputs.property("pkgName", winPkgName) - inputs.property("pkgVersion", winPkgVersion) - inputs.property("copyright", winCopyright) - inputs.property("description", winDescription) - inputs.property("imageName", imageName) - - doLast { - val rcDir = rcFile.get().asFile.parentFile - rcDir.mkdirs() - - val pkgName = winPkgName.get() - val pkgVersion = winPkgVersion.get() - val copyright = winCopyright.get() - val taskDescription = winDescription.get() - val versionParts = pkgVersion.split(".").map { it.toIntOrNull() ?: 0 } - val v1 = versionParts.getOrElse(0) { 0 } - val v2 = versionParts.getOrElse(1) { 0 } - val v3 = versionParts.getOrElse(2) { 0 } - val v4 = versionParts.getOrElse(3) { 0 } - - // Generate Windows side-by-side fusion manifest: - // - DPI awareness (Per-Monitor V2) - // - activeCodePage = UTF-8 (Windows 10 1903+) — works around a SubstrateVM - // bug where LoadLibraryA receives UTF-8 bytes interpreted as the system - // ANSI codepage, breaking native-image apps installed under non-ASCII - // paths (Hebrew/Arabic/Cyrillic/CJK usernames). See oracle/graal#8095 - // and #10237 — the GraalVM team explicitly recommends this manifest. - // - longPathAware: opt into >MAX_PATH paths. - val manifestFile = File(rcDir, "dpiaware.manifest") - manifestFile.writeText( - """ - | - | - | - | - | true/PM - | PerMonitorV2,PerMonitor - | UTF-8 - | true - | - | - | - """.trimMargin(), - ) - - val rcContent = - buildString { - appendLine("1 ICON \"${winIconFile.get().asFile.absolutePath.replace("\\", "\\\\")}\"") - appendLine() - // Embed DPI-aware manifest (RT_MANIFEST = 24) - appendLine("1 24 \"${manifestFile.absolutePath.replace("\\", "\\\\")}\"") - appendLine() - appendLine("1 VERSIONINFO") - appendLine("FILEVERSION $v1,$v2,$v3,$v4") - appendLine("PRODUCTVERSION $v1,$v2,$v3,$v4") - appendLine("BEGIN") - appendLine(" BLOCK \"StringFileInfo\"") - appendLine(" BEGIN") - appendLine(" BLOCK \"040904B0\"") - appendLine(" BEGIN") - appendLine(" VALUE \"FileDescription\", \"$taskDescription\"") - appendLine(" VALUE \"FileVersion\", \"$pkgVersion\"") - appendLine(" VALUE \"InternalName\", \"$pkgName\"") - appendLine(" VALUE \"LegalCopyright\", \"$copyright\"") - appendLine(" VALUE \"OriginalFilename\", \"${imageName.get()}.exe\"") - appendLine(" VALUE \"ProductName\", \"$pkgName\"") - appendLine(" VALUE \"ProductVersion\", \"$pkgVersion\"") - appendLine(" END") - appendLine(" END") - appendLine(" BLOCK \"VarFileInfo\"") - appendLine(" BEGIN") - appendLine(" VALUE \"Translation\", 0x0409, 0x04B0") - appendLine(" END") - appendLine("END") - } - rcFile.get().asFile.writeText(rcContent) - - // Compile .rc to .res using rc.exe - val arch = - when (currentArch) { - Arch.X64 -> "x64" - Arch.Arm64 -> "arm64" - } - val rcExe = - WindowsKitsLocator.locateRc(arch) - ?: error( - "Could not locate rc.exe from Windows SDK. " + - "Ensure Windows SDK is installed.", - ) - - val processBuilder = - ProcessBuilder( - rcExe.absolutePath, - "/fo", - resFile.get().asFile.absolutePath, - rcFile.get().asFile.absolutePath, - ) - processBuilder.inheritIO() - val process = processBuilder.start() - val exitCode = process.waitFor() - check(exitCode == 0) { "rc.exe failed with exit code $exitCode" } - } - } - } else { - null - } - - // ── Platform metadata (Level 3) ── - // Write AWT/Java2D/font reflection entries for the current OS into a build directory - // so native-image picks them up alongside the project's own metadata. - - val platformMetadataDir = appTmpDir.map { it.dir("graalvm/platformMetadata") } - - val generatePlatformMetadata = - tasks.register( - taskNameAction = "generate", - taskNameObject = "graalvmPlatformMetadata", - ) { - description = "Generate platform-specific GraalVM metadata for AWT/Java2D and main class" - inputs.property("mainClass", mainClassName ?: "") - outputs.dir(platformMetadataDir) - - doLast { - val platform = - when (currentOS) { - OS.Windows -> "windows" - OS.MacOS -> "macos" - OS.Linux -> "linux" - } - writePlatformMetadata(platform, platformMetadataDir.get().asFile, mainClassName) - logger.lifecycle("Platform metadata ($platform) written to: ${platformMetadataDir.get().asFile}") - } - } - - // ── Oracle GraalVM Reachability Metadata Repository ── - // Resolves metadata from the community-maintained repository for runtime dependencies. - // Uses a custom task that resolves both the ZIP and the runtime classpath at execution time. - - val metadataRepoDirsFile = appTmpDir.map { it.file("graalvm/metadataRepoDirs.txt") } - val metadataRepoOutputDir = appTmpDir.map { it.dir("graalvm/metadataRepository") } - - // Wire the metadata ZIP via a detached configuration (FileCollection is config-cache safe) - val metadataZipDep = - project.dependencies.create( - "org.graalvm.buildtools:graalvm-reachability-metadata:${graalvm.metadataRepository.version.get()}:repository@zip", - ) - val metadataZipConfig = - project.configurations - .detachedConfiguration(metadataZipDep) - .apply { isTransitive = false } - - // Wire runtime classpath (FileCollection is config-cache safe) - val runtimeCfg = - project.configurations.findByName("jvmRuntimeClasspath") - ?: project.configurations.findByName("desktopRuntimeClasspath") - ?: project.configurations.findByName("runtimeClasspath") - - val resolveReachabilityMetadata = - project.tasks - .register( - "resolveGraalvmReachabilityMetadata", - ResolveReachabilityMetadataTask::class.java, - ).apply { - configure { task -> - task.description = - "Resolve GraalVM reachability metadata from Oracle repository for runtime dependencies" - task.group = NUCLEUS_TASK_GROUP - - task.repoEnabled.set(graalvm.metadataRepository.enabled) - task.repoVersion.set(graalvm.metadataRepository.version) - task.excludedModules.set(graalvm.metadataRepository.excludedModules) - task.moduleToConfigVersion.set(graalvm.metadataRepository.moduleToConfigVersion) - task.outputDirsFile.set(metadataRepoDirsFile.map { it.asFile }) - task.extractionDir.set(metadataRepoOutputDir.map { it.asFile }) - - task.metadataZipFiles.from(metadataZipConfig) - if (runtimeCfg != null) { - task.runtimeClasspath.from(runtimeCfg) - } - } - } - - // ── Static bytecode analysis ── - // Scans all runtime classpath JARs to auto-detect reflection, JNI, and resource - // metadata that can be discovered statically (Class.forName, ServiceLoader, - // native methods, etc.). Output is passed as an additional config directory. - - val staticMetadataDir = appTmpDir.map { it.dir("graalvm/staticAnalysis") } - - val analyzeStaticMetadata = - project.tasks - .register( - "analyzeGraalvmStaticMetadata", - AnalyzeStaticMetadataTask::class.java, - ).apply { - configure { task -> - task.description = - "Statically analyze bytecode to detect GraalVM reflection/JNI/resource metadata" - task.group = NUCLEUS_TASK_GROUP - task.outputDir.set(staticMetadataDir) - if (runtimeCfg != null) { - task.runtimeClasspath.from(runtimeCfg) - } - // Include the project's own compiled classes (not just dependency JARs) - // KMP projects use jvmMainClasses, standard JVM uses main sourceSet - val jvmMainClasses = - project.tasks.findByName("jvmMainClasses") - ?: project.tasks.findByName("compileKotlinJvm") - ?: project.tasks.findByName("compileKotlin") - if (jvmMainClasses != null) { - task.dependsOn(jvmMainClasses) - } - project.tasks.findByName("compileJava")?.let { task.dependsOn(it) } - // Add class output directories - for (dirPath in listOf( - "classes/kotlin/jvm/main", - "classes/kotlin/main", - "classes/java/main", - )) { - val classDir = project.layout.buildDirectory.dir(dirPath) - task.runtimeClasspath.from(classDir) - } - } - } - - // ── Per-library metadata filtering (L1) ── - // Reads per-library JSON files from the plugin JAR, includes only those whose - // matchPackages are found on the runtime classpath, and merges into a single output. - - val libraryMetadataDir = appTmpDir.map { it.dir("graalvm/libraryMetadata") } - - val filterLibraryMetadata = - project.tasks - .register( - "filterGraalvmLibraryMetadata", - FilterLibraryMetadataTask::class.java, - ).apply { - configure { task -> - task.description = - "Filter and merge per-library GraalVM metadata based on runtime classpath" - task.group = NUCLEUS_TASK_GROUP - task.outputDir.set(libraryMetadataDir) - if (runtimeCfg != null) { - task.runtimeClasspath.from(runtimeCfg) - } - } - } - - // ── Cleanup manual metadata ── - // Removes entries from the project's reachability-metadata.json that are already - // covered by L1 (library JARs), L2 (Oracle repo), L3 (platform), or static analysis. - - project.tasks - .register( - "cleanupGraalvmMetadata", - CleanupGraalvmMetadataTask::class.java, - ).apply { - configure { task -> - task.description = - "Remove entries from manual reachability-metadata.json that are already managed by Nucleus" - task.group = NUCLEUS_TASK_GROUP - task.dependsOn(resolveReachabilityMetadata) - task.dependsOn(analyzeStaticMetadata) - task.dependsOn(filterLibraryMetadata) - - if (runtimeCfg != null) { - task.runtimeClasspath.from(runtimeCfg) - } - task.metadataRepoDirsFile.set(project.layout.file(metadataRepoDirsFile.map { it.asFile })) - task.staticAnalysisDir.from(staticMetadataDir) - task.staticAnalysisDir.from(libraryMetadataDir) - task.platformName.set( - when (currentOS) { - OS.Windows -> "windows" - OS.MacOS -> "macos" - OS.Linux -> "linux" - }, - ) - task.mainClass.set(mainClassName ?: "") - task.configDir.set( - if (nativeImageConfigDir.isPresent) { - nativeImageConfigDir.get().asFile - } else { - project.layout.projectDirectory - .dir("graalvm") - .asFile - }, - ) - } - } - - // ── nativeImageCompile ── - - val nativeImageCompile = - tasks.register( - taskNameAction = "nativeImage", - taskNameObject = "compile", - ) { - description = "Compile the application into a GraalVM native image" - - dependsOn(packageUberJar) - dependsOn(generatePlatformMetadata) - dependsOn(resolveReachabilityMetadata) - dependsOn(analyzeStaticMetadata) - dependsOn(filterLibraryMetadata) - compileStubs?.let { dependsOn(it) } - generateWindowsResources?.let { dependsOn(it) } - - val uberJarFile = packageUberJar.flatMap { it.archiveFile } - inputs.file(uberJarFile) - inputs.file(metadataRepoDirsFile).optional() - val outputDir = nativeCompileDir.get().asFile - outputs.dir(outputDir) - - val nativeImageExe = - graalvmHome.map { home -> - val binDir = File(home).resolve("bin") - // BellSoft Liberica NIK ships native-image.cmd on Windows; - // Oracle GraalVM ships native-image.exe. Prefer .cmd if present. - if (currentOS == OS.Windows) { - val cmd = binDir.resolve("native-image.cmd") - if (cmd.exists()) { - cmd.absolutePath - } else { - binDir.resolve("native-image.exe").absolutePath - } - } else { - binDir.resolve("native-image").absolutePath - } - } - - executable = nativeImageExe.get() - - // Control the minos in LC_BUILD_VERSION at link time - if (currentOS == OS.MacOS) { - environment("MACOSX_DEPLOYMENT_TARGET", graalvm.macOS.minimumSystemVersion.get()) - } - - // Resolve all project / provider references at configuration time - // (config-cache safe) — only the exists() checks and file reads - // need to happen at execution time. - val resolvedConfigDir = - if (nativeImageConfigDir.isPresent) { - nativeImageConfigDir.get().asFile - } else { - project.layout.projectDirectory - .dir("graalvm") - .asFile - } - val resolvedLibraryMetadataDir = libraryMetadataDir.get().asFile - val resolvedPlatformMetadataDir = platformMetadataDir.get().asFile - val resolvedStaticMetadataDir = staticMetadataDir.get().asFile - val resolvedMetadataRepoDirsFile = metadataRepoDirsFile.get().asFile - val resolvedBuildArgs = graalvm.buildArgs.get() - val resolvedMarch = graalvm.march.get() - val resolvedImageName = imageName.get() - val resolvedUberJar = uberJarFile.get().asFile.absolutePath - val resolvedStubObj = - if (currentOS == OS.MacOS && compileStubs != null) { - appTmpDir - .get() - .file("graalvm/cursor_stub.o") - .asFile.absolutePath - } else { - null - } - val resolvedResFile = - if (currentOS == OS.Windows && generateWindowsResources != null) { - appTmpDir - .get() - .file("graalvm/icon.res") - .asFile.absolutePath - } else { - null - } - - doFirst { - outputDir.mkdirs() - - // Build args at execution time so that outputs from dependent tasks - // (static analysis dir, metadata repo dirs file, …) exist on disk. - args = - buildList { - add("-jar") - add(resolvedUberJar) - add("-o") - add(File(outputDir, resolvedImageName).absolutePath) - add("-march=$resolvedMarch") - - // macOS: link C stubs - if (resolvedStubObj != null) { - add("-H:NativeLinkerOption=$resolvedStubObj") - } - - // Windows: link .res for icon + version info, configure subsystem - if (resolvedResFile != null) { - add("-H:NativeLinkerOption=$resolvedResFile") - add("-H:NativeLinkerOption=/SUBSYSTEM:WINDOWS") - add("-H:NativeLinkerOption=/ENTRY:mainCRTStartup") - } - - // Pass the native-image configuration directory so reflection/JNI/resource - // metadata is picked up even when it is not bundled inside the uber JAR. - if (resolvedConfigDir.exists()) { - add("-H:ConfigurationFileDirectories=$resolvedConfigDir") - } - - // Include per-library metadata (L1), filtered by runtime classpath - add("-H:ConfigurationFileDirectories=$resolvedLibraryMetadataDir") - - // Include platform-specific AWT/Java2D metadata - add("-H:ConfigurationFileDirectories=$resolvedPlatformMetadataDir") - - // Include statically-analyzed metadata (reflection, JNI, resources - // detected from bytecode scanning of runtime classpath JARs) - if (resolvedStaticMetadataDir.exists()) { - add("-H:ConfigurationFileDirectories=$resolvedStaticMetadataDir") - } - - // Include metadata from Oracle Reachability Metadata Repository - if (resolvedMetadataRepoDirsFile.exists()) { - val dirs = resolvedMetadataRepoDirsFile.readText().trim() - if (dirs.isNotEmpty()) { - for (dir in dirs.lines()) { - if (dir.isNotBlank()) { - add("-H:ConfigurationFileDirectories=$dir") - } - } - } - } - - addAll(resolvedBuildArgs) - } - } - } - - // ── Platform-specific packaging ── - - val packageGraalvmNative: TaskProvider = - when (currentOS) { - OS.MacOS -> - configureMacOsGraalvmPackaging( - graalvm, - graalvmHome, - nativeImageCompile, - nativeCompileDir, - imageName, - unpackDefaultResources, - packageUberJar, - ) - OS.Windows -> - configureWindowsGraalvmPackaging( - graalvmHome, - nativeImageCompile, - nativeCompileDir, - imageName, - packageUberJar, - ) - OS.Linux -> - configureLinuxGraalvmPackaging( - graalvmHome, - nativeImageCompile, - nativeCompileDir, - imageName, - packageUberJar, - ) - } - - // ── Run the native image ── - - tasks.register( - taskNameAction = "run", - taskNameObject = "graalvmNative", - ) { - description = "Build and run the GraalVM native image" - dependsOn(packageGraalvmNative) - - val binaryFile = - when (currentOS) { - OS.MacOS -> { - val dir = - appTmpDir.map { - it.dir("graalvm/output/${packageNameProvider.get()}.app/Contents/MacOS") - } - dir.map { it.file(imageName.get()) } - } - OS.Windows -> { - val dir = - appTmpDir.map { - it.dir("graalvm/output/${packageNameProvider.get()}") - } - dir.map { it.file(binaryName.get()) } - } - OS.Linux -> { - val dir = - appTmpDir.map { - it.dir("graalvm/output/${packageNameProvider.get()}") - } - dir.map { it.file(imageName.get()) } - } - } - - executable = binaryFile.get().asFile.absolutePath - args = app.args - } - - // ── Electron-builder integration ── - - configureGraalvmElectronBuilderPackaging(packageGraalvmNative, unpackDefaultResources, imageName) -} - -// ═══════════════════════════════════════════════════════════════════ -// macOS packaging -// ═══════════════════════════════════════════════════════════════════ - -@Suppress("LongMethod", "LongParameterList") -private fun JvmApplicationContext.configureMacOsGraalvmPackaging( - graalvm: GraalvmSettings, - graalvmHome: org.gradle.api.provider.Provider, - nativeImageCompile: TaskProvider, - nativeCompileDir: org.gradle.api.provider.Provider, - imageName: org.gradle.api.provider.Provider, - unpackDefaultResources: TaskProvider, - packageUberJar: TaskProvider, -): TaskProvider { - val appBundleName = packageNameProvider.map { "$it.app" } - val appBundleDir = - appTmpDir.map { tmpDir -> - tmpDir.dir("graalvm/output/${appBundleName.get()}/Contents") - } - - val cleanAppBundle = - tasks.register( - taskNameAction = "clean", - taskNameObject = "graalvmAppBundle", - ) { - description = "Remove stale .app bundle before rebuilding" - mustRunAfter(nativeImageCompile) - delete(appTmpDir.map { it.dir("graalvm/output") }) - } - - val copyBinary = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmBinaryToApp", - ) { - description = "Copy native binary into .app bundle" - dependsOn(nativeImageCompile, cleanAppBundle) - // strip modifies files in-place after copy, leaving temp files that - // break Gradle's incremental destination scanning on the next run. - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - from(nativeCompileDir.map { it.file(imageName.get()) }) - into(appBundleDir.map { it.dir("MacOS") }) - } - - val copyAwtDylibs = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmAwtDylibs", - ) { - description = "Copy AWT dylibs into .app bundle" - dependsOn(nativeImageCompile, cleanAppBundle) - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - from("${graalvmHome.get()}/lib") { - include( - "libawt.dylib", - "libawt_lwawt.dylib", - "libfontmanager.dylib", - "libfreetype.dylib", - "libjava.dylib", - "libjavajpeg.dylib", - "libjawt.dylib", - "liblcms.dylib", - "libmlib_image.dylib", - "libosxapp.dylib", - "libsplashscreen.dylib", - ) - } - from("${graalvmHome.get()}/lib/server") { - include("libjvm.dylib") - } - into(appBundleDir.map { it.dir("MacOS") }) - } - - val copyJawtToLib = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmJawtToLib", - ) { - description = "Copy libjawt.dylib to lib/ subdir for Skiko" - dependsOn(nativeImageCompile, cleanAppBundle) - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - from("${graalvmHome.get()}/lib") { - include("libjawt.dylib") - } - into(appBundleDir.map { it.dir("MacOS/lib") }) - } - - val skikoLibName = "libskiko-${currentOS.id}-${currentArch.id}.dylib" - val copySkikoLib = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmSkikoLib", - ) { - description = "Extract $skikoLibName from uber JAR into lib/ subdir so Skiko can load it" - dependsOn(packageUberJar, cleanAppBundle) - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - from(project.zipTree(packageUberJar.flatMap { it.archiveFile })) { - include(skikoLibName) - } - into(appBundleDir.map { it.dir("MacOS/lib") }) - } - - val stripDylibs = - tasks.register( - taskNameAction = "strip", - taskNameObject = "graalvmDylibs", - ) { - description = "Strip debug symbols from dylibs" - dependsOn(copyAwtDylibs) - val macosDir = appBundleDir.map { it.dir("MacOS") } - commandLine("bash", "-c", "strip -x '${macosDir.get().asFile.absolutePath}'/*.dylib") - } - - // Patch LC_BUILD_VERSION on all Mach-O binaries and dylibs so that: - // - minos matches minimumSystemVersion (e.g. 12.0) for backward compatibility - // - sdk matches macOsSdkVersion (e.g. 26.0) to enable Liquid Glass - val patchMinVersion = graalvm.macOS.minimumSystemVersion - val patchSdkVersion = graalvm.macOS.macOsSdkVersion - val patchBuildVersion = - tasks.register( - taskNameAction = "patch", - taskNameObject = "graalvmBuildVersion", - ) { - description = "Patch LC_BUILD_VERSION on native binary and dylibs via vtool" - dependsOn(copyBinary, stripDylibs, copyJawtToLib, copySkikoLib) - - inputs.property("minVersion", patchMinVersion) - inputs.property("sdkVersion", patchSdkVersion) - - doLast { - val minVer = patchMinVersion.get() - val sdkVer = patchSdkVersion.get() - val macosDir = appBundleDir.get().dir("MacOS").asFile - val libDir = appBundleDir.get().dir("MacOS/lib").asFile - - // Patch all Mach-O files: main binary + dylibs in MacOS/ and MacOS/lib/ - sequenceOf(macosDir, libDir) - .filter { it.isDirectory } - .flatMap { dir -> dir.listFiles()?.asSequence() ?: emptySequence() } - .filter { it.isFile && (it.extension == "dylib" || it.canExecute()) } - .forEach { file -> - patchMachOBuildVersion(file, minVer, sdkVer, logger) - } - } - } - - val codesignDylibs = - tasks.register( - taskNameAction = "codesign", - taskNameObject = "graalvmDylibs", - ) { - description = "Re-sign dylibs after stripping (ad-hoc)" - dependsOn(patchBuildVersion) - val macosDir = appBundleDir.map { it.dir("MacOS") } - commandLine("bash", "-c", "codesign --force --sign - '${macosDir.get().asFile.absolutePath}'/*.dylib") - } - - val fixRpath = - tasks.register( - taskNameAction = "fix", - taskNameObject = "graalvmRpath", - ) { - description = "Add @executable_path rpath to native image" - dependsOn(patchBuildVersion) - val binary = appBundleDir.map { it.file("MacOS/${imageName.get()}") } - commandLine("install_name_tool", "-add_rpath", "@executable_path/.", binary.get().asFile.absolutePath) - isIgnoreExitValue = true - } - - // Generate Info.plist — all DSL values are captured at configuration time - // to avoid serializing Project/SourceSet references into the configuration cache. - val plistBundleName: String = app.nativeDistributions.appName ?: app.nativeDistributions.packageName ?: project.name - val plistBundleID: String? = app.nativeDistributions.macOS.bundleID - val plistVersion: String = - app.nativeDistributions.packageVersion - ?: project.version.toString().takeIf { it != "unspecified" } - ?: "1.0.0" - val plistMinSystemVersion = graalvm.macOS.minimumSystemVersion - val plistCopyright: String? = app.nativeDistributions.copyright - val plistIconFileName: String = - if (app.nativeDistributions.macOS.iconFile.isPresent) { - app.nativeDistributions.macOS.iconFile - .get() - .asFile.name - } else { - "default-icon-mac.icns" - } - - // Capture file associations at configuration time for the Info.plist - val plistFileAssociations: Set = - app.nativeDistributions.macOS.fileAssociations - .toSet() - - // Build a mapping from icon File -> unique name inside Resources/ (avoids collisions) - val fileAssociationIconMapping: Map = - run { - val icons = plistFileAssociations.mapNotNull { it.iconFile }.distinct() - if (icons.isEmpty()) return@run emptyMap() - val usedNames = mutableSetOf(plistIconFileName) - val mapping = mutableMapOf() - for (icon in icons) { - if (!icon.exists()) continue - val name = - if (usedNames.add(icon.name)) { - icon.name - } else { - val nameWithoutExtension = icon.nameWithoutExtension - val extension = icon.extension - var uniqueName = icon.name - for (n in 1UL..ULong.MAX_VALUE) { - val candidate = "$nameWithoutExtension ($n).$extension" - if (usedNames.add(candidate)) { - uniqueName = candidate - break - } - } - uniqueName - } - mapping[icon] = File(name) - } - mapping - } - - val generateInfoPlist = - tasks.register( - taskNameAction = "generate", - taskNameObject = "graalvmInfoPlist", - ) { - description = "Generate Info.plist for GraalVM .app bundle" - val plistFile = appTmpDir.map { it.file("graalvm/Info.plist") } - outputs.file(plistFile) - - // Wire inputs for up-to-date checks - inputs.property("bundleName", plistBundleName) - inputs.property("bundleID", plistBundleID ?: "") - inputs.property("version", plistVersion) - inputs.property("imageName", imageName) - inputs.property("minSystemVersion", plistMinSystemVersion) - inputs.property("copyright", plistCopyright ?: "") - inputs.property("iconFileName", plistIconFileName) - inputs.property("fileAssociations", plistFileAssociations.toString()) - - doLast { - val plist = InfoPlistBuilder() - plist[PlistKeys.CFBundleName] = plistBundleName - plist[PlistKeys.CFBundleDisplayName] = plistBundleName - plist[PlistKeys.CFBundleIdentifier] = plistBundleID - plist[PlistKeys.CFBundleVersion] = plistVersion - plist[PlistKeys.CFBundleShortVersionString] = plistVersion - plist[PlistKeys.CFBundleExecutable] = imageName.get() - plist[PlistKeys.CFBundlePackageType] = "APPL" - plist[PlistKeys.CFBundleInfoDictionaryVersion] = "6.0" - plist[PlistKeys.NSHighResolutionCapable] = true - plist[PlistKeys.NSSupportsAutomaticGraphicsSwitching] = true - plist[PlistKeys.LSMinimumSystemVersion] = plistMinSystemVersion.get() - plist[PlistKeys.CFBundleDevelopmentRegion] = "English" - plist[PlistKeys.CFBundleAllowMixedLocalizations] = "true" - - if (plistCopyright != null) { - plist[PlistKeys.NSHumanReadableCopyright] = plistCopyright - } - - plist[PlistKeys.CFBundleIconFile] = plistIconFileName - - if (plistFileAssociations.isNotEmpty()) { - plist[PlistKeys.CFBundleDocumentTypes] = - plistFileAssociations - .groupBy { it.mimeType to it.description } - .map { (key, extensions) -> - val (mimeType, description) = key - val iconPath = - extensions - .firstNotNullOfOrNull { it.iconFile } - ?.let { fileAssociationIconMapping[it]?.name } - InfoPlistMapValue( - PlistKeys.CFBundleTypeRole to InfoPlistStringValue("Editor"), - PlistKeys.CFBundleTypeExtensions to - InfoPlistListValue(extensions.map { InfoPlistStringValue(it.extension) }), - PlistKeys.CFBundleTypeIconFile to - InfoPlistStringValue(iconPath ?: plistIconFileName), - PlistKeys.CFBundleTypeMIMETypes to InfoPlistStringValue(mimeType), - PlistKeys.CFBundleTypeName to InfoPlistStringValue(description), - PlistKeys.CFBundleTypeOSTypes to - InfoPlistListValue(InfoPlistStringValue("****")), - ) - } - } - - plistFile - .get() - .asFile.parentFile - .mkdirs() - plist.writeToFile(plistFile.get().asFile) - } - } - - val copyInfoPlist = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmInfoPlist", - ) { - description = "Copy Info.plist into .app bundle" - dependsOn(generateInfoPlist, cleanAppBundle) - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - from(appTmpDir.map { it.file("graalvm/Info.plist") }) - into(appBundleDir) - } - - // Copy icon into Resources/ — use custom icon if set, otherwise default - val copyIcon = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmMacIcon", - ) { - description = "Copy app icon into .app bundle Resources" - dependsOn(cleanAppBundle, unpackDefaultResources) - doNotTrackState("Output directory is modified by downstream strip/codesign tasks") - val iconFile = - app.nativeDistributions.macOS.iconFile.orElse( - unpackDefaultResources.flatMap { it.resources.macIcon }, - ) - from(iconFile) - into(appBundleDir.map { it.dir("Resources") }) - - // Create Base.lproj so macOS uses the system language for auto-added menu items - doLast { - appBundleDir.get().dir("Resources/Base.lproj").asFile.mkdirs() - } - } - - // Copy file association icons into Resources/ with unique names - val copyFileAssociationIcons = - if (fileAssociationIconMapping.isNotEmpty()) { - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmFileAssociationIcons", - ) { - description = "Copy file association icons into .app bundle Resources" - dependsOn(cleanAppBundle) - for (iconFile in fileAssociationIconMapping.keys) { - inputs.file(iconFile) - } - outputs.dir(appBundleDir.map { it.dir("Resources") }) - - doLast { - val resourcesDir = appBundleDir.get().dir("Resources").asFile - resourcesDir.mkdirs() - for ((sourceIcon, targetName) in fileAssociationIconMapping) { - if (sourceIcon.exists()) { - sourceIcon.copyTo(File(resourcesDir, targetName.name), overwrite = true) - } - } - } - } - } else { - null - } - - val codesignBundle = - tasks.register( - taskNameAction = "codesign", - taskNameObject = "graalvmBundle", - ) { - description = "Ad-hoc sign the entire .app bundle" - dependsOn(codesignDylibs, copyBinary, fixRpath, copyInfoPlist, copyJawtToLib, copySkikoLib, copyIcon) - copyFileAssociationIcons?.let { dependsOn(it) } - val bundleDir = appTmpDir.map { it.dir("graalvm/output/${appBundleName.get()}") } - commandLine("codesign", "--force", "--deep", "--sign", "-", bundleDir.get().asFile.absolutePath) - } - - return tasks.register( - taskNameAction = "package", - taskNameObject = "graalvmNative", - ) { - description = "Build native image and package as macOS .app bundle" - dependsOn( - copyBinary, - copyAwtDylibs, - copyJawtToLib, - copySkikoLib, - stripDylibs, - patchBuildVersion, - codesignDylibs, - codesignBundle, - fixRpath, - copyInfoPlist, - copyIcon, - ) - copyFileAssociationIcons?.let { dependsOn(it) } - } -} - -// ═══════════════════════════════════════════════════════════════════ -// Windows packaging -// ═══════════════════════════════════════════════════════════════════ - -@Suppress("LongParameterList") -private fun JvmApplicationContext.configureWindowsGraalvmPackaging( - graalvmHome: org.gradle.api.provider.Provider, - nativeImageCompile: TaskProvider, - nativeCompileDir: org.gradle.api.provider.Provider, - imageName: org.gradle.api.provider.Provider, - packageUberJar: TaskProvider, -): TaskProvider { - val outputDir = appTmpDir.map { it.dir("graalvm/output/${packageNameProvider.get()}") } - - val copyBinary = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmBinaryToOutput", - ) { - description = "Copy native binary into output directory" - dependsOn(nativeImageCompile) - from(nativeCompileDir.map { it.file("${imageName.get()}.exe") }) - into(outputDir) - } - - val copyAwtDlls = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmAwtDlls", - ) { - description = "Copy AWT DLLs into output directory" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/bin") { - include( - "awt.dll", - "java.dll", - "javajpeg.dll", - "fontmanager.dll", - "freetype.dll", - "lcms.dll", - "mlib_image.dll", - "splashscreen.dll", - "javaaccessbridge.dll", - ) - } - into(outputDir) - } - - val copyJvmDll = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmJvmDll", - ) { - description = "Copy jvm.dll into output directory" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/bin/server") { - include("jvm.dll") - } - into(outputDir) - } - - val copyJawtToBin = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmJawtToBin", - ) { - description = "Copy jawt.dll to bin/ subdir for Skiko" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/bin") { - include("jawt.dll") - } - into(outputDir.map { it.dir("bin") }) - } - - // On Windows, Skiko looks for skiko-windows-*.dll in java.home/bin/ (GraalVmInitializer - // sets java.home = execDir). Also include icudtl.dat which Skiko uses for ICU text data. - val skikoLibName = "skiko-${currentOS.id}-${currentArch.id}.dll" - val copySkikoLib = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmSkikoLib", - ) { - description = "Extract $skikoLibName and icudtl.dat from uber JAR into bin/ subdir so Skiko can load them" - dependsOn(packageUberJar) - from(project.zipTree(packageUberJar.flatMap { it.archiveFile })) { - include(skikoLibName, "icudtl.dat") - } - into(outputDir.map { it.dir("bin") }) - } - - return tasks.register( - taskNameAction = "package", - taskNameObject = "graalvmNative", - ) { - description = "Build native image and package with DLLs" - dependsOn(copyBinary, copyAwtDlls, copyJvmDll, copyJawtToBin, copySkikoLib) - } -} - -// ═══════════════════════════════════════════════════════════════════ -// Linux packaging -// ═══════════════════════════════════════════════════════════════════ - -@Suppress("LongParameterList") -private fun JvmApplicationContext.configureLinuxGraalvmPackaging( - graalvmHome: org.gradle.api.provider.Provider, - nativeImageCompile: TaskProvider, - nativeCompileDir: org.gradle.api.provider.Provider, - imageName: org.gradle.api.provider.Provider, - packageUberJar: TaskProvider, -): TaskProvider { - val outputDir = appTmpDir.map { it.dir("graalvm/output/${packageNameProvider.get()}") } - - val copyBinary = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmBinaryToOutput", - ) { - description = "Copy native binary into output directory" - dependsOn(nativeImageCompile) - from(nativeCompileDir.map { it.file(imageName.get()) }) - into(outputDir) - // Gradle snapshots the output directory for incremental build tracking. - // strip(1) creates temporary files in the same directory, causing - // NoSuchFileException if this task runs in parallel with stripSoLibs. - doNotTrackState("Shared output directory is modified by strip tasks") - } - - val copyAwtSoLibs = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmAwtSoLibs", - ) { - description = "Copy AWT .so libs into output directory" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/lib") { - include( - "libawt.so", - "libawt_headless.so", - "libawt_xawt.so", - "libfontmanager.so", - "libfreetype.so", - "libjava.so", - "libjavajpeg.so", - "libjawt.so", - "liblcms.so", - "libmlib_image.so", - "libsplashscreen.so", - ) - } - into(outputDir) - } - - val copyJvmSo = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmJvmSo", - ) { - description = "Copy libjvm.so into output directory" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/lib/server") { - include("libjvm.so") - } - into(outputDir) - } - - val copyJawtToLib = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmJawtToLib", - ) { - description = "Copy libjawt.so to lib/ subdir for Skiko" - dependsOn(nativeImageCompile) - from("${graalvmHome.get()}/lib") { - include("libjawt.so") - } - into(outputDir.map { it.dir("lib") }) - } - - // Skiko's Library.findAndLoad() looks for libskiko-linux-*.so in java.home/lib/. - // GraalVmInitializer sets java.home to the executable directory, so the library - // must be in lib/ alongside the binary. On systems without a ~/.skiko/ cache - // (e.g. a fresh Lubuntu install), Skiko falls through to resource extraction which - // fails because the .so is not registered as a native image resource → NPE. - val skikoLibName = "libskiko-${currentOS.id}-${currentArch.id}.so" - val skikoLibFile = packageUberJar.flatMap { it.archiveFile } - val copySkikoLib = - tasks.register( - taskNameAction = "copy", - taskNameObject = "graalvmSkikoLib", - ) { - description = "Extract $skikoLibName from uber JAR into lib/ subdir so Skiko can load it" - dependsOn(packageUberJar) - from(project.zipTree(skikoLibFile)) { - include(skikoLibName) - } - into(outputDir.map { it.dir("lib") }) - } - - val fixRpath = - tasks.register( - taskNameAction = "fix", - taskNameObject = "graalvmRpath", - ) { - description = "Set RPATH to \$ORIGIN on the binary so it finds .so libs next to it" - dependsOn(copyBinary) - val binary = outputDir.map { it.file(imageName.get()) } - commandLine("patchelf", "--set-rpath", "\$ORIGIN", binary.get().asFile.absolutePath) - } - - val fixSoRpath = - tasks.register( - taskNameAction = "fix", - taskNameObject = "graalvmSoRpath", - ) { - description = "Set RPATH to \$ORIGIN on companion .so libs so inter-library deps resolve" - dependsOn(copyAwtSoLibs, copyJvmSo) - val dir = outputDir.get().asFile.absolutePath - commandLine("bash", "-c", "for f in '$dir'/*.so; do patchelf --set-rpath '\$ORIGIN' \"\$f\"; done") - } - - val stripSoLibs = - tasks.register( - taskNameAction = "strip", - taskNameObject = "graalvmSoLibs", - ) { - description = "Strip debug symbols from .so libs" - dependsOn(copyAwtSoLibs, copyJvmSo, fixSoRpath) - commandLine("bash", "-c", "strip --strip-debug '${outputDir.get().asFile.absolutePath}'/*.so") - } - - return tasks.register( - taskNameAction = "package", - taskNameObject = "graalvmNative", - ) { - description = "Build native image and package with .so libs" - dependsOn(copyBinary, copyAwtSoLibs, copyJvmSo, copyJawtToLib, copySkikoLib, fixRpath, fixSoRpath, stripSoLibs) - } -} - -// ═══════════════════════════════════════════════════════════════════ -// Electron-builder integration -// ═══════════════════════════════════════════════════════════════════ - -private fun JvmApplicationContext.configureGraalvmElectronBuilderPackaging( - packageGraalvmNative: TaskProvider, - unpackDefaultResources: TaskProvider, - imageName: org.gradle.api.provider.Provider, -) { - val ebFormats = - app.nativeDistributions.targetFormats - .filter { it.backend == PackagingBackend.ELECTRON_BUILDER && !it.isStoreFormat } - - for (targetFormat in ebFormats) { - val packageFormat = - tasks.register( - taskNameAction = "packageGraalvm", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - enabled = targetFormat.isCompatibleWithCurrentOS - dependsOn(packageGraalvmNative, unpackDefaultResources) - - // The app image root is the output directory from the native packaging step - appImageRoot.set( - appTmpDir.map { it.dir("graalvm/output") }, - ) - - destinationDir.set( - app.nativeDistributions.outputBaseDir.map { - it.dir("$appDirName/graalvm-${targetFormat.outputDirName}") - }, - ) - - packageName.set(packageNameProvider) - packageVersion.set(packageVersionFor(targetFormat)) - - // Only wire platform-specific icons/entitlements for the current OS - // to avoid validation errors from missing cross-platform files. - when (currentOS) { - OS.Linux -> { - linuxIconFile.set( - app.nativeDistributions.linux.iconFile - .orElse(unpackDefaultResources.flatMap { it.resources.linuxIcon }), - ) - val startupWMClass = - app.nativeDistributions.linux.startupWMClass - ?.takeIf { it.isNotBlank() } - ?: app.mainClass?.replace('.', '-') - if (startupWMClass != null) { - this.startupWMClass.set(startupWMClass) - } - } - OS.Windows -> { - windowsIconFile.set( - app.nativeDistributions.windows.iconFile - .orElse(unpackDefaultResources.flatMap { it.resources.windowsIcon }), - ) - } - OS.MacOS -> { - val mac = app.nativeDistributions.macOS - nonValidatedMacSigningSettings = mac.signing - nonValidatedMacBundleID.set(mac.bundleID) - // PKG is always treated as App Store — ignore the deprecated user setting. - macAppStore.set(targetFormat.isStoreFormat) - macEntitlementsFile.set( - mac.entitlementsFile.orElse( - unpackDefaultResources.flatMap { it.resources.defaultEntitlements }, - ), - ) - macRuntimeEntitlementsFile.set( - mac.runtimeEntitlementsFile.orElse( - unpackDefaultResources.flatMap { it.resources.defaultEntitlements }, - ), - ) - } - } - - executableName.set(imageName) - customNodePath.set(NucleusProperties.electronBuilderNodePath(project.providers)) - publishMode.set(NucleusProperties.electronBuilderPublishMode(project.providers)) - distributions = app.nativeDistributions - } - - if (targetFormat.isCompatibleWith(OS.MacOS)) { - tasks.register( - taskNameAction = "notarizeGraalvm", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - dependsOn(packageFormat) - inputDir.set(packageFormat.flatMap { it.destinationDir }) - configureCommonNotarizationSettings(this) - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt deleted file mode 100644 index c1d68b957..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureJvmApplication.kt +++ /dev/null @@ -1,1170 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -@file:Suppress("TooManyFunctions") - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.PackagingBackend -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.desktop.application.internal.validation.validatePackageVersions -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractCheckNativeDistributionRuntime -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractElectronBuilderPackageTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractExtractNativeLibsTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractGenerateAotCacheTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractGenerateAppPropertiesTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractJLinkTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractJPackageTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNotarizationTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractPatchCaCertificatesTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractPatchMacJvmTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractProguardTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractRunAppXTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractRunDistributableTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractStripNativeLibsFromJarsTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractSuggestModulesTask -import dev.nucleusframework.nucleus.desktop.tasks.AbstractJarsFlattenTask -import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import dev.nucleusframework.nucleus.internal.KOTLIN_JVM_PLUGIN_ID -import dev.nucleusframework.nucleus.internal.KOTLIN_MPP_PLUGIN_ID -import dev.nucleusframework.nucleus.internal.javaSourceSets -import dev.nucleusframework.nucleus.internal.mppExt -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.dependsOn -import dev.nucleusframework.nucleus.internal.utils.detachedComposeGradleDependency -import dev.nucleusframework.nucleus.internal.utils.detachedDependency -import dev.nucleusframework.nucleus.internal.utils.dir -import dev.nucleusframework.nucleus.internal.utils.excludeTransitiveDependencies -import dev.nucleusframework.nucleus.internal.utils.file -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.ioFileOrNull -import dev.nucleusframework.nucleus.internal.utils.javaExecutable -import dev.nucleusframework.nucleus.internal.utils.jdkArch -import dev.nucleusframework.nucleus.internal.utils.provider -import org.gradle.api.DefaultTask -import org.gradle.api.file.DuplicatesStrategy -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.JavaExec -import org.gradle.api.tasks.Sync -import org.gradle.api.tasks.TaskProvider -import org.gradle.jvm.tasks.Jar - -private val defaultJvmArgs: List = - buildList { - add("-D$CONFIGURE_SWING_GLOBALS=true") - if (currentOS == OS.MacOS) { - // The decorated-window module uses reflection on java.desktop internals - // (sun.awt.AWTAccessor) to obtain the native NSWindow pointer. - // These --add-opens ensure setAccessible works in modular JDKs. - add("--add-opens=java.desktop/sun.awt=ALL-UNNAMED") - add("--add-opens=java.desktop/sun.lwawt=ALL-UNNAMED") - add("--add-opens=java.desktop/sun.lwawt.macosx=ALL-UNNAMED") - } - } -internal const val NUCLEUS_TASK_GROUP = "nucleus" - -// todo: multiple launchers -// todo: file associations -// todo: use workers -internal fun JvmApplicationContext.configureJvmApplication() { - if (app.isDefaultConfigurationEnabled) { - configureDefaultApp() - } - - if (app.nativeDistributions.cleanupNativeLibs) { - registerCleanNativeLibsTransform(project) - } - - validatePackageVersions() - val commonTasks = configureCommonJvmDesktopTasks() - configurePackagingTasks(commonTasks) - copy(buildType = app.buildTypes.release).configurePackagingTasks(commonTasks) -} - -@Suppress("LongParameterList") -internal class CommonJvmDesktopTasks( - val unpackDefaultResources: TaskProvider, - val checkRuntime: TaskProvider, - val suggestRuntimeModules: TaskProvider, - val prepareAppResources: TaskProvider, - val prepareSandboxedAppResources: TaskProvider?, - val createRuntimeImage: TaskProvider, - val patchCaCertificates: TaskProvider?, -) - -@Suppress("LongMethod") -private fun JvmApplicationContext.configureCommonJvmDesktopTasks(): CommonJvmDesktopTasks { - val unpackDefaultResources = - tasks.register( - taskNameAction = "unpack", - taskNameObject = "DefaultComposeDesktopJvmApplicationResources", - ) {} - - // Generate nucleus/nucleus-app.properties into a resource directory - val generateAppProperties = - tasks.register( - taskNameAction = "generate", - taskNameObject = "appProperties", - ) { - appId.set(resolvedAppIdProvider()) - val resolvedAppName = app.nativeDistributions.appName - ?: app.nativeDistributions.packageName - ?: project.name - appName.set(resolvedAppName) - // AUMID must match the electron-builder appId (used in NSIS/MSI shortcut properties) - val resolvedAumid = app.nativeDistributions.packageName?.let { "com.app.$it" } - resolvedAumid?.let { appAumid.set(it) } - app.nativeDistributions.packageVersion?.let { appVersion.set(it) } - app.nativeDistributions.vendor?.let { appVendor.set(it) } - app.nativeDistributions.description?.let { appDescription.set(it) } - // Store the computed StartupWMClass so graalvm-runtime can use it as - // WM_CLASS and GNOME can match the window to the .desktop file icon. - val wmClass = - app.nativeDistributions.linux.startupWMClass - ?.takeIf { it.isNotBlank() } - ?: app.mainClass?.replace('.', '-') - wmClass?.let { startupWmClass.set(it) } - // Resolve AppX StartupTask TaskId (MSIX auto-launch injection). - // electron-builder hardcodes TaskId="SlackStartup" in the injected manifest - // (legacy from its Slack origins) — this is the TaskId the runtime must use - // to match the installed MSIX package. Custom overrides are possible but - // require the user to patch the generated manifest themselves. - val appxSettings = app.nativeDistributions.windows.appx - if (appxSettings.addAutoLaunchExtension) { - val taskId = appxSettings.startupTaskId ?: "SlackStartup" - startupTaskId.set(taskId) - } - outputDir.set(appTmpDir.dir("app-properties")) - } - - // Add the generated properties directory to the resource source set - val appPropertiesOutputDir = generateAppProperties.flatMap { it.outputDir } - if (project.plugins.hasPlugin(KOTLIN_MPP_PLUGIN_ID)) { - project.mppExt.targets.all { target -> - if (target is org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget) { - target.compilations - .getByName("main") - .defaultSourceSet.resources - .srcDir(appPropertiesOutputDir) - } - } - } else if (project.plugins.hasPlugin(KOTLIN_JVM_PLUGIN_ID)) { - project.javaSourceSets - .getByName("main") - .resources - .srcDir(appPropertiesOutputDir) - } - - val checkRuntime = - tasks.register( - taskNameAction = "check", - taskNameObject = "runtime", - ) { - jdkHome.set(app.javaHomeProvider) - checkJdkVendor.set(NucleusProperties.checkJdkVendor(project.providers)) - jdkVersionProbeJar.from( - project - .detachedComposeGradleDependency( - artifactId = "gradle-plugin-internal-jdk-version-probe", - ).excludeTransitiveDependencies(), - ) - } - - val suggestRuntimeModules = - tasks.register( - taskNameAction = "suggest", - taskNameObject = "runtimeModules", - ) { - dependsOn(checkRuntime) - javaHome.set(app.javaHomeProvider) - modules.set(provider { app.nativeDistributions.modules }) - - useAppRuntimeFiles { (jarFiles, mainJar) -> - files.from(jarFiles) - launcherMainJar.set(mainJar) - } - } - - val extractNativeLibs = - if (app.nativeDistributions.hasStoreFormats) { - val osName = - when (currentOS) { - OS.Windows -> "windows" - OS.Linux -> "linux" - OS.MacOS -> "macos" - } - val archName = - when (targetArch) { - Arch.X64 -> "x64" - Arch.Arm64 -> "arm64" - } - - tasks.register( - taskNameAction = "extract", - taskNameObject = "nativeLibsForSandboxing", - ) { - targetOs.set(osName) - targetArch.set(archName) - outputDir.set(appTmpDir.dir("sandboxing-native-libs")) - - // Use original JARs (without cleanupNativeLibs transform) so we always - // get the native libs for the current arch even if cleanup is also enabled. - useAppRuntimeFiles { (runtimeJars, _) -> - inputJars.from(runtimeJars) - } - } - } else { - null - } - - val prepareAppResources = - tasks.register( - taskNameAction = "prepare", - taskNameObject = "appResources", - ) { - val appResourcesRootDir = app.nativeDistributions.appResourcesRootDir - if (appResourcesRootDir.isPresent) { - from(appResourcesRootDir.dir("common")) - from(appResourcesRootDir.dir(currentOS.id)) - from(appResourcesRootDir.dir(targetTarget.id)) - } - - into(jvmTmpDirForTask()) - } - - // Separate resources task for the sandboxed pipeline, including extracted native libs - val prepareSandboxedAppResources = - if (extractNativeLibs != null) { - tasks.register( - taskNameAction = "prepare", - taskNameObject = "sandboxedAppResources", - ) { - val appResourcesRootDir = app.nativeDistributions.appResourcesRootDir - if (appResourcesRootDir.isPresent) { - from(appResourcesRootDir.dir("common")) - from(appResourcesRootDir.dir(currentOS.id)) - from(appResourcesRootDir.dir(targetTarget.id)) - } - - dependsOn(extractNativeLibs) - from(extractNativeLibs.flatMap { it.outputDir }) - - into(jvmTmpDirForTask()) - } - } else { - null - } - - val createRuntimeImage = - tasks.register( - taskNameAction = "create", - taskNameObject = "runtimeImage", - ) { - dependsOn(checkRuntime) - javaHome.set(app.javaHomeProvider) - modules.set(provider { app.nativeDistributions.modules }) - includeAllModules.set(provider { app.nativeDistributions.includeAllModules }) - javaRuntimePropertiesFile.set(checkRuntime.flatMap { it.javaRuntimePropertiesFile }) - destinationDir.set(appTmpDir.dir("runtime")) - } - - val patchCaCertificates = - if (!app.nativeDistributions.trustedCertificates.isEmpty) { - tasks.register( - taskNameAction = "patch", - taskNameObject = "CaCertificates", - ) { - dependsOn(createRuntimeImage) - runtimeImageDir.set(createRuntimeImage.flatMap { it.destinationDir }) - javaHome.set(app.javaHomeProvider) - certificates.from(app.nativeDistributions.trustedCertificates) - destinationDir.set(appTmpDir.dir("runtime-patched")) - } - } else { - null - } - - return CommonJvmDesktopTasks( - unpackDefaultResources, - checkRuntime, - suggestRuntimeModules, - prepareAppResources, - prepareSandboxedAppResources, - createRuntimeImage, - patchCaCertificates, - ) -} - -@Suppress("LongMethod") -private fun JvmApplicationContext.configurePackagingTasks(commonTasks: CommonJvmDesktopTasks) { - val runProguard = - if (buildType.proguard.isEnabled.orNull == true) { - tasks.register( - taskNameAction = "proguard", - taskNameObject = "Jars", - ) { - configureProguardTask(this, commonTasks.unpackDefaultResources) - } - } else { - null - } - - val hasStoreFormats = app.nativeDistributions.hasStoreFormats - val allEbFormats = - app.nativeDistributions.targetFormats - .filter { it.backend == PackagingBackend.ELECTRON_BUILDER } - val nonStoreFormats = allEbFormats.filter { !it.isStoreFormat } - val storeFormats = allEbFormats.filter { it.isStoreFormat } - - // Strip native libs from JARs for the sandboxed pipeline (store formats only). - val stripNativeLibsFromJars = - if (hasStoreFormats) { - tasks.register( - taskNameAction = "strip", - taskNameObject = "nativeLibsFromJars", - ) { - outputDir.set(appTmpDir.dir("sandboxing-stripped-jars")) - if (runProguard != null) { - dependsOn(runProguard) - inputJars.from(project.fileTree(runProguard.flatMap { it.destinationDir })) - mainJarName.set(runProguard.flatMap { it.mainJarBaseName }) - } else { - useAppRuntimeFiles { (runtimeJars, mainJar) -> - inputJars.from(runtimeJars) - mainJarName.set(mainJar.map { it.asFile.name }) - } - } - } - } else { - null - } - - // === Non-sandboxed pipeline (direct distribution formats: DMG, ZIP, NSIS, etc.) === - - val createDistributable = - tasks.register( - taskNameAction = "create", - taskNameObject = "distributable", - args = listOf(TargetFormat.RawAppImage), - ) { - configurePackageTask( - this, - createRuntimeImage = commonTasks.createRuntimeImage, - prepareAppResources = commonTasks.prepareAppResources, - checkRuntime = commonTasks.checkRuntime, - unpackDefaultResources = commonTasks.unpackDefaultResources, - runProguard = runProguard, - patchCaCertificates = commonTasks.patchCaCertificates, - sandboxed = false, - ) - } - - val generateAotCache = - if (app.nativeDistributions.enableAotCache) { - tasks.register( - taskNameAction = "generate", - taskNameObject = "AotCache", - ) { - dependsOn(createDistributable) - distributableDir.set(createDistributable.flatMap { it.destinationDir }) - javaHome.set(app.javaHomeProvider) - javaRuntimePropertiesFile.set(commonTasks.checkRuntime.flatMap { it.javaRuntimePropertiesFile }) - if (currentOS == OS.MacOS) { - val mac = app.nativeDistributions.macOS - val defaultResources = commonTasks.unpackDefaultResources - macRuntimeEntitlementsFile.set( - mac.runtimeEntitlementsFile.orElse(defaultResources.get { defaultEntitlements }), - ) - } - } - } else { - null - } - - val nonStoreNotarizeTasks = mutableListOf>() - - val nonStorePackageFormats = - nonStoreFormats.map { targetFormat -> - val packageFormat = - tasks.register( - taskNameAction = "package", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - configureElectronBuilderPackageTask( - this, - createDistributable = createDistributable, - unpackDefaultResources = commonTasks.unpackDefaultResources, - ) - generateAotCache?.let { dependsOn(it) } - } - - if (targetFormat.isCompatibleWith(OS.MacOS)) { - val notarizeTask = - tasks.register( - taskNameAction = "notarize", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - dependsOn(packageFormat) - inputDir.set(packageFormat.flatMap { it.destinationDir }) - configureCommonNotarizationSettings(this) - } - nonStoreNotarizeTasks.add(notarizeTask) - } - - packageFormat - } - - // === Sandboxed pipeline (store formats: PKG, AppX, Flatpak) === - - val storeNotarizeTasks = mutableListOf>() - - val storePackageFormats = - if (hasStoreFormats) { - val createSandboxedDistributable = - tasks.register( - taskNameAction = "create", - taskNameObject = "sandboxedDistributable", - args = listOf(TargetFormat.RawAppImage), - ) { - configurePackageTask( - this, - createRuntimeImage = commonTasks.createRuntimeImage, - prepareAppResources = - commonTasks.prepareSandboxedAppResources - ?: commonTasks.prepareAppResources, - checkRuntime = commonTasks.checkRuntime, - unpackDefaultResources = commonTasks.unpackDefaultResources, - runProguard = runProguard, - stripNativeLibs = stripNativeLibsFromJars, - patchCaCertificates = commonTasks.patchCaCertificates, - sandboxed = true, - ) - } - - val generateSandboxedAotCache = - if (app.nativeDistributions.enableAotCache) { - tasks.register( - taskNameAction = "generate", - taskNameObject = "sandboxedAotCache", - ) { - dependsOn(createSandboxedDistributable) - distributableDir.set(createSandboxedDistributable.flatMap { it.destinationDir }) - javaHome.set(app.javaHomeProvider) - javaRuntimePropertiesFile.set(commonTasks.checkRuntime.flatMap { it.javaRuntimePropertiesFile }) - if (currentOS == OS.MacOS) { - val mac = app.nativeDistributions.macOS - val defaultResources = commonTasks.unpackDefaultResources - macRuntimeEntitlementsFile.set( - mac.runtimeEntitlementsFile.orElse( - defaultResources.get { defaultSandboxRuntimeEntitlements }, - ), - ) - } - } - } else { - null - } - - storeFormats.map { targetFormat -> - val packageFormat = - tasks.register( - taskNameAction = "package", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - configureElectronBuilderPackageTask( - this, - createDistributable = createSandboxedDistributable, - unpackDefaultResources = commonTasks.unpackDefaultResources, - ) - generateSandboxedAotCache?.let { dependsOn(it) } - } - - if (targetFormat.isCompatibleWith(OS.MacOS)) { - val notarizeTask = - tasks.register( - taskNameAction = "notarize", - taskNameObject = targetFormat.name, - args = listOf(targetFormat), - ) { - dependsOn(packageFormat) - inputDir.set(packageFormat.flatMap { it.destinationDir }) - configureCommonNotarizationSettings(this) - } - storeNotarizeTasks.add(notarizeTask) - } - - packageFormat - } - } else { - emptyList() - } - - val packageFormats = nonStorePackageFormats + storePackageFormats - val allNotarizeTasks = nonStoreNotarizeTasks + storeNotarizeTasks - - val notarizeForCurrentOS = - if (allNotarizeTasks.isNotEmpty()) { - tasks.register( - taskNameAction = "notarize", - taskNameObject = "distributionForCurrentOS", - ) { - dependsOn(allNotarizeTasks) - } - } else { - null - } - - val packageForCurrentOS = - tasks.register( - taskNameAction = "package", - taskNameObject = "distributionForCurrentOS", - ) { - dependsOn(packageFormats) - notarizeForCurrentOS?.let { dependsOn(it) } - } - - if (buildType === app.buildTypes.default) { - // todo: remove - tasks.register("package") { - dependsOn(packageForCurrentOS) - - doLast { - it.logger.error( - "'${it.name}' task is deprecated and will be removed in next releases. " + - "Use '${packageForCurrentOS.get().name}' task instead", - ) - } - } - } - - val flattenJars = - tasks.register( - taskNameAction = "flatten", - taskNameObject = "Jars", - ) { - configureFlattenJars(this, runProguard) - } - - val packageUberJarForCurrentOS = - tasks.register( - taskNameAction = "package", - taskNameObject = "uberJarForCurrentOS", - ) { - configurePackageUberJarForCurrentOS(this, flattenJars) - } - - // runDistributable always uses the non-sandboxed distributable (most relevant for local dev/test) - val runDistributable = - tasks.register( - taskNameAction = "run", - taskNameObject = "distributable", - args = listOf(createDistributable), - ) - if (generateAotCache != null) { - runDistributable.dependsOn(generateAotCache) - } - - // runAppX: sideload and launch AppX package for local testing (Windows only) - if (currentOS == OS.Windows && hasStoreFormats) { - val appxPackageTask = - storePackageFormats.firstOrNull { task -> - task.map { it.targetFormat }.orNull == TargetFormat.AppX - } - if (appxPackageTask != null) { - val appxSettings = app.nativeDistributions.windows.appx - tasks.register( - taskNameAction = "run", - taskNameObject = "appX", - ) { - dependsOn(appxPackageTask) - appxDir.set(appxPackageTask.flatMap { it.destinationDir }) - identityName.set( - project.provider { - appxSettings.identityName - ?: error("appx.identityName must be set to use runAppX") - }, - ) - applicationId.set( - project.provider { - appxSettings.applicationId ?: "App" - }, - ) - } - } - } - - // Register the patch task eagerly so it's available for the run task's - // lazy configuration (Gradle forbids task registration from within - // another task's configuration action). - val patchMacJvmTask: TaskProvider? = - if (currentOS == OS.MacOS && app.nativeDistributions.macOS.macOsSdkVersion != null) { - registerPatchMacJvmTask( - javaHome = app.javaHome, - minVersion = app.nativeDistributions.macOS.minimumSystemVersion ?: "10.13", - sdkVersion = app.nativeDistributions.macOS.macOsSdkVersion!!, - ) - } else { - null - } - - val run = - tasks.register(taskNameAction = "run") { - configureRunTask(this, commonTasks.prepareAppResources, runProguard, patchMacJvmTask) - } -} - -private fun JvmApplicationContext.configureProguardTask( - proguard: AbstractProguardTask, - unpackDefaultResources: TaskProvider, -): AbstractProguardTask = - proguard.apply { - val settings = buildType.proguard - mainClass.set(app.mainClass) - proguardVersion.set(settings.version) - proguardFiles.from( - proguardVersion.map { proguardVersion -> - project.detachedDependency( - groupId = "com.guardsquare", - artifactId = "proguard-gradle", - version = proguardVersion, - ) - }, - ) - configurationFiles.from(settings.configurationFiles) - // ProGuard uses -dontobfuscate option to turn off obfuscation, which is enabled by default - // We want to disable obfuscation by default, because often - // it is not needed, but makes troubleshooting much harder. - // If obfuscation is turned off by default, - // enabling (`isObfuscationEnabled.set(true)`) seems much better, - // than disabling obfuscation disabling (`dontObfuscate.set(false)`). - // That's why a task property is follows ProGuard design, - // when our DSL does the opposite. - dontobfuscate.set(settings.obfuscate.map { !it }) - dontoptimize.set(settings.optimize.map { !it }) - - joinOutputJars.set(settings.joinOutputJars) - - dependsOn(unpackDefaultResources) - defaultComposeRulesFile.set(unpackDefaultResources.flatMap { it.resources.defaultComposeProguardRules }) - - maxHeapSize.set(settings.maxHeapSize) - destinationDir.set(appTmpDir.dir("proguard")) - javaHome.set(app.javaHomeProvider) - - useAppRuntimeFiles { files -> - inputFiles.from(files.allRuntimeJars) - mainJar.set(files.mainJar) - mainJarBaseName.set(files.mainJar.map { it.asFile.name }) - } - } - -@Suppress("LongParameterList") -private fun JvmApplicationContext.configurePackageTask( - packageTask: AbstractJPackageTask, - createRuntimeImage: TaskProvider? = null, - prepareAppResources: TaskProvider? = null, - checkRuntime: TaskProvider? = null, - unpackDefaultResources: TaskProvider, - runProguard: Provider? = null, - stripNativeLibs: TaskProvider? = null, - patchCaCertificates: TaskProvider? = null, - sandboxed: Boolean = false, -) { - packageTask.enabled = packageTask.targetFormat.isCompatibleWithCurrentOS - - createRuntimeImage?.let { createRuntimeImage -> - packageTask.dependsOn(createRuntimeImage) - if (patchCaCertificates != null) { - packageTask.dependsOn(patchCaCertificates) - packageTask.runtimeImage.set(patchCaCertificates.flatMap { it.destinationDir }) - } else { - packageTask.runtimeImage.set(createRuntimeImage.flatMap { it.destinationDir }) - } - } - - prepareAppResources?.let { prepareResources -> - packageTask.dependsOn(prepareResources) - val resourcesDir = packageTask.project.layout.dir(prepareResources.map { it.destinationDir }) - packageTask.appResourcesDir.set(resourcesDir) - } - - checkRuntime?.let { checkRuntime -> - packageTask.dependsOn(checkRuntime) - packageTask.javaRuntimePropertiesFile.set(checkRuntime.flatMap { it.javaRuntimePropertiesFile }) - } - - this.configurePlatformSettings(packageTask, unpackDefaultResources, sandboxed) - - app.nativeDistributions.let { executables -> - packageTask.packageName.set(packageNameProvider) - packageTask.appName.set(project.provider { executables.appName }) - packageTask.packageDescription.set(executables.description) - packageTask.packageCopyright.set(executables.copyright) - packageTask.packageVendor.set(executables.vendor) - packageTask.packageVersion.set(packageVersionFor(packageTask.targetFormat)) - } - - val dirSuffix = if (sandboxed) "-sandboxed" else "" - packageTask.destinationDir.set( - app.nativeDistributions.outputBaseDir.map { - it.dir("$appDirName/${packageTask.targetFormat.outputDirName}$dirSuffix") - }, - ) - packageTask.javaHome.set(app.javaHomeProvider) - - when { - stripNativeLibs != null -> { - packageTask.dependsOn(stripNativeLibs) - // Wire through declared output properties only (outputDir, mainJarName) - // to avoid serializing task references in the configuration cache. - val strippedOutputDir = stripNativeLibs.flatMap { it.outputDir } - packageTask.files.from( - strippedOutputDir.map { dir -> - dir.asFileTree.matching { it.exclude(".main-jar-name") } - }, - ) - val strippedMainJarName = stripNativeLibs.flatMap { it.mainJarName } - packageTask.launcherMainJar.fileProvider( - strippedOutputDir.zip(strippedMainJarName) { dir, mainJarName -> - val metaFile = dir.asFile.resolve(".main-jar-name") - if (metaFile.exists()) { - dir.asFile.resolve(metaFile.readText().trim()) - } else { - dir.asFile.resolve(mainJarName) - } - }, - ) - // Strip task already mangles filenames for deduplication - packageTask.mangleJarFilesNames.set(false) - if (runProguard != null) { - packageTask.packageFromUberJar.set(runProguard.flatMap { it.joinOutputJars }) - } - } - runProguard != null -> { - packageTask.dependsOn(runProguard) - packageTask.files.from(project.fileTree(runProguard.flatMap { it.destinationDir })) - packageTask.launcherMainJar.set(runProguard.flatMap { it.mainJarInDestinationDir }) - packageTask.mangleJarFilesNames.set(false) - packageTask.packageFromUberJar.set(runProguard.flatMap { it.joinOutputJars }) - } - else -> { - packageTask.useAppRuntimeFiles { (runtimeJars, mainJar) -> - files.from(runtimeJars) - launcherMainJar.set(mainJar) - } - } - } - - packageTask.launcherMainClass.set(app.mainClass) - packageTask.sandboxingEnabled.set(sandboxed) - packageTask.launcherJvmArgs.set( - provider { - val executableTypeArg = "-D$APP_EXECUTABLE_TYPE=${packageTask.targetFormat.executableTypeValue}" - val appIdArg = "-D$APP_ID=${resolvedAppIdProvider().get()}" - var args = defaultJvmArgs + executableTypeArg + appIdArg + app.jvmArgs - val splash = app.nativeDistributions.splashImage - if (splash != null) { - args = args + "-splash:\$APPDIR/resources/$splash" - } - if (sandboxed) { - val nativeLibPath = if (currentOS == OS.MacOS) "\$APPDIR/../Frameworks" else "\$APPDIR/resources" - args = args + sandboxingJvmArgs(nativeLibPath) - } - args - }, - ) - packageTask.launcherArgs.set(provider { app.args }) -} - -private fun JvmApplicationContext.configureElectronBuilderPackageTask( - packageTask: AbstractElectronBuilderPackageTask, - createDistributable: TaskProvider, - unpackDefaultResources: TaskProvider, -) { - packageTask.enabled = packageTask.targetFormat.isCompatibleWithCurrentOS - packageTask.dependsOn(createDistributable) - packageTask.appImageRoot.set(createDistributable.flatMap { it.destinationDir }) - - packageTask.destinationDir.set( - app.nativeDistributions.outputBaseDir.map { - it.dir("$appDirName/${packageTask.targetFormat.outputDirName}") - }, - ) - - packageTask.packageName.set(packageNameProvider) - packageTask.executableName.set( - project.provider { - val dist = app.nativeDistributions - val platformName = - when (currentOS) { - OS.Linux -> dist.linux.packageName - OS.Windows -> dist.windows.packageName - OS.MacOS -> dist.macOS.packageName - } - platformName ?: dist.packageName ?: error( - "No packageName configured for ${currentOS.name}. " + - "Set nativeDistributions { packageName = \"...\" } " + - "or the platform-specific packageName.", - ) - }, - ) - packageTask.packageVersion.set(packageVersionFor(packageTask.targetFormat)) - packageTask.linuxIconFile.set( - app.nativeDistributions.linux.iconFile - .orElse(unpackDefaultResources.get { linuxIcon }), - ) - packageTask.windowsIconFile.set( - app.nativeDistributions.windows.iconFile - .orElse(unpackDefaultResources.get { windowsIcon }), - ) - val startupWMClass = - app.nativeDistributions.linux.startupWMClass - ?.takeIf { it.isNotBlank() } - ?: app.mainClass?.replace('.', '-') - if (startupWMClass != null) { - packageTask.startupWMClass.set(startupWMClass) - } - packageTask.customNodePath.set(NucleusProperties.electronBuilderNodePath(project.providers)) - packageTask.publishMode.set(NucleusProperties.electronBuilderPublishMode(project.providers)) - packageTask.appxStoreLogo.set(app.nativeDistributions.windows.appx.storeLogo) - packageTask.appxSquare44x44Logo.set(app.nativeDistributions.windows.appx.square44x44Logo) - packageTask.appxSquare150x150Logo.set(app.nativeDistributions.windows.appx.square150x150Logo) - packageTask.appxWide310x150Logo.set(app.nativeDistributions.windows.appx.wide310x150Logo) - packageTask.distributions = app.nativeDistributions - packageTask.targetArch.set(app.javaHomeProvider.map { jdkArch(java.io.File(it)).id }) - - if (currentOS == OS.MacOS) { - val mac = app.nativeDistributions.macOS - packageTask.nonValidatedMacSigningSettings = mac.signing - packageTask.nonValidatedMacBundleID.set(mac.bundleID) - // PKG is always treated as App Store — ignore the deprecated user setting for store formats. - packageTask.macAppStore.set(packageTask.targetFormat.isStoreFormat) - val sandboxed = packageTask.targetFormat.isStoreFormat - val defaultAppEntitlements = - if (sandboxed) { - unpackDefaultResources.get { defaultSandboxEntitlements } - } else { - unpackDefaultResources.get { defaultEntitlements } - } - val defaultRuntimeEntitlements = - if (sandboxed) { - unpackDefaultResources.get { defaultSandboxRuntimeEntitlements } - } else { - unpackDefaultResources.get { defaultEntitlements } - } - packageTask.macEntitlementsFile.set( - mac.entitlementsFile.orElse(defaultAppEntitlements), - ) - packageTask.macRuntimeEntitlementsFile.set( - mac.runtimeEntitlementsFile.orElse(defaultRuntimeEntitlements), - ) - } -} - -internal fun JvmApplicationContext.configureCommonNotarizationSettings(notarizationTask: AbstractNotarizationTask) { - val notarization = app.nativeDistributions.macOS.notarization - notarizationTask.nonValidatedNotarizationSettings = notarization - notarizationTask.onlyIf { - val hasAppleId = - !notarization.appleID.orNull.isNullOrEmpty() && - !notarization.password.orNull.isNullOrEmpty() && - !notarization.teamID.orNull.isNullOrEmpty() - val hasKeychainProfile = !notarization.keychainProfile.orNull.isNullOrEmpty() - val hasApiKey = - !notarization.apiKey.orNull.isNullOrEmpty() && - !notarization.apiKeyId.orNull.isNullOrEmpty() && - !notarization.apiIssuer.orNull.isNullOrEmpty() - val configured = hasAppleId || hasKeychainProfile || hasApiKey - if (!configured) { - it.logger.info("Notarization skipped: macOS notarization settings are not configured") - } - configured - } -} - -private fun TaskProvider.get( - fn: AbstractUnpackDefaultApplicationResourcesTask.DefaultResourcesProvider.() -> Provider, -) = flatMap { fn(it.resources) } - -internal fun JvmApplicationContext.configurePlatformSettings( - packageTask: AbstractJPackageTask, - defaultResources: TaskProvider, - sandboxed: Boolean = false, -) { - packageTask.dependsOn(defaultResources) - - when (currentOS) { - OS.Linux -> { - app.nativeDistributions.linux.also { linux -> - packageTask.iconFile.set(linux.iconFile.orElse(defaultResources.get { linuxIcon })) - packageTask.fileAssociations.set(linux.fileAssociations) - } - } - OS.Windows -> { - app.nativeDistributions.windows.also { win -> - packageTask.winConsole.set(win.console) - packageTask.iconFile.set(win.iconFile.orElse(defaultResources.get { windowsIcon })) - packageTask.fileAssociations.set(win.fileAssociations) - } - } - OS.MacOS -> { - app.nativeDistributions.macOS.also { mac -> - packageTask.macPackageName.set(mac.packageName) - packageTask.macDockName.set( - if (mac.setDockNameSameAsPackageName) { - provider { - mac.dockName - ?: mac.packageName - ?: packageNameProvider.get() - } - } else { - provider { - mac.dockName ?: packageNameProvider.get() - } - }, - ) - // The jpackage task always builds a RawAppImage, so targetFormat.isStoreFormat - // is always false. Use the sandboxed flag instead: sandboxed distributable feeds - // store formats (PKG) and must pass --mac-app-store to jpackage so it searches - // for the correct certificate type ("3rd Party Mac Developer Application"). - packageTask.macAppStore.set(sandboxed) - packageTask.macAppCategory.set(mac.appCategory) - packageTask.macMinimumSystemVersion.set(mac.minimumSystemVersion) - val defaultAppEntitlements = - if (sandboxed) { - defaultResources.get { defaultSandboxEntitlements } - } else { - defaultResources.get { defaultEntitlements } - } - val defaultRuntimeEntitlements = - if (sandboxed) { - defaultResources.get { defaultSandboxRuntimeEntitlements } - } else { - defaultResources.get { defaultEntitlements } - } - packageTask.macEntitlementsFile.set( - mac.entitlementsFile.orElse(defaultAppEntitlements), - ) - packageTask.macRuntimeEntitlementsFile.set( - mac.runtimeEntitlementsFile.orElse(defaultRuntimeEntitlements), - ) - packageTask.packageBuildVersion.set(packageBuildVersionFor(packageTask.targetFormat)) - packageTask.nonValidatedMacBundleID.set(mac.bundleID) - packageTask.macProvisioningProfile.set(mac.provisioningProfile) - packageTask.macRuntimeProvisioningProfile.set(mac.runtimeProvisioningProfile) - packageTask.macOsSdkVersion.set(mac.macOsSdkVersion) - packageTask.macExtraPlistKeysRawXml.set(mac.infoPlistSettings.extraKeysRawXml) - packageTask.nonValidatedMacSigningSettings = app.nativeDistributions.macOS.signing - packageTask.iconFile.set(mac.iconFile.orElse(defaultResources.get { macIcon })) - packageTask.fileAssociations.set(mac.fileAssociations) - packageTask.urlProtocols.set(app.nativeDistributions.protocols) - packageTask.macLayeredIcons.set(mac.layeredIconDir) - packageTask.macLaunchAgents.set(mac.launchAgents.agents) - } - } - } -} - -private fun JvmApplicationContext.configureRunTask( - exec: JavaExec, - prepareAppResources: TaskProvider, - runProguard: Provider?, - patchMacJvmTask: TaskProvider?, -) { - exec.dependsOn(prepareAppResources) - - exec.mainClass.set(app.mainClass) - exec.executable(javaExecutable(app.javaHome)) - if (currentOS == OS.MacOS) { - val sdkVersion = app.nativeDistributions.macOS.macOsSdkVersion - if (sdkVersion != null && patchMacJvmTask != null) { - val javaHome = app.javaHome - exec.dependsOn(patchMacJvmTask) - // Route the fork through a vtool-patched copy of the JDK so AppKit - // gates Liquid Glass on. `javaLauncher` is finalized before - // `doFirst`, so it must be wired at configuration time — but - // reading the patch task's output from inside a `.map` chain - // breaks the configuration cache (Gradle forbids querying a - // property whose value depends on a task that hasn't completed). - // Instead, resolve the patched binary path from `project.layout` - // at config time; `dependsOn` guarantees the file exists by the - // time the run task fires. Letting JavaExec stay in charge of - // the fork is what allows IntelliJ's Gradle debugger to inject - // JDWP and manage the process lifecycle. - val patchedBinFile = project.layout.buildDirectory - .file("nucleus/patched-jvm/bin/java") - .get() - .asFile - val patchedJavaHomeFile = patchedBinFile.parentFile.parentFile - exec.javaLauncher.set( - PatchedJavaLauncher( - patchedJavaBinary = patchedBinFile, - patchedJavaHome = patchedJavaHomeFile, - sourceJavaHome = java.io.File(javaHome), - objects = project.objects, - ), - ) - // `executable` isn't Provider-aware in Gradle 9, but it isn't - // finalized before `doFirst` either — align it with the launcher - // right before the action runs so the toolchain check passes. - exec.doFirst { - (it as JavaExec).executable(patchedBinFile.absolutePath) - } - } - } - exec.jvmArgs = - arrayListOf().apply { - addAll(defaultJvmArgs) - add("-D$APP_EXECUTABLE_TYPE=$EXECUTABLE_TYPE_DEV") - add("-D$APP_ID=${resolvedAppIdProvider().get()}") - - if (currentOS == OS.MacOS) { - val dockName = - app.nativeDistributions.appName - ?: app.nativeDistributions.packageName - ?: project.name - add("-Dapple.awt.application.name=$dockName") - val file = app.nativeDistributions.macOS.iconFile.ioFileOrNull - if (file != null) add("-Xdock:icon=$file") - } - - addAll(app.jvmArgs) - val appResourcesDir = prepareAppResources.get().destinationDir - add("-D$APP_RESOURCES_DIR=${appResourcesDir.absolutePath}") - - app.nativeDistributions.splashImage?.let { splash -> - val splashFile = appResourcesDir.resolve(splash) - if (splashFile.exists()) { - add("-splash:${splashFile.absolutePath}") - } - } - - // Dev mode AOT: ./gradlew run -Paot=train|on|auto|off - val aotCacheDir = - project.layout.buildDirectory - .dir("compose/aot-cache") - .get() - .asFile - val devAotCache = java.io.File(aotCacheDir, "dev.aot") - when (project.findProperty("aot")?.toString()) { - "train" -> { - aotCacheDir.mkdirs() - add("-XX:AOTCacheOutput=${devAotCache.absolutePath}") - } - "on" -> { - if (devAotCache.exists()) { - add("-XX:AOTCache=${devAotCache.absolutePath}") - } - } - "auto" -> { - if (devAotCache.exists()) { - add("-XX:AOTCache=${devAotCache.absolutePath}") - } else { - aotCacheDir.mkdirs() - add("-XX:AOTCacheOutput=${devAotCache.absolutePath}") - } - } - // "off" or absent → no-op - } - } - exec.args = app.args - - if (runProguard != null) { - exec.dependsOn(runProguard) - exec.classpath = project.fileTree(runProguard.flatMap { it.destinationDir }) - } else { - exec.useAppRuntimeFiles { (runtimeJars, _) -> - classpath = runtimeJars - } - } -} - -private fun JvmApplicationContext.configureFlattenJars( - flattenJars: AbstractJarsFlattenTask, - runProguard: Provider?, -) { - if (runProguard != null) { - flattenJars.dependsOn(runProguard) - flattenJars.inputFiles.from(runProguard.flatMap { it.destinationDir }) - } else { - flattenJars.useAppRuntimeFiles { (runtimeJars, _) -> - inputFiles.from(runtimeJars) - } - } - - flattenJars.flattenedJar.set(appTmpDir.file("flattenJars/flattened.jar")) -} - -private fun JvmApplicationContext.configurePackageUberJarForCurrentOS( - jar: Jar, - flattenJars: Provider, -) { - jar.dependsOn(flattenJars) - jar.from(project.zipTree(flattenJars.flatMap { it.flattenedJar })) - - app.mainClass?.let { jar.manifest.attributes["Main-Class"] = it } - jar.manifest.attributes["Multi-Release"] = "true" - jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE - jar.archiveAppendix.set(targetTarget.id) - jar.archiveBaseName.set(packageNameProvider) - jar.archiveVersion.set(packageVersionFor(TargetFormat.RawAppImage)) - jar.archiveClassifier.set(buildType.classifier) - jar.destinationDirectory.set( - jar.project.layout.buildDirectory - .dir("compose/jars"), - ) - - jar.doLast { - jar.logger.lifecycle("The jar is written to ${jar.archiveFile.ioFile.canonicalPath}") - } -} - -/** - * Builds the list of JVM args needed for sandboxing (loading native libs from the resources directory - * instead of extracting them at runtime). - * - * JNA-specific args are always included: they are harmless if JNA is not on the classpath - * (the JVM simply ignores unknown system properties). - * - * Native libs are extracted flat into [resourcesPath] (no platform subdirectories), - * so a single directory entry is sufficient for all lookup mechanisms. - */ -private fun sandboxingJvmArgs(resourcesPath: String): List = - listOf( - "-Djava.library.path=$resourcesPath", - "-Djna.nounpack=true", - "-Djna.nosys=true", - "-Djna.boot.library.path=$resourcesPath", - "-Djna.library.path=$resourcesPath", - ) - -/** - * Registers (or reuses) the per-project task that produces a vtool-patched - * copy of the source JDK's `java` binary for Liquid Glass. Shared across run - * tasks of all build types since inputs (javaHome, SDK/min version) are - * identical at the project level. - */ -private fun JvmApplicationContext.registerPatchMacJvmTask( - javaHome: String, - minVersion: String, - sdkVersion: String, -): TaskProvider { - val taskName = "nucleusPatchMacJvm" - return if (project.tasks.names.contains(taskName)) { - project.tasks.named(taskName, AbstractPatchMacJvmTask::class.java) - } else { - project.tasks.register(taskName, AbstractPatchMacJvmTask::class.java) { - it.sourceJavaHome.set(javaHome) - it.minimumSystemVersion.set(minVersion) - it.sdkVersion.set(sdkVersion) - it.outputJavaHome.set(project.layout.buildDirectory.dir("nucleus/patched-jvm")) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt deleted file mode 100644 index 4002428db..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/configureNativeApplication.kt +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.NativeApplication -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageAppDirTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageDmgTask -import dev.nucleusframework.nucleus.desktop.application.tasks.AbstractNativeMacApplicationPackageTask -import dev.nucleusframework.nucleus.desktop.tasks.AbstractUnpackDefaultApplicationResourcesTask -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.joinLowerCamelCase -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBinary -import org.jetbrains.kotlin.gradle.plugin.mpp.NativeOutputKind -import java.util.* - -internal fun configureNativeApplication( - project: Project, - app: NativeApplication, - unpackDefaultResources: TaskProvider, -) { - if (currentOS != OS.MacOS) return - - for (target in app._targets) { - configureNativeApplication(project, app, target, unpackDefaultResources) - } -} - -private fun configureNativeApplication( - project: Project, - app: NativeApplication, - target: KotlinNativeTarget, - unpackDefaultResources: TaskProvider, -) { - for (binary in target.binaries) { - if (binary.outputKind == NativeOutputKind.EXECUTABLE) { - configureNativeApplication(project, app, binary, unpackDefaultResources) - } - } -} - -private fun configureNativeApplication( - project: Project, - app: NativeApplication, - binary: NativeBinary, - unpackDefaultResources: TaskProvider, -) { - val createDistributable = - project.tasks.composeDesktopNativeTask( - desktopNativeTaskName("createDistributableNative", binary), - ) { - configureNativePackageTask(app, binary, TargetFormat.RawAppImage) - - dependsOn(unpackDefaultResources) - val macIcon = app.distributions.macOS.iconFile - val defaultIcon = unpackDefaultResources.flatMap { it.resources.macIcon } - iconFile.set(macIcon.orElse(defaultIcon)) - - dependsOn(binary.linkTaskProvider) - executable.set(project.layout.file(binary.linkTaskProvider.map { it.binary.outputFile })) - appCategory.set(project.provider { app.distributions.macOS.appCategory ?: "Unknown" }) - copyright.set( - project.provider { - app.distributions.copyright ?: "Copyright (C) ${Calendar.getInstance().get(Calendar.YEAR)}" - }, - ) - if (binary.outputKind == NativeOutputKind.EXECUTABLE) { - val binaryResources = - (binary.compilation.associatedCompilations + binary.compilation).flatMap { compilation -> - compilation.allKotlinSourceSets.map { it.resources } - } - composeResourcesDirs.setFrom(binaryResources) - } - macLayeredIcons.set(app.distributions.macOS.layeredIconDir) - } - - if (TargetFormat.Dmg in app.distributions.targetFormats) { - val packageDmg = - project.tasks.composeDesktopNativeTask( - desktopNativeTaskName("packageDmgNative", binary), - ) { - configureNativePackageTask(app, binary, TargetFormat.Dmg) - - dependsOn(createDistributable) - appDir.set(createDistributable.flatMap { it.destinationDir }) - - installDir.set( - project.provider { - app.distributions.macOS.installationPath ?: "/Applications" - }, - ) - - val dmgDsl = app.distributions.macOS.dmg - dmgDsl.format?.let { dmgFormat.set(it) } - dmgDsl.iconSize?.let { dmgIconSize.set(it) } - dmgDsl.window.x?.let { dmgWindowX.set(it) } - dmgDsl.window.y?.let { dmgWindowY.set(it) } - dmgDsl.window.width?.let { dmgWindowWidth.set(it) } - dmgDsl.window.height?.let { dmgWindowHeight.set(it) } - dmgDsl.title?.let { dmgTitle.set(it) } - dmgDsl.backgroundColor?.let { dmgBackgroundColor.set(it) } - if (dmgDsl.background.isPresent) { - dmgBackgroundImage.set(dmgDsl.background) - } - if (dmgDsl.contents.isNotEmpty()) { - dmgContents.set(dmgDsl.contents.toList()) - } - } - } -} - -private fun AbstractNativeMacApplicationPackageTask.configureNativePackageTask( - app: NativeApplication, - binary: NativeBinary, - format: TargetFormat, -) { - packageName.set( - project.provider { - app.distributions.macOS.packageName - ?: app.distributions.packageName - ?: project.name - }, - ) - - // todo: dmg package version - packageVersion.set( - project.provider { - app.distributions.macOS.packageVersion - ?: app.distributions.packageVersion - ?: project.version.toString().takeIf { it != "unspecified" } - ?: "1.0.0" - }, - ) - - destinationDir.set( - app.distributions.outputBaseDir.dir( - "${app.name}/native-${binary.target.name}-${binary.buildType.name.lowercase()}-${format.id}", - ), - ) -} - -private fun desktopNativeTaskName( - action: String, - binary: NativeBinary, -): String = joinLowerCamelCase(action, binary.buildType.name.lowercase(), binary.target.name) - -private inline fun TaskContainer.composeDesktopNativeTask( - name: String, - args: List = emptyList(), - noinline configureFn: T.() -> Unit = {}, -) = register(name, T::class.java, *args.toTypedArray()).apply { - configure { - it.group = "nucleus (native)" - it.configureFn() - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt deleted file mode 100644 index 659af7052..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/dirLayoutUtils.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.internal.utils.dir -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.file.Directory -import org.gradle.api.file.ProjectLayout -import org.gradle.api.provider.Provider - -internal val Project.jvmDirs: JvmDirectoriesProvider - get() = JvmDirectoriesProvider(project.layout) - -internal fun Task.jvmTmpDirForTask(): Provider = project.jvmDirs.tmpDir(name) - -internal class JvmDirectoriesProvider( - private val layout: ProjectLayout, -) { - val composeDir: Provider - get() = layout.buildDirectory.dir("compose") - - fun tmpDir(name: String): Provider = composeDir.dir("tmp/$name") -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt deleted file mode 100644 index 2ee0ab3bf..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt +++ /dev/null @@ -1,717 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder - -import dev.nucleusframework.nucleus.desktop.application.dsl.AppXSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.DmgSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation -import dev.nucleusframework.nucleus.desktop.application.dsl.FlatpakSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmMacOSPlatformSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.NsisSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.PublishSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.SnapSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import java.io.File - -/** - * Generates an electron-builder YAML configuration from the Gradle DSL settings. - * - * Maps Nucleus DSL properties to the electron-builder configuration schema, - * producing a `electron-builder.yml` file consumed by `electron-builder --prepackaged`. - * - */ -@Suppress("TooManyFunctions", "LargeClass") -internal class ElectronBuilderConfigGenerator { - /** - * Generates the electron-builder config YAML content. - * - * @param distributions The JVM application distribution settings from the DSL. - * @param targetFormat The specific target format being built. - * @param appImageDir The prepackaged app-image directory from jpackage. - * @return The YAML configuration content as a string. - */ - @Suppress("LongParameterList") - fun generateConfig( - distributions: JvmApplicationDistributions, - targetFormat: TargetFormat, - @Suppress("unused") appImageDir: File, - targetArch: Arch, - startupWMClass: String? = null, - linuxIconOverride: File? = null, - windowsIconOverride: File? = null, - linuxAfterInstallTemplate: File? = null, - executableName: String? = null, - dmgBackgroundOverride: File? = null, - dmgWindowOverride: DmgWindowOverride? = null, - ): String { - val yaml = StringBuilder() - - // --- Common settings --- - val resolvedProductName = - distributions.appName ?: distributions.packageName ?: executableName - ?: error( - "No appName, packageName, or executableName available for electron-builder config", - ) - yaml.appendLine("productName: \"${resolvedProductName.escapeForYamlDoubleQuotes()}\"") - - // On macOS, appId must match the CFBundleIdentifier from the app's Info.plist, - // otherwise productbuild will fail to find the component package during PKG creation. - val appId = - if (currentOS == OS.MacOS) { - distributions.macOS.bundleID?.takeIf { it.isNotBlank() } - ?: distributions.packageName?.let { "com.app.$it" } - } else { - distributions.packageName?.let { "com.app.$it" } - } - appendIfNotNull(yaml, "appId", appId) - appendIfNotNull(yaml, "copyright", distributions.copyright) - - if (distributions.homepage != null) { - yaml.appendLine("extraMetadata:") - yaml.appendLine(" homepage: ${distributions.homepage}") - } - - yaml.appendLine("directories:") - yaml.appendLine(" output: .") - - appendIfNotNull(yaml, "compression", distributions.compressionLevel?.id) - yaml.appendLine("artifactName: ${withTargetSuffix(distributions.artifactName, targetFormat)}") - generateFileAssociations(yaml, distributions, targetFormat) - - // Use per-platform winCodeSign archives on Windows to avoid extraction failures - // caused by macOS symlinks in the legacy combo archive (electron-builder#8149). - if (currentOS == OS.Windows) { - yaml.appendLine("toolsets:") - yaml.appendLine(" winCodeSign: \"1.0.0\"") - } - - // --- Platform-specific config --- - when (currentOS) { - OS.MacOS -> - generateMacConfig(yaml, distributions, targetFormat, targetArch, dmgBackgroundOverride, dmgWindowOverride) - OS.Windows -> - generateWindowsConfig( - yaml, - distributions, - targetFormat, - targetArch, - windowsIconOverride, - executableName, - ) - OS.Linux -> - generateLinuxConfig( - yaml = yaml, - distributions = distributions, - targetFormat = targetFormat, - targetArch = targetArch, - startupWMClass = startupWMClass, - linuxIconOverride = linuxIconOverride, - linuxAfterInstallTemplate = linuxAfterInstallTemplate, - executableName = executableName, - ) - } - - // --- Protocols --- - if (distributions.protocols.isNotEmpty()) { - yaml.appendLine("protocols:") - for (protocol in distributions.protocols) { - yaml.appendLine(" - name: \"${protocol.name}\"") - yaml.appendLine(" schemes:") - for (scheme in protocol.schemes) { - yaml.appendLine(" - \"$scheme\"") - } - } - } - - // --- Publishing --- - generatePublishConfig(yaml, distributions.publish) - - return yaml.toString() - } - - private fun generateMacConfig( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - targetFormat: TargetFormat, - targetArch: Arch, - dmgBackgroundOverride: File? = null, - windowOverride: DmgWindowOverride? = null, - ) { - yaml.appendLine("mac:") - yaml.appendLine(" target:") - yaml.appendLine(" - target: ${targetFormat.id}") - yaml.appendLine(" arch: ${targetArch.id}") - appendIfNotNull(yaml, " category", distributions.macOS.appCategory) - appendIfNotNull( - yaml, - " icon", - distributions.macOS.iconFile.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull(yaml, " minimumSystemVersion", distributions.macOS.minimumSystemVersion) - - // When not signing, disable signature-related features - if (distributions.macOS.signing.sign.orNull != true) { - yaml.appendLine(" identity: null") - yaml.appendLine(" hardenedRuntime: false") - yaml.appendLine(" gatekeeperAssess: false") - } - - when (targetFormat) { - TargetFormat.Dmg -> generateDmgConfig(yaml, distributions.macOS.dmg, dmgBackgroundOverride, windowOverride) - TargetFormat.Pkg -> { - yaml.appendLine("pkg:") - appendIfNotNull(yaml, " installLocation", distributions.macOS.installationPath) - yaml.appendLine(" isRelocatable: false") - if (distributions.macOS.signing.sign.orNull != true) { - yaml.appendLine(" identity: null") - } else { - val installerIdentity = resolveInstallerIdentity(distributions.macOS) - if (installerIdentity != null) { - yaml.appendLine(" identity: \"$installerIdentity\"") - } - } - } - else -> {} - } - } - - private fun generateDmgConfig( - yaml: StringBuilder, - dmg: DmgSettings, - dmgBackgroundOverride: File? = null, - windowOverride: DmgWindowOverride? = null, - ) { - yaml.appendLine("dmg:") - yaml.appendLine(" sign: ${dmg.sign}") - val backgroundPath = - dmgBackgroundOverride?.absolutePath - ?: dmg.background.orNull - ?.asFile - ?.absolutePath - appendIfNotNull(yaml, " background", backgroundPath) - appendIfNotNull(yaml, " backgroundColor", dmg.backgroundColor) - appendIfNotNull( - yaml, - " badgeIcon", - dmg.badgeIcon.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - " icon", - dmg.icon.orNull - ?.asFile - ?.absolutePath, - ) - dmg.iconSize?.let { yaml.appendLine(" iconSize: $it") } - dmg.iconTextSize?.let { yaml.appendLine(" iconTextSize: $it") } - appendIfNotNull(yaml, " title", dmg.title) - dmg.format?.let { yaml.appendLine(" format: ${it.id}") } - appendIfNotNull(yaml, " size", dmg.size) - dmg.shrink?.let { yaml.appendLine(" shrink: $it") } - - val w = dmg.window - val hasWindowConfig = w.x != null || w.y != null || w.width != null || w.height != null || windowOverride != null - if (hasWindowConfig) { - yaml.appendLine(" window:") - w.x?.let { yaml.appendLine(" x: $it") } - w.y?.let { yaml.appendLine(" y: $it") } - val overrideWidth = windowOverride?.width ?: w.width - val overrideHeight = windowOverride?.height ?: w.height - overrideWidth?.let { yaml.appendLine(" width: $it") } - overrideHeight?.let { yaml.appendLine(" height: $it") } - } - - if (dmg.contents.isNotEmpty()) { - yaml.appendLine(" contents:") - for (entry in dmg.contents) { - yaml.appendLine(" - x: ${entry.x}") - yaml.appendLine(" y: ${entry.y}") - entry.type?.let { yaml.appendLine(" type: ${it.id}") } - entry.name?.let { appendIfNotNull(yaml, " name", it) } - entry.path?.let { appendIfNotNull(yaml, " path", it) } - } - } - } - - data class DmgWindowOverride( - val width: Int, - val height: Int, - ) - - private fun generateWindowsConfig( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - targetFormat: TargetFormat, - targetArch: Arch, - windowsIconOverride: File?, - executableName: String?, - ) { - yaml.appendLine("win:") - yaml.appendLine(" target:") - yaml.appendLine(" - target: ${targetFormat.electronBuilderTarget}") - yaml.appendLine(" arch: ${targetArch.id}") - appendIfNotNull(yaml, " executableName", executableName) - val windowsIcon = - distributions.windows.iconFile.orNull - ?.asFile ?: windowsIconOverride - appendIfNotNull( - yaml, - " icon", - windowsIcon?.absolutePath, - ) - - generateWindowsSigningConfig(yaml, distributions) - - when (targetFormat) { - TargetFormat.Nsis, TargetFormat.Exe -> { - yaml.appendLine("nsis:") - generateNsisSettings(yaml, distributions.windows.nsis, " ") - } - TargetFormat.NsisWeb -> { - yaml.appendLine("nsisWeb:") - generateNsisSettings(yaml, distributions.windows.nsis, " ") - } - TargetFormat.Msi -> { - yaml.appendLine("msi:") - appendIfNotNull(yaml, " upgradeCode", distributions.windows.upgradeUuid) - yaml.appendLine(" perMachine: ${!distributions.windows.perUserInstall}") - } - TargetFormat.AppX -> generateAppXConfig(yaml, distributions.windows.appx) - TargetFormat.Portable -> yaml.appendLine("portable: {}") - else -> {} - } - } - - private fun generateWindowsSigningConfig( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - ) { - val signing = distributions.windows.signing - if (!signing.enabled) return - - yaml.appendLine(" signtoolOptions:") - appendIfNotNull( - yaml, - " certificateFile", - signing.certificateFile.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull(yaml, " certificatePassword", signing.certificatePassword) - appendIfNotNull(yaml, " certificateSha1", signing.certificateSha1) - appendIfNotNull(yaml, " certificateSubjectName", signing.certificateSubjectName) - appendIfNotNull(yaml, " rfc3161TimeStampServer", signing.timestampServer) - yaml.appendLine(" signingHashAlgorithms:") - yaml.appendLine(" - ${signing.algorithm.id}") - - if (signing.azureTenantId != null) { - yaml.appendLine(" azureSignOptions:") - appendIfNotNull(yaml, " publisherName", signing.publisherName ?: distributions.vendor) - appendIfNotNull(yaml, " endpoint", signing.azureEndpoint) - appendIfNotNull(yaml, " certificateProfileName", signing.azureCertificateProfileName) - appendIfNotNull(yaml, " codeSigningAccountName", signing.azureCodeSigningAccountName) - } - } - - private fun generateFileAssociations( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - targetFormat: TargetFormat, - ) { - val associations = - when (targetFormat) { - TargetFormat.Exe, - TargetFormat.Nsis, - TargetFormat.NsisWeb, - TargetFormat.Msi, - -> distributions.windows.fileAssociations - TargetFormat.Dmg, - TargetFormat.Pkg, - -> distributions.macOS.fileAssociations - else -> emptySet() - } - if (associations.isEmpty()) return - - yaml.appendLine("fileAssociations:") - for (association in associations) { - appendFileAssociation(yaml, association) - } - } - - private fun appendFileAssociation( - yaml: StringBuilder, - association: FileAssociation, - ) { - val normalizedExtension = association.extension.trim().removePrefix(".") - if (normalizedExtension.isBlank()) return - - yaml.appendLine(" - ext: \"$normalizedExtension\"") - appendIfNotNull(yaml, " name", association.description) - appendIfNotNull(yaml, " description", association.description) - appendIfNotNull(yaml, " icon", association.iconFile?.absolutePath) - } - - private fun withTargetSuffix( - artifactName: String, - targetFormat: TargetFormat, - ): String { - val template = artifactName - // Only add a format suffix for formats whose id differs from the file extension, - // to disambiguate formats sharing .exe (nsis, nsis-web, portable) - val needsSuffix = targetFormat in setOf(TargetFormat.Nsis, TargetFormat.NsisWeb, TargetFormat.Portable) - if (!needsSuffix) return template - val marker = ".\${ext}" - val suffix = "-${targetFormat.id}" - return if (template.contains(marker)) { - template.replace(marker, "$suffix$marker") - } else { - "$template$suffix" - } - } - - private fun generateNsisSettings( - yaml: StringBuilder, - nsis: NsisSettings, - indent: String, - ) { - yaml.appendLine("${indent}oneClick: ${nsis.oneClick}") - yaml.appendLine("${indent}allowElevation: ${nsis.allowElevation}") - yaml.appendLine("${indent}perMachine: ${nsis.perMachine}") - yaml.appendLine("${indent}allowToChangeInstallationDirectory: ${nsis.allowToChangeInstallationDirectory}") - yaml.appendLine("${indent}createDesktopShortcut: ${nsis.createDesktopShortcut}") - yaml.appendLine("${indent}createStartMenuShortcut: ${nsis.createStartMenuShortcut}") - yaml.appendLine("${indent}runAfterFinish: ${nsis.runAfterFinish}") - yaml.appendLine("${indent}deleteAppDataOnUninstall: ${nsis.deleteAppDataOnUninstall}") - yaml.appendLine("${indent}warningsAsErrors: false") - - appendNsisFileSettings(yaml, nsis, indent) - - if (nsis.multiLanguageInstaller) { - yaml.appendLine("${indent}multiLanguageInstaller: true") - } - if (nsis.installerLanguages.isNotEmpty()) { - yaml.appendLine("${indent}installerLanguages:") - for (lang in nsis.installerLanguages) { - yaml.appendLine("$indent - \"$lang\"") - } - } - } - - private fun appendNsisFileSettings( - yaml: StringBuilder, - nsis: NsisSettings, - indent: String, - ) { - appendIfNotNull( - yaml, - "${indent}installerIcon", - nsis.installerIcon.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}uninstallerIcon", - nsis.uninstallerIcon.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}license", - nsis.license.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}include", - nsis.includeScript.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}script", - nsis.script.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}installerHeader", - nsis.installerHeader.orNull - ?.asFile - ?.absolutePath, - ) - appendIfNotNull( - yaml, - "${indent}installerSidebar", - nsis.installerSidebar.orNull - ?.asFile - ?.absolutePath, - ) - } - - private fun generateAppXConfig( - yaml: StringBuilder, - appx: AppXSettings, - ) { - yaml.appendLine("appx:") - appendIfNotNull(yaml, " applicationId", appx.applicationId) - appendIfNotNull(yaml, " displayName", appx.displayName) - appendIfNotNull(yaml, " identityName", appx.identityName) - appendIfNotNull(yaml, " publisher", appx.publisher) - appendIfNotNull(yaml, " publisherDisplayName", appx.publisherDisplayName) - appx.languages?.let { languages -> - yaml.appendLine(" languages:") - for (lang in languages) { - yaml.appendLine(" - \"$lang\"") - } - } - if (appx.addAutoLaunchExtension) { - yaml.appendLine(" addAutoLaunchExtension: true") - } - appendIfNotNull(yaml, " backgroundColor", appx.backgroundColor) - if (appx.showNameOnTiles) { - yaml.appendLine(" showNameOnTiles: true") - } - if (appx.setBuildNumber) { - yaml.appendLine(" setBuildNumber: true") - } - appendIfNotNull(yaml, " minVersion", appx.minVersion) - appendIfNotNull(yaml, " maxVersionTested", appx.maxVersionTested) - appx.capabilities?.takeIf { it.isNotEmpty() }?.let { caps -> - yaml.appendLine(" capabilities:") - for (cap in caps) { - yaml.appendLine(" - \"$cap\"") - } - } - } - - private fun generateLinuxConfig( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - targetFormat: TargetFormat, - targetArch: Arch, - startupWMClass: String?, - linuxIconOverride: File?, - linuxAfterInstallTemplate: File?, - executableName: String?, - ) { - yaml.appendLine("linux:") - yaml.appendLine(" target:") - yaml.appendLine(" - target: ${targetFormat.electronBuilderTarget}") - yaml.appendLine(" arch: ${targetArch.id}") - appendIfNotNull(yaml, " executableName", executableName) - val linuxIcon = - linuxIconOverride ?: distributions.linux.iconFile.orNull - ?.asFile - appendIfNotNull( - yaml, - " icon", - linuxIcon?.absolutePath, - ) - appendIfNotNull(yaml, " category", distributions.linux.appCategory) - appendIfNotNull(yaml, " maintainer", distributions.linux.debMaintainer) - appendIfNotNull(yaml, " vendor", distributions.vendor) - appendIfNotNull(yaml, " description", distributions.description) - appendLinuxDesktopEntryConfig(yaml, distributions, startupWMClass) - - when (targetFormat) { - TargetFormat.Deb -> { - yaml.appendLine("deb:") - if (distributions.linux.debDepends.isNotEmpty()) { - yaml.appendLine(" depends:") - for (dep in distributions.linux.debDepends) { - yaml.appendLine(" - \"$dep\"") - } - } - appendIfNotNull(yaml, " afterInstall", linuxAfterInstallTemplate?.absolutePath) - } - TargetFormat.Rpm -> { - yaml.appendLine("rpm:") - if (distributions.linux.rpmRequires.isNotEmpty()) { - yaml.appendLine(" depends:") - for (dep in distributions.linux.rpmRequires) { - yaml.appendLine(" - \"$dep\"") - } - } - appendIfNotNull(yaml, " afterInstall", linuxAfterInstallTemplate?.absolutePath) - } - TargetFormat.Snap -> generateSnapConfig(yaml, distributions.linux.snap) - TargetFormat.Flatpak -> generateFlatpakConfig(yaml, distributions.linux.flatpak) - else -> {} - } - } - - private fun appendLinuxDesktopEntryConfig( - yaml: StringBuilder, - distributions: JvmApplicationDistributions, - startupWMClass: String?, - ) { - val entryOverrides = linkedMapOf() - entryOverrides.putAll(distributions.linux.appImage.desktopEntries) - val hasStartupWMClassOverride = - entryOverrides.keys.any { it.equals("StartupWMClass", ignoreCase = true) } - if (!hasStartupWMClassOverride) { - startupWMClass?.takeIf { it.isNotBlank() }?.let { - entryOverrides["StartupWMClass"] = it - } - } - - // Auto-inject MimeType from file associations and protocols, - // mirroring electron-builder's LinuxTargetHelper.computeDesktopEntry behavior. - val hasMimeTypeOverride = - entryOverrides.keys.any { it.equals("MimeType", ignoreCase = true) } - if (!hasMimeTypeOverride) { - val mimeTypes = - buildList { - for (association in distributions.linux.fileAssociations) { - association.mimeType.takeIf { it.isNotBlank() }?.let { add(it) } - } - for (protocol in distributions.protocols) { - for (scheme in protocol.schemes) { - add("x-scheme-handler/$scheme") - } - } - } - if (mimeTypes.isNotEmpty()) { - entryOverrides["MimeType"] = mimeTypes.joinToString(";", postfix = ";") - } - } - - if (entryOverrides.isEmpty()) return - - yaml.appendLine(" desktop:") - yaml.appendLine(" entry:") - for ((key, value) in entryOverrides) { - yaml.appendLine(" \"${key.escapeForYamlDoubleQuotes()}\": \"${value.escapeForYamlDoubleQuotes()}\"") - } - } - - private fun generateSnapConfig( - yaml: StringBuilder, - snap: SnapSettings, - ) { - yaml.appendLine("snap:") - yaml.appendLine(" confinement: ${snap.confinement.id}") - yaml.appendLine(" grade: ${snap.grade.id}") - appendIfNotNull(yaml, " summary", snap.summary) - appendIfNotNull(yaml, " base", snap.base) - if (snap.autoStart) { - yaml.appendLine(" autoStart: true") - } - appendIfNotNull(yaml, " compression", snap.compression?.id) - if (snap.plugs.isNotEmpty()) { - yaml.appendLine(" plugs:") - for (plug in snap.plugs) { - yaml.appendLine(" - \"${plug.id}\"") - } - } - } - - private fun generateFlatpakConfig( - yaml: StringBuilder, - flatpak: FlatpakSettings, - ) { - yaml.appendLine("flatpak:") - yaml.appendLine(" runtime: ${flatpak.runtime}") - yaml.appendLine(" runtimeVersion: \"${flatpak.runtimeVersion}\"") - yaml.appendLine(" sdk: ${flatpak.sdk}") - yaml.appendLine(" branch: ${flatpak.branch}") - appendIfNotNull( - yaml, - " license", - flatpak.license.orNull - ?.asFile - ?.absolutePath, - ) - if (flatpak.finishArgs.isNotEmpty()) { - yaml.appendLine(" finishArgs:") - for (arg in flatpak.finishArgs) { - yaml.appendLine(" - \"$arg\"") - } - } - } - - private fun generatePublishConfig( - yaml: StringBuilder, - publish: PublishSettings, - ) { - val github = publish.github - val s3 = publish.s3 - val generic = publish.generic - - if (!github.enabled && !s3.enabled && !generic.enabled) { - // Explicitly disable publish to prevent electron-builder from auto-detecting - // a publish provider via GH_TOKEN/GITHUB_TOKEN env vars and .git/config, - // which causes a crash in computeChannelNames when resolution fails. - yaml.appendLine("publish: null") - return - } - - yaml.appendLine("publish:") - if (github.enabled) { - yaml.appendLine(" - provider: github") - appendIfNotNull(yaml, " owner", github.owner) - appendIfNotNull(yaml, " repo", github.repo) - appendIfNotNull(yaml, " token", github.token) - yaml.appendLine(" channel: ${github.channel.id}") - yaml.appendLine(" releaseType: ${github.releaseType.id}") - } - if (s3.enabled) { - yaml.appendLine(" - provider: s3") - appendIfNotNull(yaml, " bucket", s3.bucket) - appendIfNotNull(yaml, " region", s3.region) - appendIfNotNull(yaml, " path", s3.path) - appendIfNotNull(yaml, " acl", s3.acl) - } - if (generic.enabled) { - yaml.appendLine(" - provider: generic") - appendIfNotNull(yaml, " url", generic.url) - yaml.appendLine(" channel: ${generic.channel.id}") - yaml.appendLine(" useMultipleRangeRequest: ${generic.useMultipleRangeRequest}") - } - } - - /** - * Resolves the PKG installer signing identity. - * - * PKG is always treated as an App Store format, so signing is handled post-build - * via `productsign` with the "3rd Party Mac Developer Installer" certificate. - * This always returns `null` because electron-builder's `pkg.ts` hardcodes - * `certType = "Developer ID Installer"`, making it impossible to match a - * "3rd Party Mac Developer Installer" certificate at build time. - */ - @Suppress("UnusedParameter", "FunctionOnlyReturningConstant") - private fun resolveInstallerIdentity(macOS: JvmMacOSPlatformSettings): String? = null - - private fun appendIfNotNull( - yaml: StringBuilder, - key: String, - value: String?, - ) { - if (value != null) { - yaml.appendLine("$key: \"${value.escapeForYamlDoubleQuotes()}\"") - } - } - - private fun String.escapeForYamlDoubleQuotes(): String = - replace("\\", "\\\\") - .replace("\"", "\\\"") - .replace("\n", "\\n") - .replace("\r", "\\r") - .replace("\t", "\\t") -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt deleted file mode 100644 index 445d8a06f..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderToolManager.kt +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder - -import org.gradle.api.logging.Logger -import org.gradle.process.ExecOperations -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.IOException - -/** - * Parameters for invoking electron-builder. - */ -internal data class ElectronBuilderInvocation( - val configFile: File, - val prepackagedDir: File, - val outputDir: File, - val targets: List, - val extraConfigArgs: List = emptyList(), - val npx: File, - val environment: Map = emptyMap(), - val publishFlag: String = "never", -) - -/** - * Manages electron-builder installation and invocation. - * - * electron-builder is invoked via npx to avoid global installation requirements. - * It uses the `--prepackaged` flag to package a pre-built app directory (from jpackage). - */ -internal class ElectronBuilderToolManager( - private val execOperations: ExecOperations, - private val logger: Logger, -) { - companion object { - private const val ELECTRON_BUILDER_PACKAGE = "electron-builder" - private const val PREPACKAGED_ELECTRON_VERSION = "33.0.0" - } - - /** - * Invokes electron-builder with the given invocation parameters. - * - * @param invocation The parameters for the electron-builder invocation. - */ - fun invoke(invocation: ElectronBuilderInvocation) { - require(invocation.configFile.exists()) { - "electron-builder config not found: ${invocation.configFile.absolutePath}" - } - require(invocation.prepackagedDir.exists()) { - "Prepackaged app directory not found: ${invocation.prepackagedDir.absolutePath}" - } - - invocation.outputDir.mkdirs() - - val args = - buildList { - add("--yes") - add(ELECTRON_BUILDER_PACKAGE) - add("--prepackaged") - add(invocation.prepackagedDir.absolutePath) - add("--config") - add(invocation.configFile.absolutePath) - add("--config.electronVersion=$PREPACKAGED_ELECTRON_VERSION") - addAll(invocation.extraConfigArgs) - add("--publish") - add(invocation.publishFlag) - addAll(invocation.targets) - add("--project") - add(invocation.outputDir.absolutePath) - } - - logger.info("Running electron-builder: ${invocation.npx.absolutePath} ${args.joinToString(" ")}") - - invokeWithRetry(invocation, args, maxAttempts = 3) - } - - /** - * Executes electron-builder, retrying on npm ECOMPROMISED errors. - * npm 11+ on Windows ARM64 intermittently fails with "Lock compromised" - * due to internal cache integrity race conditions. Cleaning the npm cache - * and retrying resolves the issue. - */ - private fun invokeWithRetry( - invocation: ElectronBuilderInvocation, - args: List, - maxAttempts: Int, - ) { - for (attempt in 1..maxAttempts) { - val stdout = ByteArrayOutputStream() - val stderr = ByteArrayOutputStream() - - val result = - execOperations.exec { spec -> - spec.executable = invocation.npx.absolutePath - spec.args = args - spec.environment(invocation.environment) - spec.workingDir = invocation.outputDir - spec.isIgnoreExitValue = true - spec.standardOutput = stdout - spec.errorOutput = stderr - } - - val stdoutStr = stdout.toString() - val stderrStr = stderr.toString() - - if (stdoutStr.isNotBlank()) { - logger.info(stdoutStr) - } - - if (result.exitValue == 0) return - - val isCompromised = stderrStr.contains("ECOMPROMISED") - if (isCompromised && attempt < maxAttempts) { - logger.lifecycle( - "npm ECOMPROMISED error on attempt $attempt/$maxAttempts, " + - "cleaning npm cache and retrying...", - ) - cleanNpmCache(invocation) - continue - } - - val errMsg = - buildString { - appendLine("electron-builder failed with exit code ${result.exitValue}") - appendLine("Command: ${invocation.npx.absolutePath} ${args.joinToString(" ")}") - if (stderrStr.isNotBlank()) { - appendLine("Stderr:") - appendLine(stderrStr) - } - if (stdoutStr.isNotBlank()) { - appendLine("Stdout:") - appendLine(stdoutStr) - } - } - error(errMsg) - } - } - - private fun cleanNpmCache(invocation: ElectronBuilderInvocation) { - val cacheDir = invocation.environment["NPM_CONFIG_CACHE"] ?: return - val dir = File(cacheDir) - if (dir.isDirectory) { - dir.deleteRecursively() - dir.mkdirs() - } - } - - /** - * Checks if electron-builder is available via npx. - */ - fun isAvailable(npx: File): Boolean = - try { - val result = - execOperations.exec { spec -> - spec.executable = npx.absolutePath - spec.args = listOf("--yes", ELECTRON_BUILDER_PACKAGE, "--version") - spec.isIgnoreExitValue = true - spec.standardOutput = ByteArrayOutputStream() - spec.errorOutput = ByteArrayOutputStream() - } - result.exitValue == 0 - } catch (e: IOException) { - logger.warn("Failed to check electron-builder availability: ${e.message}") - false - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt deleted file mode 100644 index 86b73dc9a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/electronbuilder/NodeJsDetector.kt +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder - -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import org.gradle.api.logging.Logger -import java.io.File -import java.io.IOException - -internal object NodeJsDetector { - private const val MIN_NODE_MAJOR_VERSION = 18 - - /** - * Locates the Node.js executable on the system. - * - * @param customNodePath Optional override path provided by the user via Gradle property. - * @param logger Gradle logger for warnings/info. - * @return The File pointing to the node executable, or null if not found. - */ - fun detectNode( - customNodePath: String? = null, - logger: Logger? = null, - ): File? { - if (customNodePath != null) { - val custom = File(customNodePath) - if (custom.exists() && custom.canExecute()) { - logger?.info("Using custom Node.js path: ${custom.absolutePath}") - return custom - } - logger?.warn("Custom Node.js path not found or not executable: $customNodePath") - } - - val nodeName = if (currentOS == OS.Windows) "node.exe" else "node" - return findInPath(nodeName, logger) - } - - /** - * Locates npx on the system. - * - * @param customNodePath Optional override directory containing npx. - * @param logger Gradle logger. - * @return The File pointing to the npx executable, or null if not found. - */ - fun detectNpx( - customNodePath: String? = null, - logger: Logger? = null, - ): File? { - if (customNodePath != null) { - val npxName = if (currentOS == OS.Windows) "npx.cmd" else "npx" - val dir = File(customNodePath) - val parent = if (dir.isFile) dir.parentFile else dir - val npx = parent.resolve(npxName) - if (npx.exists() && npx.canExecute()) { - return npx - } - } - - val npxName = if (currentOS == OS.Windows) "npx.cmd" else "npx" - return findInPath(npxName, logger) - } - - /** - * Checks the installed Node.js version. - * - * @return The version string (e.g., "v18.17.0") or null if node is not found. - */ - fun getNodeVersion(node: File): String? = - try { - val process = - ProcessBuilder(node.absolutePath, "--version") - .redirectErrorStream(true) - .start() - val version = - process.inputStream - .bufferedReader() - .readText() - .trim() - process.waitFor() - if (process.exitValue() == 0) version else null - } catch ( - @Suppress("SwallowedException") e: IOException, - ) { - null - } - - /** - * Validates that Node.js version is 18+. - */ - fun isNodeVersionSupported(versionString: String): Boolean { - val version = versionString.removePrefix("v") - val major = version.split(".").firstOrNull()?.toIntOrNull() ?: return false - return major >= MIN_NODE_MAJOR_VERSION - } - - private fun findInPath( - executableName: String, - logger: Logger? = null, - ): File? { - val pathEnv = System.getenv("PATH") ?: return null - val separator = if (currentOS == OS.Windows) ";" else ":" - val result = - pathEnv.split(separator).firstNotNullOfOrNull { dir -> - File(dir, executableName).takeIf { it.exists() && it.canExecute() } - } - if (result != null) { - logger?.info("Found $executableName at: ${result.absolutePath}") - } else { - logger?.warn("$executableName not found in PATH") - } - return result - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt deleted file mode 100644 index 52ee8034a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/FileCopyingProcessor.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.files - -import java.io.File - -internal interface FileCopyingProcessor { - fun copy( - source: File, - target: File, - ) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt deleted file mode 100644 index 06be7887a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/MacJarSignFileCopyingProcessor.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.files - -import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner -import java.io.File -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -internal class MacJarSignFileCopyingProcessor( - private val signer: MacSigner, - private val tempDir: File, - private val jvmRuntimeVersion: Int, -) : FileCopyingProcessor { - override fun copy( - source: File, - target: File, - ) { - if (source.isJarFile) { - signNativeLibsInJar(source, target) - } else { - SimpleFileCopyingProcessor.copy(source, target) - if (source.name.isDylibPath) { - when { - jvmRuntimeVersion < 17 -> signer.sign(target) - /** - * JDK 17 started to sign non-jar dylibs, - * but it fails, when libs are already signed, - * so we need to remove signature before running jpackage. - * - * JDK 18 processes signed libraries fine, so we don't have to do anything. - * - * Note that the JDK only signs dylib files and not jnilib files, - * so jnilib files still need to be signed here. - */ - jvmRuntimeVersion == 17 -> { - if (source.name.endsWith(".jnilib")) { - signer.sign(target) - } else { - signer.unsign(target) - } - } - else -> { - if (source.name.endsWith(".jnilib")) { - signer.sign(target) - } - } - } - } - } - } - - private fun signNativeLibsInJar( - source: File, - target: File, - ) { - if (target.exists()) target.delete() - - transformJar(source, target) { entry, zin, zout -> - if (entry.name.isDylibPath) { - signDylibEntry(entry, zin, zout) - } else { - copyZipEntry(entry, zin, zout) - } - } - } - - private fun signDylibEntry( - sourceEntry: ZipEntry, - zin: ZipInputStream, - zout: ZipOutputStream, - ) { - val unpackedDylibFile = tempDir.resolve(sourceEntry.name.substringAfterLast("/")) - try { - zin.copyTo(unpackedDylibFile) - signer.sign(unpackedDylibFile) - unpackedDylibFile.inputStream().buffered().use { - copyZipEntry(sourceEntry, from = it, to = zout) - } - } finally { - unpackedDylibFile.delete() - } - } -} - -internal val String.isDylibPath - get() = endsWith(".dylib") || endsWith(".jnilib") diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt deleted file mode 100644 index 552744ebf..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/SimpleFileCopyingProcessor.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.files - -import java.io.File - -object SimpleFileCopyingProcessor : FileCopyingProcessor { - override fun copy( - source: File, - target: File, - ) { - source.copyTo(target, overwrite = true) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt deleted file mode 100644 index 78a2be973..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/files/fileUtils.kt +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.files - -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import org.gradle.api.tasks.Internal -import java.io.* -import java.security.DigestInputStream -import java.security.MessageDigest -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -internal fun File.mangledName(): String = - buildString { - append(nameWithoutExtension) - append("-") - append(contentHash()) - val ext = extension - if (ext.isNotBlank()) { - append(".$ext") - } - } - -internal fun File.contentHash(): String { - val md5 = MessageDigest.getInstance("MD5") - if (isDirectory) { - walk() - .filter { it.isFile } - .sortedBy { it.relativeTo(this).path } - .forEach { md5.digestContent(it) } - } else { - md5.digestContent(this) - } - val digest = md5.digest() - return buildString(digest.size * 2) { - for (byte in digest) { - append(Integer.toHexString(0xFF and byte.toInt())) - } - } -} - -private fun MessageDigest.digestContent(file: File) { - file.inputStream().buffered().use { fis -> - DigestInputStream(fis, this).use { ds -> - while (ds.read() != -1) {} - } - } -} - -internal inline fun transformJar( - sourceJar: File, - targetJar: File, - fn: (entry: ZipEntry, zin: ZipInputStream, zout: ZipOutputStream) -> Unit, -) { - ZipInputStream(FileInputStream(sourceJar).buffered()).use { zin -> - ZipOutputStream(FileOutputStream(targetJar).buffered()).use { zout -> - for (sourceEntry in generateSequence { zin.nextEntry }) { - fn(sourceEntry, zin, zout) - } - } - } -} - -internal fun copyZipEntry( - entry: ZipEntry, - from: InputStream, - to: ZipOutputStream, -) { - val newEntry = - ZipEntry(entry.name).apply { - comment = entry.comment - extra = entry.extra - } - to.withNewEntry(newEntry) { - from.copyTo(to) - } -} - -internal inline fun ZipOutputStream.withNewEntry( - zipEntry: ZipEntry, - fn: () -> Unit, -) { - putNextEntry(zipEntry) - fn() - closeEntry() -} - -internal fun InputStream.copyTo(file: File) { - file.outputStream().buffered().use { os -> - copyTo(os) - } -} - -@Internal -internal fun findOutputFileOrDir( - dir: File, - targetFormat: TargetFormat, -): File = - when (targetFormat) { - TargetFormat.RawAppImage -> dir - else -> dir.walk().first { it.isFile && it.name.endsWith(targetFormat.fileExt) } - } - -internal fun File.checkExistingFile(): File = - apply { - check(isFile) { "'$absolutePath' does not exist" } - } - -internal val File.isJarFile: Boolean - get() = name.endsWith(".jar", ignoreCase = true) && isFile - -internal fun File.normalizedPath(base: File? = null): String { - val path = base?.let { relativeToOrNull(it)?.path } ?: absolutePath - return when (currentOS) { - OS.Windows -> path.replace("\\", "\\\\") - else -> path - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt deleted file mode 100644 index d074def64..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/mergeNativeImageConfig.kt +++ /dev/null @@ -1,616 +0,0 @@ -@file:Suppress("ktlint:standard:filename") - -package dev.nucleusframework.nucleus.desktop.application.internal - -import groovy.json.JsonOutput -import groovy.json.JsonSlurper -import java.io.File - -/** - * Merges the agent-generated `reachability-metadata.json` into the existing one. - * - * Strategy: for each type entry, the **existing** entry is kept as the base and only - * new information from the agent is added (new types, new methods/fields on existing types). - * Manual enrichments like `allDeclaredFields: true` are never overwritten by the agent's - * narrower view. - */ -internal fun mergeReachabilityMetadata( - agentDir: File, - targetDir: File, -) { - val agentFile = File(agentDir, "reachability-metadata.json") - val targetFile = File(targetDir, "reachability-metadata.json") - - if (!agentFile.exists()) return - - val slurper = JsonSlurper() - - @Suppress("UNCHECKED_CAST") - val agentRoot = slurper.parseText(agentFile.readText()) as MutableMap - - @Suppress("UNCHECKED_CAST") - val targetRoot = - if (targetFile.exists()) { - slurper.parseText(targetFile.readText()) as MutableMap - } else { - mutableMapOf() - } - - // Merge type-based sections (reflection, jni) - for (sectionName in listOf("reflection", "jni")) { - @Suppress("UNCHECKED_CAST") - val agentArray = agentRoot[sectionName] as? List> ?: continue - - @Suppress("UNCHECKED_CAST") - val targetArray = - (targetRoot[sectionName] as? MutableList>) - ?: mutableListOf>().also { targetRoot[sectionName] = it } - - mergeTypeEntries(agentArray, targetArray) - } - - // For resources/bundles/serialization, just add new entries by JSON equality - for (sectionName in listOf("resources", "bundles", "serialization")) { - @Suppress("UNCHECKED_CAST") - val agentArray = agentRoot[sectionName] as? List> ?: continue - - @Suppress("UNCHECKED_CAST") - val targetArray = - (targetRoot[sectionName] as? MutableList>) - ?: mutableListOf>().also { targetRoot[sectionName] = it } - - mergeSimpleEntries(agentArray, targetArray) - } - - targetDir.mkdirs() - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetRoot)) + "\n") -} - -/** - * Merges type-based entries (reflection, jni sections). - * For each agent entry: - * - If the type doesn't exist in target -> add it - * - If it exists -> merge methods/fields (add new ones, keep existing) - * - Never remove or downgrade existing flags (allDeclaredFields, etc.) - */ -private fun mergeTypeEntries( - agentArray: List>, - targetArray: MutableList>, -) { - val targetIndex = linkedMapOf>() - for (entry in targetArray) { - val typeName = entry["type"] as? String ?: continue - @Suppress("UNCHECKED_CAST") - targetIndex[typeName] = entry - } - - for (agentEntry in agentArray) { - val typeName = agentEntry["type"] as? String ?: continue - val existingEntry = targetIndex[typeName] - - if (existingEntry == null) { - // New type -- add as-is - val mutableCopy = agentEntry.toMutableMap() - targetArray.add(mutableCopy) - targetIndex[typeName] = mutableCopy - } else { - // Merge into existing, preserving manual enrichments - mergeTypeEntry(agentEntry, existingEntry) - } - } -} - -/** - * Merges an agent-generated type entry into an existing one. - * Only adds new methods/fields; never removes or downgrades existing config. - */ -private fun mergeTypeEntry( - agentEntry: Map, - existingEntry: MutableMap, -) { - // Preserve broad flags -- only upgrade false->true, never downgrade - val broadFlags = - listOf( - "allDeclaredFields", - "allDeclaredMethods", - "allDeclaredConstructors", - "allPublicFields", - "allPublicMethods", - "allPublicConstructors", - "unsafeAllocated", - "jniAccessible", - ) - for (flag in broadFlags) { - if (agentEntry[flag] == true) { - existingEntry[flag] = true - } - // If existing already has it true, keep it - } - - // Merge array-based members (methods, fields, queriedMethods) - for (memberKey in listOf("methods", "fields", "queriedMethods")) { - @Suppress("UNCHECKED_CAST") - val agentMembers = agentEntry[memberKey] as? List> ?: continue - - // If existing has allDeclared* for this category, skip -- already broader - val allDeclaredKey = - when (memberKey) { - "fields" -> "allDeclaredFields" - "methods", "queriedMethods" -> "allDeclaredMethods" - else -> null - } - if (allDeclaredKey != null && existingEntry[allDeclaredKey] == true) { - continue - } - - @Suppress("UNCHECKED_CAST") - val existingMembers = - (existingEntry[memberKey] as? MutableList>) - ?: mutableListOf>().also { existingEntry[memberKey] = it } - - mergeMembers(agentMembers, existingMembers) - } -} - -/** - * Adds new method/field entries from agent that don't already exist in target. - * Identity is based on "name" + "parameterTypes" (for methods). - */ -private fun mergeMembers( - agentMembers: List>, - existingMembers: MutableList>, -) { - val existingSignatures = existingMembers.map { memberSignature(it) }.toMutableSet() - - for (agentMember in agentMembers) { - val sig = memberSignature(agentMember) - if (sig !in existingSignatures) { - existingMembers.add(agentMember) - existingSignatures.add(sig) - } - } -} - -/** - * Produces a comparable signature string for a method/field entry. - */ -private fun memberSignature(obj: Map): String { - val name = obj["name"] as? String ?: "" - - @Suppress("UNCHECKED_CAST") - val params = (obj["parameterTypes"] as? List)?.joinToString(",") ?: "" - return "$name($params)" -} - -/** - * For simple entries (resources, bundles), adds entries from agent that don't - * already exist in target. Comparison is by JSON string equality. - */ -private fun mergeSimpleEntries( - agentArray: List>, - targetArray: MutableList>, -) { - val existingStrings = targetArray.map { JsonOutput.toJson(it) }.toMutableSet() - for (entry in agentArray) { - val str = JsonOutput.toJson(entry) - if (str !in existingStrings) { - targetArray.add(entry) - existingStrings.add(str) - } - } -} - -/** - * Removes entries from the project's `reachability-metadata.json` that are already fully - * covered by library JARs on the classpath, plugin platform metadata, or - * `native-image.properties` resource inclusion patterns. - * - * Sources of "already covered" entries: - * 1. Library JARs: `META-INF/native-image/ ** /reachability-metadata.json` - * 2. Plugin L3 platform metadata: `nucleus/graalvm/platform-metadata/{platform}-reachability-metadata.json` - * 3. `native-image.properties` `-H:IncludeResources=` patterns from library JARs - * 4. Library resource globs (e.g. `*skiko*.sha256` covers `skiko-windows-x64.dll.sha256`) - * - * A reflection/jni entry is removed only when the baseline is a **strict superset** — - * all methods, fields, and flags in the project entry are present in the baseline. - */ -internal fun deduplicateAgainstLibraryMetadata( - classpathFiles: Iterable, - targetDir: File, - platformName: String? = null, - mainClass: String? = null, - extraMetadataDirs: List = emptyList(), -) { - val targetFile = File(targetDir, "reachability-metadata.json") - if (!targetFile.exists()) return - - val slurper = JsonSlurper() - - // Collect full library entries per section, keyed by type name. - // Multiple JARs may contribute entries for the same type -- merge them. - val libraryEntries = mutableMapOf>>() - val libraryResourceJsons = mutableSetOf() - val libraryResourceGlobs = mutableListOf>() - val includeResourcePatterns = mutableListOf() - - for (file in classpathFiles) { - if (!file.exists() || !file.name.endsWith(".jar")) continue - try { - java.util.jar.JarFile(file).use { jar -> - for (entry in jar.entries()) { - // Collect reachability-metadata.json from library JARs - if (entry.name.contains("META-INF/native-image/") && - entry.name.endsWith("reachability-metadata.json") - ) { - val text = jar.getInputStream(entry).bufferedReader().readText() - collectLibraryMetadata(slurper, text, libraryEntries, libraryResourceJsons, libraryResourceGlobs) - } - - // Collect IncludeResources patterns from native-image.properties - if (entry.name.contains("META-INF/native-image/") && - entry.name.endsWith("native-image.properties") - ) { - val props = java.util.Properties() - jar.getInputStream(entry).use { props.load(it) } - val args = props.getProperty("Args") ?: continue - val regex = Regex("""-H:IncludeResources=(\S+)""") - for (match in regex.findAll(args)) { - try { - includeResourcePatterns.add(Regex(match.groupValues[1])) - } catch (_: Exception) { - // Skip malformed patterns - } - } - } - } - } - } catch (_: Exception) { - // Skip unreadable JARs - } - } - - // Include L3 platform metadata from plugin classpath resources - if (platformName != null) { - val resourcePath = "nucleus/graalvm/platform-metadata/$platformName-reachability-metadata.json" - val stream = object {}::class.java.classLoader.getResourceAsStream(resourcePath) - if (stream != null) { - val text = stream.bufferedReader().use { it.readText() } - collectLibraryMetadata(slurper, text, libraryEntries, libraryResourceJsons, libraryResourceGlobs) - } - } - - // Include extra metadata directories (Oracle repo, static analysis, etc.) - for (dir in extraMetadataDirs) { - if (!dir.isDirectory) continue - val metadataFile = File(dir, "reachability-metadata.json") - if (metadataFile.exists()) { - try { - collectLibraryMetadata(slurper, metadataFile.readText(), libraryEntries, libraryResourceJsons, libraryResourceGlobs) - } catch (_: Exception) { - // Skip unreadable metadata files - } - } - } - - // Add main class to the baseline so the agent entry gets deduped - if (!mainClass.isNullOrBlank()) { - val reflectionMap = libraryEntries.getOrPut("reflection") { mutableMapOf() } - val mainClassEntry = - mutableMapOf( - "type" to mainClass, - "jniAccessible" to true, - "methods" to - listOf( - mapOf( - "name" to "main", - "parameterTypes" to listOf("java.lang.String[]"), - ), - ), - ) - val existing = reflectionMap[mainClass] - if (existing == null) { - reflectionMap[mainClass] = mainClassEntry - } else { - mergeTypeEntry(mainClassEntry, existing) - } - } - - val hasBaseline = - libraryEntries.isNotEmpty() || - libraryResourceJsons.isNotEmpty() || - libraryResourceGlobs.isNotEmpty() || - includeResourcePatterns.isNotEmpty() - if (!hasBaseline) return - - @Suppress("UNCHECKED_CAST") - val targetRoot = slurper.parseText(targetFile.readText()) as MutableMap - var changed = false - - // Remove reflection/jni entries only when the library fully covers the project entry - for (section in listOf("reflection", "jni")) { - val sectionMap = libraryEntries[section] ?: continue - - @Suppress("UNCHECKED_CAST") - val targetArray = targetRoot[section] as? MutableList> ?: continue - val before = targetArray.size - targetArray.removeAll { projectEntry -> - val typeName = projectEntry["type"] as? String ?: return@removeAll false - val libEntry = sectionMap[typeName] ?: return@removeAll false - libraryCoversProject(libEntry, projectEntry) - } - if (targetArray.size != before) changed = true - } - - // Remove resource entries already provided by libraries - @Suppress("UNCHECKED_CAST") - val targetResources = targetRoot["resources"] as? MutableList> - if (targetResources != null) { - val before = targetResources.size - targetResources.removeAll { entry -> - isResourceCovered(entry, libraryResourceJsons, libraryResourceGlobs, includeResourcePatterns) - } - if (targetResources.size != before) changed = true - } - - if (changed) { - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetRoot)) + "\n") - } -} - -/** - * Parses a library's reachability-metadata.json and adds its entries to the baseline collections. - */ -private fun collectLibraryMetadata( - slurper: JsonSlurper, - jsonText: String, - libraryEntries: MutableMap>>, - libraryResourceJsons: MutableSet, - libraryResourceGlobs: MutableList>, -) { - @Suppress("UNCHECKED_CAST") - val libRoot = slurper.parseText(jsonText) as? Map ?: return - - for (section in listOf("reflection", "jni")) { - @Suppress("UNCHECKED_CAST") - val entries = libRoot[section] as? List> ?: continue - val sectionMap = libraryEntries.getOrPut(section) { mutableMapOf() } - for (e in entries) { - val typeName = e["type"] as? String ?: continue - val existing = sectionMap[typeName] - if (existing == null) { - sectionMap[typeName] = e.toMutableMap() - } else { - mergeTypeEntry(e, existing) - } - } - } - - @Suppress("UNCHECKED_CAST") - val resources = libRoot["resources"] as? List> ?: return - for (e in resources) { - libraryResourceJsons.add(JsonOutput.toJson(e)) - val glob = e["glob"] as? String - if (glob != null) { - val module = e["module"] as? String - libraryResourceGlobs.add(Pair(module, glob)) - } - } -} - -/** - * Returns true if a project resource entry is already covered by the library baseline. - * - * Checks: - * 1. Exact JSON match with a library resource entry - * 2. Agent glob path matches a library resource glob pattern (e.g. `*skiko*.sha256`) - * 3. Agent glob path matches a `native-image.properties` IncludeResources regex - */ -private fun isResourceCovered( - entry: Map, - libraryResourceJsons: Set, - libraryResourceGlobs: List>, - includeResourcePatterns: List, -): Boolean { - // Exact JSON match (handles bundles and identical glob entries) - if (JsonOutput.toJson(entry) in libraryResourceJsons) return true - - // Only glob entries can be matched by patterns; bundles need exact match - val glob = entry["glob"] as? String ?: return false - val module = entry["module"] as? String - - // Check against library resource globs (e.g. "*skiko*.sha256" covers "skiko-windows-x64.dll.sha256") - // Module-qualified entries only match against library globs with the same module - for ((libModule, libGlob) in libraryResourceGlobs) { - if (module != libModule) continue - if (libGlob.contains('*') || libGlob.contains('?')) { - if (globMatches(libGlob, glob)) return true - } - } - - // IncludeResources patterns only apply to non-module-qualified entries - if (module == null) { - for (pattern in includeResourcePatterns) { - if (pattern.matches(glob)) return true - } - } - - return false -} - -/** - * Tests if a simple glob pattern matches a concrete path. - * Supports `*` (any chars) and `?` (single char). No `**` or brace expansion. - */ -private fun globMatches( - pattern: String, - path: String, -): Boolean { - val regex = - buildString { - append("^") - for (ch in pattern) { - when (ch) { - '*' -> append(".*") - '?' -> append(".") - '.', '(', ')', '[', ']', '{', '}', '\\', '^', '$', '|', '+' -> { - append("\\") - append(ch) - } - else -> append(ch) - } - } - append("$") - } - return try { - Regex(regex).matches(path) - } catch (_: Exception) { - false - } -} - -/** - * Returns true if the library entry fully covers the project entry, meaning the project - * entry can be safely removed. Checks that all methods, fields, and flags in the project - * entry are present in the library entry. - */ -private fun libraryCoversProject( - libEntry: Map, - projectEntry: Map, -): Boolean { - // Check broad flags: if project needs a flag, library must have it - val broadFlags = - listOf( - "allDeclaredFields", - "allDeclaredMethods", - "allDeclaredConstructors", - "allPublicFields", - "allPublicMethods", - "allPublicConstructors", - "unsafeAllocated", - "jniAccessible", - ) - for (flag in broadFlags) { - if (projectEntry[flag] == true && libEntry[flag] != true) { - return false - } - } - - // Check methods, fields, queriedMethods - for (memberKey in listOf("methods", "fields", "queriedMethods")) { - @Suppress("UNCHECKED_CAST") - val projectMembers = projectEntry[memberKey] as? List> - if (projectMembers.isNullOrEmpty()) continue - - // If library has allDeclared* for this category, it covers everything - val allDeclaredKey = - when (memberKey) { - "fields" -> "allDeclaredFields" - "methods", "queriedMethods" -> "allDeclaredMethods" - else -> null - } - if (allDeclaredKey != null && libEntry[allDeclaredKey] == true) continue - - @Suppress("UNCHECKED_CAST") - val libMembers = libEntry[memberKey] as? List> - if (libMembers == null) return false - - val libSignatures = libMembers.map { memberSignature(it) }.toSet() - for (pm in projectMembers) { - if (memberSignature(pm) !in libSignatures) { - return false - } - } - } - - return true -} - -/** - * Writes the platform-specific `reachability-metadata.json` (AWT, Java2D, font entries) - * bundled inside the plugin JAR into the given [outputDir]. - * - * If [mainClass] is provided, its reflection entry is injected into the JSON so that - * users don't need to declare it manually in their project config. - * - * The plugin ships pre-built metadata for each platform under - * `nucleus/graalvm/platform-metadata/{windows,macos,linux}-reachability-metadata.json`. - */ -internal fun writePlatformMetadata( - platform: String, - outputDir: File, - mainClass: String? = null, -) { - val resourcePath = "nucleus/graalvm/platform-metadata/$platform-reachability-metadata.json" - val stream = - object {}::class.java.classLoader.getResourceAsStream(resourcePath) - ?: return - - outputDir.mkdirs() - val targetFile = File(outputDir, "reachability-metadata.json") - - if (mainClass.isNullOrBlank()) { - stream.bufferedReader().use { reader -> - targetFile.writeText(reader.readText()) - } - } else { - val slurper = JsonSlurper() - - @Suppress("UNCHECKED_CAST") - val root = - stream.bufferedReader().use { - slurper.parseText(it.readText()) as MutableMap - } - - @Suppress("UNCHECKED_CAST") - val reflection = - (root["reflection"] as? MutableList) - ?: mutableListOf().also { root["reflection"] = it } - - val mainClassEntry = - mutableMapOf( - "type" to mainClass, - "jniAccessible" to true, - "methods" to - listOf( - mapOf( - "name" to "main", - "parameterTypes" to listOf("java.lang.String[]"), - ), - ), - ) - reflection.add(0, mainClassEntry) - - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(root)) + "\n") - } -} - -/** - * Merges individual JSON array config files (reflect-config.json, jni-config.json, etc.) - * that the agent may generate in the old format. - */ -internal fun mergeJsonArrayConfig( - agentFile: File, - targetFile: File, -) { - if (!agentFile.exists()) return - - val slurper = JsonSlurper() - - @Suppress("UNCHECKED_CAST") - val agentArray = slurper.parseText(agentFile.readText()) as List> - - @Suppress("UNCHECKED_CAST") - val targetArray = - if (targetFile.exists()) { - (slurper.parseText(targetFile.readText()) as List>).toMutableList() - } else { - mutableListOf() - } - - @Suppress("UNCHECKED_CAST") - val mutableTarget = targetArray as MutableList> - mergeTypeEntries(agentArray, mutableTarget) - - targetFile.parentFile.mkdirs() - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetArray)) + "\n") -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt deleted file mode 100644 index abd9b25d3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/packageVersions.kt +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal - -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.internal.utils.OS -import org.gradle.api.provider.Provider - -internal fun JvmApplicationContext.packageVersionFor(targetFormat: TargetFormat): Provider = - project.provider { - app.nativeDistributions.packageVersionFor(targetFormat) - ?: project.version.toString().takeIf { it != "unspecified" } - ?: "1.0.0" - } - -@Suppress("CyclomaticComplexMethod") // Exhaustive when on TargetFormat enum -private fun JvmApplicationDistributions.packageVersionFor(targetFormat: TargetFormat): String? { - val formatSpecificVersion: String? = - when (targetFormat) { - TargetFormat.RawAppImage -> null - TargetFormat.Deb -> linux.debPackageVersion - TargetFormat.Rpm -> linux.rpmPackageVersion - TargetFormat.Dmg -> macOS.dmgPackageVersion - TargetFormat.Pkg -> macOS.pkgPackageVersion - TargetFormat.Exe -> windows.exePackageVersion - TargetFormat.Msi -> windows.msiPackageVersion - TargetFormat.Nsis, TargetFormat.NsisWeb, TargetFormat.Portable, - TargetFormat.AppX, - -> windows.exePackageVersion - TargetFormat.AppImage, TargetFormat.Snap, TargetFormat.Flatpak -> linux.debPackageVersion - TargetFormat.Zip, TargetFormat.Tar, TargetFormat.SevenZ -> null - } - val osSpecificVersion: String? = - when (targetFormat.targetOS) { - OS.Linux -> linux.packageVersion - OS.MacOS -> macOS.packageVersion - OS.Windows -> windows.packageVersion - } - return formatSpecificVersion - ?: osSpecificVersion - ?: packageVersion -} - -internal fun JvmApplicationContext.packageBuildVersionFor(targetFormat: TargetFormat): Provider = - project.provider { - app.nativeDistributions.packageBuildVersionFor(targetFormat) - // fallback to normal version - ?: app.nativeDistributions.packageVersionFor(targetFormat) - ?: project.version.toString().takeIf { it != "unspecified" } - ?: "1.0.0" - } - -private fun JvmApplicationDistributions.packageBuildVersionFor(targetFormat: TargetFormat): String? { - if (targetFormat.targetOS != OS.MacOS) return null - - val formatSpecificVersion: String? = - when (targetFormat) { - TargetFormat.Dmg -> macOS.dmgPackageBuildVersion - TargetFormat.Pkg -> macOS.pkgPackageBuildVersion - else -> null - } - val osSpecificVersion: String? = macOS.packageBuildVersion - return formatSpecificVersion - ?: osSpecificVersion -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt deleted file mode 100644 index 3c595d069..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/resolveMetadataRepository.kt +++ /dev/null @@ -1,177 +0,0 @@ -@file:Suppress("ktlint:standard:filename") - -package dev.nucleusframework.nucleus.desktop.application.internal - -import groovy.json.JsonSlurper -import org.gradle.api.logging.Logger -import java.io.File -import java.util.zip.ZipFile - -/** - * Resolves GraalVM reachability metadata from the Oracle repository for runtime dependencies. - * - * Extracts the pre-downloaded metadata repository ZIP, then for each runtime dependency - * looks up matching metadata in the repository's index.json files and returns the list of - * directories that should be passed as `-H:ConfigurationFileDirectories=` to native-image. - * - * @see oracle/graalvm-reachability-metadata - */ -internal fun resolveMetadataRepositoryFromArtifacts( - zipFile: File, - version: String, - excludedModules: Set, - moduleToConfigVersion: Map, - artifacts: List, - outputDir: File, - logger: Logger, -): List { - val repoDir = - extractRepository(zipFile, version, outputDir, logger) - ?: return emptyList() - - val resolvedDirs = mutableListOf() - - for (artifact in artifacts) { - val coordinates = "${artifact.group}:${artifact.name}" - - if (coordinates in excludedModules) { - logger.debug("Skipping excluded module: $coordinates") - continue - } - - val metadataDir = - findMetadataForDependency( - repoDir = repoDir, - group = artifact.group, - name = artifact.name, - version = moduleToConfigVersion[coordinates] ?: artifact.version, - logger = logger, - ) - - if (metadataDir != null) { - resolvedDirs.add(metadataDir) - logger.info("Resolved metadata repository config for $coordinates -> $metadataDir") - } - } - - return resolvedDirs -} - -/** - * Extracts the metadata repository ZIP to [outputDir]. - * Returns the root directory of the extracted repository, or null on failure. - */ -private fun extractRepository( - zipFile: File, - version: String, - outputDir: File, - logger: Logger, -): File? { - val extractedMarker = File(outputDir, ".extracted-$version") - - // Skip if already extracted for this version - if (extractedMarker.exists()) { - logger.debug("Metadata repository v$version already extracted at $outputDir") - return outputDir - } - - // Clean previous extraction - if (outputDir.exists()) outputDir.deleteRecursively() - outputDir.mkdirs() - - try { - ZipFile(zipFile).use { zip -> - for (entry in zip.entries()) { - if (entry.isDirectory) continue - val targetFile = File(outputDir, entry.name) - targetFile.parentFile.mkdirs() - zip.getInputStream(entry).use { input -> - targetFile.outputStream().use { output -> - input.copyTo(output) - } - } - } - } - } catch (e: Exception) { - logger.warn("Failed to extract metadata repository ZIP: ${e.message}") - return null - } - - extractedMarker.writeText(version) - return outputDir -} - -/** - * Finds metadata directory for a specific dependency in the extracted repository. - * - * Repository structure: - * ``` - * / - * / - * index.json - * / - * reflect-config.json, jni-config.json, resource-config.json, etc. - * ``` - */ -private fun findMetadataForDependency( - repoDir: File, - group: String, - name: String, - version: String, - logger: Logger, -): File? { - val moduleDir = File(repoDir, "$group/$name") - val indexFile = File(moduleDir, "index.json") - - if (!indexFile.exists()) return null - - val slurper = JsonSlurper() - - @Suppress("UNCHECKED_CAST") - val indexEntries = - try { - slurper.parseText(indexFile.readText()) as? List> - } catch (e: Exception) { - logger.debug("Failed to parse index.json for $group:$name: ${e.message}") - return null - } ?: return null - - val metadataVersion = - findMatchingMetadataVersion(indexEntries, version) - ?: return null - - val metadataDir = File(moduleDir, metadataVersion) - return if (metadataDir.exists() && metadataDir.isDirectory) metadataDir else null -} - -/** - * Finds the metadata version directory that matches the given dependency version. - * - * Each index.json entry has: - * - "latest": boolean - * - "metadata-version": string — subdirectory name - * - "tested-versions": list - */ -@Suppress("UNCHECKED_CAST") -private fun findMatchingMetadataVersion( - indexEntries: List>, - version: String, -): String? { - // First, look for an exact match in tested-versions - for (entry in indexEntries) { - val testedVersions = entry["tested-versions"] as? List ?: continue - if (version in testedVersions) { - return entry["metadata-version"] as? String - } - } - - // Fall back to the "latest" entry - for (entry in indexEntries) { - if (entry["latest"] == true) { - return entry["metadata-version"] as? String - } - } - - // Last resort: use the first entry - return indexEntries.firstOrNull()?.get("metadata-version") as? String -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt deleted file mode 100644 index 29968ccd3..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSNotarizationSettings.kt +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.validation - -import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSNotarizationSettings -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties - -internal sealed class NotarizationAuth { - data class AppleId( - val appleID: String, - val password: String, - val teamID: String, - ) : NotarizationAuth() - - data class KeychainProfile( - val profileName: String, - val keychainPath: String?, - ) : NotarizationAuth() - - data class ApiKey( - val keyPath: String, - val keyId: String, - val issuerId: String, - ) : NotarizationAuth() -} - -internal data class ValidatedMacOSNotarizationSettings(val auth: NotarizationAuth) - -/** - * Builds the `notarytool` authentication arguments and an optional stdin payload - * (the Apple ID password is fed via stdin to keep it off the command line). - */ -internal fun NotarizationAuth.toNotaryToolArgs(): Pair, String?> = - when (this) { - is NotarizationAuth.AppleId -> - listOf("--apple-id", appleID, "--team-id", teamID) to password - is NotarizationAuth.KeychainProfile -> - buildList { - add("--keychain-profile") - add(profileName) - keychainPath?.let { - add("--keychain") - add(it) - } - } to null - is NotarizationAuth.ApiKey -> - listOf( - "--key", keyPath, - "--key-id", keyId, - "--issuer", issuerId, - ) to null - } - -internal fun MacOSNotarizationSettings?.validate(): ValidatedMacOSNotarizationSettings { - checkNotNull(this) { - ERR_NOTARIZATION_SETTINGS_ARE_NOT_PROVIDED - } - - val appleId = appleID.orNull?.takeUnless { it.isEmpty() } - val pwd = password.orNull?.takeUnless { it.isEmpty() } - val team = teamID.orNull?.takeUnless { it.isEmpty() } - val profile = keychainProfile.orNull?.takeUnless { it.isEmpty() } - val keychainPathValue = keychainPath.orNull?.takeUnless { it.isEmpty() } - val key = apiKey.orNull?.takeUnless { it.isEmpty() } - val keyId = apiKeyId.orNull?.takeUnless { it.isEmpty() } - val issuer = apiIssuer.orNull?.takeUnless { it.isEmpty() } - - val appleIdMode = appleId != null || pwd != null || team != null - val keychainMode = profile != null - val apiKeyMode = key != null || keyId != null || issuer != null - - val activeModes = listOf(appleIdMode, keychainMode, apiKeyMode).count { it } - check(activeModes <= 1) { - ERR_MUTUALLY_EXCLUSIVE - } - check(activeModes == 1) { - ERR_NO_MODE_CONFIGURED - } - - return when { - apiKeyMode -> { - checkNotNull(key) { ERR_API_KEY_IS_EMPTY } - checkNotNull(keyId) { ERR_API_KEY_ID_IS_EMPTY } - checkNotNull(issuer) { ERR_API_ISSUER_IS_EMPTY } - ValidatedMacOSNotarizationSettings( - NotarizationAuth.ApiKey( - keyPath = key, - keyId = keyId, - issuerId = issuer, - ), - ) - } - profile != null -> { - ValidatedMacOSNotarizationSettings( - NotarizationAuth.KeychainProfile( - profileName = profile, - keychainPath = keychainPathValue, - ), - ) - } - else -> { - checkNotNull(appleId) { ERR_APPLE_ID_IS_EMPTY } - checkNotNull(pwd) { ERR_PASSWORD_IS_EMPTY } - checkNotNull(team) { ERR_TEAM_ID_IS_EMPTY } - ValidatedMacOSNotarizationSettings( - NotarizationAuth.AppleId( - appleID = appleId, - password = pwd, - teamID = team, - ), - ) - } - } -} - -private const val ERR_PREFIX = "Notarization settings error:" -private const val ERR_NOTARIZATION_SETTINGS_ARE_NOT_PROVIDED = - "$ERR_PREFIX notarization settings are not provided" -private val ERR_NO_MODE_CONFIGURED = - """|$ERR_PREFIX no authentication mode configured. Configure one of: - | * Apple ID mode: appleID + password + teamID - | (Gradle properties: ${NucleusProperties.MAC_NOTARIZATION_APPLE_ID}, - | ${NucleusProperties.MAC_NOTARIZATION_PASSWORD}, - | ${NucleusProperties.MAC_NOTARIZATION_TEAM_ID_PROVIDER}); - | * Keychain profile mode: keychainProfile (created via 'xcrun notarytool store-credentials') - | (Gradle property: ${NucleusProperties.MAC_NOTARIZATION_KEYCHAIN_PROFILE}); - | * App Store Connect API key mode: apiKey + apiKeyId + apiIssuer - | (Gradle properties: ${NucleusProperties.MAC_NOTARIZATION_API_KEY}, - | ${NucleusProperties.MAC_NOTARIZATION_API_KEY_ID}, - | ${NucleusProperties.MAC_NOTARIZATION_API_ISSUER}); - """.trimMargin() -private val ERR_MUTUALLY_EXCLUSIVE = - """|$ERR_PREFIX appleID/keychainProfile/apiKey are mutually exclusive authentication modes. - |Configure only one mode at a time. - """.trimMargin() -private val ERR_APPLE_ID_IS_EMPTY = - """|$ERR_PREFIX appleID is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_APPLE_ID}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.appleID' DSL property; - """.trimMargin() -private val ERR_PASSWORD_IS_EMPTY = - """|$ERR_PREFIX password is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_PASSWORD}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.password' DSL property; - """.trimMargin() -private val ERR_TEAM_ID_IS_EMPTY = - """|$ERR_PREFIX teamID is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_TEAM_ID_PROVIDER}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.teamID' DSL property; - """.trimMargin() -private val ERR_API_KEY_IS_EMPTY = - """|$ERR_PREFIX apiKey is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_API_KEY}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.apiKey' DSL property; - """.trimMargin() -private val ERR_API_KEY_ID_IS_EMPTY = - """|$ERR_PREFIX apiKeyId is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_API_KEY_ID}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.apiKeyId' DSL property; - """.trimMargin() -private val ERR_API_ISSUER_IS_EMPTY = - """|$ERR_PREFIX apiIssuer is null or empty. To specify: - | * Use '${NucleusProperties.MAC_NOTARIZATION_API_ISSUER}' Gradle property; - | * Or use 'nativeDistributions.macOS.notarization.apiIssuer' DSL property; - """.trimMargin() diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt deleted file mode 100644 index 0adcd211b..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/ValidatedMacOSSigningSettings.kt +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.validation - -import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import org.gradle.api.Project -import org.gradle.api.provider.Provider -import java.io.File - -internal data class ValidatedMacOSSigningSettings( - val bundleID: String, - val identity: String, - val keychain: File?, - val prefix: String, - private val appStore: Boolean, -) { - val fullDeveloperID: String - get() { - val developerIdPrefix = "Developer ID Application: " - val thirdPartyMacDeveloperPrefix = "3rd Party Mac Developer Application: " - return when { - identity.startsWith(developerIdPrefix) -> identity - identity.startsWith(thirdPartyMacDeveloperPrefix) -> identity - else -> (if (!appStore) developerIdPrefix else thirdPartyMacDeveloperPrefix) + identity - } - } - - /** Identity with all known certificate-type prefixes stripped. */ - val bareIdentityName: String - get() { - val knownPrefixes = - listOf( - "Developer ID Application: ", - "3rd Party Mac Developer Application: ", - "Developer ID Installer: ", - "3rd Party Mac Developer Installer: ", - ) - return knownPrefixes - .firstOrNull { identity.startsWith(it) } - ?.let { identity.removePrefix(it) } - ?: identity - } - - /** Team ID extracted from the identity string, e.g. "NAME (XXXXXXX)" → "XXXXXXX". */ - val teamID: String? - get() = TEAM_ID_REGEX.find(identity.trim())?.groupValues?.get(1) -} - -internal fun MacOSSigningSettings.validate( - bundleIDProvider: Provider, - project: Project, - appStoreProvider: Provider, -): ValidatedMacOSSigningSettings { - check(currentOS == OS.MacOS) { ERR_WRONG_OS } - - val bundleID = validateBundleID(bundleIDProvider) - val signPrefix = - this.prefix.orNull - ?: (bundleID.substringBeforeLast(".") + ".").takeIf { bundleID.contains('.') } - ?: error(ERR_UNKNOWN_PREFIX) - val signIdentity = - this.identity.orNull - ?: error(ERR_UNKNOWN_SIGN_ID) - val keychainPath = this.keychain.orNull - val keychainFile = - if (keychainPath != null) { - val keychainFile = - listOf(project.file(keychainPath), project.rootProject.file(keychainPath)) - .firstOrNull { it.exists() } - check(keychainFile != null) { - "$ERR_PREFIX could not find the specified keychain: $keychainPath" - } - keychainFile - } else { - null - } - val appStore = appStoreProvider.orNull == true - - return ValidatedMacOSSigningSettings( - bundleID = bundleID, - identity = signIdentity, - keychain = keychainFile, - prefix = signPrefix, - appStore = appStore, - ) -} - -private const val ERR_PREFIX = "Signing settings error:" -private val ERR_WRONG_OS = - "$ERR_PREFIX macOS was expected, actual OS is $currentOS" -private val ERR_UNKNOWN_PREFIX = - """|$ERR_PREFIX Could not infer signing prefix. To specify: - | * Set bundleID to reverse DNS notation (e.g. "com.mycompany.myapp"); - | * Use '${NucleusProperties.MAC_SIGN_PREFIX}' Gradle property; - | * Use 'nativeDistributions.macOS.signing.prefix' DSL property; - """.trimMargin() -private val ERR_UNKNOWN_SIGN_ID = - """|$ERR_PREFIX signing identity is null or empty. To specify: - | * Use '${NucleusProperties.MAC_SIGN_ID}' Gradle property; - | * Use 'nativeDistributions.macOS.signing.identity' DSL property; - """.trimMargin() - -private val TEAM_ID_REGEX = Regex("\\(([A-Z0-9]+)\\)\\s*$") diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt deleted file mode 100644 index 49fd095ac..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validateBundleID.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.validation - -import org.gradle.api.provider.Provider - -internal fun validateBundleID(bundleIDProvider: Provider): String { - val bundleID = bundleIDProvider.orNull - check(!bundleID.isNullOrEmpty()) { ERR_BUNDLE_ID_IS_EMPTY } - check(bundleID.matches("[A-Za-z0-9\\-\\.]+".toRegex())) { ERR_BUNDLE_ID_WRONG_FORMAT } - return bundleID -} - -private const val ERR_PREFIX = "macOS settings error:" -private const val BUNDLE_ID_FORMAT = - "bundleID may only contain alphanumeric characters (A-Z, a-z, 0-9), hyphen (-) and period (.) characters" -private val ERR_BUNDLE_ID_IS_EMPTY = - """|$ERR_PREFIX bundleID is empty or null. To specify: - | * Use 'nativeDistributions.macOS.bundleID' DSL property; - | * $BUNDLE_ID_FORMAT; - | * Use reverse DNS notation (e.g. "com.mycompany.myapp"); - | - """.trimMargin() -private val ERR_BUNDLE_ID_WRONG_FORMAT = - "$ERR_PREFIX $BUNDLE_ID_FORMAT" diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt deleted file mode 100644 index 4b6fd5cfc..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/internal/validation/validatePackageVersions.kt +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.internal.validation - -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.desktop.application.internal.JvmApplicationContext -import dev.nucleusframework.nucleus.desktop.application.internal.packageBuildVersionFor -import dev.nucleusframework.nucleus.desktop.application.internal.packageVersionFor -import dev.nucleusframework.nucleus.internal.utils.OS -import org.gradle.api.GradleException - -internal fun JvmApplicationContext.validatePackageVersions() { - val errors = ErrorsCollector() - - for (targetFormat in app.nativeDistributions.targetFormats) { - val versionChecker: VersionChecker? = - when (targetFormat) { - TargetFormat.RawAppImage -> null - TargetFormat.Deb -> DebVersionChecker - TargetFormat.Rpm -> RpmVersionChecker - TargetFormat.Msi, TargetFormat.Exe -> WindowsVersionChecker - TargetFormat.Dmg, TargetFormat.Pkg -> MacVersionChecker - TargetFormat.Nsis, TargetFormat.NsisWeb, TargetFormat.Portable, - TargetFormat.AppX, - -> WindowsVersionChecker - TargetFormat.AppImage, TargetFormat.Snap, TargetFormat.Flatpak -> DebVersionChecker - TargetFormat.Zip, TargetFormat.Tar, TargetFormat.SevenZ -> null - } - - val packageVersion = packageVersionFor(targetFormat).orNull - if (packageVersion == null) { - errors.addError(targetFormat, "no version was specified") - } else { - versionChecker?.apply { - if (!isValid(packageVersion)) { - errors.addError( - targetFormat, - "'$packageVersion' is not a valid version", - correctFormat = correctFormat, - ) - } - } - } - - if (targetFormat.targetOS == OS.MacOS) { - val packageBuildVersion = packageBuildVersionFor(targetFormat).orNull - if (packageBuildVersion == null) { - errors.addError(targetFormat, "no build version was specified") - } else { - versionChecker?.apply { - if (!isValid(packageBuildVersion)) { - errors.addError( - targetFormat, - "'$packageBuildVersion' is not a valid build version", - correctFormat = correctFormat, - ) - } - } - } - } - } - - if (errors.errors.isNotEmpty()) { - throw GradleException(errors.errors.joinToString("\n")) - } -} - -private class ErrorsCollector { - private val myErrors = arrayListOf() - - val errors: List - get() = myErrors - - fun addError( - targetFormat: TargetFormat, - error: String, - correctFormat: String? = null, - ) { - val msg = - buildString { - appendLine("* Illegal version for '$targetFormat': $error.") - if (correctFormat != null) { - appendLine(" * Correct format: $correctFormat") - } - appendLine( - " * You can specify the correct version using DSL properties: " + - dslPropertiesFor(targetFormat).joinToString(", "), - ) - } - myErrors.add(msg) - } -} - -@Suppress("CyclomaticComplexMethod") // Exhaustive when on TargetFormat enum -private fun dslPropertiesFor(targetFormat: TargetFormat): List { - val nativeDistributions = "nativeDistributions" - val linux = "$nativeDistributions.linux" - val macOS = "$nativeDistributions.macOS" - val windows = "$nativeDistributions.windows" - val packageVersion = "packageVersion" - - val formatSpecificProperty: String? = - when (targetFormat) { - TargetFormat.RawAppImage -> null - TargetFormat.Deb -> "$linux.debPackageVersion" - TargetFormat.Rpm -> "$linux.rpmPackageVersion" - TargetFormat.Dmg -> "$macOS.dmgPackageVersion" - TargetFormat.Pkg -> "$macOS.pkgPackageVersion" - TargetFormat.Exe -> "$windows.exePackageVersion" - TargetFormat.Msi -> "$windows.msiPackageVersion" - TargetFormat.Nsis, TargetFormat.NsisWeb, TargetFormat.Portable, - TargetFormat.AppX, - -> "$windows.exePackageVersion" - TargetFormat.AppImage, TargetFormat.Snap, TargetFormat.Flatpak -> "$linux.debPackageVersion" - TargetFormat.Zip, TargetFormat.Tar, TargetFormat.SevenZ -> null - } - val osSettingsProperty: String = - when (targetFormat.targetOS) { - OS.Linux -> "$linux.$packageVersion" - OS.MacOS -> "$macOS.$packageVersion" - OS.Windows -> "$windows.$packageVersion" - } - val appSpecificProperty = "$nativeDistributions.$packageVersion" - return listOfNotNull( - formatSpecificProperty, - osSettingsProperty, - appSpecificProperty, - ) -} - -private interface VersionChecker { - val correctFormat: String - - fun isValid(version: String): Boolean -} - -private object DebVersionChecker : VersionChecker { - override val correctFormat = - """|'[EPOCH:]UPSTREAM_VERSION[-DEBIAN_REVISION]', where: - | * EPOCH is an optional non-negative integer; - | * UPSTREAM_VERSION may contain only alphanumerics and the characters '.', '+', '-', '~' and must start with a digit; - | * DEBIAN_REVISION is optional and may contain only alphanumerics and the characters '.', '+', '~'; - | * see https://www.debian.org/doc/debian-policy/ch-controlfields.html#version for details; - """.trimMargin() - - override fun isValid(version: String): Boolean = version.matches(debRegex) - - private val debRegex = - ( - // EPOCH - "([0-9]+:)?" + - // UPSTREAM_VERSION - "[0-9][0-9a-zA-Z.+\\-~]*" + - // DEBIAN_REVISION - "(-[0-9a-zA-Z.+~]+)?" - ).toRegex() -} - -private object RpmVersionChecker : VersionChecker { - override val correctFormat = "rpm package version must not contain a dash '-'" - - override fun isValid(version: String): Boolean = !version.contains("-") -} - -private object WindowsVersionChecker : VersionChecker { - override val correctFormat = - """|'MAJOR.MINOR.BUILD', where: - | * MAJOR is a non-negative integer with a maximum value of 255; - | * MINOR is a non-negative integer with a maximum value of 255; - | * BUILD is a non-negative integer with a maximum value of 65535; - """.trimMargin() - - override fun isValid(version: String): Boolean { - val parts = version.split(".").map { it.toIntOrNull() } - if (parts.size != 3) return false - - return parts[0].isIntInRange(0, 255) && - parts[1].isIntInRange(0, 255) && - parts[2].isIntInRange(0, 65535) - } - - private fun Int?.isIntInRange( - min: Int, - max: Int, - ) = this != null && this >= min && this <= max -} - -private object MacVersionChecker : VersionChecker { - override val correctFormat = - """|'MAJOR[.MINOR][.PATCH]', where: - | * MAJOR is a non-negative integer; - | * MINOR is an optional non-negative integer; - | * PATCH is an optional non-negative integer; - """.trimMargin() - - override fun isValid(version: String): Boolean { - val parts = version.split(".").map { it.toIntOrNull() } - - return parts.isNotEmpty() && - parts.size <= 3 && - parts.all { it != null && it >= 0 } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt deleted file mode 100644 index bfa143edc..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner -import dev.nucleusframework.nucleus.desktop.application.internal.JdkVersionProbe -import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.executableName -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import java.io.ByteArrayInputStream -import java.io.File -import java.util.* - -// __COMPOSE_NATIVE_DISTRIBUTIONS_MIN_JAVA_VERSION__ -internal const val MIN_JAVA_RUNTIME_VERSION = 17 - -@CacheableTask -abstract class AbstractCheckNativeDistributionRuntime : AbstractNucleusTask() { - @get:Classpath - val jdkVersionProbeJar: ConfigurableFileCollection = objects.fileCollection() - - @get:PathSensitive(PathSensitivity.ABSOLUTE) - @get:InputDirectory - val jdkHome: Property = objects.notNullProperty() - - @get:Input - abstract val checkJdkVendor: Property - - private val taskDir = project.layout.buildDirectory.dir("compose/tmp/$name") - - @get:OutputFile - val javaRuntimePropertiesFile: Provider = taskDir.map { it.file("properties.bin") } - - private val jdkHomeFile: File - get() = File(jdkHome.orNull ?: error("Missing jdkHome value")) - - private fun File.getJdkTool(toolName: String): File = resolve("bin/${executableName(toolName)}") - - private fun ensureToolsExist(vararg tools: File) { - val missingTools = tools.filter { !it.exists() }.map { "'${it.name}'" } - - if (missingTools.isEmpty()) return - - if (missingTools.size == 1) jdkDistributionProbingError("${missingTools.single()} is missing") - - jdkDistributionProbingError("${missingTools.joinToString(", ")} are missing") - } - - private fun jdkDistributionProbingError(errorMessage: String): Nothing { - val fullErrorMessage = - buildString { - appendLine("Failed to check JDK distribution: $errorMessage") - appendLine("JDK distribution path: ${jdkHomeFile.absolutePath}") - } - error(fullErrorMessage) - } - - @TaskAction - fun run() { - taskDir.ioFile.mkdirs() - - val jdkHome = jdkHomeFile - val javaExecutable = jdkHome.getJdkTool("java") - val jlinkExecutable = jdkHome.getJdkTool("jlink") - val jpackageExecutabke = jdkHome.getJdkTool("jpackage") - ensureToolsExist(javaExecutable, jlinkExecutable, jpackageExecutabke) - - val jdkRuntimeProperties = getJDKRuntimeProperties(javaExecutable) - - val jdkMajorVersionString = jdkRuntimeProperties.getProperty(JdkVersionProbe.JDK_MAJOR_VERSION_KEY) - val jdkMajorVersion = - jdkMajorVersionString?.toIntOrNull() - ?: jdkDistributionProbingError("JDK version '$jdkMajorVersionString' has unexpected format") - - check(jdkMajorVersion >= MIN_JAVA_RUNTIME_VERSION) { - jdkDistributionProbingError( - "minimum required JDK version is '$MIN_JAVA_RUNTIME_VERSION', " + - "but actual version is '$jdkMajorVersion'", - ) - } - - if (checkJdkVendor.get()) { - val vendor = jdkRuntimeProperties.getProperty(JdkVersionProbe.JDK_VENDOR_KEY) - if (vendor == null) { - logger.warn("JDK vendor probe failed: $jdkHome") - } else { - if (currentOS == OS.MacOS && vendor.equals("homebrew", ignoreCase = true)) { - error( - """ - |Homebrew's JDK distribution may cause issues with packaging. - |See: https://github.com/JetBrains/compose-multiplatform/issues/3107 - |Possible solutions: - |* Use other vendor's JDK distribution, such as Amazon Corretto; - |* To continue using Homebrew distribution for packaging on your own risk, add "${NucleusProperties.CHECK_JDK_VENDOR}=false" to your gradle.properties - """.trimMargin(), - ) - } - } - } - - val modules = arrayListOf() - runExternalTool( - tool = javaExecutable, - args = listOf("--list-modules"), - logToConsole = ExternalToolRunner.LogToConsole.Never, - processStdout = { stdout -> - stdout.lineSequence().forEach { line -> - val moduleName = line.trim().substringBefore("@") - if (moduleName.isNotBlank()) { - modules.add(moduleName) - } - } - }, - ) - - val properties = JvmRuntimeProperties(jdkMajorVersion, modules) - JvmRuntimeProperties.writeToFile(properties, javaRuntimePropertiesFile.ioFile) - } - - private fun getJDKRuntimeProperties(javaExecutable: File): Properties { - val jdkProperties = Properties() - runExternalTool( - tool = javaExecutable, - args = listOf("-jar", jdkVersionProbeJar.files.single().absolutePath), - processStdout = { stdout -> - ByteArrayInputStream(stdout.trim().toByteArray()).use { - jdkProperties.loadFromXML(it) - } - }, - ) - return jdkProperties - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt deleted file mode 100644 index 5106b8211..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt +++ /dev/null @@ -1,1464 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.dsl.CompressionLevel -import dev.nucleusframework.nucleus.desktop.application.dsl.JvmApplicationDistributions -import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings -import dev.nucleusframework.nucleus.desktop.application.dsl.ReleaseChannel -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.desktop.application.internal.UpdateYmlGenerator -import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner -import dev.nucleusframework.nucleus.desktop.application.internal.MacSignerImpl -import dev.nucleusframework.nucleus.desktop.application.internal.NoCertificateSigner -import dev.nucleusframework.nucleus.desktop.application.internal.WindowsKitsLocator -import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderConfigGenerator -import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderInvocation -import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.ElectronBuilderToolManager -import dev.nucleusframework.nucleus.desktop.application.internal.electronbuilder.NodeJsDetector -import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath -import dev.nucleusframework.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT -import dev.nucleusframework.nucleus.desktop.application.internal.padDmgBackgroundForTitleBar -import dev.nucleusframework.nucleus.desktop.application.internal.readImageDimensions -import dev.nucleusframework.nucleus.desktop.application.internal.updateExecutableTypeInAppImage -import dev.nucleusframework.nucleus.desktop.application.internal.validation.ValidatedMacOSSigningSettings -import dev.nucleusframework.nucleus.desktop.application.internal.validation.validate -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.Arch -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentArch -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import net.coobird.thumbnailator.Thumbnails -import net.coobird.thumbnailator.filters.Canvas -import net.coobird.thumbnailator.geometry.Positions -import org.gradle.api.GradleException -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.logging.Logger -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.Nested -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.awt.Color -import java.awt.image.BufferedImage -import java.io.ByteArrayOutputStream -import java.io.File -import java.nio.file.FileVisitResult -import java.nio.file.Files -import java.nio.file.LinkOption -import java.nio.file.Path -import java.nio.file.SimpleFileVisitor -import java.nio.file.StandardCopyOption -import java.nio.file.attribute.BasicFileAttributes -import java.util.Locale -import javax.imageio.ImageIO -import javax.inject.Inject -import kotlin.io.path.isExecutable -import kotlin.io.path.isRegularFile - -/** - * Gradle task that packages a pre-built app-image (from jpackage) using electron-builder. - * - * Pipeline: - * 1. Resolve the platform-specific app directory from the jpackage app-image output. - * 2. Update the executable type in the app image's .cfg launcher file. - * 3. Generate an electron-builder YAML configuration from the DSL settings. - * 4. Invoke electron-builder via npx with `--prepackaged`. - * 5. Output the final installer/package to [destinationDir]. - */ -@DisableCachingByDefault(because = "Depends on external electron-builder tool") -@Suppress("LargeClass", "TooManyFunctions") -abstract class AbstractElectronBuilderPackageTask - @Inject - constructor( - @get:Input val targetFormat: TargetFormat, - ) : AbstractNucleusTask() { - companion object { - private const val APPX_STORE_LOGO_SIZE = 50 - private const val APPX_SQUARE44_LOGO_SIZE = 44 - private const val APPX_SQUARE150_LOGO_SIZE = 150 - private const val APPX_WIDE_LOGO_WIDTH = 310 - private const val APPX_WIDE_LOGO_HEIGHT = 150 - } - - @get:InputDirectory - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val appImageRoot: DirectoryProperty = objects.directoryProperty() - - @get:OutputDirectory - val destinationDir: DirectoryProperty = objects.directoryProperty() - - @get:Input - val packageName: Property = objects.notNullProperty() - - @get:Input - @get:Optional - val packageVersion: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val customNodePath: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val publishMode: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val startupWMClass: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val executableName: Property = objects.nullableProperty() - - @get:Input - val targetArch: Property = - objects.notNullProperty().apply { - set(currentArch.id) - } - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val linuxIconFile: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val windowsIconFile: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val appxStoreLogo: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val appxSquare44x44Logo: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val appxSquare150x150Logo: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val appxWide310x150Logo: RegularFileProperty = objects.fileProperty() - - /** - * The distributions DSL object providing all platform-specific settings. - * Marked @Internal because the individual settings are tracked via other @Input properties - * on the DSL objects themselves, and this reference is used for config generation only. - */ - @get:Internal - var distributions: JvmApplicationDistributions? = null - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macEntitlementsFile: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macRuntimeEntitlementsFile: RegularFileProperty = objects.fileProperty() - - @get:Input - @get:Optional - internal val nonValidatedMacBundleID: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macAppStore: Property = objects.nullableProperty() - - @get:Optional - @get:Nested - internal var nonValidatedMacSigningSettings: MacOSSigningSettings? = null - - private val macSigner: MacSigner? by lazy { - val nonValidatedSettings = nonValidatedMacSigningSettings - if (currentOS == OS.MacOS) { - if (nonValidatedSettings?.sign?.get() == true) { - val validatedSettings = - nonValidatedSettings.validate(nonValidatedMacBundleID, project, macAppStore) - MacSignerImpl(validatedSettings, runExternalTool) - } else { - NoCertificateSigner(runExternalTool) - } - } else { - null - } - } - - @TaskAction - fun run() { - val dist = - this.distributions - ?: throw GradleException("distributions must be set on AbstractElectronBuilderPackageTask") - - if (!targetFormat.isCompatibleWithCurrentOS) { - logger.lifecycle( - "Skipping ${targetFormat.name} packaging: not compatible with current OS ($currentOS)", - ) - return - } - if (shouldSkipForMissingTool()) return - - val originalAppDir = resolveAppImageDir() - logger.info("Resolved app image directory: ${originalAppDir.absolutePath}") - - val outputDir = destinationDir.ioFile.apply { mkdirs() } - - // Create a task-private copy of the app image so parallel tasks don't - // interfere when modifying .cfg files or signing the bundle. - val workingAppDir = copyAppImage(originalAppDir, outputDir, logger) - - ensureResourcesDirForElectronBuilder(workingAppDir) - ensureLinuxExecutableAlias(workingAppDir) - updateExecutableTypeInAppImage(workingAppDir, targetFormat, logger, packageVersion.orNull) - ensureMacAdHocSigning(workingAppDir, targetFormat) - - val npx = detectNpx() - validateNodeVersion() - - val linuxIconOverride = prepareLinuxIconSet(outputDir) - val windowsIconOverride = resolveWindowsIcon() - val linuxAfterInstallTemplate = prepareLinuxAfterInstallTemplate(outputDir) - if (targetFormat == TargetFormat.AppX) { - val hasExplicitWindowsIcon = - dist.windows.iconFile.orNull - ?.asFile != null - stageAppXAssets( - outputDir = outputDir, - windowsIconOverride = windowsIconOverride, - hasExplicitWindowsIcon = hasExplicitWindowsIcon, - ) - } - val configFile = - generateConfig( - distributions = dist, - appDir = workingAppDir, - outputDir = outputDir, - linuxIconOverride = linuxIconOverride, - windowsIconOverride = windowsIconOverride, - linuxAfterInstallTemplate = linuxAfterInstallTemplate, - ) - ensureProjectPackageMetadata(outputDir, dist) - - cleanupParasiticFiles(outputDir) - - val toolManager = ElectronBuilderToolManager(execOperations, logger) - val extraConfigArgs = - buildList { - if (targetFormat == TargetFormat.Snap && dist.publish.github.enabled) { - add("--config.snap.publish=github") - } - } - val ebEnvironment = - resolveElectronBuilderEnvironment( - targetFormat = targetFormat, - currentOs = currentOS, - currentArchitecture = currentArch, - logger = logger, - ) + isolatedCacheEnv(outputDir) - toolManager.invoke( - ElectronBuilderInvocation( - configFile = configFile, - prepackagedDir = workingAppDir, - outputDir = outputDir, - targets = buildElectronBuilderTargets(), - extraConfigArgs = extraConfigArgs, - npx = npx, - environment = ebEnvironment, - publishFlag = resolvePublishFlag(), - ), - ) - - if (targetFormat == TargetFormat.Pkg) { - signPkgInstaller(outputDir) - } - - cleanupParasiticFiles(outputDir) - cleanupBuildTemporaries(outputDir) - configFile.delete() - exportPackagingMetadata(outputDir, dist) - generateUpdateYmlIfNeeded(outputDir, dist) - logger.lifecycle("nucleus builder package written to ${outputDir.canonicalPath}") - } - - private fun generateUpdateYmlIfNeeded( - outputDir: File, - dist: JvmApplicationDistributions, - ) { - if (!targetFormat.needsPluginUpdateYml) return - val channel = resolveUpdateChannel(dist) - val ymlFilename = targetFormat.updateYmlFilename(channel) - val version = packageVersion.orNull ?: "0.0.0" - UpdateYmlGenerator.generateIfMissing(outputDir, ymlFilename, version, logger) - } - - private fun resolveUpdateChannel(dist: JvmApplicationDistributions): ReleaseChannel { - val publish = dist.publish - return when { - publish.github.enabled -> publish.github.channel - publish.generic.enabled -> publish.generic.channel - else -> ReleaseChannel.Latest - } - } - - private fun resolvePublishFlag(): String { - val publish = distributions?.publish - val anyProviderEnabled = - publish != null && (publish.github.enabled || publish.s3.enabled || publish.generic.enabled) - if (!anyProviderEnabled) { - logger.info("No publish provider enabled, using publish mode: never") - return "never" - } - - // Priority: env var > Gradle property > DSL default - val envValue = System.getenv("NUCLEUS_PUBLISH_MODE") - if (!envValue.isNullOrBlank()) { - logger.info("Using publish mode from NUCLEUS_PUBLISH_MODE env var: $envValue") - return envValue - } - - val propValue = publishMode.orNull - if (!propValue.isNullOrBlank()) { - logger.info("Using publish mode from Gradle property: $propValue") - return propValue - } - - val dslValue = publish.publishMode.id - logger.info("Using publish mode from DSL: $dslValue") - return dslValue - } - - private fun detectNpx(): File = - NodeJsDetector.detectNpx( - customNodePath = customNodePath.orNull, - logger = logger, - ) ?: throw GradleException( - "npx not found. Node.js 18+ is required for electron-builder packaging. " + - "Install Node.js or set the 'compose.electronBuilder.nodePath' Gradle property.", - ) - - private fun validateNodeVersion() { - val node = - NodeJsDetector.detectNode( - customNodePath = customNodePath.orNull, - logger = logger, - ) ?: return - val version = NodeJsDetector.getNodeVersion(node) ?: return - if (!NodeJsDetector.isNodeVersionSupported(version)) { - throw GradleException( - "Node.js $version is not supported. Version 18+ is required for electron-builder.", - ) - } - logger.info("Using Node.js: ${node.absolutePath} ($version)") - } - - private fun generateConfig( - distributions: JvmApplicationDistributions, - appDir: File, - outputDir: File, - linuxIconOverride: File?, - windowsIconOverride: File?, - linuxAfterInstallTemplate: File?, - ): File { - val configGenerator = ElectronBuilderConfigGenerator() - val resolvedArch = Arch.entries.first { it.id == targetArch.get() } - - val (dmgBackgroundOverride, dmgWindowOverride) = if (targetFormat == TargetFormat.Dmg) { - val bgFile = distributions.macOS.dmg.background.orNull?.asFile - if (bgFile != null) { - val processedBg = padDmgBackgroundForTitleBar(bgFile, outputDir.resolve("dmg-assets"), logger) - val windowOverride = readImageDimensions(processedBg)?.let { (w, h) -> - ElectronBuilderConfigGenerator.DmgWindowOverride(w, h + MACOS_DMG_TITLE_BAR_HEIGHT) - } - processedBg to windowOverride - } else { - null to null - } - } else { - null to null - } - - if (targetFormat == TargetFormat.AppImage && distributions.compressionLevel == CompressionLevel.Maximum) { - logger.warn( - "AppImage with 'maximum' compression can cause extremely slow startup times (60s+) " + - "due to squashfs/FUSE decompression overhead. Consider 'normal' or 'store' instead. " + - "See https://github.com/electron-userland/electron-builder/issues/7483", - ) - } - - val configContent = - configGenerator.generateConfig( - distributions = distributions, - targetFormat = targetFormat, - appImageDir = appDir, - targetArch = resolvedArch, - startupWMClass = startupWMClass.orNull, - linuxIconOverride = linuxIconOverride, - windowsIconOverride = windowsIconOverride, - linuxAfterInstallTemplate = linuxAfterInstallTemplate, - executableName = executableName.orNull, - dmgBackgroundOverride = dmgBackgroundOverride, - dmgWindowOverride = dmgWindowOverride, - ) - val configFile = File(outputDir, "electron-builder.yml") - configFile.writeText(configContent) - logger.info("Generated electron-builder config at: ${configFile.absolutePath}") - return configFile - } - - private fun exportPackagingMetadata( - outputDir: File, - distributions: JvmApplicationDistributions, - ) { - when (currentOS) { - OS.Windows -> exportWindowsSigningMetadata(outputDir, distributions) - OS.MacOS -> exportMacOSPackagingMetadata(outputDir, distributions) - else -> {} - } - } - - private fun exportWindowsSigningMetadata( - outputDir: File, - distributions: JvmApplicationDistributions, - ) { - val signing = distributions.windows.signing - if (!signing.enabled) return - - val certFile = - signing.certificateFile.orNull - ?.asFile - ?.absolutePath - val metadata = - buildString { - appendLine("{") - appendLine(" \"enabled\": true,") - val certJson = certFile?.let { "\"${it.replace("\\", "\\\\")}\"" } ?: "null" - appendLine(" \"certificateFile\": $certJson,") - appendLine(" \"algorithm\": \"${signing.algorithm.id}\",") - appendLine(" \"timestampServer\": ${signing.timestampServer?.let { "\"$it\"" } ?: "null"}") - appendLine("}") - } - val metadataFile = File(outputDir, "signing-metadata.json") - metadataFile.writeText(metadata) - logger.info("Exported signing metadata to: ${metadataFile.absolutePath}") - } - - private fun exportMacOSPackagingMetadata( - outputDir: File, - distributions: JvmApplicationDistributions, - ) { - val mac = distributions.macOS - val appId = - mac.bundleID?.takeIf { it.isNotBlank() } - ?: distributions.packageName?.let { "com.app.$it" } - val sign = mac.signing.sign.orNull == true - val dmg = mac.dmg - - // Copy DMG asset files to a subdirectory so they travel with the metadata artifact. - // The background image is padded using native sips to compensate for the macOS - // title bar — see issue #26 and padDmgBackgroundForTitleBar(). - val assetsDir = File(outputDir, "dmg-assets") - val dmgBackground = - dmg.background.orNull?.asFile?.let { bgFile -> - val padded = padDmgBackgroundForTitleBar(bgFile, assetsDir, logger) - copyDmgAsset(padded, assetsDir, "background") - } - val dmgBadgeIcon = copyDmgAsset(dmg.badgeIcon.orNull?.asFile, assetsDir, "badge-icon") - val dmgIcon = copyDmgAsset(dmg.icon.orNull?.asFile, assetsDir, "icon") - - val metadata = - buildString { - appendLine("{") - val resolvedProductName = - distributions.appName ?: distributions.packageName ?: executableName.orNull - appendLine(" \"productName\": ${jsonStr(resolvedProductName)},") - appendLine(" \"appId\": ${jsonStr(appId)},") - appendLine(" \"copyright\": ${jsonStr(distributions.copyright)},") - appendLine(" \"artifactName\": ${jsonStr(distributions.artifactName)},") - appendLine(" \"compression\": ${jsonStr(distributions.compressionLevel?.id)},") - appendLine(" \"category\": ${jsonStr(mac.appCategory)},") - appendLine(" \"minimumSystemVersion\": ${jsonStr(mac.minimumSystemVersion)},") - appendLine(" \"sign\": $sign,") - appendLine(" \"installLocation\": ${jsonStr(mac.installationPath)},") - appendLine(" \"dmg\": {") - appendLine(" \"sign\": ${dmg.sign},") - appendLine(" \"background\": ${jsonStr(dmgBackground)},") - appendLine(" \"backgroundColor\": ${jsonStr(dmg.backgroundColor)},") - appendLine(" \"badgeIcon\": ${jsonStr(dmgBadgeIcon)},") - appendLine(" \"icon\": ${jsonStr(dmgIcon)},") - appendLine(" \"iconSize\": ${dmg.iconSize ?: "null"},") - appendLine(" \"iconTextSize\": ${dmg.iconTextSize ?: "null"},") - appendLine(" \"title\": ${jsonStr(dmg.title)},") - appendLine(" \"format\": ${jsonStr(dmg.format?.id)},") - appendLine(" \"windowX\": ${dmg.window.x ?: "null"},") - appendLine(" \"windowY\": ${dmg.window.y ?: "null"},") - appendLine(" \"windowWidth\": ${dmg.window.width ?: "null"},") - appendLine(" \"windowHeight\": ${dmg.window.height ?: "null"},") - appendLine(" \"contents\": [") - for ((index, entry) in dmg.contents.withIndex()) { - val comma = if (index < dmg.contents.size - 1) "," else "" - val parts = - buildList { - add("\"x\": ${entry.x}") - add("\"y\": ${entry.y}") - entry.type?.let { add("\"type\": \"${it.id}\"") } - entry.name?.let { add("\"name\": \"${it.escapeForJson()}\"") } - entry.path?.let { add("\"path\": \"${it.escapeForJson()}\"") } - } - appendLine(" {${parts.joinToString(", ")}}$comma") - } - appendLine(" ]") - appendLine(" }") - appendLine("}") - } - val metadataFile = File(outputDir, "packaging-metadata.json") - metadataFile.writeText(metadata) - logger.info("Exported macOS packaging metadata to: ${metadataFile.absolutePath}") - } - - /** - * Copies a DMG asset file into the assets directory, preserving its extension. - * Returns the relative path (e.g. "dmg-assets/background.png") or null if no source file. - */ - private fun copyDmgAsset( - source: File?, - assetsDir: File, - baseName: String, - ): String? { - if (source == null || !source.isFile) return null - assetsDir.mkdirs() - val dest = File(assetsDir, "$baseName.${source.extension}") - // Skip copy when source is already the destination (e.g. padDmgBackgroundForTitleBar - // wrote directly into assetsDir). Kotlin's copyTo(overwrite=true) deletes the target - // before copying, which destroys the source when they are the same file (issue #166). - if (source.canonicalPath != dest.canonicalPath) { - source.copyTo(dest, overwrite = true) - logger.info("Copied DMG asset: ${source.absolutePath} → ${dest.absolutePath}") - } - return "dmg-assets/${dest.name}" - } - - private fun jsonStr(value: String?): String = value?.let { "\"${it.escapeForJson()}\"" } ?: "null" - - private fun ensureResourcesDirForElectronBuilder(appDir: File) { - if (currentOS == OS.MacOS) return - val resourcesDir = appDir.resolve("resources") - if (!resourcesDir.exists()) { - resourcesDir.mkdirs() - } - } - - private fun ensureMacAdHocSigning( - appDir: File, - targetFormat: TargetFormat, - ) { - if (currentOS != OS.MacOS) return - if (!appDir.isDirectory) return - - // For PKG (App Store), re-sign the .app with proper entitlements after .cfg modification. - // The jpackage task signed the app, but updateExecutableTypeInAppImage() modified .cfg - // files which invalidated the code signature. We must re-sign before electron-builder - // packages it into the PKG. - if (targetFormat == TargetFormat.Pkg) { - resignAppForPkg(appDir) - return - } - - // When signing is configured, re-sign properly with Developer ID so the app - // passes notarization (timestamp + hardened runtime). Without this, DMG/ZIP - // formats would ship with an ad-hoc signature that Apple rejects. - val signer = macSigner - if (signer != null && signer.settings != null) { - resignApp(appDir, "${targetFormat.name} format") - return - } - - // Fallback: ad-hoc signing for unsigned builds - logger.info("Applying ad-hoc code signature to macOS app before electron-builder packaging") - - execOperations.exec { spec -> - spec.executable = "codesign" - spec.args = - listOf( - "--force", - "--deep", - "--sign", - "-", - appDir.absolutePath, - ) - spec.isIgnoreExitValue = false - } - - logger.info("Ad-hoc signature applied successfully") - } - - /** - * Re-signs the .app bundle with the configured [macSigner], preserving Developer ID, - * secure timestamp, and hardened runtime. This is needed because - * [updateExecutableTypeInAppImage] modifies .cfg files which invalidates the - * code signature applied earlier by jpackage. - * - * Mirrors the signing flow in [AbstractJPackageTask.modifyRuntimeOnMacOsIfNeeded]: - * sign individual binaries inside-out, then seal each container directory. - */ - private fun resignApp( - appDir: File, - label: String, - ) { - val signer = macSigner ?: return - val appEntitlements = macEntitlementsFile.orNull?.asFile - val runtimeEntitlements = macRuntimeEntitlementsFile.orNull?.asFile - - logger.info("Re-signing macOS app after .cfg modification for $label") - - // Re-sign all executables and dylibs in the runtime directory - val runtimeDir = appDir.resolve("Contents/runtime") - if (runtimeDir.exists()) { - runtimeDir.walk().forEach { file -> - val path = file.toPath() - if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS) && - (path.isExecutable() || file.name.isDylibPath) - ) { - signer.sign(file, runtimeEntitlements) - } - } - signer.sign(runtimeDir, runtimeEntitlements, forceEntitlements = true) - } - - // Re-sign native libs in Frameworks directory - val frameworksDir = appDir.resolve("Contents/Frameworks") - if (frameworksDir.exists()) { - frameworksDir.walk().forEach { file -> - val path = file.toPath() - if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS) && file.name.isDylibPath) { - signer.sign(file, appEntitlements) - } - } - } - - // Re-sign the entire app bundle - signer.sign(appDir, appEntitlements, forceEntitlements = true) - } - - /** - * Re-signs the .app bundle for PKG builds (always App Store). - * Delegates to [resignApp] for the core signing, then augments entitlements - * with application-identifier and team-identifier for App Store submissions. - */ - private fun resignAppForPkg(appDir: File) { - resignApp(appDir, "PKG format") - - // For App Store builds, re-sign the bundle with augmented entitlements - // (application-identifier + team-identifier required by TestFlight / Transporter, error 90886). - if (macAppStore.orNull == true) { - val signer = macSigner ?: return - val appEntitlements = macEntitlementsFile.orNull?.asFile - // augmentEntitlementsForAppStore returns null when settings is null (NoCertificateSigner / - // unsigned builds). Fall back to the original entitlements so the app is never re-signed - // without them — which would silently strip sandbox entitlements from the bundle. - val bundleEntitlements = augmentEntitlementsForAppStore(appEntitlements, signer.settings) - signer.sign(appDir, bundleEntitlements ?: appEntitlements, forceEntitlements = true) - } - } - - /** - * Returns a copy of [entitlements] with `com.apple.application-identifier` and - * `com.apple.developer.team-identifier` injected, which Apple requires for - * TestFlight / App Store submissions. - */ - private fun augmentEntitlementsForAppStore( - entitlements: File?, - settings: ValidatedMacOSSigningSettings?, - ): File? { - if (entitlements == null || settings == null) return null - - val teamId = settings.teamID - if (teamId == null) { - logger.warn( - "Cannot extract team ID from signing identity '${settings.identity}'. " + - "Add com.apple.application-identifier to your entitlements manually.", - ) - return entitlements - } - val bundleId = settings.bundleID - val appIdentifier = "$teamId.$bundleId" - - val content = entitlements.readText() - if (content.contains("com.apple.application-identifier")) return entitlements - - logger.info("Injecting application-identifier ($appIdentifier) into entitlements for App Store") - - val additions = - """ - | com.apple.application-identifier - | $appIdentifier - | com.apple.developer.team-identifier - | $teamId - """.trimMargin() - val augmented = content.replace("", "$additions\n") - - val tempFile = File.createTempFile("entitlements-appstore-", ".plist") - tempFile.deleteOnExit() - tempFile.writeText(augmented) - return tempFile - } - - /** - * Signs the PKG installer for App Store distribution using `productsign`. - * - * PKG is always treated as an App Store format. electron-builder creates an - * unsigned PKG (installer identity is always null), and this method re-signs - * it with the correct "3rd Party Mac Developer Installer" certificate. - */ - private fun signPkgInstaller(outputDir: File) { - if (currentOS != OS.MacOS) return - if (macAppStore.orNull != true) return - - val signer = macSigner ?: return - val settings = signer.settings ?: return - - // Resolve the installer identity from the configured Application identity - val installerIdentity = "3rd Party Mac Developer Installer: ${settings.bareIdentityName}" - - val pkgFile = - outputDir - .listFiles() - ?.firstOrNull { it.isFile && it.extension == "pkg" } - ?: run { - logger.warn("No .pkg file found in output directory; skipping PKG signing") - return - } - - logger.info("Signing PKG installer for App Store: ${pkgFile.name}") - logger.info("Using installer identity: $installerIdentity") - - val signedPkg = File(outputDir, "${pkgFile.nameWithoutExtension}-signed.pkg") - val keychainPath = settings.keychain?.absolutePath - - execOperations.exec { spec -> - spec.executable = "productsign" - spec.args = - buildList { - add("--sign") - add(installerIdentity) - if (keychainPath != null) { - add("--keychain") - add(keychainPath) - } - add(pkgFile.absolutePath) - add(signedPkg.absolutePath) - } - spec.isIgnoreExitValue = false - } - - // Replace the unsigned PKG with the signed one - pkgFile.delete() - signedPkg.renameTo(pkgFile) - logger.lifecycle("Signed PKG installer: ${pkgFile.name}") - } - - private fun prepareLinuxIconSet(outputDir: File): File? { - if (currentOS != OS.Linux) return null - - val iconFile = linuxIconFile.orNull?.asFile ?: return null - if (!iconFile.isFile) { - logger.warn("Linux icon file not found: ${iconFile.absolutePath}") - return null - } - - val extension = iconFile.extension.lowercase(Locale.ROOT) - if (extension != "png") { - // Let electron-builder handle non-PNG icons as-is. - return iconFile - } - - val source = ImageIO.read(iconFile) - if (source == null) { - logger.warn("Unable to read Linux icon: ${iconFile.absolutePath}") - return iconFile - } - - val iconsDir = outputDir.resolve("linux-icons") - if (iconsDir.exists()) iconsDir.deleteRecursively() - iconsDir.mkdirs() - - @Suppress("MagicNumber") - val sizes = listOf(16, 32, 48, 64, 128, 256, 512) - for (size in sizes) { - val resized = resizeIcon(source, size, size) - val target = iconsDir.resolve("${size}x$size.png") - ImageIO.write(resized, "png", target) - } - logger.info("Generated Linux icon set at: ${iconsDir.absolutePath}") - return iconsDir - } - - private fun resolveWindowsIcon(): File? { - if (currentOS != OS.Windows) return null - - val iconFile = windowsIconFile.orNull?.asFile ?: return null - if (!iconFile.isFile) { - logger.warn("Windows icon file not found: ${iconFile.absolutePath}") - return null - } - return iconFile - } - - private data class AppXAsset( - val targetFileName: String, - val width: Int, - val height: Int, - val source: File?, - ) - - private fun stageAppXAssets( - outputDir: File, - windowsIconOverride: File?, - hasExplicitWindowsIcon: Boolean, - ) { - val stagedAssetsDir = outputDir.resolve("build").resolve("appx") - stagedAssetsDir.deleteRecursively() - - val assets = appXAssets() - validateAppXAssetSources(assets) - val fallbackImage = resolveAppXFallbackImage(windowsIconOverride, hasExplicitWindowsIcon) - - if (assets.none { it.source != null } && fallbackImage == null) return - - stagedAssetsDir.mkdirs() - copyOrGenerateAppXAssets(assets, stagedAssetsDir, fallbackImage) - - if (assets.any { it.source == null } && fallbackImage == null) { - logger.warn( - "Some AppX assets are missing and no readable fallback icon was found. " + - "Provide AppX logo files explicitly to avoid incomplete assets.", - ) - } - } - - private fun appXAssets(): List = - listOf( - AppXAsset("StoreLogo.png", APPX_STORE_LOGO_SIZE, APPX_STORE_LOGO_SIZE, appxStoreLogo.orNull?.asFile), - AppXAsset( - "Square44x44Logo.png", - APPX_SQUARE44_LOGO_SIZE, - APPX_SQUARE44_LOGO_SIZE, - appxSquare44x44Logo.orNull?.asFile, - ), - AppXAsset( - "Square150x150Logo.png", - APPX_SQUARE150_LOGO_SIZE, - APPX_SQUARE150_LOGO_SIZE, - appxSquare150x150Logo.orNull?.asFile, - ), - AppXAsset( - "Wide310x150Logo.png", - APPX_WIDE_LOGO_WIDTH, - APPX_WIDE_LOGO_HEIGHT, - appxWide310x150Logo.orNull?.asFile, - ), - ) - - private fun validateAppXAssetSources(assets: List) { - for (asset in assets) { - val source = asset.source ?: continue - if (!source.isFile) { - throw GradleException("AppX asset file not found: ${source.absolutePath}") - } - } - } - - private fun resolveAppXFallbackImage( - windowsIconOverride: File?, - hasExplicitWindowsIcon: Boolean, - ): BufferedImage? = - readImage(windowsIconOverride) - ?: if (!hasExplicitWindowsIcon) readImage(linuxIconFile.orNull?.asFile) else null - - private fun copyOrGenerateAppXAssets( - assets: List, - stagedAssetsDir: File, - fallbackImage: BufferedImage?, - ) { - for (asset in assets) { - val target = stagedAssetsDir.resolve(asset.targetFileName) - val source = asset.source - if (source != null) { - source.copyTo(target, overwrite = true) - } else if (fallbackImage != null) { - val generated = resizeIconToCanvas(fallbackImage, asset.width, asset.height) - ImageIO.write(generated, "png", target) - } - } - } - - private fun readImage(file: File?): BufferedImage? { - if (file == null || !file.isFile) return null - return ImageIO.read(file) - } - - private fun shouldSkipForMissingTool(): Boolean { - if (currentOS != OS.Linux) return false - - return when (targetFormat) { - TargetFormat.Snap -> { - if (!isCommandAvailable("snapcraft")) { - logger.lifecycle("Skipping Snap packaging: 'snapcraft' is not available on this runner.") - true - } else if (currentArch == Arch.Arm64) { - logger.lifecycle( - "Skipping Snap packaging on arm64: electron-builder uses " + - "build-snaps (gnome-3-28-1804) unavailable for arm64.", - ) - true - } else { - false - } - } - TargetFormat.Flatpak -> { - if (!isCommandAvailable("flatpak")) { - logger.lifecycle( - "Skipping Flatpak packaging: 'flatpak' is not available on this runner. " + - "Install it with: sudo apt-get install -y flatpak flatpak-builder", - ) - true - } else { - false - } - } - else -> false - } - } - - private fun isCommandAvailable(command: String): Boolean { - val stdout = ByteArrayOutputStream() - val stderr = ByteArrayOutputStream() - return try { - val result = - execOperations.exec { spec -> - spec.executable = "sh" - spec.args = listOf("-lc", "command -v $command >/dev/null 2>&1") - spec.isIgnoreExitValue = true - spec.standardOutput = stdout - spec.errorOutput = stderr - } - result.exitValue == 0 - } catch (_: Exception) { - false - } - } - - private fun prepareLinuxAfterInstallTemplate(outputDir: File): File? { - if (currentOS != OS.Linux) return null - if (targetFormat != TargetFormat.Deb && targetFormat != TargetFormat.Rpm) return null - - val templateFile = outputDir.resolve("after-install-nucleus.tpl") - val script = - $$""" - #!/bin/bash - - if type update-alternatives >/dev/null 2>&1; then - # Remove previous link if it doesn't use update-alternatives - if [ -L '/usr/bin/${executable}' -a -e '/usr/bin/${executable}' -a "`readlink '/usr/bin/${executable}'`" != '/etc/alternatives/${executable}' ]; then - rm -f '/usr/bin/${executable}' - fi - update-alternatives --install '/usr/bin/${executable}' '${executable}' '/opt/${sanitizedProductName}/${executable}' 100 || ln -sf '/opt/${sanitizedProductName}/${executable}' '/usr/bin/${executable}' - else - ln -sf '/opt/${sanitizedProductName}/${executable}' '/usr/bin/${executable}' - fi - - SANDBOX_PATH='/opt/${sanitizedProductName}/chrome-sandbox' - if [ -e "$SANDBOX_PATH" ]; then - # Check if user namespaces are supported by the kernel and working with a quick test: - if ! { [[ -L /proc/self/ns/user ]] && unshare --user true; }; then - # Use SUID chrome-sandbox only on systems without user namespaces: - chmod 4755 "$SANDBOX_PATH" || true - else - chmod 0755 "$SANDBOX_PATH" || true - fi - fi - - if hash update-mime-database 2>/dev/null; then - update-mime-database /usr/share/mime || true - fi - - if hash update-desktop-database 2>/dev/null; then - update-desktop-database /usr/share/applications || true - fi - - # Install apparmor profile. (Ubuntu 24+) - # First check if the version of AppArmor running on the device supports our profile. - # This is in order to keep backwards compatibility with Ubuntu 22.04 which does not support abi/4.0. - # In that case, we just skip installing the profile since the app runs fine without it on 22.04. - # - # Those apparmor_parser flags are akin to performing a dry run of loading a profile. - # https://wiki.debian.org/AppArmor/HowToUse#Dumping_profiles - # - # Unfortunately, at the moment AppArmor doesn't have a good story for backwards compatibility. - # https://askubuntu.com/questions/1517272/writing-a-backwards-compatible-apparmor-profile - if apparmor_status --enabled > /dev/null 2>&1; then - APPARMOR_PROFILE_SOURCE='/opt/${sanitizedProductName}/resources/apparmor-profile' - APPARMOR_PROFILE_TARGET='/etc/apparmor.d/${executable}' - if apparmor_parser --skip-kernel-load --debug "$APPARMOR_PROFILE_SOURCE" > /dev/null 2>&1; then - cp -f "$APPARMOR_PROFILE_SOURCE" "$APPARMOR_PROFILE_TARGET" - - # Updating the current AppArmor profile is not possible and probably not meaningful in a chroot'ed environment. - # Use cases are for example environments where images for clients are maintained. - # There, AppArmor might correctly be installed, but live updating makes no sense. - if ! { [ -x '/usr/bin/ischroot' ] && /usr/bin/ischroot; } && hash apparmor_parser 2>/dev/null; then - # Extra flags taken from dh_apparmor: - # > By using '-W -T' we ensure that any abstraction updates are also pulled in. - # https://wiki.debian.org/AppArmor/Contribute/FirstTimeProfileImport - apparmor_parser --replace --write-cache --skip-read-cache "$APPARMOR_PROFILE_TARGET" - fi - else - echo "Skipping the installation of the AppArmor profile as this version of AppArmor does not seem to support the bundled profile" - fi - fi - """.trimIndent() + "\n" - - templateFile.writeText(script) - logger.info("Generated Linux after-install template at: ${templateFile.absolutePath}") - return templateFile - } - - private fun resizeIcon( - source: BufferedImage, - width: Int, - height: Int, - ): BufferedImage = - Thumbnails - .of(source) - .forceSize(width, height) - .imageType(BufferedImage.TYPE_INT_ARGB) - .asBufferedImage() - - private fun resizeIconToCanvas( - source: BufferedImage, - width: Int, - height: Int, - ): BufferedImage = - Thumbnails - .of(source) - .size(width, height) - .keepAspectRatio(true) - .addFilter(Canvas(width, height, Positions.CENTER, true, Color(0, 0, 0, 0))) - .imageType(BufferedImage.TYPE_INT_ARGB) - .asBufferedImage() - - private fun ensureLinuxExecutableAlias(appDir: File) { - if (currentOS != OS.Linux) return - - val launcherName = packageName.get() - - // jpackage layout: bin/{packageName} - val jpackageLauncher = appDir.resolve("bin").resolve(launcherName) - - // GraalVM native image layout: executable directly in appDir/ - // The binary name may differ from packageName (e.g. imageName), so - // look for any executable file in appDir root. - val graalvmLauncher = - if (!jpackageLauncher.isFile) { - appDir.listFiles()?.firstOrNull { it.isFile && it.canExecute() } - } else { - null - } - - val launcher = jpackageLauncher.takeIf { it.isFile } ?: graalvmLauncher - if (launcher == null) { - logger.warn( - "Expected launcher not found at ${jpackageLauncher.absolutePath}. " + - "Skipping Linux executable alias creation.", - ) - return - } - - val relativePath = launcher.relativeTo(appDir).path - - val aliasName = executableName.orNull ?: launcherName.toNpmPackageName() - val aliasFile = appDir.resolve(aliasName) - if (aliasFile.exists()) return - - val script = - $$""" - #!/usr/bin/env sh - SCRIPT="$0" - while [ -L "$SCRIPT" ]; do - TARGET="$(readlink "$SCRIPT")" - case "$TARGET" in - /*) SCRIPT="$TARGET" ;; - *) SCRIPT="$(dirname "$SCRIPT")/$TARGET" ;; - esac - done - DIR="$(cd "$(dirname "$SCRIPT")" && pwd)" - exec "$DIR/$$relativePath" "$@" - """.trimIndent() + "\n" - - aliasFile.writeText(script) - // Ensure mode is effectively 0755 to keep launcher visible/runnable for non-root users. - aliasFile.setReadable(true, false) - aliasFile.setWritable(false, false) - aliasFile.setWritable(true, true) - aliasFile.setExecutable(true, false) - logger.info("Created Linux launcher alias: ${aliasFile.absolutePath}") - } - - private fun ensureProjectPackageMetadata( - outputDir: File, - distributions: JvmApplicationDistributions, - ) { - val packageJson = File(outputDir, "package.json") - if (packageJson.exists()) return - - val normalizedName = (executableName.orNull ?: packageName.get()).toNpmPackageName() - val normalizedVersion = packageVersion.orNull?.takeIf { it.isNotBlank() } ?: "1.0.0" - val normalizedDescription = - distributions.description?.takeIf { it.isNotBlank() } - ?: "Packaged desktop application" - val normalizedAuthor = - distributions.vendor?.takeIf { it.isNotBlank() } - ?: "Unknown" - val repositoryUrl = - distributions.publish.github - .takeIf { it.enabled } - ?.let { github -> - val owner = github.owner?.takeIf { value -> value.isNotBlank() } - val repo = github.repo?.takeIf { value -> value.isNotBlank() } - if (owner != null && repo != null) { - "https://github.com/$owner/$repo.git" - } else { - null - } - } - val repositoryField = - repositoryUrl - ?.let { value -> - ",\n \"repository\": \"${value.escapeForJson()}\"" - }.orEmpty() - - packageJson.writeText( - """ - { - "name": "${normalizedName.escapeForJson()}", - "version": "${normalizedVersion.escapeForJson()}", - "description": "${normalizedDescription.escapeForJson()}", - "author": "${normalizedAuthor.escapeForJson()}", - "private": true$repositoryField - } - """.trimIndent(), - ) - logger.info("Generated package metadata for electron-builder: ${packageJson.absolutePath}") - } - - private fun String.toNpmPackageName(): String = - lowercase(Locale.ROOT) - .replace(Regex("[^a-z0-9._-]"), "-") - .trim('-') - .ifBlank { "app" } - - private fun String.escapeForJson(): String = - replace("\\", "\\\\") - .replace("\"", "\\\"") - .replace("\n", "\\n") - .replace("\r", "\\r") - .replace("\t", "\\t") - - /** - * Removes parasitic executable files that electron-builder may copy from the app-image - * into the output directory. These raw executables (e.g. java.exe, AppName.exe) are not - * installers and should not be published as release assets. - */ - private fun cleanupParasiticFiles(outputDir: File) { - if (currentOS != OS.Windows) return - - val knownParasitic = setOf("java.exe", "javaw.exe") - val rawLauncherName = "${packageName.get()}.exe" - - outputDir.listFiles()?.forEach { file -> - if (!file.isFile) return@forEach - if (file.name in knownParasitic || file.name.equals(rawLauncherName, ignoreCase = true)) { - logger.info("Removing parasitic executable from output: ${file.name}") - file.delete() - } - } - } - - /** - * Removes isolated caches and the task-private app image copy created - * for parallel-safe builds. Called only after electron-builder finishes. - */ - private fun cleanupBuildTemporaries(outputDir: File) { - for (dirName in listOf(".npm-cache", ".npm-prefix", ".electron-builder-cache", ".app-image")) { - val dir = File(outputDir, dirName) - if (dir.isDirectory) { - dir.deleteRecursively() - } - } - File(outputDir, ".npmrc-user").delete() - File(outputDir, ".npmrc-global").delete() - } - - /** - * Resolves the actual app directory inside the jpackage app-image output. - * - * jpackage produces: `/` on Linux/Windows - * or `/.app` on macOS. - */ - private fun resolveAppImageDir(): File { - val root = appImageRoot.ioFile - if (!root.isDirectory) { - throw GradleException("App image directory not found: ${root.absolutePath}") - } - - val name = packageName.get() - - // Try platform-specific name, then plain name, then single-child fallback - val resolved = - when { - currentOS == OS.MacOS && root.resolve("$name.app").isDirectory -> - root.resolve("$name.app") - root.resolve(name).isDirectory -> root.resolve(name) - else -> root.listFiles()?.singleOrNull { it.isDirectory } - } - - return resolved ?: throw GradleException( - "Unable to locate app image directory. " + - "Expected '$name' or '$name.app' inside: ${root.absolutePath}", - ) - } - - /** - * Builds the electron-builder CLI target arguments based on the current OS and target format. - * - * electron-builder uses platform flags: `--linux`, `--win`, `--mac` - * followed by the target type (e.g., `deb`, `nsis`, `dmg`). - */ - private fun buildElectronBuilderTargets(): List { - val platformFlag = - when (currentOS) { - OS.Linux -> "--linux" - OS.Windows -> "--win" - OS.MacOS -> "--mac" - } - - return listOf(platformFlag, targetFormat.electronBuilderTarget) - } - } - -/** - * Creates a task-private copy of the app image directory so that parallel - * packaging tasks do not interfere with each other when modifying .cfg files, - * signing the bundle, or when electron-builder writes into the prepackaged dir. - * - * The copy is placed under `/.app-image/` and is cleaned - * up by [AbstractElectronBuilderPackageTask.cleanupParasiticFiles] after electron-builder finishes. - */ -private fun copyAppImage( - source: File, - outputDir: File, - logger: Logger, -): File { - val workingRoot = File(outputDir, ".app-image") - val destination = File(workingRoot, source.name) - if (destination.exists()) { - deleteWithRetry(destination, logger) - } - - logger.info("Copying app image to task-private working directory: ${destination.absolutePath}") - val srcPath = source.toPath() - val destPath = destination.toPath() - - Files.walkFileTree( - srcPath, - emptySet(), - Int.MAX_VALUE, - object : SimpleFileVisitor() { - override fun preVisitDirectory( - dir: Path, - attrs: BasicFileAttributes, - ): FileVisitResult { - Files.createDirectories(destPath.resolve(srcPath.relativize(dir))) - return FileVisitResult.CONTINUE - } - - override fun visitFile( - file: Path, - attrs: BasicFileAttributes, - ): FileVisitResult { - val target = destPath.resolve(srcPath.relativize(file)) - if (Files.isSymbolicLink(file)) { - Files.createSymbolicLink(target, Files.readSymbolicLink(file)) - } else { - Files.copy( - file, - target, - StandardCopyOption.COPY_ATTRIBUTES, - StandardCopyOption.REPLACE_EXISTING, - LinkOption.NOFOLLOW_LINKS, - ) - } - return FileVisitResult.CONTINUE - } - }, - ) - return destination -} - -/** - * Returns an env map that isolates npm and electron-builder caches to subdirectories - * of [outputDir]. This prevents EPERM/EBUSY errors on Windows when multiple - * electron-builder tasks run in parallel and compete for shared caches (npx cache, - * NSIS downloads, etc.). The prefix is also isolated to avoid npm 11+ ECOMPROMISED - * errors caused by concurrent npx invocations sharing the global prefix. - * - * Additional npm config isolation (userconfig, globalconfig) prevents npm from - * reading shared config files that could cause lock contention on Windows ARM64. - */ -private fun isolatedCacheEnv(outputDir: File): Map { - val cacheDir = File(outputDir, ".npm-cache").apply { mkdirs() } - val prefixDir = - File(outputDir, ".npm-prefix").apply { - mkdirs() - File(this, "lib").mkdirs() - } - val ebCacheDir = File(outputDir, ".electron-builder-cache").apply { mkdirs() } - // Per-task .npmrc files prevent npm from reading/writing shared user/global config. - // They must be separate files — npm rejects loading the same file as both user and global. - val userNpmrc = File(outputDir, ".npmrc-user").apply { if (!exists()) createNewFile() } - val globalNpmrc = File(outputDir, ".npmrc-global").apply { if (!exists()) createNewFile() } - return mapOf( - "NPM_CONFIG_CACHE" to cacheDir.absolutePath, - "NPM_CONFIG_PREFIX" to prefixDir.absolutePath, - "NPM_CONFIG_USERCONFIG" to userNpmrc.absolutePath, - "NPM_CONFIG_GLOBALCONFIG" to globalNpmrc.absolutePath, - "NPM_CONFIG_UPDATE_NOTIFIER" to "false", - "ELECTRON_BUILDER_CACHE" to ebCacheDir.absolutePath, - ) -} - -private fun resolveElectronBuilderEnvironment( - targetFormat: TargetFormat, - currentOs: OS, - currentArchitecture: Arch, - logger: Logger, -): Map { - val env = mutableMapOf() - - // macOS: disable automatic certificate discovery when no signing identity is configured - if (currentOs == OS.MacOS) { - env["CSC_IDENTITY_AUTO_DISCOVERY"] = "false" - } - - // Windows: auto-configure SignTool path for electron-builder signing - val noExternalSignToolConfigured = - currentOs == OS.Windows && - System.getenv("SIGNTOOL_PATH").isNullOrBlank() && - System.getenv("WINDOWS_SIGNTOOL_PATH").isNullOrBlank() - - if (noExternalSignToolConfigured) { - val architectureId = - when (currentArchitecture) { - Arch.X64 -> "x64" - Arch.Arm64 -> "arm64" - } - val signToolPath = WindowsKitsLocator.locateSignTool(architectureId)?.absolutePath - if (signToolPath != null) { - logger.info("Using Windows SDK SignTool: $signToolPath") - env["SIGNTOOL_PATH"] = signToolPath - env["WINDOWS_SIGNTOOL_PATH"] = signToolPath - } - } - - // Linux Snap: use destructive mode so snapcraft doesn't require LXD/multipass - if (currentOs == OS.Linux && targetFormat == TargetFormat.Snap) { - env["SNAPCRAFT_BUILD_ENVIRONMENT"] = "host" - } - - return env -} - -private const val DELETE_MAX_RETRIES = 5 -private const val DELETE_RETRY_DELAY_MS = 1000L - -/** - * Deletes [dir] with retries. On Windows, files may be locked by processes - * (e.g. a previously launched AppX app or antivirus). Before each retry, - * attempts to kill any process whose executable resides inside [dir]. - */ -private fun deleteWithRetry( - dir: File, - logger: Logger, -) { - for (attempt in 1..DELETE_MAX_RETRIES) { - // Kill processes that may lock files inside the directory - killProcessesIn(dir, logger) - if (dir.deleteRecursively()) return - logger.warn("Failed to delete ${dir.absolutePath} (attempt $attempt/$DELETE_MAX_RETRIES)") - if (attempt < DELETE_MAX_RETRIES) Thread.sleep(DELETE_RETRY_DELAY_MS) - } - // Last resort: try once more and throw if it still fails - if (dir.exists() && !dir.deleteRecursively()) { - error("Cannot delete ${dir.absolutePath} after $DELETE_MAX_RETRIES attempts. Is a process locking files?") - } -} - -/** - * On Windows, kills any running processes whose executable path is inside [dir]. - */ -private fun killProcessesIn( - dir: File, - logger: Logger, -) { - if (!System.getProperty("os.name", "").contains("Windows", ignoreCase = true)) return - try { - val dirPath = dir.absolutePath.lowercase() - ProcessHandle.allProcesses().forEach { ph -> - val cmd = - ph - .info() - .command() - .orElse(null) - ?.lowercase() ?: return@forEach - if (cmd.startsWith(dirPath)) { - logger.info("Killing process ${ph.pid()} ($cmd)") - ph.destroyForcibly() - } - } - // Also try taskkill for the app exe name (covers processes launched from installed AppX location) - dir - .listFiles() - ?.filter { it.extension.equals("exe", ignoreCase = true) } - ?.forEach { exe -> - try { - val rt = Runtime.getRuntime() - rt.exec(arrayOf("taskkill", "/F", "/IM", exe.name)).waitFor() - } catch (_: Exception) { - // ignore — process may not be running - } - } - Thread.sleep(DELETE_RETRY_DELAY_MS) - } catch (e: Exception) { - logger.warn("Failed to kill locked processes: ${e.message}") - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt deleted file mode 100644 index e5a336d44..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractExtractNativeLibsTask.kt +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeArch -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector.NativeOs -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.BufferedInputStream -import java.util.zip.ZipInputStream - -/** - * Extracts native libraries from dependency JARs and places them in an output directory - * so they can be included in app resources (and signed automatically by the packaging plugin). - * - * This is required for macOS App Sandbox compatibility: sandboxed apps cannot load - * unsigned native code extracted to temp directories at runtime. - */ -@DisableCachingByDefault(because = "Extracts native libs from JARs; output depends on JAR content order") -abstract class AbstractExtractNativeLibsTask : AbstractNucleusTask() { - @get:InputFiles - @get:PathSensitive(PathSensitivity.NAME_ONLY) - abstract val inputJars: ConfigurableFileCollection - - @get:Input - abstract val targetOs: Property - - @get:Input - abstract val targetArch: Property - - @get:OutputDirectory - abstract val outputDir: DirectoryProperty - - @Suppress("NestedBlockDepth") - @TaskAction - fun extract() { - val outDir = outputDir.get().asFile - if (outDir.exists()) { - outDir.deleteRecursively() - } - outDir.mkdirs() - - val expectedOs = mapOs(targetOs.get()) ?: return - val expectedArch = mapArch(targetArch.get()) ?: return - - val extractedFiles = mutableSetOf() - - for (jarFile in inputJars.files) { - if (!jarFile.name.endsWith(".jar") || !jarFile.exists()) continue - - ZipInputStream(BufferedInputStream(jarFile.inputStream())).use { zis -> - var entry = zis.nextEntry - while (entry != null) { - if (!entry.isDirectory && NativeLibArchDetector.isNativeLib(entry.name)) { - val info = detectInfo(entry.name, zis) - if (shouldExtract(info, expectedOs, expectedArch)) { - val fileName = entry.name.substringAfterLast('/') - // Always flatten to the output root. We already filter by - // target OS/arch so there are no naming conflicts, and - // flattening is required for: - // 1. macOS universal builds – lipo needs the same relative - // path in both the arm64 and x64 .app bundles. - // 2. JNA boot library loading – jna.boot.library.path - // looks directly in the listed directories. - // 3. Simplicity – a single java.library.path entry is - // enough for all native libs. - val relativePath = fileName - if (fileName in extractedFiles) { - logger.warn( - "Sandboxing: skipping duplicate native lib" + - " '{}' from {} (already extracted from another JAR)", - fileName, - jarFile.name, - ) - } else { - val destFile = outDir.resolve(relativePath) - destFile.parentFile.mkdirs() - // Re-open the JAR to read the entry bytes - // (we may have consumed some for header detection) - extractEntry(jarFile, entry.name, destFile) - extractedFiles.add(fileName) - logger.lifecycle("Sandboxing: extracted '{}' from {}", relativePath, jarFile.name) - } - } - } - entry = zis.nextEntry - } - } - } - - if (extractedFiles.isEmpty()) { - logger.lifecycle("Sandboxing: no native libraries found to extract from dependency JARs") - } else { - logger.lifecycle("Sandboxing: extracted {} native lib(s) to {}", extractedFiles.size, outDir) - } - } - - private fun detectInfo( - entryName: String, - zis: ZipInputStream, - ): NativeLibArchDetector.NativeInfo { - val pathInfo = NativeLibArchDetector.detectFromPath(entryName) - if (pathInfo.os != NativeOs.UNKNOWN && pathInfo.arch != NativeArch.UNKNOWN) { - return pathInfo - } - // Fall back to binary header detection - @Suppress("MagicNumber") - val header = ByteArray(64) - val bytesRead = readFully(zis, header) - if (bytesRead > 0) { - return NativeLibArchDetector.detectFromHeader(header.copyOf(bytesRead)) - } - return pathInfo - } - - private fun shouldExtract( - info: NativeLibArchDetector.NativeInfo, - expectedOs: NativeOs, - expectedArch: NativeArch, - ): Boolean { - // Must match target OS - if (info.os != expectedOs && info.os != NativeOs.UNKNOWN) return false - // Must match target arch (or be universal/unknown) - if (info.arch != expectedArch && - info.arch != NativeArch.UNIVERSAL && - info.arch != NativeArch.UNKNOWN - ) { - return false - } - // Reject exotic OS/arch - if (info.os == NativeOs.OTHER || info.arch == NativeArch.OTHER) return false - // If both OS and arch are unknown, we can't determine — skip to be safe - if (info.os == NativeOs.UNKNOWN && info.arch == NativeArch.UNKNOWN) return false - return true - } - - @Suppress("NestedBlockDepth") - private fun extractEntry( - jarFile: java.io.File, - entryName: String, - destFile: java.io.File, - ) { - ZipInputStream(BufferedInputStream(jarFile.inputStream())).use { zis -> - var entry = zis.nextEntry - while (entry != null) { - if (entry.name == entryName) { - destFile.outputStream().use { out -> - zis.copyTo(out) - } - return - } - entry = zis.nextEntry - } - } - } - - private fun mapOs(os: String): NativeOs? = - when (os) { - "windows" -> NativeOs.WINDOWS - "linux" -> NativeOs.LINUX - "macos" -> NativeOs.MACOS - else -> null - } - - private fun mapArch(arch: String): NativeArch? = - when (arch) { - "x64" -> NativeArch.X64 - "arm64" -> NativeArch.ARM64 - else -> null - } - - private fun readFully( - input: java.io.InputStream, - buffer: ByteArray, - ): Int { - var totalRead = 0 - while (totalRead < buffer.size) { - val read = input.read(buffer, totalRead, buffer.size - totalRead) - if (read == -1) break - totalRead += read - } - return totalRead - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt deleted file mode 100644 index 6ef80f286..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import org.gradle.api.GradleException -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.File - -private const val AOT_CACHE_FILENAME = "app.aot" -private const val MIN_AOT_JDK_VERSION = 25 -private const val DEFAULT_SAFETY_TIMEOUT_SECONDS = 300L - -/** - * Generates a JDK 25+ AOT cache for a Compose Desktop distributable. - * - * This task: - * 1. Locates the distributable app directory (platform-specific layout) - * 2. Provisions a java launcher in the bundled runtime (if missing) - * 3. Parses the `.cfg` file for classpath, JVM options, and main class - * 4. Runs the app with `-XX:AOTCacheOutput` (single-step AOT, JDK 25+) - * 5. Injects `-XX:AOTCache=$APPDIR/app.aot` into the `.cfg` file - * - * The application **must** self-terminate during training by calling `System.exit(0)`. - * Use `AotRuntime.isTraining()` from the `aot-runtime` module to detect training mode. - */ -@DisableCachingByDefault(because = "AOT cache generation depends on runtime behavior") -abstract class AbstractGenerateAotCacheTask : AbstractNucleusTask() { - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val distributableDir: DirectoryProperty - - @get:Internal - val javaHome: Property = - objects.notNullProperty().apply { - set(providers.systemProperty("java.home")) - } - - @get:InputFile - @get:PathSensitive(PathSensitivity.NONE) - @get:Optional - val javaRuntimePropertiesFile: RegularFileProperty = objects.fileProperty() - - /** Runtime entitlements file for macOS. Used to re-sign jspawnhelper after AOT training. */ - @get:InputFile - @get:PathSensitive(PathSensitivity.NONE) - @get:Optional - val macRuntimeEntitlementsFile: RegularFileProperty = objects.fileProperty() - - /** Safety timeout in seconds. The task will force-kill the app if it has not exited within this time. */ - @get:Input - val safetyTimeoutSeconds: Property = - objects.notNullProperty().apply { - set(DEFAULT_SAFETY_TIMEOUT_SECONDS) - } - - @TaskAction - fun execute() { - checkJdkVersion() - - val baseDir = distributableDir.get().asFile - val appDir = findAppDir(baseDir) - - logger.lifecycle("[aotCache] Processing ${appDir.name}") - - val appJarDir = findAppJarDir(appDir) - val (javaExe, _) = provisionJavaLauncher(appDir) - - val cfgFile = - appJarDir.listFiles()?.firstOrNull { it.extension == "cfg" } - ?: throw GradleException("No .cfg file found in $appJarDir") - val (classpath, javaOptions, mainClass) = parseCfgFile(cfgFile, appJarDir) - - val aotCacheFile = File(appJarDir, AOT_CACHE_FILENAME) - generateAotCache(javaExe, appDir, appJarDir, classpath, javaOptions, mainClass, aotCacheFile) - - injectAotCacheIntoCfg(cfgFile) - - logger.lifecycle("[aotCache] Complete: ${aotCacheFile.absolutePath} (${aotCacheFile.length() / 1024}KB)") - } - - private fun checkJdkVersion() { - val propsFile = javaRuntimePropertiesFile.orNull?.asFile ?: return - if (!propsFile.exists()) return - val props = JvmRuntimeProperties.readFromFile(propsFile) - if (props.majorVersion < MIN_AOT_JDK_VERSION) { - throw GradleException( - "AOT cache generation requires JDK $MIN_AOT_JDK_VERSION or newer, " + - "but the configured JDK has major version ${props.majorVersion}. " + - "Set enableAotCache = false or configure a JDK $MIN_AOT_JDK_VERSION+ runtime.", - ) - } - } - - private fun findAppDir(baseDir: File): File { - val children = - baseDir - .listFiles() - ?.filter { it.isDirectory && it.name != ".DS_Store" } - ?: emptyList() - return when { - children.isEmpty() -> throw GradleException("Distributable app directory not found under $baseDir") - children.size == 1 -> children.single() - else -> throw GradleException( - "Expected a single app directory under $baseDir, found: ${children.joinToString { it.name }}", - ) - } - } - - private fun findAppJarDir(appDir: File): File = - listOf( - File(appDir, "Contents/app"), // macOS - File(appDir, "app"), // Windows - File(appDir, "lib/app"), // Linux - ).firstOrNull { it.exists() } - ?: throw GradleException("app/ subdirectory not found in $appDir") - - private fun provisionJavaLauncher(appDir: File): Pair { - val toolchainJavaExe = - File(javaHome.get()).resolve("bin").let { binDir -> - val exeName = if (isWindows()) "java.exe" else "java" - binDir.resolve(exeName).absolutePath - } - - val runtimeHome = - listOf( - File(appDir, "Contents/runtime/Contents/Home"), // macOS - File(appDir, "runtime"), // Windows - File(appDir, "lib/runtime"), // Linux - ).firstOrNull { it.exists() } - - if (runtimeHome == null) { - logger.warn("[aotCache] Bundled runtime not found, using toolchain java") - return toolchainJavaExe to false - } - - val runtimeBinDir = File(runtimeHome, "bin") - val exeName = if (isWindows()) "java.exe" else "java" - val provisionedJava = File(runtimeBinDir, exeName) - - if (provisionedJava.exists()) { - return provisionedJava.absolutePath to false - } - - runtimeBinDir.mkdirs() - File(toolchainJavaExe).copyTo(provisionedJava, overwrite = true) - provisionedJava.setExecutable(true) - - if (isWindows()) { - copyWindowsDlls(File(toolchainJavaExe).parentFile, runtimeBinDir) - } - - logger.lifecycle("[aotCache] Provisioned java launcher at ${provisionedJava.absolutePath}") - return provisionedJava.absolutePath to true - } - - private fun copyWindowsDlls( - toolchainBinDir: File, - runtimeBinDir: File, - ) { - val essentialDlls = setOf("jli.dll", "vcruntime140.dll", "msvcp140.dll", "ucrtbase.dll") - toolchainBinDir - .listFiles() - ?.filter { it.extension.lowercase() == "dll" && it.name.lowercase() in essentialDlls } - ?.forEach { dll -> - val target = File(runtimeBinDir, dll.name) - if (!target.exists()) { - dll.copyTo(target, overwrite = false) - } - } - } - - private data class CfgParseResult( - val classpath: String, - val javaOptions: List, - val mainClass: String, - ) - - private fun parseCfgFile( - cfgFile: File, - appJarDir: File, - ): CfgParseResult { - val cpEntries = mutableListOf() - val javaOptions = mutableListOf() - var mainClass = "" - var inClasspath = false - var inJavaOptions = false - - for (line in cfgFile.readLines()) { - val trimmed = line.trim() - when { - trimmed == "[JavaOptions]" -> { - inJavaOptions = true - inClasspath = false - } - trimmed == "[ClassPath]" -> { - inClasspath = true - inJavaOptions = false - } - trimmed == "[Application]" || trimmed == "[ArgOptions]" -> { - inClasspath = false - inJavaOptions = false - } - trimmed.startsWith("app.mainclass=") -> mainClass = trimmed.substringAfter("app.mainclass=").trim() - trimmed.startsWith("app.classpath=") -> cpEntries += trimmed.substringAfter("app.classpath=").trim() - trimmed.startsWith("[") -> { - inClasspath = false - inJavaOptions = false - } - inClasspath && trimmed.isNotEmpty() -> cpEntries += trimmed - inJavaOptions && trimmed.isNotEmpty() -> { - val opt = - if (trimmed.startsWith("java-options=")) { - trimmed.substringAfter("java-options=") - } else { - trimmed - } - if (!opt.contains("AOTCache")) { - javaOptions += opt.replace("\$APPDIR", appJarDir.absolutePath) - } - } - } - } - - val classpath = - cpEntries.joinToString(File.pathSeparator) { entry -> - File(entry.replace("\$APPDIR", appJarDir.absolutePath)).absolutePath - } - - return CfgParseResult(classpath, javaOptions, mainClass) - } - - /** - * Removes the `Sealed: true` manifest attribute from JARs whose sealed packages - * conflict with JBR platform modules. - * - * `jbr-api` is sealed (`Sealed: true` in MANIFEST.MF) and contains `com.jetbrains` - * classes that are also defined in the JBR platform class loader. When the AOT cache - * loads these pre-linked classes, the JVM tries to seal the `com.jetbrains` package - * but it is already defined by the platform → fatal `SecurityException`: - * "sealing violation: can't seal package com.jetbrains: already defined" - * - * Unsealing the JAR keeps the classes available on the classpath (needed for both - * training and runtime) while preventing the sealing conflict. - */ - private fun unsealConflictingJars(appJarDir: File) { - val jars = - appJarDir.listFiles().orEmpty().filter { - it.extension == "jar" && it.name.lowercase().startsWith("jbr-api") - } - for (jar in jars) { - logger.lifecycle("[aotCache] Unsealing ${jar.name} to prevent AOT sealing violation") - unsealJar(jar) - } - } - - private fun unsealJar(jarFile: File) { - val tmpFile = File(jarFile.parentFile, "${jarFile.name}.tmp") - val manifest = readAndUnsealManifest(jarFile) - writeUnsealedJar(jarFile, tmpFile, manifest) - tmpFile.renameTo(jarFile) - } - - private fun readAndUnsealManifest(jarFile: File): java.util.jar.Manifest = - java.util.jar.JarFile(jarFile).use { jar -> - java.util.jar.Manifest(jar.manifest).apply { - mainAttributes.remove(java.util.jar.Attributes.Name.SEALED) - entries.values.forEach { it.remove(java.util.jar.Attributes.Name.SEALED) } - } - } - - private fun writeUnsealedJar( - source: File, - target: File, - manifest: java.util.jar.Manifest, - ) { - val input = java.util.jar.JarFile(source) - val output = java.util.jar.JarOutputStream(target.outputStream(), manifest) - try { - for (entry in input.entries()) { - if (entry.name == java.util.jar.JarFile.MANIFEST_NAME) continue - output.putNextEntry(java.util.jar.JarEntry(entry.name)) - input.getInputStream(entry).use { it.copyTo(output) } - output.closeEntry() - } - } finally { - output.close() - input.close() - } - } - - private fun generateAotCache( - javaExe: String, - appDir: File, - appJarDir: File, - classpath: String, - javaOptions: List, - mainClass: String, - aotCacheFile: File, - ) { - unsealConflictingJars(appJarDir) - - val jspawnhelper = findJspawnhelper(appDir) - if (jspawnhelper != null) { - unsandboxJspawnhelper(jspawnhelper) - } - - logger.lifecycle("[aotCache] Training – waiting for the application to exit...") - try { - runAotCacheCreation(javaExe, appDir, classpath, javaOptions, mainClass, aotCacheFile) - } finally { - if (jspawnhelper != null) { - resandboxJspawnhelper(jspawnhelper) - } - } - - if (!aotCacheFile.exists()) { - throw GradleException("AOT cache file was not created at ${aotCacheFile.absolutePath}") - } - } - - private fun runAotCacheCreation( - javaExe: String, - appDir: File, - classpath: String, - javaOptions: List, - mainClass: String, - aotCacheFile: File, - ) { - val args = mutableListOf(javaExe) - args += "-XX:AOTCacheOutput=${aotCacheFile.absolutePath}" - args += "-Dnucleus.aot.mode=training" - args += "-cp" - args += classpath - args += javaOptions - args += mainClass - - val logFile = File.createTempFile("nucleus-aot-", ".log") - val processBuilder = - ProcessBuilder(args) - .directory(appDir) - .redirectErrorStream(true) - .redirectOutput(logFile) - - val isLinux = System.getProperty("os.name").lowercase().contains("linux") - val needsXvfb = isLinux && System.getenv("DISPLAY").isNullOrEmpty() - - var xvfbProcess: Process? = null - if (needsXvfb) { - val display = ":99" - xvfbProcess = - ProcessBuilder("Xvfb", display, "-screen", "0", "1280x1024x24") - .redirectErrorStream(true) - .start() - Thread.sleep(1000) - processBuilder.environment()["DISPLAY"] = display - logger.lifecycle("[aotCache] Started Xvfb on $display") - } - - val process = processBuilder.start() - - val deadline = System.currentTimeMillis() + safetyTimeoutSeconds.get() * 1000 - while (process.isAlive && System.currentTimeMillis() < deadline) { - Thread.sleep(500) - } - if (process.isAlive) { - logger.warn("[aotCache] App did not self-terminate within safety timeout, forcing kill") - process.destroyForcibly() - } - - val exitCode = process.waitFor() - xvfbProcess?.destroyForcibly() - - val output = logFile.readText().takeLast(3000) - if (output.isNotBlank()) { - logger.lifecycle("[aotCache] Output (exit $exitCode):\n$output") - } - logFile.delete() - - // Clean up JVM crash dumps - appDir.listFiles()?.filter { it.name.startsWith("hs_err_pid") }?.forEach { hsErr -> - logger.lifecycle("[aotCache] JVM crash dump: ${hsErr.name}") - // Only read text-based .log files; .mdmp files are binary minidumps - // that can be hundreds of MB and would cause OOM with readText() - if (hsErr.extension == "log") { - logger.lifecycle(hsErr.readText().take(2000)) - } - hsErr.delete() - } - } - - private fun injectAotCacheIntoCfg(cfgFile: File) { - val content = cfgFile.readText() - if (content.contains("AOTCache")) return - val updatedContent = - content.replace( - "[JavaOptions]", - "[JavaOptions]\njava-options=-XX:AOTCache=\$APPDIR/$AOT_CACHE_FILENAME", - ) - cfgFile.writeText(updatedContent) - logger.lifecycle("[aotCache] Injected AOTCache into ${cfgFile.name}") - } - - private fun isWindows(): Boolean = System.getProperty("os.name").lowercase().contains("windows") - - private fun isMacOS(): Boolean = System.getProperty("os.name").lowercase().contains("mac") - - /** - * Finds jspawnhelper in the bundled macOS runtime. - * jspawnhelper is used by the JVM to fork/exec child processes (needed for AOT cache assembly). - */ - private fun findJspawnhelper(appDir: File): File? { - if (!isMacOS()) return null - val runtimeHome = File(appDir, "Contents/runtime/Contents/Home") - if (!runtimeHome.exists()) return null - val jspawnhelper = File(runtimeHome, "lib/jspawnhelper") - return if (jspawnhelper.exists()) jspawnhelper else null - } - - /** - * Ad-hoc re-signs jspawnhelper without sandbox entitlements so it can spawn - * child processes during AOT training. Completely removing the signature - * causes macOS to SIGKILL the binary; ad-hoc signing avoids this. - */ - private fun unsandboxJspawnhelper(jspawnhelper: File) { - logger.lifecycle("[aotCache] Temporarily re-signing jspawnhelper without sandbox for AOT training") - runCodesign(listOf("codesign", "--force", "--sign", "-", jspawnhelper.absolutePath)) - } - - /** - * Re-signs jspawnhelper with the runtime entitlements after AOT training, - * restoring the app-sandbox entitlement required for Mac App Store. - */ - private fun resandboxJspawnhelper(jspawnhelper: File) { - val entitlementsFile = macRuntimeEntitlementsFile.orNull?.asFile - val args = mutableListOf("codesign", "--force", "--sign", "-") - if (entitlementsFile != null) { - args += listOf("--entitlements", entitlementsFile.absolutePath) - } - args += jspawnhelper.absolutePath - logger.lifecycle("[aotCache] Re-signing jspawnhelper with runtime entitlements") - runCodesign(args) - } - - @Suppress("TooGenericExceptionCaught") - private fun runCodesign(args: List) { - try { - val process = - ProcessBuilder(args) - .redirectErrorStream(true) - .start() - val output = process.inputStream.bufferedReader().readText() - val exitCode = process.waitFor() - if (exitCode != 0) { - logger.warn("[aotCache] codesign failed (exit $exitCode): $output") - } - } catch (e: Exception) { - logger.warn("[aotCache] codesign failed: ${e.message}") - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt deleted file mode 100644 index 8fe9ad04e..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractGenerateAppPropertiesTask.kt +++ /dev/null @@ -1,68 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.tasks - -import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.util.Properties - -@DisableCachingByDefault(because = "Lightweight task that writes a single properties file") -abstract class AbstractGenerateAppPropertiesTask : DefaultTask() { - @get:Input - abstract val appId: Property - - @get:Input - @get:Optional - abstract val appVersion: Property - - @get:Input - @get:Optional - abstract val appVendor: Property - - @get:Input - @get:Optional - abstract val appDescription: Property - - @get:Input - @get:Optional - abstract val appName: Property - - @get:Input - @get:Optional - abstract val appAumid: Property - - @get:Input - @get:Optional - abstract val startupWmClass: Property - - @get:Input - @get:Optional - abstract val startupTaskId: Property - - @get:OutputDirectory - abstract val outputDir: DirectoryProperty - - @TaskAction - fun generate() { - val dir = outputDir.get().asFile.resolve("nucleus") - dir.mkdirs() - - val props = Properties() - props["app.id"] = appId.get() - appVersion.orNull?.let { props["app.version"] = it } - appVendor.orNull?.let { props["app.vendor"] = it } - appDescription.orNull?.let { props["app.description"] = it } - appName.orNull?.let { props["app.name"] = it } - appAumid.orNull?.let { props["app.aumid"] = it } - startupWmClass.orNull?.let { props["startup.wm.class"] = it } - startupTaskId.orNull?.let { props["startup.task.id"] = it } - - dir.resolve("nucleus-app.properties").writer().use { writer -> - props.store(writer, null) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt deleted file mode 100644 index c3622e300..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJLinkTask.kt +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties -import dev.nucleusframework.nucleus.desktop.application.internal.RuntimeCompressionLevel -import dev.nucleusframework.nucleus.desktop.application.internal.cliArg -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.work.DisableCachingByDefault -import java.io.File - -// todo: public DSL -// todo: deduplicate if multiple runtimes are created -@DisableCachingByDefault(because = "Depends on external jlink tool") -@Suppress("UnnecessaryAbstractClass") -abstract class AbstractJLinkTask : AbstractJvmToolOperationTask("jlink") { - @get:Input - val modules: ListProperty = objects.listProperty(String::class.java) - - @get:Input - val includeAllModules: Property = objects.notNullProperty() - - @get:InputFile - @get:PathSensitive(PathSensitivity.NONE) - val javaRuntimePropertiesFile: RegularFileProperty = objects.fileProperty() - - @get:Input - internal val stripDebug: Property = objects.notNullProperty(true) - - @get:Input - internal val noHeaderFiles: Property = objects.notNullProperty(true) - - @get:Input - internal val noManPages: Property = objects.notNullProperty(true) - - @get:Input - internal val stripNativeCommands: Property = objects.notNullProperty(true) - - @get:Input - @get:Optional - internal val compressionLevel: Property = objects.nullableProperty() - - override fun makeArgs(tmpDir: File): MutableList = - super.makeArgs(tmpDir).apply { - val modulesToInclude = - if (includeAllModules.get()) { - JvmRuntimeProperties.readFromFile(javaRuntimePropertiesFile.ioFile).availableModules - } else { - modules.get() - } - modulesToInclude.forEach { m -> - cliArg("--add-modules", m) - } - - cliArg("--strip-debug", stripDebug) - cliArg("--no-header-files", noHeaderFiles) - cliArg("--no-man-pages", noManPages) - cliArg("--strip-native-commands", stripNativeCommands) - cliArg("--compress", compressionLevel.orNull?.id) - - cliArg("--output", destinationDir) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt deleted file mode 100644 index d28c88490..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ /dev/null @@ -1,910 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.dsl.FileAssociation -import dev.nucleusframework.nucleus.desktop.application.dsl.LaunchAgentDefinition -import dev.nucleusframework.nucleus.desktop.application.dsl.MacOSSigningSettings -import dev.nucleusframework.nucleus.desktop.application.internal.LaunchAgentPlistGenerator -import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat -import dev.nucleusframework.nucleus.desktop.application.dsl.UrlProtocol -import dev.nucleusframework.nucleus.desktop.application.internal.APP_RESOURCES_DIR -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue -import dev.nucleusframework.nucleus.desktop.application.internal.JvmRuntimeProperties -import dev.nucleusframework.nucleus.desktop.application.internal.MacAssetsTool -import dev.nucleusframework.nucleus.desktop.application.internal.MacSigner -import dev.nucleusframework.nucleus.desktop.application.internal.MacSignerImpl -import dev.nucleusframework.nucleus.desktop.application.internal.NoCertificateSigner -import dev.nucleusframework.nucleus.desktop.application.internal.PlistKeys -import dev.nucleusframework.nucleus.desktop.application.internal.SKIKO_LIBRARY_PATH -import dev.nucleusframework.nucleus.desktop.application.internal.cliArg -import dev.nucleusframework.nucleus.desktop.application.internal.files.FileCopyingProcessor -import dev.nucleusframework.nucleus.desktop.application.internal.files.MacJarSignFileCopyingProcessor -import dev.nucleusframework.nucleus.desktop.application.internal.files.SimpleFileCopyingProcessor -import dev.nucleusframework.nucleus.desktop.application.internal.files.copyTo -import dev.nucleusframework.nucleus.desktop.application.internal.files.copyZipEntry -import dev.nucleusframework.nucleus.desktop.application.internal.files.findOutputFileOrDir -import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath -import dev.nucleusframework.nucleus.desktop.application.internal.files.isJarFile -import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName -import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath -import dev.nucleusframework.nucleus.desktop.application.internal.files.transformJar -import dev.nucleusframework.nucleus.desktop.application.internal.javaOption -import dev.nucleusframework.nucleus.desktop.application.internal.validation.validate -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.clearDirs -import dev.nucleusframework.nucleus.internal.utils.currentArch -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.currentTarget -import dev.nucleusframework.nucleus.internal.utils.delete -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.ioFileOrNull -import dev.nucleusframework.nucleus.internal.utils.mkdirs -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import dev.nucleusframework.nucleus.internal.utils.stacktraceToString -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.Directory -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.FileSystemOperations -import org.gradle.api.file.RegularFile -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.provider.SetProperty -import org.gradle.api.tasks.Classpath -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.LocalState -import org.gradle.api.tasks.Nested -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.process.ExecResult -import org.gradle.work.ChangeType -import org.gradle.work.DisableCachingByDefault -import org.gradle.work.InputChanges -import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated -import java.io.File -import java.io.ObjectInputStream -import java.io.ObjectOutputStream -import java.io.Serializable -import java.nio.file.Files -import java.nio.file.LinkOption -import java.util.ArrayList -import java.util.Calendar -import java.util.HashMap -import java.util.HashSet -import javax.inject.Inject -import kotlin.io.path.isExecutable -import kotlin.io.path.isRegularFile - -/** - * Creates a jpackage app-image (the self-contained application directory with bundled JVM runtime). - * - * This task is now exclusively used for app-image creation (TargetFormat.RawAppImage). - * All final packaging into installer formats (DMG, DEB, RPM, NSIS, etc.) is handled - * by electron-builder via [AbstractElectronBuilderPackageTask]. - */ -@DisableCachingByDefault(because = "Depends on external jpackage tool") -@Suppress("UnnecessaryAbstractClass") -abstract class AbstractJPackageTask - @Inject - constructor( - @get:Input - val targetFormat: TargetFormat, - ) : AbstractJvmToolOperationTask("jpackage") { - @get:InputFiles - @get:Classpath - val files: ConfigurableFileCollection = objects.fileCollection() - - /** - * A hack to avoid conflicts between jar files in a flat dir. - * We receive input jar files as a list (FileCollection) of files. - * At that point we don't have access to jar files' coordinates. - * - * Some files can have the same simple names. - * For example, a project containing two modules: - * 1. :data:utils - * 2. :ui:utils - * produces: - * 1. /data/utils/build/../utils.jar - * 2. /ui/utils/build/../utils.jar - * - * jpackage expects all files to be in one input directory (not sure), - * so the natural workaround to avoid overwrites/conflicts is to add a content hash - * to a file name. A better solution would be to preserve coordinates or relative paths, - * but it is not straightforward at this point. - * - * The flag is needed for two things: - * 1. Give users the ability to turn off the mangling, if they need to preserve names; - * 2. Proguard transformation already flattens jar files & mangles names, so we don't - * need to mangle twice. - */ - @get:Input - val mangleJarFilesNames: Property = objects.notNullProperty(true) - - /** - * Indicates that task will get the uber JAR as input. - */ - @get:Input - val packageFromUberJar: Property = objects.notNullProperty(false) - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val iconFile: RegularFileProperty = objects.fileProperty() - - @get:Input - val launcherMainClass: Property = objects.notNullProperty() - - @get:InputFile - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val launcherMainJar: RegularFileProperty = objects.fileProperty() - - @get:Input - @get:Optional - val launcherArgs: ListProperty = objects.listProperty(String::class.java) - - @get:Input - @get:Optional - val launcherJvmArgs: ListProperty = objects.listProperty(String::class.java) - - @get:Input - val packageName: Property = objects.notNullProperty() - - @get:Input - @get:Optional - val appName: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val packageDescription: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val packageCopyright: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val packageVendor: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val packageVersion: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macPackageName: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macDockName: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macAppStore: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macAppCategory: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val macMinimumSystemVersion: Property = objects.nullableProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macEntitlementsFile: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macRuntimeEntitlementsFile: RegularFileProperty = objects.fileProperty() - - @get:Input - @get:Optional - val packageBuildVersion: Property = objects.nullableProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macProvisioningProfile: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val macRuntimeProvisioningProfile: RegularFileProperty = objects.fileProperty() - - @get:Input - @get:Optional - val winConsole: Property = objects.nullableProperty() - - @get:InputDirectory - @get:Optional - @get:PathSensitive(PathSensitivity.RELATIVE) - val runtimeImage: DirectoryProperty = objects.directoryProperty() - - @get:Input - @get:Optional - internal val nonValidatedMacBundleID: Property = objects.nullableProperty() - - @get:Input - @get:Optional - internal val macExtraPlistKeysRawXml: Property = objects.nullableProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.NONE) - val javaRuntimePropertiesFile: RegularFileProperty = objects.fileProperty() - - @get:Input - internal val fileAssociations: SetProperty = objects.setProperty(FileAssociation::class.java) - - @get:Input - internal val urlProtocols: ListProperty = objects.listProperty(UrlProtocol::class.java) - - @get:InputDirectory - @get:Optional - @get:PathSensitive(PathSensitivity.RELATIVE) - internal val macLayeredIcons: DirectoryProperty = objects.directoryProperty() - - @get:Input - internal val macLaunchAgents: ListProperty = - objects.listProperty(LaunchAgentDefinition::class.java).convention(emptyList()) - - @get:Input - @get:Optional - val macOsSdkVersion: Property = objects.nullableProperty() - - @get:Input - val sandboxingEnabled: Property = objects.notNullProperty(false) - - private val iconMapping by lazy { - val icons = fileAssociations.get().mapNotNull { it.iconFile }.distinct() - if (icons.isEmpty()) return@lazy emptyMap() - val iconTempNames: List = - mutableListOf().apply { - val usedNames = mutableSetOf("${packageName.get()}.icns") - for (icon in icons) { - if (!icon.exists()) continue - if (usedNames.add(icon.name)) { - add(icon.name) - continue - } - val nameWithoutExtension = icon.nameWithoutExtension - val extension = icon.extension - for (n in 1UL..ULong.MAX_VALUE) { - val newName = "$nameWithoutExtension ($n).$extension" - if (usedNames.add(newName)) { - add(newName) - break - } - } - } - } - val appDir = destinationDir.ioFile.resolve("${packageName.get()}.app") - val iconsDir = appDir.resolve("Contents").resolve("Resources") - if (iconsDir.exists()) { - iconsDir.deleteRecursively() - } - icons.zip(iconTempNames) { icon, newName -> icon to iconsDir.resolve(newName) }.toMap() - } - - private lateinit var jvmRuntimeInfo: JvmRuntimeProperties - - @get:Optional - @get:Nested - internal var nonValidatedMacSigningSettings: MacOSSigningSettings? = null - - private val shouldSign: Boolean - get() = nonValidatedMacSigningSettings?.sign?.get() == true - - private val macSigner: MacSigner? by lazy { - val nonValidatedSettings = nonValidatedMacSigningSettings - if (currentOS == OS.MacOS) { - if (shouldSign) { - val validatedSettings = - nonValidatedSettings!!.validate(nonValidatedMacBundleID, project, macAppStore) - MacSignerImpl(validatedSettings, runExternalTool) - } else { - NoCertificateSigner(runExternalTool) - } - } else { - null - } - } - - private val macAssetsTool by lazy { MacAssetsTool(runExternalTool, logger) } - - @get:LocalState - protected val signDir: Provider = project.layout.buildDirectory.dir("compose/tmp/sign") - - @get:LocalState - protected val jpackageResources: Provider = project.layout.buildDirectory.dir("compose/tmp/resources") - - @get:LocalState - protected val skikoDir: Provider = project.layout.buildDirectory.dir("compose/tmp/skiko") - - @get:Internal - private val libsDir: Provider = - workingDir.map { - it.dir("libs") - } - - @get:Internal - private val packagedResourcesDir: Provider = - libsDir.map { - it.dir("resources") - } - - @get:Internal - val appResourcesDir: DirectoryProperty = objects.directoryProperty() - - @get:Internal - private val libsMappingFile: Provider = - workingDir.map { - it.file("libs-mapping.txt") - } - - @get:Internal - private val libsMapping = FilesMapping() - - override fun makeArgs(tmpDir: File): MutableList = - super.makeArgs(tmpDir).apply { - fun appDir(vararg pathParts: String): String { - /** For windows we need to pass '\\' to jpackage file, each '\' need to be escaped. - Otherwise '$APPDIR\resources' is passed to jpackage, - and '\r' is treated as a special character at run time. - */ - val separator = if (currentTarget.os == OS.Windows) "\\\\" else "/" - return listOf("${'$'}APPDIR", *pathParts).joinToString(separator) { it } - } - - cliArg("--input", libsDir) - cliArg("--runtime-image", runtimeImage) - cliArg("--resource-dir", jpackageResources) - - javaOption("-D$APP_RESOURCES_DIR=${appDir(packagedResourcesDir.ioFile.name)}") - - val mappedJar = - libsMapping[launcherMainJar.ioFile]?.singleOrNull { it.isJarFile } - ?: error("Main jar was not processed correctly: ${launcherMainJar.ioFile}") - val mainJarPath = mappedJar.normalizedPath(base = libsDir.ioFile) - cliArg("--main-jar", mainJarPath) - cliArg("--main-class", launcherMainClass) - - if (currentOS == OS.Windows) { - cliArg("--win-console", winConsole) - } - cliArg("--icon", iconFile) - launcherArgs.orNull?.forEach { - cliArg("--arguments", "'$it'") - } - launcherJvmArgs.orNull?.forEach { - javaOption(it) - } - val skikoPath = - when { - sandboxingEnabled.get() && currentOS == OS.MacOS -> appDir("..", "Frameworks") - sandboxingEnabled.get() -> appDir("resources") - else -> appDir() - } - javaOption("-D$SKIKO_LIBRARY_PATH=$skikoPath") - if (currentOS == OS.MacOS) { - macDockName.orNull?.let { dockName -> - javaOption("-Xdock:name=$dockName") - } - macProvisioningProfile.orNull?.let { provisioningProfile -> - cliArg("--app-content", provisioningProfile) - } - } - - cliArg("--type", targetFormat.id) - - cliArg("--dest", destinationDir) - cliArg("--verbose", verbose) - - cliArg("--name", packageName) - cliArg("--description", packageDescription) - cliArg("--copyright", packageCopyright) - cliArg("--app-version", packageVersion) - cliArg("--vendor", packageVendor) - - if (currentOS == OS.MacOS) { - cliArg("--mac-package-name", macPackageName) - cliArg("--mac-package-identifier", nonValidatedMacBundleID) - cliArg("--mac-app-store", macAppStore) - cliArg("--mac-app-category", macAppCategory) - cliArg("--mac-entitlements", macEntitlementsFile) - - macSigner?.settings?.let { signingSettings -> - cliArg("--mac-sign", true) - cliArg("--mac-signing-key-user-name", signingSettings.identity) - cliArg("--mac-signing-keychain", signingSettings.keychain) - cliArg("--mac-package-signing-prefix", signingSettings.prefix) - } - } - } - - private fun invalidateMappedLibs(inputChanges: InputChanges): Set { - val outdatedLibs = HashSet() - val libsDirFile = libsDir.ioFile - - fun invalidateAllLibs() { - outdatedLibs.addAll(files.files) - - logger.debug("Clearing all files in working dir: $libsDirFile") - fileOperations.clearDirs(libsDirFile) - } - - if (inputChanges.isIncremental) { - val allChanges = inputChanges.getFileChanges(files).asSequence() - - try { - for (change in allChanges) { - libsMapping.remove(change.file)?.let { files -> - files.forEach { fileOperations.delete(it) } - } - if (change.changeType != ChangeType.REMOVED) { - outdatedLibs.add(change.file) - } - } - } catch (e: Exception) { - logger.debug("Could remove outdated libs incrementally: ${e.stacktraceToString()}") - invalidateAllLibs() - } - } else { - invalidateAllLibs() - } - - return outdatedLibs - } - - private fun jarCopyingProcessor(): FileCopyingProcessor = - if (currentOS == OS.MacOS) { - val tmpDirForSign = signDir.ioFile - fileOperations.clearDirs(tmpDirForSign) - MacJarSignFileCopyingProcessor(macSigner!!, tmpDirForSign, jvmRuntimeInfo.majorVersion) - } else { - SimpleFileCopyingProcessor - } - - override fun prepareWorkingDir(inputChanges: InputChanges) { - val libsDir = libsDir.ioFile - val fileProcessor = jarCopyingProcessor() - - val mangleJarFilesNames = mangleJarFilesNames.get() - - fun copyFileToLibsDir(sourceFile: File): File { - val targetName = - if (mangleJarFilesNames && sourceFile.isJarFile) { - sourceFile.mangledName() - } else { - sourceFile.name - } - val targetFile = libsDir.resolve(targetName) - fileProcessor.copy(sourceFile, targetFile) - return targetFile - } - - // skiko can be bundled to the main uber jar by proguard - fun File.isMainUberJar() = packageFromUberJar.get() && name == launcherMainJar.ioFile.name - - val outdatedLibs = invalidateMappedLibs(inputChanges) - for (sourceFile in outdatedLibs) { - assert(sourceFile.exists()) { "Lib file does not exist: $sourceFile" } - - libsMapping[sourceFile] = - if (isSkikoForCurrentOS(sourceFile) || sourceFile.isMainUberJar()) { - val unpackedFiles = unpackSkikoForCurrentOS(sourceFile, skikoDir.ioFile, fileOperations) - unpackedFiles.map { copyFileToLibsDir(it) } - } else { - listOf(copyFileToLibsDir(sourceFile)) - } - } - - // todo: incremental copy - fileOperations.clearDirs(packagedResourcesDir) - val destResourcesDir = packagedResourcesDir.ioFile - val appResourcesDir = appResourcesDir.ioFileOrNull - if (appResourcesDir != null) { - for (file in appResourcesDir.walk()) { - val relPath = file.relativeTo(appResourcesDir).path - val destFile = destResourcesDir.resolve(relPath) - if (file.isDirectory) { - fileOperations.mkdirs(destFile) - } else { - file.copyTo(destFile) - } - } - } - - // When sandboxing is enabled, Skiko's native DLL is in resources/ but its companion - // data file (icudtl.dat) is extracted by unpackSkikoForCurrentOS to libsDir. - // Copy it next to the DLL so SkLoadICU can find it. - if (sandboxingEnabled.get()) { - val icudtl = libsDir.resolve("icudtl.dat") - if (icudtl.exists()) { - icudtl.copyTo(destResourcesDir.resolve("icudtl.dat"), overwrite = true) - } - } - - fileOperations.clearDirs(jpackageResources) - if (currentOS == OS.MacOS) { - val systemVersion = macMinimumSystemVersion.orNull ?: "10.13" - - macLayeredIcons.ioFileOrNull?.let { layeredIcon -> - if (layeredIcon.exists()) { - try { - macAssetsTool.compileAssets( - layeredIcon, - workingDir.ioFile, - systemVersion, - ) - } catch (e: Exception) { - logger.warn("Can not compile layered icon: ${e.message}") - } - } - } - - InfoPlistBuilder(macExtraPlistKeysRawXml.orNull) - .also { setInfoPlistValues(it) } - .writeToFile(jpackageResources.ioFile.resolve("Info.plist")) - - if (macAppStore.orNull == true) { - val productDefPlistXml = - """ - os - - $systemVersion - - """.trimIndent() - InfoPlistBuilder(productDefPlistXml) - .writeToFile(jpackageResources.ioFile.resolve("product-def.plist")) - } - } - } - - override fun checkResult(result: ExecResult) { - super.checkResult(result) - modifyRuntimeOnMacOsIfNeeded() - val outputFile = findOutputFileOrDir(destinationDir.ioFile, targetFormat) - logger.lifecycle("The distribution is written to ${outputFile.canonicalPath}") - } - - @Suppress("NestedBlockDepth") - private fun modifyRuntimeOnMacOsIfNeeded() { - if (currentOS != OS.MacOS || targetFormat != TargetFormat.RawAppImage) return - - val appDir = destinationDir.ioFile.resolve("${packageName.get()}.app") - val runtimeDir = appDir.resolve("Contents/runtime") - - macAssetsTool.assetsFile(workingDir.ioFile).apply { - if (exists()) { - copyTo(appDir.resolve("Contents/Resources/Assets.car")) - } - } - - // Add the provisioning profile - macRuntimeProvisioningProfile.ioFileOrNull?.copyTo( - target = runtimeDir.resolve("Contents/embedded.provisionprofile"), - overwrite = true, - ) - // Patch the jpackage launcher's LC_BUILD_VERSION to claim the configured - // macOS SDK version, enabling SDK-gated AppKit features (e.g. Liquid Glass). - macOsSdkVersion.orNull?.let { sdkVersion -> - val minVersion = macMinimumSystemVersion.orNull ?: "10.13" - val launcher = appDir.resolve("Contents/MacOS/${packageName.get()}") - if (launcher.exists()) { - patchMachOSdkVersion(launcher, minVersion, sdkVersion) - } - } - - val appEntitlementsFile = macEntitlementsFile.ioFileOrNull - val runtimeEntitlementsFile = macRuntimeEntitlementsFile.ioFileOrNull - - val macSigner = macSigner!! - // Resign the runtime completely (and also the app dir only) - // Sign all libs and executables in runtime - runtimeDir.walk().forEach { file -> - val path = file.toPath() - if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS) && (path.isExecutable() || file.name.isDylibPath)) { - macSigner.sign(file, runtimeEntitlementsFile) - } - } - - if (sandboxingEnabled.get()) { - moveNativeLibsToFrameworks(appDir, macSigner, appEntitlementsFile) - } - - // Generate and embed launch agent plists before signing - val launchAgentDefs = macLaunchAgents.get() - if (launchAgentDefs.isNotEmpty()) { - val destDir = appDir.resolve("Contents/Library/LaunchAgents") - for (agent in launchAgentDefs) { - LaunchAgentPlistGenerator.generate(agent, destDir, packageName.get()) - } - } - - macSigner.sign(runtimeDir, runtimeEntitlementsFile, forceEntitlements = true) - macSigner.sign(appDir, appEntitlementsFile, forceEntitlements = true) - - if (iconMapping.isNotEmpty()) { - for ((originalIcon, newIcon) in iconMapping) { - if (originalIcon.exists()) { - newIcon.ensureParentDirsCreated() - originalIcon.copyTo(newIcon) - } - } - } - } - - /** - * Moves native libraries from `Contents/app/resources/` to `Contents/Frameworks/` - * (Apple convention for sandboxed apps) and signs them. - */ - private fun moveNativeLibsToFrameworks( - appDir: File, - macSigner: MacSigner, - entitlementsFile: File?, - ) { - val resourcesDir = appDir.resolve("Contents/app/resources") - val frameworksDir = appDir.resolve("Contents/Frameworks") - if (resourcesDir.exists()) { - frameworksDir.mkdirs() - resourcesDir.walk().forEach { file -> - if (file == resourcesDir) return@forEach - if (file.isDirectory) return@forEach - if (file.name.isDylibPath || file.name == "icudtl.dat") { - val target = frameworksDir.resolve(file.relativeTo(resourcesDir).path) - target.parentFile.mkdirs() - Files.move(file.toPath(), target.toPath()) - } - } - // Clean up empty directories left in resources/ - resourcesDir - .walk() - .sortedDescending() - .filter { it.isDirectory && it != resourcesDir && it.listFiles()?.isEmpty() == true } - .forEach { it.delete() } - } - // Sign native libs in Frameworks/ - if (frameworksDir.exists()) { - frameworksDir.walk().forEach { file -> - val path = file.toPath() - if (path.isRegularFile(LinkOption.NOFOLLOW_LINKS) && file.name.isDylibPath) { - macSigner.sign(file, entitlementsFile) - } - } - } - } - - private fun patchMachOSdkVersion( - binary: File, - minVersion: String, - sdkVersion: String, - ) { - val vtool = File("/usr/bin/vtool") - if (!vtool.exists()) { - logger.warn( - "vtool not found at /usr/bin/vtool — skipping macOS SDK version patch. " + - "Install Xcode Command Line Tools to enable this feature.", - ) - return - } - logger.lifecycle("Patching ${binary.name} LC_BUILD_VERSION: minos=$minVersion sdk=$sdkVersion") - // Remove existing code signature (vtool cannot modify signed binaries) - runExternalTool( - tool = File("/usr/bin/codesign"), - args = listOf("--remove-signature", binary.absolutePath), - checkExitCodeIsNormal = false, - ) - runExternalTool( - tool = vtool, - args = - listOf( - "-set-build-version", - "macos", - minVersion, - sdkVersion, - "-tool", - "ld", - "0.0", - "-replace", - "-output", - binary.absolutePath, - binary.absolutePath, - ), - ) - // No need to re-sign here — the existing signing code runs right after - } - - override fun initState() { - jvmRuntimeInfo = JvmRuntimeProperties.readFromFile(javaRuntimePropertiesFile.ioFile) - - val mappingFile = libsMappingFile.ioFile - if (mappingFile.exists()) { - try { - libsMapping.loadFrom(mappingFile) - } catch (e: Exception) { - fileOperations.delete(mappingFile) - throw e - } - logger.debug("Loaded libs mapping from $mappingFile") - } - } - - override fun saveStateAfterFinish() { - val mappingFile = libsMappingFile.ioFile - libsMapping.saveTo(mappingFile) - logger.debug("Saved libs mapping to $mappingFile") - } - - private fun setInfoPlistValues(plist: InfoPlistBuilder) { - check(currentOS == OS.MacOS) { "Current OS is not macOS: $currentOS" } - - val systemVersion = macMinimumSystemVersion.orNull ?: "10.13" - plist[PlistKeys.LSMinimumSystemVersion] = systemVersion - plist[PlistKeys.CFBundleDevelopmentRegion] = "English" - plist[PlistKeys.CFBundleAllowMixedLocalizations] = "true" - val packageName = packageName.get() - plist[PlistKeys.CFBundleExecutable] = packageName - plist[PlistKeys.CFBundleIconFile] = "$packageName.icns" - val bundleId = - nonValidatedMacBundleID.orNull - ?: launcherMainClass.get().substringBeforeLast(".") - plist[PlistKeys.CFBundleIdentifier] = bundleId - plist[PlistKeys.CFBundleInfoDictionaryVersion] = "6.0" - val displayName = appName.orNull ?: packageName - plist[PlistKeys.CFBundleName] = displayName - plist[PlistKeys.CFBundleDisplayName] = displayName - plist[PlistKeys.CFBundlePackageType] = "APPL" - val packageVersion = packageVersion.get() - plist[PlistKeys.CFBundleShortVersionString] = packageVersion - // If building for the App Store, use "utilities" as default just like jpackage. - val category = macAppCategory.orNull ?: (if (macAppStore.orNull == true) "public.app-category.utilities" else null) - plist[PlistKeys.LSApplicationCategoryType] = category ?: "Unknown" - val packageBuildVersion = packageBuildVersion.orNull ?: packageVersion - plist[PlistKeys.CFBundleVersion] = packageBuildVersion - val year = Calendar.getInstance().get(Calendar.YEAR) - plist[PlistKeys.NSHumanReadableCopyright] = packageCopyright.orNull - ?: "Copyright (C) $year" - plist[PlistKeys.NSSupportsAutomaticGraphicsSwitching] = "true" - plist[PlistKeys.NSHighResolutionCapable] = "true" - if (macAppStore.orNull == true) { - plist[PlistKeys.ITSAppUsesNonExemptEncryption] = false - } - val fileAssociationMutableSet = fileAssociations.get() - if (fileAssociationMutableSet.isNotEmpty()) { - plist[PlistKeys.CFBundleDocumentTypes] = - fileAssociationMutableSet - .groupBy { it.mimeType to it.description } - .map { (key, extensions) -> - val (mimeType, description) = key - val iconPath = extensions.firstNotNullOfOrNull { it.iconFile }?.let { iconMapping[it]?.name } - InfoPlistMapValue( - PlistKeys.CFBundleTypeRole to InfoPlistStringValue("Editor"), - PlistKeys.CFBundleTypeExtensions to - InfoPlistListValue(extensions.map { InfoPlistStringValue(it.extension) }), - PlistKeys.CFBundleTypeIconFile to InfoPlistStringValue(iconPath ?: "$packageName.icns"), - PlistKeys.CFBundleTypeMIMETypes to InfoPlistStringValue(mimeType), - PlistKeys.CFBundleTypeName to InfoPlistStringValue(description), - PlistKeys.CFBundleTypeOSTypes to InfoPlistListValue(InfoPlistStringValue("****")), - ) - } - } - - val protocols = urlProtocols.get() - if (protocols.isNotEmpty()) { - plist[PlistKeys.CFBundleURLTypes] = - protocols.map { protocol -> - InfoPlistMapValue( - PlistKeys.CFBundleURLName to InfoPlistStringValue(protocol.name), - PlistKeys.CFBundleURLSchemes to - InfoPlistListValue(protocol.schemes.map { InfoPlistStringValue(it) }), - ) - } - } - - if (macAssetsTool.assetsFile(workingDir.ioFile).exists()) { - macLayeredIcons.orNull?.let { plist[PlistKeys.CFBundleIconName] = it.asFile.name.removeSuffix(".icon") } - } - } - } - -// Serializable is only needed to avoid breaking configuration cache: -// https://docs.gradle.org/current/userguide/configuration_cache.html#config_cache:requirements -private class FilesMapping : Serializable { - private var mapping = HashMap>() - - operator fun get(key: File): List? = mapping[key] - - operator fun set( - key: File, - value: List, - ) { - mapping[key] = value - } - - fun remove(key: File): List? = mapping.remove(key) - - fun loadFrom(mappingFile: File) { - mappingFile.readLines().forEach { line -> - if (line.isNotBlank()) { - val paths = line.splitToSequence(File.pathSeparatorChar) - val lib = File(paths.first()) - val mappedFiles = paths.drop(1).mapTo(ArrayList()) { File(it) } - mapping[lib] = mappedFiles - } - } - } - - fun saveTo(mappingFile: File) { - mappingFile.parentFile.mkdirs() - mappingFile.bufferedWriter().use { writer -> - mapping.entries - .sortedBy { (k, _) -> k.absolutePath } - .forEach { (k, values) -> - (sequenceOf(k) + values.asSequence()) - .joinTo(writer, separator = File.pathSeparator, transform = { it.absolutePath }) - } - } - } - - private fun writeObject(stream: ObjectOutputStream) { - stream.writeObject(mapping) - } - - @Suppress("UNCHECKED_CAST") - private fun readObject(stream: ObjectInputStream) { - mapping = stream.readObject() as HashMap> - } -} - -private fun isSkikoForCurrentOS(lib: File): Boolean = - lib.name.contains("skiko-awt-runtime-${currentOS.id}-${currentArch.id}") && - lib.name.endsWith(".jar") - -private fun unpackSkikoForCurrentOS( - sourceJar: File, - skikoDir: File, - fileOperations: FileSystemOperations, -): List { - val entriesToUnpack = - when (currentOS) { - OS.MacOS -> setOf("libskiko-macos-${currentArch.id}.dylib") - OS.Windows -> setOf("skiko-windows-${currentArch.id}.dll", "icudtl.dat") - OS.Linux -> setOf("libskiko-linux-${currentArch.id}.so") - } - - // output files: unpacked libs, corresponding .sha256 files, and target jar - val outputFiles = ArrayList(entriesToUnpack.size * 2 + 1) - val targetJar = skikoDir.resolve(sourceJar.name) - outputFiles.add(targetJar) - - fileOperations.clearDirs(skikoDir) - transformJar(sourceJar, targetJar) { entry, zin, zout -> - // check both entry or entry.sha256, using filename part to handle subdirectory paths - val entryFileName = entry.name.substringAfterLast("/").removeSuffix(".sha256") - if (entryFileName in entriesToUnpack) { - val unpackedFile = skikoDir.resolve(entry.name.substringAfterLast("/")) - zin.copyTo(unpackedFile) - outputFiles.add(unpackedFile) - } else { - copyZipEntry(entry, zin, zout) - } - } - return outputFiles -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt deleted file mode 100644 index a383d5e52..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* -import org.gradle.api.file.Directory -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import org.gradle.process.ExecResult -import org.gradle.work.DisableCachingByDefault -import org.gradle.work.InputChanges -import java.io.File - -@DisableCachingByDefault(because = "Depends on external JVM tools") -abstract class AbstractJvmToolOperationTask( - private val toolName: String, -) : AbstractNucleusTask() { - @get:LocalState - protected val workingDir: Provider = project.layout.buildDirectory.dir("compose/tmp/$name") - - @get:OutputDirectory - val destinationDir: DirectoryProperty = objects.directoryProperty() - - @get:Input - @get:Optional - val freeArgs: ListProperty = objects.listProperty(String::class.java) - - @get:Internal - val javaHome: Property = - objects.notNullProperty().apply { - set(providers.systemProperty("java.home")) - } - - protected open fun prepareWorkingDir(inputChanges: InputChanges) { - fileOperations.clearDirs(workingDir) - } - - protected open fun makeArgs(tmpDir: File): MutableList = - arrayListOf().apply { - freeArgs.orNull?.forEach { add(it) } - } - - protected open fun jvmToolEnvironment(): MutableMap = HashMap() - - protected open fun checkResult(result: ExecResult) { - result.assertNormalExitValue() - } - - @TaskAction - fun run(inputChanges: InputChanges) { - initState() - - val jtool = jvmToolFile(toolName, javaHome = javaHome) - - fileOperations.delete(destinationDir) - prepareWorkingDir(inputChanges) - val argsFile = - workingDir.ioFile.let { dir -> - val args = makeArgs(dir) - dir.resolveSibling("$name.args.txt").apply { - writeText(args.joinToString("\n")) - } - } - - try { - runExternalTool( - tool = jtool, - args = listOf("@${argsFile.absolutePath}"), - environment = jvmToolEnvironment(), - ).also { checkResult(it) } - } finally { - if (!NucleusProperties.preserveWorkingDir(providers).get()) { - fileOperations.delete(workingDir) - } - } - saveStateAfterFinish() - } - - protected open fun initState() {} - - protected open fun saveStateAfterFinish() {} -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt deleted file mode 100644 index c7e4a0025..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder -import dev.nucleusframework.nucleus.desktop.application.internal.MacAssetsTool -import dev.nucleusframework.nucleus.desktop.application.internal.PlistKeys -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import dev.nucleusframework.nucleus.internal.utils.nullableProperty -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.work.DisableCachingByDefault -import java.io.File -import kotlin.getValue - -private const val KOTLIN_NATIVE_MIN_SUPPORTED_MAC_OS = "10.13" - -@DisableCachingByDefault(because = "Depends on external macOS native tools") -@Suppress("UnnecessaryAbstractClass") -abstract class AbstractNativeMacApplicationPackageAppDirTask : AbstractNativeMacApplicationPackageTask() { - @get:InputFile - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val executable: RegularFileProperty = objects.fileProperty() - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val iconFile: RegularFileProperty = objects.fileProperty() - - @get:Input - val bundleID: Property = objects.notNullProperty().value(packageName) - - @get:Input - @get:Optional - val appCategory: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val copyright: Property = objects.nullableProperty() - - @get:Input - @get:Optional - val minimumSystemVersion: Property = objects.nullableProperty() - - @get:InputFiles - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val composeResourcesDirs: ConfigurableFileCollection = objects.fileCollection() - - @get:InputDirectory - @get:Optional - @get:PathSensitive(PathSensitivity.RELATIVE) - internal val macLayeredIcons: DirectoryProperty = objects.directoryProperty() - - private val macAssetsTool by lazy { MacAssetsTool(runExternalTool, logger) } - - override fun createPackage( - destinationDir: File, - workingDir: File, - ) { - val packageName = packageName.get() - val appDir = destinationDir.resolve("$packageName.app").apply { mkdirs() } - val contentsDir = appDir.resolve("Contents").apply { mkdirs() } - val macOSDir = contentsDir.resolve("MacOS").apply { mkdirs() } - val appResourcesDir = contentsDir.resolve("Resources").apply { mkdirs() } - - val appExecutableFile = macOSDir.resolve(packageName) - executable.ioFile.copyTo(appExecutableFile) - appExecutableFile.setExecutable(true) - - macLayeredIcons.orNull?.let { - try { - macAssetsTool.compileAssets( - iconDir = it.asFile, - workingDir = workingDir, - minimumSystemVersion = minimumSystemVersion.getOrElse(KOTLIN_NATIVE_MIN_SUPPORTED_MAC_OS), - ) - } catch (e: Exception) { - logger.warn("Can not compile layered icon: ${e.message}") - } - } - - val appIconFile = appResourcesDir.resolve("$packageName.icns") - iconFile.ioFile.copyTo(appIconFile) - - // Create Base.lproj so macOS uses the system language for auto-added menu items - appResourcesDir.resolve("Base.lproj").mkdirs() - - InfoPlistBuilder().apply { - setupInfoPlist(executableName = appExecutableFile.name) - writeToFile(contentsDir.resolve("Info.plist")) - } - - if (!composeResourcesDirs.isEmpty) { - fileOperations.copy { copySpec -> - copySpec.from(composeResourcesDirs) - copySpec.into(appResourcesDir.resolve("compose-resources").apply { mkdirs() }) - } - } - - macAssetsTool.assetsFile(workingDir).let { - if (it.exists()) { - fileOperations.copy { copySpec -> - copySpec.from(it) - copySpec.into(appResourcesDir) - } - } - } - } - - private fun InfoPlistBuilder.setupInfoPlist(executableName: String) { - this[PlistKeys.LSMinimumSystemVersion] = minimumSystemVersion.getOrElse(KOTLIN_NATIVE_MIN_SUPPORTED_MAC_OS) - this[PlistKeys.CFBundleDevelopmentRegion] = "English" - this[PlistKeys.CFBundleAllowMixedLocalizations] = "true" - this[PlistKeys.CFBundleExecutable] = executableName - this[PlistKeys.CFBundleIconFile] = iconFile.ioFile.name - this[PlistKeys.CFBundleIdentifier] = bundleID.get() - val packageVersion = packageVersion.get() - this[PlistKeys.CFBundleShortVersionString] = packageVersion - this[PlistKeys.CFBundleVersion] = packageVersion - this[PlistKeys.LSApplicationCategoryType] = appCategory.orNull - this[PlistKeys.NSHumanReadableCopyright] = copyright.orNull - this[PlistKeys.NSSupportsAutomaticGraphicsSwitching] = "true" - this[PlistKeys.NSHighResolutionCapable] = "true" - - if (macAssetsTool.assetsFile(workingDir.ioFile).exists()) { - macLayeredIcons.orNull?.let { this[PlistKeys.CFBundleIconName] = it.asFile.name.removeSuffix(".icon") } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt deleted file mode 100644 index eadd20ff7..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.dsl.DmgContentEntry -import dev.nucleusframework.nucleus.desktop.application.dsl.DmgFormat -import dev.nucleusframework.nucleus.desktop.application.internal.MACOS_DMG_TITLE_BAR_HEIGHT -import dev.nucleusframework.nucleus.desktop.application.internal.readImageDimensions -import dev.nucleusframework.nucleus.internal.utils.ioFile -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFile -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.work.DisableCachingByDefault -import java.io.File - -@DisableCachingByDefault(because = "Depends on external macOS native tools") -abstract class AbstractNativeMacApplicationPackageDmgTask : AbstractNativeMacApplicationPackageTask() { - companion object { - private const val DEFAULT_ICON_SIZE = 72 - private const val DEFAULT_WINDOW_X = 400 - private const val DEFAULT_WINDOW_Y = 100 - private const val DEFAULT_WINDOW_WIDTH = 485 - private const val DEFAULT_WINDOW_HEIGHT = 330 - private const val CSS_SHORT_HEX_LENGTH = 3 - private const val CSS_FULL_HEX_LENGTH = 6 - private const val APPLE_SCRIPT_RGB_SCALE = 257 - } - - @get:InputFile - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val hdiutil: RegularFileProperty = objects.fileProperty().value { File("/usr/bin/hdiutil") } - - @get:InputFile - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val osascript: RegularFileProperty = objects.fileProperty().value { File("/usr/bin/osascript") } - - @get:Input - val installDir: Property = objects.notNullProperty("/Applications") - - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - val appDir: DirectoryProperty = objects.directoryProperty() - - @get:Input - @get:Optional - val dmgFormat: Property = objects.property(DmgFormat::class.java) - - @get:Input - @get:Optional - val dmgIconSize: Property = objects.property(Int::class.java) - - @get:Input - @get:Optional - val dmgWindowX: Property = objects.property(Int::class.java) - - @get:Input - @get:Optional - val dmgWindowY: Property = objects.property(Int::class.java) - - @get:Input - @get:Optional - val dmgWindowWidth: Property = objects.property(Int::class.java) - - @get:Input - @get:Optional - val dmgWindowHeight: Property = objects.property(Int::class.java) - - @get:Input - @get:Optional - val dmgTitle: Property = objects.property(String::class.java) - - @get:Input - @get:Optional - val dmgBackgroundColor: Property = objects.property(String::class.java) - - @get:InputFile - @get:Optional - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val dmgBackgroundImage: RegularFileProperty = objects.fileProperty() - - @get:Input - val dmgContents: ListProperty = - objects.listProperty(DmgContentEntry::class.java).convention(emptyList()) - - override fun createPackage( - destinationDir: File, - workingDir: File, - ) { - val packageName = packageName.get() - val volumeName = - dmgTitle.orNull - ?.replace("\${productName}", packageName) - ?.replace("\${version}", packageVersion.get()) - ?: packageName - val fullPackageName = fullPackageName.get() - val tmpImage = workingDir.resolve("$fullPackageName.tmp.dmg") - val finalImage = destinationDir.resolve("$fullPackageName.dmg") - - createImage(volumeName = volumeName, imageFile = tmpImage, srcDir = appDir.ioFile) - val mounted = mountImage(volumeName = volumeName, imageFile = tmpImage) - try { - runSetupScript(appName = packageName, mounted) - } finally { - unmountImage(mounted) - } - finalizeImage(tmpImage, finalImage) - logger.lifecycle("The distribution is written to ${finalImage.canonicalPath}") - } - - private fun createImage( - volumeName: String, - imageFile: File, - srcDir: File, - ) { - var size = srcDir.walk().filter { it.isFile }.sumOf { it.length() } - size += 10 * 1024 * 1024 - - hdiutil( - "create", - "-srcfolder", - srcDir.absolutePath, - "-volname", - volumeName, - "-size", - size.toString(), - "-ov", - imageFile.absolutePath, - "-fs", - "HFS+", - "-format", - "UDRW", - ) - } - - private data class MountedImage( - val device: String, - val disk: String, - ) - - private fun mountImage( - volumeName: String, - imageFile: File, - ): MountedImage { - val output = - hdiutil( - "attach", - "-readwrite", - "-noverify", - "-noautoopen", - imageFile.absolutePath, - ) - Thread.sleep(3000) - var device: String? = null - var volume: String? = null - - for (line in output.split("\n")) { - if (!line.startsWith("/dev/")) continue - - val volumeIndex = line.lastIndexOf("/Volumes/$volumeName") - if (volumeIndex <= 0) continue - - volume = line.substring(volumeIndex).trimEnd() - device = line.substring(0, line.indexOfFirst(Char::isWhitespace)) - } - check(device != null && volume != null) { - "Could not parse mounted image's device ($device) & volume ($volume) from hdiutil output:" + - "\n=======\n" + - output + - "\n=======\n" - } - if (verbose.get()) { - logger.info("Mounted DMG image '$imageFile': volume '$volume', device '$device'") - } - return MountedImage(device = device, disk = volume.removePrefix("/Volumes/")) - } - - private fun unmountImage(mounted: MountedImage) { - hdiutil("detach", mounted.device) - } - - private fun finalizeImage( - tmpImage: File, - finalImage: File, - ) { - val format = dmgFormat.orNull?.id ?: "UDZO" - val args = - mutableListOf( - "convert", - tmpImage.absolutePath, - "-format", - format, - "-o", - finalImage.absolutePath, - ) - // Add zlib compression level for UDZO format - if (format == "UDZO") { - args.addAll(listOf("-imagekey", "zlib-level=9")) - } - hdiutil(args) - } - - private fun hdiutil(args: List): String { - var resultStdout = "" - val allArgs = args.toMutableList() - if (verbose.get()) { - allArgs.add("-verbose") - } - runExternalTool(tool = hdiutil.ioFile, args = allArgs, processStdout = { resultStdout = it }) - return resultStdout - } - - private fun hdiutil(vararg args: String): String = hdiutil(args.toList()) - - private fun runSetupScript( - appName: String, - mounted: MountedImage, - ) { - val disk = mounted.disk - val installDir = installDir.get() - val iconSize = dmgIconSize.orNull ?: DEFAULT_ICON_SIZE - val winX = dmgWindowX.orNull ?: DEFAULT_WINDOW_X - val winY = dmgWindowY.orNull ?: DEFAULT_WINDOW_Y - var winW = dmgWindowWidth.orNull ?: DEFAULT_WINDOW_WIDTH - var winH = dmgWindowHeight.orNull ?: DEFAULT_WINDOW_HEIGHT - val contents = dmgContents.get() - - // Copy background image to the mounted volume and adjust window size - val backgroundFile = dmgBackgroundImage.orNull?.asFile - var backgroundFileName: String? = null - if (backgroundFile != null && backgroundFile.isFile) { - val volumePath = File("/Volumes/$disk") - val bgDir = File(volumePath, ".background") - bgDir.mkdirs() - val bgDest = File(bgDir, "background.${backgroundFile.extension}") - backgroundFile.copyTo(bgDest, overwrite = true) - backgroundFileName = bgDest.name - - // Adjust window size to fit the background image (issue #26). - // The Finder window bounds include the title bar, so the content area - // is (boundsHeight - titleBarHeight). We ensure the window is large enough - // for the full image to be visible. - val dimensions = readImageDimensions(backgroundFile) - if (dimensions != null) { - val (imgW, imgH) = dimensions - val requiredW = imgW - val requiredH = imgH + MACOS_DMG_TITLE_BAR_HEIGHT - if (winW < requiredW) winW = requiredW - if (winH < requiredH) winH = requiredH - } - } - - val scriptBuilder = StringBuilder() - scriptBuilder.appendLine("""tell application "Finder"""") - scriptBuilder.appendLine(""" tell disk "$disk"""") - scriptBuilder.appendLine(" open") - scriptBuilder.appendLine(" set current view of container window to icon view") - scriptBuilder.appendLine(" set toolbar visible of container window to false") - scriptBuilder.appendLine(" set statusbar visible of container window to false") - val boundsRight = winX + winW - val boundsBottom = winY + winH - scriptBuilder.appendLine( - " set the bounds of container window to {$winX, $winY, $boundsRight, $boundsBottom}", - ) - scriptBuilder.appendLine(" set theViewOptions to the icon view options of container window") - scriptBuilder.appendLine(" set arrangement of theViewOptions to not arranged") - scriptBuilder.appendLine(" set icon size of theViewOptions to $iconSize") - - if (backgroundFileName != null) { - scriptBuilder.appendLine( - " set background picture of theViewOptions to file \".background:$backgroundFileName\"", - ) - } else { - dmgBackgroundColor.orNull?.let { color -> - val rgb = cssColorToAppleScriptRgb(color) - scriptBuilder.appendLine( - " set background color of theViewOptions to {$rgb}", - ) - } - } - - if (contents.isEmpty()) { - // Default layout when no contents specified - scriptBuilder.appendLine( - " make new alias file at container window" + - " to POSIX file \"$installDir\" with properties {name:\"$installDir\"}", - ) - scriptBuilder.appendLine( - """ set position of item "$appName" of container window to {100, 100}""", - ) - scriptBuilder.appendLine( - """ set position of item "$installDir" of container window to {375, 100}""", - ) - } else { - for (entry in contents) { - val entryName = entry.name ?: entry.path ?: continue - scriptBuilder.appendLine( - " set position of item \"$entryName\"" + - " of container window to {${entry.x}, ${entry.y}}", - ) - } - } - - scriptBuilder.appendLine(" update without registering applications") - scriptBuilder.appendLine(" delay 5") - scriptBuilder.appendLine(" close") - scriptBuilder.appendLine(" end tell") - scriptBuilder.appendLine("end tell") - - val setupScript = - workingDir.ioFile.resolve("setup-dmg.scpt").apply { - writeText(scriptBuilder.toString()) - } - runExternalTool(tool = osascript.ioFile, args = listOf(setupScript.absolutePath)) - } - - /** Converts a CSS hex color (e.g. "#ff0000") to AppleScript RGB {R, G, B} (0–65535 range). */ - @Suppress("MagicNumber") - private fun cssColorToAppleScriptRgb(cssColor: String): String { - val hex = cssColor.removePrefix("#") - val (r, g, b) = - when (hex.length) { - CSS_SHORT_HEX_LENGTH -> - Triple( - hex.substring(0, 1).repeat(2).toInt(16), - hex.substring(1, 2).repeat(2).toInt(16), - hex.substring(2, 3).repeat(2).toInt(16), - ) - CSS_FULL_HEX_LENGTH -> - Triple( - hex.substring(0, 2).toInt(16), - hex.substring(2, 4).toInt(16), - hex.substring(4, 6).toInt(16), - ) - else -> return "65535, 65535, 65535" - } - // Scale 0–255 to 0–65535 - return "${r * APPLE_SCRIPT_RGB_SCALE}, ${g * APPLE_SCRIPT_RGB_SCALE}, ${b * APPLE_SCRIPT_RGB_SCALE}" - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt deleted file mode 100644 index f8a532936..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* -import org.gradle.api.file.Directory -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import org.gradle.work.DisableCachingByDefault -import java.io.File - -@DisableCachingByDefault(because = "Depends on external macOS native tools") -abstract class AbstractNativeMacApplicationPackageTask : AbstractNucleusTask() { - @get:Input - val packageName: Property = objects.notNullProperty() - - @get:Input - val packageVersion: Property = objects.notNullProperty("1.0.0") - - @get:Internal - internal val fullPackageName: Provider = - project.provider { "${packageName.get()}-${packageVersion.get()}" } - - @get:OutputDirectory - val destinationDir: DirectoryProperty = objects.directoryProperty() - - @get:LocalState - val workingDir: Provider = project.layout.buildDirectory.dir("compose/tmp/$name") - - @TaskAction - fun run() { - fileOperations.clearDirs(destinationDir, workingDir) - - createPackage( - destinationDir = destinationDir.ioFile, - workingDir = workingDir.ioFile, - ) - } - - protected abstract fun createPackage( - destinationDir: File, - workingDir: File, - ) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt deleted file mode 100644 index 0730478ba..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import org.gradle.api.GradleException -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.File -import java.security.MessageDigest - -private const val ALIAS_NAME_MAX_LENGTH = 32 -private const val ALIAS_HASH_LENGTH = 8 - -/** - * Copies the JLink runtime image and imports CA certificates into its `cacerts` keystore. - * - * This task produces a patched copy of the runtime image in [destinationDir], so the original - * [runtimeImageDir] (output of `createRuntimeImage`) is never modified in-place. The copy is - * used as the runtime by `createDistributable` and `createSandboxedDistributable`. - * - * Import is idempotent: if an alias already exists in `cacerts` the entry is silently skipped. - */ -@DisableCachingByDefault(because = "Copying the JVM runtime image is not worth caching") -abstract class AbstractPatchCaCertificatesTask : AbstractNucleusTask() { - /** Source JLink runtime image directory (output of `createRuntimeImage`). */ - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val runtimeImageDir: DirectoryProperty - - /** CA certificate files (PEM or DER format) to import into `cacerts`. */ - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - abstract val certificates: ConfigurableFileCollection - - /** Destination directory for the patched runtime image copy. */ - @get:OutputDirectory - abstract val destinationDir: DirectoryProperty - - /** JDK home used to locate the `keytool` binary. Defaults to the current JVM. */ - @get:Internal - val javaHome: Property = - objects.notNullProperty().apply { - set(providers.systemProperty("java.home")) - } - - @TaskAction - fun execute() { - val sourceDir = runtimeImageDir.get().asFile - val destDir = destinationDir.get().asFile - - copyRuntime(sourceDir, destDir) - - val cacertsFile = File(destDir, "lib/security/cacerts") - if (!cacertsFile.exists()) { - throw GradleException("[caCerts] cacerts not found: ${cacertsFile.absolutePath}") - } - - val certFiles = certificates.files.filter { it.exists() } - if (certFiles.isEmpty()) { - logger.lifecycle("[caCerts] No certificate files to import") - return - } - - val keytool = resolveKeytool() - for (cert in certFiles) { - val alias = certAlias(cert) - importCertificate(keytool, cert, alias, cacertsFile) - } - } - - private fun copyRuntime( - source: File, - dest: File, - ) { - dest.deleteRecursively() - source.copyRecursively(dest, overwrite = true) - // Restore executable bits on Unix (copyRecursively preserves them on JVM 8+, - // but we re-apply to be safe for native binaries inside the runtime). - if (!System.getProperty("os.name").lowercase().contains("windows")) { - dest - .walkTopDown() - .filter { it.isFile && source.resolve(it.relativeTo(dest)).canExecute() } - .forEach { it.setExecutable(true, false) } - } - } - - /** - * Builds a unique, human-readable alias for a certificate file. - * - * Format: `-`. - * The hash suffix guarantees uniqueness even when multiple files share the same - * name (e.g. two different `ca.crt` from different ISP directories). - * - * Examples: - * - `netfree-ca.crt` → `netfree-ca-3a1f8b2c` - * - `bezeq/ca.crt` → `ca-7d4e09a1` - * - `partner/ca.crt` → `ca-f2c51b88` - */ - private fun certAlias(cert: File): String { - val namePart = - cert.nameWithoutExtension - .lowercase() - .replace(Regex("[^a-z0-9_-]"), "-") - .take(ALIAS_NAME_MAX_LENGTH) - val hashPart = - MessageDigest - .getInstance("SHA-256") - .digest(cert.readBytes()) - .joinToString("") { "%02x".format(it) } - .take(ALIAS_HASH_LENGTH) - return "$namePart-$hashPart" - } - - private fun resolveKeytool(): String { - val jh = javaHome.get() - val exe = if (System.getProperty("os.name").lowercase().contains("windows")) "keytool.exe" else "keytool" - val keytool = File(jh, "bin/$exe") - return if (keytool.exists()) keytool.absolutePath else "keytool" - } - - private fun importCertificate( - keytool: String, - cert: File, - alias: String, - cacerts: File, - ) { - logger.lifecycle("[caCerts] Importing ${cert.name} as alias '$alias'") - val process = - ProcessBuilder( - keytool, - "-import", - "-trustcacerts", - "-alias", - alias, - "-keystore", - cacerts.absolutePath, - "-storepass", - "changeit", - "-noprompt", - "-file", - cert.absolutePath, - ).redirectErrorStream(true) - .start() - val output = process.inputStream.bufferedReader().readText() - val exitCode = process.waitFor() - when { - exitCode == 0 -> - logger.lifecycle("[caCerts] Imported ${cert.name}") - output.contains("already exists") -> - logger.lifecycle("[caCerts] Alias '$alias' already exists, skipping ${cert.name}") - else -> - throw GradleException("[caCerts] keytool failed for ${cert.name} (exit $exitCode):\n$output") - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt deleted file mode 100644 index 60dc6db90..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractPatchMacJvmTask.kt +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.File -import java.nio.file.Files -import java.nio.file.StandardCopyOption - -/** - * Produces a vtool-patched copy of the source JDK's `java` binary with - * `LC_BUILD_VERSION` set to the given SDK version, enabling Liquid Glass on - * macOS without requiring a JDK built with Xcode 26. Runs at execution time - * (not configuration time) so the build is compatible with Gradle's - * configuration cache. - */ -@DisableCachingByDefault(because = "Output is platform- and JDK-binary-specific; local cache is cheaper than remote") -abstract class AbstractPatchMacJvmTask : AbstractNucleusTask() { - @get:Input - abstract val sourceJavaHome: Property - - @get:Input - abstract val minimumSystemVersion: Property - - @get:Input - abstract val sdkVersion: Property - - @get:OutputDirectory - abstract val outputJavaHome: DirectoryProperty - - @get:Internal - val patchedJavaBinary: Provider - get() = outputJavaHome.file("bin/java") - - @TaskAction - fun patch() { - val sourceHome = File(sourceJavaHome.get()) - val sourceBin = File(sourceHome, "bin/java") - if (!sourceBin.exists()) { - logger.warn("Source java binary not found at ${sourceBin.absolutePath} — skipping patch.") - return - } - val vtool = File("/usr/bin/vtool") - if (!vtool.exists()) { - logger.warn( - "vtool not found at /usr/bin/vtool — skipping macOS SDK version patch. " + - "Install Xcode Command Line Tools to enable Liquid Glass.", - ) - return - } - - val outHome = outputJavaHome.get().asFile - outHome.mkdirs() - val binDir = File(outHome, "bin").apply { mkdirs() } - val patchedBin = File(binDir, "java") - - // Mirror JAVA_HOME/lib via symlink so @loader_path/../lib resolves - val libLink = File(outHome, "lib") - if (Files.isSymbolicLink(libLink.toPath()) || libLink.exists()) libLink.delete() - Files.createSymbolicLink(libLink.toPath(), File(sourceHome, "lib").toPath()) - - Files.copy(sourceBin.toPath(), patchedBin.toPath(), StandardCopyOption.REPLACE_EXISTING) - patchedBin.setExecutable(true) - - logger.lifecycle( - "Patching JVM binary: minos=${minimumSystemVersion.get()} sdk=${sdkVersion.get()} (Liquid Glass)...", - ) - - execOperations.exec { - it.commandLine("/usr/bin/codesign", "--remove-signature", patchedBin.absolutePath) - it.isIgnoreExitValue = true - } - val vtoolResult = execOperations.exec { - it.commandLine( - "/usr/bin/vtool", - "-set-build-version", - "macos", - minimumSystemVersion.get(), - sdkVersion.get(), - "-tool", - "ld", - "0.0", - "-replace", - "-output", - patchedBin.absolutePath, - patchedBin.absolutePath, - ) - it.isIgnoreExitValue = true - } - if (vtoolResult.exitValue != 0) { - logger.warn("vtool exited with code ${vtoolResult.exitValue} — Liquid Glass patch may have failed") - return - } - execOperations.exec { - it.commandLine("/usr/bin/codesign", "-s", "-", "-f", patchedBin.absolutePath) - it.isIgnoreExitValue = true - } - - logger.lifecycle("Patched binary cached at ${patchedBin.absolutePath}") - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt deleted file mode 100644 index a2a53b249..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractProguardTask.kt +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.* -import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName -import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* -import org.gradle.api.file.* -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import org.gradle.api.tasks.Optional -import org.gradle.work.DisableCachingByDefault -import java.io.File -import java.io.Writer -import kotlin.collections.LinkedHashMap - -@DisableCachingByDefault(because = "Depends on external ProGuard tool") -abstract class AbstractProguardTask : AbstractNucleusTask() { - @get:InputFiles - @get:Classpath - val inputFiles: ConfigurableFileCollection = objects.fileCollection() - - @get:InputFile - @get:PathSensitive(PathSensitivity.NONE) - val mainJar: RegularFileProperty = objects.fileProperty() - - @get:Internal - val mainJarBaseName: Property = objects.property(String::class.java) - - @get:Internal - internal val mainJarInDestinationDir: Provider - get() = destinationDir.file(mainJarBaseName) - - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - val configurationFiles: ConfigurableFileCollection = objects.fileCollection() - - @get:Optional - @get:Input - val dontobfuscate: Property = objects.nullableProperty() - - @get:Optional - @get:Input - val dontoptimize: Property = objects.nullableProperty() - - @get:Optional - @get:Input - val joinOutputJars: Property = objects.nullableProperty() - - // todo: DSL for excluding default rules - // also consider pulling coroutines rules from coroutines artifact - // https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/resources/META-INF/proguard/coroutines.pro - @get:Optional - @get:InputFile - @get:PathSensitive(PathSensitivity.NONE) - val defaultComposeRulesFile: RegularFileProperty = objects.fileProperty() - - @get:Input - val proguardVersion: Property = objects.notNullProperty() - - @get:InputFiles - @get:PathSensitive(PathSensitivity.NONE) - val proguardFiles: ConfigurableFileCollection = objects.fileCollection() - - @get:Input - val javaHome: Property = objects.notNullProperty(System.getProperty("java.home")) - - @get:Input - val mainClass: Property = objects.notNullProperty() - - @get:Internal - val maxHeapSize: Property = objects.nullableProperty() - - @get:OutputDirectory - val destinationDir: DirectoryProperty = objects.directoryProperty() - - @get:LocalState - protected val workingDir: Provider = project.layout.buildDirectory.dir("compose/tmp/$name") - - private val rootConfigurationFile = workingDir.map { it.file("root-config.pro") } - - private val jarsConfigurationFile = workingDir.map { it.file("jars-config.pro") } - - @TaskAction - fun execute() { - val javaHome = File(javaHome.get()) - - fileOperations.clearDirs(destinationDir, workingDir) - val destinationDir = destinationDir.ioFile.absoluteFile - - // todo: can be cached for a jdk - val jmods = - javaHome - .resolve("jmods") - .walk() - .filter { - it.isFile && it.path.endsWith("jmod", ignoreCase = true) - }.toList() - - val inputToOutputJars = LinkedHashMap() - // avoid mangling mainJar - inputToOutputJars[mainJar.ioFile] = mainJarInDestinationDir.ioFile - for (inputFile in inputFiles) { - if (inputFile.name.endsWith(".jar", ignoreCase = true)) { - inputToOutputJars.putIfAbsent(inputFile, destinationDir.resolve(inputFile.mangledName())) - } else { - inputFile.copyTo(destinationDir.resolve(inputFile.name)) - } - } - - jarsConfigurationFile.ioFile.bufferedWriter().use { writer -> - val toSingleOutputJar = joinOutputJars.orNull == true - for ((input, output) in inputToOutputJars.entries) { - writer.writeLn("-injars '${input.normalizedPath()}'") - if (!toSingleOutputJar) { - writer.writeLn("-outjars '${output.normalizedPath()}'") - } - } - if (toSingleOutputJar) { - writer.writeLn("-outjars '${mainJarInDestinationDir.ioFile.normalizedPath()}'") - } - - for (jmod in jmods) { - writer.writeLn("-libraryjars '${jmod.normalizedPath()}'(!**.jar;!module-info.class)") - } - } - - rootConfigurationFile.ioFile.bufferedWriter().use { writer -> - if (dontobfuscate.orNull == true) { - writer.writeLn("-dontobfuscate") - } - - if (dontoptimize.orNull == true) { - writer.writeLn("-dontoptimize") - } - - writer.writeLn( - """ - -keep public class ${mainClass.get()} { - public static void main(java.lang.String[]); - } - """.trimIndent(), - ) - - val includeFiles = - sequenceOf( - jarsConfigurationFile.ioFile, - defaultComposeRulesFile.ioFile, - ) + configurationFiles.files.asSequence() - for (configFile in includeFiles.filterNotNull()) { - writer.writeLn("-include '${configFile.normalizedPath()}'") - } - } - - val javaBinary = jvmToolFile(toolName = "java", javaHome = javaHome) - val args = - arrayListOf().apply { - val maxHeapSize = maxHeapSize.orNull - if (maxHeapSize != null) { - add("-Xmx:$maxHeapSize") - } - cliArg("-cp", proguardFiles.map { it.normalizedPath() }.joinToString(File.pathSeparator)) - add("proguard.ProGuard") - // todo: consider separate flag - cliArg("-verbose", verbose) - cliArg("-include", rootConfigurationFile) - } - - runExternalTool( - tool = javaBinary, - args = args, - environment = emptyMap(), - logToConsole = ExternalToolRunner.LogToConsole.Always, - ).assertNormalExitValue() - } - - private fun Writer.writeLn(s: String) { - write(s) - write("\n") - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt deleted file mode 100644 index cfe25a484..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunAppXTask.kt +++ /dev/null @@ -1,138 +0,0 @@ -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.provider.Property -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.Optional -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.ByteArrayOutputStream -import java.io.File - -/** - * Sideloads and launches an AppX package for local testing. - * - * Workflow: - * 1. Finds the `.appx` file in the package output directory - * 2. Removes any existing installation of the app - * 3. Installs the new package via `Add-AppxPackage` - * 4. Launches the app exe directly from the install location so stdout/stderr - * are visible in the Gradle console - */ -@DisableCachingByDefault(because = "Runs the application, not a cacheable build step") -abstract class AbstractRunAppXTask : AbstractNucleusTask() { - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - abstract val appxDir: DirectoryProperty - - @get:Input - abstract val identityName: Property - - @get:Input - @get:Optional - abstract val applicationId: Property - - @TaskAction - fun run() { - val dir = appxDir.get().asFile - val appxFile = - dir.walkTopDown().firstOrNull { it.extension == "appx" } - ?: error("No .appx file found in $dir") - - val identity = identityName.get() - - logger.lifecycle("AppX file: ${appxFile.absolutePath}") - logger.lifecycle("Identity: $identity") - - // Remove previous installation (ignore errors if not installed) - logger.lifecycle("Removing previous installation...") - runPowerShell( - "Get-AppxPackage -Name '$identity' | Remove-AppxPackage -ErrorAction SilentlyContinue", - ) - - // Install the new package - logger.lifecycle("Installing ${appxFile.name}...") - val installResult = - runPowerShell( - "Add-AppxPackage -Path '${appxFile.absolutePath}' -ForceTargetApplicationShutdown", - ) - if (installResult.exitCode != 0) { - error( - "Failed to install AppX package (exit code ${installResult.exitCode}):\n${installResult.output}", - ) - } - - // Get the install location - logger.lifecycle("Resolving install location...") - val locationResult = - runPowerShell( - "(Get-AppxPackage -Name '$identity').InstallLocation", - ) - val installLocation = locationResult.output.trim() - if (installLocation.isEmpty()) { - error("Could not resolve install location for '$identity'. Is the app installed?") - } - logger.lifecycle("Install location: $installLocation") - - // Find the app executable - val installDir = File(installLocation) - val exe = - findAppExecutable(installDir) - ?: error("No .exe found in $installLocation") - logger.lifecycle("Launching: ${exe.absolutePath}") - - // Run the exe directly — stdout/stderr go to Gradle console - execOperations.exec { spec -> - spec.workingDir(exe.parentFile) - spec.executable(exe.absolutePath) - spec.isIgnoreExitValue = true - } - } - - private fun findAppExecutable(installDir: File): File? { - // Look for the main exe: typically at the root or in an 'app' subdirectory. - // Exclude runtime/jre executables. - val candidates = - installDir - .walkTopDown() - .filter { it.extension.equals("exe", ignoreCase = true) } - .filter { !it.path.contains("\\runtime\\", ignoreCase = true) } - .filter { !it.path.contains("\\jre\\", ignoreCase = true) } - .toList() - - // Prefer exe at root level - return candidates.minByOrNull { it.relativeTo(installDir).path.count { c -> c == '\\' } } - } - - private data class ProcessResult( - val exitCode: Int, - val output: String, - ) - - private fun runPowerShell(command: String): ProcessResult { - val stdout = ByteArrayOutputStream() - val stderr = ByteArrayOutputStream() - val result = - execOperations.exec { spec -> - spec.commandLine( - "powershell", - "-NoProfile", - "-NonInteractive", - "-Command", - command, - ) - spec.standardOutput = stdout - spec.errorOutput = stderr - spec.isIgnoreExitValue = true - } - val combined = stdout.toString(Charsets.UTF_8) + stderr.toString(Charsets.UTF_8) - if (verbose.get() || result.exitValue != 0) { - logger.lifecycle(combined) - } - return ProcessResult(result.exitValue, combined) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt deleted file mode 100644 index f5cff972d..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.OS -import dev.nucleusframework.nucleus.internal.utils.currentOS -import dev.nucleusframework.nucleus.internal.utils.executableName -import dev.nucleusframework.nucleus.internal.utils.ioFile -import org.gradle.api.file.Directory -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.api.tasks.TaskProvider -import org.gradle.work.DisableCachingByDefault -import javax.inject.Inject - -// Custom task is used instead of Exec, because Exec does not support -// lazy configuration yet. Lazy configuration is needed to -// calculate appImageDir after the evaluation of createApplicationImage -@DisableCachingByDefault(because = "Runs the application, not a cacheable build step") -abstract class AbstractRunDistributableTask - @Inject - constructor( - createApplicationImage: TaskProvider, - ) : AbstractNucleusTask() { - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - internal val appImageRootDir: Provider = createApplicationImage.flatMap { it.destinationDir } - - @get:Input - internal val packageName: Provider = createApplicationImage.flatMap { it.packageName } - - @TaskAction - fun run() { - val appDir = - appImageRootDir.ioFile.let { appImageRoot -> - val files = - appImageRoot - .listFiles() - // Sometimes ".DS_Store" files are created on macOS, so ignore them. - ?.filterNot { it.name == ".DS_Store" } - if (files == null || files.isEmpty()) { - error("Could not find application image: $appImageRoot is empty!") - } else if (files.size > 1) { - error("Could not find application image: $appImageRoot contains multiple children [${files.joinToString(", ")}]") - } else { - files.single() - } - } - val appExecutableName = executableName(packageName.get()) - val (workingDir, executable) = - when (currentOS) { - OS.Linux -> appDir to "bin/$appExecutableName" - OS.Windows -> appDir to appExecutableName - OS.MacOS -> appDir.resolve("Contents") to "MacOS/$appExecutableName" - } - - execOperations - .exec { spec -> - spec.workingDir(workingDir) - spec.executable(workingDir.resolve(executable).absolutePath) - }.assertNormalExitValue() - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt deleted file mode 100644 index 58e9ae7be..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractStripNativeLibsFromJarsTask.kt +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.NativeLibArchDetector -import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.BufferedInputStream -import java.io.BufferedOutputStream -import java.io.FileOutputStream -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -/** - * Strips native libraries from dependency JARs when sandboxing is enabled. - * - * Since [AbstractExtractNativeLibsTask] already extracts native libs into the app resources - * directory, keeping them inside the JARs would cause duplication in the final package. - * This task rewrites JARs without native lib entries (.dylib, .jnilib, .so, .dll). - * - * Output JARs use content-hash-mangled filenames to avoid collisions when multiple - * input JARs share the same simple name (common in multi-module projects). - */ -@DisableCachingByDefault(because = "Rewrites JARs to strip native libs; fast and not worth caching") -abstract class AbstractStripNativeLibsFromJarsTask : AbstractNucleusTask() { - @get:InputFiles - @get:PathSensitive(PathSensitivity.NAME_ONLY) - abstract val inputJars: ConfigurableFileCollection - - @get:Input - abstract val mainJarName: Property - - @get:OutputDirectory - abstract val outputDir: DirectoryProperty - - @get:Internal - val mainJarInOutputDir: Provider - get() = - outputDir.map { dir -> - val metaFile = dir.asFile.resolve(MAIN_JAR_META_FILE) - val mangledName = if (metaFile.exists()) metaFile.readText().trim() else mainJarName.get() - dir.file(mangledName) - } - - @Suppress("CyclomaticComplexMethod", "NestedBlockDepth", "LoopWithTooManyJumpStatements") - @TaskAction - fun strip() { - val outDir = outputDir.get().asFile - if (outDir.exists()) outDir.deleteRecursively() - outDir.mkdirs() - - val expectedMainJarName = mainJarName.get() - var strippedCount = 0 - - for (file in inputJars.files) { - if (!file.exists()) continue - - val outputFileName = file.mangledName() - val outputFile = outDir.resolve(outputFileName) - - // Track the mangled name of the main JAR for downstream tasks - if (file.name == expectedMainJarName) { - outDir.resolve(MAIN_JAR_META_FILE).writeText(outputFileName) - } - - if (!file.name.endsWith(".jar")) { - file.copyTo(outputFile, overwrite = true) - continue - } - - // Quick check: does this JAR contain any native libs? - var hasNativeLibs = false - ZipInputStream(BufferedInputStream(file.inputStream())).use { zis -> - var entry = zis.nextEntry - while (entry != null) { - if (!entry.isDirectory && NativeLibArchDetector.isNativeLib(entry.name)) { - hasNativeLibs = true - break - } - entry = zis.nextEntry - } - } - - if (!hasNativeLibs) { - file.copyTo(outputFile, overwrite = true) - continue - } - - // Rewrite JAR without native lib entries - ZipInputStream(BufferedInputStream(file.inputStream())).use { zis -> - ZipOutputStream(BufferedOutputStream(FileOutputStream(outputFile))).use { zos -> - var entry = zis.nextEntry - while (entry != null) { - if (!entry.isDirectory && NativeLibArchDetector.isNativeLib(entry.name)) { - logger.lifecycle( - "Sandboxing: stripped '{}' from {}", - entry.name, - file.name, - ) - strippedCount++ - } else { - zos.putNextEntry( - ZipEntry(entry.name).apply { - time = entry.time - if (entry.method == ZipEntry.STORED) { - method = ZipEntry.STORED - size = entry.size - compressedSize = entry.compressedSize - crc = entry.crc - } - }, - ) - if (!entry.isDirectory) { - zis.copyTo(zos) - } - zos.closeEntry() - } - entry = zis.nextEntry - } - } - } - } - - if (strippedCount > 0) { - logger.lifecycle( - "Sandboxing: stripped {} native lib(s) from JARs to avoid duplication with extracted resources", - strippedCount, - ) - } - } - - private companion object { - const val MAIN_JAR_META_FILE = ".main-jar-name" - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt deleted file mode 100644 index aabf8c715..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.application.tasks - -import dev.nucleusframework.nucleus.desktop.application.dsl.DEFAULT_RUNTIME_MODULES -import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath -import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.Directory -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* -import org.gradle.work.DisableCachingByDefault - -@DisableCachingByDefault(because = "Depends on external jdeps tool") -abstract class AbstractSuggestModulesTask : AbstractNucleusTask() { - @get:Input - val javaHome: Property = - objects.notNullProperty().apply { - set(providers.systemProperty("java.home")) - } - - @get:InputFiles - @get:Classpath - val files: ConfigurableFileCollection = objects.fileCollection() - - @get:InputFile - @get:PathSensitive(PathSensitivity.ABSOLUTE) - val launcherMainJar: RegularFileProperty = objects.fileProperty() - - @get:Input - val modules: ListProperty = objects.listProperty(String::class.java) - - @get:Input - val jvmTarget: Property = objects.notNullProperty(MIN_JAVA_RUNTIME_VERSION.toString()) - - @get:LocalState - protected val workingDir: Provider = project.layout.buildDirectory.dir("compose/tmp/$name") - - @TaskAction - fun run() { - val jtool = jvmToolFile("jdeps", javaHome = javaHome) - - fileOperations.clearDirs(workingDir) - val args = - arrayListOf().apply { - add("--print-module-deps") - add("--ignore-missing-deps") - add("--multi-release") - add(jvmTarget.get()) - add("--class-path") - add(files.joinToString(java.io.File.pathSeparator) { it.normalizedPath() }) - add(launcherMainJar.ioFile.normalizedPath()) - } - - try { - runExternalTool( - tool = jtool, - args = args, - logToConsole = ExternalToolRunner.LogToConsole.Never, - processStdout = { output -> - val defaultModules = hashSetOf(*DEFAULT_RUNTIME_MODULES) - val suggestedModules = - output - .splitToSequence(",") - .map { it.trim() } - .filter { it.isNotBlank() && it !in defaultModules } - .toSortedSet() - val suggestion = "modules(${suggestedModules.joinToString(", ") { "\"$it\"" }})" - logger.quiet("Suggested runtime modules to include:") - logger.quiet(suggestion) - }, - ) - } finally { - if (!NucleusProperties.preserveWorkingDir(providers).get()) { - fileOperations.delete(workingDir) - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt deleted file mode 100644 index 6aaf1d758..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2020-2024 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.files.copyZipEntry -import dev.nucleusframework.nucleus.desktop.application.internal.files.isJarFile -import dev.nucleusframework.nucleus.internal.utils.delete -import dev.nucleusframework.nucleus.internal.utils.ioFile -import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.RegularFileProperty -import org.gradle.api.tasks.Classpath -import org.gradle.api.tasks.InputFiles -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault -import java.io.ByteArrayInputStream -import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream -import java.io.InputStream -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream - -private const val SERVICES_PREFIX = "META-INF/services/" - -/** - * This task flattens all jars from the input directory into the single one, - * which is used later as a single source for uberjar. - * - * This task is necessary because the standard Jar/Zip task evaluates own `from()` args eagerly - * [in the configuration phase](https://discuss.gradle.org/t/why-is-the-closure-in-from-method-of-copy-task-evaluated-in-config-phase/23469/4) - * and snapshots an empty list of files in the Proguard destination directory, - * instead of a list of real jars after Proguard task execution. - * - * Also, we use output to the single jar instead of flattening to the directory in the filesystem because: - * - Windows filesystem is case-insensitive and not every jar can be unzipped without losing files - * - it's just faster - */ -@DisableCachingByDefault(because = "Flattens JARs into a single uber JAR; fast and not worth caching") -abstract class AbstractJarsFlattenTask : AbstractNucleusTask() { - @get:InputFiles - @get:Classpath - val inputFiles: ConfigurableFileCollection = objects.fileCollection() - - @get:OutputFile - val flattenedJar: RegularFileProperty = objects.fileProperty() - - @get:Internal - val seenEntryNames = hashSetOf() - - /** Accumulated content for META-INF/services/ files that appear in multiple JARs. */ - @get:Internal - val serviceFileContents = linkedMapOf() - - @TaskAction - fun execute() { - seenEntryNames.clear() - serviceFileContents.clear() - fileOperations.delete(flattenedJar) - - ZipOutputStream(FileOutputStream(flattenedJar.ioFile).buffered()).use { outputStream -> - inputFiles.asFileTree.visit { - when { - !it.isDirectory && it.file.isJarFile -> outputStream.writeJarContent(it.file) - !it.isDirectory -> outputStream.writeFile(it.file) - } - } - - // Write merged service files - for ((name, content) in serviceFileContents) { - val bytes = content.toString().toByteArray() - copyZipEntry(ZipEntry(name), ByteArrayInputStream(bytes), outputStream) - } - } - } - - private fun ZipOutputStream.writeJarContent(jarFile: File) = - ZipInputStream(FileInputStream(jarFile)).use { inputStream -> - var inputEntry: ZipEntry? = inputStream.nextEntry - while (inputEntry != null) { - if (isServiceFile(inputEntry.name)) { - mergeServiceFile(inputEntry.name, inputStream) - } else { - writeEntryIfNotSeen(inputEntry, inputStream) - } - inputEntry = inputStream.nextEntry - } - } - - private fun ZipOutputStream.writeFile(file: File) = - FileInputStream(file).use { inputStream -> - writeEntryIfNotSeen(ZipEntry(file.name), inputStream) - } - - private fun ZipOutputStream.writeEntryIfNotSeen( - entry: ZipEntry, - inputStream: InputStream, - ) { - if (entry.name !in seenEntryNames) { - copyZipEntry(entry, inputStream, this) - seenEntryNames += entry.name - } - } - - private fun isServiceFile(name: String): Boolean = - name.startsWith(SERVICES_PREFIX) && name.length > SERVICES_PREFIX.length && '/' !in name.substring(SERVICES_PREFIX.length) - - private fun mergeServiceFile( - name: String, - inputStream: InputStream, - ) { - val text = inputStream.readBytes().toString(Charsets.UTF_8).trim() - if (text.isEmpty()) return - val sb = serviceFileContents.getOrPut(name) { StringBuilder() } - if (sb.isNotEmpty()) sb.append('\n') - sb.append(text) - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt deleted file mode 100644 index bc801ae43..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractNucleusTask.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.tasks - -import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner -import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties -import dev.nucleusframework.nucleus.internal.utils.notNullProperty -import org.gradle.api.DefaultTask -import org.gradle.api.file.ArchiveOperations -import org.gradle.api.file.Directory -import org.gradle.api.file.FileSystemOperations -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.LocalState -import org.gradle.process.ExecOperations -import org.gradle.work.DisableCachingByDefault -import javax.inject.Inject - -@DisableCachingByDefault(because = "Abstract base task, subclasses opt in to caching individually") -abstract class AbstractNucleusTask : DefaultTask() { - @get:Inject - protected abstract val objects: ObjectFactory - - @get:Inject - protected abstract val providers: ProviderFactory - - @get:Inject - protected abstract val execOperations: ExecOperations - - @get:Inject - protected abstract val fileOperations: FileSystemOperations - - @get:Inject - protected abstract val archiveOperations: ArchiveOperations - - @get:LocalState - protected val logsDir: Provider = project.layout.buildDirectory.dir("compose/logs/$name") - - @get:Internal - val verbose: Property = - objects.notNullProperty().apply { - set( - providers.provider { - logger.isDebugEnabled || NucleusProperties.isVerbose(providers).get() - }, - ) - } - - @get:Internal - internal val runExternalTool: ExternalToolRunner - get() = ExternalToolRunner(verbose, logsDir, execOperations) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt deleted file mode 100644 index 514f46dc4..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.desktop.tasks - -import dev.nucleusframework.nucleus.NucleusBuildConfig -import dev.nucleusframework.nucleus.internal.utils.clearDirs -import dev.nucleusframework.nucleus.internal.utils.ioFile -import org.gradle.api.file.Directory -import org.gradle.api.file.FileSystemLocation -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.OutputDirectory -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault - -private const val DEFAULT_COMPOSE_PROGUARD_RULES_FILE_NAME = "default-compose-desktop-rules.pro" -private const val DEFAULT_ENTITLEMENTS_FILE_NAME = "default-entitlements.plist" -private const val DEFAULT_SANDBOX_ENTITLEMENTS_FILE_NAME = "default-sandbox-entitlements.plist" -private const val DEFAULT_SANDBOX_RUNTIME_ENTITLEMENTS_FILE_NAME = "default-sandbox-runtime-entitlements.plist" - -@DisableCachingByDefault(because = "Unpacks bundled resources; fast and not worth caching") -abstract class AbstractUnpackDefaultApplicationResourcesTask : AbstractNucleusTask() { - internal class DefaultResourcesProvider( - resourcesRootDir: Provider, - ) { - val macIcon: Provider = resourcesRootDir.map { it.file("default-icon-mac.icns") } - val windowsIcon: Provider = resourcesRootDir.map { it.file("default-icon-windows.ico") } - val linuxIcon: Provider = resourcesRootDir.map { it.file("default-icon-linux.png") } - val defaultComposeProguardRules: Provider = resourcesRootDir.map { it.file(DEFAULT_COMPOSE_PROGUARD_RULES_FILE_NAME) } - val defaultEntitlements: Provider = resourcesRootDir.map { it.file(DEFAULT_ENTITLEMENTS_FILE_NAME) } - val defaultSandboxEntitlements: Provider = - resourcesRootDir.map { it.file(DEFAULT_SANDBOX_ENTITLEMENTS_FILE_NAME) } - val defaultSandboxRuntimeEntitlements: Provider = - resourcesRootDir.map { it.file(DEFAULT_SANDBOX_RUNTIME_ENTITLEMENTS_FILE_NAME) } - } - - @OutputDirectory - val destinationDir: Provider = - project.layout.buildDirectory.dir( - "compose/default-resources/${NucleusBuildConfig.composeGradlePluginVersion}", - ) - - @get:Internal - internal val resources = DefaultResourcesProvider(destinationDir) - - @TaskAction - fun run() { - fileOperations.clearDirs(destinationDir) - - unpack(iconSourcePath("mac", "icns"), resources.macIcon) - unpack(iconSourcePath("windows", "ico"), resources.windowsIcon) - unpack(iconSourcePath("linux", "png"), resources.linuxIcon) - unpack(DEFAULT_COMPOSE_PROGUARD_RULES_FILE_NAME, resources.defaultComposeProguardRules) - unpack(DEFAULT_ENTITLEMENTS_FILE_NAME, resources.defaultEntitlements) - unpack(DEFAULT_SANDBOX_ENTITLEMENTS_FILE_NAME, resources.defaultSandboxEntitlements) - unpack(DEFAULT_SANDBOX_RUNTIME_ENTITLEMENTS_FILE_NAME, resources.defaultSandboxRuntimeEntitlements) - } - - private fun iconSourcePath( - platformName: String, - iconExt: String, - ): String = "default-compose-desktop-icon-$platformName.$iconExt" - - private fun unpack( - from: String, - to: Provider, - ) { - val targetIoFile = - to.ioFile.apply { - if (exists()) { - delete() - } else { - parentFile.mkdirs() - } - createNewFile() - } - - val iconResourceStream = - javaClass.classLoader.getResourceAsStream(from) - ?: error("Could not find default resource: $from") - iconResourceStream.use { input -> - targetIoFile.outputStream().buffered().use { output -> - input.copyTo(output) - } - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt deleted file mode 100644 index b246b7998..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/experimental/internal/checkExperimentalTargets.kt +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.experimental.internal - -import dev.nucleusframework.nucleus.internal.utils.findLocalOrGlobalProperty -import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget - -internal fun Project.configureExperimentalTargetsFlagsCheck(mppExt: KotlinMultiplatformExtension) { - gradle.taskGraph.whenReady { - checkExperimentalTargetsWithSkikoIsEnabled(project, mppExt) - } -} - -private const val SKIKO_ARTIFACT_PREFIX = "org.jetbrains.skiko:skiko" - -private class TargetType( - val id: String, - val identifiers: List, -) - -private val TargetType.gradlePropertyName get() = "org.jetbrains.compose.experimental.$id.enabled" - -private val EXPERIMENTAL_TARGETS: Set = - setOf( - TargetType("macos", identifiers = listOf("macosArm64")), - ) - -private sealed interface CheckResult { - object Success : CheckResult - - class Fail( - val target: TargetType, - ) : CheckResult -} - -private fun checkExperimentalTargetsWithSkikoIsEnabled( - project: Project, - mppExt: KotlinMultiplatformExtension, -) { - val failedResults = - mppExt.targets - .map { checkTarget(project, it) } - .filterIsInstance() - .distinctBy { it.target } - - if (failedResults.isNotEmpty()) { - val ids = failedResults.map { it.target.id } - val msg = - buildString { - appendLine("ERROR: Compose targets '$ids' are experimental and may have bugs!") - appendLine("But, if you still want to use them, add to gradle.properties:") - failedResults.forEach { - appendLine("${it.target.gradlePropertyName}=true") - } - } - - project.logger.error(msg) - error(msg) - } -} - -private fun checkTarget( - project: Project, - target: KotlinTarget, -): CheckResult { - val targetIdentifier = target.disambiguationClassifier ?: return CheckResult.Success - - val targetType = - EXPERIMENTAL_TARGETS.firstOrNull { - it.identifiers.contains(targetIdentifier) - } ?: return CheckResult.Success - - val targetConfigurationNames = - target.compilations.map { compilation -> - compilation.compileDependencyConfigurationName - } - - project.configurations.forEach { configuration -> - if (configuration.isCanBeResolved && configuration.name in targetConfigurationNames) { - val resolvedConfiguration = configuration.resolvedConfiguration - if (!resolvedConfiguration.hasError()) { - val containsSkikoArtifact = - resolvedConfiguration.resolvedArtifacts.any { - it.id.displayName.contains(SKIKO_ARTIFACT_PREFIX) - } - if (containsSkikoArtifact) { - val targetIsDisabled = project.findLocalOrGlobalProperty(targetType.gradlePropertyName).map { it != "true" } - if (targetIsDisabled.get()) { - return CheckResult.Fail(targetType) - } - } - } - } - } - return CheckResult.Success -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt deleted file mode 100644 index dc92d5761..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/ComposeCompilerArtifactProvider.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal - -import dev.nucleusframework.nucleus.internal.ComposeCompilerArtifactProvider.DefaultCompiler.pluginArtifact -import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact - -internal class ComposeCompilerArtifactProvider( - private val customPluginString: () -> String, -) { - val compilerArtifact: SubpluginArtifact by lazy { - val customPlugin = customPluginString() - val customCoordinates = customPlugin.split(":") - when (customCoordinates.size) { - 1 -> { - val customVersion = customCoordinates[0] - check(customVersion.isNotBlank()) { "'compose.kotlinCompilerPlugin' cannot be blank!" } - pluginArtifact(version = customVersion) - } - 3 -> - pluginArtifact( - version = customCoordinates[2], - groupId = customCoordinates[0], - artifactId = customCoordinates[1], - ) - else -> - error( - """ - Illegal format of 'compose.kotlinCompilerPlugin' property. - Expected format: either '' or '::' - Actual value: '$customPlugin' - """.trimIndent(), - ) - } - } - - val compilerHostedArtifact: SubpluginArtifact - get() = - compilerArtifact.run { - val newArtifactId = - if (groupId == DefaultCompiler.GROUP_ID && artifactId == DefaultCompiler.ARTIFACT_ID) { - DefaultCompiler.HOSTED_ARTIFACT_ID - } else { - artifactId - } - - copy(artifactId = newArtifactId) - } - - internal object DefaultCompiler { - const val GROUP_ID = "org.jetbrains.compose.compiler" - const val ARTIFACT_ID = "compiler" - const val HOSTED_ARTIFACT_ID = "compiler-hosted" - - fun pluginArtifact( - version: String, - groupId: String = GROUP_ID, - artifactId: String = ARTIFACT_ID, - ): SubpluginArtifact = SubpluginArtifact(groupId = groupId, artifactId = artifactId, version = version) - } -} - -internal fun SubpluginArtifact.copy( - groupId: String? = null, - artifactId: String? = null, - version: String? = null, -): SubpluginArtifact = - SubpluginArtifact( - groupId = groupId ?: this.groupId, - artifactId = artifactId ?: this.artifactId, - version = version ?: this.version, - ) diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt deleted file mode 100644 index ee1369baf..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/IdeaImportTask.kt +++ /dev/null @@ -1,35 +0,0 @@ -package dev.nucleusframework.nucleus.internal - -import org.gradle.api.DefaultTask -import org.gradle.api.Project -import org.gradle.api.provider.Provider -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.TaskAction -import org.gradle.work.DisableCachingByDefault - -internal fun Project.ideaIsInSyncProvider(): Provider = - provider { - System.getProperty("idea.sync.active", "false").toBoolean() - } - -/** - * This task should be FAST and SAFE! Because it is being run during IDE import. - */ -@DisableCachingByDefault(because = "IDE import task, not a cacheable build step") -internal abstract class IdeaImportTask : DefaultTask() { - @get:Input - val ideaIsInSync: Provider = project.ideaIsInSyncProvider() - - @TaskAction - fun run() { - try { - safeAction() - } catch (e: Exception) { - // message must contain two ':' symbols to be parsed by IDE UI! - logger.error("e: $name task was failed:", e) - if (!ideaIsInSync.get()) throw e - } - } - - abstract fun safeAction() -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt deleted file mode 100644 index 6e7744723..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/Version.kt +++ /dev/null @@ -1,61 +0,0 @@ -package dev.nucleusframework.nucleus.internal - -import kotlin.math.min - -internal data class Version( - val major: Int, - val minor: Int, - val patch: Int, - val meta: String, -) : Comparable { - override fun compareTo(other: Version): Int = - when { - major != other.major -> major - other.major - minor != other.minor -> minor - other.minor - patch != other.patch -> patch - other.patch - else -> { - if (meta.isEmpty()) { - 1 - } else if (other.meta.isEmpty()) { - -1 - } else { - val metaParts = meta.split("-") - val otherMetaParts = other.meta.split("-") - - var result = 0 - for (i in 0 until min(metaParts.size, otherMetaParts.size)) { - val metaPart = metaParts[i] - val otherMetaPart = otherMetaParts[i] - if (metaPart != otherMetaPart) { - result = metaPart.compareTo(otherMetaPart) - break - } - } - if (result != 0) { - result - } else { - if (metaParts.size < otherMetaParts.size) { - 1 - } else if (metaParts.size > otherMetaParts.size) { - -1 - } else { - 0 - } - } - } - } - } - - companion object { - private val SEMVER_REGEXP = """^(\d+)(?:\.(\d*))?(?:\.(\d*))?(?:-(.*))?${'$'}""".toRegex() - - fun fromString(versionString: String): Version { - val matchResult: MatchResult = SEMVER_REGEXP.matchEntire(versionString) ?: return Version(0, 0, 0, "") - val major: Int = matchResult.groups[1]?.value?.toInt() ?: 0 - val minor: Int = matchResult.groups[2]?.value?.toInt() ?: 0 - val patch: Int = matchResult.groups[3]?.value?.toInt() ?: 0 - val meta: String = matchResult.groups[4]?.value ?: "" - return Version(major, minor, patch, meta) - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt deleted file mode 100644 index 13b30a0e8..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/constants.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal - -internal const val KOTLIN_MPP_PLUGIN_ID = "org.jetbrains.kotlin.multiplatform" -internal const val KOTLIN_JVM_PLUGIN_ID = "org.jetbrains.kotlin.jvm" -internal const val KOTLIN_ANDROID_PLUGIN_ID = "org.jetbrains.kotlin.android" -internal const val KOTLIN_JS_PLUGIN_ID = "org.jetbrains.kotlin.js" -internal const val NUCLEUS_PLUGIN_ID = "dev.nucleusframework.nucleus" - -internal const val IDEA_IMPORT_TASK_NAME = "prepareKotlinIdeaImport" diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt deleted file mode 100644 index f8d4aedb2..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/projectExtensions.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal - -import dev.nucleusframework.nucleus.NucleusExtension -import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginExtension -import org.gradle.api.tasks.SourceSetContainer -import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension - -internal val Project.nucleusExt: NucleusExtension? - get() = extensions.findByType(NucleusExtension::class.java) - -internal val Project.mppExt: KotlinMultiplatformExtension - get() = mppExtOrNull ?: error("Could not find KotlinMultiplatformExtension ($project)") - -internal val Project.mppExtOrNull: KotlinMultiplatformExtension? - get() = extensions.findByType(KotlinMultiplatformExtension::class.java) - -internal val Project.kotlinJvmExt: KotlinJvmProjectExtension - get() = kotlinJvmExtOrNull ?: error("Could not find KotlinJvmProjectExtension ($project)") - -internal val Project.kotlinJvmExtOrNull: KotlinJvmProjectExtension? - get() = extensions.findByType(KotlinJvmProjectExtension::class.java) - -internal val Project.kotlinJsExtOrNull: KotlinJsProjectExtension? - get() = extensions.findByType(KotlinJsProjectExtension::class.java) - -internal val Project.javaSourceSets: SourceSetContainer - get() = extensions.getByType(JavaPluginExtension::class.java).sourceSets diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt deleted file mode 100644 index 9e88aaeb9..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/requiredDslProperty.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal - -import kotlin.reflect.KProperty - -internal fun requiredDslProperty(missingMessage: String) = RequiredPropertyDelegate(missingMessage) - -class RequiredPropertyDelegate( - val missingMessage: String, -) { - var realValue: T? = null - - operator fun setValue( - ref: Any, - property: KProperty<*>, - newValue: T, - ) { - realValue = newValue - } - - operator fun getValue( - ref: Any, - property: KProperty<*>, - ): T = realValue ?: error(missingMessage) -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt deleted file mode 100644 index 80e500ea8..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/diagnosticUtils.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import java.io.PrintWriter -import java.io.StringWriter -import java.lang.Exception - -internal fun Exception.stacktraceToString(): String = - StringWriter() - .also { w -> - PrintWriter(w).use { pw -> printStackTrace(pw) } - }.toString() diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt deleted file mode 100644 index 37d6f0bab..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/fileUtils.kt +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import org.gradle.api.Project -import org.gradle.api.file.Directory -import org.gradle.api.file.FileSystemLocation -import org.gradle.api.file.FileSystemOperations -import org.gradle.api.file.RegularFile -import org.gradle.api.provider.Provider -import java.io.File -import java.util.* - -internal fun Provider.toDir(project: Project): Provider = project.layout.dir(map { File(it) }) - -internal fun Provider.fileToDir(project: Project): Provider = project.layout.dir(this) - -internal fun Provider.file(relativePath: String): Provider = map { it.file(relativePath) } - -internal fun Provider.dir(relativePath: String): Provider = map { it.dir(relativePath) } - -internal val Provider.ioFile: File - get() = get().asFile - -internal val Provider.ioFileOrNull: File? - get() = orNull?.asFile - -internal fun FileSystemOperations.delete(vararg files: Any) { - delete { it.delete(*files) } -} - -internal fun FileSystemOperations.mkdirs(vararg dirs: File) { - for (dir in dirs) { - dir.mkdirs() - } -} - -internal fun FileSystemOperations.mkdirs(vararg dirs: Provider) { - mkdirs(*dirs.ioFiles()) -} - -internal fun FileSystemOperations.clearDirs(vararg dirs: File) { - delete(*dirs) - mkdirs(*dirs) -} - -internal fun FileSystemOperations.clearDirs(vararg dirs: Provider) { - clearDirs(*dirs.ioFiles()) -} - -private fun Array>.ioFiles(): Array = - let { providers -> Array(size) { i -> providers[i].ioFile } } - -internal fun lazyLoadProperties(propertiesFile: File): Lazy = - lazy { - loadProperties(propertiesFile) - } - -internal fun loadProperties(propertiesFile: File): Properties = - Properties().apply { - if (propertiesFile.isFile) { - propertiesFile.inputStream().use { - load(it) - } - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt deleted file mode 100644 index c18101b87..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/gradleUtils.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import dev.nucleusframework.nucleus.NucleusBuildConfig -import org.gradle.api.DomainObjectCollection -import org.gradle.api.Project -import org.gradle.api.artifacts.Configuration -import org.gradle.api.logging.Logger -import java.util.* - -internal inline fun Logger.info(fn: () -> String) { - if (isInfoEnabled) { - info(fn()) - } -} - -internal inline fun Logger.debug(fn: () -> String) { - if (isDebugEnabled) { - debug(fn()) - } -} - -val Project.localPropertiesFile get() = project.rootProject.file("local.properties") - -fun Project.getLocalProperty(key: String): String? { - if (localPropertiesFile.exists()) { - val properties = Properties() - localPropertiesFile.inputStream().buffered().use { input -> - properties.load(input) - } - return properties.getProperty(key) - } else { - localPropertiesFile.createNewFile() - return null - } -} - -internal fun Project.detachedComposeGradleDependency( - artifactId: String, - groupId: String = "org.jetbrains.compose", -): Configuration = detachedDependency(groupId = groupId, artifactId = artifactId, version = NucleusBuildConfig.composeGradlePluginVersion) - -internal fun Project.detachedComposeDependency( - artifactId: String, - groupId: String = "org.jetbrains.compose", -): Configuration = - detachedDependency( - groupId = groupId, - artifactId = artifactId, - version = NucleusBuildConfig.composeVersion, - ) - -internal fun Project.detachedDependency( - groupId: String, - artifactId: String, - version: String, -): Configuration = - project.configurations.detachedConfiguration( - project.dependencies.create("$groupId:$artifactId:$version"), - ) - -internal fun Configuration.excludeTransitiveDependencies(): Configuration = apply { isTransitive = false } - -internal inline fun DomainObjectCollection<*>.configureEachWithType(crossinline fn: SubT.() -> Unit) { - configureEach { - if (it is SubT) { - it.fn() - } - } -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt deleted file mode 100644 index 1c6635e3c..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/osUtils.kt +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import dev.nucleusframework.nucleus.desktop.application.internal.files.checkExistingFile -import dev.nucleusframework.nucleus.desktop.application.tasks.MIN_JAVA_RUNTIME_VERSION -import org.gradle.api.provider.Provider -import java.io.File - -internal enum class OS( - val id: String, -) { - Linux("linux"), - Windows("windows"), - MacOS("macos"), -} - -internal enum class Arch( - val id: String, -) { - X64("x64"), - Arm64("arm64"), -} - -internal data class Target( - val os: OS, - val arch: Arch, -) { - val id: String - get() = "${os.id}-${arch.id}" -} - -internal val currentTarget by lazy { - Target(currentOS, currentArch) -} - -internal val currentArch by lazy { - parseArch(System.getProperty("os.arch")) -} - -/** - * Detects the architecture of the JDK at the given [javaHome] path - * by reading its `release` file (`OS_ARCH` property). - * Falls back to [currentArch] if the release file cannot be parsed. - */ -internal fun jdkArch(javaHome: File): Arch { - val releaseFile = javaHome.resolve("release") - if (releaseFile.isFile) { - val osArch = - releaseFile - .readLines() - .firstOrNull { it.startsWith("OS_ARCH=") } - ?.substringAfter("OS_ARCH=") - ?.trim('"') - if (osArch != null) return parseArch(osArch) - } - return currentArch -} - -private fun parseArch(osArch: String): Arch = - when (osArch) { - "x86_64", "amd64" -> Arch.X64 - "aarch64" -> Arch.Arm64 - else -> error("Unsupported OS arch: $osArch") - } - -internal val currentOS: OS by lazy { - val os = System.getProperty("os.name") - when { - os.equals("Mac OS X", ignoreCase = true) -> OS.MacOS - os.startsWith("Win", ignoreCase = true) -> OS.Windows - os.startsWith("Linux", ignoreCase = true) -> OS.Linux - else -> error("Unknown OS name: $os") - } -} - -internal fun executableName(nameWithoutExtension: String): String = - if (currentOS == OS.Windows) "$nameWithoutExtension.exe" else nameWithoutExtension - -internal fun javaExecutable(javaHome: String): String = - File(javaHome) - .resolve("bin/${executableName("java")}") - .absolutePath - -internal object MacUtils { - val codesign: File by lazy { - File("/usr/bin/codesign").checkExistingFile() - } - - val security: File by lazy { - File("/usr/bin/security").checkExistingFile() - } - - val xcrun: File by lazy { - File("/usr/bin/xcrun").checkExistingFile() - } - - val xcodeBuild: File by lazy { - File("/usr/bin/xcodebuild").checkExistingFile() - } - - val make: File by lazy { - File("/usr/bin/make").checkExistingFile() - } - - val open: File by lazy { - File("/usr/bin/open").checkExistingFile() - } - - val plutil: File by lazy { - File("/usr/bin/plutil").checkExistingFile() - } -} - -internal object UnixUtils { - val git: File by lazy { - File("/usr/bin/git").checkExistingFile() - } -} - -internal fun jvmToolFile( - toolName: String, - javaHome: Provider, -): File = jvmToolFile(toolName, File(javaHome.get())) - -internal fun jvmToolFile( - toolName: String, - javaHome: File, -): File { - val jtool = javaHome.resolve("bin/${executableName(toolName)}") - check(jtool.isFile) { - "Invalid JDK: $jtool is not a file! \n" + - "Ensure JAVA_HOME or buildSettings.javaHome is set to JDK $MIN_JAVA_RUNTIME_VERSION or newer" - } - return jtool -} diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt deleted file mode 100644 index 5709057c6..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/providerUtils.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory -import org.jetbrains.kotlin.gradle.plugin.extraProperties - -internal inline fun ObjectFactory.new(vararg params: Any): T = newInstance(T::class.java, *params) - -internal inline fun ObjectFactory.nullableProperty(): Property = property(T::class.java) - -internal inline fun ObjectFactory.notNullProperty(): Property = property(T::class.java) - -internal inline fun ObjectFactory.notNullProperty(defaultValue: T): Property = - property(T::class.java).value(defaultValue) - -internal inline fun Provider.toProperty(objects: ObjectFactory): Property = - objects.property(T::class.java).value(this) - -internal inline fun Task.provider(noinline fn: () -> T): Provider = project.provider(fn) - -internal fun ProviderFactory.valueOrNull(prop: String): Provider = gradleProperty(prop) - -internal fun Provider.toBooleanProvider(defaultValue: Boolean): Provider = - orElse(defaultValue.toString()).map { "true" == it } - -internal fun Project.findLocalOrGlobalProperty( - name: String, - default: String = "", -): Provider = - provider { - if (extraProperties.has(name)) { - extraProperties.get(name).toString() - } else { - providers.gradleProperty(name).getOrElse(default) - } - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt deleted file mode 100644 index 027977c63..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/stringUtils.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2020-2022 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -internal fun String.uppercaseFirstChar(): String = - transformFirstCharIfNeeded( - shouldTransform = { it.isLowerCase() }, - transform = { it.uppercaseChar() }, - ) - -internal fun String.lowercaseFirstChar(): String = - transformFirstCharIfNeeded( - shouldTransform = { it.isUpperCase() }, - transform = { it.lowercaseChar() }, - ) - -private inline fun String.transformFirstCharIfNeeded( - shouldTransform: (Char) -> Boolean, - transform: (Char) -> Char, -): String { - if (isNotEmpty()) { - val firstChar = this[0] - if (shouldTransform(firstChar)) { - val sb = java.lang.StringBuilder(length) - sb.append(transform(firstChar)) - sb.append(this, 1, length) - return sb.toString() - } - } - return this -} - -internal fun joinDashLowercaseNonEmpty(vararg parts: String): String = - parts - .filter { it.isNotEmpty() } - .joinToString(separator = "-") { it.lowercase() } - -internal fun joinLowerCamelCase(vararg parts: String): String = - parts.withIndex().joinToString(separator = "") { (i, part) -> - if (i == 0) part.lowercaseFirstChar() else part.uppercaseFirstChar() - } - -internal fun joinUpperCamelCase(vararg parts: String): String = - parts.joinToString(separator = "") { - it.uppercaseFirstChar() - } diff --git a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt b/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt deleted file mode 100644 index 4b80a840a..000000000 --- a/plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleus/internal/utils/taskUtils.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020-2023 JetBrains s.r.o. and respective authors and developers. - * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. - */ - -package dev.nucleusframework.nucleus.internal.utils - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.tasks.TaskContainer -import org.gradle.api.tasks.TaskProvider - -internal fun TaskProvider.dependsOn(vararg dependencies: Any) { - configure { it.dependsOn(*dependencies) } -} - -internal inline fun Project.registerTask( - name: String, - crossinline fn: T.() -> Unit, -): TaskProvider = - tasks.register(name, T::class.java) { task -> - task.fn() - } - -@Suppress("UNCHECKED_CAST") -inline fun TaskContainer.registerOrConfigure( - taskName: String, - crossinline configureFn: T.() -> Unit, -): TaskProvider = - when (taskName) { - in names -> named(taskName) as TaskProvider - else -> register(taskName, T::class.java) - }.apply { - configure { it.configureFn() } - } From dc3df087f6ac95e3c2451b4fa3fca20bcf7e9a82 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 14:42:30 +0300 Subject: [PATCH 03/30] chore: Update detekt baselines for new package names --- core-runtime/detekt-baseline.xml | 8 +++ decorated-window-awt/detekt-baseline.xml | 7 ++ decorated-window-tao/detekt-baseline.xml | 84 ++++++++++++++++++++++++ sample-jni/detekt-baseline.xml | 19 ++++++ sample-shared/detekt-baseline.xml | 66 +++++++++++++++++++ sample-tao/detekt-baseline.xml | 50 ++++++++++++++ taskbar-progress/detekt-baseline.xml | 7 ++ 7 files changed, 241 insertions(+) create mode 100644 core-runtime/detekt-baseline.xml create mode 100644 decorated-window-awt/detekt-baseline.xml create mode 100644 decorated-window-tao/detekt-baseline.xml create mode 100644 sample-jni/detekt-baseline.xml create mode 100644 sample-shared/detekt-baseline.xml create mode 100644 sample-tao/detekt-baseline.xml create mode 100644 taskbar-progress/detekt-baseline.xml diff --git a/core-runtime/detekt-baseline.xml b/core-runtime/detekt-baseline.xml new file mode 100644 index 000000000..14b92d2b5 --- /dev/null +++ b/core-runtime/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + LoopWithTooManyJumpStatements:NativeLibraryLoader.kt:NativeLibraryLoader$for + TooGenericExceptionCaught:NativeLibraryLoader.kt:NativeLibraryLoader$e: Exception + + diff --git a/decorated-window-awt/detekt-baseline.xml b/decorated-window-awt/detekt-baseline.xml new file mode 100644 index 000000000..bba9eb206 --- /dev/null +++ b/decorated-window-awt/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + MatchingDeclarationName:AwtDecoratedWindow.kt:AwtDecoratedWindowScope : DecoratedWindowScopeFrameWindowScope + + diff --git a/decorated-window-tao/detekt-baseline.xml b/decorated-window-tao/detekt-baseline.xml new file mode 100644 index 000000000..04d26ca3c --- /dev/null +++ b/decorated-window-tao/detekt-baseline.xml @@ -0,0 +1,84 @@ + + + + + ComplexCondition:NativeViewOverlayController.kt:NativeViewOverlayController$previous != null && previous[0] == xPx && previous[1] == yPx && previous[2] == widthPx && previous[3] == heightPx + ComplexCondition:NativeViewOverlayController.windows.kt:NativeViewOverlayControllerWindows$previous != null && previous[0] == xPx && previous[1] == yPx && previous[2] == widthPx && previous[3] == heightPx + CyclomaticComplexMethod:DecoratedWindow.kt:@Suppress("LongParameterList", "FunctionNaming") internal fun ApplicationScope.openDecoratedWindow: TaoWindow + CyclomaticComplexMethod:DecoratedWindowComposable.kt:@Suppress("LongParameterList", "FunctionNaming", "LongMethod") @Composable fun ApplicationScope.DecoratedWindow + CyclomaticComplexMethod:TaoSemanticsObserver.kt:TaoSemanticsObserver$private fun describe: Triple<TaoA11yRole, Int, Int> + CyclomaticComplexMethod:TaoSemanticsObserver.kt:TaoSemanticsObserver$private fun walk + ForbiddenComment:TaoComposeSceneHost.kt:TaoComposeSceneHost$// TODO: hover effects on macOS don't render until the user clicks once + ForbiddenComment:TaoPopupSceneLayerWindows.kt:TaoPopupSceneLayerWindows$/* TODO: full-window scrim surface */ + LargeClass:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux + LongMethod:DecoratedWindow.kt:@Suppress("FunctionNaming", "LongParameterList") private fun ApplicationScope.openDecoratedWindowLinux: TaoWindow + LongMethod:DecoratedWindow.kt:@Suppress("LongParameterList", "FunctionNaming") internal fun ApplicationScope.openDecoratedWindow: TaoWindow + LongMethod:TaoSemanticsObserver.kt:TaoSemanticsObserver$private fun describe: Triple<TaoA11yRole, Int, Int> + LongMethod:TaoSemanticsObserver.kt:TaoSemanticsObserver$private fun walk + LoopWithTooManyJumpStatements:WindowControlsLinux.kt:for + MagicNumber:DecoratedDialog.kt:1000.0 + MagicNumber:DecoratedDialog.kt:3 + MagicNumber:DecoratedWindow.kt:28f + MagicNumber:DecoratedWindow.kt:32f + MagicNumber:DecoratedWindowComposable.kt:1000 + MagicNumber:DecoratedWindowComposable.kt:1000.0 + MagicNumber:DecoratedWindowComposable.kt:1000f + MagicNumber:DecoratedWindowComposable.kt:3 + MagicNumber:NativeView.kt:3 + MagicNumber:NativeViewOverlayController.kt:NativeViewOverlayController$3 + MagicNumber:NativeViewOverlayController.kt:NativeViewOverlayController$4 + MagicNumber:NativeViewOverlayController.windows.kt:NativeViewOverlayControllerWindows$3 + MagicNumber:NativeViewOverlayController.windows.kt:NativeViewOverlayControllerWindows$4 + MagicNumber:PainterToRgba.kt:255 + MagicNumber:PainterToRgba.kt:255f + MagicNumber:PainterToRgba.kt:4 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$0x80 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$0xC0 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$24 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$4 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$76 + MagicNumber:TaoAccessibility.kt:TaoA11ySnapshotSerializer$8 + MagicNumber:TaoAccessibility.kt:TaoAccessibilityController$8 + MagicNumber:TaoComposeSceneHost.kt:TaoComposeSceneHost$1000f + MagicNumber:TaoComposeSceneHost.kt:TaoComposeSceneHost$1024f + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$1000f + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$1024 + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$1024f + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$12 + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$3 + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux$5 + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux.SwapThread$1_000_000 + MagicNumber:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux.SwapThread$50 + MagicNumber:TaoComposeSceneHostWindows.kt:TaoComposeSceneHostWindows$1000f + MagicNumber:TaoComposeSceneHostWindows.kt:TaoComposeSceneHostWindows$1024f + MagicNumber:TaoComposeSceneHostWindows.kt:TaoComposeSceneHostWindows$28 + MagicNumber:TaoLinuxOverlayController.kt:TaoLinuxOverlayControllerImpl.InputCallback$3 + MagicNumber:TaoMainDispatcher.kt:TaoMainDispatcher$1_000_000_000L + MagicNumber:TaoMainDispatcher.kt:TaoMainDispatcher$60 + MagicNumber:TaoSemanticsObserver.kt:TaoSemanticsObserver$0.1f + MagicNumber:TaoSemanticsObserver.kt:TaoSemanticsObserver$0.9f + MagicNumber:TaoSemanticsObserver.kt:TaoSemanticsObserver$0xFFFFFFFFL + MagicNumber:TaoSemanticsObserver.kt:TaoSemanticsObserver$4 + MagicNumber:TaoSemanticsObserver.kt:TaoSemanticsObserver$64 + MagicNumber:TaoSyntheticKey.kt:0x20 + MagicNumber:TaoSyntheticKey.kt:0x7F + MagicNumber:TaoWindow.kt:TaoWindow$1000f + MatchingDeclarationName:NativeViewOverlayController.windows.kt:NativeViewOverlayControllerWindows + MatchingDeclarationName:PopupNativeBridge.windows.kt:PopupNativeBridgeWindows + MayBeConstant:TaoMainDispatcher.kt:TaoMainDispatcher$/** * Re-arm throttle. When a pumped block re-dispatches itself synchronously * (very common with Compose's state-observer / snapshot-apply machinery — * `LazyColumn` + scrollbar can cycle through ~150 k pumps/sec at idle), * the pump→drain→re-arm→nativeWake→pump loop pegs the Tao main thread * at 100 % CPU. AWT-based backends don't see this because the EDT only * processes pending work at ~60 Hz; we mimic that here by deferring the * re-arm `nativeWake` through a small delay rather than calling it * synchronously inside [pump]. New external dispatches still wake the * loop immediately — the delay only applies when the queue is non-empty * *after* a drain (i.e. blocks added by the just-run blocks). */ private val pumpReArmIntervalNs = 1_000_000_000L / 60 + NestedBlockDepth:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux.SwapThread$override fun run + PrintStackTrace:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux.SwapThread$t + PrintStackTrace:TaoMainDispatcher.kt:TaoMainDispatcher$t + ReturnCount:DecoratedWindowComposable.kt:private fun applyAlignedPosition: Boolean + TooGenericExceptionCaught:TaoComposeSceneHostLinux.kt:TaoComposeSceneHostLinux.SwapThread$t: Throwable + TooGenericExceptionCaught:TaoMainDispatcher.kt:TaoMainDispatcher$t: Throwable + TooManyFunctions:NativeTaoBridge.kt:NativeTaoBridge + TooManyFunctions:NativeViewOverlayController.windows.kt:NativeViewOverlayControllerWindows$<no name provided> : TaoPopupHostWindows + TooManyFunctions:PopupNativeBridge.kt:PopupNativeBridge + TooManyFunctions:TaoPopupHostWindows.kt:TaoPopupHostWindows + TooManyFunctions:TaoWindow.kt:TaoWindow + UnusedParameter:DecoratedWindow.kt:windowHandle: Long + UnusedParameter:TaoLinuxOverlayController.kt:TaoLinuxOverlayControllerImpl$button: Int + UnusedParameter:WindowControlsLinux.kt:isCloseButton: Boolean = false + + diff --git a/sample-jni/detekt-baseline.xml b/sample-jni/detekt-baseline.xml new file mode 100644 index 000000000..16c6fa90e --- /dev/null +++ b/sample-jni/detekt-baseline.xml @@ -0,0 +1,19 @@ + + + + + LongMethod:Main.kt:fun main + MagicNumber:ActionsTab.kt:0xFF7A8088 + MagicNumber:ActionsTab.kt:0xFF8AB4FF + MagicNumber:ActionsTab.kt:0xFFFF7777 + MagicNumber:ActionsTab.kt:2_000 + MagicNumber:Main.kt:0xFF0F1115 + MagicNumber:Main.kt:0xFF15181D + MagicNumber:Main.kt:0xFF1A1D24 + MagicNumber:Main.kt:0xFF34D399 + MagicNumber:Main.kt:0xFF6B7280 + MagicNumber:Main.kt:0xFF8AB4FF + MagicNumber:Main.kt:0xFFA0A4B0 + MagicNumber:Main.kt:0xFFE6E6E6 + + diff --git a/sample-shared/detekt-baseline.xml b/sample-shared/detekt-baseline.xml new file mode 100644 index 000000000..479442931 --- /dev/null +++ b/sample-shared/detekt-baseline.xml @@ -0,0 +1,66 @@ + + + + + LongMethod:A11yTab.kt:@Composable fun A11yTab + LongMethod:ComplexTab.kt:@Composable private fun TodoListSection + MagicNumber:A11yTab.kt:0.5f + MagicNumber:A11yTab.kt:0xFF11151B + MagicNumber:A11yTab.kt:0xFF12141A + MagicNumber:A11yTab.kt:0xFF1F2937 + MagicNumber:A11yTab.kt:0xFF34D399 + MagicNumber:A11yTab.kt:0xFF374151 + MagicNumber:A11yTab.kt:0xFF6B7280 + MagicNumber:A11yTab.kt:0xFF8AB4FF + MagicNumber:A11yTab.kt:0xFF9CA3AF + MagicNumber:A11yTab.kt:0xFFCBD5E1 + MagicNumber:A11yTab.kt:0xFFE6E6E6 + MagicNumber:A11yTab.kt:0xFFEF4444 + MagicNumber:A11yTab.kt:0xFFF59E0B + MagicNumber:A11yTab.kt:100 + MagicNumber:A11yTab.kt:1000 + MagicNumber:Common.kt:0xFF15181D + MagicNumber:Common.kt:0xFF8AB4FF + MagicNumber:Common.kt:0xFFA0A4B0 + MagicNumber:Common.kt:200 + MagicNumber:ComplexTab.kt:0.03f + MagicNumber:ComplexTab.kt:0xFF11151B + MagicNumber:ComplexTab.kt:0xFF12141A + MagicNumber:ComplexTab.kt:0xFF1A1F2A + MagicNumber:ComplexTab.kt:0xFF1F2937 + MagicNumber:ComplexTab.kt:0xFF34D399 + MagicNumber:ComplexTab.kt:0xFF374151 + MagicNumber:ComplexTab.kt:0xFF6B7280 + MagicNumber:ComplexTab.kt:0xFF8AB4FF + MagicNumber:ComplexTab.kt:0xFF9CA3AF + MagicNumber:ComplexTab.kt:0xFFCBD5E1 + MagicNumber:ComplexTab.kt:0xFFE6E6E6 + MagicNumber:ComplexTab.kt:100 + MagicNumber:ComplexTab.kt:3L + MagicNumber:ComplexTab.kt:4L + MagicNumber:EventsTab.kt:0xFF7A8088 + MagicNumber:EventsTab.kt:0xFFE6E6E6 + MagicNumber:FancyDemo.kt:0.27f + MagicNumber:FancyDemo.kt:0.42f + MagicNumber:FancyDemo.kt:0.5f + MagicNumber:FancyDemo.kt:0xFF06B6D4 + MagicNumber:FancyDemo.kt:0xFF07080B + MagicNumber:FancyDemo.kt:0xFF6366F1 + MagicNumber:FancyDemo.kt:0xFF8AB4FF + MagicNumber:FancyDemo.kt:0xFFB7B9C4 + MagicNumber:FancyDemo.kt:0xFFEC4899 + MagicNumber:FancyDemo.kt:0xFFF59E0B + MagicNumber:FancyDemo.kt:0xFFF5F5FA + MagicNumber:FancyDemo.kt:1.3f + MagicNumber:ScrollTab.kt:0xFFE6E6E6 + MagicNumber:ScrollTab.kt:200 + MagicNumber:ZoomTab.kt:0xFF0F1115 + MagicNumber:ZoomTab.kt:0xFF15181D + MagicNumber:ZoomTab.kt:0xFF34D399 + MagicNumber:ZoomTab.kt:0xFF8AB4FF + MagicNumber:ZoomTab.kt:0xFF8B5CF6 + MagicNumber:ZoomTab.kt:0xFFA0A4B0 + MagicNumber:ZoomTab.kt:0xFFE6E6E6 + MatchingDeclarationName:Common.kt:Tab + + diff --git a/sample-tao/detekt-baseline.xml b/sample-tao/detekt-baseline.xml new file mode 100644 index 000000000..4df3f6f5f --- /dev/null +++ b/sample-tao/detekt-baseline.xml @@ -0,0 +1,50 @@ + + + + + CyclomaticComplexMethod:Main.kt:private fun runApp + EmptyFunctionBlock:WebViewTab.kt:<no name provided>${} + LongMethod:ActionsTab.kt:@Composable fun ActionsTab + LongMethod:Main.kt:private fun runApp + MagicNumber:ActionsTab.kt:0xFF0F1115 + MagicNumber:ActionsTab.kt:0xFF7A8088 + MagicNumber:ActionsTab.kt:0xFF8AB4FF + MagicNumber:ActionsTab.kt:0xFFB0B5BD + MagicNumber:ActionsTab.kt:0xFFB7B9C4 + MagicNumber:ActionsTab.kt:0xFFFF7777 + MagicNumber:ActionsTab.kt:2_000 + MagicNumber:Main.kt:0xFF0F1115 + MagicNumber:Main.kt:0xFF15171C + MagicNumber:Main.kt:0xFF15181D + MagicNumber:Main.kt:0xFF1A1D24 + MagicNumber:Main.kt:0xFF1F2630 + MagicNumber:Main.kt:0xFF334155 + MagicNumber:Main.kt:0xFF34D399 + MagicNumber:Main.kt:0xFF3B82F6 + MagicNumber:Main.kt:0xFF6B7280 + MagicNumber:Main.kt:0xFF8AB4FF + MagicNumber:Main.kt:0xFF8B5CF6 + MagicNumber:Main.kt:0xFFA0A4B0 + MagicNumber:Main.kt:0xFFE6E6E6 + MagicNumber:SwiftUITab.kt:0.55f + MagicNumber:SwiftUITab.kt:0xCC0F172A + MagicNumber:SwiftUITab.kt:0xFF0F1115 + MagicNumber:SwiftUITab.kt:0xFFE6E6E6 + MagicNumber:WebViewTab.kt:0.3f + MagicNumber:WebViewTab.kt:0.4f + MagicNumber:WebViewTab.kt:0x4080D8FF + MagicNumber:WebViewTab.kt:0xCC0F172A + MagicNumber:WebViewTab.kt:0xFF0F1115 + MagicNumber:WebViewTab.kt:0xFF60A5FA + MagicNumber:WebViewTab.kt:0xFFE6E6E6 + MagicNumber:WebViewTab.kt:120L + MaxLineLength:Main.kt:. + MaxLineLength:Main.kt:<no name provided>$private val flavors = arrayOf(java.awt.datatransfer.DataFlavor.javaFileListFlavor) + TooGenericExceptionCaught:SampleSwiftUIBridge.kt:SampleSwiftUIBridge$t: Throwable + TooManyFunctions:SampleWebViewWindowsBridge.kt:SampleWebViewWindowsBridge + WildcardImport:Main.kt:import androidx.compose.foundation.layout.* + WildcardImport:Main.kt:import androidx.compose.runtime.* + WildcardImport:Main.kt:import androidx.compose.ui.input.key.* + WildcardImport:Main.kt:import dev.nucleusframework.sampleshared.* + + diff --git a/taskbar-progress/detekt-baseline.xml b/taskbar-progress/detekt-baseline.xml new file mode 100644 index 000000000..9de2083a5 --- /dev/null +++ b/taskbar-progress/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + TooManyFunctions:TaskbarProgress.kt:TaskbarProgress + + From 2920d3d2cdb522b7d331ace333436ae234532ef1 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 14:49:27 +0300 Subject: [PATCH 04/30] Fix jewel-sample Cursor import --- aot-runtime/config/ktlint/baseline.xml | 3 + autolaunch/config/ktlint/baseline.xml | 3 + config/ktlint/baseline.xml | 3 + core-runtime/config/ktlint/baseline.xml | 3 + darkmode-detector/config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 786 ++++++++++++++++++ energy-manager/config/ktlint/baseline.xml | 3 + example/config/ktlint/baseline.xml | 3 + freedesktop-icons/config/ktlint/baseline.xml | 3 + global-hotkey/config/ktlint/baseline.xml | 3 + graalvm-runtime/config/ktlint/baseline.xml | 3 + jewel-sample/config/ktlint/baseline.xml | 3 + .../showcase/components/Borders.kt | 2 +- launcher-linux/config/ktlint/baseline.xml | 3 + launcher-macos/config/ktlint/baseline.xml | 3 + launcher-windows/config/ktlint/baseline.xml | 3 + linux-hidpi/config/ktlint/baseline.xml | 3 + media-control/config/ktlint/baseline.xml | 3 + menu-macos/config/ktlint/baseline.xml | 3 + native-http-ktor/config/ktlint/baseline.xml | 3 + native-http-okhttp/config/ktlint/baseline.xml | 3 + native-http/config/ktlint/baseline.xml | 3 + native-ssl/config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + notification-linux/config/ktlint/baseline.xml | 3 + notification-macos/config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + sample-cmp/config/ktlint/baseline.xml | 3 + sample-jni/config/ktlint/baseline.xml | 3 + sample-shared/config/ktlint/baseline.xml | 3 + sample-tao/config/ktlint/baseline.xml | 356 ++++++++ scheduler-demo/config/ktlint/baseline.xml | 3 + scheduler-testing/config/ktlint/baseline.xml | 3 + scheduler/config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + sf-symbols/config/ktlint/baseline.xml | 3 + system-color/config/ktlint/baseline.xml | 3 + system-info-demo/config/ktlint/baseline.xml | 3 + system-info/config/ktlint/baseline.xml | 3 + .../config/ktlint/baseline.xml | 3 + taskbar-progress/config/ktlint/baseline.xml | 3 + updater-runtime/config/ktlint/baseline.xml | 3 + 51 files changed, 1287 insertions(+), 1 deletion(-) create mode 100644 aot-runtime/config/ktlint/baseline.xml create mode 100644 autolaunch/config/ktlint/baseline.xml create mode 100644 config/ktlint/baseline.xml create mode 100644 core-runtime/config/ktlint/baseline.xml create mode 100644 darkmode-detector/config/ktlint/baseline.xml create mode 100644 decorated-window-awt/config/ktlint/baseline.xml create mode 100644 decorated-window-core/config/ktlint/baseline.xml create mode 100644 decorated-window-jbr/config/ktlint/baseline.xml create mode 100644 decorated-window-jewel/config/ktlint/baseline.xml create mode 100644 decorated-window-jni/config/ktlint/baseline.xml create mode 100644 decorated-window-material2/config/ktlint/baseline.xml create mode 100644 decorated-window-material3/config/ktlint/baseline.xml create mode 100644 decorated-window-tao/config/ktlint/baseline.xml create mode 100644 energy-manager/config/ktlint/baseline.xml create mode 100644 example/config/ktlint/baseline.xml create mode 100644 freedesktop-icons/config/ktlint/baseline.xml create mode 100644 global-hotkey/config/ktlint/baseline.xml create mode 100644 graalvm-runtime/config/ktlint/baseline.xml create mode 100644 jewel-sample/config/ktlint/baseline.xml create mode 100644 launcher-linux/config/ktlint/baseline.xml create mode 100644 launcher-macos/config/ktlint/baseline.xml create mode 100644 launcher-windows/config/ktlint/baseline.xml create mode 100644 linux-hidpi/config/ktlint/baseline.xml create mode 100644 media-control/config/ktlint/baseline.xml create mode 100644 menu-macos/config/ktlint/baseline.xml create mode 100644 native-http-ktor/config/ktlint/baseline.xml create mode 100644 native-http-okhttp/config/ktlint/baseline.xml create mode 100644 native-http/config/ktlint/baseline.xml create mode 100644 native-ssl/config/ktlint/baseline.xml create mode 100644 notification-common/config/ktlint/baseline.xml create mode 100644 notification-linux/config/ktlint/baseline.xml create mode 100644 notification-macos/config/ktlint/baseline.xml create mode 100644 notification-windows/config/ktlint/baseline.xml create mode 100644 nucleus-application/config/ktlint/baseline.xml create mode 100644 sample-cmp/config/ktlint/baseline.xml create mode 100644 sample-jni/config/ktlint/baseline.xml create mode 100644 sample-shared/config/ktlint/baseline.xml create mode 100644 sample-tao/config/ktlint/baseline.xml create mode 100644 scheduler-demo/config/ktlint/baseline.xml create mode 100644 scheduler-testing/config/ktlint/baseline.xml create mode 100644 scheduler/config/ktlint/baseline.xml create mode 100644 service-management-demo/config/ktlint/baseline.xml create mode 100644 service-management-macos/config/ktlint/baseline.xml create mode 100644 sf-symbols/config/ktlint/baseline.xml create mode 100644 system-color/config/ktlint/baseline.xml create mode 100644 system-info-demo/config/ktlint/baseline.xml create mode 100644 system-info/config/ktlint/baseline.xml create mode 100644 taskbar-progress-tao/config/ktlint/baseline.xml create mode 100644 taskbar-progress/config/ktlint/baseline.xml create mode 100644 updater-runtime/config/ktlint/baseline.xml diff --git a/aot-runtime/config/ktlint/baseline.xml b/aot-runtime/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/aot-runtime/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/autolaunch/config/ktlint/baseline.xml b/autolaunch/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/autolaunch/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/config/ktlint/baseline.xml b/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/core-runtime/config/ktlint/baseline.xml b/core-runtime/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/core-runtime/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/darkmode-detector/config/ktlint/baseline.xml b/darkmode-detector/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/darkmode-detector/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-awt/config/ktlint/baseline.xml b/decorated-window-awt/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-awt/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-core/config/ktlint/baseline.xml b/decorated-window-core/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-core/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-jbr/config/ktlint/baseline.xml b/decorated-window-jbr/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-jbr/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-jewel/config/ktlint/baseline.xml b/decorated-window-jewel/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-jewel/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-jni/config/ktlint/baseline.xml b/decorated-window-jni/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-jni/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-material2/config/ktlint/baseline.xml b/decorated-window-material2/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-material2/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-material3/config/ktlint/baseline.xml b/decorated-window-material3/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/decorated-window-material3/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/decorated-window-tao/config/ktlint/baseline.xml b/decorated-window-tao/config/ktlint/baseline.xml new file mode 100644 index 000000000..f6670aae7 --- /dev/null +++ b/decorated-window-tao/config/ktlint/baseline.xml @@ -0,0 +1,786 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/energy-manager/config/ktlint/baseline.xml b/energy-manager/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/energy-manager/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/example/config/ktlint/baseline.xml b/example/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/example/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/freedesktop-icons/config/ktlint/baseline.xml b/freedesktop-icons/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/freedesktop-icons/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/global-hotkey/config/ktlint/baseline.xml b/global-hotkey/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/global-hotkey/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/graalvm-runtime/config/ktlint/baseline.xml b/graalvm-runtime/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/graalvm-runtime/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/jewel-sample/config/ktlint/baseline.xml b/jewel-sample/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/jewel-sample/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/jewel-sample/src/main/kotlin/jewelsample/showcase/components/Borders.kt b/jewel-sample/src/main/kotlin/jewelsample/showcase/components/Borders.kt index 79ddcf7e9..999028626 100644 --- a/jewel-sample/src/main/kotlin/jewelsample/showcase/components/Borders.kt +++ b/jewel-sample/src/main/kotlin/jewelsample/showcase/components/Borders.kt @@ -39,7 +39,7 @@ import org.jetbrains.jewel.ui.icons.AllIconsKeys import org.jetbrains.jewel.ui.outline import org.jetbrains.jewel.ui.theme.colorPalette import org.jetbrains.jewel.ui.typography -import org.jetbrains.skiko.Cursor +import java.awt.Cursor @Composable fun Borders(modifier: Modifier = Modifier) { diff --git a/launcher-linux/config/ktlint/baseline.xml b/launcher-linux/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/launcher-linux/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/launcher-macos/config/ktlint/baseline.xml b/launcher-macos/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/launcher-macos/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/launcher-windows/config/ktlint/baseline.xml b/launcher-windows/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/launcher-windows/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/linux-hidpi/config/ktlint/baseline.xml b/linux-hidpi/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/linux-hidpi/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/media-control/config/ktlint/baseline.xml b/media-control/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/media-control/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/menu-macos/config/ktlint/baseline.xml b/menu-macos/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/menu-macos/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/native-http-ktor/config/ktlint/baseline.xml b/native-http-ktor/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/native-http-ktor/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/native-http-okhttp/config/ktlint/baseline.xml b/native-http-okhttp/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/native-http-okhttp/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/native-http/config/ktlint/baseline.xml b/native-http/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/native-http/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/native-ssl/config/ktlint/baseline.xml b/native-ssl/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/native-ssl/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/notification-common/config/ktlint/baseline.xml b/notification-common/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/notification-common/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/notification-linux/config/ktlint/baseline.xml b/notification-linux/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/notification-linux/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/notification-macos/config/ktlint/baseline.xml b/notification-macos/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/notification-macos/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/notification-windows/config/ktlint/baseline.xml b/notification-windows/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/notification-windows/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/nucleus-application/config/ktlint/baseline.xml b/nucleus-application/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/nucleus-application/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/sample-cmp/config/ktlint/baseline.xml b/sample-cmp/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/sample-cmp/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/sample-jni/config/ktlint/baseline.xml b/sample-jni/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/sample-jni/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/sample-shared/config/ktlint/baseline.xml b/sample-shared/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/sample-shared/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/sample-tao/config/ktlint/baseline.xml b/sample-tao/config/ktlint/baseline.xml new file mode 100644 index 000000000..7c5b1deb0 --- /dev/null +++ b/sample-tao/config/ktlint/baseline.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scheduler-demo/config/ktlint/baseline.xml b/scheduler-demo/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/scheduler-demo/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/scheduler-testing/config/ktlint/baseline.xml b/scheduler-testing/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/scheduler-testing/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/scheduler/config/ktlint/baseline.xml b/scheduler/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/scheduler/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/service-management-demo/config/ktlint/baseline.xml b/service-management-demo/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/service-management-demo/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/service-management-macos/config/ktlint/baseline.xml b/service-management-macos/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/service-management-macos/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/sf-symbols/config/ktlint/baseline.xml b/sf-symbols/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/sf-symbols/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/system-color/config/ktlint/baseline.xml b/system-color/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/system-color/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/system-info-demo/config/ktlint/baseline.xml b/system-info-demo/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/system-info-demo/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/system-info/config/ktlint/baseline.xml b/system-info/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/system-info/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/taskbar-progress-tao/config/ktlint/baseline.xml b/taskbar-progress-tao/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/taskbar-progress-tao/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/taskbar-progress/config/ktlint/baseline.xml b/taskbar-progress/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/taskbar-progress/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + diff --git a/updater-runtime/config/ktlint/baseline.xml b/updater-runtime/config/ktlint/baseline.xml new file mode 100644 index 000000000..981420778 --- /dev/null +++ b/updater-runtime/config/ktlint/baseline.xml @@ -0,0 +1,3 @@ + + + From 52720cbdc127f844769755da33b76297aca145f8 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 15:01:08 +0300 Subject: [PATCH 05/30] Fix incorrect renaming of github org in URLs --- .github/workflows/release-desktop.yaml | 4 +- .github/workflows/test-packaging.yaml | 4 +- README.md | 4 +- aot-runtime/build.gradle.kts | 10 +-- autolaunch/build.gradle.kts | 10 +-- core-runtime/build.gradle.kts | 10 +-- darkmode-detector/build.gradle.kts | 10 +-- decorated-window-awt/build.gradle.kts | 10 +-- decorated-window-core/build.gradle.kts | 10 +-- decorated-window-jbr/build.gradle.kts | 10 +-- decorated-window-jewel/build.gradle.kts | 10 +-- decorated-window-jni/build.gradle.kts | 10 +-- decorated-window-material2/build.gradle.kts | 10 +-- decorated-window-material3/build.gradle.kts | 10 +-- decorated-window-tao/build.gradle.kts | 10 +-- docs/auto-update.md | 8 +-- docs/changelog.md | 10 +-- docs/comparison/packaging.md | 36 +++++----- docs/graalvm/tasks-ci.md | 6 +- docs/index.md | 12 ++-- docs/llm.md | 2 +- docs/llms-full.txt | 74 ++++++++++----------- docs/llms.txt | 10 +-- docs/native-access/index.md | 10 +-- docs/native-access/usage.md | 2 +- docs/runtime/system-tray/index.md | 2 +- energy-manager/build.gradle.kts | 10 +-- freedesktop-icons/build.gradle.kts | 10 +-- global-hotkey/build.gradle.kts | 10 +-- graalvm-runtime/build.gradle.kts | 10 +-- jewel-sample/build.gradle.kts | 2 +- launcher-linux/build.gradle.kts | 10 +-- launcher-macos/build.gradle.kts | 10 +-- launcher-windows/build.gradle.kts | 10 +-- linux-hidpi/build.gradle.kts | 10 +-- media-control/build.gradle.kts | 10 +-- menu-macos/build.gradle.kts | 10 +-- mkdocs.yml | 4 +- native-http-ktor/build.gradle.kts | 10 +-- native-http-okhttp/build.gradle.kts | 10 +-- native-http/build.gradle.kts | 10 +-- native-ssl/build.gradle.kts | 10 +-- notification-common/build.gradle.kts | 10 +-- notification-linux/build.gradle.kts | 10 +-- notification-macos/build.gradle.kts | 10 +-- notification-windows/build.gradle.kts | 10 +-- nucleus-application/build.gradle.kts | 10 +-- plugin-build/gradle.properties | 4 +- scheduler-testing/build.gradle.kts | 10 +-- scheduler/build.gradle.kts | 10 +-- scripts/generate-llms-docs.py | 2 +- service-management-macos/build.gradle.kts | 10 +-- sf-symbols/build.gradle.kts | 10 +-- system-color/build.gradle.kts | 10 +-- system-info-demo/build.gradle.kts | 2 +- system-info/build.gradle.kts | 10 +-- taskbar-progress-tao/build.gradle.kts | 10 +-- taskbar-progress/build.gradle.kts | 10 +-- updater-runtime/build.gradle.kts | 10 +-- 59 files changed, 299 insertions(+), 299 deletions(-) diff --git a/.github/workflows/release-desktop.yaml b/.github/workflows/release-desktop.yaml index 79fe803d1..3fbd6ed10 100644 --- a/.github/workflows/release-desktop.yaml +++ b/.github/workflows/release-desktop.yaml @@ -33,10 +33,10 @@ jobs: node-version: '22' # npm 11 (Node 24) has ECOMPROMISED bugs on Windows ARM64 - os: macos-latest arch: arm64 - jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' + jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' - os: macos-15-intel arch: amd64 - jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' + jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-packaging.yaml b/.github/workflows/test-packaging.yaml index accc9096a..bd373530e 100644 --- a/.github/workflows/test-packaging.yaml +++ b/.github/workflows/test-packaging.yaml @@ -38,11 +38,11 @@ jobs: - name: macOS ARM64 os: macos-latest arch: arm64 - jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' + jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-aarch64.tar.gz' - name: macOS Intel os: macos-15-intel arch: amd64 - jbr-download-url: 'https://github.com/nucleusframework/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' + jbr-download-url: 'https://github.com/kdroidFilter/JetBrainsRuntime/releases/download/v25.0.2b329.66-rtl/jdk-macos-x64.tar.gz' steps: - name: Checkout Repo diff --git a/README.md b/README.md index a469ca8db..f7e5970c7 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) diff --git a/aot-runtime/build.gradle.kts b/aot-runtime/build.gradle.kts index 58252906f..e5fc478d9 100644 --- a/aot-runtime/build.gradle.kts +++ b/aot-runtime/build.gradle.kts @@ -35,7 +35,7 @@ mavenPublishing { pom { name.set("Nucleus AOT Runtime") description.set("AOT runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -48,14 +48,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/autolaunch/build.gradle.kts b/autolaunch/build.gradle.kts index a56640045..1c810e49d 100644 --- a/autolaunch/build.gradle.kts +++ b/autolaunch/build.gradle.kts @@ -80,7 +80,7 @@ mavenPublishing { pom { name.set("Nucleus Autolaunch") description.set("Cross-platform auto-launch at user login for JVM desktop applications") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -93,14 +93,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/core-runtime/build.gradle.kts b/core-runtime/build.gradle.kts index 40494b3aa..c099dd073 100644 --- a/core-runtime/build.gradle.kts +++ b/core-runtime/build.gradle.kts @@ -34,7 +34,7 @@ mavenPublishing { pom { name.set("Nucleus Core Runtime") description.set("Core runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -47,14 +47,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/darkmode-detector/build.gradle.kts b/darkmode-detector/build.gradle.kts index dae11c5f0..d883a104d 100644 --- a/darkmode-detector/build.gradle.kts +++ b/darkmode-detector/build.gradle.kts @@ -108,7 +108,7 @@ mavenPublishing { pom { name.set("Nucleus Dark Mode Detector") description.set("Reactive dark mode detection for Compose Desktop across Windows, macOS and Linux") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -121,14 +121,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-awt/build.gradle.kts b/decorated-window-awt/build.gradle.kts index 5be57f45a..bbe63deea 100644 --- a/decorated-window-awt/build.gradle.kts +++ b/decorated-window-awt/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { description.set( "AWT/Compose Desktop integration of Nucleus Decorated Window (consumed by JBR and JNI backends)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -52,14 +52,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-core/build.gradle.kts b/decorated-window-core/build.gradle.kts index 32fe15f9a..3398bccc1 100644 --- a/decorated-window-core/build.gradle.kts +++ b/decorated-window-core/build.gradle.kts @@ -90,7 +90,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window Core") description.set("Shared types, layout, styling, and resources for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -103,14 +103,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jbr/build.gradle.kts b/decorated-window-jbr/build.gradle.kts index 333e3d444..a5eabba76 100644 --- a/decorated-window-jbr/build.gradle.kts +++ b/decorated-window-jbr/build.gradle.kts @@ -63,7 +63,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JBR") description.set("JBR-based custom decorated window with native title bar for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -76,14 +76,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jewel/build.gradle.kts b/decorated-window-jewel/build.gradle.kts index fe9ba0b0d..fba5f8fe7 100644 --- a/decorated-window-jewel/build.gradle.kts +++ b/decorated-window-jewel/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Jewel Decorated Window") description.set("Jewel (IntelliJ theme) integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -56,14 +56,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jni/build.gradle.kts b/decorated-window-jni/build.gradle.kts index f7455b444..bcd955383 100644 --- a/decorated-window-jni/build.gradle.kts +++ b/decorated-window-jni/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JNI") description.set("JBR-free custom decorated window with native title bar for Compose Desktop (via JNI)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -101,14 +101,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-material2/build.gradle.kts b/decorated-window-material2/build.gradle.kts index 87d12dc60..2b1b329fe 100644 --- a/decorated-window-material2/build.gradle.kts +++ b/decorated-window-material2/build.gradle.kts @@ -42,7 +42,7 @@ mavenPublishing { pom { name.set("Nucleus Material 2 Decorated Window") description.set("Material 2 integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -55,14 +55,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-material3/build.gradle.kts b/decorated-window-material3/build.gradle.kts index 711906853..fbc26603e 100644 --- a/decorated-window-material3/build.gradle.kts +++ b/decorated-window-material3/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Material Decorated Window") description.set("Material 3 integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -56,14 +56,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-tao/build.gradle.kts b/decorated-window-tao/build.gradle.kts index 00fd74534..0f39020cb 100644 --- a/decorated-window-tao/build.gradle.kts +++ b/decorated-window-tao/build.gradle.kts @@ -105,7 +105,7 @@ mavenPublishing { "Experimental no-AWT decorated window backend for Compose Desktop, " + "powered by Tao via direct JNI for macOS, Windows, and Linux.", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -118,14 +118,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/docs/auto-update.md b/docs/auto-update.md index 3474d6ebe..38f257fb5 100644 --- a/docs/auto-update.md +++ b/docs/auto-update.md @@ -23,7 +23,7 @@ flowchart LR ``` !!! tip "Try it yourself" - Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. + Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats @@ -62,7 +62,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -96,7 +96,7 @@ releaseDate: '2026-03-01T12:00:00.000Z' ``` !!! tip - In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. + In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples @@ -174,7 +174,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts diff --git a/docs/changelog.md b/docs/changelog.md index fe59d6bc9..9ee3be800 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -525,7 +525,7 @@ nativeDistributions { ### Bug Fixes -- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/nucleusframework/Nucleus/issues/53)) +- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/kdroidFilter/Nucleus/issues/53)) - Promote `core-runtime` to `api` scope in `updater-runtime` and `system-color` so consumers no longer need to declare it separately. - Include generic provider in publish mode detection. - Skip Flatpak packaging gracefully when `flatpak` CLI is missing. @@ -664,15 +664,15 @@ nativeDistributions { - **Fix Windows fullscreen** — Compose for Desktop does not handle fullscreen correctly on Windows (window does not cover the taskbar). Now uses native Win32 APIs for true fullscreen, matching Edge and other native Windows applications. - **Eliminate white resize flash on Windows** — Adjust Skiko's clear color to transparent for dark themes and synchronize DWM caption/border colors for consistent Windows 11 window chrome styling. -- **Skip Android configurations in `CleanNativeLibsTransform`** — Fixes build issues when Android targets are present. ([#79](https://github.com/nucleusframework/ComposeDeskKit/issues/79)) -- **Skip ZIP stapling to preserve blockmap** — Prevents breaking auto-update blockmap integrity during notarization. ([#70](https://github.com/nucleusframework/ComposeDeskKit/issues/70)) -- **Detect target arch from JDK release file for cross-building** — Fixes architecture detection when cross-compiling. ([#71](https://github.com/nucleusframework/ComposeDeskKit/issues/71)) +- **Skip Android configurations in `CleanNativeLibsTransform`** — Fixes build issues when Android targets are present. ([#79](https://github.com/kdroidFilter/ComposeDeskKit/issues/79)) +- **Skip ZIP stapling to preserve blockmap** — Prevents breaking auto-update blockmap integrity during notarization. ([#70](https://github.com/kdroidFilter/ComposeDeskKit/issues/70)) +- **Detect target arch from JDK release file for cross-building** — Fixes architecture detection when cross-compiling. ([#71](https://github.com/kdroidFilter/ComposeDeskKit/issues/71)) - Move Windows dark mode monitoring to native thread for reliability. - Correct D-Bus `ReadOne` variant parsing for Linux accent color. ### Deprecations -- **`appStore` property deprecated** — PKG distributions are now always treated as App Store builds. The `appStore` property is no longer needed. ([#65](https://github.com/nucleusframework/ComposeDeskKit/issues/65)) +- **`appStore` property deprecated** — PKG distributions are now always treated as App Store builds. The `appStore` property is no longer needed. ([#65](https://github.com/kdroidFilter/ComposeDeskKit/issues/65)) --- diff --git a/docs/comparison/packaging.md b/docs/comparison/packaging.md index 54e860c79..7b1a8d761 100644 --- a/docs/comparison/packaging.md +++ b/docs/comparison/packaging.md @@ -75,7 +75,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -111,7 +111,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -135,7 +135,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -159,7 +159,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -181,7 +181,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -232,7 +232,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -259,7 +259,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -277,7 +277,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -301,7 +301,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -321,14 +321,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files @@ -350,7 +350,7 @@ The `native-ssl` module is unique in the JVM packaging space: it replaces the JS | Compose MP | ✅ | Partial | ❌ | ❌ | ❌ | ✅ | **5** | ??? info "Sources" - - **Nucleus**: [docs site](https://nucleusframework.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` + - **Nucleus**: [docs site](https://kdroidfilter.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` - **Conveyor**: [docs site](https://conveyor.hydraulic.dev/21.1/) — tutorials, 120+ config keys, CI guide, comparisons page, multiple sample projects - **install4j**: [help center](https://www.ej-technologies.com/resources/install4j/help/doc/) — extensive searchable docs - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — CLI reference only diff --git a/docs/graalvm/tasks-ci.md b/docs/graalvm/tasks-ci.md index d45b07c61..7ba740f9b 100644 --- a/docs/graalvm/tasks-ci.md +++ b/docs/graalvm/tasks-ci.md @@ -163,12 +163,12 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies diff --git a/docs/index.md b/docs/index.md index f3d50d558..c4e216a74 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) @@ -86,7 +86,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). === "macOS" ```bash @@ -101,7 +101,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. === "Windows" - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -113,7 +113,7 @@ What you'll see: !!! tip "Test auto-update" Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -125,4 +125,4 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). diff --git a/docs/llm.md b/docs/llm.md index e513bcd47..be1f4c6c5 100644 --- a/docs/llm.md +++ b/docs/llm.md @@ -11,7 +11,7 @@ Nucleus provides machine-readable documentation files designed for Large Languag ## How They Stay Up to Date -Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/nucleusframework/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. +Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/kdroidFilter/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. !!! tip "Contributing" Never edit `llms.txt` or `llms-full.txt` manually — edit the source `.md` files in `docs/` and the script regenerates them automatically. diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 7fdf5bf1f..1434bf772 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). --- @@ -2225,7 +2225,7 @@ Nucleus provides a complete auto-update solution compatible with the [electron-b ## How It Works -**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. +**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats | Platform | Updatable Formats | Not updatable (Store-managed) | @@ -2261,7 +2261,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -2294,7 +2294,7 @@ sha512: releaseDate: '2026-03-01T12:00:00.000Z' ``` -**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. +**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples Three YAML files are generated per release: @@ -2371,7 +2371,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts @@ -3737,15 +3737,15 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies --- @@ -3770,14 +3770,14 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup -**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). +**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: ```kotlin // build.gradle.kts plugins { kotlin("multiplatform") - id("dev.nucleusframework.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess } kotlin { @@ -3814,7 +3814,7 @@ my-app/ ```kotlin plugins { kotlin("multiplatform") - id("dev.nucleusframework.nucleusnativeaccess") version "" + id("io.github.kdroidfilter.nucleusnativeaccess") version "" } kotlin { @@ -3873,9 +3873,9 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. -The plugin ID is `dev.nucleusframework.nucleusnativeaccess`. +The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. ## Next steps @@ -4031,7 +4031,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. -**Full working example:** The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. +**Full working example:** The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: ### macOS @@ -7068,7 +7068,7 @@ When the user toggles dark mode in their OS settings, `isSystemInDarkMode()` rec # System Tray -**Separate repository:** System Tray is maintained in its own repository with its own release cycle: [**nucleusframework/ComposeNativeTray**](https://github.com/nucleusframework/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. +**Separate repository:** System Tray is maintained in its own repository with its own release cycle: [**kdroidFilter/ComposeNativeTray**](https://github.com/kdroidFilter/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. **ComposeNativeTray** is not a library. It is a **complete framework for building system tray applications** with Compose Desktop — the most expressive and the most powerful way to own the system tray on macOS, Windows, and Linux. Traditionally, building a tray application meant juggling platform-specific icon formats, managing menu state by hand, and hoping the result didn't look broken on half your users' machines. ComposeNativeTray erases all of that. Your tray icon is **drawn by Compose** — the same toolkit that renders your UI. Any `@Composable` becomes a tray icon: an `ImageVector`, a `Painter`, a resource, or a fully custom composable with gradients, badges, and animations. One icon definition. Every platform. Every DPI. Pixel-perfect. @@ -13994,7 +13994,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -14030,7 +14030,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -14054,7 +14054,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -14078,7 +14078,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -14100,7 +14100,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -14151,7 +14151,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -14178,7 +14178,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -14196,7 +14196,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -14218,7 +14218,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -14238,14 +14238,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files @@ -14267,7 +14267,7 @@ The `native-ssl` module is unique in the JVM packaging space: it replaces the JS | Compose MP | ✅ | Partial | ❌ | ❌ | ❌ | ✅ | **5** | ??? info "Sources" - - **Nucleus**: [docs site](https://nucleusframework.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` + - **Nucleus**: [docs site](https://kdroidfilter.github.io/Nucleus/) — Getting Started, Configuration, per-platform guides, CI/CD, Runtime APIs, Migration, demo app in `example/` - **Conveyor**: [docs site](https://conveyor.hydraulic.dev/21.1/) — tutorials, 120+ config keys, CI guide, comparisons page, multiple sample projects - **install4j**: [help center](https://www.ej-technologies.com/resources/install4j/help/doc/) — extensive searchable docs - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — CLI reference only diff --git a/docs/llms.txt b/docs/llms.txt index 7123f90be..9b5ea50fa 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). --- diff --git a/docs/native-access/index.md b/docs/native-access/index.md index 50f4a3549..67ccf0a98 100644 --- a/docs/native-access/index.md +++ b/docs/native-access/index.md @@ -30,7 +30,7 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup !!! note "Separate versioning" - Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). + Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: @@ -38,7 +38,7 @@ Add the plugin to your Kotlin Multiplatform module: // build.gradle.kts plugins { kotlin("multiplatform") - id("dev.nucleusframework.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess } kotlin { @@ -77,7 +77,7 @@ my-app/ ```kotlin plugins { kotlin("multiplatform") - id("dev.nucleusframework.nucleusnativeaccess") version "" + id("io.github.kdroidfilter.nucleusnativeaccess") version "" } kotlin { @@ -136,9 +136,9 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. -The plugin ID is `dev.nucleusframework.nucleusnativeaccess`. +The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. ## Next steps diff --git a/docs/native-access/usage.md b/docs/native-access/usage.md index 2aa562677..611f329a4 100644 --- a/docs/native-access/usage.md +++ b/docs/native-access/usage.md @@ -98,7 +98,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. !!! tip "Full working example" - The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. + The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: diff --git a/docs/runtime/system-tray/index.md b/docs/runtime/system-tray/index.md index 08a03b9ab..9d678d19a 100644 --- a/docs/runtime/system-tray/index.md +++ b/docs/runtime/system-tray/index.md @@ -1,7 +1,7 @@ # System Tray !!! note "Separate repository" - System Tray is maintained in its own repository with its own release cycle: [**nucleusframework/ComposeNativeTray**](https://github.com/nucleusframework/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. + System Tray is maintained in its own repository with its own release cycle: [**kdroidFilter/ComposeNativeTray**](https://github.com/kdroidFilter/ComposeNativeTray). The artifact is `dev.nucleusframework:composenativetray`. **ComposeNativeTray** is not a library. It is a **complete framework for building system tray applications** with Compose Desktop — the most expressive and the most powerful way to own the system tray on macOS, Windows, and Linux. diff --git a/energy-manager/build.gradle.kts b/energy-manager/build.gradle.kts index 6a8df54d4..2dbff90b0 100644 --- a/energy-manager/build.gradle.kts +++ b/energy-manager/build.gradle.kts @@ -102,7 +102,7 @@ mavenPublishing { pom { name.set("Nucleus Energy Manager") description.set("Process-level energy efficiency mode (EcoQoS/PRIO_DARWIN_BG) for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -115,14 +115,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/freedesktop-icons/build.gradle.kts b/freedesktop-icons/build.gradle.kts index b2f71f21e..e8df234d8 100644 --- a/freedesktop-icons/build.gradle.kts +++ b/freedesktop-icons/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus Freedesktop Icons") description.set("Type-safe freedesktop icon naming specification constants for JVM desktop applications") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -42,14 +42,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/global-hotkey/build.gradle.kts b/global-hotkey/build.gradle.kts index e3b6b30b9..1c7fc3966 100644 --- a/global-hotkey/build.gradle.kts +++ b/global-hotkey/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { description.set( "Cross-platform global hotkey (system-wide keyboard shortcuts) for JVM desktop applications via JNI", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -101,14 +101,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/graalvm-runtime/build.gradle.kts b/graalvm-runtime/build.gradle.kts index 367f50d58..f5e81f9fa 100644 --- a/graalvm-runtime/build.gradle.kts +++ b/graalvm-runtime/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { pom { name.set("Nucleus GraalVM Runtime") description.set("GraalVM native-image runtime initialization and font manager substitutions") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -52,14 +52,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/jewel-sample/build.gradle.kts b/jewel-sample/build.gradle.kts index e465a10dc..b35ad41a7 100644 --- a/jewel-sample/build.gradle.kts +++ b/jewel-sample/build.gradle.kts @@ -132,7 +132,7 @@ nucleus.application { packageName = "JewelSample" packageVersion = "1.0.0" - homepage = "https://github.com/nucleusframework/Nucleus" + homepage = "https://github.com/kdroidFilter/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/launcher-linux/build.gradle.kts b/launcher-linux/build.gradle.kts index 81189019d..b4466eb36 100644 --- a/launcher-linux/build.gradle.kts +++ b/launcher-linux/build.gradle.kts @@ -65,7 +65,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Linux") description.set("Unity Launcher API (com.canonical.Unity.LauncherEntry) for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -78,14 +78,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/launcher-macos/build.gradle.kts b/launcher-macos/build.gradle.kts index 67dac5e9a..8049516fc 100644 --- a/launcher-macos/build.gradle.kts +++ b/launcher-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher macOS") description.set("macOS dock context menu for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -77,14 +77,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/launcher-windows/build.gradle.kts b/launcher-windows/build.gradle.kts index 3a129f430..717cda989 100644 --- a/launcher-windows/build.gradle.kts +++ b/launcher-windows/build.gradle.kts @@ -59,7 +59,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Windows") description.set("Windows Launcher API (Badge Notifications) for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -72,14 +72,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/linux-hidpi/build.gradle.kts b/linux-hidpi/build.gradle.kts index 256911705..12dcc2248 100644 --- a/linux-hidpi/build.gradle.kts +++ b/linux-hidpi/build.gradle.kts @@ -66,7 +66,7 @@ mavenPublishing { description.set( "Native HiDPI scale factor detection for Compose Desktop on Linux (GSettings, GDK_SCALE, Xft.dpi)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -79,14 +79,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/media-control/build.gradle.kts b/media-control/build.gradle.kts index 6d5189459..17142d402 100644 --- a/media-control/build.gradle.kts +++ b/media-control/build.gradle.kts @@ -110,7 +110,7 @@ mavenPublishing { "OS-level media controls (play/pause, metadata, seek) via MPRIS (Linux), " + "MPNowPlayingInfoCenter (macOS), and SMTC (Windows)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -123,14 +123,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/menu-macos/build.gradle.kts b/menu-macos/build.gradle.kts index 90037dc91..92ec60700 100644 --- a/menu-macos/build.gradle.kts +++ b/menu-macos/build.gradle.kts @@ -70,7 +70,7 @@ mavenPublishing { description.set( "Complete NSMenu / NSMenuItem / NSMenuItemBadge / NSMenuDelegate mapping for JVM desktop applications via JNI", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -83,14 +83,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/mkdocs.yml b/mkdocs.yml index 88ed02874..9546dd809 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,7 @@ site_name: Nucleus site_description: The Kotlin framework for native desktop apps — deep OS integration (notifications, tray, launcher, decorated windows, scheduler, media control) plus packaging on macOS, Windows, and Linux site_url: https://nucleusframework.dev -repo_url: https://github.com/nucleusframework/Nucleus +repo_url: https://github.com/kdroidFilter/Nucleus repo_name: nucleusframework/Nucleus edit_uri: edit/main/docs/ @@ -161,4 +161,4 @@ copyright: Made with ❤️ by str: Compatible with any JVM application, optimized for Compose Desktop. - Docs: {site_url} -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT diff --git a/service-management-macos/build.gradle.kts b/service-management-macos/build.gradle.kts index 32857f7fe..8e20e672e 100644 --- a/service-management-macos/build.gradle.kts +++ b/service-management-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Service Management macOS") description.set("macOS SMAppService API for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -77,14 +77,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/sf-symbols/build.gradle.kts b/sf-symbols/build.gradle.kts index e8f254036..a2784bb35 100644 --- a/sf-symbols/build.gradle.kts +++ b/sf-symbols/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus SF Symbols") description.set("Type-safe Apple SF Symbols constants for JVM desktop applications (macOS 11+)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -42,14 +42,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/system-color/build.gradle.kts b/system-color/build.gradle.kts index a21ee2e1e..c0217d31a 100644 --- a/system-color/build.gradle.kts +++ b/system-color/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { pom { name.set("Nucleus System Color") description.set("Reactive system accent color and contrast mode detection for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -116,14 +116,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/system-info-demo/build.gradle.kts b/system-info-demo/build.gradle.kts index b8d64c9ac..8e1181684 100644 --- a/system-info-demo/build.gradle.kts +++ b/system-info-demo/build.gradle.kts @@ -82,7 +82,7 @@ nucleus.application { packageName = "SystemInfo" packageVersion = "1.0.0" - homepage = "https://github.com/nucleusframework/Nucleus" + homepage = "https://github.com/kdroidFilter/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/system-info/build.gradle.kts b/system-info/build.gradle.kts index 9611eb624..f0f193fd1 100644 --- a/system-info/build.gradle.kts +++ b/system-info/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { description.set( "Cross-platform system information (CPU, memory, disks, network, processes, hardware) for JVM desktop applications", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -116,14 +116,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/taskbar-progress-tao/build.gradle.kts b/taskbar-progress-tao/build.gradle.kts index f78520c2f..9da7e897e 100644 --- a/taskbar-progress-tao/build.gradle.kts +++ b/taskbar-progress-tao/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress (Tao)") description.set("Tao-backend bridge for Nucleus Taskbar Progress: composable helpers reading LocalTaoWindow.") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -56,14 +56,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/taskbar-progress/build.gradle.kts b/taskbar-progress/build.gradle.kts index e48e422e3..cfa158e55 100644 --- a/taskbar-progress/build.gradle.kts +++ b/taskbar-progress/build.gradle.kts @@ -84,7 +84,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress") description.set("Cross-platform taskbar/dock progress indicator for Compose Desktop (Windows + macOS + Linux)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -97,14 +97,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/updater-runtime/build.gradle.kts b/updater-runtime/build.gradle.kts index 72486f3c6..06be6eb33 100644 --- a/updater-runtime/build.gradle.kts +++ b/updater-runtime/build.gradle.kts @@ -36,7 +36,7 @@ mavenPublishing { pom { name.set("Nucleus Updater Runtime") description.set("Updater runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -49,14 +49,14 @@ mavenPublishing { developer { id.set("nucleusframework") name.set("nucleusframework") - url.set("https://github.com/nucleusframework") + url.set("https://github.com/kdroidFilter") } } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } From 467cb38ac61ea9cbb3f7bf8a36a70177907ec817 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 16:16:16 +0300 Subject: [PATCH 06/30] chore: Add `cleanAllNative` task to clean generated native files --- build.gradle.kts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index bd481892b..5dddf9096 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -116,6 +116,22 @@ tasks.register("preMerge") { dependsOn(gradle.includedBuild("plugin-build").task(":plugin:validatePlugins")) } +tasks.register("cleanAllNative", Delete::class.java) { + description = "Deletes all generated native files" + group = "build" + + subprojects { + delete(layout.projectDirectory.dir("src/main/resources/nucleus/native")) + delete(layout.projectDirectory.dir("src/main/native/target")) + delete(fileTree(layout.projectDirectory.dir("src/main/native")) { + include("**/*.obj", "**/*.exp", "**/*.lib", "**/*.pdb") + }) + } + delete(rootProject.layout.projectDirectory.dir("sample-tao/src/main/native/windows/packages")) + delete(rootProject.layout.projectDirectory.file("sample-tao/src/main/native/windows/nuget.exe")) + delete(rootProject.layout.projectDirectory.file("sample-tao/src/main/native/windows/build_log.txt")) +} + tasks.wrapper { distributionType = Wrapper.DistributionType.ALL } From 3640da68c7a45ad64675ccc566016a35906d0c91 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 16:38:53 +0300 Subject: [PATCH 07/30] chore: fix linter violations (detekt and ktlint) across the project --- build.gradle.kts | 8 +- .../dsl/NativeApplicationDistributions.kt | 3 +- .../internal/CleanNativeLibsTransform.kt | 135 ++++--- .../internal/CleanupGraalvmMetadataTask.kt | 357 +++++++++++------- .../application/internal/ExecutableType.kt | 9 +- .../internal/FilterLibraryMetadataTask.kt | 1 + .../application/internal/InfoPlistBuilder.kt | 14 +- .../internal/JvmApplicationContext.kt | 3 +- .../internal/JvmRuntimeProperties.kt | 3 +- .../internal/LaunchAgentPlistGenerator.kt | 5 +- .../application/internal/MacAssetsTool.kt | 20 +- .../desktop/application/internal/MacSigner.kt | 1 + .../application/internal/MacSigningHelper.kt | 2 +- .../application/internal/MultiOutputStream.kt | 4 +- .../internal/NativeLibArchDetector.kt | 4 +- ...jectProperties.kt => NucleusProperties.kt} | 1 + .../internal/PatchedJavaLauncher.kt | 4 +- .../application/internal/files/fileUtils.kt | 13 +- .../internal/mergeNativeImageConfig.kt | 2 +- .../AbstractCheckNativeDistributionRuntime.kt | 9 +- .../AbstractElectronBuilderPackageTask.kt | 4 +- .../tasks/AbstractGenerateAotCacheTask.kt | 9 +- .../application/tasks/AbstractJPackageTask.kt | 6 +- .../tasks/AbstractJvmToolOperationTask.kt | 13 +- ...tractNativeMacApplicationPackageDmgTask.kt | 3 +- ...AbstractNativeMacApplicationPackageTask.kt | 10 +- .../tasks/AbstractNotarizationTask.kt | 3 +- .../application/tasks/AbstractProguardTask.kt | 27 +- .../tasks/AbstractRunDistributableTask.kt | 5 +- .../tasks/AbstractSuggestModulesTask.kt | 15 +- .../desktop/tasks/AbstractJarsFlattenTask.kt | 4 +- ...ctUnpackDefaultApplicationResourcesTask.kt | 6 +- .../internal/checkExperimentalTargets.kt | 1 + .../nucleus/internal/IdeaImportTask.kt | 2 +- .../nucleus/internal/utils/fileUtils.kt | 2 + .../nucleus/internal/utils/gradleUtils.kt | 7 +- 36 files changed, 472 insertions(+), 243 deletions(-) rename plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/{NucleusProjectProperties.kt => NucleusProperties.kt} (99%) diff --git a/build.gradle.kts b/build.gradle.kts index 5dddf9096..28b790504 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -123,9 +123,11 @@ tasks.register("cleanAllNative", Delete::class.java) { subprojects { delete(layout.projectDirectory.dir("src/main/resources/nucleus/native")) delete(layout.projectDirectory.dir("src/main/native/target")) - delete(fileTree(layout.projectDirectory.dir("src/main/native")) { - include("**/*.obj", "**/*.exp", "**/*.lib", "**/*.pdb") - }) + delete( + fileTree(layout.projectDirectory.dir("src/main/native")) { + include("**/*.obj", "**/*.exp", "**/*.lib", "**/*.pdb") + }, + ) } delete(rootProject.layout.projectDirectory.dir("sample-tao/src/main/native/windows/packages")) delete(rootProject.layout.projectDirectory.file("sample-tao/src/main/native/windows/nuget.exe")) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt index ed5578236..270a1bbbe 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NativeApplicationDistributions.kt @@ -23,7 +23,8 @@ abstract class NativeApplicationDistributions : AbstractDistributions() { super.targetFormats(*formats) } - val macOS: NativeApplicationMacOSPlatformSettings = objects.newInstance(NativeApplicationMacOSPlatformSettings::class.java) + val macOS: NativeApplicationMacOSPlatformSettings = + objects.newInstance(NativeApplicationMacOSPlatformSettings::class.java) open fun macOS(fn: Action) { fn.execute(macOS) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt index 2dd0f0558..640bf7dab 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanNativeLibsTransform.kt @@ -26,11 +26,14 @@ import org.gradle.api.tasks.PathSensitivity import org.gradle.work.DisableCachingByDefault import java.io.BufferedInputStream import java.io.BufferedOutputStream +import java.io.File import java.io.FileOutputStream import java.util.zip.ZipEntry import java.util.zip.ZipInputStream import java.util.zip.ZipOutputStream +private const val HEADER_BUFFER_SIZE = 64 + @DisableCachingByDefault(because = "Stripping native libs from JARs is fast and not worth caching") internal abstract class CleanNativeLibsTransform : TransformAction { interface Parameters : TransformParameters { @@ -54,77 +57,81 @@ internal abstract class CleanNativeLibsTransform : TransformAction { val entriesToRemove = mutableSetOf() ZipInputStream(BufferedInputStream(inputFile.inputStream())).use { zis -> var entry = zis.nextEntry while (entry != null) { if (!entry.isDirectory && NativeLibArchDetector.isNativeLib(entry.name)) { - // Only process files with native extensions (.dll, .so, .dylib, .jnilib) - // Never touch .class or other Java files - val pathInfo = NativeLibArchDetector.detectFromPath(entry.name) - - if (pathInfo.os != NativeOs.UNKNOWN && pathInfo.arch != NativeArch.UNKNOWN) { - // Path has both OS and arch indicators - if (shouldRemoveByInfo(pathInfo, expectedOs, expectedArch)) { - entriesToRemove.add(entry.name) - } - } else { - // Fall back to binary header detection - val header = ByteArray(64) - val bytesRead = readFully(zis, header) - if (bytesRead > 0) { - val headerInfo = NativeLibArchDetector.detectFromHeader(header.copyOf(bytesRead)) - if (shouldRemoveByInfo(headerInfo, expectedOs, expectedArch)) { - entriesToRemove.add(entry.name) - } - } + if (shouldRemoveEntry(zis, entry, expectedOs, expectedArch)) { + entriesToRemove.add(entry.name) } } entry = zis.nextEntry } } + return entriesToRemove + } - if (entriesToRemove.isEmpty()) { - outputs.file(inputFile) - return + private fun shouldRemoveEntry( + zis: ZipInputStream, + entry: ZipEntry, + expectedOs: NativeOs, + expectedArch: NativeArch, + ): Boolean { + // Only process files with native extensions (.dll, .so, .dylib, .jnilib) + // Never touch .class or other Java files + val pathInfo = NativeLibArchDetector.detectFromPath(entry.name) + + if (pathInfo.os != NativeOs.UNKNOWN && pathInfo.arch != NativeArch.UNKNOWN) { + // Path has both OS and arch indicators + return shouldRemoveByInfo(pathInfo, expectedOs, expectedArch) + } else { + // Fall back to binary header detection + val header = ByteArray(HEADER_BUFFER_SIZE) + val bytesRead = readFully(zis, header) + if (bytesRead > 0) { + val headerInfo = NativeLibArchDetector.detectFromHeader(header.copyOf(bytesRead)) + return shouldRemoveByInfo(headerInfo, expectedOs, expectedArch) + } } + return false + } - // Second pass: copy JAR without removed entries - val outputFile = outputs.file(inputFile.name) + private fun copyJarWithoutEntries( + inputFile: File, + outputFile: File, + entriesToRemove: Set, + ) { ZipInputStream(BufferedInputStream(inputFile.inputStream())).use { zis -> ZipOutputStream(BufferedOutputStream(FileOutputStream(outputFile))).use { zos -> var entry = zis.nextEntry while (entry != null) { - val shouldSkip = !entry.isDirectory && entry.name in entriesToRemove - - if (!shouldSkip) { - zos.putNextEntry( - ZipEntry(entry.name).apply { - time = entry.time - if (entry.method == ZipEntry.STORED) { - method = ZipEntry.STORED - size = entry.size - compressedSize = entry.compressedSize - crc = entry.crc - } - }, - ) - if (!entry.isDirectory) { - zis.copyTo(zos) - } - zos.closeEntry() + if (entry.isDirectory || entry.name !in entriesToRemove) { + copyZipEntry(entry, zis, zos) } entry = zis.nextEntry } @@ -132,6 +139,28 @@ internal abstract class CleanNativeLibsTransform : TransformAction + private val slurper = JsonSlurper() + @TaskAction fun cleanup() { val targetDir = configDir.get() @@ -68,8 +72,6 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { return } - val slurper = JsonSlurper() - // Collect baseline entries from all managed sources val libraryEntries = mutableMapOf>>() val libraryProxies = mutableSetOf() @@ -77,20 +79,56 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { val libraryResourceGlobs = mutableListOf>() val includeResourcePatterns = mutableListOf() - // Source 1: L1 — library JARs on classpath (META-INF/native-image/**/reachability-metadata.json) - // + native-image.properties IncludeResources patterns + val l1Count = collectL1Metadata(libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs, includeResourcePatterns) + val l2Count = collectL2Metadata(libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + val l3Count = collectL3Metadata(libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + val staticCount = collectStaticAnalysisMetadata(libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + + addMainClassToBaseline(libraryEntries) + + logger.lifecycle( + "Metadata baseline: L1=$l1Count types, L2=$l2Count types, " + + "L3=$l3Count types, static=$staticCount types, " + + "${includeResourcePatterns.size} resource patterns", + ) + + // Parse the project's manual config + @Suppress("UNCHECKED_CAST") + val targetRoot = slurper.parseText(targetFile.readText()) as MutableMap + val removedEntries = mutableListOf() + + val totalRemoved = + cleanReflectionAndJni(targetRoot, libraryEntries, libraryProxies, removedEntries) + + cleanResources(targetRoot, libraryResourceJsons, libraryResourceGlobs, includeResourcePatterns, removedEntries) + + if (totalRemoved > 0) { + finalizeAndWrite(targetRoot, targetFile, totalRemoved, removedEntries) + } else { + logger.lifecycle("No redundant entries found — manual config is already clean") + } + + reportRemaining(targetRoot) + } + + private fun collectL1Metadata( + libraryEntries: MutableMap>>, + libraryProxies: MutableSet, + libraryResourceJsons: MutableSet, + libraryResourceGlobs: MutableList>, + includeResourcePatterns: MutableList, + ): Int { var l1Count = 0 for (file in runtimeClasspath.files) { if (!file.exists() || !file.name.endsWith(".jar")) continue try { - java.util.jar.JarFile(file).use { jar -> + JarFile(file).use { jar -> for (entry in jar.entries()) { if (entry.name.contains("META-INF/native-image/") && entry.name.endsWith("reachability-metadata.json") ) { val text = jar.getInputStream(entry).bufferedReader().readText() val before = countBaselineTypes(libraryEntries) - collectBaseline(slurper, text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + collectBaseline(text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) l1Count += countBaselineTypes(libraryEntries) - before } @@ -115,8 +153,15 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { // Skip unreadable JARs } } + return l1Count + } - // Source 2: L2 — Oracle repo metadata directories + private fun collectL2Metadata( + libraryEntries: MutableMap>>, + libraryProxies: MutableSet, + libraryResourceJsons: MutableSet, + libraryResourceGlobs: MutableList>, + ): Int { var l2Count = 0 val repoDirsFile = metadataRepoDirsFile.orNull?.asFile if (repoDirsFile != null && repoDirsFile.exists()) { @@ -125,93 +170,119 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { if (dirPath.isBlank()) continue val dir = File(dirPath) if (!dir.isDirectory) continue - // New format - val newFormatFile = File(dir, "reachability-metadata.json") - if (newFormatFile.exists()) { - val before = countBaselineTypes(libraryEntries) - collectBaseline( - slurper, - newFormatFile.readText(), - libraryEntries, - libraryProxies, - libraryResourceJsons, - libraryResourceGlobs, - ) - l2Count += countBaselineTypes(libraryEntries) - before - } - // Old format - for (oldFile in listOf("reflect-config.json", "jni-config.json")) { - val f = File(dir, oldFile) - if (!f.exists()) continue - val section = if (oldFile.startsWith("reflect")) "reflection" else "jni" - - @Suppress("UNCHECKED_CAST") - val entries = slurper.parseText(f.readText()) as? List> ?: continue - val sectionMap = libraryEntries.getOrPut(section) { mutableMapOf() } - for (e in entries) { - val typeName = e["type"] as? String ?: continue - val existing = sectionMap[typeName] - if (existing == null) { - sectionMap[typeName] = e.toMutableMap() - l2Count++ - } else { - mergeTypeEntryInto(e, existing) - } - } + + l2Count += collectL2FromDir(dir, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + } + } + return l2Count + } + + private fun collectL2FromDir( + dir: File, + libraryEntries: MutableMap>>, + libraryProxies: MutableSet, + libraryResourceJsons: MutableSet, + libraryResourceGlobs: MutableList>, + ): Int { + var count = 0 + // New format + val newFormatFile = File(dir, "reachability-metadata.json") + if (newFormatFile.exists()) { + val before = countBaselineTypes(libraryEntries) + collectBaseline( + newFormatFile.readText(), + libraryEntries, + libraryProxies, + libraryResourceJsons, + libraryResourceGlobs, + ) + count += countBaselineTypes(libraryEntries) - before + } + // Old format + for (oldFile in listOf("reflect-config.json", "jni-config.json")) { + val f = File(dir, oldFile) + if (!f.exists()) continue + val section = if (oldFile.startsWith("reflect")) "reflection" else "jni" + + @Suppress("UNCHECKED_CAST") + val entries = slurper.parseText(f.readText()) as? List> ?: continue + val sectionMap = libraryEntries.getOrPut(section) { mutableMapOf() } + for (e in entries) { + val typeName = e["type"] as? String ?: continue + val existing = sectionMap[typeName] + if (existing == null) { + sectionMap[typeName] = e.toMutableMap() + count++ + } else { + mergeTypeEntryInto(e, existing) } - // Old-format resource-config.json - val resFile = File(dir, "resource-config.json") - if (resFile.exists()) { - @Suppress("UNCHECKED_CAST") - val resRoot = slurper.parseText(resFile.readText()) as? Map - - @Suppress("UNCHECKED_CAST") - val resources = resRoot?.get("resources") as? Map - - @Suppress("UNCHECKED_CAST") - val includes = resources?.get("includes") as? List> - includes?.forEach { inc -> - val pattern = inc["pattern"] as? String - if (pattern != null) { - libraryResourceGlobs.add(Pair(null, pattern)) - libraryResourceJsons.add(JsonOutput.toJson(mapOf("glob" to pattern))) - } - } + } + } + // Old-format resource-config.json + val resFile = File(dir, "resource-config.json") + if (resFile.exists()) { + @Suppress("UNCHECKED_CAST") + val resRoot = slurper.parseText(resFile.readText()) as? Map + + @Suppress("UNCHECKED_CAST") + val resources = resRoot?.get("resources") as? Map + + @Suppress("UNCHECKED_CAST") + val includes = resources?.get("includes") as? List> + includes?.forEach { inc -> + val pattern = inc["pattern"] as? String + if (pattern != null) { + libraryResourceGlobs.add(Pair(null, pattern)) + libraryResourceJsons.add(JsonOutput.toJson(mapOf("glob" to pattern))) } } } + return count + } - // Source 3: L3 — platform-specific metadata from plugin JAR - var l3Count = 0 + private fun collectL3Metadata( + libraryEntries: MutableMap>>, + libraryProxies: MutableSet, + libraryResourceJsons: MutableSet, + libraryResourceGlobs: MutableList>, + ): Int { val platform = platformName.get() val resourcePath = "nucleus/graalvm/platform-metadata/$platform-reachability-metadata.json" val stream = javaClass.classLoader.getResourceAsStream(resourcePath) if (stream != null) { val text = stream.bufferedReader().use { it.readText() } val before = countBaselineTypes(libraryEntries) - collectBaseline(slurper, text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) - l3Count = countBaselineTypes(libraryEntries) - before + collectBaseline(text, libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs) + return countBaselineTypes(libraryEntries) - before } + return 0 + } - // Source 4: Static analysis output + private fun collectStaticAnalysisMetadata( + libraryEntries: MutableMap>>, + libraryProxies: MutableSet, + libraryResourceJsons: MutableSet, + libraryResourceGlobs: MutableList>, + ): Int { var staticCount = 0 for (dir in staticAnalysisDir.files) { val staticFile = if (dir.isDirectory) File(dir, "reachability-metadata.json") else dir if (staticFile.exists() && staticFile.name.endsWith(".json")) { val before = countBaselineTypes(libraryEntries) collectBaseline( - slurper, staticFile.readText(), libraryEntries, libraryProxies, libraryResourceJsons, libraryResourceGlobs, ) - staticCount = countBaselineTypes(libraryEntries) - before + staticCount += countBaselineTypes(libraryEntries) - before } } + return staticCount + } - // Add main class to baseline + private fun addMainClassToBaseline(libraryEntries: MutableMap>>) { val mc = mainClass.orNull if (!mc.isNullOrBlank()) { val reflectionMap = libraryEntries.getOrPut("reflection") { mutableMapOf() } @@ -231,75 +302,87 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { mergeTypeEntryInto(mainClassEntry, existing) } } + } - logger.lifecycle( - "Metadata baseline: L1=$l1Count types, L2=$l2Count types, " + - "L3=$l3Count types, static=$staticCount types, " + - "${includeResourcePatterns.size} resource patterns", - ) - - // Parse the project's manual config - @Suppress("UNCHECKED_CAST") - val targetRoot = slurper.parseText(targetFile.readText()) as MutableMap + private fun cleanReflectionAndJni( + targetRoot: MutableMap, + libraryEntries: Map>>, + libraryProxies: Set, + removedEntries: MutableList, + ): Int { var totalRemoved = 0 - val removedEntries = mutableListOf() - - // Clean reflection/jni sections against same-section AND cross-section baselines - // (static analyzer puts SQLite in "jni", manual config may have it in "reflection") for (projectSection in listOf("reflection", "jni")) { @Suppress("UNCHECKED_CAST") val targetArray = targetRoot[projectSection] as? MutableList> ?: continue val before = targetArray.size targetArray.removeAll { projectEntry -> - // Handle proxy entries: {"type": {"proxy": [...]}} - val proxyKey = proxyKey(projectEntry) - if (proxyKey != null) { - if (proxyKey in libraryProxies) { - removedEntries.add(" [$projectSection proxy] $proxyKey") - return@removeAll true - } - return@removeAll false + if (isEntryCovered(projectSection, projectEntry, libraryEntries, libraryProxies, removedEntries)) { + return@removeAll true } + false + } + totalRemoved += before - targetArray.size + } + return totalRemoved + } - val typeName = projectEntry["type"] as? String ?: return@removeAll false + private fun isEntryCovered( + projectSection: String, + projectEntry: Map, + libraryEntries: Map>>, + libraryProxies: Set, + removedEntries: MutableList, + ): Boolean { + // Handle proxy entries: {"type": {"proxy": [...]}} + val proxyKey = proxyKey(projectEntry) + if (proxyKey != null) { + if (proxyKey in libraryProxies) { + removedEntries.add(" [$projectSection proxy] $proxyKey") + return true + } + return false + } - // Check same section first, then cross-section - for (baselineSection in listOf("reflection", "jni")) { - val sectionMap = libraryEntries[baselineSection] ?: continue - val libEntry = sectionMap[typeName] ?: continue - if (libraryCoversProjectEntry(libEntry, projectEntry)) { - val source = if (baselineSection == projectSection) baselineSection else "$projectSection via $baselineSection" - removedEntries.add(" [$source] $typeName") - return@removeAll true - } - } + val typeName = projectEntry["type"] as? String ?: return false - // For Kotlin data objects: tracing agent emits Foo$Companion with serializer(), - // but the actual class is Foo (no Companion class exists). If the parent class - // is in the baseline with serializer(), consider the Companion entry covered. - if (typeName.endsWith("\$Companion")) { - val parentType = typeName.removeSuffix("\$Companion") - for (baselineSection in listOf("reflection", "jni")) { - val sectionMap = libraryEntries[baselineSection] ?: continue - val parentEntry = sectionMap[parentType] ?: continue - - @Suppress("UNCHECKED_CAST") - val parentMethods = parentEntry["methods"] as? List> - val hasSerializer = parentMethods?.any { it["name"] == "serializer" } == true - if (hasSerializer) { - removedEntries.add(" [$projectSection via parent] $typeName") - return@removeAll true - } - } - } + // Check same section first, then cross-section + for (baselineSection in listOf("reflection", "jni")) { + val sectionMap = libraryEntries[baselineSection] ?: continue + val libEntry = sectionMap[typeName] ?: continue + if (libraryCoversProjectEntry(libEntry, projectEntry)) { + val source = if (baselineSection == projectSection) baselineSection else "$projectSection via $baselineSection" + removedEntries.add(" [$source] $typeName") + return true + } + } - false + // For Kotlin data objects + if (typeName.endsWith("\$Companion")) { + val parentType = typeName.removeSuffix("\$Companion") + for (baselineSection in listOf("reflection", "jni")) { + val sectionMap = libraryEntries[baselineSection] ?: continue + val parentEntry = sectionMap[parentType] ?: continue + + @Suppress("UNCHECKED_CAST") + val parentMethods = parentEntry["methods"] as? List> + val hasSerializer = parentMethods?.any { it["name"] == "serializer" } == true + if (hasSerializer) { + removedEntries.add(" [$projectSection via parent] $typeName") + return true + } } - totalRemoved += before - targetArray.size } + return false + } - // Clean resources section + private fun cleanResources( + targetRoot: MutableMap, + libraryResourceJsons: Set, + libraryResourceGlobs: List>, + includeResourcePatterns: List, + removedEntries: MutableList, + ): Int { @Suppress("UNCHECKED_CAST") val targetResources = targetRoot["resources"] as? MutableList> if (targetResources != null) { @@ -318,26 +401,31 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { } covered } - totalRemoved += before - targetResources.size + return before - targetResources.size } + return 0 + } - if (totalRemoved > 0) { - // Remove empty sections - for (section in listOf("reflection", "jni", "resources", "bundles", "serialization")) { - @Suppress("UNCHECKED_CAST") - val arr = targetRoot[section] as? List<*> - if (arr != null && arr.isEmpty()) { - targetRoot.remove(section) - } + private fun finalizeAndWrite( + targetRoot: MutableMap, + targetFile: File, + totalRemoved: Int, + removedEntries: List, + ) { + // Remove empty sections + for (section in listOf("reflection", "jni", "resources", "bundles", "serialization")) { + @Suppress("UNCHECKED_CAST") + val arr = targetRoot[section] as? List<*> + if (arr != null && arr.isEmpty()) { + targetRoot.remove(section) } - targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetRoot)) + "\n") - logger.lifecycle("Removed $totalRemoved entries from $targetFile:") - removedEntries.forEach { logger.lifecycle(it) } - } else { - logger.lifecycle("No redundant entries found — manual config is already clean") } + targetFile.writeText(JsonOutput.prettyPrint(JsonOutput.toJson(targetRoot)) + "\n") + logger.lifecycle("Removed $totalRemoved entries from $targetFile:") + removedEntries.forEach { logger.lifecycle(it) } + } - // Report remaining entries + private fun reportRemaining(targetRoot: Map) { var remaining = 0 for (section in listOf("reflection", "jni")) { @Suppress("UNCHECKED_CAST") @@ -361,7 +449,6 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { } private fun collectBaseline( - slurper: JsonSlurper, jsonText: String, libraryEntries: MutableMap>>, libraryProxies: MutableSet, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExecutableType.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExecutableType.kt index 2a6015415..f7e88b11f 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExecutableType.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExecutableType.kt @@ -82,15 +82,20 @@ private fun writeExecutableTypeMarker( if (appVersion != null) appendLine(appVersion) } marker.writeText(content) - logger.info("Wrote executable type '${targetFormat.executableTypeValue}' (version=$appVersion) to ${marker.absolutePath}") + logger.info( + "Wrote executable type '${targetFormat.executableTypeValue}' " + + "(version=$appVersion) to ${marker.absolutePath}", + ) } +private const val MAC_OS_DIR_MAX_DEPTH = 3 + private fun findNativeBinaryDir(appImageDir: File): File? { // macOS: AppName.app/Contents/MacOS/ val macOsDir = appImageDir .walkTopDown() - .maxDepth(3) + .maxDepth(MAC_OS_DIR_MAX_DEPTH) .firstOrNull { it.isDirectory && it.name == "MacOS" && it.parentFile?.name == "Contents" } if (macOsDir != null) return macOsDir diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt index 0eef06cd2..999ac17e9 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt @@ -24,6 +24,7 @@ import java.util.jar.JarFile * Files without `matchPackages` are always included. */ @CacheableTask +@Suppress("NestedBlockDepth", "LoopWithTooManyJumpStatements") abstract class FilterLibraryMetadataTask : DefaultTask() { /** The runtime classpath JARs/dirs to check for conditional library presence. */ @get:InputFiles diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/InfoPlistBuilder.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/InfoPlistBuilder.kt index 96d644542..0ececf570 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/InfoPlistBuilder.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/InfoPlistBuilder.kt @@ -5,13 +5,16 @@ package dev.nucleusframework.nucleus.desktop.application.internal -import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.* +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistBooleanValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistListValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistMapValue +import dev.nucleusframework.nucleus.desktop.application.internal.InfoPlistBuilder.InfoPlistValue.InfoPlistStringValue import java.io.File import kotlin.reflect.KProperty -private const val indent = " " +private const val INDENT = " " -private fun indentForLevel(level: Int) = indent.repeat(level) +private fun indentForLevel(level: Int) = INDENT.repeat(level) internal class InfoPlistBuilder( private val extraPlistKeysRawXml: String? = null, @@ -102,7 +105,7 @@ internal class InfoPlistBuilder( operator fun set( key: InfoPlistKey, value: Boolean?, - ) = set(key, value?.let(InfoPlistValue::InfoPlistBooleanValue)) + ) = set(key, value?.let(::InfoPlistBooleanValue)) operator fun set( key: InfoPlistKey, @@ -119,7 +122,8 @@ internal class InfoPlistBuilder( file.writer().buffered().use { writer -> writer.run { appendLine("") - appendLine("") + appendLine("") appendLine("") appendLine("${indentForLevel(1)}") for ((k, v) in values) { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmApplicationContext.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmApplicationContext.kt index a846c0450..a887a33c2 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmApplicationContext.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmApplicationContext.kt @@ -94,7 +94,8 @@ internal data class JvmApplicationContext( project.logger.error( "w: Default configuration for Compose Desktop Application is disabled: " + "multiple Kotlin JVM targets definitions are detected. " + - "Specify, which target to use by using `compose.desktop.application.from(kotlinMppTarget)`", + "Specify, which target to use by using " + + "`compose.desktop.application.from(kotlinMppTarget)`", ) appInternal.disableDefaultConfiguration() } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmRuntimeProperties.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmRuntimeProperties.kt index 1e0657980..aeac28733 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmRuntimeProperties.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/JvmRuntimeProperties.kt @@ -15,8 +15,7 @@ internal data class JvmRuntimeProperties( val availableModules: List, ) : Serializable { companion object { - @Suppress("unused") - private val serialVersionUid: Long = 0 + private const val serialVersionUID: Long = 0L fun writeToFile( properties: JvmRuntimeProperties, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt index 74a58b61d..be31bae71 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/LaunchAgentPlistGenerator.kt @@ -19,7 +19,10 @@ internal object LaunchAgentPlistGenerator { @Suppress("NestedBlockDepth") private fun buildPlistXml(agent: LaunchAgentDefinition, resolvedBundleProgram: String): String = buildString { appendLine("""""") - appendLine("""""") + appendLine( + "", + ) appendLine("""""") appendLine("") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacAssetsTool.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacAssetsTool.kt index 51d80f5ca..77feef044 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacAssetsTool.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacAssetsTool.kt @@ -4,6 +4,8 @@ import dev.nucleusframework.nucleus.internal.utils.MacUtils import org.gradle.api.logging.Logger import java.io.File +private const val REQUIRED_ACTOOL_VERSION = 26.0 + internal class MacAssetsTool( private val runTool: ExternalToolRunner, private val logger: Logger, @@ -56,7 +58,6 @@ internal class MacAssetsTool( fun assetsFile(workingDir: File): File = workingDir.resolve("Assets.car") private fun checkAssetsToolVersion(): String { - val requiredVersion = 26.0 var outputContent = "" val result = runTool( @@ -67,7 +68,8 @@ internal class MacAssetsTool( if (result.exitValue != 0) { error( - "Could not get actool version: Command `xcrun actool -version` exited with code ${result.exitValue}\nStdOut: $outputContent\n", + "Could not get actool version: Command `xcrun actool -version` " + + "exited with code ${result.exitValue}\nStdOut: $outputContent\n", ) } @@ -93,12 +95,15 @@ internal class MacAssetsTool( }, ) versionContent - } catch (e: Exception) { + } catch (@Suppress("TooGenericExceptionCaught") e: Exception) { error("Could not check actool version. Error: ${e.message}") } if (versionString.isNullOrBlank()) { - error("Could not extract short-bundle-version from actool output: '$outputContent'. Assuming it meets requirements.") + error( + "Could not extract short-bundle-version from actool output: '$outputContent'. " + + "Assuming it meets requirements.", + ) } val majorVersion = @@ -107,13 +112,14 @@ internal class MacAssetsTool( .firstOrNull() ?.toIntOrNull() ?: error( - "Could not get actool major version from version string '$versionString' . Output was: '$outputContent'. Assuming it meets requirements.", + "Could not get actool major version from version string '$versionString' . " + + "Output was: '$outputContent'. Assuming it meets requirements.", ) - if (majorVersion < requiredVersion) { + if (majorVersion < REQUIRED_ACTOOL_VERSION) { error( "Unsupported actool version: $versionString. " + - "Version $requiredVersion or higher is required. " + + "Version $REQUIRED_ACTOOL_VERSION or higher is required. " + "Please update your Xcode Command Line Tools.", ) } else { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt index 4c0e693ca..b012d8729 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt @@ -102,6 +102,7 @@ internal class MacSignerImpl( ) } + @Suppress("MagicNumber") private fun matchCertificates(certificates: String): String { // When the developer id contains non-ascii characters, the output of `security find-certificate` is // slightly different. The `alis` line first has the hex-encoded developer id, then some spaces, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt index afc55d6ca..5b0a3ae36 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt @@ -7,7 +7,7 @@ package dev.nucleusframework.nucleus.desktop.application.internal import dev.nucleusframework.nucleus.desktop.application.internal.files.isDylibPath import java.io.File -import java.nio.file.* +import java.nio.file.LinkOption import kotlin.io.path.isExecutable import kotlin.io.path.isRegularFile diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MultiOutputStream.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MultiOutputStream.kt index f281627ff..527b1de2a 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MultiOutputStream.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MultiOutputStream.kt @@ -31,4 +31,6 @@ internal class MultiOutputStream( } } -internal fun OutputStream.alsoOutputTo(secondaryStream: OutputStream): OutputStream = MultiOutputStream(this, secondaryStream) +internal fun OutputStream.alsoOutputTo(secondaryStream: OutputStream): OutputStream { + return MultiOutputStream(this, secondaryStream) +} diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NativeLibArchDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NativeLibArchDetector.kt index 5c8a9d471..853df66d1 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NativeLibArchDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NativeLibArchDetector.kt @@ -8,6 +8,7 @@ package dev.nucleusframework.nucleus.desktop.application.internal import java.nio.ByteBuffer import java.nio.ByteOrder +@Suppress("MagicNumber") internal object NativeLibArchDetector { enum class NativeArch { X86, X64, ARM64, UNIVERSAL, OTHER, UNKNOWN } @@ -89,7 +90,8 @@ internal object NativeLibArchDetector { */ fun detectFromPath(entryPath: String): NativeInfo { // Split into path segments and the compound tokens within segments - // e.g. "com/sun/jna/linux-x86-64/libjnidispatch.so" → segments: [com, sun, jna, linux-x86-64, libjnidispatch.so] + // e.g. "com/sun/jna/linux-x86-64/libjnidispatch.so" + // → segments: [com, sun, jna, linux-x86-64, libjnidispatch.so] val segments = entryPath.split('/') var detectedOs = NativeOs.UNKNOWN diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProjectProperties.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProperties.kt similarity index 99% rename from plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProjectProperties.kt rename to plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProperties.kt index bbc6cdf09..1adca5322 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProjectProperties.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/NucleusProperties.kt @@ -12,6 +12,7 @@ import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.provider.ProviderFactory +@Suppress("TooManyFunctions", "MaxLineLength") internal object NucleusProperties { internal const val VERBOSE = "compose.desktop.verbose" internal const val PRESERVE_WD = "compose.preserve.working.dir" diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/PatchedJavaLauncher.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/PatchedJavaLauncher.kt index 71e5309dc..88aba11b2 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/PatchedJavaLauncher.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/PatchedJavaLauncher.kt @@ -44,7 +44,9 @@ internal class PatchedJavaLauncher( val vendor = releaseProps["IMPLEMENTOR"] ?: "Unknown" val installation: Directory = objects.directoryProperty().also { it.set(patchedJavaHome) }.get() return object : JavaInstallationMetadata { - override fun getLanguageVersion(): JavaLanguageVersion = JavaLanguageVersion.of(languageMajor.coerceAtLeast(1)) + override fun getLanguageVersion(): JavaLanguageVersion = + JavaLanguageVersion.of(languageMajor.coerceAtLeast(1)) + override fun getJavaRuntimeVersion(): String = runtimeVersion override fun getJvmVersion(): String = jvmVersion override fun getVendor(): String = vendor diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/files/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/files/fileUtils.kt index 78a2be973..650a7d7b2 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/files/fileUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/files/fileUtils.kt @@ -9,13 +9,18 @@ import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat import dev.nucleusframework.nucleus.internal.utils.OS import dev.nucleusframework.nucleus.internal.utils.currentOS import org.gradle.api.tasks.Internal -import java.io.* +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.InputStream import java.security.DigestInputStream import java.security.MessageDigest import java.util.zip.ZipEntry import java.util.zip.ZipInputStream import java.util.zip.ZipOutputStream +private const val BYTE_MASK = 0xFF + internal fun File.mangledName(): String = buildString { append(nameWithoutExtension) @@ -40,7 +45,7 @@ internal fun File.contentHash(): String { val digest = md5.digest() return buildString(digest.size * 2) { for (byte in digest) { - append(Integer.toHexString(0xFF and byte.toInt())) + append(Integer.toHexString(BYTE_MASK and byte.toInt())) } } } @@ -48,7 +53,9 @@ internal fun File.contentHash(): String { private fun MessageDigest.digestContent(file: File) { file.inputStream().buffered().use { fis -> DigestInputStream(fis, this).use { ds -> - while (ds.read() != -1) {} + while (ds.read() != -1) { + // consume stream to update digest + } } } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt index d074def64..2f97a74bd 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt @@ -1,4 +1,4 @@ -@file:Suppress("ktlint:standard:filename") +@file:Suppress("ktlint:standard:filename", "TooManyFunctions") package dev.nucleusframework.nucleus.desktop.application.internal diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt index bfa143edc..d30778fe1 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt @@ -19,7 +19,14 @@ import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.RegularFile import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.Classpath +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import java.io.ByteArrayInputStream import java.io.File import java.util.* diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt index 5106b8211..54cacc5c7 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractElectronBuilderPackageTask.kt @@ -1453,12 +1453,12 @@ private fun killProcessesIn( try { val rt = Runtime.getRuntime() rt.exec(arrayOf("taskkill", "/F", "/IM", exe.name)).waitFor() - } catch (_: Exception) { + } catch (@Suppress("TooGenericExceptionCaught") _: Exception) { // ignore — process may not be running } } Thread.sleep(DELETE_RETRY_DELAY_MS) - } catch (e: Exception) { + } catch (@Suppress("TooGenericExceptionCaught") e: Exception) { logger.warn("Failed to kill locked processes: ${e.message}") } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt index 6ef80f286..715a848e5 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt @@ -26,6 +26,9 @@ import java.io.File private const val AOT_CACHE_FILENAME = "app.aot" private const val MIN_AOT_JDK_VERSION = 25 private const val DEFAULT_SAFETY_TIMEOUT_SECONDS = 300L +private const val XVFB_START_UP_DELAY_MS = 1000L +private const val PROCESS_POLL_INTERVAL_MS = 500L +private const val MS_PER_SECOND = 1000L /** * Generates a JDK 25+ AOT cache for a Compose Desktop distributable. @@ -368,16 +371,16 @@ abstract class AbstractGenerateAotCacheTask : AbstractNucleusTask() { ProcessBuilder("Xvfb", display, "-screen", "0", "1280x1024x24") .redirectErrorStream(true) .start() - Thread.sleep(1000) + Thread.sleep(XVFB_START_UP_DELAY_MS) processBuilder.environment()["DISPLAY"] = display logger.lifecycle("[aotCache] Started Xvfb on $display") } val process = processBuilder.start() - val deadline = System.currentTimeMillis() + safetyTimeoutSeconds.get() * 1000 + val deadline = System.currentTimeMillis() + safetyTimeoutSeconds.get() * MS_PER_SECOND while (process.isAlive && System.currentTimeMillis() < deadline) { - Thread.sleep(500) + Thread.sleep(PROCESS_POLL_INTERVAL_MS) } if (process.isAlive) { logger.warn("[aotCache] App did not self-terminate within safety timeout, forcing kill") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index d28c88490..4f0cc2311 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -97,7 +97,7 @@ import kotlin.io.path.isRegularFile * by electron-builder via [AbstractElectronBuilderPackageTask]. */ @DisableCachingByDefault(because = "Depends on external jpackage tool") -@Suppress("UnnecessaryAbstractClass") +@Suppress("UnnecessaryAbstractClass", "TooGenericExceptionCaught", "CyclomaticComplexMethod", "NestedBlockDepth", "LoopWithTooManyJumpStatements", "MaxLineLength") abstract class AbstractJPackageTask @Inject constructor( @@ -827,6 +827,10 @@ abstract class AbstractJPackageTask // Serializable is only needed to avoid breaking configuration cache: // https://docs.gradle.org/current/userguide/configuration_cache.html#config_cache:requirements private class FilesMapping : Serializable { + companion object { + private const val serialVersionUID: Long = 0L + } + private var mapping = HashMap>() operator fun get(key: File): List? = mapping[key] diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt index a383d5e52..6109c4e9d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJvmToolOperationTask.kt @@ -7,13 +7,22 @@ package dev.nucleusframework.nucleus.desktop.application.tasks import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.delete +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.jvmToolFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.LocalState +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction import org.gradle.process.ExecResult import org.gradle.work.DisableCachingByDefault import org.gradle.work.InputChanges diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt index eadd20ff7..0e47d309b 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt @@ -35,6 +35,7 @@ abstract class AbstractNativeMacApplicationPackageDmgTask : AbstractNativeMacApp private const val CSS_SHORT_HEX_LENGTH = 3 private const val CSS_FULL_HEX_LENGTH = 6 private const val APPLE_SCRIPT_RGB_SCALE = 257 + private const val HDIUTIL_ATTACH_DELAY_MS = 3000L } @get:InputFile @@ -160,7 +161,7 @@ abstract class AbstractNativeMacApplicationPackageDmgTask : AbstractNativeMacApp "-noautoopen", imageFile.absolutePath, ) - Thread.sleep(3000) + Thread.sleep(HDIUTIL_ATTACH_DELAY_MS) var device: String? = null var volume: String? = null diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt index f8a532936..1494aaab1 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageTask.kt @@ -6,12 +6,18 @@ package dev.nucleusframework.nucleus.desktop.application.tasks import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.LocalState +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault import java.io.File diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt index 8154a3084..c90de0dac 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt @@ -238,7 +238,8 @@ abstract class AbstractNotarizationTask return lines.joinToString("\n") } - private fun isUrlEntry(trimmed: String): Boolean = trimmed.startsWith("- url:") || trimmed.startsWith("-url:") + private fun isUrlEntry(trimmed: String): Boolean = + trimmed.startsWith("- url:") || trimmed.startsWith("-url:") private fun extractUrl(trimmed: String): String = trimmed diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractProguardTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractProguardTask.kt index a2a53b249..5a5f0be0d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractProguardTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractProguardTask.kt @@ -5,16 +5,35 @@ package dev.nucleusframework.nucleus.desktop.application.tasks -import dev.nucleusframework.nucleus.desktop.application.internal.* +import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRunner +import dev.nucleusframework.nucleus.desktop.application.internal.cliArg import dev.nucleusframework.nucleus.desktop.application.internal.files.mangledName import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* -import org.gradle.api.file.* +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.delete +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.jvmToolFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty +import dev.nucleusframework.nucleus.internal.utils.nullableProperty +import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.file.Directory +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFile +import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* +import org.gradle.api.tasks.Classpath +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.LocalState import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault import java.io.File import java.io.Writer diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt index f5cff972d..fd51e1001 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt @@ -49,7 +49,10 @@ abstract class AbstractRunDistributableTask if (files == null || files.isEmpty()) { error("Could not find application image: $appImageRoot is empty!") } else if (files.size > 1) { - error("Could not find application image: $appImageRoot contains multiple children [${files.joinToString(", ")}]") + error( + "Could not find application image: $appImageRoot " + + "contains multiple children [${files.joinToString(", ")}]", + ) } else { files.single() } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt index aabf8c715..784247d6d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractSuggestModulesTask.kt @@ -10,14 +10,25 @@ import dev.nucleusframework.nucleus.desktop.application.internal.ExternalToolRun import dev.nucleusframework.nucleus.desktop.application.internal.NucleusProperties import dev.nucleusframework.nucleus.desktop.application.internal.files.normalizedPath import dev.nucleusframework.nucleus.desktop.tasks.AbstractNucleusTask -import dev.nucleusframework.nucleus.internal.utils.* +import dev.nucleusframework.nucleus.internal.utils.clearDirs +import dev.nucleusframework.nucleus.internal.utils.delete +import dev.nucleusframework.nucleus.internal.utils.ioFile +import dev.nucleusframework.nucleus.internal.utils.jvmToolFile +import dev.nucleusframework.nucleus.internal.utils.notNullProperty import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.Directory import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider -import org.gradle.api.tasks.* +import org.gradle.api.tasks.Classpath +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.LocalState +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import org.gradle.work.DisableCachingByDefault @DisableCachingByDefault(because = "Depends on external jdeps tool") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt index 6aaf1d758..7ed33f5ac 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractJarsFlattenTask.kt @@ -108,7 +108,9 @@ abstract class AbstractJarsFlattenTask : AbstractNucleusTask() { } private fun isServiceFile(name: String): Boolean = - name.startsWith(SERVICES_PREFIX) && name.length > SERVICES_PREFIX.length && '/' !in name.substring(SERVICES_PREFIX.length) + name.startsWith(SERVICES_PREFIX) && + name.length > SERVICES_PREFIX.length && + '/' !in name.substring(SERVICES_PREFIX.length) private fun mergeServiceFile( name: String, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt index 514f46dc4..c1d3e9835 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/tasks/AbstractUnpackDefaultApplicationResourcesTask.kt @@ -30,8 +30,10 @@ abstract class AbstractUnpackDefaultApplicationResourcesTask : AbstractNucleusTa val macIcon: Provider = resourcesRootDir.map { it.file("default-icon-mac.icns") } val windowsIcon: Provider = resourcesRootDir.map { it.file("default-icon-windows.ico") } val linuxIcon: Provider = resourcesRootDir.map { it.file("default-icon-linux.png") } - val defaultComposeProguardRules: Provider = resourcesRootDir.map { it.file(DEFAULT_COMPOSE_PROGUARD_RULES_FILE_NAME) } - val defaultEntitlements: Provider = resourcesRootDir.map { it.file(DEFAULT_ENTITLEMENTS_FILE_NAME) } + val defaultComposeProguardRules: Provider = + resourcesRootDir.map { it.file(DEFAULT_COMPOSE_PROGUARD_RULES_FILE_NAME) } + val defaultEntitlements: Provider = + resourcesRootDir.map { it.file(DEFAULT_ENTITLEMENTS_FILE_NAME) } val defaultSandboxEntitlements: Provider = resourcesRootDir.map { it.file(DEFAULT_SANDBOX_ENTITLEMENTS_FILE_NAME) } val defaultSandboxRuntimeEntitlements: Provider = diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/experimental/internal/checkExperimentalTargets.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/experimental/internal/checkExperimentalTargets.kt index b246b7998..427f39050 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/experimental/internal/checkExperimentalTargets.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/experimental/internal/checkExperimentalTargets.kt @@ -64,6 +64,7 @@ private fun checkExperimentalTargetsWithSkikoIsEnabled( } } +@Suppress("NestedBlockDepth") private fun checkTarget( project: Project, target: KotlinTarget, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/IdeaImportTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/IdeaImportTask.kt index ee1369baf..66bd42197 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/IdeaImportTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/IdeaImportTask.kt @@ -24,7 +24,7 @@ internal abstract class IdeaImportTask : DefaultTask() { fun run() { try { safeAction() - } catch (e: Exception) { + } catch (@Suppress("TooGenericExceptionCaught") e: Exception) { // message must contain two ':' symbols to be parsed by IDE UI! logger.error("e: $name task was failed:", e) if (!ideaIsInSync.get()) throw e diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/fileUtils.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/fileUtils.kt index 37d6f0bab..9626fc2a7 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/fileUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/fileUtils.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ +@file:Suppress("TooManyFunctions") + package dev.nucleusframework.nucleus.internal.utils import org.gradle.api.Project diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/gradleUtils.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/gradleUtils.kt index c18101b87..ea6f47535 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/gradleUtils.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/utils/gradleUtils.kt @@ -42,7 +42,12 @@ fun Project.getLocalProperty(key: String): String? { internal fun Project.detachedComposeGradleDependency( artifactId: String, groupId: String = "org.jetbrains.compose", -): Configuration = detachedDependency(groupId = groupId, artifactId = artifactId, version = NucleusBuildConfig.composeGradlePluginVersion) +): Configuration = + detachedDependency( + groupId = groupId, + artifactId = artifactId, + version = NucleusBuildConfig.composeGradlePluginVersion, + ) internal fun Project.detachedComposeDependency( artifactId: String, From 5344f589c77287f9e17172970698cb72bc9408e6 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 17:03:58 +0300 Subject: [PATCH 08/30] chore: final linter fixes to resolve CI failures --- .../application/dsl/LaunchAgentSettings.kt | 4 +- .../internal/AnalyzeStaticMetadataTask.kt | 2 +- .../internal/CleanupGraalvmMetadataTask.kt | 4 +- .../internal/ExternalToolRunner.kt | 5 +- .../internal/FilterLibraryMetadataTask.kt | 2 +- .../desktop/application/internal/MacSigner.kt | 1 + .../application/internal/MacSigningHelper.kt | 1 - .../ResolveReachabilityMetadataTask.kt | 2 + .../internal/UpdateYmlGenerator.kt | 2 +- .../internal/analyzer/BytecodeAnalyzer.kt | 12 +-- .../internal/analyzer/OracleRepoParser.kt | 13 +-- .../detectors/ClassForNameDetector.kt | 12 +-- .../analyzer/detectors/JarResourceDetector.kt | 1 + .../detectors/MethodHandleDetector.kt | 9 +- .../detectors/ReflectionApiDetector.kt | 1 + .../detectors/ResourceAccessDetector.kt | 11 +-- .../detectors/ServiceLoaderDetector.kt | 1 + .../internal/configureGraalvmApplication.kt | 82 ++++++++++--------- .../internal/configureJvmApplication.kt | 10 ++- .../ElectronBuilderConfigGenerator.kt | 6 +- .../internal/mergeNativeImageConfig.kt | 10 ++- .../internal/resolveMetadataRepository.kt | 2 +- .../validation/validatePackageVersions.kt | 2 + .../tasks/AbstractGenerateAotCacheTask.kt | 2 +- .../application/tasks/AbstractJPackageTask.kt | 5 +- ...ctNativeMacApplicationPackageAppDirTask.kt | 1 + ...tractNativeMacApplicationPackageDmgTask.kt | 1 + .../tasks/AbstractNotarizationTask.kt | 6 +- .../tasks/AbstractRunDistributableTask.kt | 2 +- .../ComposeCompilerArtifactProvider.kt | 1 + .../nucleus/internal/Version.kt | 3 +- 31 files changed, 121 insertions(+), 95 deletions(-) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/LaunchAgentSettings.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/LaunchAgentSettings.kt index a8ed1037a..5a1a3ef4b 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/LaunchAgentSettings.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/LaunchAgentSettings.kt @@ -48,11 +48,11 @@ class LaunchAgentDefinition( val label: String, ) : Serializable { internal var bundleProgram: String? = null - internal var programArguments: MutableList = mutableListOf() + internal val programArguments: MutableList = mutableListOf() internal var startInterval: Int? = null internal var runAtLoad: Boolean = false internal var keepAlive: Boolean = false - internal var calendarIntervals: MutableList = mutableListOf() + internal val calendarIntervals: MutableList = mutableListOf() internal var processType: String = "Background" /** diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt index 22d1a1ac0..48f407d79 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/AnalyzeStaticMetadataTask.kt @@ -101,7 +101,7 @@ internal fun buildReachabilityMetadataJson( if (resourcePatterns.isNotEmpty()) { root["resources"] = resourcePatterns - .sortedBy { it.glob ?: it.bundle ?: "" } + .sortedBy { it.glob ?: it.bundle.orEmpty() } .map { it.toJsonMap() } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt index 78f8fd344..99617b1c3 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/CleanupGraalvmMetadataTask.kt @@ -532,10 +532,10 @@ abstract class CleanupGraalvmMetadataTask : DefaultTask() { } private fun sig(obj: Map): String { - val name = obj["name"] as? String ?: "" + val name = (obj["name"] as? String).orEmpty() @Suppress("UNCHECKED_CAST") - val params = (obj["parameterTypes"] as? List)?.joinToString(",") ?: "" + val params = (obj["parameterTypes"] as? List)?.joinToString(",").orEmpty() return "$name($params)" } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExternalToolRunner.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExternalToolRunner.kt index de73591fd..b04d1a328 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExternalToolRunner.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ExternalToolRunner.kt @@ -60,14 +60,13 @@ internal class ExternalToolRunner( spec.standardInput = ByteArrayInputStream(stdinStr.toByteArray()) } - @Suppress("NAME_SHADOWING") - val logToConsole = + val shouldLogToConsole = when (logToConsole) { LogToConsole.Always -> true LogToConsole.Never -> false LogToConsole.OnlyWhenVerbose -> verbose.get() } - if (logToConsole) { + if (shouldLogToConsole) { spec.standardOutput = spec.standardOutput.alsoOutputTo(outFileStream) spec.errorOutput = spec.errorOutput.alsoOutputTo(errFileStream) } else { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt index 999ac17e9..a72ad1427 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/FilterLibraryMetadataTask.kt @@ -46,7 +46,7 @@ abstract class FilterLibraryMetadataTask : DefaultTask() { ?.bufferedReader() ?.readLines() ?.filter { it.isNotBlank() } - ?: emptyList() + .orEmpty() val slurper = JsonSlurper() val mergedReflection = mutableListOf() diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt index b012d8729..b1de71423 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigner.kt @@ -90,6 +90,7 @@ internal class MacSignerImpl( ), processStdout = { signKeyValue = matchCertificates(it) }, ) + @Suppress("UnsafeCallOnNullableType") signKeyValue!! } runTool.unsign(file) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt index 5b0a3ae36..2f8ba920d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/MacSigningHelper.kt @@ -13,7 +13,6 @@ import kotlin.io.path.isRegularFile internal class MacSigningHelper( private val macSigner: MacSigner, - private val runtimeProvisioningProfile: File?, private val entitlementsFile: File?, private val runtimeEntitlementsFile: File?, destinationDir: File, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt index 01a4fa666..111c100cf 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/ResolveReachabilityMetadataTask.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber", "LoopWithTooManyJumpStatements") + package dev.nucleusframework.nucleus.desktop.application.internal import org.gradle.api.DefaultTask diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/UpdateYmlGenerator.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/UpdateYmlGenerator.kt index 7ec4d5c86..9fb99873f 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/UpdateYmlGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/UpdateYmlGenerator.kt @@ -41,7 +41,7 @@ internal object UpdateYmlGenerator { f.isFile && !f.name.startsWith(".") && f.extension.lowercase() !in SKIP_EXTENSIONS - }?.sortedBy { it.name } ?: emptyList() + }?.sortedBy { it.name }.orEmpty() if (installerFiles.isEmpty()) { logger.warn("No installer files found in ${outputDir.absolutePath}, skipping update YML generation") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt index 52fc63306..9138875cb 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/BytecodeAnalyzer.kt @@ -16,6 +16,7 @@ import java.util.jar.JarFile /** * Main entry point: scans one or more JARs and produces an [AnalysisResult]. */ +@Suppress("LoopWithTooManyJumpStatements") internal object BytecodeAnalyzer { /** * Analyzes a single JAR file. @@ -190,12 +191,11 @@ internal object BytecodeAnalyzer { fun analyzeClasspath(files: Iterable): AnalysisResult { var merged = AnalysisResult() for (file in files) { - merged = merged + - when { - file.isDirectory -> analyzeClassDir(file) - file.isFile && file.name.endsWith(".jar") -> analyzeJar(file) - else -> continue - } + merged += when { + file.isDirectory -> analyzeClassDir(file) + file.isFile && file.name.endsWith(".jar") -> analyzeJar(file) + else -> continue + } } return merged } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt index f886e61ec..85edb837b 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/OracleRepoParser.kt @@ -10,6 +10,7 @@ import java.io.File * The Oracle repo uses individual config files per type (reflect-config.json, jni-config.json) * which are JSON arrays, unlike the newer reachability-metadata.json format. */ +@Suppress("MaxLineLength") internal object OracleRepoParser { // Instantiate locally per call — JsonSlurper is not thread-safe private fun slurper() = JsonSlurper() @@ -60,7 +61,7 @@ internal object OracleRepoParser { when (resources) { is Map<*, *> -> { @Suppress("UNCHECKED_CAST") - val includes = resources["includes"] as? List> ?: emptyList() + val includes = (resources["includes"] as? List>).orEmpty() for (entry in includes) { val pattern = entry["pattern"] as? String if (pattern != null) { @@ -102,10 +103,10 @@ internal object OracleRepoParser { val root = slurper().parseText(file.readText()) as? Map ?: return AnalysisResult() @Suppress("UNCHECKED_CAST") - val reflectionArray = root["reflection"] as? List> ?: emptyList() + val reflectionArray = (root["reflection"] as? List>).orEmpty() @Suppress("UNCHECKED_CAST") - val jniArray = root["jni"] as? List> ?: emptyList() + val jniArray = (root["jni"] as? List>).orEmpty() val reflectionEntries = reflectionArray.map { parseTypeMap(it).toReflectionEntry() }.toSet() val jniEntries = jniArray.map { parseTypeMap(it).toJniEntry() }.toSet() @@ -169,20 +170,20 @@ internal object OracleRepoParser { @Suppress("UNCHECKED_CAST") private fun parseTypeArray(file: File): List { - val array = slurper().parseText(file.readText()) as? List> ?: return emptyList() + val array = (slurper().parseText(file.readText()) as? List>).orEmpty() return array.mapNotNull { map -> parseTypeMap(map).takeIf { it.name.isNotEmpty() } } } @Suppress("UNCHECKED_CAST") private fun parseTypeMap(map: Map): ParsedType { - val name = (map["name"] as? String) ?: (map["type"] as? String) ?: "" + val name = (map["name"] as? String) ?: (map["type"] as? String).orEmpty() val methods = mutableSetOf() val methodsList = map["methods"] as? List> if (methodsList != null) { for (m in methodsList) { val mName = m["name"] as? String ?: continue - val params = (m["parameterTypes"] as? List) ?: emptyList() + val params = (m["parameterTypes"] as? List).orEmpty() methods.add(MethodSignature(mName, params)) } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt index eb6e01867..fcb8ee419 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ClassForNameDetector.kt @@ -88,11 +88,11 @@ internal object ClassForNameDetector { override fun visitMethodInsn( opcode: Int, owner: String, - name: String, - descriptor: String, + methodName: String, + methodDescriptor: String, isInterface: Boolean, ) { - if (isClassLoadingCall(opcode, owner, name, descriptor)) { + if (isClassLoadingCall(opcode, owner, methodName, methodDescriptor)) { hasClassLoadingCall = true val className = stackString if (className != null && isValidClassName(className)) { @@ -145,9 +145,9 @@ internal object ClassForNameDetector { // directly matched. Apply stricter validation to reduce false positives // from log messages or SQL queries that resemble FQCNs. if (hasClassLoadingCall) { - for (name in candidateClassNames) { - if (isStrictClassName(name)) { - entries.add(ReflectionEntry(type = name)) + for (className in candidateClassNames) { + if (isStrictClassName(className)) { + entries.add(ReflectionEntry(type = className)) } } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt index 767d243a9..031b4554f 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/JarResourceDetector.kt @@ -9,6 +9,7 @@ import java.util.jar.JarFile * - Properties files at root or known paths (excluding META-INF) * - Text resources in known framework resource directories (Lucene, ICU4J, etc.) */ +@Suppress("CyclomaticComplexMethod", "LoopWithTooManyJumpStatements") internal object JarResourceDetector { private val NATIVE_LIB_EXTENSIONS = setOf("so", "dll", "dylib", "jnilib", "a") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt index 28eb4f919..d432573a0 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/MethodHandleDetector.kt @@ -23,6 +23,7 @@ import org.objectweb.asm.Type * The detector tracks both the most recent class type (from `LDC Type`) and string * constant to resolve the target class and member name. */ +@Suppress("LongMethod") internal object MethodHandleDetector { private val FIND_METHOD_NAMES = setOf( @@ -90,12 +91,8 @@ internal object MethodHandleDetector { ) { when (opcode) { Opcodes.ASTORE -> { - if (lastClassType != null) { - localClassTypes[varIndex] = lastClassType!! - } - if (lastStringConstant != null) { - localStrings[varIndex] = lastStringConstant!! - } + lastClassType?.let { localClassTypes[varIndex] = it } + lastStringConstant?.let { localStrings[varIndex] = it } lastClassType = null lastStringConstant = null } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt index 086a2bf3f..c2bb103fa 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ReflectionApiDetector.kt @@ -16,6 +16,7 @@ import org.objectweb.asm.Type * * Tracks both string constants and class constants through local variable stores/loads. */ +@Suppress("CyclomaticComplexMethod") internal object ReflectionApiDetector { private val METHOD_LOOKUPS = setOf("getMethod", "getDeclaredMethod") private val FIELD_LOOKUPS = setOf("getField", "getDeclaredField") diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt index 07de9a153..33d842c1d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ResourceAccessDetector.kt @@ -73,12 +73,13 @@ internal object ResourceAccessDetector { ) { if (opcode == Opcodes.INVOKEVIRTUAL && owner in RESOURCE_OWNERS && - name in RESOURCE_METHODS && - stackString != null + name in RESOURCE_METHODS ) { - val path = normalizeResourcePath(stackString!!) - if (path.isNotEmpty()) { - patterns.add(ResourcePattern(glob = path)) + stackString?.let { s -> + val path = normalizeResourcePath(s) + if (path.isNotEmpty()) { + patterns.add(ResourcePattern(glob = path)) + } } } stackString = null diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt index 2cb4f50db..bf8acb7ec 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/analyzer/detectors/ServiceLoaderDetector.kt @@ -13,6 +13,7 @@ import java.util.jar.JarFile * - Reflection entries for each implementation class (with no-arg constructor) * - A resource pattern for the service file itself */ +@Suppress("LoopWithTooManyJumpStatements") internal object ServiceLoaderDetector { data class ServiceResult( val reflectionEntries: Set, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureGraalvmApplication.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureGraalvmApplication.kt index ebaee6b3e..ae67b4903 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureGraalvmApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureGraalvmApplication.kt @@ -1,4 +1,11 @@ -@file:Suppress("ktlint:standard:filename") +@file:Suppress( + "ktlint:standard:filename", + "CyclomaticComplexMethod", + "LongMethod", + "NestedBlockDepth", + "MagicNumber", + "MaxLineLength", +) package dev.nucleusframework.nucleus.desktop.application.internal @@ -38,7 +45,6 @@ private val graalvmDefaultJvmArgs: List = } } -@Suppress("LongMethod", "CyclomaticComplexMethod") internal fun JvmApplicationContext.configureGraalvmApplication() { val graalvm = app.graalvm val javaToolchains = project.extensions.getByType(JavaToolchainService::class.java) @@ -255,7 +261,7 @@ internal fun JvmApplicationContext.configureGraalvmApplication() { // Project/SourceSet references into the configuration cache. val winPkgName = packageNameProvider val winPkgVersion = provider { app.nativeDistributions.packageVersion ?: "1.0.0" } - val winCopyright = provider { app.nativeDistributions.copyright ?: "" } + val winCopyright = provider { app.nativeDistributions.copyright.orEmpty() } val winDescription = provider { app.nativeDistributions.description ?: packageNameProvider.get() } val winIconFile = app.nativeDistributions.windows.iconFile @@ -393,7 +399,7 @@ internal fun JvmApplicationContext.configureGraalvmApplication() { taskNameObject = "graalvmPlatformMetadata", ) { description = "Generate platform-specific GraalVM metadata for AWT/Java2D and main class" - inputs.property("mainClass", mainClassName ?: "") + inputs.property("mainClass", mainClassName.orEmpty()) outputs.dir(platformMetadataDir) doLast { @@ -530,39 +536,37 @@ internal fun JvmApplicationContext.configureGraalvmApplication() { .register( "cleanupGraalvmMetadata", CleanupGraalvmMetadataTask::class.java, - ).apply { - configure { task -> - task.description = - "Remove entries from manual reachability-metadata.json that are already managed by Nucleus" - task.group = NUCLEUS_TASK_GROUP - task.dependsOn(resolveReachabilityMetadata) - task.dependsOn(analyzeStaticMetadata) - task.dependsOn(filterLibraryMetadata) - - if (runtimeCfg != null) { - task.runtimeClasspath.from(runtimeCfg) - } - task.metadataRepoDirsFile.set(project.layout.file(metadataRepoDirsFile.map { it.asFile })) - task.staticAnalysisDir.from(staticMetadataDir) - task.staticAnalysisDir.from(libraryMetadataDir) - task.platformName.set( - when (currentOS) { - OS.Windows -> "windows" - OS.MacOS -> "macos" - OS.Linux -> "linux" - }, - ) - task.mainClass.set(mainClassName ?: "") - task.configDir.set( - if (nativeImageConfigDir.isPresent) { - nativeImageConfigDir.get().asFile - } else { - project.layout.projectDirectory - .dir("graalvm") - .asFile - }, - ) + ) { task -> + task.description = + "Remove entries from manual reachability-metadata.json that are already managed by Nucleus" + task.group = NUCLEUS_TASK_GROUP + task.dependsOn(resolveReachabilityMetadata) + task.dependsOn(analyzeStaticMetadata) + task.dependsOn(filterLibraryMetadata) + + if (runtimeCfg != null) { + task.runtimeClasspath.from(runtimeCfg) } + task.metadataRepoDirsFile.set(project.layout.file(metadataRepoDirsFile.map { it.asFile })) + task.staticAnalysisDir.from(staticMetadataDir) + task.staticAnalysisDir.from(libraryMetadataDir) + task.platformName.set( + when (currentOS) { + OS.Windows -> "windows" + OS.MacOS -> "macos" + OS.Linux -> "linux" + }, + ) + task.mainClass.set(mainClassName.orEmpty()) + task.configDir.set( + if (nativeImageConfigDir.isPresent) { + nativeImageConfigDir.get().asFile + } else { + project.layout.projectDirectory + .dir("graalvm") + .asFile + }, + ) } // ── nativeImageCompile ── @@ -923,7 +927,7 @@ private fun JvmApplicationContext.configureMacOsGraalvmPackaging( // Patch all Mach-O files: main binary + dylibs in MacOS/ and MacOS/lib/ sequenceOf(macosDir, libDir) .filter { it.isDirectory } - .flatMap { dir -> dir.listFiles()?.asSequence() ?: emptySequence() } + .flatMap { dir -> dir.listFiles()?.asSequence().orEmpty() } .filter { it.isFile && (it.extension == "dylib" || it.canExecute()) } .forEach { file -> patchMachOBuildVersion(file, minVer, sdkVer, logger) @@ -1019,11 +1023,11 @@ private fun JvmApplicationContext.configureMacOsGraalvmPackaging( // Wire inputs for up-to-date checks inputs.property("bundleName", plistBundleName) - inputs.property("bundleID", plistBundleID ?: "") + inputs.property("bundleID", plistBundleID.orEmpty()) inputs.property("version", plistVersion) inputs.property("imageName", imageName) inputs.property("minSystemVersion", plistMinSystemVersion) - inputs.property("copyright", plistCopyright ?: "") + inputs.property("copyright", plistCopyright.orEmpty()) inputs.property("iconFileName", plistIconFileName) inputs.property("fileAssociations", plistFileAssociations.toString()) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureJvmApplication.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureJvmApplication.kt index c1d68b957..15fa08c29 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureJvmApplication.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/configureJvmApplication.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ -@file:Suppress("TooManyFunctions") +@file:Suppress("TooManyFunctions", "CyclomaticComplexMethod") package dev.nucleusframework.nucleus.desktop.application.internal @@ -603,16 +603,18 @@ private fun JvmApplicationContext.configurePackagingTasks(commonTasks: CommonJvm // Register the patch task eagerly so it's available for the run task's // lazy configuration (Gradle forbids task registration from within // another task's configuration action). - val patchMacJvmTask: TaskProvider? = - if (currentOS == OS.MacOS && app.nativeDistributions.macOS.macOsSdkVersion != null) { + val patchMacJvmTask: TaskProvider? = run { + val sdkVersion = app.nativeDistributions.macOS.macOsSdkVersion + if (currentOS == OS.MacOS && sdkVersion != null) { registerPatchMacJvmTask( javaHome = app.javaHome, minVersion = app.nativeDistributions.macOS.minimumSystemVersion ?: "10.13", - sdkVersion = app.nativeDistributions.macOS.macOsSdkVersion!!, + sdkVersion = sdkVersion, ) } else { null } + } val run = tasks.register(taskNameAction = "run") { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt index 2ee0ab3bf..99c4382b5 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/electronbuilder/ElectronBuilderConfigGenerator.kt @@ -24,11 +24,11 @@ import java.io.File * Generates an electron-builder YAML configuration from the Gradle DSL settings. * * Maps Nucleus DSL properties to the electron-builder configuration schema, - * producing a `electron-builder.yml` file consumed by `electron-builder --prepackaged`. + * Producing a `electron-builder.yml` file consumed by `electron-builder --prepackaged`. * */ -@Suppress("TooManyFunctions", "LargeClass") -internal class ElectronBuilderConfigGenerator { + @Suppress("TooManyFunctions", "LargeClass", "CyclomaticComplexMethod", "MaxLineLength") + internal class ElectronBuilderConfigGenerator { /** * Generates the electron-builder config YAML content. * diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt index 2f97a74bd..9d1c549da 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/mergeNativeImageConfig.kt @@ -1,4 +1,12 @@ -@file:Suppress("ktlint:standard:filename", "TooManyFunctions") +@file:Suppress( + "ktlint:standard:filename", + "TooManyFunctions", + "CyclomaticComplexMethod", + "LongMethod", + "NestedBlockDepth", + "LoopWithTooManyJumpStatements", + "MaxLineLength", +) package dev.nucleusframework.nucleus.desktop.application.internal diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/resolveMetadataRepository.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/resolveMetadataRepository.kt index 3c595d069..6c23c859b 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/resolveMetadataRepository.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/resolveMetadataRepository.kt @@ -1,4 +1,4 @@ -@file:Suppress("ktlint:standard:filename") +@file:Suppress("ktlint:standard:filename", "NestedBlockDepth", "TooGenericExceptionCaught") package dev.nucleusframework.nucleus.desktop.application.internal diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/validation/validatePackageVersions.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/validation/validatePackageVersions.kt index 4b6fd5cfc..e7064e63a 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/validation/validatePackageVersions.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/internal/validation/validatePackageVersions.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. */ +@file:Suppress("NestedBlockDepth", "MagicNumber") + package dev.nucleusframework.nucleus.desktop.application.internal.validation import dev.nucleusframework.nucleus.desktop.application.dsl.TargetFormat diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt index 715a848e5..9ca5669c4 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt @@ -116,7 +116,7 @@ abstract class AbstractGenerateAotCacheTask : AbstractNucleusTask() { baseDir .listFiles() ?.filter { it.isDirectory && it.name != ".DS_Store" } - ?: emptyList() + .orEmpty() return when { children.isEmpty() -> throw GradleException("Distributable app directory not found under $baseDir") children.size == 1 -> children.single() diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index 4f0cc2311..e2f4c0735 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -615,6 +615,7 @@ abstract class AbstractJPackageTask val appEntitlementsFile = macEntitlementsFile.ioFileOrNull val runtimeEntitlementsFile = macRuntimeEntitlementsFile.ioFileOrNull + @Suppress("UnsafeCallOnNullableType") val macSigner = macSigner!! // Resign the runtime completely (and also the app dir only) // Sign all libs and executables in runtime @@ -873,7 +874,9 @@ private class FilesMapping : Serializable { @Suppress("UNCHECKED_CAST") private fun readObject(stream: ObjectInputStream) { - mapping = stream.readObject() as HashMap> + val readMapping = stream.readObject() as HashMap> + mapping.clear() + mapping.putAll(readMapping) } } diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt index c7e4a0025..d3f3721db 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageAppDirTask.kt @@ -82,6 +82,7 @@ abstract class AbstractNativeMacApplicationPackageAppDirTask : AbstractNativeMac appExecutableFile.setExecutable(true) macLayeredIcons.orNull?.let { + @Suppress("TooGenericExceptionCaught") try { macAssetsTool.compileAssets( iconDir = it.asFile, diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt index 0e47d309b..c1310203d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNativeMacApplicationPackageDmgTask.kt @@ -25,6 +25,7 @@ import org.gradle.work.DisableCachingByDefault import java.io.File @DisableCachingByDefault(because = "Depends on external macOS native tools") +@Suppress("LoopWithTooManyJumpStatements", "MagicNumber") abstract class AbstractNativeMacApplicationPackageDmgTask : AbstractNativeMacApplicationPackageTask() { companion object { private const val DEFAULT_ICON_SIZE = 72 diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt index c90de0dac..ca992bc51 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractNotarizationTask.kt @@ -90,9 +90,9 @@ abstract class AbstractNotarizationTask }, ) - if (submissionId != null) { - logger.lifecycle("Notarization submission ID: $submissionId (file: ${packageFile.name})") - saveNotarizationRequestInfo(submissionId!!) + submissionId?.let { id -> + logger.lifecycle("Notarization submission ID: $id (file: ${packageFile.name})") + saveNotarizationRequestInfo(id) } if (result.exitValue != 0 || stdout.contains("status: Invalid")) { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt index fd51e1001..6d34c5170 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractRunDistributableTask.kt @@ -46,7 +46,7 @@ abstract class AbstractRunDistributableTask .listFiles() // Sometimes ".DS_Store" files are created on macOS, so ignore them. ?.filterNot { it.name == ".DS_Store" } - if (files == null || files.isEmpty()) { + if (files.isNullOrEmpty()) { error("Could not find application image: $appImageRoot is empty!") } else if (files.size > 1) { error( diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/ComposeCompilerArtifactProvider.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/ComposeCompilerArtifactProvider.kt index dc92d5761..dc1fc63bc 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/ComposeCompilerArtifactProvider.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/ComposeCompilerArtifactProvider.kt @@ -8,6 +8,7 @@ package dev.nucleusframework.nucleus.internal import dev.nucleusframework.nucleus.internal.ComposeCompilerArtifactProvider.DefaultCompiler.pluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact +@Suppress("MagicNumber") internal class ComposeCompilerArtifactProvider( private val customPluginString: () -> String, ) { diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/Version.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/Version.kt index 6e7744723..f9ee9d583 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/Version.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/internal/Version.kt @@ -2,6 +2,7 @@ package dev.nucleusframework.nucleus.internal import kotlin.math.min +@Suppress("MagicNumber") internal data class Version( val major: Int, val minor: Int, @@ -54,7 +55,7 @@ internal data class Version( val major: Int = matchResult.groups[1]?.value?.toInt() ?: 0 val minor: Int = matchResult.groups[2]?.value?.toInt() ?: 0 val patch: Int = matchResult.groups[3]?.value?.toInt() ?: 0 - val meta: String = matchResult.groups[4]?.value ?: "" + val meta: String = matchResult.groups[4]?.value.orEmpty() return Version(major, minor, patch, meta) } } From 5a716edd874483a8fbaa286055c733d0003cb5c3 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 17:43:13 +0300 Subject: [PATCH 09/30] fix ci --- README.md | 2 +- docs/ci-cd.md | 38 ++++++++++++++++++------------------ docs/graalvm/tasks-ci.md | 2 +- docs/index.md | 2 +- docs/install-linux.sh | 2 +- docs/install.sh | 2 +- docs/llms-full.txt | 42 ++++++++++++++++++++-------------------- docs/targets/linux.md | 2 +- mkdocs.yml | 2 +- 9 files changed, 47 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index f7e5970c7..2c97c7436 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) [![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) diff --git a/docs/ci-cd.md b/docs/ci-cd.md index d393fc8c0..32d95d428 100644 --- a/docs/ci-cd.md +++ b/docs/ci-cd.md @@ -7,7 +7,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -42,7 +42,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -79,7 +79,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -172,7 +172,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -225,7 +225,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -271,7 +271,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main + uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -299,7 +299,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main + uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -375,7 +375,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main + uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -432,14 +432,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main + uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: nucleusframework/Nucleus/.github/actions/publish-release@main + uses: kdroidFilter/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -467,16 +467,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -528,7 +528,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -574,5 +574,5 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually diff --git a/docs/graalvm/tasks-ci.md b/docs/graalvm/tasks-ci.md index 7ba740f9b..69c4d5e7c 100644 --- a/docs/graalvm/tasks-ci.md +++ b/docs/graalvm/tasks-ci.md @@ -103,7 +103,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' diff --git a/docs/index.md b/docs/index.md index c4e216a74..636dd6d13 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,7 +7,7 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) [![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) diff --git a/docs/install-linux.sh b/docs/install-linux.sh index c4d4fd9b0..f4ffb58af 100755 --- a/docs/install-linux.sh +++ b/docs/install-linux.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="nucleusframework/Nucleus" +repo="kdroidFilter/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/install.sh b/docs/install.sh index 1d7f27cad..eccab79a8 100755 --- a/docs/install.sh +++ b/docs/install.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="nucleusframework/Nucleus" +repo="kdroidFilter/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 1434bf772..bc8a47c7d 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -1576,7 +1576,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` @@ -3677,7 +3677,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4133,7 +4133,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -4149,7 +4149,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4186,7 +4186,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4279,7 +4279,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4332,7 +4332,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -4378,7 +4378,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main + uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -4406,7 +4406,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main + uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -4482,7 +4482,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main + uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -4539,14 +4539,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main + uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: nucleusframework/Nucleus/.github/actions/publish-release@main + uses: kdroidFilter/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -4574,16 +4574,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -4635,7 +4635,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4681,7 +4681,7 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually --- diff --git a/docs/targets/linux.md b/docs/targets/linux.md index 513788df9..39c3f2f76 100644 --- a/docs/targets/linux.md +++ b/docs/targets/linux.md @@ -229,7 +229,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` diff --git a/mkdocs.yml b/mkdocs.yml index 9546dd809..70adcb1f7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,7 @@ site_name: Nucleus site_description: The Kotlin framework for native desktop apps — deep OS integration (notifications, tray, launcher, decorated windows, scheduler, media control) plus packaging on macOS, Windows, and Linux site_url: https://nucleusframework.dev repo_url: https://github.com/kdroidFilter/Nucleus -repo_name: nucleusframework/Nucleus +repo_name: kdroidFilter/Nucleus edit_uri: edit/main/docs/ theme: From 97dc2798dac53075c2f45b3f051a98078a7102c6 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 17:52:28 +0300 Subject: [PATCH 10/30] chore: update GitHub organization URLs to nucleusframework --- README.md | 4 +- aot-runtime/build.gradle.kts | 8 +- autolaunch/build.gradle.kts | 8 +- core-runtime/build.gradle.kts | 8 +- darkmode-detector/build.gradle.kts | 8 +- decorated-window-awt/build.gradle.kts | 8 +- decorated-window-core/build.gradle.kts | 8 +- decorated-window-jbr/build.gradle.kts | 8 +- decorated-window-jewel/build.gradle.kts | 8 +- decorated-window-jni/build.gradle.kts | 8 +- decorated-window-material2/build.gradle.kts | 8 +- decorated-window-material3/build.gradle.kts | 8 +- decorated-window-tao/build.gradle.kts | 8 +- docs/auto-update.md | 8 +- docs/changelog.md | 2 +- docs/ci-cd.md | 38 +++---- docs/comparison/packaging.md | 34 +++--- docs/graalvm/tasks-ci.md | 8 +- docs/index.md | 12 +-- docs/install-linux.sh | 2 +- docs/install.sh | 2 +- docs/llm.md | 2 +- docs/llms-full.txt | 108 ++++++++++---------- docs/llms.txt | 10 +- docs/native-access/index.md | 6 +- docs/native-access/usage.md | 2 +- docs/targets/linux.md | 2 +- energy-manager/build.gradle.kts | 8 +- freedesktop-icons/build.gradle.kts | 8 +- global-hotkey/build.gradle.kts | 8 +- graalvm-runtime/build.gradle.kts | 8 +- jewel-sample/build.gradle.kts | 2 +- launcher-linux/build.gradle.kts | 8 +- launcher-macos/build.gradle.kts | 8 +- launcher-windows/build.gradle.kts | 8 +- linux-hidpi/build.gradle.kts | 8 +- media-control/build.gradle.kts | 8 +- menu-macos/build.gradle.kts | 8 +- mkdocs.yml | 6 +- native-http-ktor/build.gradle.kts | 8 +- native-http-okhttp/build.gradle.kts | 8 +- native-http/build.gradle.kts | 8 +- native-ssl/build.gradle.kts | 8 +- notification-common/build.gradle.kts | 8 +- notification-linux/build.gradle.kts | 8 +- notification-macos/build.gradle.kts | 8 +- notification-windows/build.gradle.kts | 8 +- nucleus-application/build.gradle.kts | 8 +- plugin-build/gradle.properties | 4 +- scheduler-testing/build.gradle.kts | 8 +- scheduler/build.gradle.kts | 8 +- scripts/generate-llms-docs.py | 2 +- service-management-macos/build.gradle.kts | 8 +- sf-symbols/build.gradle.kts | 8 +- system-color/build.gradle.kts | 8 +- system-info-demo/build.gradle.kts | 2 +- system-info/build.gradle.kts | 8 +- taskbar-progress-tao/build.gradle.kts | 8 +- taskbar-progress/build.gradle.kts | 8 +- updater-runtime/build.gradle.kts | 8 +- 60 files changed, 288 insertions(+), 288 deletions(-) mode change 100755 => 100644 docs/install-linux.sh mode change 100755 => 100644 docs/install.sh diff --git a/README.md b/README.md index 2c97c7436..a469ca8db 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) diff --git a/aot-runtime/build.gradle.kts b/aot-runtime/build.gradle.kts index e5fc478d9..959d725ff 100644 --- a/aot-runtime/build.gradle.kts +++ b/aot-runtime/build.gradle.kts @@ -35,7 +35,7 @@ mavenPublishing { pom { name.set("Nucleus AOT Runtime") description.set("AOT runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -53,9 +53,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/autolaunch/build.gradle.kts b/autolaunch/build.gradle.kts index 1c810e49d..6a1a3deb0 100644 --- a/autolaunch/build.gradle.kts +++ b/autolaunch/build.gradle.kts @@ -80,7 +80,7 @@ mavenPublishing { pom { name.set("Nucleus Autolaunch") description.set("Cross-platform auto-launch at user login for JVM desktop applications") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -98,9 +98,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/core-runtime/build.gradle.kts b/core-runtime/build.gradle.kts index c099dd073..acd20e5a3 100644 --- a/core-runtime/build.gradle.kts +++ b/core-runtime/build.gradle.kts @@ -34,7 +34,7 @@ mavenPublishing { pom { name.set("Nucleus Core Runtime") description.set("Core runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -52,9 +52,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/darkmode-detector/build.gradle.kts b/darkmode-detector/build.gradle.kts index d883a104d..9cc1a265a 100644 --- a/darkmode-detector/build.gradle.kts +++ b/darkmode-detector/build.gradle.kts @@ -108,7 +108,7 @@ mavenPublishing { pom { name.set("Nucleus Dark Mode Detector") description.set("Reactive dark mode detection for Compose Desktop across Windows, macOS and Linux") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -126,9 +126,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-awt/build.gradle.kts b/decorated-window-awt/build.gradle.kts index bbe63deea..15608bf8a 100644 --- a/decorated-window-awt/build.gradle.kts +++ b/decorated-window-awt/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { description.set( "AWT/Compose Desktop integration of Nucleus Decorated Window (consumed by JBR and JNI backends)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -57,9 +57,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-core/build.gradle.kts b/decorated-window-core/build.gradle.kts index 3398bccc1..61e12447a 100644 --- a/decorated-window-core/build.gradle.kts +++ b/decorated-window-core/build.gradle.kts @@ -90,7 +90,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window Core") description.set("Shared types, layout, styling, and resources for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -108,9 +108,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jbr/build.gradle.kts b/decorated-window-jbr/build.gradle.kts index a5eabba76..d14e92c3e 100644 --- a/decorated-window-jbr/build.gradle.kts +++ b/decorated-window-jbr/build.gradle.kts @@ -63,7 +63,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JBR") description.set("JBR-based custom decorated window with native title bar for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -81,9 +81,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jewel/build.gradle.kts b/decorated-window-jewel/build.gradle.kts index fba5f8fe7..603c7eb15 100644 --- a/decorated-window-jewel/build.gradle.kts +++ b/decorated-window-jewel/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Jewel Decorated Window") description.set("Jewel (IntelliJ theme) integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-jni/build.gradle.kts b/decorated-window-jni/build.gradle.kts index bcd955383..cbc994b0b 100644 --- a/decorated-window-jni/build.gradle.kts +++ b/decorated-window-jni/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JNI") description.set("JBR-free custom decorated window with native title bar for Compose Desktop (via JNI)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -106,9 +106,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-material2/build.gradle.kts b/decorated-window-material2/build.gradle.kts index 2b1b329fe..c172f7e94 100644 --- a/decorated-window-material2/build.gradle.kts +++ b/decorated-window-material2/build.gradle.kts @@ -42,7 +42,7 @@ mavenPublishing { pom { name.set("Nucleus Material 2 Decorated Window") description.set("Material 2 integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -60,9 +60,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-material3/build.gradle.kts b/decorated-window-material3/build.gradle.kts index fbc26603e..e063b8c1a 100644 --- a/decorated-window-material3/build.gradle.kts +++ b/decorated-window-material3/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Material Decorated Window") description.set("Material 3 integration for Nucleus Decorated Window") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/decorated-window-tao/build.gradle.kts b/decorated-window-tao/build.gradle.kts index 0f39020cb..675485dc7 100644 --- a/decorated-window-tao/build.gradle.kts +++ b/decorated-window-tao/build.gradle.kts @@ -105,7 +105,7 @@ mavenPublishing { "Experimental no-AWT decorated window backend for Compose Desktop, " + "powered by Tao via direct JNI for macOS, Windows, and Linux.", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -123,9 +123,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/docs/auto-update.md b/docs/auto-update.md index 38f257fb5..3474d6ebe 100644 --- a/docs/auto-update.md +++ b/docs/auto-update.md @@ -23,7 +23,7 @@ flowchart LR ``` !!! tip "Try it yourself" - Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. + Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats @@ -62,7 +62,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -96,7 +96,7 @@ releaseDate: '2026-03-01T12:00:00.000Z' ``` !!! tip - In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. + In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples @@ -174,7 +174,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts diff --git a/docs/changelog.md b/docs/changelog.md index 9ee3be800..a3342fc36 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -525,7 +525,7 @@ nativeDistributions { ### Bug Fixes -- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/kdroidFilter/Nucleus/issues/53)) +- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/nucleusframework/Nucleus/issues/53)) - Promote `core-runtime` to `api` scope in `updater-runtime` and `system-color` so consumers no longer need to declare it separately. - Include generic provider in publish mode detection. - Skip Flatpak packaging gracefully when `flatpak` CLI is missing. diff --git a/docs/ci-cd.md b/docs/ci-cd.md index 32d95d428..d393fc8c0 100644 --- a/docs/ci-cd.md +++ b/docs/ci-cd.md @@ -7,7 +7,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -42,7 +42,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -79,7 +79,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -172,7 +172,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -225,7 +225,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -271,7 +271,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main + uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -299,7 +299,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main + uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -375,7 +375,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main + uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -432,14 +432,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main + uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: kdroidFilter/Nucleus/.github/actions/publish-release@main + uses: nucleusframework/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -467,16 +467,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -528,7 +528,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -574,5 +574,5 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually diff --git a/docs/comparison/packaging.md b/docs/comparison/packaging.md index 7b1a8d761..16d2d6b0b 100644 --- a/docs/comparison/packaging.md +++ b/docs/comparison/packaging.md @@ -75,7 +75,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -111,7 +111,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -135,7 +135,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -159,7 +159,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -181,7 +181,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -232,7 +232,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -259,7 +259,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -277,7 +277,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -301,7 +301,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -321,14 +321,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files diff --git a/docs/graalvm/tasks-ci.md b/docs/graalvm/tasks-ci.md index 69c4d5e7c..d45b07c61 100644 --- a/docs/graalvm/tasks-ci.md +++ b/docs/graalvm/tasks-ci.md @@ -103,7 +103,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -163,12 +163,12 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies diff --git a/docs/index.md b/docs/index.md index 636dd6d13..f3d50d558 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) @@ -86,7 +86,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). === "macOS" ```bash @@ -101,7 +101,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. === "Windows" - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -113,7 +113,7 @@ What you'll see: !!! tip "Test auto-update" Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -125,4 +125,4 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). diff --git a/docs/install-linux.sh b/docs/install-linux.sh old mode 100755 new mode 100644 index f4ffb58af..c4d4fd9b0 --- a/docs/install-linux.sh +++ b/docs/install-linux.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="kdroidFilter/Nucleus" +repo="nucleusframework/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/install.sh b/docs/install.sh old mode 100755 new mode 100644 index eccab79a8..1d7f27cad --- a/docs/install.sh +++ b/docs/install.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="kdroidFilter/Nucleus" +repo="nucleusframework/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/llm.md b/docs/llm.md index be1f4c6c5..e513bcd47 100644 --- a/docs/llm.md +++ b/docs/llm.md @@ -11,7 +11,7 @@ Nucleus provides machine-readable documentation files designed for Large Languag ## How They Stay Up to Date -Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/kdroidFilter/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. +Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/nucleusframework/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. !!! tip "Contributing" Never edit `llms.txt` or `llms-full.txt` manually — edit the source `.md` files in `docs/` and the script regenerates them automatically. diff --git a/docs/llms-full.txt b/docs/llms-full.txt index bc8a47c7d..6344683e7 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/kdroidFilter/Nucleus +- GitHub: https://github.com/nucleusframework/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). --- @@ -1576,7 +1576,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` @@ -2225,7 +2225,7 @@ Nucleus provides a complete auto-update solution compatible with the [electron-b ## How It Works -**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. +**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats | Platform | Updatable Formats | Not updatable (Store-managed) | @@ -2261,7 +2261,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -2294,7 +2294,7 @@ sha512: releaseDate: '2026-03-01T12:00:00.000Z' ``` -**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. +**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples Three YAML files are generated per release: @@ -2371,7 +2371,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts @@ -3677,7 +3677,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -3737,15 +3737,15 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies --- @@ -3770,14 +3770,14 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup -**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). +**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: ```kotlin // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess } kotlin { @@ -3873,7 +3873,7 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. @@ -4031,7 +4031,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. -**Full working example:** The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. +**Full working example:** The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: ### macOS @@ -4133,7 +4133,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -4149,7 +4149,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4186,7 +4186,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4279,7 +4279,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4332,7 +4332,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -4378,7 +4378,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main + uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -4406,7 +4406,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main + uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -4482,7 +4482,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main + uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -4539,14 +4539,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main + uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: kdroidFilter/Nucleus/.github/actions/publish-release@main + uses: nucleusframework/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -4574,16 +4574,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -4635,7 +4635,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main + uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4681,7 +4681,7 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually --- @@ -13994,7 +13994,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -14030,7 +14030,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -14054,7 +14054,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -14078,7 +14078,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -14100,7 +14100,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -14151,7 +14151,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -14178,7 +14178,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -14196,7 +14196,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -14218,7 +14218,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -14238,14 +14238,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files diff --git a/docs/llms.txt b/docs/llms.txt index 9b5ea50fa..7123f90be 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/kdroidFilter/Nucleus +- GitHub: https://github.com/nucleusframework/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/k Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). + Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucl ## License -MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). --- diff --git a/docs/native-access/index.md b/docs/native-access/index.md index 67ccf0a98..780e39bd3 100644 --- a/docs/native-access/index.md +++ b/docs/native-access/index.md @@ -30,7 +30,7 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup !!! note "Separate versioning" - Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). + Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: @@ -38,7 +38,7 @@ Add the plugin to your Kotlin Multiplatform module: // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess } kotlin { @@ -136,7 +136,7 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. diff --git a/docs/native-access/usage.md b/docs/native-access/usage.md index 611f329a4..2aa562677 100644 --- a/docs/native-access/usage.md +++ b/docs/native-access/usage.md @@ -98,7 +98,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. !!! tip "Full working example" - The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. + The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: diff --git a/docs/targets/linux.md b/docs/targets/linux.md index 39c3f2f76..513788df9 100644 --- a/docs/targets/linux.md +++ b/docs/targets/linux.md @@ -229,7 +229,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main +- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` diff --git a/energy-manager/build.gradle.kts b/energy-manager/build.gradle.kts index 2dbff90b0..004519498 100644 --- a/energy-manager/build.gradle.kts +++ b/energy-manager/build.gradle.kts @@ -102,7 +102,7 @@ mavenPublishing { pom { name.set("Nucleus Energy Manager") description.set("Process-level energy efficiency mode (EcoQoS/PRIO_DARWIN_BG) for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -120,9 +120,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/freedesktop-icons/build.gradle.kts b/freedesktop-icons/build.gradle.kts index e8df234d8..3ae83d303 100644 --- a/freedesktop-icons/build.gradle.kts +++ b/freedesktop-icons/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus Freedesktop Icons") description.set("Type-safe freedesktop icon naming specification constants for JVM desktop applications") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -47,9 +47,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/global-hotkey/build.gradle.kts b/global-hotkey/build.gradle.kts index 1c7fc3966..a864e01cc 100644 --- a/global-hotkey/build.gradle.kts +++ b/global-hotkey/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { description.set( "Cross-platform global hotkey (system-wide keyboard shortcuts) for JVM desktop applications via JNI", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -106,9 +106,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/graalvm-runtime/build.gradle.kts b/graalvm-runtime/build.gradle.kts index f5e81f9fa..d7d554c8a 100644 --- a/graalvm-runtime/build.gradle.kts +++ b/graalvm-runtime/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { pom { name.set("Nucleus GraalVM Runtime") description.set("GraalVM native-image runtime initialization and font manager substitutions") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -57,9 +57,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/jewel-sample/build.gradle.kts b/jewel-sample/build.gradle.kts index b35ad41a7..e465a10dc 100644 --- a/jewel-sample/build.gradle.kts +++ b/jewel-sample/build.gradle.kts @@ -132,7 +132,7 @@ nucleus.application { packageName = "JewelSample" packageVersion = "1.0.0" - homepage = "https://github.com/kdroidFilter/Nucleus" + homepage = "https://github.com/nucleusframework/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/launcher-linux/build.gradle.kts b/launcher-linux/build.gradle.kts index b4466eb36..7188d6a46 100644 --- a/launcher-linux/build.gradle.kts +++ b/launcher-linux/build.gradle.kts @@ -65,7 +65,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Linux") description.set("Unity Launcher API (com.canonical.Unity.LauncherEntry) for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -83,9 +83,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/launcher-macos/build.gradle.kts b/launcher-macos/build.gradle.kts index 8049516fc..f090d10e9 100644 --- a/launcher-macos/build.gradle.kts +++ b/launcher-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher macOS") description.set("macOS dock context menu for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -82,9 +82,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/launcher-windows/build.gradle.kts b/launcher-windows/build.gradle.kts index 717cda989..99840d50a 100644 --- a/launcher-windows/build.gradle.kts +++ b/launcher-windows/build.gradle.kts @@ -59,7 +59,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Windows") description.set("Windows Launcher API (Badge Notifications) for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -77,9 +77,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/linux-hidpi/build.gradle.kts b/linux-hidpi/build.gradle.kts index 12dcc2248..746a16e9c 100644 --- a/linux-hidpi/build.gradle.kts +++ b/linux-hidpi/build.gradle.kts @@ -66,7 +66,7 @@ mavenPublishing { description.set( "Native HiDPI scale factor detection for Compose Desktop on Linux (GSettings, GDK_SCALE, Xft.dpi)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -84,9 +84,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/media-control/build.gradle.kts b/media-control/build.gradle.kts index 17142d402..27b86ea0a 100644 --- a/media-control/build.gradle.kts +++ b/media-control/build.gradle.kts @@ -110,7 +110,7 @@ mavenPublishing { "OS-level media controls (play/pause, metadata, seek) via MPRIS (Linux), " + "MPNowPlayingInfoCenter (macOS), and SMTC (Windows)", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -128,9 +128,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/menu-macos/build.gradle.kts b/menu-macos/build.gradle.kts index 92ec60700..3804b11c9 100644 --- a/menu-macos/build.gradle.kts +++ b/menu-macos/build.gradle.kts @@ -70,7 +70,7 @@ mavenPublishing { description.set( "Complete NSMenu / NSMenuItem / NSMenuItemBadge / NSMenuDelegate mapping for JVM desktop applications via JNI", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -88,9 +88,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/mkdocs.yml b/mkdocs.yml index 70adcb1f7..88ed02874 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,8 +1,8 @@ site_name: Nucleus site_description: The Kotlin framework for native desktop apps — deep OS integration (notifications, tray, launcher, decorated windows, scheduler, media control) plus packaging on macOS, Windows, and Linux site_url: https://nucleusframework.dev -repo_url: https://github.com/kdroidFilter/Nucleus -repo_name: kdroidFilter/Nucleus +repo_url: https://github.com/nucleusframework/Nucleus +repo_name: nucleusframework/Nucleus edit_uri: edit/main/docs/ theme: @@ -161,4 +161,4 @@ copyright: Made with ❤️ by str: Compatible with any JVM application, optimized for Compose Desktop. - Docs: {site_url} -- GitHub: https://github.com/kdroidFilter/Nucleus +- GitHub: https://github.com/nucleusframework/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT diff --git a/service-management-macos/build.gradle.kts b/service-management-macos/build.gradle.kts index 8e20e672e..ba2d889c5 100644 --- a/service-management-macos/build.gradle.kts +++ b/service-management-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Service Management macOS") description.set("macOS SMAppService API for JVM desktop applications via JNI") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -82,9 +82,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/sf-symbols/build.gradle.kts b/sf-symbols/build.gradle.kts index a2784bb35..338fe2481 100644 --- a/sf-symbols/build.gradle.kts +++ b/sf-symbols/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus SF Symbols") description.set("Type-safe Apple SF Symbols constants for JVM desktop applications (macOS 11+)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -47,9 +47,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/system-color/build.gradle.kts b/system-color/build.gradle.kts index c0217d31a..e5fc06903 100644 --- a/system-color/build.gradle.kts +++ b/system-color/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { pom { name.set("Nucleus System Color") description.set("Reactive system accent color and contrast mode detection for Compose Desktop") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -121,9 +121,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/system-info-demo/build.gradle.kts b/system-info-demo/build.gradle.kts index 8e1181684..b8d64c9ac 100644 --- a/system-info-demo/build.gradle.kts +++ b/system-info-demo/build.gradle.kts @@ -82,7 +82,7 @@ nucleus.application { packageName = "SystemInfo" packageVersion = "1.0.0" - homepage = "https://github.com/kdroidFilter/Nucleus" + homepage = "https://github.com/nucleusframework/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/system-info/build.gradle.kts b/system-info/build.gradle.kts index f0f193fd1..bb3646668 100644 --- a/system-info/build.gradle.kts +++ b/system-info/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { description.set( "Cross-platform system information (CPU, memory, disks, network, processes, hardware) for JVM desktop applications", ) - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -121,9 +121,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/taskbar-progress-tao/build.gradle.kts b/taskbar-progress-tao/build.gradle.kts index 9da7e897e..d588fe50d 100644 --- a/taskbar-progress-tao/build.gradle.kts +++ b/taskbar-progress-tao/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress (Tao)") description.set("Tao-backend bridge for Nucleus Taskbar Progress: composable helpers reading LocalTaoWindow.") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/taskbar-progress/build.gradle.kts b/taskbar-progress/build.gradle.kts index cfa158e55..f7e8bf413 100644 --- a/taskbar-progress/build.gradle.kts +++ b/taskbar-progress/build.gradle.kts @@ -84,7 +84,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress") description.set("Cross-platform taskbar/dock progress indicator for Compose Desktop (Windows + macOS + Linux)") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -102,9 +102,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } diff --git a/updater-runtime/build.gradle.kts b/updater-runtime/build.gradle.kts index 06be6eb33..5edf8230d 100644 --- a/updater-runtime/build.gradle.kts +++ b/updater-runtime/build.gradle.kts @@ -36,7 +36,7 @@ mavenPublishing { pom { name.set("Nucleus Updater Runtime") description.set("Updater runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/kdroidFilter/Nucleus") + url.set("https://github.com/nucleusframework/Nucleus") licenses { license { @@ -54,9 +54,9 @@ mavenPublishing { } scm { - url.set("https://github.com/kdroidFilter/Nucleus") - connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") + url.set("https://github.com/nucleusframework/Nucleus") + connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") } } From e14d54103d6ed921fba87ba6e15f51c8d037c8ef Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 17:53:26 +0300 Subject: [PATCH 11/30] Revert "chore: update GitHub organization URLs to nucleusframework" This reverts commit 97dc2798dac53075c2f45b3f051a98078a7102c6. --- README.md | 4 +- aot-runtime/build.gradle.kts | 8 +- autolaunch/build.gradle.kts | 8 +- core-runtime/build.gradle.kts | 8 +- darkmode-detector/build.gradle.kts | 8 +- decorated-window-awt/build.gradle.kts | 8 +- decorated-window-core/build.gradle.kts | 8 +- decorated-window-jbr/build.gradle.kts | 8 +- decorated-window-jewel/build.gradle.kts | 8 +- decorated-window-jni/build.gradle.kts | 8 +- decorated-window-material2/build.gradle.kts | 8 +- decorated-window-material3/build.gradle.kts | 8 +- decorated-window-tao/build.gradle.kts | 8 +- docs/auto-update.md | 8 +- docs/changelog.md | 2 +- docs/ci-cd.md | 38 +++---- docs/comparison/packaging.md | 34 +++--- docs/graalvm/tasks-ci.md | 8 +- docs/index.md | 12 +-- docs/install-linux.sh | 2 +- docs/install.sh | 2 +- docs/llm.md | 2 +- docs/llms-full.txt | 108 ++++++++++---------- docs/llms.txt | 10 +- docs/native-access/index.md | 6 +- docs/native-access/usage.md | 2 +- docs/targets/linux.md | 2 +- energy-manager/build.gradle.kts | 8 +- freedesktop-icons/build.gradle.kts | 8 +- global-hotkey/build.gradle.kts | 8 +- graalvm-runtime/build.gradle.kts | 8 +- jewel-sample/build.gradle.kts | 2 +- launcher-linux/build.gradle.kts | 8 +- launcher-macos/build.gradle.kts | 8 +- launcher-windows/build.gradle.kts | 8 +- linux-hidpi/build.gradle.kts | 8 +- media-control/build.gradle.kts | 8 +- menu-macos/build.gradle.kts | 8 +- mkdocs.yml | 6 +- native-http-ktor/build.gradle.kts | 8 +- native-http-okhttp/build.gradle.kts | 8 +- native-http/build.gradle.kts | 8 +- native-ssl/build.gradle.kts | 8 +- notification-common/build.gradle.kts | 8 +- notification-linux/build.gradle.kts | 8 +- notification-macos/build.gradle.kts | 8 +- notification-windows/build.gradle.kts | 8 +- nucleus-application/build.gradle.kts | 8 +- plugin-build/gradle.properties | 4 +- scheduler-testing/build.gradle.kts | 8 +- scheduler/build.gradle.kts | 8 +- scripts/generate-llms-docs.py | 2 +- service-management-macos/build.gradle.kts | 8 +- sf-symbols/build.gradle.kts | 8 +- system-color/build.gradle.kts | 8 +- system-info-demo/build.gradle.kts | 2 +- system-info/build.gradle.kts | 8 +- taskbar-progress-tao/build.gradle.kts | 8 +- taskbar-progress/build.gradle.kts | 8 +- updater-runtime/build.gradle.kts | 8 +- 60 files changed, 288 insertions(+), 288 deletions(-) mode change 100644 => 100755 docs/install-linux.sh mode change 100644 => 100755 docs/install.sh diff --git a/README.md b/README.md index a469ca8db..2c97c7436 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) diff --git a/aot-runtime/build.gradle.kts b/aot-runtime/build.gradle.kts index 959d725ff..e5fc478d9 100644 --- a/aot-runtime/build.gradle.kts +++ b/aot-runtime/build.gradle.kts @@ -35,7 +35,7 @@ mavenPublishing { pom { name.set("Nucleus AOT Runtime") description.set("AOT runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -53,9 +53,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/autolaunch/build.gradle.kts b/autolaunch/build.gradle.kts index 6a1a3deb0..1c810e49d 100644 --- a/autolaunch/build.gradle.kts +++ b/autolaunch/build.gradle.kts @@ -80,7 +80,7 @@ mavenPublishing { pom { name.set("Nucleus Autolaunch") description.set("Cross-platform auto-launch at user login for JVM desktop applications") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -98,9 +98,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/core-runtime/build.gradle.kts b/core-runtime/build.gradle.kts index acd20e5a3..c099dd073 100644 --- a/core-runtime/build.gradle.kts +++ b/core-runtime/build.gradle.kts @@ -34,7 +34,7 @@ mavenPublishing { pom { name.set("Nucleus Core Runtime") description.set("Core runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -52,9 +52,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/darkmode-detector/build.gradle.kts b/darkmode-detector/build.gradle.kts index 9cc1a265a..d883a104d 100644 --- a/darkmode-detector/build.gradle.kts +++ b/darkmode-detector/build.gradle.kts @@ -108,7 +108,7 @@ mavenPublishing { pom { name.set("Nucleus Dark Mode Detector") description.set("Reactive dark mode detection for Compose Desktop across Windows, macOS and Linux") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -126,9 +126,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-awt/build.gradle.kts b/decorated-window-awt/build.gradle.kts index 15608bf8a..bbe63deea 100644 --- a/decorated-window-awt/build.gradle.kts +++ b/decorated-window-awt/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { description.set( "AWT/Compose Desktop integration of Nucleus Decorated Window (consumed by JBR and JNI backends)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -57,9 +57,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-core/build.gradle.kts b/decorated-window-core/build.gradle.kts index 61e12447a..3398bccc1 100644 --- a/decorated-window-core/build.gradle.kts +++ b/decorated-window-core/build.gradle.kts @@ -90,7 +90,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window Core") description.set("Shared types, layout, styling, and resources for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -108,9 +108,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jbr/build.gradle.kts b/decorated-window-jbr/build.gradle.kts index d14e92c3e..a5eabba76 100644 --- a/decorated-window-jbr/build.gradle.kts +++ b/decorated-window-jbr/build.gradle.kts @@ -63,7 +63,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JBR") description.set("JBR-based custom decorated window with native title bar for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -81,9 +81,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jewel/build.gradle.kts b/decorated-window-jewel/build.gradle.kts index 603c7eb15..fba5f8fe7 100644 --- a/decorated-window-jewel/build.gradle.kts +++ b/decorated-window-jewel/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Jewel Decorated Window") description.set("Jewel (IntelliJ theme) integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-jni/build.gradle.kts b/decorated-window-jni/build.gradle.kts index cbc994b0b..bcd955383 100644 --- a/decorated-window-jni/build.gradle.kts +++ b/decorated-window-jni/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { pom { name.set("Nucleus Decorated Window JNI") description.set("JBR-free custom decorated window with native title bar for Compose Desktop (via JNI)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -106,9 +106,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-material2/build.gradle.kts b/decorated-window-material2/build.gradle.kts index c172f7e94..2b1b329fe 100644 --- a/decorated-window-material2/build.gradle.kts +++ b/decorated-window-material2/build.gradle.kts @@ -42,7 +42,7 @@ mavenPublishing { pom { name.set("Nucleus Material 2 Decorated Window") description.set("Material 2 integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -60,9 +60,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-material3/build.gradle.kts b/decorated-window-material3/build.gradle.kts index e063b8c1a..fbc26603e 100644 --- a/decorated-window-material3/build.gradle.kts +++ b/decorated-window-material3/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Material Decorated Window") description.set("Material 3 integration for Nucleus Decorated Window") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/decorated-window-tao/build.gradle.kts b/decorated-window-tao/build.gradle.kts index 675485dc7..0f39020cb 100644 --- a/decorated-window-tao/build.gradle.kts +++ b/decorated-window-tao/build.gradle.kts @@ -105,7 +105,7 @@ mavenPublishing { "Experimental no-AWT decorated window backend for Compose Desktop, " + "powered by Tao via direct JNI for macOS, Windows, and Linux.", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -123,9 +123,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/docs/auto-update.md b/docs/auto-update.md index 3474d6ebe..38f257fb5 100644 --- a/docs/auto-update.md +++ b/docs/auto-update.md @@ -23,7 +23,7 @@ flowchart LR ``` !!! tip "Try it yourself" - Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. + Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats @@ -62,7 +62,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -96,7 +96,7 @@ releaseDate: '2026-03-01T12:00:00.000Z' ``` !!! tip - In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. + In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples @@ -174,7 +174,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts diff --git a/docs/changelog.md b/docs/changelog.md index a3342fc36..9ee3be800 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -525,7 +525,7 @@ nativeDistributions { ### Bug Fixes -- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/nucleusframework/Nucleus/issues/53)) +- **Fix title bar drag on Windows (`decorated-window-jbr`)** — Window dragging via the title bar no longer occasionally fails on the first attempt when another window has focus. The new `WindowMouseEventEffect` approach uses AWT mouse listeners for reliable hit-test forwarding to JBR's `CustomTitleBar`, fixing the intermittent missed drag events. ([#53](https://github.com/kdroidFilter/Nucleus/issues/53)) - Promote `core-runtime` to `api` scope in `updater-runtime` and `system-color` so consumers no longer need to declare it separately. - Include generic provider in publish mode detection. - Skip Flatpak packaging gracefully when `flatpak` CLI is missing. diff --git a/docs/ci-cd.md b/docs/ci-cd.md index d393fc8c0..32d95d428 100644 --- a/docs/ci-cd.md +++ b/docs/ci-cd.md @@ -7,7 +7,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -42,7 +42,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -79,7 +79,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -172,7 +172,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -225,7 +225,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -271,7 +271,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main + uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -299,7 +299,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main + uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -375,7 +375,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main + uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -432,14 +432,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main + uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: nucleusframework/Nucleus/.github/actions/publish-release@main + uses: kdroidFilter/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -467,16 +467,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -528,7 +528,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -574,5 +574,5 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually diff --git a/docs/comparison/packaging.md b/docs/comparison/packaging.md index 16d2d6b0b..7b1a8d761 100644 --- a/docs/comparison/packaging.md +++ b/docs/comparison/packaging.md @@ -75,7 +75,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -111,7 +111,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -135,7 +135,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -159,7 +159,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -181,7 +181,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -232,7 +232,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -259,7 +259,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -277,7 +277,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -301,7 +301,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -321,14 +321,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files diff --git a/docs/graalvm/tasks-ci.md b/docs/graalvm/tasks-ci.md index d45b07c61..69c4d5e7c 100644 --- a/docs/graalvm/tasks-ci.md +++ b/docs/graalvm/tasks-ci.md @@ -103,7 +103,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -163,12 +163,12 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies diff --git a/docs/index.md b/docs/index.md index f3d50d558..636dd6d13 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,8 +6,8 @@ [![Gradle Plugin Portal](https://img.shields.io/gradle-plugin-portal/v/dev.nucleusframework.nucleus?label=Gradle%20Plugin%20Portal)](https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus) [![Maven Central](https://img.shields.io/maven-central/v/dev.nucleusframework/nucleus.core-runtime?label=Maven%20Central)](https://central.sonatype.com/search?q=dev.nucleusframework.nucleus) -[![Pre Merge Checks](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/nucleusframework/Nucleus/actions/workflows/pre-merge.yaml) -[![License: MIT](https://img.shields.io/github/license/nucleusframework/Nucleus)](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE) +[![Pre Merge Checks](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml/badge.svg)](https://github.com/kdroidFilter/Nucleus/actions/workflows/pre-merge.yaml) +[![License: MIT](https://img.shields.io/github/license/kdroidFilter/Nucleus)](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE) ![Kotlin](https://img.shields.io/badge/Kotlin-2.0%2B-7F52FF?logo=kotlin&logoColor=white) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) @@ -86,7 +86,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). === "macOS" ```bash @@ -101,7 +101,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. === "Windows" - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -113,7 +113,7 @@ What you'll see: !!! tip "Test auto-update" Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -125,4 +125,4 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). diff --git a/docs/install-linux.sh b/docs/install-linux.sh old mode 100644 new mode 100755 index c4d4fd9b0..f4ffb58af --- a/docs/install-linux.sh +++ b/docs/install-linux.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="nucleusframework/Nucleus" +repo="kdroidFilter/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/install.sh b/docs/install.sh old mode 100644 new mode 100755 index 1d7f27cad..eccab79a8 --- a/docs/install.sh +++ b/docs/install.sh @@ -3,7 +3,7 @@ set -e # ─── Config ─────────────────────────────────────────────────────────── -repo="nucleusframework/Nucleus" +repo="kdroidFilter/Nucleus" app_name="nucleusdemo" # ─── Colors & Symbols ──────────────────────────────────────────────── diff --git a/docs/llm.md b/docs/llm.md index e513bcd47..be1f4c6c5 100644 --- a/docs/llm.md +++ b/docs/llm.md @@ -11,7 +11,7 @@ Nucleus provides machine-readable documentation files designed for Large Languag ## How They Stay Up to Date -Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/nucleusframework/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. +Both files are **auto-generated** from the MkDocs documentation pages by the [`scripts/generate-llms-docs.py`](https://github.com/kdroidFilter/Nucleus/blob/main/scripts/generate-llms-docs.py) script. A GitHub Actions workflow runs this script on every push to `main` that touches `docs/`, so `llms.txt` and `llms-full.txt` are always in sync with the documentation. !!! tip "Contributing" Never edit `llms.txt` or `llms-full.txt` manually — edit the source `.md` files in `docs/` and the script regenerates them automatically. diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 6344683e7..bc8a47c7d 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). --- @@ -1576,7 +1576,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` @@ -2225,7 +2225,7 @@ Nucleus provides a complete auto-update solution compatible with the [electron-b ## How It Works -**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. +**Try it yourself:** Download an **older version** of the Nucleus demo app from the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases), install it, and launch it. The app will automatically detect that a newer version is available, download the update with a progress bar, and offer an "Install & Restart" button. This is the exact same flow your users will experience. ## Updatable Formats | Platform | Updatable Formats | Not updatable (Store-managed) | @@ -2261,7 +2261,7 @@ In the release workflow, each platform builds its installers in parallel and upl 2. Runs the `generate-update-yml` action, which scans every installer file, computes SHA-512 checksums, and produces `latest-mac.yml`, `latest.yml` (Windows), and `latest-linux.yml` 3. Uploads everything (installers + YML files) to the release -See the [example release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. +See the [example release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) for the full setup. ### Building locally @@ -2294,7 +2294,7 @@ sha512: releaseDate: '2026-03-01T12:00:00.000Z' ``` -**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. +**TIP:** In practice, always use CI for multi-platform releases. The [release workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) handles all of this automatically: build in parallel, merge YML files, and publish to GitHub Releases in a single pipeline. ### YML file examples Three YAML files are generated per release: @@ -2371,7 +2371,7 @@ You are responsible for uploading the installers and YML files to your chosen ho ### Option 1: GitHub Releases (recommended) -The simplest approach. Use the [ready-made release CI workflow](https://github.com/nucleusframework/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: +The simplest approach. Use the [ready-made release CI workflow](https://github.com/kdroidFilter/Nucleus/blob/main/.github/workflows/release-desktop.yaml) which handles everything automatically: 1. Builds on all platforms in parallel 2. Generates the `latest-*.yml` files from all platform artifacts @@ -3677,7 +3677,7 @@ jobs: # Download pre-built JNI native libraries here... - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -3737,15 +3737,15 @@ Even though the automatic metadata covers the vast majority of cases, running `r ### Use the Jewel sample as reference -The [`jewel-sample`](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. +The [`jewel-sample`](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) in the Nucleus repository demonstrates a more complex native-image setup with the Jewel UI library. It is an excellent reference for advanced use cases. ## Further Reading - [GraalVM Native Image documentation](https://www.graalvm.org/latest/reference-manual/native-image/) - [BellSoft Liberica NIK](https://bell-sw.com/liberica-native-image-kit/) - [Oracle GraalVM Reachability Metadata Repository](https://github.com/oracle/graalvm-reachability-metadata) -- [Nucleus example app](https://github.com/nucleusframework/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup -- [Nucleus Jewel sample](https://github.com/nucleusframework/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies +- [Nucleus example app](https://github.com/kdroidFilter/Nucleus/tree/main/example) — minimal Compose Desktop + native-image setup +- [Nucleus Jewel sample](https://github.com/kdroidFilter/Nucleus/tree/main/jewel-sample) — advanced setup with reflection-heavy dependencies --- @@ -3770,14 +3770,14 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup -**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). +**Separate versioning:** Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: ```kotlin // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess } kotlin { @@ -3873,7 +3873,7 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. @@ -4031,7 +4031,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. -**Full working example:** The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. +**Full working example:** The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: ### macOS @@ -4133,7 +4133,7 @@ Nucleus provides reusable composite actions and ready-to-use GitHub Actions work All composite actions can be referenced directly from the Nucleus repository — no need to copy them into your project: ```yaml - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main ``` Replace `@main` with a specific tag (e.g. `@v1.0.0`) to pin a stable version. @@ -4149,7 +4149,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t ### Usage ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4186,7 +4186,7 @@ The `setup-nucleus` composite action (`.github/actions/setup-nucleus`) sets up t When `graalvm: 'true'` is set, the action installs **BellSoft Liberica NIK** instead of JBR, plus platform-specific toolchains: ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4279,7 +4279,7 @@ jobs: echo "RELEASE_VERSION=$tag" >> "$GITHUB_ENV" - name: Setup Nucleus - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' packaging-tools: 'true' @@ -4332,7 +4332,7 @@ matrix: jbr-download-url: 'https://example.com/jbr-25-macos-x64-custom.tar.gz' steps: - - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + - uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: jbr-version: '25.0.2b329.66' jbr-download-url: ${{ matrix.jbr-download-url || '' }} @@ -4378,7 +4378,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti - name: Setup macOS signing id: signing if: ${{ secrets.MAC_CERTIFICATES_P12 != '' }} - uses: nucleusframework/Nucleus/.github/actions/setup-macos-signing@main + uses: kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main with: certificate-base64: ${{ secrets.MAC_CERTIFICATES_P12 }} certificate-password: ${{ secrets.MAC_CERTIFICATES_PASSWORD }} @@ -4406,7 +4406,7 @@ Merge arm64 and x64 builds into a universal (fat) binary using `lipo`, then opti path: artifacts/release-assets-macOS-amd64 - name: Build universal binary - uses: nucleusframework/Nucleus/.github/actions/build-macos-universal@main + uses: kdroidFilter/Nucleus/.github/actions/build-macos-universal@main with: arm64-path: artifacts/release-assets-macOS-arm64 x64-path: artifacts/release-assets-macOS-amd64 @@ -4482,7 +4482,7 @@ Combine amd64 and arm64 `.appx` files into a single `.msixbundle`. Nucleus inclu path: artifacts/release-assets-Windows-arm64 - name: Build APPX Bundle - uses: nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main + uses: kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main with: amd64-path: artifacts/release-assets-Windows-amd64 arm64-path: artifacts/release-assets-Windows-arm64 @@ -4539,14 +4539,14 @@ After all builds complete, create a GitHub Release with all artifacts and update fi - name: Generate update YML files - uses: nucleusframework/Nucleus/.github/actions/generate-update-yml@main + uses: kdroidFilter/Nucleus/.github/actions/generate-update-yml@main with: artifacts-path: artifacts version: ${{ env.VERSION }} channel: ${{ env.CHANNEL }} - name: Publish release - uses: nucleusframework/Nucleus/.github/actions/publish-release@main + uses: kdroidFilter/Nucleus/.github/actions/publish-release@main with: artifacts-path: artifacts tag: ${{ env.TAG }} @@ -4574,16 +4574,16 @@ After all builds complete, create a GitHub Release with all artifacts and update ## Composite Actions Reference -Nucleus provides reusable composite actions that you can reference directly in your workflows using `nucleusframework/Nucleus/.github/actions/@main`: +Nucleus provides reusable composite actions that you can reference directly in your workflows using `kdroidFilter/Nucleus/.github/actions/@main`: | Action | Usage | Description | |--------|-------|-------------| -| `setup-nucleus` | `nucleusframework/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | -| `setup-macos-signing` | `nucleusframework/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | -| `build-macos-universal` | `nucleusframework/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | -| `build-windows-appxbundle` | `nucleusframework/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | -| `generate-update-yml` | `nucleusframework/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | -| `publish-release` | `nucleusframework/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | +| `setup-nucleus` | `kdroidFilter/Nucleus/.github/actions/setup-nucleus@main` | Setup JBR 25, packaging tools, Gradle, Node.js | +| `setup-macos-signing` | `kdroidFilter/Nucleus/.github/actions/setup-macos-signing@main` | Create temporary keychain and import signing certificates | +| `build-macos-universal` | `kdroidFilter/Nucleus/.github/actions/build-macos-universal@main` | Merge arm64 + x64 into universal binary via `lipo`, sign, and package | +| `build-windows-appxbundle` | `kdroidFilter/Nucleus/.github/actions/build-windows-appxbundle@main` | Combine amd64 + arm64 `.appx` into `.msixbundle` | +| `generate-update-yml` | `kdroidFilter/Nucleus/.github/actions/generate-update-yml@main` | Generate `latest-*.yml` / `beta-*.yml` / `alpha-*.yml` metadata | +| `publish-release` | `kdroidFilter/Nucleus/.github/actions/publish-release@main` | Create GitHub Release with all artifacts | ## GraalVM Native Image Release @@ -4635,7 +4635,7 @@ jobs: # (darkmode-detector, native-ssl, decorated-window-jni, etc.) - name: Setup Nucleus (GraalVM) - uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main + uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: graalvm: 'true' setup-gradle: 'true' @@ -4681,7 +4681,7 @@ These tasks first compile the native image via `packageGraalvmNative`, then pack - **fail-fast: false**: Continue building other platforms if one fails - **Timeout**: Set generous timeouts (120min) for Flatpak/Snap builds - **Caching**: `setup-nucleus` enables Gradle caching automatically via `gradle/actions/setup-gradle@v4` -- **No checkout needed**: When using actions from `nucleusframework/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository +- **No checkout needed**: When using actions from `kdroidFilter/Nucleus`, GitHub fetches them automatically — no need to checkout the Nucleus repository - **workflow_dispatch**: Add it as a trigger to allow re-running a release manually --- @@ -13994,7 +13994,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ² Conveyor has `app.linux.aarch64` config keys ([docs](https://conveyor.hydraulic.dev/21.1/configs/linux/)), but Linux ARM64 is listed as planned in the FAQ ([FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/)). ??? info "Sources" - - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` + - **Nucleus**: macOS universal binary via [`build-macos-universal`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions/build-macos-universal) CI action using `lipo` - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [macOS config](https://conveyor.hydraulic.dev/21.1/configs/mac/), [Linux config](https://conveyor.hydraulic.dev/21.1/configs/linux/) - **install4j**: [Features page](https://www.ej-technologies.com/install4j/features) — "compile installers for all platforms on any of these platforms" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — must build on target OS @@ -14030,7 +14030,7 @@ Scoring: each of 13 dimensions rated 0–10, total = raw sum / 130 × 100. See [ ³ jDeploy DMG requires a separate GitHub Action + macOS runner ([jdeploy-action-dmg](https://github.com/shannah/jdeploy-action-dmg)). ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — 17 enum values (16 distributable + `RawAppImage` intermediate) - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/), [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — MSIX, EXE, ZIP (Windows); signed .app in ZIP (macOS); DEB, tar.gz (Linux). No DMG, PKG, RPM, NSIS, AppImage, Snap, Flatpak. - **install4j**: [Media files](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/mediaFiles.html) — EXE, MSI wrapper, DMG, .app, RPM, DEB, tar.gz, shell installer. No PKG, NSIS, AppX. - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--type`: app-image, dmg, pkg, exe, msi, deb, rpm @@ -14054,7 +14054,7 @@ Nucleus leads by leveraging electron-builder as its packaging backend: jpackage | Compose MP | ❌ | — | — | — | — | **0** | ??? info "Sources" - - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/nucleusframework/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) + - **Nucleus**: [`NucleusUpdater.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/updater-runtime/src/main/kotlin/dev/nucleusframework/nucleus/updater/NucleusUpdater.kt) — `GitHubProvider` and `GenericProvider`; SHA-512 verification; 9 self-updatable format types (EXE, NSIS, MSI, DMG, ZIP, AppImage, DEB, RPM, NsisWeb) - **Conveyor**: [Update modes](https://conveyor.hydraulic.dev/21.1/configs/update-modes/) — Sparkle 2 on macOS (delta patches for 5 previous versions), MSIX native on Windows (64 KB chunk delta), apt on Linux. [Understanding updates](https://conveyor.hydraulic.dev/21.1/understanding-updates/) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — built-in auto-update with configurable strategies - **jDeploy**: [Substack](https://jdeploy.substack.com/p/automated-deployment-and-updates) — auto-detects new versions on launch @@ -14078,7 +14078,7 @@ Conveyor's delta update system is a genuine differentiator: a single-line change ¹ jDeploy pre-signs and notarizes installers using its own certificate; optional custom signing via GitHub Action ([FAQ](https://www.jdeploy.com/docs/faq/)). ??? info "Sources" - - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` + - **Nucleus**: [`MacOSSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/MacOSSigningSettings.kt), [`WindowsSigningSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/WindowsSigningSettings.kt) — Azure Trusted Signing via `azureTenantId`, `azureEndpoint`, `azureCertificateProfileName` - **Conveyor**: [Keys and certificates](https://conveyor.hydraulic.dev/21.1/configs/keys-and-certificates/) — macOS notarization (App Store Connect API keys), Windows self-signing, Azure Trusted Signing, Azure Key Vault, AWS KMS, SSL.com eSigner, DigiCert ONE, Google Cloud KMS, HSMs (SafeNet, YubiKey) - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — cross-platform signing and notarization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-sign`, `--mac-signing-key-user-name`, `--mac-app-store` @@ -14100,7 +14100,7 @@ Conveyor has the broadest signing provider support (6 cloud HSM services). Nucle | Compose MP | ❌ | ❌ | ❌ | ❌ | ❌ | **1** | ??? info "Sources" - - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/nucleusframework/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. + - **Nucleus**: 6 composite actions in [`.github/actions/`](https://github.com/kdroidFilter/Nucleus/tree/main/.github/actions) — `setup-nucleus` (JBR or GraalVM Liberica NIK + tools), `setup-macos-signing` (keychain + P12), `build-macos-universal` (lipo merge + re-sign), `build-windows-appxbundle` (MakeAppx + SignTool), `generate-update-yml` (SHA-512 metadata), `publish-release` (gh release create). Since v1.3.0, `setup-nucleus` supports a `graalvm` option to install BellSoft Liberica NIK instead of JBR, enabling GraalVM Native Image builds in CI. - **Conveyor**: [CI tutorial](https://conveyor.hydraulic.dev/21.1/tutorial/hare/ci/) — example workflows for GitHub Actions (build, deploy-to-gh, deploy-to-ssh). Conveyor runs on a single machine since it cross-compiles. - **install4j**: [What's new](https://www.ej-technologies.com/install4j/whatsnew12) — CLI mode for CI, no pre-built actions - **jDeploy**: [GitHub](https://github.com/shannah/jdeploy) — `jdeploy-action` for automated builds on tag push @@ -14151,7 +14151,7 @@ Nucleus is Gradle-only, which suits its Compose Desktop audience but limits adop ⁵ badass-jlink exposes no cert DSL, but its task hook (`tasks.named("jlink").doLast { … }`) gives access to the staged runtime image before jpackage consumes it — the cleanest manual workaround available. ??? info "Sources" - - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. + - **Nucleus**: [`AbstractGenerateAotCacheTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt) — Project Leyden via `-XX:AOTCacheOutput` (JDK 25+); [`ProguardSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/ProguardSettings.kt) — ProGuard 7.7.0 default; [`AbstractJLinkTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJLinkTask.kt) — jlink with strip-debug, compression; [`AbstractPatchCaCertificatesTask.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractPatchCaCertificatesTask.kt) — copies JLink runtime, runs keytool to import PEM/DER certificates into `lib/security/cacerts`; [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — GraalVM Native Image bootstrap with `GraalVmInitializer.initialize()`, platform-specific reachability metadata, font substitution, and Skiko native library extraction. Requires BellSoft Liberica NIK 25 (full). Packaging via `packageGraalvmDmg`, `packageGraalvmNsis`, `packageGraalvmDeb` tasks. - **Conveyor**: [JVM config](https://conveyor.hydraulic.dev/21.1/configs/jvm/) — automatic jlink; `app.jvm.additional-ca-certs` key imports extra certificates into the bundled JDK's `cacerts`; [JDK stdlib](https://conveyor.hydraulic.dev/21.1/stdlib/jdks/) — 6 JDK vendors (Corretto, Zulu, Temurin, JBR, Microsoft, OpenJDK) - **install4j**: [JRE bundles](https://www.ej-technologies.com/resources/install4j/help/doc/concepts/jreBundles.html), [createbundle CLI](https://www.ej-technologies.com/resources/install4j/help/doc/cli/createBundle.html) — no cert patching DSL; manual via pre-patched JRE bundle - **jpackage**: [Override resources](https://docs.oracle.com/en/java/javase/23/jpackage/override-jpackage-resources.html) — `--resource-dir` limited to packaging templates; cert patching requires `--runtime-image` with a pre-patched jlink output @@ -14178,7 +14178,7 @@ Only **Nucleus** and **Conveyor** provide declarative, first-class CA cert patch - **Conveyor**: [Homepage](https://conveyor.hydraulic.dev/21.1/) — "build packages from any OS, sign and notarize Mac apps from Linux" - **install4j**: [Homepage](https://www.ej-technologies.com/install4j) — "compile installers for all platforms on any of these platforms" - **jDeploy**: [FAQ](https://www.jdeploy.com/docs/faq/) — "build native installers for Mac, Windows, and Linux on any platform" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) line 48 — `isCompatibleWithCurrentOS` check; packaging tasks disabled for non-matching OS This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-runner CI matrix — the pipeline handles cross-platform builds automatically. @@ -14196,7 +14196,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | JavaPackager | ✅ (Inno Setup) | ✅ | ✅ | ❌ | ❌ | **4** | ??? info "Sources" - - **Nucleus**: [`NsisSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` + - **Nucleus**: [`NsisSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/NsisSettings.kt) — 16 properties: `oneClick`, `allowElevation`, `perMachine`, `allowToChangeInstallationDirectory`, `createDesktopShortcut`, `createStartMenuShortcut`, `runAfterFinish`, `installerIcon`, `license`, `includeScript`, `multiLanguageInstaller`, `installerHeader`, `installerSidebar`, etc. [`DmgSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/DmgSettings.kt) — `background`, `backgroundColor`, `badgeIcon`, `icon`, `format` (6 DMG formats: UDRW, UDRO, UDCO, UDZO, UDBZ, ULFO), `window`, `contents` - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — visual IDE with 80+ configurable actions - **Conveyor**: [Package formats](https://conveyor.hydraulic.dev/21.1/package-formats/) — MSIX is a fixed format with no installer UI customization - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--resource-dir` for template overrides @@ -14218,7 +14218,7 @@ This is Nucleus's weakest dimension. However, Nucleus mitigates it with its 6-ru | Compose MP | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus**: [`TargetFormat.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/nucleusframework/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` + - **Nucleus**: [`TargetFormat.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/TargetFormat.kt) — `isStoreFormat` = Pkg, AppX, Flatpak; [`PlatformSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/PlatformSettings.kt) — `appStore`, `entitlementsFile`, `provisioningProfile` for MAS; [`AppXSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/AppXSettings.kt) — `identityName`, `publisher`, `capabilities`; [`FlatpakSettings.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/dsl/FlatpakSettings.kt) — `runtime`, `finishArgs`, `license` - **Conveyor**: [Windows config](https://conveyor.hydraulic.dev/21.1/configs/windows/) — Microsoft Store supported via `conveyor make ms-store-release`; [Output formats FAQ](https://conveyor.hydraulic.dev/21.1/faq/output-formats/) — Mac App Store listed as "not supported yet" - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--mac-app-store` flag exists but limited @@ -14238,14 +14238,14 @@ For JVM apps, Nucleus is unique in handling the Mac App Store sandbox automatica | All others | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | **0** | ??? info "Sources" - - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/nucleusframework/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. - - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/nucleusframework/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. - - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/nucleusframework/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. - - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/nucleusframework/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. - - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication - - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing - - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/nucleusframework/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) - - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/nucleusframework/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). + - **Nucleus dark mode**: [`IsSystemInDarkMode.kt`](https://github.com/kdroidFilter/Nucleus/tree/main/darkmode-detector/src/main/kotlin/dev/nucleusframework/nucleus/darkmodedetector/) — JNI (not JNA) with native libraries per platform: macOS via `NSDistributedNotificationCenter`, Windows via registry `AppsUseLightTheme` + `RegNotifyChangeKeyValue`, Linux via D-Bus `org.freedesktop.portal.Settings`. Real-time reactive Compose state. + - **Nucleus decorated windows**: Split into three modules since v1.3.0 — `decorated-window-core` (shared types/layout), [`decorated-window-jbr`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jbr) (JBR CustomTitleBar API on macOS/Windows), [`decorated-window-jni`](https://github.com/kdroidFilter/Nucleus/tree/main/decorated-window-jni) (JNI-based, works with any JVM including GraalVM Native Image). Custom undecorated window with GNOME (24px arcs) and KDE (10px) native controls on Linux. Jewel variant in `decorated-window-jewel`, Material 2 in `decorated-window-material2`, Material 3 in `decorated-window-material3`. + - **Nucleus Linux HiDPI**: [`linux-hidpi`](https://github.com/kdroidFilter/Nucleus/tree/main/linux-hidpi) — native GDK_SCALE detection for proper HiDPI scaling on Linux, required for native image builds. + - **Nucleus GraalVM runtime**: [`graalvm-runtime`](https://github.com/kdroidFilter/Nucleus/tree/main/graalvm-runtime) — centralizes native-image bootstrap (`GraalVmInitializer.initialize()`), font substitution, Skiko library extraction, and platform-specific reachability metadata. + - **Nucleus single instance**: [`SingleInstanceManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/SingleInstanceManager.kt) — `FileChannel.tryLock()` + `WatchService` for inter-process communication + - **Nucleus deep links**: [`DeepLinkHandler.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/DeepLinkHandler.kt) — macOS via `Desktop.setOpenURIHandler` (Apple Events); Windows/Linux via CLI argument parsing + - **Nucleus executable type**: [`ExecutableRuntime.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/core-runtime/src/main/kotlin/dev/nucleusframework/nucleus/core/runtime/ExecutableRuntime.kt) — 17 `ExecutableType` enum values (EXE, MSI, NSIS, NSIS_WEB, PORTABLE, APPX, DMG, PKG, DEB, RPM, SNAP, FLATPAK, APPIMAGE, ZIP, TAR, SEVEN_Z, DEV) + - **Nucleus native-ssl**: [`NativeTrustManager.kt`](https://github.com/kdroidFilter/Nucleus/blob/main/native-ssl/src/main/kotlin/dev/nucleusframework/nucleus/nativessl/NativeTrustManager.kt) — JNI-based `X509TrustManager` merging OS certificates with JVM defaults: macOS via Security.framework (`SecTrustCopyAnchorCertificates` + `SecTrustSettingsCopyCertificates`), Windows via Crypt32 (`ROOT`/`CA` stores across 5 locations including Group Policy), Linux via PEM bundles (8 discovery paths). Companion modules: `native-http-okhttp` (OkHttp 4) and `native-http-ktor` (Ktor engine). - **Conveyor**: [OS integration](https://conveyor.hydraulic.dev/21.1/configs/os-integration/) — `app.url-schemes` registers URL handlers, `app.file-associations` registers file types at OS level (generates AppxManifest.xml, Info.plist, .desktop files). No runtime library — app code must handle open requests itself. - **install4j**: [Features](https://www.ej-technologies.com/install4j/features) — single instance lock, file associations - **jpackage**: [Oracle man page](https://docs.oracle.com/en/java/javase/23/docs/specs/man/jpackage.html) — `--file-associations` flag with properties files diff --git a/docs/llms.txt b/docs/llms.txt index 7123f90be..9b5ea50fa 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -3,7 +3,7 @@ > Nucleus is the all-in-one toolkit for shipping JVM desktop applications. It combines a Gradle plugin, runtime libraries, and GitHub Actions to handle performance (AOT), distribution (16 packaging formats), native look & feel (decorated windows, dark mode, system colors), and GraalVM Native Image support. Compatible with any JVM application, optimized for Compose Desktop. - Docs: https://nucleus.nucleusframework.com -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT @@ -83,7 +83,7 @@ nucleus.application { ## Try the demo -A pre-built demo is available on the [GitHub Releases page](https://github.com/nucleusframework/Nucleus/releases). +A pre-built demo is available on the [GitHub Releases page](https://github.com/kdroidFilter/Nucleus/releases). ### macOS ```bash @@ -98,7 +98,7 @@ A pre-built demo is available on the [GitHub Releases page](https://github.com/n Detects your architecture and package manager, downloads and installs the appropriate `.deb` or `.rpm`. ### Windows - Download the installer from the [releases page](https://github.com/nucleusframework/Nucleus/releases). + Download the installer from the [releases page](https://github.com/kdroidFilter/Nucleus/releases). What you'll see: @@ -108,7 +108,7 @@ What you'll see: - **Auto-Update** — Checks for updates on launch, downloads with progress tracking, installs & restarts in one click **Test auto-update:** Download an **older release**, install it, and launch. It will detect the newer version and offer to update — automatically. -The demo source code is in the [`example/`](https://github.com/nucleusframework/Nucleus/tree/main/example) directory. +The demo source code is in the [`example/`](https://github.com/kdroidFilter/Nucleus/tree/main/example) directory. ## Requirements @@ -120,7 +120,7 @@ The demo source code is in the [`example/`](https://github.com/nucleusframework/ ## License -MIT — See [LICENSE](https://github.com/nucleusframework/Nucleus/blob/main/LICENSE). +MIT — See [LICENSE](https://github.com/kdroidFilter/Nucleus/blob/main/LICENSE). --- diff --git a/docs/native-access/index.md b/docs/native-access/index.md index 780e39bd3..67ccf0a98 100644 --- a/docs/native-access/index.md +++ b/docs/native-access/index.md @@ -30,7 +30,7 @@ The generated JVM proxies have **the exact same API** as your native classes — ## Setup !!! note "Separate versioning" - Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/nucleusframework/NucleusNativeAccess). + Nucleus Native Access is versioned independently from Nucleus. Check the latest version on the [NucleusNativeAccess repository](https://github.com/kdroidFilter/NucleusNativeAccess). Add the plugin to your Kotlin Multiplatform module: @@ -38,7 +38,7 @@ Add the plugin to your Kotlin Multiplatform module: // build.gradle.kts plugins { kotlin("multiplatform") - id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/nucleusframework/NucleusNativeAccess + id("io.github.kdroidfilter.nucleusnativeaccess") version "" // see github.com/kdroidFilter/NucleusNativeAccess } kotlin { @@ -136,7 +136,7 @@ No manual configuration needed — the generated metadata is picked up automatic Nucleus Native Access is maintained in a separate repository with its own release cycle: -[**nucleusframework/NucleusNativeAccess**](https://github.com/nucleusframework/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. +[**kdroidFilter/NucleusNativeAccess**](https://github.com/kdroidFilter/NucleusNativeAccess) — plugin source, examples, full documentation, and latest releases. The plugin ID is `io.github.kdroidfilter.nucleusnativeaccess`. diff --git a/docs/native-access/usage.md b/docs/native-access/usage.md index 2aa562677..611f329a4 100644 --- a/docs/native-access/usage.md +++ b/docs/native-access/usage.md @@ -98,7 +98,7 @@ fun ScreenshotViewer() { **No C. No JNI headers. No build scripts. No `System.loadLibrary` call.** The `.dylib` is compiled by the plugin, bundled in the JAR, and extracted automatically at runtime. The `suspend` on the native side maps transparently to a coroutine on the JVM — the UI stays responsive while CoreGraphics does the work. !!! tip "Full working example" - The [systeminfo example](https://github.com/nucleusframework/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. + The [systeminfo example](https://github.com/kdroidFilter/NucleusNativeAccess/tree/main/examples/systeminfo) in the NucleusNativeAccess repo implements this pattern for all three platforms (CoreGraphics on macOS, XDG ScreenCast + PipeWire on Linux, GDI on Windows), plus native notifications, a system tray menu, and real-time memory updates via `Flow`. The same pattern works for any other platform API: diff --git a/docs/targets/linux.md b/docs/targets/linux.md index 513788df9..39c3f2f76 100644 --- a/docs/targets/linux.md +++ b/docs/targets/linux.md @@ -229,7 +229,7 @@ Flatpak requires `flatpak` and `flatpak-builder` with the target runtime and SDK **Using the `setup-nucleus` GitHub Action** (recommended): ```yaml -- uses: nucleusframework/Nucleus/.github/actions/setup-nucleus@main +- uses: kdroidFilter/Nucleus/.github/actions/setup-nucleus@main with: flatpak: 'true' ``` diff --git a/energy-manager/build.gradle.kts b/energy-manager/build.gradle.kts index 004519498..2dbff90b0 100644 --- a/energy-manager/build.gradle.kts +++ b/energy-manager/build.gradle.kts @@ -102,7 +102,7 @@ mavenPublishing { pom { name.set("Nucleus Energy Manager") description.set("Process-level energy efficiency mode (EcoQoS/PRIO_DARWIN_BG) for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -120,9 +120,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/freedesktop-icons/build.gradle.kts b/freedesktop-icons/build.gradle.kts index 3ae83d303..e8df234d8 100644 --- a/freedesktop-icons/build.gradle.kts +++ b/freedesktop-icons/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus Freedesktop Icons") description.set("Type-safe freedesktop icon naming specification constants for JVM desktop applications") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -47,9 +47,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/global-hotkey/build.gradle.kts b/global-hotkey/build.gradle.kts index a864e01cc..1c7fc3966 100644 --- a/global-hotkey/build.gradle.kts +++ b/global-hotkey/build.gradle.kts @@ -88,7 +88,7 @@ mavenPublishing { description.set( "Cross-platform global hotkey (system-wide keyboard shortcuts) for JVM desktop applications via JNI", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -106,9 +106,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/graalvm-runtime/build.gradle.kts b/graalvm-runtime/build.gradle.kts index d7d554c8a..f5e81f9fa 100644 --- a/graalvm-runtime/build.gradle.kts +++ b/graalvm-runtime/build.gradle.kts @@ -39,7 +39,7 @@ mavenPublishing { pom { name.set("Nucleus GraalVM Runtime") description.set("GraalVM native-image runtime initialization and font manager substitutions") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -57,9 +57,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/jewel-sample/build.gradle.kts b/jewel-sample/build.gradle.kts index e465a10dc..b35ad41a7 100644 --- a/jewel-sample/build.gradle.kts +++ b/jewel-sample/build.gradle.kts @@ -132,7 +132,7 @@ nucleus.application { packageName = "JewelSample" packageVersion = "1.0.0" - homepage = "https://github.com/nucleusframework/Nucleus" + homepage = "https://github.com/kdroidFilter/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/launcher-linux/build.gradle.kts b/launcher-linux/build.gradle.kts index 7188d6a46..b4466eb36 100644 --- a/launcher-linux/build.gradle.kts +++ b/launcher-linux/build.gradle.kts @@ -65,7 +65,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Linux") description.set("Unity Launcher API (com.canonical.Unity.LauncherEntry) for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -83,9 +83,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/launcher-macos/build.gradle.kts b/launcher-macos/build.gradle.kts index f090d10e9..8049516fc 100644 --- a/launcher-macos/build.gradle.kts +++ b/launcher-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher macOS") description.set("macOS dock context menu for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -82,9 +82,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/launcher-windows/build.gradle.kts b/launcher-windows/build.gradle.kts index 99840d50a..717cda989 100644 --- a/launcher-windows/build.gradle.kts +++ b/launcher-windows/build.gradle.kts @@ -59,7 +59,7 @@ mavenPublishing { pom { name.set("Nucleus Launcher Windows") description.set("Windows Launcher API (Badge Notifications) for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -77,9 +77,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/linux-hidpi/build.gradle.kts b/linux-hidpi/build.gradle.kts index 746a16e9c..12dcc2248 100644 --- a/linux-hidpi/build.gradle.kts +++ b/linux-hidpi/build.gradle.kts @@ -66,7 +66,7 @@ mavenPublishing { description.set( "Native HiDPI scale factor detection for Compose Desktop on Linux (GSettings, GDK_SCALE, Xft.dpi)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -84,9 +84,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/media-control/build.gradle.kts b/media-control/build.gradle.kts index 27b86ea0a..17142d402 100644 --- a/media-control/build.gradle.kts +++ b/media-control/build.gradle.kts @@ -110,7 +110,7 @@ mavenPublishing { "OS-level media controls (play/pause, metadata, seek) via MPRIS (Linux), " + "MPNowPlayingInfoCenter (macOS), and SMTC (Windows)", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -128,9 +128,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/menu-macos/build.gradle.kts b/menu-macos/build.gradle.kts index 3804b11c9..92ec60700 100644 --- a/menu-macos/build.gradle.kts +++ b/menu-macos/build.gradle.kts @@ -70,7 +70,7 @@ mavenPublishing { description.set( "Complete NSMenu / NSMenuItem / NSMenuItemBadge / NSMenuDelegate mapping for JVM desktop applications via JNI", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -88,9 +88,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/mkdocs.yml b/mkdocs.yml index 88ed02874..70adcb1f7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,8 +1,8 @@ site_name: Nucleus site_description: The Kotlin framework for native desktop apps — deep OS integration (notifications, tray, launcher, decorated windows, scheduler, media control) plus packaging on macOS, Windows, and Linux site_url: https://nucleusframework.dev -repo_url: https://github.com/nucleusframework/Nucleus -repo_name: nucleusframework/Nucleus +repo_url: https://github.com/kdroidFilter/Nucleus +repo_name: kdroidFilter/Nucleus edit_uri: edit/main/docs/ theme: @@ -161,4 +161,4 @@ copyright: Made with ❤️ by str: Compatible with any JVM application, optimized for Compose Desktop. - Docs: {site_url} -- GitHub: https://github.com/nucleusframework/Nucleus +- GitHub: https://github.com/kdroidFilter/Nucleus - Gradle Plugin Portal: https://plugins.gradle.org/plugin/dev.nucleusframework.nucleus - Maven Central: https://central.sonatype.com/search?q=dev.nucleusframework.nucleus - License: MIT diff --git a/service-management-macos/build.gradle.kts b/service-management-macos/build.gradle.kts index ba2d889c5..8e20e672e 100644 --- a/service-management-macos/build.gradle.kts +++ b/service-management-macos/build.gradle.kts @@ -64,7 +64,7 @@ mavenPublishing { pom { name.set("Nucleus Service Management macOS") description.set("macOS SMAppService API for JVM desktop applications via JNI") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -82,9 +82,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/sf-symbols/build.gradle.kts b/sf-symbols/build.gradle.kts index 338fe2481..a2784bb35 100644 --- a/sf-symbols/build.gradle.kts +++ b/sf-symbols/build.gradle.kts @@ -29,7 +29,7 @@ mavenPublishing { pom { name.set("Nucleus SF Symbols") description.set("Type-safe Apple SF Symbols constants for JVM desktop applications (macOS 11+)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -47,9 +47,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/system-color/build.gradle.kts b/system-color/build.gradle.kts index e5fc06903..c0217d31a 100644 --- a/system-color/build.gradle.kts +++ b/system-color/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { pom { name.set("Nucleus System Color") description.set("Reactive system accent color and contrast mode detection for Compose Desktop") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -121,9 +121,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/system-info-demo/build.gradle.kts b/system-info-demo/build.gradle.kts index b8d64c9ac..8e1181684 100644 --- a/system-info-demo/build.gradle.kts +++ b/system-info-demo/build.gradle.kts @@ -82,7 +82,7 @@ nucleus.application { packageName = "SystemInfo" packageVersion = "1.0.0" - homepage = "https://github.com/nucleusframework/Nucleus" + homepage = "https://github.com/kdroidFilter/Nucleus" linux { debMaintainer = "NucleusFramework " diff --git a/system-info/build.gradle.kts b/system-info/build.gradle.kts index bb3646668..f0f193fd1 100644 --- a/system-info/build.gradle.kts +++ b/system-info/build.gradle.kts @@ -103,7 +103,7 @@ mavenPublishing { description.set( "Cross-platform system information (CPU, memory, disks, network, processes, hardware) for JVM desktop applications", ) - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -121,9 +121,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/taskbar-progress-tao/build.gradle.kts b/taskbar-progress-tao/build.gradle.kts index d588fe50d..9da7e897e 100644 --- a/taskbar-progress-tao/build.gradle.kts +++ b/taskbar-progress-tao/build.gradle.kts @@ -43,7 +43,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress (Tao)") description.set("Tao-backend bridge for Nucleus Taskbar Progress: composable helpers reading LocalTaoWindow.") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -61,9 +61,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/taskbar-progress/build.gradle.kts b/taskbar-progress/build.gradle.kts index f7e8bf413..cfa158e55 100644 --- a/taskbar-progress/build.gradle.kts +++ b/taskbar-progress/build.gradle.kts @@ -84,7 +84,7 @@ mavenPublishing { pom { name.set("Nucleus Taskbar Progress") description.set("Cross-platform taskbar/dock progress indicator for Compose Desktop (Windows + macOS + Linux)") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -102,9 +102,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } diff --git a/updater-runtime/build.gradle.kts b/updater-runtime/build.gradle.kts index 5edf8230d..06be6eb33 100644 --- a/updater-runtime/build.gradle.kts +++ b/updater-runtime/build.gradle.kts @@ -36,7 +36,7 @@ mavenPublishing { pom { name.set("Nucleus Updater Runtime") description.set("Updater runtime library for the Nucleus Gradle plugin") - url.set("https://github.com/nucleusframework/Nucleus") + url.set("https://github.com/kdroidFilter/Nucleus") licenses { license { @@ -54,9 +54,9 @@ mavenPublishing { } scm { - url.set("https://github.com/nucleusframework/Nucleus") - connection.set("scm:git:git://github.com/nucleusframework/Nucleus.git") - developerConnection.set("scm:git:ssh://git@github.com/nucleusframework/Nucleus.git") + url.set("https://github.com/kdroidFilter/Nucleus") + connection.set("scm:git:git://github.com/kdroidFilter/Nucleus.git") + developerConnection.set("scm:git:ssh://git@github.com/kdroidFilter/Nucleus.git") } } From 7b487ef8e97491f521f8ddb861753e778f10dec1 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 17:59:28 +0300 Subject: [PATCH 12/30] chore: add decorated-window-tao natives build and download to CI --- .github/workflows/build-natives.yaml | 93 +++++++++++++++++++ .github/workflows/pre-merge.yaml | 37 ++++++++ .github/workflows/test-graalvm.yaml | 7 ++ example/build.gradle.kts | 2 +- .../src/main/kotlin/com/example/demo/Main.kt | 2 +- 5 files changed, 139 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-natives.yaml b/.github/workflows/build-natives.yaml index 457f9d56d..56692423f 100644 --- a/.github/workflows/build-natives.yaml +++ b/.github/workflows/build-natives.yaml @@ -313,6 +313,42 @@ jobs: path: media-control/src/main/resources/nucleus/native/win32-*/ retention-days: 1 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: x86_64-pc-windows-msvc, aarch64-pc-windows-msvc + + - name: Build decorated-window-tao Windows DLLs + shell: cmd + run: call decorated-window-tao\src\main\native\windows\build.bat + + - name: Verify decorated-window-tao Windows natives + shell: bash + run: | + for f in \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_deco.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_gl.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_a11y.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_dnd.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_native_view.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_deco.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_gl.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_a11y.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_dnd.dll \ + decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_native_view.dll; do + if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi + echo "OK: $f ($(wc -c < "$f") bytes)" + done + + - name: Upload decorated-window-tao Windows DLLs + uses: actions/upload-artifact@v4 + with: + name: decorated-window-tao-windows + path: decorated-window-tao/src/main/resources/nucleus/native/win32-*/ + retention-days: 1 + macos: runs-on: macos-latest steps: @@ -629,6 +665,40 @@ jobs: path: media-control/src/main/resources/nucleus/native/darwin-*/ retention-days: 1 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-apple-darwin, x86_64-apple-darwin + + - name: Build decorated-window-tao macOS dylibs + run: bash decorated-window-tao/src/main/native/macos/build.sh + + - name: Verify decorated-window-tao macOS natives + run: | + for f in \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_metal.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_dnd.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_deco.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_popup.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_native_view.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_metal.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_dnd.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_deco.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_popup.dylib \ + decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_native_view.dylib; do + if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi + echo "OK: $f ($(wc -c < "$f") bytes)" + done + + - name: Upload decorated-window-tao macOS dylibs + uses: actions/upload-artifact@v4 + with: + name: decorated-window-tao-macos + path: decorated-window-tao/src/main/resources/nucleus/native/darwin-*/ + retention-days: 1 + linux: runs-on: ${{ matrix.os }} strategy: @@ -859,3 +929,26 @@ jobs: name: media-control-linux-${{ matrix.arch }} path: media-control/src/main/resources/nucleus/native/linux-*/ retention-days: 1 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.arch == 'x64' && 'x86_64-unknown-linux-gnu' || 'aarch64-unknown-linux-gnu' }} + + - name: Build decorated-window-tao Linux shared library + run: bash decorated-window-tao/src/main/native/linux/build.sh + + - name: Verify decorated-window-tao Linux native + run: | + for lib in libnucleus_tao.so libnucleus_tao_egl.so libnucleus_tao_linux_widget.so; do + f="decorated-window-tao/src/main/resources/nucleus/native/linux-${{ matrix.arch }}/$lib" + if [ ! -f "$f" ]; then echo "MISSING: $f" >&2; exit 1; fi + echo "OK: $f ($(wc -c < "$f") bytes)" + done + + - name: Upload decorated-window-tao Linux shared library + uses: actions/upload-artifact@v4 + with: + name: decorated-window-tao-linux-${{ matrix.arch }} + path: decorated-window-tao/src/main/resources/nucleus/native/linux-*/ + retention-days: 1 diff --git a/.github/workflows/pre-merge.yaml b/.github/workflows/pre-merge.yaml index 698c99d2b..c36022840 100644 --- a/.github/workflows/pre-merge.yaml +++ b/.github/workflows/pre-merge.yaml @@ -176,6 +176,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Verify all natives present run: | EXPECTED=( @@ -265,6 +272,36 @@ jobs: "media-control/src/main/resources/nucleus/native/darwin-x64/libnucleus_media_control_macos.dylib" "media-control/src/main/resources/nucleus/native/win32-x64/nucleus_media_control_windows.dll" "media-control/src/main/resources/nucleus/native/win32-aarch64/nucleus_media_control_windows.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_deco.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_gl.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_a11y.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_dnd.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_native_view.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_deco.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_gl.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_a11y.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_dnd.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_native_view.dll" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_metal.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_dnd.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_deco.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_popup.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_native_view.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_metal.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_dnd.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_deco.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_popup.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_native_view.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao_egl.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao_linux_widget.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao_egl.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao_linux_widget.so" ) MISSING=0 for f in "${EXPECTED[@]}"; do diff --git a/.github/workflows/test-graalvm.yaml b/.github/workflows/test-graalvm.yaml index 961a5be8e..8bbc9787a 100644 --- a/.github/workflows/test-graalvm.yaml +++ b/.github/workflows/test-graalvm.yaml @@ -187,6 +187,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Setup Nucleus (GraalVM) uses: ./.github/actions/setup-nucleus with: diff --git a/example/build.gradle.kts b/example/build.gradle.kts index 9fa2ac6b9..f31c3f195 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -157,7 +157,7 @@ nucleus.application { publish { github { enabled = true - owner = "nucleusframework" + owner = "kdroidFilter" repo = "Nucleus" channel = ReleaseChannel.Latest releaseType = ReleaseType.Release diff --git a/example/src/main/kotlin/com/example/demo/Main.kt b/example/src/main/kotlin/com/example/demo/Main.kt index 058cf088a..a06118d19 100644 --- a/example/src/main/kotlin/com/example/demo/Main.kt +++ b/example/src/main/kotlin/com/example/demo/Main.kt @@ -395,7 +395,7 @@ fun NucleusContent() { val updater = remember { NucleusUpdater { - provider = GitHubProvider(owner = "nucleusframework", repo = "Nucleus") + provider = GitHubProvider(owner = "kdroidFilter", repo = "Nucleus") httpClient = NativeHttpClient.create() } } From 51a5c7e6a6a27586cccafd8709d645ca379f768b Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:01:32 +0300 Subject: [PATCH 13/30] chore: revert developer identity to kdroidFilter and fix CI natives --- aot-runtime/build.gradle.kts | 4 ++-- autolaunch/build.gradle.kts | 4 ++-- core-runtime/build.gradle.kts | 4 ++-- darkmode-detector/build.gradle.kts | 4 ++-- decorated-window-awt/build.gradle.kts | 4 ++-- decorated-window-core/build.gradle.kts | 4 ++-- decorated-window-jbr/build.gradle.kts | 4 ++-- decorated-window-jewel/build.gradle.kts | 4 ++-- decorated-window-jni/build.gradle.kts | 4 ++-- decorated-window-material2/build.gradle.kts | 4 ++-- decorated-window-material3/build.gradle.kts | 4 ++-- decorated-window-tao/build.gradle.kts | 4 ++-- energy-manager/build.gradle.kts | 4 ++-- freedesktop-icons/build.gradle.kts | 4 ++-- global-hotkey/build.gradle.kts | 4 ++-- graalvm-runtime/build.gradle.kts | 4 ++-- launcher-linux/build.gradle.kts | 4 ++-- launcher-macos/build.gradle.kts | 4 ++-- launcher-windows/build.gradle.kts | 4 ++-- linux-hidpi/build.gradle.kts | 4 ++-- media-control/build.gradle.kts | 4 ++-- menu-macos/build.gradle.kts | 4 ++-- native-http-ktor/build.gradle.kts | 4 ++-- native-http-okhttp/build.gradle.kts | 4 ++-- native-http/build.gradle.kts | 4 ++-- native-ssl/build.gradle.kts | 4 ++-- notification-common/build.gradle.kts | 4 ++-- notification-linux/build.gradle.kts | 4 ++-- notification-macos/build.gradle.kts | 4 ++-- notification-windows/build.gradle.kts | 4 ++-- nucleus-application/build.gradle.kts | 4 ++-- scheduler-testing/build.gradle.kts | 4 ++-- scheduler/build.gradle.kts | 4 ++-- service-management-macos/build.gradle.kts | 4 ++-- sf-symbols/build.gradle.kts | 4 ++-- system-color/build.gradle.kts | 4 ++-- system-info/build.gradle.kts | 4 ++-- taskbar-progress-tao/build.gradle.kts | 4 ++-- taskbar-progress/build.gradle.kts | 4 ++-- updater-runtime/build.gradle.kts | 4 ++-- 40 files changed, 80 insertions(+), 80 deletions(-) diff --git a/aot-runtime/build.gradle.kts b/aot-runtime/build.gradle.kts index e5fc478d9..a41165ddc 100644 --- a/aot-runtime/build.gradle.kts +++ b/aot-runtime/build.gradle.kts @@ -46,8 +46,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/autolaunch/build.gradle.kts b/autolaunch/build.gradle.kts index 1c810e49d..ee199f9b1 100644 --- a/autolaunch/build.gradle.kts +++ b/autolaunch/build.gradle.kts @@ -91,8 +91,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/core-runtime/build.gradle.kts b/core-runtime/build.gradle.kts index c099dd073..46090234f 100644 --- a/core-runtime/build.gradle.kts +++ b/core-runtime/build.gradle.kts @@ -45,8 +45,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/darkmode-detector/build.gradle.kts b/darkmode-detector/build.gradle.kts index d883a104d..58557efd8 100644 --- a/darkmode-detector/build.gradle.kts +++ b/darkmode-detector/build.gradle.kts @@ -119,8 +119,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-awt/build.gradle.kts b/decorated-window-awt/build.gradle.kts index bbe63deea..ddbd17ddc 100644 --- a/decorated-window-awt/build.gradle.kts +++ b/decorated-window-awt/build.gradle.kts @@ -50,8 +50,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-core/build.gradle.kts b/decorated-window-core/build.gradle.kts index 3398bccc1..2ad8170e7 100644 --- a/decorated-window-core/build.gradle.kts +++ b/decorated-window-core/build.gradle.kts @@ -101,8 +101,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-jbr/build.gradle.kts b/decorated-window-jbr/build.gradle.kts index a5eabba76..48ba5e049 100644 --- a/decorated-window-jbr/build.gradle.kts +++ b/decorated-window-jbr/build.gradle.kts @@ -74,8 +74,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-jewel/build.gradle.kts b/decorated-window-jewel/build.gradle.kts index fba5f8fe7..e4335b4a7 100644 --- a/decorated-window-jewel/build.gradle.kts +++ b/decorated-window-jewel/build.gradle.kts @@ -54,8 +54,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-jni/build.gradle.kts b/decorated-window-jni/build.gradle.kts index bcd955383..87a5d5302 100644 --- a/decorated-window-jni/build.gradle.kts +++ b/decorated-window-jni/build.gradle.kts @@ -99,8 +99,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-material2/build.gradle.kts b/decorated-window-material2/build.gradle.kts index 2b1b329fe..b79fb6b9f 100644 --- a/decorated-window-material2/build.gradle.kts +++ b/decorated-window-material2/build.gradle.kts @@ -53,8 +53,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-material3/build.gradle.kts b/decorated-window-material3/build.gradle.kts index fbc26603e..58a8f1cf1 100644 --- a/decorated-window-material3/build.gradle.kts +++ b/decorated-window-material3/build.gradle.kts @@ -54,8 +54,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/decorated-window-tao/build.gradle.kts b/decorated-window-tao/build.gradle.kts index 0f39020cb..15dac1dc7 100644 --- a/decorated-window-tao/build.gradle.kts +++ b/decorated-window-tao/build.gradle.kts @@ -116,8 +116,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/energy-manager/build.gradle.kts b/energy-manager/build.gradle.kts index 2dbff90b0..3096a1484 100644 --- a/energy-manager/build.gradle.kts +++ b/energy-manager/build.gradle.kts @@ -113,8 +113,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/freedesktop-icons/build.gradle.kts b/freedesktop-icons/build.gradle.kts index e8df234d8..fb4157343 100644 --- a/freedesktop-icons/build.gradle.kts +++ b/freedesktop-icons/build.gradle.kts @@ -40,8 +40,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/global-hotkey/build.gradle.kts b/global-hotkey/build.gradle.kts index 1c7fc3966..eeb6c6830 100644 --- a/global-hotkey/build.gradle.kts +++ b/global-hotkey/build.gradle.kts @@ -99,8 +99,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/graalvm-runtime/build.gradle.kts b/graalvm-runtime/build.gradle.kts index f5e81f9fa..76e1da3ca 100644 --- a/graalvm-runtime/build.gradle.kts +++ b/graalvm-runtime/build.gradle.kts @@ -50,8 +50,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/launcher-linux/build.gradle.kts b/launcher-linux/build.gradle.kts index b4466eb36..da3a07efc 100644 --- a/launcher-linux/build.gradle.kts +++ b/launcher-linux/build.gradle.kts @@ -76,8 +76,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/launcher-macos/build.gradle.kts b/launcher-macos/build.gradle.kts index 8049516fc..b0ce281ab 100644 --- a/launcher-macos/build.gradle.kts +++ b/launcher-macos/build.gradle.kts @@ -75,8 +75,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/launcher-windows/build.gradle.kts b/launcher-windows/build.gradle.kts index 717cda989..06f7c1bb9 100644 --- a/launcher-windows/build.gradle.kts +++ b/launcher-windows/build.gradle.kts @@ -70,8 +70,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/linux-hidpi/build.gradle.kts b/linux-hidpi/build.gradle.kts index 12dcc2248..c51d8e859 100644 --- a/linux-hidpi/build.gradle.kts +++ b/linux-hidpi/build.gradle.kts @@ -77,8 +77,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/media-control/build.gradle.kts b/media-control/build.gradle.kts index 17142d402..c1046fabb 100644 --- a/media-control/build.gradle.kts +++ b/media-control/build.gradle.kts @@ -121,8 +121,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/menu-macos/build.gradle.kts b/menu-macos/build.gradle.kts index 92ec60700..333065ce2 100644 --- a/menu-macos/build.gradle.kts +++ b/menu-macos/build.gradle.kts @@ -81,8 +81,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/native-http-ktor/build.gradle.kts b/native-http-ktor/build.gradle.kts index 3c85a24e6..28a04bfba 100644 --- a/native-http-ktor/build.gradle.kts +++ b/native-http-ktor/build.gradle.kts @@ -54,8 +54,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/native-http-okhttp/build.gradle.kts b/native-http-okhttp/build.gradle.kts index 20ec8b33c..d272acc35 100644 --- a/native-http-okhttp/build.gradle.kts +++ b/native-http-okhttp/build.gradle.kts @@ -46,8 +46,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/native-http/build.gradle.kts b/native-http/build.gradle.kts index 03fd9e948..3deba2f7d 100644 --- a/native-http/build.gradle.kts +++ b/native-http/build.gradle.kts @@ -45,8 +45,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/native-ssl/build.gradle.kts b/native-ssl/build.gradle.kts index bd3d8890b..1a723d076 100644 --- a/native-ssl/build.gradle.kts +++ b/native-ssl/build.gradle.kts @@ -94,8 +94,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/notification-common/build.gradle.kts b/notification-common/build.gradle.kts index c2e20a9ae..a0883aa40 100644 --- a/notification-common/build.gradle.kts +++ b/notification-common/build.gradle.kts @@ -49,8 +49,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/notification-linux/build.gradle.kts b/notification-linux/build.gradle.kts index aa9e1884d..592c7c301 100644 --- a/notification-linux/build.gradle.kts +++ b/notification-linux/build.gradle.kts @@ -76,8 +76,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/notification-macos/build.gradle.kts b/notification-macos/build.gradle.kts index eb9977e2a..e8ee172cf 100644 --- a/notification-macos/build.gradle.kts +++ b/notification-macos/build.gradle.kts @@ -75,8 +75,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/notification-windows/build.gradle.kts b/notification-windows/build.gradle.kts index e1a4ad005..625937e53 100644 --- a/notification-windows/build.gradle.kts +++ b/notification-windows/build.gradle.kts @@ -70,8 +70,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/nucleus-application/build.gradle.kts b/nucleus-application/build.gradle.kts index b83730041..c8ea28cc4 100644 --- a/nucleus-application/build.gradle.kts +++ b/nucleus-application/build.gradle.kts @@ -59,8 +59,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/scheduler-testing/build.gradle.kts b/scheduler-testing/build.gradle.kts index 1f8bc5c28..e7a320be6 100644 --- a/scheduler-testing/build.gradle.kts +++ b/scheduler-testing/build.gradle.kts @@ -48,8 +48,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/scheduler/build.gradle.kts b/scheduler/build.gradle.kts index 0759a0de6..2053eac14 100644 --- a/scheduler/build.gradle.kts +++ b/scheduler/build.gradle.kts @@ -101,8 +101,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/service-management-macos/build.gradle.kts b/service-management-macos/build.gradle.kts index 8e20e672e..8fe70f483 100644 --- a/service-management-macos/build.gradle.kts +++ b/service-management-macos/build.gradle.kts @@ -75,8 +75,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/sf-symbols/build.gradle.kts b/sf-symbols/build.gradle.kts index a2784bb35..02f20e1e1 100644 --- a/sf-symbols/build.gradle.kts +++ b/sf-symbols/build.gradle.kts @@ -40,8 +40,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/system-color/build.gradle.kts b/system-color/build.gradle.kts index c0217d31a..165975d7f 100644 --- a/system-color/build.gradle.kts +++ b/system-color/build.gradle.kts @@ -114,8 +114,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/system-info/build.gradle.kts b/system-info/build.gradle.kts index f0f193fd1..2456316d6 100644 --- a/system-info/build.gradle.kts +++ b/system-info/build.gradle.kts @@ -114,8 +114,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/taskbar-progress-tao/build.gradle.kts b/taskbar-progress-tao/build.gradle.kts index 9da7e897e..47dc09e14 100644 --- a/taskbar-progress-tao/build.gradle.kts +++ b/taskbar-progress-tao/build.gradle.kts @@ -54,8 +54,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/taskbar-progress/build.gradle.kts b/taskbar-progress/build.gradle.kts index cfa158e55..da38f6f61 100644 --- a/taskbar-progress/build.gradle.kts +++ b/taskbar-progress/build.gradle.kts @@ -95,8 +95,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } diff --git a/updater-runtime/build.gradle.kts b/updater-runtime/build.gradle.kts index 06be6eb33..c77a97bbc 100644 --- a/updater-runtime/build.gradle.kts +++ b/updater-runtime/build.gradle.kts @@ -47,8 +47,8 @@ mavenPublishing { developers { developer { - id.set("nucleusframework") - name.set("nucleusframework") + id.set("kdroidFilter") + name.set("kdroidFilter") url.set("https://github.com/kdroidFilter") } } From 4e6bbea5b756bc0b844ee64345a3e24a9c6f94d6 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:02:34 +0300 Subject: [PATCH 14/30] chore: add libgtk-3-dev to Linux CI dependencies --- .github/workflows/build-natives.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-natives.yaml b/.github/workflows/build-natives.yaml index 56692423f..269eb9650 100644 --- a/.github/workflows/build-natives.yaml +++ b/.github/workflows/build-natives.yaml @@ -720,7 +720,7 @@ jobs: java-version: '21' - name: Install build dependencies - run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev libx11-dev libglib2.0-dev + run: sudo apt-get update && sudo apt-get install -y libdbus-1-dev libx11-dev libglib2.0-dev libgtk-3-dev - name: Build darkmode-detector Linux native shared library run: bash darkmode-detector/src/main/native/linux/build.sh From 84b2b15c750d843ef1e7c999e13acb1c283bc569 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:09:39 +0300 Subject: [PATCH 15/30] chore: wire decorated-window-tao into CI --- .github/workflows/publish-maven.yaml | 37 ++++++++++++++++++++++++++ .github/workflows/publish-plugin.yaml | 7 +++++ .github/workflows/release-graalvm.yaml | 7 +++++ .github/workflows/test-packaging.yaml | 7 +++++ build.gradle.kts | 1 + 5 files changed, 59 insertions(+) diff --git a/.github/workflows/publish-maven.yaml b/.github/workflows/publish-maven.yaml index 92d540a4e..c885151b3 100644 --- a/.github/workflows/publish-maven.yaml +++ b/.github/workflows/publish-maven.yaml @@ -171,6 +171,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Verify all natives present run: | EXPECTED=( @@ -260,6 +267,36 @@ jobs: "media-control/src/main/resources/nucleus/native/darwin-x64/libnucleus_media_control_macos.dylib" "media-control/src/main/resources/nucleus/native/win32-x64/nucleus_media_control_windows.dll" "media-control/src/main/resources/nucleus/native/win32-aarch64/nucleus_media_control_windows.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_deco.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_gl.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_a11y.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_dnd.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-x64/nucleus_tao_windows_native_view.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_deco.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_gl.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_a11y.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_dnd.dll" + "decorated-window-tao/src/main/resources/nucleus/native/win32-aarch64/nucleus_tao_windows_native_view.dll" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_metal.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_dnd.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_deco.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_popup.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-aarch64/libnucleus_tao_macos_native_view.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_metal.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_dnd.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_deco.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_popup.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/darwin-x64/libnucleus_tao_macos_native_view.dylib" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao_egl.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-x64/libnucleus_tao_linux_widget.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao_egl.so" + "decorated-window-tao/src/main/resources/nucleus/native/linux-aarch64/libnucleus_tao_linux_widget.so" ) MISSING=0 for f in "${EXPECTED[@]}"; do diff --git a/.github/workflows/publish-plugin.yaml b/.github/workflows/publish-plugin.yaml index c7dfcd442..cc0476829 100644 --- a/.github/workflows/publish-plugin.yaml +++ b/.github/workflows/publish-plugin.yaml @@ -177,6 +177,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Cache Gradle Caches uses: gradle/actions/setup-gradle@v5 diff --git a/.github/workflows/release-graalvm.yaml b/.github/workflows/release-graalvm.yaml index 59d34a39c..fea6324b5 100644 --- a/.github/workflows/release-graalvm.yaml +++ b/.github/workflows/release-graalvm.yaml @@ -202,6 +202,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Setup Nucleus (GraalVM) uses: ./.github/actions/setup-nucleus with: diff --git a/.github/workflows/test-packaging.yaml b/.github/workflows/test-packaging.yaml index bd373530e..af894e0e9 100644 --- a/.github/workflows/test-packaging.yaml +++ b/.github/workflows/test-packaging.yaml @@ -214,6 +214,13 @@ jobs: pattern: 'media-control-*' merge-multiple: true + - name: Download decorated-window-tao artifacts + uses: actions/download-artifact@v4 + with: + path: decorated-window-tao/src/main/resources/nucleus/native/ + pattern: 'decorated-window-tao-*' + merge-multiple: true + - name: Build packages shell: bash run: ./gradlew :example:packageReleaseDistributionForCurrentOS --stacktrace --no-daemon diff --git a/build.gradle.kts b/build.gradle.kts index 28b790504..18c565bca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -98,6 +98,7 @@ tasks.register("preMerge") { dependsOn(":decorated-window-core:check") dependsOn(":decorated-window-jbr:check") dependsOn(":decorated-window-jni:check") + dependsOn(":decorated-window-tao:check") dependsOn(":decorated-window-jewel:check") dependsOn(":decorated-window-material2:check") dependsOn(":decorated-window-material3:check") From ecb7d3006a77b77ee61f687c222ba1270e2d4a89 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:16:38 +0300 Subject: [PATCH 16/30] fix: inline ARM64 interlocked intrinsics --- .../src/main/native/windows/nucleus_tao_a11y.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index ab4a2e759..cc3268c36 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -57,6 +57,16 @@ #include #include +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#include +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedCompareExchange64) +#pragma intrinsic(_InterlockedDecrement) +#pragma intrinsic(_InterlockedExchange) +#pragma intrinsic(_InterlockedExchange64) +#pragma intrinsic(_InterlockedIncrement) +#endif + /* /NODEFAULTLIB support — supplied by sibling DLL but we statically need them */ int _fltused = 0; From 71eddb9eac77cbc9b71659b364f6503df741da6e Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:23:31 +0300 Subject: [PATCH 17/30] fix: link Windows a11y against MSVC runtime --- decorated-window-tao/src/main/native/windows/build.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index 2862d15b2..7cb29e3a1 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -144,7 +144,7 @@ cl /LD /O1 /GS- /nologo ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_X64%\nucleus_tao_a11y.dll" ^ /link /NODEFAULTLIB /ENTRY:DllMain ^ - kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib + kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib libvcruntime.lib if errorlevel 1 ( echo ERROR: x64 a11y compilation failed >&2 exit /b 1 @@ -217,7 +217,7 @@ cl /LD /O1 /GS- /nologo ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_a11y.dll" ^ /link /NODEFAULTLIB /ENTRY:DllMain ^ - kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib + kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib libvcruntime.lib if errorlevel 1 ( echo WARNING: ARM64 a11y compilation failed >&2 endlocal From 078b8f13b44afc5d616cbf0c58fb8ba3eda758c1 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:31:10 +0300 Subject: [PATCH 18/30] fix: enable interlocked intrinsics for Windows a11y --- decorated-window-tao/src/main/native/windows/build.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index 7cb29e3a1..d85cbac40 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -139,7 +139,7 @@ if errorlevel 1 ( REM nucleus_tao_a11y.dll — UI Automation provider. Needs the C runtime REM (HeapAlloc-friendly libcmt) because uiautomationcore.lib pulls in C++ REM statics that require __security_check_cookie / floating-point support. -cl /LD /O1 /GS- /nologo ^ +cl /LD /O1 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_X64%\nucleus_tao_a11y.dll" ^ @@ -212,7 +212,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /GS- /nologo ^ +cl /LD /O1 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_a11y.dll" ^ From 5e734e738706723cc97edae08bf37cf1630b497f Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 18:43:00 +0300 Subject: [PATCH 19/30] fix: preserve memcmp shim for Windows a11y --- decorated-window-tao/src/main/native/windows/build.bat | 2 +- decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index d85cbac40..450687ec5 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -139,7 +139,7 @@ if errorlevel 1 ( REM nucleus_tao_a11y.dll — UI Automation provider. Needs the C runtime REM (HeapAlloc-friendly libcmt) because uiautomationcore.lib pulls in C++ REM statics that require __security_check_cookie / floating-point support. -cl /LD /O1 /Oi /GS- /nologo ^ +cl /LD /O1 /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_X64%\nucleus_tao_a11y.dll" ^ diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index cc3268c36..c254b8a9b 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -85,6 +85,7 @@ void *memcpy(void *dest, const void *src, size_t count) { return dest; } +#pragma function(memcmp) int memcmp(const void *a, const void *b, size_t count) { const unsigned char *p = (const unsigned char *)a; const unsigned char *q = (const unsigned char *)b; From eacc6e7ebb721f62eb3ad2839966f8a002c0cbab Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 19:25:29 +0300 Subject: [PATCH 20/30] fix: enable ARM64 interlocked intrinsics for Windows native components --- .../src/main/native/windows/nucleus_tao_a11y.c | 6 ++++++ .../src/main/native/windows/nucleus_tao_dnd.c | 8 ++++++++ .../src/main/native/windows/nucleus_tao_windows_overlay.c | 8 ++++++++ .../main/native/windows/nucleus_tao_windows_overlay_gl.c | 6 ++++++ .../src/main/native/windows/nucleus_tao_windows_popup.c | 8 ++++++++ 5 files changed, 36 insertions(+) diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index c254b8a9b..6e11cdd40 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -59,6 +59,12 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchange64 _InterlockedExchange64 +#define InterlockedIncrement _InterlockedIncrement #pragma intrinsic(_InterlockedCompareExchange) #pragma intrinsic(_InterlockedCompareExchange64) #pragma intrinsic(_InterlockedDecrement) diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 6e22c48c1..02aaec6b3 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -26,6 +26,14 @@ #include #include +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#include +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedIncrement _InterlockedIncrement +#pragma intrinsic(_InterlockedDecrement) +#pragma intrinsic(_InterlockedIncrement) +#endif + /* /NODEFAULTLIB support */ int _fltused = 0; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index c760e9113..33ae805dc 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -34,6 +34,14 @@ #include #include "nucleus_tao_windows_overlay_internal.h" +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#include +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedExchange _InterlockedExchange +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedExchange) +#endif + /* ============================================================ */ /* Constants + globals */ /* ============================================================ */ diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c index 3de5f42d4..415f1a51e 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c @@ -40,6 +40,12 @@ #include #include "nucleus_tao_windows_overlay_internal.h" +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#include +#define InterlockedCompareExchange _InterlockedCompareExchange +#pragma intrinsic(_InterlockedCompareExchange) +#endif + /* WGL ARB extension entry-points + bootstrap. */ typedef HGLRC (WINAPI *PFN_wglCreateContextAttribsARB)(HDC, HGLRC, const int *); typedef BOOL (WINAPI *PFN_wglSwapIntervalEXT)(int); diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index abc7d8670..d2f500519 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -28,6 +28,14 @@ #include #include "nucleus_tao_windows_overlay_internal.h" +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#include +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedOr _InterlockedOr +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedOr) +#endif + #define EVT_PTR_DOWN 1 #define EVT_PTR_UP 2 #define EVT_PTR_MOVE 3 From 5f25c0c3ccba8480fcd9054a9b5325ecad4d8aa7 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 19:39:21 +0300 Subject: [PATCH 21/30] fix: optimize ARM64 build flags and ensure interlocked intrinsics are inlined --- .../src/main/native/windows/build.bat | 10 ++++---- .../main/native/windows/nucleus_tao_a11y.c | 24 ++++++++----------- .../src/main/native/windows/nucleus_tao_dnd.c | 12 ++++------ .../windows/nucleus_tao_windows_overlay.c | 8 +++---- .../windows/nucleus_tao_windows_overlay_gl.c | 7 +++--- .../windows/nucleus_tao_windows_popup.c | 8 +++---- 6 files changed, 30 insertions(+), 39 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index 450687ec5..e3bc9f5cf 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -190,7 +190,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /GS- /nologo ^ +cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DECO_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_deco.dll" ^ @@ -201,7 +201,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /GS- /nologo ^ +cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%GL_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_gl.dll" ^ @@ -212,7 +212,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /Oi /GS- /nologo ^ +cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_a11y.dll" ^ @@ -224,7 +224,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /GS- /nologo ^ +cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DND_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_dnd.dll" ^ @@ -236,7 +236,7 @@ if errorlevel 1 ( goto :clear_cache ) -cl /LD /O1 /GS- /nologo ^ +cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%NV_SRC%" "%OVERLAY_SRC%" "%OVERLAY_GL_SRC%" "%POPUP_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_native_view.dll" ^ diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index 6e11cdd40..ae76be68b 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -48,31 +48,27 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedCompareExchange64 _InterlockedCompareExchange64 -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedExchange _InterlockedExchange -#define InterlockedExchange64 _InterlockedExchange64 -#define InterlockedIncrement _InterlockedIncrement +/* Force inlining of interlocked intrinsics on ARM64 to avoid unresolved externals with /NODEFAULTLIB. */ #pragma intrinsic(_InterlockedCompareExchange) #pragma intrinsic(_InterlockedCompareExchange64) #pragma intrinsic(_InterlockedDecrement) #pragma intrinsic(_InterlockedExchange) #pragma intrinsic(_InterlockedExchange64) #pragma intrinsic(_InterlockedIncrement) + +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchange64 _InterlockedExchange64 +#define InterlockedIncrement _InterlockedIncrement #endif +#include + /* /NODEFAULTLIB support — supplied by sibling DLL but we statically need them */ int _fltused = 0; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 02aaec6b3..174a917f0 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -19,21 +19,17 @@ #include #include -#include -#include -#include -#include -#include -#include #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedIncrement _InterlockedIncrement #pragma intrinsic(_InterlockedDecrement) #pragma intrinsic(_InterlockedIncrement) +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedIncrement _InterlockedIncrement #endif +#include + /* /NODEFAULTLIB support */ int _fltused = 0; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index 33ae805dc..e1f440223 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -31,17 +31,17 @@ #include #include -#include -#include "nucleus_tao_windows_overlay_internal.h" #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedExchange _InterlockedExchange #pragma intrinsic(_InterlockedCompareExchange) #pragma intrinsic(_InterlockedExchange) +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedExchange _InterlockedExchange #endif +#include + /* ============================================================ */ /* Constants + globals */ /* ============================================================ */ diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c index 415f1a51e..556e1bab6 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c @@ -36,16 +36,15 @@ #include #include -#include -#include -#include "nucleus_tao_windows_overlay_internal.h" #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#define InterlockedCompareExchange _InterlockedCompareExchange #pragma intrinsic(_InterlockedCompareExchange) +#define InterlockedCompareExchange _InterlockedCompareExchange #endif +#include + /* WGL ARB extension entry-points + bootstrap. */ typedef HGLRC (WINAPI *PFN_wglCreateContextAttribsARB)(HDC, HGLRC, const int *); typedef BOOL (WINAPI *PFN_wglSwapIntervalEXT)(int); diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index d2f500519..f3a39f39c 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -25,17 +25,17 @@ #include #include -#include -#include "nucleus_tao_windows_overlay_internal.h" #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedOr _InterlockedOr #pragma intrinsic(_InterlockedCompareExchange) #pragma intrinsic(_InterlockedOr) +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedOr _InterlockedOr #endif +#include + #define EVT_PTR_DOWN 1 #define EVT_PTR_UP 2 #define EVT_PTR_MOVE 3 From b965b3bee719a9cc62128d7b2a486dad891bb572 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 19:44:43 +0300 Subject: [PATCH 22/30] fix: restore missing headers in Windows native components --- .../src/main/native/windows/nucleus_tao_a11y.c | 7 +++++++ .../src/main/native/windows/nucleus_tao_dnd.c | 5 +++++ .../src/main/native/windows/nucleus_tao_windows_overlay.c | 1 + .../main/native/windows/nucleus_tao_windows_overlay_gl.c | 2 ++ .../src/main/native/windows/nucleus_tao_windows_popup.c | 1 + 5 files changed, 16 insertions(+) diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index ae76be68b..14b2026c8 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -68,6 +68,13 @@ #endif #include +#include +#include +#include +#include +#include +#include +#include /* /NODEFAULTLIB support — supplied by sibling DLL but we statically need them */ int _fltused = 0; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 174a917f0..5f9bb5b48 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -29,6 +29,11 @@ #endif #include +#include +#include +#include +#include +#include /* /NODEFAULTLIB support */ int _fltused = 0; diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index e1f440223..189083bf3 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -41,6 +41,7 @@ #endif #include +#include "nucleus_tao_windows_overlay_internal.h" /* ============================================================ */ /* Constants + globals */ diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c index 556e1bab6..ac5e7e88f 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c @@ -44,6 +44,8 @@ #endif #include +#include +#include "nucleus_tao_windows_overlay_internal.h" /* WGL ARB extension entry-points + bootstrap. */ typedef HGLRC (WINAPI *PFN_wglCreateContextAttribsARB)(HDC, HGLRC, const int *); diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index f3a39f39c..e9b4d678e 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -35,6 +35,7 @@ #endif #include +#include "nucleus_tao_windows_overlay_internal.h" #define EVT_PTR_DOWN 1 #define EVT_PTR_UP 2 From 0c24e7bac40123e488b0eee803f4b196d6597917 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 19:51:09 +0300 Subject: [PATCH 23/30] fix: use library Interlocked functions on ARM64 by undefining intrinsic macros --- .../main/native/windows/nucleus_tao_a11y.c | 25 ++++++++----------- .../src/main/native/windows/nucleus_tao_dnd.c | 6 ++--- .../windows/nucleus_tao_windows_overlay.c | 6 ++--- .../windows/nucleus_tao_windows_overlay_gl.c | 3 +-- .../windows/nucleus_tao_windows_popup.c | 6 ++--- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index 14b2026c8..b11976554 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -51,20 +51,17 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -/* Force inlining of interlocked intrinsics on ARM64 to avoid unresolved externals with /NODEFAULTLIB. */ -#pragma intrinsic(_InterlockedCompareExchange) -#pragma intrinsic(_InterlockedCompareExchange64) -#pragma intrinsic(_InterlockedDecrement) -#pragma intrinsic(_InterlockedExchange) -#pragma intrinsic(_InterlockedExchange64) -#pragma intrinsic(_InterlockedIncrement) - -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedCompareExchange64 _InterlockedCompareExchange64 -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedExchange _InterlockedExchange -#define InterlockedExchange64 _InterlockedExchange64 -#define InterlockedIncrement _InterlockedIncrement +/* On ARM64 with /NODEFAULTLIB, the compiler may fail to inline some interlocked + * intrinsics, emitting calls to underscored symbols like _InterlockedIncrement. + * Since we link kernel32.lib, we undefine these macros to force the compiler + * to use the standard library exports (InterlockedIncrement, etc.) which + * don't have the leading underscore on ARM64. */ +#undef InterlockedCompareExchange +#undef InterlockedCompareExchange64 +#undef InterlockedDecrement +#undef InterlockedExchange +#undef InterlockedExchange64 +#undef InterlockedIncrement #endif #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 5f9bb5b48..4684370c3 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -22,10 +22,8 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#pragma intrinsic(_InterlockedDecrement) -#pragma intrinsic(_InterlockedIncrement) -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedIncrement _InterlockedIncrement +#undef InterlockedDecrement +#undef InterlockedIncrement #endif #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index 189083bf3..79153bd80 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -34,10 +34,8 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#pragma intrinsic(_InterlockedCompareExchange) -#pragma intrinsic(_InterlockedExchange) -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedExchange _InterlockedExchange +#undef InterlockedCompareExchange +#undef InterlockedExchange #endif #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c index ac5e7e88f..211d65250 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c @@ -39,8 +39,7 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#pragma intrinsic(_InterlockedCompareExchange) -#define InterlockedCompareExchange _InterlockedCompareExchange +#undef InterlockedCompareExchange #endif #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index e9b4d678e..9c8cb6f58 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -28,10 +28,8 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -#pragma intrinsic(_InterlockedCompareExchange) -#pragma intrinsic(_InterlockedOr) -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedOr _InterlockedOr +#undef InterlockedCompareExchange +#undef InterlockedOr #endif #include From c13c1f1b9765a55ac669cf3075129b0606fbbb70 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 19:58:44 +0300 Subject: [PATCH 24/30] fix: restore standard CRT for ARM64 builds while keeping /NODEFAULTLIB for x64 --- .../src/main/native/windows/build.bat | 12 ++++++------ .../src/main/native/windows/nucleus_tao_a11y.c | 13 +++++++------ .../src/main/native/windows/nucleus_tao_dnd.c | 2 ++ .../windows/nucleus_tao_windows_native_view.c | 2 ++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index e3bc9f5cf..a86028853 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -194,7 +194,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DECO_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_deco.dll" ^ - /link /NODEFAULTLIB /ENTRY:DllMain kernel32.lib user32.lib dwmapi.lib gdi32.lib shell32.lib + /link kernel32.lib user32.lib dwmapi.lib gdi32.lib shell32.lib if errorlevel 1 ( echo WARNING: ARM64 deco compilation failed >&2 endlocal @@ -205,7 +205,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%GL_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_gl.dll" ^ - /link /NODEFAULTLIB /ENTRY:DllMain opengl32.lib gdi32.lib user32.lib kernel32.lib + /link opengl32.lib gdi32.lib user32.lib kernel32.lib if errorlevel 1 ( echo WARNING: ARM64 GL compilation failed >&2 endlocal @@ -216,8 +216,8 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_a11y.dll" ^ - /link /NODEFAULTLIB /ENTRY:DllMain ^ - kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib libvcruntime.lib + /link ^ + kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib if errorlevel 1 ( echo WARNING: ARM64 a11y compilation failed >&2 endlocal @@ -228,7 +228,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DND_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_dnd.dll" ^ - /link /NODEFAULTLIB /ENTRY:DllMain ^ + /link ^ kernel32.lib user32.lib ole32.lib oleaut32.lib uuid.lib shell32.lib if errorlevel 1 ( echo WARNING: ARM64 dnd compilation failed >&2 @@ -240,7 +240,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%NV_SRC%" "%OVERLAY_SRC%" "%OVERLAY_GL_SRC%" "%POPUP_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_native_view.dll" ^ - /link /NODEFAULTLIB /ENTRY:DllMain ^ + /link ^ kernel32.lib user32.lib gdi32.lib dwmapi.lib opengl32.lib if errorlevel 1 ( echo WARNING: ARM64 native_view compilation failed >&2 diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index b11976554..20890429d 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -51,11 +51,9 @@ #if defined(_M_ARM64) || defined(_M_ARM64EC) #include -/* On ARM64 with /NODEFAULTLIB, the compiler may fail to inline some interlocked - * intrinsics, emitting calls to underscored symbols like _InterlockedIncrement. - * Since we link kernel32.lib, we undefine these macros to force the compiler - * to use the standard library exports (InterlockedIncrement, etc.) which - * don't have the leading underscore on ARM64. */ +/* On ARM64 we use the standard CRT (no /NODEFAULTLIB), so we undefine + * the intrinsic macros to use the kernel32.lib exports if the compiler + * doesn't inline them. */ #undef InterlockedCompareExchange #undef InterlockedCompareExchange64 #undef InterlockedDecrement @@ -73,7 +71,9 @@ #include #include -/* /NODEFAULTLIB support — supplied by sibling DLL but we statically need them */ +#ifndef _M_ARM64 +/* /NODEFAULTLIB support — supplied by sibling DLL but we statically need them. + * Only needed for x64 where we avoid the CRT dependency. */ int _fltused = 0; #pragma function(memset) @@ -101,6 +101,7 @@ int memcmp(const void *a, const void *b, size_t count) { } return 0; } +#endif /* The Windows SDK declares these as `const long` in C++-only blocks, which * makes them unusable in C `case` labels. Redefine the subset we need as diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index 4684370c3..fe2130898 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -33,6 +33,7 @@ #include #include +#ifndef _M_ARM64 /* /NODEFAULTLIB support */ int _fltused = 0; @@ -60,6 +61,7 @@ int memcmp(const void *a, const void *b, size_t count) { } return 0; } +#endif /* DllMain stub for /NODEFAULTLIB linking. */ BOOL WINAPI DllMain(HINSTANCE h, DWORD r, LPVOID v) { (void)h; (void)r; (void)v; return TRUE; } diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c index 27d83c58a..7fdea70d8 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_native_view.c @@ -17,6 +17,7 @@ #include #include +#ifndef _M_ARM64 /* /NODEFAULTLIB shim shared across all .c files linked into this DLL. */ int _fltused = 0; @@ -34,6 +35,7 @@ void *memcpy(void *dest, const void *src, size_t count) { while (count--) *d++ = *s++; return dest; } +#endif BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved) { (void)hinst; (void)reason; (void)reserved; From d45179f30044dc742d1033cf3c965adb21bafd4a Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 20:05:07 +0300 Subject: [PATCH 25/30] fix: link ARM64 against libcmt.lib to resolve Interlocked symbols and remove compiler hacks --- .../src/main/native/windows/build.bat | 10 +++++----- .../src/main/native/windows/nucleus_tao_a11y.c | 14 -------------- .../src/main/native/windows/nucleus_tao_dnd.c | 7 ------- .../native/windows/nucleus_tao_windows_overlay.c | 7 ------- .../windows/nucleus_tao_windows_overlay_gl.c | 6 ------ .../native/windows/nucleus_tao_windows_popup.c | 7 ------- 6 files changed, 5 insertions(+), 46 deletions(-) diff --git a/decorated-window-tao/src/main/native/windows/build.bat b/decorated-window-tao/src/main/native/windows/build.bat index a86028853..1e43a58ea 100644 --- a/decorated-window-tao/src/main/native/windows/build.bat +++ b/decorated-window-tao/src/main/native/windows/build.bat @@ -194,7 +194,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DECO_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_deco.dll" ^ - /link kernel32.lib user32.lib dwmapi.lib gdi32.lib shell32.lib + /link libcmt.lib kernel32.lib user32.lib dwmapi.lib gdi32.lib shell32.lib if errorlevel 1 ( echo WARNING: ARM64 deco compilation failed >&2 endlocal @@ -205,7 +205,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%GL_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_gl.dll" ^ - /link opengl32.lib gdi32.lib user32.lib kernel32.lib + /link libcmt.lib opengl32.lib gdi32.lib user32.lib kernel32.lib if errorlevel 1 ( echo WARNING: ARM64 GL compilation failed >&2 endlocal @@ -216,7 +216,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%A11Y_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_a11y.dll" ^ - /link ^ + /link libcmt.lib ^ kernel32.lib user32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib uiautomationcore.lib if errorlevel 1 ( echo WARNING: ARM64 a11y compilation failed >&2 @@ -228,7 +228,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%DND_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_dnd.dll" ^ - /link ^ + /link libcmt.lib ^ kernel32.lib user32.lib ole32.lib oleaut32.lib uuid.lib shell32.lib if errorlevel 1 ( echo WARNING: ARM64 dnd compilation failed >&2 @@ -240,7 +240,7 @@ cl /LD /O2 /Oi /GS- /nologo ^ /I"%JNI_INCLUDE%" /I"%JNI_INCLUDE_WIN32%" ^ "%NV_SRC%" "%OVERLAY_SRC%" "%OVERLAY_GL_SRC%" "%POPUP_SRC%" ^ /Fe:"%OUT_DIR_ARM64%\nucleus_tao_windows_native_view.dll" ^ - /link ^ + /link libcmt.lib ^ kernel32.lib user32.lib gdi32.lib dwmapi.lib opengl32.lib if errorlevel 1 ( echo WARNING: ARM64 native_view compilation failed >&2 diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c index 20890429d..e63873ffb 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_a11y.c @@ -48,20 +48,6 @@ #include #include - -#if defined(_M_ARM64) || defined(_M_ARM64EC) -#include -/* On ARM64 we use the standard CRT (no /NODEFAULTLIB), so we undefine - * the intrinsic macros to use the kernel32.lib exports if the compiler - * doesn't inline them. */ -#undef InterlockedCompareExchange -#undef InterlockedCompareExchange64 -#undef InterlockedDecrement -#undef InterlockedExchange -#undef InterlockedExchange64 -#undef InterlockedIncrement -#endif - #include #include #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c index fe2130898..4f4f9369e 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_dnd.c @@ -19,13 +19,6 @@ #include #include - -#if defined(_M_ARM64) || defined(_M_ARM64EC) -#include -#undef InterlockedDecrement -#undef InterlockedIncrement -#endif - #include #include #include diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c index 79153bd80..c760e9113 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay.c @@ -31,13 +31,6 @@ #include #include - -#if defined(_M_ARM64) || defined(_M_ARM64EC) -#include -#undef InterlockedCompareExchange -#undef InterlockedExchange -#endif - #include #include "nucleus_tao_windows_overlay_internal.h" diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c index 211d65250..3de5f42d4 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_overlay_gl.c @@ -36,12 +36,6 @@ #include #include - -#if defined(_M_ARM64) || defined(_M_ARM64EC) -#include -#undef InterlockedCompareExchange -#endif - #include #include #include "nucleus_tao_windows_overlay_internal.h" diff --git a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c index 9c8cb6f58..abc7d8670 100644 --- a/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c +++ b/decorated-window-tao/src/main/native/windows/nucleus_tao_windows_popup.c @@ -25,13 +25,6 @@ #include #include - -#if defined(_M_ARM64) || defined(_M_ARM64EC) -#include -#undef InterlockedCompareExchange -#undef InterlockedOr -#endif - #include #include "nucleus_tao_windows_overlay_internal.h" From 10083372fb89020c2a20aabaea21220fa48f32ff Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 20:16:48 +0300 Subject: [PATCH 26/30] fix: resolve NPE in FilesMapping during configuration cache loading --- .../nucleus/desktop/application/tasks/AbstractJPackageTask.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index e2f4c0735..ed51654d4 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -874,9 +874,7 @@ private class FilesMapping : Serializable { @Suppress("UNCHECKED_CAST") private fun readObject(stream: ObjectInputStream) { - val readMapping = stream.readObject() as HashMap> - mapping.clear() - mapping.putAll(readMapping) + mapping = stream.readObject() as HashMap> } } From 2a5ec676ef13df176cabf6309ff9a1fca0866a9e Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 20:32:34 +0300 Subject: [PATCH 27/30] fix: resolve ProGuard warnings by adding -dontwarn rules and including example rules --- example/build.gradle.kts | 1 + .../resources/default-compose-desktop-rules.pro | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/example/build.gradle.kts b/example/build.gradle.kts index f31c3f195..d9772adaa 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -78,6 +78,7 @@ nucleus.application { version = "7.8.1" isEnabled = true optimize = false + configurationFiles.from(project.file("proguard-rules.pro")) } } } diff --git a/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro b/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro index 304e7ba93..3b8dff338 100644 --- a/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro +++ b/plugin-build/plugin/src/main/resources/default-compose-desktop-rules.pro @@ -140,6 +140,10 @@ -dontwarn com.sun.jna.** -dontnote com.sun.jna.** +# Nucleus - Silence warnings and notes for all modules (many are optional at runtime) +-dontwarn dev.nucleusframework.nucleus.** +-dontnote dev.nucleusframework.nucleus.** + # Nucleus decorated-window JNI -keep class dev.nucleusframework.nucleus.window.utils.macos.NativeMacBridge { native ; @@ -165,6 +169,7 @@ native ; } -keep class dev.nucleusframework.nucleus.darkmodedetector.** { *; } +-dontwarn dev.nucleusframework.nucleus.darkmodedetector.** # Nucleus native-ssl JNI (macOS) -keep class dev.nucleusframework.nucleus.nativessl.mac.NativeSslBridge { @@ -175,6 +180,7 @@ -keep class dev.nucleusframework.nucleus.nativessl.windows.WindowsSslBridge { native ; } +-dontwarn dev.nucleusframework.nucleus.nativessl.** # Nucleus system-color JNI (macOS) # NativeMacSystemColorBridge is looked up by name from native code (FindClass + GetStaticMethodID) @@ -201,6 +207,7 @@ static void onHighContrastChanged(boolean); } -keep class dev.nucleusframework.nucleus.systemcolor.** { *; } +-dontwarn dev.nucleusframework.nucleus.systemcolor.** # Nucleus energy-manager JNI (macOS) -keep class dev.nucleusframework.nucleus.energymanager.macos.NativeMacOsEnergyBridge { @@ -217,11 +224,13 @@ native ; } -keep class dev.nucleusframework.nucleus.energymanager.** { *; } +-dontwarn dev.nucleusframework.nucleus.energymanager.** # Nucleus linux-hidpi JNI -keep class dev.nucleusframework.nucleus.hidpi.HiDpiLinuxBridge { native ; } +-dontwarn dev.nucleusframework.nucleus.hidpi.** # Nucleus notification-windows JNI — static callbacks invoked from native via FindClass/GetStaticMethodID -keep class dev.nucleusframework.nucleus.notification.windows.NativeWindowsNotificationBridge { @@ -235,12 +244,15 @@ } -keep class dev.nucleusframework.nucleus.notification.windows.** { *; } -keep class dev.nucleusframework.nucleus.notification.common.** { *; } +-dontwarn dev.nucleusframework.nucleus.notification.** # Nucleus media-control JNI — native code uses FindClass(BRIDGE_CLASS) + static callbacks -keep class dev.nucleusframework.nucleus.mediacontrol.** { *; } +-dontwarn dev.nucleusframework.nucleus.mediacontrol.** # Nucleus scheduler JNI -keep class dev.nucleusframework.nucleus.scheduler.** { *; } +-dontwarn dev.nucleusframework.nucleus.scheduler.** # Nucleus global-hotkey JNI — onHotKey is invoked from native code via JNI -keep class dev.nucleusframework.nucleus.globalhotkey.windows.NativeWindowsHotKeyBridge { @@ -255,6 +267,7 @@ native ; static void onHotKey(long, int, int); } +-dontwarn dev.nucleusframework.nucleus.globalhotkey.** # Nucleus launcher-windows JNI — ThumbBarClickListener.onThumbButtonClick is invoked from native -keep class dev.nucleusframework.nucleus.launcher.windows.NativeWindowsBadgeBridge { native ; } @@ -266,6 +279,9 @@ -keep class * implements dev.nucleusframework.nucleus.launcher.windows.ThumbBarClickListener { void onThumbButtonClick(int); } +-dontwarn dev.nucleusframework.nucleus.launcher.** + +-dontwarn dev.nucleusframework.nucleus.core.runtime.** -dontwarn sun.misc.Unsafe -dontwarn sun.awt.** From f842264e2a959ec07417301be2be7583a37392dd Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 20:57:31 +0300 Subject: [PATCH 28/30] fix: add --enable-native-access to AOT training run --- .../desktop/application/tasks/AbstractGenerateAotCacheTask.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt index 9ca5669c4..dc0847083 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractGenerateAotCacheTask.kt @@ -349,6 +349,7 @@ abstract class AbstractGenerateAotCacheTask : AbstractNucleusTask() { val args = mutableListOf(javaExe) args += "-XX:AOTCacheOutput=${aotCacheFile.absolutePath}" args += "-Dnucleus.aot.mode=training" + args += "--enable-native-access=ALL-UNNAMED" args += "-cp" args += classpath args += javaOptions From 99946bcded34889b823c7e3593446759c2eb665f Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 20:59:55 +0300 Subject: [PATCH 29/30] fix: ensure Skiko native libs are placed in resources when sandboxing is enabled on Windows/Linux --- .../application/tasks/AbstractJPackageTask.kt | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index ed51654d4..d3a420f4d 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -503,13 +503,24 @@ abstract class AbstractJPackageTask fun File.isMainUberJar() = packageFromUberJar.get() && name == launcherMainJar.ioFile.name val outdatedLibs = invalidateMappedLibs(inputChanges) + val destResourcesDir = packagedResourcesDir.ioFile + for (sourceFile in outdatedLibs) { assert(sourceFile.exists()) { "Lib file does not exist: $sourceFile" } libsMapping[sourceFile] = if (isSkikoForCurrentOS(sourceFile) || sourceFile.isMainUberJar()) { val unpackedFiles = unpackSkikoForCurrentOS(sourceFile, skikoDir.ioFile, fileOperations) - unpackedFiles.map { copyFileToLibsDir(it) } + unpackedFiles.map { file -> + if (sandboxingEnabled.get() && currentOS != OS.MacOS && (file.extension == "dll" || file.extension == "so" || file.name == "icudtl.dat")) { + val target = destResourcesDir.resolve(file.name) + fileOperations.mkdirs(destResourcesDir) + file.copyTo(target, overwrite = true) + target + } else { + copyFileToLibsDir(file) + } + } } else { listOf(copyFileToLibsDir(sourceFile)) } @@ -531,16 +542,6 @@ abstract class AbstractJPackageTask } } - // When sandboxing is enabled, Skiko's native DLL is in resources/ but its companion - // data file (icudtl.dat) is extracted by unpackSkikoForCurrentOS to libsDir. - // Copy it next to the DLL so SkLoadICU can find it. - if (sandboxingEnabled.get()) { - val icudtl = libsDir.resolve("icudtl.dat") - if (icudtl.exists()) { - icudtl.copyTo(destResourcesDir.resolve("icudtl.dat"), overwrite = true) - } - } - fileOperations.clearDirs(jpackageResources) if (currentOS == OS.MacOS) { val systemVersion = macMinimumSystemVersion.orNull ?: "10.13" From e5dffce1d35ce218bb006a647335b4da436619d8 Mon Sep 17 00:00:00 2001 From: Elie Gambache Date: Sun, 10 May 2026 21:10:34 +0300 Subject: [PATCH 30/30] fix: remove duplicate destResourcesDir declaration in AbstractJPackageTask --- .../nucleus/desktop/application/tasks/AbstractJPackageTask.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt index d3a420f4d..898d71ec0 100644 --- a/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt +++ b/plugin-build/plugin/src/main/kotlin/dev/nucleusframework/nucleus/desktop/application/tasks/AbstractJPackageTask.kt @@ -528,7 +528,6 @@ abstract class AbstractJPackageTask // todo: incremental copy fileOperations.clearDirs(packagedResourcesDir) - val destResourcesDir = packagedResourcesDir.ioFile val appResourcesDir = appResourcesDir.ioFileOrNull if (appResourcesDir != null) { for (file in appResourcesDir.walk()) {