mirror of
https://github.com/nostrlabs-io/zap-stream-flutter.git
synced 2025-06-14 11:27:43 +00:00
@ -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,
|
||||
|
@ -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((_) {
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user