Completly refactored connection management

This commit is contained in:
euzu
2025-11-04 23:32:17 +01:00
parent 6b09f30a51
commit c47c170df7
9 changed files with 47 additions and 60 deletions
+1 -1
View File
@@ -328,7 +328,7 @@ impl ActiveUserManager {
if let Some(session) = connection_data.sessions.iter_mut().find(|session| session.token == token) {
let previous_addr = session.addr;
session.addr = *addr;
for stream in connection_data.streams.iter_mut() {
for stream in &mut connection_data.streams {
if stream.addr == previous_addr {
stream.addr = *addr;
}
@@ -337,7 +337,7 @@ impl MultiProviderLineup {
ProviderAllocation::Exhausted
}
// Used for redirect to cylce through provider
// Used for redirect to cyclce through provider
async fn get_next_provider_from_group(priority_group: &ProviderPriorityGroup, grace: bool, grace_period_timeout_secs: u64) -> Option<Arc<ProviderConfig>> {
match priority_group {
ProviderPriorityGroup::SingleProviderGroup(p) => {
+1 -2
View File
@@ -124,7 +124,6 @@
border-radius: 2px 2px 0 0;
}
.tp__tab-button,
.tp__tab-button.active::after {
.tp__tab-button {
transition: all 0.25s ease;
}
@@ -29,7 +29,18 @@
.tp__streams-table {
.tp__table__th {
$column-widths: 40px, 100px /*username*/, 120px /*stream_id*/, 80px /*type*/, 200px /*channel*/, 120px, 90px, 80px, 90px, 80px;
$column-widths:
40px, /*index*/
100px, /*username*/
120px, /*stream_id*/
80px, /*type*/
200px, /*channel*/
120px,
90px,
80px,
90px,
80px;
@for $i from 1 through length($column-widths) {
&--#{$i} {
@include size.fixed-width(nth($column-widths, $i));
@@ -65,7 +65,7 @@
&__connections {
position: absolute;
left: 0;
top:0;
top: 0;
box-sizing: border-box;
width: 100%;
height: 100%;
@@ -166,6 +166,19 @@ $port-size: 10px;
}
}
@mixin brick-handle-gradient($bg-color, $border-color) {
background: repeating-linear-gradient(
-55deg,
$bg-color,
$bg-color 10px,
$border-color 10px,
$border-color 20px
);
border-left: 1px solid $border-color;
border-top: 1px solid $border-color;
border-right: 1px solid $border-color;
}
.tp__source-editor__block {
&-InputXtream,
&-InputM3u {
@@ -175,16 +188,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-input-background-color),
var(--brick-input-background-color) 10px,
var(--brick-input-border-color) 10px,
var(--brick-input-border-color) 20px
var(--brick-input-border-color)
);
border-left: 1px solid var(--brick-input-border-color);
border-top: 1px solid var(--brick-input-border-color);
border-right: 1px solid var(--brick-input-border-color);
}
}
@@ -196,16 +203,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-target-background-color),
var(--brick-target-background-color) 10px,
var(--brick-target-border-color) 10px,
var(--brick-target-border-color) 20px
var(--brick-target-border-color)
);
border-left: 1px solid var(--brick-target-border-color);
border-top: 1px solid var(--brick-target-border-color);
border-right: 1px solid var(--brick-target-border-color);
}
}
@@ -217,16 +218,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-output-m3u-background-color),
var(--brick-output-m3u-background-color) 10px,
var(--brick-output-m3u-border-color) 10px,
var(--brick-output-m3u-border-color) 20px
var(--brick-output-m3u-border-color)
);
border-left: 1px solid var(--brick-output-m3u-border-color);
border-top: 1px solid var(--brick-output-m3u-border-color);
border-right: 1px solid var(--brick-output-m3u-border-color);
}
}
@@ -238,16 +233,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-output-xtream-background-color),
var(--brick-output-xtream-background-color) 10px,
var(--brick-output-xtream-border-color) 10px,
var(--brick-output-xtream-border-color) 20px
var(--brick-output-xtream-border-color)
);
border-left: 1px solid var(--brick-output-xtream-border-color);
border-top: 1px solid var(--brick-output-xtream-border-color);
border-right: 1px solid var(--brick-output-xtream-border-color);
}
}
@@ -258,16 +247,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-output-hdhomerun-background-color),
var(--brick-output-hdhomerun-background-color) 10px,
var(--brick-output-hdhomerun-border-color) 10px,
var(--brick-output-hdhomerun-border-color) 20px
var(--brick-output-hdhomerun-border-color)
);
border-left: 1px solid var(--brick-output-hdhomerun-border-color);
border-top: 1px solid var(--brick-output-hdhomerun-border-color);
border-right: 1px solid var(--brick-output-hdhomerun-border-color);
}
}
@@ -278,16 +261,10 @@ $port-size: 10px;
}
.tp__source-editor__block-handle {
background: repeating-linear-gradient(
-55deg,
@include brick-handle-gradient(
var(--brick-output-strm-background-color),
var(--brick-output-strm-background-color) 10px,
var(--brick-output-strm-border-color) 10px,
var(--brick-output-strm-border-color) 20px
var(--brick-output-strm-border-color)
);
border-left: 1px solid var(--brick-output-strm-border-color);
border-top: 1px solid var(--brick-output-strm-border-color);
border-right: 1px solid var(--brick-output-strm-border-color);
}
}
}
@@ -4,7 +4,7 @@ $form-width: 300px;
position: absolute;
height: 100%;
top: 0;
left:100%;
left: 100%;
width: $form-width;
z-index: 10;
transition: all 0.4s ease;
+4 -4
View File
@@ -209,10 +209,10 @@ macro_rules! edit_field_number {
value={instance.form.$field as i64}
on_change={Callback::from(move |value: Option<i64>| {
match value {
Some(value) => {
let val = u32::try_from(value).unwrap_or(0);
instance.dispatch($action(val));
}
Some(value) => match u32::try_from(value) {
Ok(val) => instance.dispatch($action(val)),
Err(_) => return,
},
None => instance.dispatch($action(0)),
}
})}
@@ -110,7 +110,7 @@ pub fn VideoConfigView() -> Html {
html! {
<div class="tp__config-view__tags">
<ul>
{ for download_state.form.headers.iter().map(|(k,v)| html!{ <li>{"- "}{k}{": "} {v}</li> }) }
{ for download_state.form.headers.iter().map(|(k,v)| html!{ <li key={k.clone()}>{"- "}{k}{": "} {v}</li> }) }
</ul>
</div>
}