2.3 KiB
2.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Build Commands
# Setup build directory (first time)
meson setup builddir
# Build project
meson compile -C builddir
# Clean rebuild
rm -rf builddir && meson setup builddir && meson compile -C builddir
# Run the application
./builddir/src/kordophone
Architecture Overview
Kordophone is a GTK4/Libadwaita messaging client written in Vala that acts as a frontend to a separate DBus daemon (kordophonecd). The application follows a clean separation of concerns:
Core Architecture
- DBus Client: This GTK app connects to
net.buzzert.kordophonecddaemon over DBus - Split UI: Main window has conversation list sidebar + transcript view
- Custom Rendering: Transcript uses Gtk.DrawingArea with snapshot API for performance
- Repository Pattern: All data operations go through
Repositorysingleton which proxies to DBus service
Key Components
- Application (
src/application/): App lifecycle, main window, preferences - Service (
src/service/): DBus integration, data repository, settings management - Conversation List (
src/conversation-list/): Sidebar with conversation list and search - Transcript (
src/transcript/): Message display with pluggable bubble layouts - Models (
src/models/): Data structures (Conversation, Message, Attachment)
DBus Interface
The app depends on a running kordophonecd daemon that provides:
- Repository interface: Conversation/message CRUD, real-time sync via signals
- Settings interface: Server configuration, user credentials
Development Notes
- Vala compiles to C, build artifacts in
builddir/ - DBus interfaces auto-generated from XML: run
src/service/interface/generate.sh - Resources bundled via GResource (
src/resources/kordophone.gresource.xml) - Custom CSS styling in
src/resources/style.css - Application ID:
net.buzzert.kordophone2
Message Layout System
Transcript view uses a pluggable layout system in src/transcript/layouts/:
BubbleLayout: Base class for message bubblesTextBubbleLayout: Text messagesImageBubbleLayout: Image attachmentsDateItemLayout: Date separatorsSenderAnnotationLayout: Sender labels
All layouts render to Cairo context via Gtk snapshot API for efficient scrolling performance.