Files
logos-chat-ui/metadata.json
osmaczko 2732086653 feat: group conversations UI (#31)
* feat: group conversations UI

The UI surfaced only 1:1 conversations, but chat_module now exposes GroupV2
groups, so the UI needs to create them, display their roster, and grow them.

- ChatBackend gains create_group_conversation / add_group_member and exposes
  the current conversation's group view state (currentIsGroup,
  currentDisplayName, memberCount) as replicated backend properties: across
  the QtRO boundary a model replica carries roles and data() but not the
  source model's custom Q_INVOKABLE methods or a reliable rowCount(), so that
  whole-model state is derived on the source side and pushed as properties.
  refreshMembers reads the roster as [GroupMember] records.
- MemberListModel drives the members panel; a member with no confirmed
  account renders as "unknown_account".
- ConversationListModel marks group rows; ChatView shows the members panel
  and per-message sender labels only for groups; MembersPane hosts the roster
  and the add-member field.
- Pin chat_module to the merged GroupV2 commit on chat-module master (#43): its
  GroupV2 contract (create_group_conversation, add_group_member,
  list_group_members, the conversation kind and message sender fields) isn't in
  a released tag yet, so pin the exact commit and re-pin as chat_module advances.

* test: add a three-party group-chat doc-test and CI gate

Exercise the group UI end to end: three headless app instances form a group,
grow it member by member, and render the roster, captured as a screenshot.

- doctests/chat-ui-group.test.yaml plus doctests/group/ drive three instances
  on ports distinct from the exchange spec, so both specs can run in one job
  without their module hosts colliding; nix run .#group launches the
  screenshot app.
- doctests.yml runs the group spec alongside exchange; group-chat.yml is a
  dedicated Ubuntu gate that runs the three-party driver from the checkout.

* docs: document running multiple instances on one machine

Running side-by-side instances was only covered in the linked
two-instance-exchange doc. Add it to the README's How to Run directly: the
per-instance env vars (CHAT_MODULE_INSTANCE_PATH, CHAT_MODULE_DELIVERY_PORT, and
QML_INSPECTOR_PORT when driving an instance via the inspector), a copy-paste
two-window example and how to scale to more, with the exchange/group drivers
linked for the full flow.

* docs: correct delivery-module version in README

The Dependencies and Related Repositories tables listed the delivery-module
runtime pin as v0.1.2; the flake pins v0.1.3. Match them.
2026-07-10 11:17:33 +02:00

32 lines
813 B
JSON

{
"name": "chat_ui",
"display_name": "Chat",
"version": "0.2.0",
"type": "ui_qml",
"interface": "universal",
"category": "chat",
"description": "Chat App for Logos - Private messaging interface",
"main": "chat_ui_plugin",
"view": "qml/ChatView.qml",
"dependencies": ["chat_module", "delivery_module"],
"codegen": {
"rep": "src/ChatBackend.rep",
"backend_class": "ChatBackend",
"backend_header": "ChatBackend.h"
},
"dependency_overrides": {
"delivery_module": {
"input": "chat_module",
"file": "rust-lib/deps/delivery_module.lidl"
}
},
"nix": {
"packages": {
"build": [],
"runtime": ["qt6.qtdeclarative", "zstd", "krb5", "abseil-cpp"]
},
"external_libraries": [],
"cmake": { "find_packages": [], "extra_sources": [] }
}
}