Compare commits
8 Commits
letterbox-
...
letterbox-
| Author | SHA1 | Date | |
|---|---|---|---|
| 122e949072 | |||
| 9a69b4c51e | |||
| 251151244b | |||
| 9d232b666b | |||
| 1832d77e78 | |||
| aca6bce1ff | |||
| 7bb2f405da | |||
| 60e2824167 |
10
Cargo.lock
generated
10
Cargo.lock
generated
@@ -2995,7 +2995,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-notmuch"
|
name = "letterbox-notmuch"
|
||||||
version = "0.15.3"
|
version = "0.15.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
@@ -3010,14 +3010,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-procmail2notmuch"
|
name = "letterbox-procmail2notmuch"
|
||||||
version = "0.15.3"
|
version = "0.15.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-server"
|
name = "letterbox-server"
|
||||||
version = "0.15.3"
|
version = "0.15.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ammonia",
|
"ammonia",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -3061,7 +3061,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-shared"
|
name = "letterbox-shared"
|
||||||
version = "0.15.3"
|
version = "0.15.7"
|
||||||
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.3"
|
version = "0.15.7"
|
||||||
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.3"
|
version = "0.15.7"
|
||||||
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.3", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.7", path = "../notmuch", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.15.3", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.15.7", 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"
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ async fn start_ws(
|
|||||||
connection_tracker, ..
|
connection_tracker, ..
|
||||||
}): State<AppState>,
|
}): State<AppState>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
|
info!("intiating websocket connection for {addr}");
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -135,25 +135,23 @@ pub fn tags(nm: &Notmuch, needs_unread: bool) -> Result<Vec<Tag>, ServerError> {
|
|||||||
unread,
|
unread,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
/*
|
.chain(
|
||||||
.chain(
|
nm.unread_recipients()?
|
||||||
nm.unread_recipients()?
|
.into_iter()
|
||||||
.into_iter()
|
.filter_map(|(name, unread)| {
|
||||||
.filter_map(|(name, unread)| {
|
let Some(idx) = name.find('@') else {
|
||||||
let Some(idx) = name.find('@') else {
|
return None;
|
||||||
return None;
|
};
|
||||||
};
|
let name = format!("{}/{}", &name[idx..], &name[..idx]);
|
||||||
let name = format!("{}/{}", &name[idx..], &name[..idx]);
|
let bg_color = compute_color(&name);
|
||||||
let bg_color = compute_color(&name);
|
Some(Tag {
|
||||||
Some(Tag {
|
name,
|
||||||
name,
|
fg_color: "white".to_string(),
|
||||||
fg_color: "white".to_string(),
|
bg_color,
|
||||||
bg_color,
|
unread,
|
||||||
unread,
|
})
|
||||||
})
|
}),
|
||||||
}),
|
)
|
||||||
)
|
|
||||||
*/
|
|
||||||
.collect();
|
.collect();
|
||||||
Ok(tags)
|
Ok(tags)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ version.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
build-info = "0.0.40"
|
build-info = "0.0.40"
|
||||||
letterbox-notmuch = { version = "0.15.3", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.7", 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.3", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.15.7", path = "../shared", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.15.3", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.15.7", 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"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ pub fn init(url: Url, orders: &mut impl Orders<Msg>) -> Model {
|
|||||||
},
|
},
|
||||||
catchup: None,
|
catchup: None,
|
||||||
last_url: Url::current(),
|
last_url: Url::current(),
|
||||||
websocket: websocket::init(&mut orders.proxy(Msg::WebSocket)),
|
websocket: websocket::init("/api/ws", &mut orders.proxy(Msg::WebSocket)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -541,13 +541,19 @@ fn search_toolbar(
|
|||||||
tw_classes::button(),
|
tw_classes::button(),
|
||||||
IF!(!pager.has_previous_page => attrs!{ At::Disabled=>true }),
|
IF!(!pager.has_previous_page => attrs!{ At::Disabled=>true }),
|
||||||
"<",
|
"<",
|
||||||
IF!(pager.has_previous_page => ev(Ev::Click, |_| Msg::PreviousPage)),
|
IF!(pager.has_previous_page => ev(
|
||||||
|
Ev::Click, |_| Msg::MultiMsg(vec![
|
||||||
|
Msg::ScrollToTop,
|
||||||
|
Msg::PreviousPage]))),
|
||||||
],
|
],
|
||||||
button![
|
button![
|
||||||
tw_classes::button(),
|
tw_classes::button(),
|
||||||
IF!(!pager.has_next_page => attrs!{ At::Disabled=>true }),
|
IF!(!pager.has_next_page => attrs!{ At::Disabled=>true }),
|
||||||
">",
|
">",
|
||||||
IF!(pager.has_next_page => ev(Ev::Click, |_| Msg::NextPage))
|
IF!(pager.has_next_page => ev(
|
||||||
|
Ev::Click, |_| Msg::MultiMsg(vec![
|
||||||
|
Msg::ScrollToTop,
|
||||||
|
Msg::NextPage])))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -78,13 +78,14 @@ pub struct ClientMessage {
|
|||||||
|
|
||||||
//const WS_URL: &str = "wss://9000.z.xinu.tv/api/ws";
|
//const WS_URL: &str = "wss://9000.z.xinu.tv/api/ws";
|
||||||
//const WS_URL: &str = "wss://9345.z.xinu.tv/api/graphql/ws";
|
//const WS_URL: &str = "wss://9345.z.xinu.tv/api/graphql/ws";
|
||||||
const WS_URL: &str = "wss://6758.z.xinu.tv/api/ws";
|
//const WS_URL: &str = "wss://6758.z.xinu.tv/api/ws";
|
||||||
|
|
||||||
// ------ ------
|
// ------ ------
|
||||||
// Model
|
// Model
|
||||||
// ------ ------
|
// ------ ------
|
||||||
|
|
||||||
pub struct Model {
|
pub struct Model {
|
||||||
|
ws_url: String,
|
||||||
web_socket: EventClient,
|
web_socket: EventClient,
|
||||||
web_socket_reconnector: Option<StreamHandle>,
|
web_socket_reconnector: Option<StreamHandle>,
|
||||||
pub updates: VecDeque<WebsocketMessage>,
|
pub updates: VecDeque<WebsocketMessage>,
|
||||||
@@ -94,9 +95,10 @@ pub struct Model {
|
|||||||
// Init
|
// Init
|
||||||
// ------ ------
|
// ------ ------
|
||||||
|
|
||||||
pub fn init(orders: &mut impl Orders<Msg>) -> Model {
|
pub fn init(ws_url: &str, orders: &mut impl Orders<Msg>) -> Model {
|
||||||
Model {
|
Model {
|
||||||
web_socket: create_websocket(orders).unwrap(),
|
ws_url: ws_url.to_string(),
|
||||||
|
web_socket: create_websocket(ws_url, orders).unwrap(),
|
||||||
web_socket_reconnector: None,
|
web_socket_reconnector: None,
|
||||||
updates: VecDeque::new(),
|
updates: VecDeque::new(),
|
||||||
}
|
}
|
||||||
@@ -155,7 +157,7 @@ Reason: {2}
|
|||||||
}
|
}
|
||||||
Msg::ReconnectWebSocket(retries) => {
|
Msg::ReconnectWebSocket(retries) => {
|
||||||
info!("Reconnect attempt: {}", retries);
|
info!("Reconnect attempt: {}", retries);
|
||||||
model.web_socket = create_websocket(orders).unwrap();
|
model.web_socket = create_websocket(&model.ws_url, orders).unwrap();
|
||||||
}
|
}
|
||||||
Msg::SendMessage(msg) => {
|
Msg::SendMessage(msg) => {
|
||||||
let txt = serde_json::to_string(&msg).unwrap();
|
let txt = serde_json::to_string(&msg).unwrap();
|
||||||
@@ -164,10 +166,10 @@ Reason: {2}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_websocket(orders: &impl Orders<Msg>) -> Result<EventClient, WebSocketError> {
|
fn create_websocket(url: &str, orders: &impl Orders<Msg>) -> Result<EventClient, WebSocketError> {
|
||||||
let msg_sender = orders.msg_sender();
|
let msg_sender = orders.msg_sender();
|
||||||
|
|
||||||
let mut client = EventClient::new(WS_URL)?;
|
let mut client = EventClient::new(url)?;
|
||||||
|
|
||||||
client.set_on_error(Some(Box::new(|error| {
|
client.set_on_error(Some(Box::new(|error| {
|
||||||
gloo_console::error!("WS: ", error);
|
gloo_console::error!("WS: ", error);
|
||||||
|
|||||||
Reference in New Issue
Block a user