Add chat actions, channels/groups mgmt, directory + deadmans bots, network status
Profiles/bots (profiles.py, main.py): - Surface real send errors; fix group send and member-count staleness (refresh on view) - Group/channel actions: join, leave, owner delete; consistent member counts - Contacts: always-visible Chat, plus Clear chat and Delete contact - Support bot: OpenAI-compatible LLM backend (Grok/Ollama/OpenAI) per-bot config - Deadmans bot: check-in window, trigger message, recipients, owner - Directory bot: add-to-group registration, super-user /approve /reject /list, search, publishes listing.json in the website schema (directory.py registry module) - Profile edit (name/bio/avatar) + avatars on list pages - Global status + /network page (operators, SMP/XFTP servers) and Settings network info UI (templates): - Chat rooms; collapsible left sidebar with notifications + network widget - Per-directory-bot website generated on creation (name substituted) - Matrix theme; copy/hyperlink addresses; site footer Ignore runtime bot state and generated directory sites. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
86
manager/templates/network.html
Normal file
86
manager/templates/network.html
Normal file
@@ -0,0 +1,86 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Network — SimpleX Manager{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<style>
|
||||
.srv-table td { padding: 6px 12px; }
|
||||
.srv-host { font-family: monospace; font-size: 12px; }
|
||||
.srv-off { opacity: 0.5; }
|
||||
.op-sub { font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px;
|
||||
color: var(--muted); margin: 14px 0 6px; }
|
||||
.net-table td:first-child { color: var(--muted); width: 45%; }
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Network</h1>
|
||||
|
||||
{% if not detail.profile_name %}
|
||||
<div class="card" style="text-align:center;padding:48px;color:var(--muted);">
|
||||
No running profile. Start a profile to view SMP/XFTP servers and network status.
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="muted" style="margin-bottom:16px;">
|
||||
Servers and network config for <strong>{{ detail.profile_name }}</strong> (SimpleX presets are shared across profiles).
|
||||
</p>
|
||||
|
||||
{% if detail.network %}
|
||||
<div class="card">
|
||||
<h2>Network configuration</h2>
|
||||
<table class="net-table">
|
||||
<tr><td>SMP proxy mode</td><td>{{ detail.network.smpProxyMode | default('—', true) }}</td></tr>
|
||||
<tr><td>SMP proxy fallback</td><td>{{ detail.network.smpProxyFallback | default('—', true) }}</td></tr>
|
||||
<tr><td>Host mode</td><td>{{ detail.network.hostMode | default('—', true) }}</td></tr>
|
||||
<tr><td>Required host mode</td><td>{{ detail.network.requiredHostMode | default('—', true) }}</td></tr>
|
||||
<tr><td>Session mode</td><td>{{ detail.network.sessionMode | default('—', true) }}</td></tr>
|
||||
<tr><td>TCP connect timeout</td><td>{{ detail.network.tcpConnectTimeout | default('—', true) }}</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for op in detail.operators %}
|
||||
<div class="card">
|
||||
<div class="flex-between" style="margin-bottom:6px;">
|
||||
<h2 style="margin:0;">{{ op.name }}</h2>
|
||||
<span class="badge {% if op.enabled %}badge-green{% else %}badge-red{% endif %}">
|
||||
{{ 'enabled' if op.enabled else 'disabled' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="op-sub">SMP — messaging ({{ op.smp | length }})</div>
|
||||
{% if op.smp %}
|
||||
<table class="srv-table">
|
||||
{% for s in op.smp %}
|
||||
<tr class="{% if not s.enabled or s.deleted %}srv-off{% endif %}">
|
||||
<td class="srv-host">{{ s.host }}</td>
|
||||
<td style="text-align:right;">
|
||||
{% if s.preset %}<span class="tag">preset</span>{% endif %}
|
||||
{% if s.deleted %}<span class="badge badge-red">deleted</span>
|
||||
{% elif s.enabled %}<span class="badge badge-green">on</span>
|
||||
{% else %}<span class="badge badge-red">off</span>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}<p class="muted">None.</p>{% endif %}
|
||||
|
||||
<div class="op-sub">XFTP — files ({{ op.xftp | length }})</div>
|
||||
{% if op.xftp %}
|
||||
<table class="srv-table">
|
||||
{% for s in op.xftp %}
|
||||
<tr class="{% if not s.enabled or s.deleted %}srv-off{% endif %}">
|
||||
<td class="srv-host">{{ s.host }}</td>
|
||||
<td style="text-align:right;">
|
||||
{% if s.preset %}<span class="tag">preset</span>{% endif %}
|
||||
{% if s.deleted %}<span class="badge badge-red">deleted</span>
|
||||
{% elif s.enabled %}<span class="badge badge-green">on</span>
|
||||
{% else %}<span class="badge badge-red">off</span>{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}<p class="muted">None.</p>{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user