remove signal term, scroll down on logs, scroll to item on playlist generation
This commit is contained in:
parent
627f02d5f2
commit
144799e722
49
Cargo.lock
generated
49
Cargo.lock
generated
@ -341,9 +341,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "actix-web-lab"
|
||||
version = "0.22.0"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a965e3e826aa4737af33666aa09ed949aa1837706fda2adee07039347be50d6"
|
||||
checksum = "ee75923689132fc5fb57ccc5bb98d25bb214796a29cd505844eb3b42daf11df0"
|
||||
dependencies = [
|
||||
"actix-http",
|
||||
"actix-router",
|
||||
@ -366,7 +366,6 @@ dependencies = [
|
||||
"local-channel",
|
||||
"mediatype",
|
||||
"mime",
|
||||
"once_cell",
|
||||
"pin-project-lite",
|
||||
"regex",
|
||||
"serde",
|
||||
@ -380,9 +379,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "actix-web-lab-derive"
|
||||
version = "0.22.0"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "008f98f5a68eeacf5e6d44ed74ce03c1b906baa53eabfb41faf0f5f40bd685f8"
|
||||
checksum = "4c221da13534b9352f3f79fcbbd6095f6d8aee63bdf1da8a73d36f9eeea17d5a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -720,9 +719,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.7.2"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3"
|
||||
checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"
|
||||
|
||||
[[package]]
|
||||
name = "bytestring"
|
||||
@ -1233,7 +1232,6 @@ dependencies = [
|
||||
"ffprobe",
|
||||
"flexi_logger",
|
||||
"futures-util",
|
||||
"home",
|
||||
"jsonwebtoken",
|
||||
"lazy_static",
|
||||
"lettre",
|
||||
@ -1259,7 +1257,6 @@ dependencies = [
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"shlex",
|
||||
"signal-child",
|
||||
"sqlx",
|
||||
"static-files",
|
||||
"sysinfo",
|
||||
@ -1326,9 +1323,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "flexi_logger"
|
||||
version = "0.29.3"
|
||||
version = "0.29.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "719236bdbcf6033a3395165f797076b31056018e6723ccff616eb25fc9c99de1"
|
||||
checksum = "0bc6a1594377eb9de4205e15e33e222c996de8dc047f7c998cc477030bfac48a"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"log",
|
||||
@ -2592,9 +2589,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.88"
|
||||
version = "1.0.89"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9"
|
||||
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@ -3011,18 +3008,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.210"
|
||||
version = "1.0.213"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
|
||||
checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.210"
|
||||
version = "1.0.213"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
|
||||
checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -3186,12 +3183,6 @@ version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "signal-child"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3184fa464a0128cbcc353100ae752a848bc0067dd5715a50550f31570051150"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.2"
|
||||
@ -3715,18 +3706,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.64"
|
||||
version = "1.0.65"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84"
|
||||
checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.64"
|
||||
version = "1.0.65"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
|
||||
checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -3791,9 +3782,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.40.0"
|
||||
version = "1.41.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998"
|
||||
checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
|
@ -18,7 +18,7 @@ actix-multipart = "0.7"
|
||||
actix-web = "4"
|
||||
actix-web-grants = "4"
|
||||
actix-web-httpauth = "0.8"
|
||||
actix-web-lab = "0.22"
|
||||
actix-web-lab = "0.23"
|
||||
actix-web-static-files = "4.0"
|
||||
argon2 = "0.5"
|
||||
chrono = { version = "0.4", default-features = false, features = ["clock", "std", "serde"] }
|
||||
@ -29,7 +29,6 @@ faccess = "0.2"
|
||||
ffprobe = "0.4"
|
||||
flexi_logger = { version = "0.29", features = ["kv", "colors"] }
|
||||
futures-util = { version = "0.3", default-features = false, features = ["std"] }
|
||||
home = "0.5"
|
||||
jsonwebtoken = "9"
|
||||
lazy_static = "1.4"
|
||||
lettre = { version = "0.11", features = ["builder", "rustls-tls", "smtp-transport", "tokio1", "tokio1-rustls-tls"], default-features = false }
|
||||
@ -70,9 +69,6 @@ zeromq = { version = "0.4", default-features = false, features = [
|
||||
"tcp-transport",
|
||||
] }
|
||||
|
||||
[target.'cfg(not(target_arch = "windows"))'.dependencies]
|
||||
signal-child = "1"
|
||||
|
||||
[build-dependencies]
|
||||
static-files = "0.2"
|
||||
|
||||
|
@ -984,10 +984,10 @@ pub async fn process_control(
|
||||
}
|
||||
ProcessCtl::Stop => {
|
||||
manager.channel.lock().unwrap().active = false;
|
||||
manager.async_stop().await;
|
||||
manager.async_stop().await?;
|
||||
}
|
||||
ProcessCtl::Restart => {
|
||||
manager.async_stop().await;
|
||||
manager.async_stop().await?;
|
||||
tokio::time::sleep(tokio::time::Duration::from_millis(1500)).await;
|
||||
|
||||
if !manager.is_alive.load(Ordering::SeqCst) {
|
||||
|
@ -11,9 +11,7 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
#[cfg(not(windows))]
|
||||
use signal_child::Signalable;
|
||||
|
||||
use actix_web::web;
|
||||
use log::*;
|
||||
use m3u8_rs::Playlist;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -26,7 +24,7 @@ use crate::player::{
|
||||
};
|
||||
use crate::utils::{
|
||||
config::{OutputMode::*, PlayoutConfig},
|
||||
errors::ProcessError,
|
||||
errors::{ProcessError, ServiceError},
|
||||
};
|
||||
use crate::ARGS;
|
||||
use crate::{
|
||||
@ -203,11 +201,6 @@ impl ChannelManager {
|
||||
match unit {
|
||||
Decoder => {
|
||||
if let Some(proc) = self.decoder.lock()?.as_mut() {
|
||||
#[cfg(not(windows))]
|
||||
proc.term()
|
||||
.map_err(|e| ProcessError::Custom(format!("Decoder: {e}")))?;
|
||||
|
||||
#[cfg(windows)]
|
||||
proc.kill()
|
||||
.map_err(|e| ProcessError::Custom(format!("Decoder: {e}")))?;
|
||||
}
|
||||
@ -258,7 +251,7 @@ impl ChannelManager {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn async_stop(&self) {
|
||||
pub async fn async_stop(&self) -> Result<(), ServiceError> {
|
||||
self.is_terminated.store(true, Ordering::SeqCst);
|
||||
self.is_alive.store(false, Ordering::SeqCst);
|
||||
self.ingest_is_running.store(false, Ordering::SeqCst);
|
||||
@ -272,12 +265,16 @@ impl ChannelManager {
|
||||
};
|
||||
|
||||
for unit in [Decoder, Encoder, Ingest] {
|
||||
if let Err(e) = self.stop(unit) {
|
||||
let self_clone = self.clone();
|
||||
|
||||
if let Err(e) = web::block(move || self_clone.stop(unit)).await? {
|
||||
if !e.to_string().contains("exited process") {
|
||||
error!(target: Target::all(), channel = channel_id; "{e}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// No matter what is running, terminate them all.
|
||||
|
@ -420,6 +420,7 @@ async function generatePlaylist() {
|
||||
resetCheckboxes()
|
||||
resetTemplate()
|
||||
|
||||
playlistStore.scrollToItem = true
|
||||
playlistStore.isLoading = false
|
||||
}
|
||||
</script>
|
||||
|
@ -140,7 +140,7 @@ const playlistContainer = ref()
|
||||
const sortContainer = ref()
|
||||
const todayDate = ref($dayjs().utcOffset(configStore.utcOffset).format('YYYY-MM-DD'))
|
||||
const { i } = storeToRefs(useConfig())
|
||||
const { currentIndex, listDate, playoutIsRunning } = storeToRefs(usePlaylist())
|
||||
const { currentIndex, listDate, playoutIsRunning, scrollToItem } = storeToRefs(usePlaylist())
|
||||
|
||||
const playlistSortOptions = {
|
||||
group: 'playlist',
|
||||
@ -175,10 +175,14 @@ watch([listDate, i], () => {
|
||||
}, 800)
|
||||
})
|
||||
|
||||
watch([playoutIsRunning], () => {
|
||||
setTimeout(() => {
|
||||
scrollTo(currentIndex.value)
|
||||
}, 400)
|
||||
watch([playoutIsRunning, scrollToItem], () => {
|
||||
if (playoutIsRunning.value || scrollToItem.value) {
|
||||
setTimeout(() => {
|
||||
scrollTo(currentIndex.value)
|
||||
|
||||
scrollToItem.value = false
|
||||
}, 400)
|
||||
}
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
|
@ -34,10 +34,9 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-3 inline-block h-[calc(100vh-140px)] text-[13px]">
|
||||
<div
|
||||
class="bg-base-300 whitespace-pre h-full font-mono overflow-auto p-3"
|
||||
v-html="filterLogsBySeverity(formatLog(currentLog), errorLevel)"
|
||||
/>
|
||||
<div id="log-container" class="bg-base-300 whitespace-pre h-full font-mono overflow-auto p-3">
|
||||
<div id="log-content" v-html="filterLogsBySeverity(formatLog(currentLog), errorLevel)" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -88,7 +87,16 @@ watch([listDate, i], () => {
|
||||
})
|
||||
|
||||
const calendarFormat = (date: Date) => {
|
||||
return $dayjs(date).locale(locale.value).format('ddd L')
|
||||
return $dayjs(date).locale(locale.value).format('ddd L')
|
||||
}
|
||||
|
||||
function scrollTo() {
|
||||
const parent = document.getElementById('log-container')
|
||||
const child = document.getElementById('log-content')
|
||||
|
||||
if (child && parent) {
|
||||
parent.scrollTop = child.scrollHeight
|
||||
}
|
||||
}
|
||||
|
||||
function filterLogsBySeverity(logString: string, minSeverity: string): string {
|
||||
@ -121,6 +129,10 @@ async function getLog() {
|
||||
.then((response) => response.text())
|
||||
.then((data) => {
|
||||
currentLog.value = data
|
||||
|
||||
nextTick(() => {
|
||||
scrollTo()
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
currentLog.value = ''
|
||||
|
@ -330,14 +330,6 @@ useHead({
|
||||
title: `${t('button.media')} | ffplayout`,
|
||||
})
|
||||
|
||||
watch([width], () => {
|
||||
if (width.value < 640) {
|
||||
horizontal.value = true
|
||||
} else {
|
||||
horizontal.value = false
|
||||
}
|
||||
})
|
||||
|
||||
const horizontal = ref(false)
|
||||
const deleteName = ref('')
|
||||
const recursive = ref(false)
|
||||
@ -384,6 +376,14 @@ onMounted(async () => {
|
||||
}
|
||||
})
|
||||
|
||||
watch([width], () => {
|
||||
if (width.value < 640) {
|
||||
horizontal.value = true
|
||||
} else {
|
||||
horizontal.value = false
|
||||
}
|
||||
})
|
||||
|
||||
watch([i], () => {
|
||||
mediaStore.getTree('')
|
||||
})
|
||||
|
@ -24,6 +24,7 @@ export const usePlaylist = defineStore('playlist', {
|
||||
playoutIsRunning: false,
|
||||
last_channel: 0,
|
||||
firstLoad: true,
|
||||
scrollToItem: false,
|
||||
}),
|
||||
|
||||
getters: {},
|
||||
|
Loading…
Reference in New Issue
Block a user