Compare commits
27 Commits
letterbox-
...
letterbox-
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d06f070ea | |||
| 527a62069a | |||
| 40afafe1a8 | |||
| e3acf9ae6d | |||
| a68d067a68 | |||
| 5547c65af0 | |||
| b622bb7d7d | |||
| 43efdf18a0 | |||
| c71ab8e9e8 | |||
| 408d6ed8ba | |||
| 1411961e36 | |||
| dfd7ef466c | |||
| 2aa3dfbd0f | |||
| fba10e27cf | |||
| 5417c74f9c | |||
| eb0b0dbe81 | |||
| 561f522658 | |||
| 32d2ffeb3d | |||
| d41946e0a5 | |||
| 61402858f4 | |||
| 17de318645 | |||
| 3aa0144e8d | |||
| f9eafff4c7 | |||
| 4c6d67901d | |||
| e9aa97a089 | |||
| a82b047f75 | |||
| 9a8b44a8df |
@@ -1,4 +1,4 @@
|
|||||||
on: [push, pull_request]
|
on: [push]
|
||||||
|
|
||||||
name: Continuous integration
|
name: Continuous integration
|
||||||
|
|
||||||
|
|||||||
646
Cargo.lock
generated
646
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ authors = ["Bill Thiede <git@xinu.tv>"]
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "UNLICENSED"
|
license = "UNLICENSED"
|
||||||
publish = ["xinu"]
|
publish = ["xinu"]
|
||||||
version = "0.9.8"
|
version = "0.10.1"
|
||||||
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ anyhow = "1.0.79"
|
|||||||
async-graphql = { version = "7", features = ["log"] }
|
async-graphql = { version = "7", features = ["log"] }
|
||||||
async-graphql-rocket = "7"
|
async-graphql-rocket = "7"
|
||||||
async-trait = "0.1.81"
|
async-trait = "0.1.81"
|
||||||
build-info = "0.0.39"
|
build-info = "0.0.40"
|
||||||
cacher = { version = "0.1.0", registry = "xinu" }
|
cacher = { version = "0.1.0", registry = "xinu" }
|
||||||
chrono = "0.4.39"
|
chrono = "0.4.39"
|
||||||
clap = { version = "4.5.23", features = ["derive"] }
|
clap = { version = "4.5.23", features = ["derive"] }
|
||||||
@@ -48,11 +48,11 @@ urlencoding = "2.1.3"
|
|||||||
#xtracing = { path = "../../xtracing" }
|
#xtracing = { path = "../../xtracing" }
|
||||||
#xtracing = { git = "http://git-private.h.xinu.tv/wathiede/xtracing.git" }
|
#xtracing = { git = "http://git-private.h.xinu.tv/wathiede/xtracing.git" }
|
||||||
xtracing = { version = "0.3.0", registry = "xinu" }
|
xtracing = { version = "0.3.0", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.9.8", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.1", path = "../notmuch", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.9.8", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.10.1", path = "../shared", registry = "xinu" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
build-info-build = "0.0.39"
|
build-info-build = "0.0.40"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
#default = [ "tantivy" ]
|
#default = [ "tantivy" ]
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ version.workspace = true
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
build-info = "0.0.39"
|
build-info = "0.0.40"
|
||||||
letterbox-notmuch = { version = "0.9.8", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.1", path = "../notmuch", registry = "xinu" }
|
||||||
serde = { version = "1.0.147", features = ["derive"] }
|
serde = { version = "1.0.147", features = ["derive"] }
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ repository.workspace = true
|
|||||||
version.workspace = true
|
version.workspace = true
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
build-info-build = "0.0.39"
|
build-info-build = "0.0.40"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
wasm-bindgen-test = "0.3.33"
|
wasm-bindgen-test = "0.3.33"
|
||||||
@@ -28,13 +28,13 @@ graphql_client = "0.14.0"
|
|||||||
thiserror = "2.0.0"
|
thiserror = "2.0.0"
|
||||||
gloo-net = { version = "0.6.0", features = ["json", "serde_json"] }
|
gloo-net = { version = "0.6.0", features = ["json", "serde_json"] }
|
||||||
human_format = "1.1.0"
|
human_format = "1.1.0"
|
||||||
build-info = "0.0.39"
|
build-info = "0.0.40"
|
||||||
wasm-bindgen = "=0.2.100"
|
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.9.8", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.10.1", path = "../shared", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.9.8", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.1", 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"
|
||||||
|
|
||||||
@@ -50,4 +50,6 @@ features = [
|
|||||||
"MediaQueryList",
|
"MediaQueryList",
|
||||||
"Navigator",
|
"Navigator",
|
||||||
"Window",
|
"Window",
|
||||||
|
"History",
|
||||||
|
"ScrollRestoration",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -29,6 +29,12 @@ pub fn unread_query() -> &'static str {
|
|||||||
pub fn init(url: Url, orders: &mut impl Orders<Msg>) -> Model {
|
pub fn init(url: Url, orders: &mut impl Orders<Msg>) -> Model {
|
||||||
let version = letterbox_shared::build_version(bi);
|
let version = letterbox_shared::build_version(bi);
|
||||||
info!("Build Info: {}", version);
|
info!("Build Info: {}", version);
|
||||||
|
// Disable restoring to scroll position when navigating
|
||||||
|
window()
|
||||||
|
.history()
|
||||||
|
.expect("couldn't get history")
|
||||||
|
.set_scroll_restoration(web_sys::ScrollRestoration::Manual)
|
||||||
|
.expect("failed to set scroll restoration to manual");
|
||||||
if url.hash().is_none() {
|
if url.hash().is_none() {
|
||||||
orders.request_url(urls::search(unread_query(), 0));
|
orders.request_url(urls::search(unread_query(), 0));
|
||||||
} else {
|
} else {
|
||||||
@@ -286,12 +292,16 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Msg::FrontPageResult(Err(e)) => error!("error FrontPageResult: {e:?}"),
|
Msg::FrontPageResult(Err(e)) => {
|
||||||
|
orders.send_msg(Msg::Reload);
|
||||||
|
error!("error FrontPageResult: {e:?}");
|
||||||
|
}
|
||||||
Msg::FrontPageResult(Ok(graphql_client::Response {
|
Msg::FrontPageResult(Ok(graphql_client::Response {
|
||||||
data: None,
|
data: None,
|
||||||
errors: None,
|
errors: None,
|
||||||
..
|
..
|
||||||
})) => {
|
})) => {
|
||||||
|
orders.send_msg(Msg::Reload);
|
||||||
error!("FrontPageResult no data or errors, should not happen");
|
error!("FrontPageResult no data or errors, should not happen");
|
||||||
}
|
}
|
||||||
Msg::FrontPageResult(Ok(graphql_client::Response {
|
Msg::FrontPageResult(Ok(graphql_client::Response {
|
||||||
@@ -299,6 +309,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
errors: Some(e),
|
errors: Some(e),
|
||||||
..
|
..
|
||||||
})) => {
|
})) => {
|
||||||
|
orders.send_msg(Msg::Reload);
|
||||||
error!("FrontPageResult error: {e:?}");
|
error!("FrontPageResult error: {e:?}");
|
||||||
}
|
}
|
||||||
Msg::FrontPageResult(Ok(graphql_client::Response {
|
Msg::FrontPageResult(Ok(graphql_client::Response {
|
||||||
@@ -394,6 +405,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
orders.send_msg(Msg::WindowScrolled);
|
orders.send_msg(Msg::WindowScrolled);
|
||||||
}
|
}
|
||||||
Msg::ShowThreadResult(bad) => {
|
Msg::ShowThreadResult(bad) => {
|
||||||
|
orders.send_msg(Msg::Reload);
|
||||||
error!("show_thread_query error: {bad:#?}");
|
error!("show_thread_query error: {bad:#?}");
|
||||||
}
|
}
|
||||||
Msg::CatchupRequest { query } => {
|
Msg::CatchupRequest { query } => {
|
||||||
@@ -426,6 +438,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Msg::CatchupResult(bad) => {
|
Msg::CatchupResult(bad) => {
|
||||||
|
orders.send_msg(Msg::Reload);
|
||||||
error!("catchup_query error: {bad:#?}");
|
error!("catchup_query error: {bad:#?}");
|
||||||
}
|
}
|
||||||
Msg::SelectionSetNone => {
|
Msg::SelectionSetNone => {
|
||||||
@@ -546,6 +559,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
web_sys::window().unwrap().scroll_to_with_x_and_y(0., 0.);
|
web_sys::window().unwrap().scroll_to_with_x_and_y(0., 0.);
|
||||||
}
|
}
|
||||||
Msg::WindowScrolled => {
|
Msg::WindowScrolled => {
|
||||||
|
// TODO: model.content_el doesn't go to None like it should when a DOM is recreated and the refrenced element goes away
|
||||||
if let Some(el) = model.content_el.get() {
|
if let Some(el) = model.content_el.get() {
|
||||||
let ih = window()
|
let ih = window()
|
||||||
.inner_height()
|
.inner_height()
|
||||||
@@ -590,6 +604,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
"Server ({}) and client ({}) version mismatch, reloading",
|
"Server ({}) and client ({}) version mismatch, reloading",
|
||||||
version, model.versions.client
|
version, model.versions.client
|
||||||
);
|
);
|
||||||
|
#[cfg(not(debug_assertions))]
|
||||||
orders.send_msg(Msg::Reload);
|
orders.send_msg(Msg::Reload);
|
||||||
}
|
}
|
||||||
model.versions.server = Some(version);
|
model.versions.server = Some(version);
|
||||||
|
|||||||
@@ -198,8 +198,7 @@ fn catchup_view(
|
|||||||
"p-4",
|
"p-4",
|
||||||
"border-b",
|
"border-b",
|
||||||
"border-gray-500",
|
"border-gray-500",
|
||||||
"bg-black",
|
"bg-black/50",
|
||||||
"opacity-50",
|
|
||||||
],
|
],
|
||||||
div![
|
div![
|
||||||
C!["absolute", "top-0", "right-4", "text-gray-500", "p-4"],
|
C!["absolute", "top-0", "right-4", "text-gray-500", "p-4"],
|
||||||
@@ -224,20 +223,28 @@ fn catchup_view(
|
|||||||
"p-4",
|
"p-4",
|
||||||
"border-t",
|
"border-t",
|
||||||
"border-gray-500",
|
"border-gray-500",
|
||||||
"bg-black",
|
"bg-black/50",
|
||||||
"opacity-50",
|
|
||||||
],
|
],
|
||||||
button![
|
button![
|
||||||
tw_classes::button(),
|
tw_classes::button(),
|
||||||
span![i![C!["far", "fa-envelope"]]],
|
span![i![C!["far", "fa-envelope"]]],
|
||||||
span![C!["pl-2"], "Keep unread"],
|
span![C!["pl-2"], "Keep unread"],
|
||||||
ev(Ev::Click, move |_| Msg::CatchupKeepUnread)
|
ev(Ev::Click, |_| Msg::CatchupKeepUnread)
|
||||||
],
|
],
|
||||||
button![
|
button![
|
||||||
tw_classes::button_with_color("bg-green-800", "hover:bg-neutral-700"),
|
tw_classes::button(),
|
||||||
|
span![i![C!["fas", "fa-house"]]],
|
||||||
|
span![C!["pl-2"], "Go home"],
|
||||||
|
ev(Ev::Click, |_| Msg::MultiMsg(vec![
|
||||||
|
Msg::CatchupExit,
|
||||||
|
Msg::GoToSearchResults
|
||||||
|
]))
|
||||||
|
],
|
||||||
|
button![
|
||||||
|
tw_classes::button_with_color("bg-green-800", "hover:bg-green-700"),
|
||||||
span![i![C!["far", "fa-envelope-open"]]],
|
span![i![C!["far", "fa-envelope-open"]]],
|
||||||
span![C!["pl-2"], "Mark as read"],
|
span![C!["pl-2"], "Mark as read"],
|
||||||
ev(Ev::Click, move |_| Msg::CatchupMarkAsRead)
|
ev(Ev::Click, |_| Msg::CatchupMarkAsRead)
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
reading_progress(read_completion_ratio)
|
reading_progress(read_completion_ratio)
|
||||||
|
|||||||
Reference in New Issue
Block a user