Add mark read/unread support for news
This commit is contained in:
parent
4ee34444ae
commit
831466ddda
15
server/.sqlx/query-b39147b9d06171cb742141eda4675688cb702fb284758b1224ed3aa2d7f3b3d9.json
generated
Normal file
15
server/.sqlx/query-b39147b9d06171cb742141eda4675688cb702fb284758b1224ed3aa2d7f3b3d9.json
generated
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "UPDATE\n post\nSET\n is_read = $1\nWHERE\n uid = $2\n",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Bool",
|
||||||
|
"Text"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "b39147b9d06171cb742141eda4675688cb702fb284758b1224ed3aa2d7f3b3d9"
|
||||||
|
}
|
||||||
6
server/sql/set_unread.sql
Normal file
6
server/sql/set_unread.sql
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
UPDATE
|
||||||
|
post
|
||||||
|
SET
|
||||||
|
is_read = $1
|
||||||
|
WHERE
|
||||||
|
uid = $2
|
||||||
@ -272,11 +272,14 @@ impl Mutation {
|
|||||||
unread: bool,
|
unread: bool,
|
||||||
) -> Result<bool, Error> {
|
) -> Result<bool, Error> {
|
||||||
let nm = ctx.data_unchecked::<Notmuch>();
|
let nm = ctx.data_unchecked::<Notmuch>();
|
||||||
info!("set_read_status({query}, {unread})");
|
let pool = ctx.data_unchecked::<PgPool>();
|
||||||
if unread {
|
|
||||||
nm.tag_add("unread", &format!("{query}"))?;
|
for q in query.split_whitespace() {
|
||||||
} else {
|
if newsreader::is_newsreader_thread(&q) {
|
||||||
nm.tag_remove("unread", &format!("{query}"))?;
|
newsreader::set_read_status(pool, &q, unread).await?;
|
||||||
|
} else {
|
||||||
|
nm::set_read_status(nm, q, unread).await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(true)
|
Ok(true)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -250,6 +250,7 @@ pub async fn thread(pool: &PgPool, thread_id: String) -> Result<Thread, ServerEr
|
|||||||
struct Query {
|
struct Query {
|
||||||
unread_only: bool,
|
unread_only: bool,
|
||||||
site: Option<String>,
|
site: Option<String>,
|
||||||
|
uid: Option<String>,
|
||||||
remainder: Vec<String>,
|
remainder: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,6 +259,7 @@ impl FromStr for Query {
|
|||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
let mut unread_only = false;
|
let mut unread_only = false;
|
||||||
let mut site = None;
|
let mut site = None;
|
||||||
|
let mut uid = None;
|
||||||
let mut remainder = Vec::new();
|
let mut remainder = Vec::new();
|
||||||
let site_prefix = format!("tag:{TAG_PREFIX}");
|
let site_prefix = format!("tag:{TAG_PREFIX}");
|
||||||
for word in s.split_whitespace() {
|
for word in s.split_whitespace() {
|
||||||
@ -265,6 +267,8 @@ impl FromStr for Query {
|
|||||||
unread_only = true
|
unread_only = true
|
||||||
} else if word.starts_with(&site_prefix) {
|
} else if word.starts_with(&site_prefix) {
|
||||||
site = Some(word[site_prefix.len()..].to_string())
|
site = Some(word[site_prefix.len()..].to_string())
|
||||||
|
} else if word.starts_with(THREAD_PREFIX) {
|
||||||
|
uid = Some(word[THREAD_PREFIX.len()..].to_string())
|
||||||
} else {
|
} else {
|
||||||
remainder.push(word.to_string());
|
remainder.push(word.to_string());
|
||||||
}
|
}
|
||||||
@ -272,7 +276,20 @@ impl FromStr for Query {
|
|||||||
Ok(Query {
|
Ok(Query {
|
||||||
unread_only,
|
unread_only,
|
||||||
site,
|
site,
|
||||||
|
uid,
|
||||||
remainder,
|
remainder,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn set_read_status<'ctx>(
|
||||||
|
pool: &PgPool,
|
||||||
|
query: &str,
|
||||||
|
unread: bool,
|
||||||
|
) -> Result<bool, ServerError> {
|
||||||
|
let query: Query = query.parse()?;
|
||||||
|
sqlx::query_file!("sql/set_unread.sql", !unread, query.uid)
|
||||||
|
.execute(pool)
|
||||||
|
.await?;
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
|
|||||||
@ -755,7 +755,7 @@ fn render_content_type_tree(m: &ParsedMail) -> String {
|
|||||||
|
|
||||||
pub async fn set_read_status<'ctx>(
|
pub async fn set_read_status<'ctx>(
|
||||||
nm: &Notmuch,
|
nm: &Notmuch,
|
||||||
query: String,
|
query: &str,
|
||||||
unread: bool,
|
unread: bool,
|
||||||
) -> Result<bool, ServerError> {
|
) -> Result<bool, ServerError> {
|
||||||
if unread {
|
if unread {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user