mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-18 13:52:20 +02:00
Completly refactored connection management
This commit is contained in:
@@ -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) => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user