feat: improve variant display and stream editing

closes #45
This commit is contained in:
2025-06-03 10:25:26 +01:00
parent f553ecdab3
commit 8605761dff
3 changed files with 30 additions and 8 deletions

View File

@ -143,6 +143,7 @@ class ZapStreamApi {
}
Future<void> updateDefaultStreamInfo({
String? id,
String? title,
String? summary,
String? image,
@ -154,6 +155,7 @@ class ZapStreamApi {
await _sendPatchRequest(
url,
body: {
"id": id,
"title": title,
"summary": summary,
"image": image,

View File

@ -177,6 +177,7 @@ class _LivePage extends State<LivePage>
builder: (context, streamState) {
final ev = streamState
?.sortedBy((e) => e.createdAt)
.reversed
.firstWhereOrNull((e) => e.getFirstTag("status") == "live");
final stream = ev != null ? StreamEvent(ev) : null;
@ -337,6 +338,7 @@ class _LivePage extends State<LivePage>
api: _api,
account: _account!,
hideEndpointConfig: _streaming,
currentStream: ev,
);
},
).then((_) {

View File

@ -1,6 +1,7 @@
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:ndk/entities.dart';
import 'package:zap_stream_flutter/api.dart';
import 'package:zap_stream_flutter/const.dart';
import 'package:zap_stream_flutter/i18n/strings.g.dart';
@ -12,12 +13,14 @@ class StreamConfigWidget extends StatefulWidget {
final ZapStreamApi api;
final AccountInfo account;
final bool? hideEndpointConfig;
final Nip01Event? currentStream;
const StreamConfigWidget({
super.key,
required this.api,
required this.account,
this.hideEndpointConfig,
this.currentStream,
});
@override
@ -41,6 +44,19 @@ class _StreamConfigWidget extends State<StreamConfigWidget> {
super.initState();
}
Widget _variantWidget(String cap) {
if (cap.startsWith("variant:")) {
final caps = cap.split(":");
return PillWidget(
color: LAYER_3,
child: Text(caps[1].replaceAll("h", "p")),
);
} else if (cap.startsWith("dvr:")) {
return PillWidget(color: LAYER_3, child: Text("Recording"));
}
return PillWidget(color: LAYER_3, child: Text(cap));
}
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
@ -88,14 +104,15 @@ class _StreamConfigWidget extends State<StreamConfigWidget> {
],
),
if (endpoint != null && !(widget.hideEndpointConfig ?? false))
Row(
spacing: 8,
children:
endpoint.capabilities
.map(
(e) => PillWidget(color: LAYER_3, child: Text(e)),
)
.toList(),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
spacing: 8,
children:
endpoint.capabilities
.map((e) => _variantWidget(e))
.toList(),
),
),
TextField(
@ -155,6 +172,7 @@ class _StreamConfigWidget extends State<StreamConfigWidget> {
t.button.save,
onTap: (context) async {
await widget.api.updateDefaultStreamInfo(
id: widget.currentStream?.getFirstTag("d"),
title: _title.text,
summary: _summary.text,
contentWarning: _nsfw ? "nsfw" : null,