Compare commits
30 Commits
letterbox-
...
letterbox-
| Author | SHA1 | Date | |
|---|---|---|---|
| 29de7c0727 | |||
| 5f6580fa2f | |||
| 5d4732d75d | |||
| a13bac813a | |||
| 85dcc9f7bd | |||
| b696629ad9 | |||
| b9e3128718 | |||
| 88fac4c2bc | |||
| 1fad5ec536 | |||
| 8e7214d531 | |||
| 333c4a3ebb | |||
| b9ba5a3bea | |||
| 2a0989e74d | |||
| e9319dc491 | |||
| 57481a77cd | |||
| 44915cce54 | |||
| 1225483b57 | |||
| daeb8c88a1 | |||
| 8a6b3ff501 | |||
| a6fffeafdc | |||
| d791b4ce49 | |||
| 8a0e4eb441 | |||
| fc84562419 | |||
| 37ebe1ebb3 | |||
| 2d06f070ea | |||
| 527a62069a | |||
| 40afafe1a8 | |||
| e3acf9ae6d | |||
| a68d067a68 | |||
| 5547c65af0 |
936
Cargo.lock
generated
936
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.10.0"
|
version = "0.10.8"
|
||||||
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ lol_html = "2.0.0"
|
|||||||
mailparse = "0.16.0"
|
mailparse = "0.16.0"
|
||||||
maplit = "1.0.2"
|
maplit = "1.0.2"
|
||||||
memmap = "0.7.0"
|
memmap = "0.7.0"
|
||||||
opentelemetry = "0.28.0"
|
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
reqwest = { version = "0.12.7", features = ["blocking"] }
|
reqwest = { version = "0.12.7", features = ["blocking"] }
|
||||||
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
||||||
@@ -48,8 +47,8 @@ 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.10.0", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.8", path = "../notmuch", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.10.0", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.10.8", path = "../shared", registry = "xinu" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
build-info-build = "0.0.40"
|
build-info-build = "0.0.40"
|
||||||
|
|||||||
20
server/migrations/20250330175930_update-nzfinder-link.sql
Normal file
20
server/migrations/20250330175930_update-nzfinder-link.sql
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
-- Bad examples:
|
||||||
|
-- https://nzbfinder.ws/getnzb/d2c3e5a08abadd985dccc6a574122892030b6a9a.nzb&i=95972&r=b55082d289937c050dedc203c9653850
|
||||||
|
-- https://nzbfinder.ws/getnzb?id=45add174-7da4-4445-bf2b-a67dbbfc07fe.nzb&r=b55082d289937c050dedc203c9653850
|
||||||
|
-- https://nzbfinder.ws/api/v1/getnzb?id=82486020-c192-4fa0-a7e7-798d7d72e973.nzb&r=b55082d289937c050dedc203c9653850
|
||||||
|
UPDATE nzb_posts
|
||||||
|
SET link =
|
||||||
|
regexp_replace(
|
||||||
|
regexp_replace(
|
||||||
|
regexp_replace(
|
||||||
|
link,
|
||||||
|
'https://nzbfinder.ws/getnzb/',
|
||||||
|
'https://nzbfinder.ws/api/v1/getnzb?id='
|
||||||
|
),
|
||||||
|
'https://nzbfinder.ws/getnzb',
|
||||||
|
'https://nzbfinder.ws/api/v1/getnzb'
|
||||||
|
),
|
||||||
|
'&r=',
|
||||||
|
'&apikey='
|
||||||
|
)
|
||||||
|
;
|
||||||
@@ -318,13 +318,16 @@ impl<'c> Transformer for SlurpContents<'c> {
|
|||||||
} else {
|
} else {
|
||||||
let resp = reqwest::get(link.as_str()).await?;
|
let resp = reqwest::get(link.as_str()).await?;
|
||||||
let status = resp.status();
|
let status = resp.status();
|
||||||
if status.is_server_error() || retryable_status.contains(&status) {
|
if status.is_server_error() {
|
||||||
return Err(TransformError::RetryableHttpStatusError(
|
error!("status error for {link}: {status}");
|
||||||
status,
|
return Ok(html.to_string());
|
||||||
link.to_string(),
|
}
|
||||||
));
|
if retryable_status.contains(&status) {
|
||||||
|
error!("retryable error for {link}: {status}");
|
||||||
|
return Ok(html.to_string());
|
||||||
}
|
}
|
||||||
if !status.is_success() {
|
if !status.is_success() {
|
||||||
|
error!("unsuccessful for {link}: {status}");
|
||||||
return Ok(html.to_string());
|
return Ok(html.to_string());
|
||||||
}
|
}
|
||||||
let body = resp.text().await?;
|
let body = resp.text().await?;
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ version.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
build-info = "0.0.40"
|
build-info = "0.0.40"
|
||||||
letterbox-notmuch = { version = "0.10.0", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.8", path = "../notmuch", registry = "xinu" }
|
||||||
serde = { version = "1.0.147", features = ["derive"] }
|
serde = { version = "1.0.147", features = ["derive"] }
|
||||||
|
|||||||
@@ -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.10.0", path = "../shared", registry = "xinu" }
|
letterbox-shared = { version = "0.10.8", path = "../shared", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.10.0", path = "../notmuch", registry = "xinu" }
|
letterbox-notmuch = { version = "0.10.8", 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"
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ fn on_url_changed(old: &Url, mut new: Url) -> Msg {
|
|||||||
|
|
||||||
// `update` describes how to handle each `Msg`.
|
// `update` describes how to handle each `Msg`.
|
||||||
pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
||||||
debug!("update({})", msg);
|
info!("update({})", msg);
|
||||||
match msg {
|
match msg {
|
||||||
Msg::Noop => {}
|
Msg::Noop => {}
|
||||||
Msg::RefreshStart => {
|
Msg::RefreshStart => {
|
||||||
@@ -293,7 +293,6 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
Msg::FrontPageResult(Err(e)) => {
|
Msg::FrontPageResult(Err(e)) => {
|
||||||
orders.send_msg(Msg::Reload);
|
|
||||||
error!("error FrontPageResult: {e:?}");
|
error!("error FrontPageResult: {e:?}");
|
||||||
}
|
}
|
||||||
Msg::FrontPageResult(Ok(graphql_client::Response {
|
Msg::FrontPageResult(Ok(graphql_client::Response {
|
||||||
@@ -301,7 +300,6 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
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 {
|
||||||
@@ -309,7 +307,6 @@ 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 {
|
||||||
@@ -405,7 +402,6 @@ 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 } => {
|
||||||
@@ -438,7 +434,6 @@ 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 => {
|
||||||
@@ -599,12 +594,12 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
model.read_completion_ratio = ratio;
|
model.read_completion_ratio = ratio;
|
||||||
}
|
}
|
||||||
Msg::UpdateServerVersion(version) => {
|
Msg::UpdateServerVersion(version) => {
|
||||||
if version != model.versions.client {
|
// Only git versions contain dash, don't autoreload there
|
||||||
|
if !version.contains('-') && version != model.versions.client {
|
||||||
warn!(
|
warn!(
|
||||||
"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);
|
||||||
|
|||||||
@@ -210,10 +210,7 @@ fn catchup_view(
|
|||||||
format!("{} left ", items.iter().filter(|i| !i.seen).count(),)
|
format!("{} left ", items.iter().filter(|i| !i.seen).count(),)
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
div![
|
div![C!["mt-12", "mb-20"], content],
|
||||||
C!["mt-12", "mb-20", "w-4xl", "flex", "justify-center", "grow"],
|
|
||||||
content
|
|
||||||
],
|
|
||||||
div![
|
div![
|
||||||
C![
|
C![
|
||||||
"fixed",
|
"fixed",
|
||||||
@@ -937,6 +934,13 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
|
|||||||
|
|
||||||
fn message_render(msg: &ShowThreadQueryThreadOnEmailThreadMessages, open: bool) -> Node<Msg> {
|
fn message_render(msg: &ShowThreadQueryThreadOnEmailThreadMessages, open: bool) -> Node<Msg> {
|
||||||
let expand_id = msg.id.clone();
|
let expand_id = msg.id.clone();
|
||||||
|
let from = match &msg.from {
|
||||||
|
Some(ShowThreadQueryThreadOnEmailThreadMessagesFrom {
|
||||||
|
addr: Some(addr), ..
|
||||||
|
}) => Some(addr.to_string()),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
let from = from.map(|f| f.replace('.', "-").replace('@', "-"));
|
||||||
div![
|
div![
|
||||||
C!["lg:mb-4"],
|
C!["lg:mb-4"],
|
||||||
div![
|
div![
|
||||||
@@ -956,7 +960,7 @@ fn message_render(msg: &ShowThreadQueryThreadOnEmailThreadMessages, open: bool)
|
|||||||
],
|
],
|
||||||
IF!(open =>
|
IF!(open =>
|
||||||
div![
|
div![
|
||||||
C!["bg-white", "text-black", "p-4", "min-w-full", "w-0","overflow-x-auto"],
|
C!["bg-white", "text-black", "p-4", "min-w-full", "w-0","overflow-x-auto", from],
|
||||||
match &msg.body {
|
match &msg.body {
|
||||||
ShowThreadQueryThreadOnEmailThreadMessagesBody::UnhandledContentType(
|
ShowThreadQueryThreadOnEmailThreadMessagesBody::UnhandledContentType(
|
||||||
ShowThreadQueryThreadOnEmailThreadMessagesBodyOnUnhandledContentType { contents ,content_tree},
|
ShowThreadQueryThreadOnEmailThreadMessagesBodyOnUnhandledContentType { contents ,content_tree},
|
||||||
|
|||||||
@@ -51,6 +51,15 @@ html {
|
|||||||
margin-left: 2em;
|
margin-left: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mail-thread .noreply-news-bloomberg-com img.logo-image {
|
||||||
|
width: initial !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
}
|
||||||
|
.mail-thread .noreply-news-bloomberg-com h2 {
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Hackaday figures have unreadable black on dark grey */
|
/* Hackaday figures have unreadable black on dark grey */
|
||||||
.news-post figcaption.wp-caption-text {
|
.news-post figcaption.wp-caption-text {
|
||||||
background-color: initial !important;
|
background-color: initial !important;
|
||||||
@@ -66,4 +75,4 @@ html {
|
|||||||
height: initial !important;
|
height: initial !important;
|
||||||
overflow: auto !important;
|
overflow: auto !important;
|
||||||
position: static !important;
|
position: static !important;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user