wIRC main scrollback - The main window now has a "Server messages" scrollback using the same rendering and stick-to-bottom code as channel windows (extracted from ChannelScreen into a shared MessageScrollback composable). - MOTD, numerics, errors, connection status, user modes, INVITE, ERROR, non-ACTION CTCP requests and notices/messages from services (NickServ, ChanServ, *Serv, Global, ...) and the server go there. Its history persists like any other buffer (history/wirc-main__main.json). - Unread indicator: lines arriving while the main window is unfocused show as "N new" next to the label and in the window title/taskbar. Private messages and /whois - A PM or notice from a real user opens its query window, and reopens it if it was closed. Services and the server no longer open windows. - /whois <nick> sends WHOIS and shows the formatted reply in the window it was typed in, or in wIRC main if that window has since closed. - /me now sends a proper CTCP ACTION (the \x01 wrapper was missing). Window position and size - Main, channel and PM windows remember position and size in window_prefs.json under the existing "<serverId>__<name>" key (main uses "wirc-main__main"). The new windowX/windowY/windowWidth/ windowHeight fields are optional, so older files still load. - A saved position is only used if the window's title strip is on a connected monitor; otherwise, and for windows with no saved position, windows cascade from the primary screen's top-left with a 32dp offset. - window_prefs.json is now written via a temp file + atomic move. Cleanup - Remove the TEMP DEBUG aliasDebug tracing, ServerRepository.upsert printlns and connmgr-debug printlns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
1.7 KiB
Kotlin
50 lines
1.7 KiB
Kotlin
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
|
|
|
plugins {
|
|
kotlin("jvm") version "1.9.24"
|
|
id("org.jetbrains.compose") version "1.6.11"
|
|
}
|
|
|
|
group = "com.tpuahsiew.wirc"
|
|
version = "0.1.7"
|
|
|
|
// No project-level repositories{} block here: settings.gradle.kts sets
|
|
// dependencyResolutionManagement.repositoriesMode = FAIL_ON_PROJECT_REPOS and already
|
|
// declares google()/mavenCentral()/the compose dev repo there, so a duplicate block in
|
|
// this file would conflict with that policy and fail the build.
|
|
|
|
dependencies {
|
|
implementation(compose.desktop.currentOs)
|
|
implementation(compose.material3)
|
|
// Icons.Default.{Person,Settings} used by the settings-gear/user-list toggle in
|
|
// ChannelScreen live in material-icons-core, which materialIconsExtended pulls in -
|
|
// compose.material3 alone doesn't include it.
|
|
implementation(compose.materialIconsExtended)
|
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.8.1")
|
|
implementation("org.json:json:20240303")
|
|
}
|
|
|
|
kotlin {
|
|
jvmToolchain(17)
|
|
}
|
|
|
|
compose.desktop {
|
|
application {
|
|
mainClass = "MainKt"
|
|
nativeDistributions {
|
|
// Bundles installerResources/ (aliases.txt starter file, etc.) into the
|
|
// installed app directory, available at runtime via the
|
|
// compose.application.resources.dir system property.
|
|
appResourcesRootDir.set(project.file("installerResources"))
|
|
targetFormats(TargetFormat.Msi, TargetFormat.Exe)
|
|
packageName = "wIRC"
|
|
packageVersion = "0.1.7"
|
|
windows {
|
|
menuGroup = "wIRC"
|
|
upgradeUuid = "8f14e45f-ceea-4a5e-9c3b-5b1f0e8c2b7a"
|
|
iconFile.set(project.file("icon.ico"))
|
|
}
|
|
}
|
|
}
|
|
}
|