Compare commits
2 Commits
221b4f10df
...
92b880f03b
| Author | SHA1 | Date | |
|---|---|---|---|
| 92b880f03b | |||
| 94f1e84857 |
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -2995,7 +2995,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-notmuch"
|
name = "letterbox-notmuch"
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
@ -3010,14 +3010,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-procmail2notmuch"
|
name = "letterbox-procmail2notmuch"
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-server"
|
name = "letterbox-server"
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ammonia",
|
"ammonia",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -3061,7 +3061,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-shared"
|
name = "letterbox-shared"
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"letterbox-notmuch",
|
"letterbox-notmuch",
|
||||||
@ -3071,7 +3071,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-web"
|
name = "letterbox-web"
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"build-info-build",
|
"build-info-build",
|
||||||
|
|||||||
@ -8,7 +8,7 @@ authors = ["Bill Thiede <git@xinu.tv>"]
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "UNLICENSED"
|
license = "UNLICENSED"
|
||||||
publish = ["xinu"]
|
publish = ["xinu"]
|
||||||
version = "0.15.1"
|
version = "0.15.2"
|
||||||
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|||||||
@ -27,8 +27,8 @@ css-inline = "0.14.0"
|
|||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
headers = "0.4.0"
|
headers = "0.4.0"
|
||||||
html-escape = "0.2.13"
|
html-escape = "0.2.13"
|
||||||
letterbox-notmuch = { version = "0.15.1", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.2", path = "../notmuch", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.15.1", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.15.2", path = "../shared", registry = "xinu" }
|
||||||
linkify = "0.10.0"
|
linkify = "0.10.0"
|
||||||
log = "0.4.17"
|
log = "0.4.17"
|
||||||
lol_html = "2.0.0"
|
lol_html = "2.0.0"
|
||||||
|
|||||||
@ -8,10 +8,10 @@ use async_graphql_axum::{GraphQL, GraphQLSubscription};
|
|||||||
//allows to extract the IP of connecting user
|
//allows to extract the IP of connecting user
|
||||||
use axum::extract::connect_info::ConnectInfo;
|
use axum::extract::connect_info::ConnectInfo;
|
||||||
use axum::{
|
use axum::{
|
||||||
extract::{self, ws::WebSocketUpgrade, State},
|
extract::{self, ws::WebSocketUpgrade, Query, State},
|
||||||
http::{header, StatusCode},
|
http::{header, StatusCode},
|
||||||
response::{self, IntoResponse, Response},
|
response::{self, IntoResponse, Response},
|
||||||
routing::{any, get},
|
routing::{any, get, post},
|
||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
use cacher::FilesystemCacher;
|
use cacher::FilesystemCacher;
|
||||||
@ -25,6 +25,7 @@ use letterbox_server::{
|
|||||||
ws::ConnectionTracker,
|
ws::ConnectionTracker,
|
||||||
};
|
};
|
||||||
use letterbox_shared::WebsocketMessage;
|
use letterbox_shared::WebsocketMessage;
|
||||||
|
use serde::Deserialize;
|
||||||
use sqlx::postgres::PgPool;
|
use sqlx::postgres::PgPool;
|
||||||
use tokio::{net::TcpListener, sync::Mutex};
|
use tokio::{net::TcpListener, sync::Mutex};
|
||||||
use tower_http::trace::{DefaultMakeSpan, TraceLayer};
|
use tower_http::trace::{DefaultMakeSpan, TraceLayer};
|
||||||
@ -159,18 +160,29 @@ async fn start_ws(
|
|||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
ws.on_upgrade(async move |socket| connection_tracker.lock().await.add_peer(socket, addr).await)
|
ws.on_upgrade(async move |socket| connection_tracker.lock().await.add_peer(socket, addr).await)
|
||||||
}
|
}
|
||||||
#[axum_macros::debug_handler]
|
|
||||||
async fn test_handler(
|
#[derive(Debug, Deserialize)]
|
||||||
|
struct NotificationParams {
|
||||||
|
delay_ms: Option<u64>,
|
||||||
|
}
|
||||||
|
async fn send_refresh_websocket_handler(
|
||||||
State(AppState {
|
State(AppState {
|
||||||
connection_tracker, ..
|
connection_tracker, ..
|
||||||
}): State<AppState>,
|
}): State<AppState>,
|
||||||
|
params: Query<NotificationParams>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
|
info!("send_refresh_websocket_handler params {params:?}");
|
||||||
|
if let Some(delay_ms) = params.delay_ms {
|
||||||
|
let delay = Duration::from_millis(delay_ms);
|
||||||
|
info!("sleeping {delay:?}");
|
||||||
|
tokio::time::sleep(delay).await;
|
||||||
|
}
|
||||||
connection_tracker
|
connection_tracker
|
||||||
.lock()
|
.lock()
|
||||||
.await
|
.await
|
||||||
.send_message_all(WebsocketMessage::RefreshMessages)
|
.send_message_all(WebsocketMessage::RefreshMessages)
|
||||||
.await;
|
.await;
|
||||||
"test triggered"
|
"refresh triggered"
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn watch_new(
|
async fn watch_new(
|
||||||
@ -240,23 +252,26 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let poll_time = Duration::from_secs(10);
|
let poll_time = Duration::from_secs(10);
|
||||||
let _h = tokio::spawn(watch_new(nm.clone(), pool, ct, poll_time));
|
let _h = tokio::spawn(watch_new(nm.clone(), pool, ct, poll_time));
|
||||||
|
|
||||||
let app = Router::new()
|
let api_routes = Router::new()
|
||||||
.route("/test", get(test_handler))
|
|
||||||
.route(
|
.route(
|
||||||
"/api/download/attachment/{id}/{idx}/{*rest}",
|
"/download/attachment/{id}/{idx}/{*rest}",
|
||||||
get(download_attachment),
|
get(download_attachment),
|
||||||
)
|
)
|
||||||
|
.route("/view/attachment/{id}/{idx}/{*rest}", get(view_attachment))
|
||||||
|
.route("/cid/{id}/{cid}", get(view_cid))
|
||||||
|
.route("/ws", any(start_ws))
|
||||||
|
.route_service("/graphql/ws", GraphQLSubscription::new(schema.clone()))
|
||||||
.route(
|
.route(
|
||||||
"/api/view/attachment/{id}/{idx}/{*rest}",
|
"/graphql/",
|
||||||
get(view_attachment),
|
|
||||||
)
|
|
||||||
.route("/api/cid/{id}/{cid}", get(view_cid))
|
|
||||||
.route("/api/ws", any(start_ws))
|
|
||||||
.route_service("/api/graphql/ws", GraphQLSubscription::new(schema.clone()))
|
|
||||||
.route(
|
|
||||||
"/api/graphql/",
|
|
||||||
get(graphiql).post_service(GraphQL::new(schema.clone())),
|
get(graphiql).post_service(GraphQL::new(schema.clone())),
|
||||||
)
|
);
|
||||||
|
|
||||||
|
let notification_routes = Router::new()
|
||||||
|
.route("/mail", post(send_refresh_websocket_handler))
|
||||||
|
.route("/news", post(send_refresh_websocket_handler));
|
||||||
|
let app = Router::new()
|
||||||
|
.nest("/api", api_routes)
|
||||||
|
.nest("/notification", notification_routes)
|
||||||
.with_state(AppState {
|
.with_state(AppState {
|
||||||
nm,
|
nm,
|
||||||
connection_tracker,
|
connection_tracker,
|
||||||
|
|||||||
@ -12,6 +12,6 @@ version.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
build-info = "0.0.40"
|
build-info = "0.0.40"
|
||||||
letterbox-notmuch = { version = "0.15.1", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.2", path = "../notmuch", registry = "xinu" }
|
||||||
serde = { version = "1.0.147", features = ["derive"] }
|
serde = { version = "1.0.147", features = ["derive"] }
|
||||||
strum_macros = "0.27.1"
|
strum_macros = "0.27.1"
|
||||||
|
|||||||
@ -33,8 +33,8 @@ wasm-bindgen = "=0.2.100"
|
|||||||
uuid = { version = "1.13.1", features = [
|
uuid = { version = "1.13.1", features = [
|
||||||
"js",
|
"js",
|
||||||
] } # direct dep to set js feature, prevents Rng issues
|
] } # direct dep to set js feature, prevents Rng issues
|
||||||
letterbox-shared = { version = "0.15.1", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.15.2", path = "../shared", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.15.1", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.2", path = "../notmuch", registry = "xinu" }
|
||||||
seed_hooks = { version = "0.4.0", registry = "xinu" }
|
seed_hooks = { version = "0.4.0", registry = "xinu" }
|
||||||
strum_macros = "0.27.1"
|
strum_macros = "0.27.1"
|
||||||
gloo-console = "0.3.0"
|
gloo-console = "0.3.0"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user