mirror of
https://github.com/sergi0g/cup.git
synced 2025-11-08 05:03:49 -05:00
feat: add timezone support
This commit is contained in:
75
Cargo.lock
generated
75
Cargo.lock
generated
@@ -260,6 +260,27 @@ dependencies = [
|
|||||||
"windows-link",
|
"windows-link",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono-tz"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "efdce149c370f133a071ca8ef6ea340b7b88748ab0810097a9e2976eaa34b4f3"
|
||||||
|
dependencies = [
|
||||||
|
"chrono",
|
||||||
|
"chrono-tz-build",
|
||||||
|
"phf",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono-tz-build"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f10f8c9340e31fc120ff885fcdb54a0b48e474bbd77cab557f0c30a3e569402"
|
||||||
|
dependencies = [
|
||||||
|
"parse-zoneinfo",
|
||||||
|
"phf_codegen",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.31"
|
version = "4.5.31"
|
||||||
@@ -359,6 +380,7 @@ version = "3.3.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"bollard",
|
"bollard",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"chrono-tz",
|
||||||
"clap",
|
"clap",
|
||||||
"envy",
|
"envy",
|
||||||
"futures",
|
"futures",
|
||||||
@@ -1202,6 +1224,15 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parse-zoneinfo"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
|
||||||
|
dependencies = [
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "percent-encoding"
|
name = "percent-encoding"
|
||||||
version = "2.3.1"
|
version = "2.3.1"
|
||||||
@@ -1253,6 +1284,44 @@ dependencies = [
|
|||||||
"sha2",
|
"sha2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "phf"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
|
||||||
|
dependencies = [
|
||||||
|
"phf_shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "phf_codegen"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
|
||||||
|
dependencies = [
|
||||||
|
"phf_generator",
|
||||||
|
"phf_shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "phf_generator"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
|
||||||
|
dependencies = [
|
||||||
|
"phf_shared",
|
||||||
|
"rand",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "phf_shared"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
|
||||||
|
dependencies = [
|
||||||
|
"siphasher",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
@@ -1698,6 +1767,12 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "siphasher"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "slab"
|
name = "slab"
|
||||||
version = "0.4.9"
|
version = "0.4.9"
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ serde_json = "1.0.133"
|
|||||||
serde = "1.0.215"
|
serde = "1.0.215"
|
||||||
tokio-cron-scheduler = { version = "0.13.0", default-features = false, optional = true }
|
tokio-cron-scheduler = { version = "0.13.0", default-features = false, optional = true }
|
||||||
envy = "0.4.2"
|
envy = "0.4.2"
|
||||||
|
chrono-tz = "0.10.3"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["server", "cli"]
|
default = ["server", "cli"]
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use std::sync::Arc;
|
use std::{env, sync::Arc};
|
||||||
|
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
|
use chrono_tz::Tz;
|
||||||
use liquid::{object, Object, ValueView};
|
use liquid::{object, Object, ValueView};
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
@@ -54,15 +55,22 @@ pub async fn serve(port: &u16, ctx: &Context) -> std::io::Result<()> {
|
|||||||
let scheduler = JobScheduler::new().await.unwrap();
|
let scheduler = JobScheduler::new().await.unwrap();
|
||||||
let data = Arc::new(Mutex::new(data));
|
let data = Arc::new(Mutex::new(data));
|
||||||
let data_copy = data.clone();
|
let data_copy = data.clone();
|
||||||
|
let tz = env::var("TZ")
|
||||||
|
.map(|tz| tz.parse().unwrap_or(Tz::UTC))
|
||||||
|
.unwrap_or(Tz::UTC);
|
||||||
if let Some(interval) = &ctx.config.refresh_interval {
|
if let Some(interval) = &ctx.config.refresh_interval {
|
||||||
scheduler
|
scheduler
|
||||||
.add(
|
.add(
|
||||||
match Job::new_async(interval, move |_uuid, _lock| {
|
match Job::new_async_tz(
|
||||||
let data_copy = data_copy.clone();
|
interval,
|
||||||
Box::pin(async move {
|
tz,
|
||||||
data_copy.lock().await.refresh().await;
|
move |_uuid, _lock| {
|
||||||
})
|
let data_copy = data_copy.clone();
|
||||||
}) {
|
Box::pin(async move {
|
||||||
|
data_copy.lock().await.refresh().await;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
) {
|
||||||
Ok(job) => job,
|
Ok(job) => job,
|
||||||
Err(e) => match e {
|
Err(e) => match e {
|
||||||
tokio_cron_scheduler::JobSchedulerError::ParseSchedule => error!(
|
tokio_cron_scheduler::JobSchedulerError::ParseSchedule => error!(
|
||||||
|
|||||||
Reference in New Issue
Block a user