v0.3.4: Comment edit/delete, native notifications, forward-compatible protocol, UI fixes
Comment edit & delete: - EditComment/DeleteComment BlobHeaderDiffOps with upstream+downstream propagation - Trust-based: comment author can edit/delete, post author can delete - Storage: edit_comment(), delete_comment() methods - Frontend: inline edit (Enter/Escape), delete with confirm Native notifications: - tauri-plugin-notification for system notifications on all platforms - Triggers for messages, new posts, reactions, and comments - notif_reacts setting added, button-group toggles replace dropdowns - _notifReady flag prevents startup spam Protocol hardening: - BlobHeaderDiffOp::Unknown variant with #[serde(other)] for forward compatibility - Old nodes silently skip unknown ops instead of crashing UI fixes: - Self removed from Following list - Offline follows in lightbox popup (auto-show if no one online) - Sent DMs filtered from My Posts - Comment threading scoped to closest .post (fixes duplicate ID issue) - Select dropdown text legible in WebKitGTK (black on white options) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ce176a2299
commit
0abc244ee9
18 changed files with 1616 additions and 67 deletions
|
|
@ -1574,6 +1574,29 @@ async fn comment_on_post(
|
|||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn edit_comment(
|
||||
state: State<'_, AppState>,
|
||||
post_id: String,
|
||||
timestamp_ms: u64,
|
||||
new_content: String,
|
||||
) -> Result<(), String> {
|
||||
let node = state.inner();
|
||||
let pid = hex_to_postid(&post_id)?;
|
||||
node.edit_comment(pid, timestamp_ms, new_content).await.map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn delete_comment(
|
||||
state: State<'_, AppState>,
|
||||
post_id: String,
|
||||
timestamp_ms: u64,
|
||||
) -> Result<(), String> {
|
||||
let node = state.inner();
|
||||
let pid = hex_to_postid(&post_id)?;
|
||||
node.delete_comment(pid, timestamp_ms).await.map_err(|e| e.to_string())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn get_comments(
|
||||
state: State<'_, AppState>,
|
||||
|
|
@ -1703,6 +1726,7 @@ pub fn run() {
|
|||
|
||||
info!("Starting Tauri app");
|
||||
tauri::Builder::default()
|
||||
.plugin(tauri_plugin_notification::init())
|
||||
.setup(move |app| {
|
||||
// Desktop: store data next to the AppImage/executable so each copy
|
||||
// gets its own identity. Mobile: use the standard app data dir.
|
||||
|
|
@ -1818,6 +1842,8 @@ pub fn run() {
|
|||
get_reactions,
|
||||
get_reaction_counts,
|
||||
comment_on_post,
|
||||
edit_comment,
|
||||
delete_comment,
|
||||
get_comments,
|
||||
set_comment_policy,
|
||||
get_comment_policy,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue