Merge pull request #3 from mikedilger/nip09_delete_event_setting

PR fixes
This commit is contained in:
nico.benaz 2023-08-26 03:12:50 +02:00 committed by GitHub
commit 19b864e978
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 117 additions and 123 deletions

View File

@ -141,8 +141,8 @@ impl Default for Settings {
reactions: default_setting!(reactions),
enable_zap_receipts: default_setting!(enable_zap_receipts),
show_media: default_setting!(show_media),
show_deleted_events: default_setting!(show_deleted_events),
approve_content_warning: default_setting!(approve_content_warning),
show_deleted_events: default_setting!(show_deleted_events),
pow: default_setting!(pow),
set_client_tag: default_setting!(set_client_tag),
set_user_agent: default_setting!(set_user_agent),
@ -215,8 +215,8 @@ impl Settings {
reactions: load_setting!(reactions),
enable_zap_receipts: load_setting!(enable_zap_receipts),
show_media: load_setting!(show_media),
show_deleted_events: load_setting!(show_deleted_events),
approve_content_warning: load_setting!(approve_content_warning),
show_deleted_events: load_setting!(show_deleted_events),
pow: load_setting!(pow),
set_client_tag: load_setting!(set_client_tag),
set_user_agent: load_setting!(set_user_agent),
@ -285,8 +285,8 @@ impl Settings {
save_setting!(reactions, self, txn);
save_setting!(enable_zap_receipts, self, txn);
save_setting!(show_media, self, txn);
save_setting!(show_deleted_events, self, txn);
save_setting!(approve_content_warning, self, txn);
save_setting!(show_deleted_events, self, txn);
save_setting!(pow, self, txn);
save_setting!(set_client_tag, self, txn);
save_setting!(set_user_agent, self, txn);

View File

@ -215,7 +215,6 @@ where
"show_long_form" => settings.show_long_form = numstr_to_bool(value),
"show_mentions" => settings.show_mentions = numstr_to_bool(value),
"show_media" => settings.show_media = numstr_to_bool(value),
"show_deleted_events" => settings.show_deleted_events = numstr_to_bool(value),
"approve_content_warning" => settings.approve_content_warning = numstr_to_bool(value),
"load_avatars" => settings.load_avatars = numstr_to_bool(value),
"load_media" => settings.load_media = numstr_to_bool(value),

View File

@ -29,7 +29,6 @@ pub struct Settings1 {
pub show_mentions: bool,
pub show_media: bool,
pub approve_content_warning: bool,
pub show_deleted_events: bool,
pub load_avatars: bool,
pub load_media: bool,
pub check_nip05: bool,
@ -69,7 +68,6 @@ impl Default for Settings1 {
show_mentions: true,
show_media: true,
approve_content_warning: false,
show_deleted_events: false,
load_avatars: true,
load_media: true,
check_nip05: true,

View File

@ -65,126 +65,123 @@ pub(super) fn render_note(
// FIXME drop the cached notes on recompute
if let Ok(note_data) = note_ref.try_borrow() {
// Render if not muted
if !note_data.author.muted {
let viewed = match GLOBALS.storage.is_event_viewed(note_data.event.id) {
Ok(answer) => answer,
_ => false,
};
let is_new = app.settings.highlight_unread_events && !viewed;
let is_main_event: bool = {
let feed_kind = GLOBALS.feed.get_feed_kind();
match feed_kind {
FeedKind::Thread { id, .. } => id == note_data.event.id,
_ => false,
}
};
let height = if let Some(height) = app.height.get(&id) {
height
} else {
&0.0
};
let render_data = NoteRenderData {
height: *height,
has_repost: note_data.repost.is_some(),
is_comment_mention: false,
is_new,
is_thread: threaded,
is_first,
is_last,
is_main_event,
thread_position: indent as i32,
can_post: GLOBALS.signer.is_ready(),
};
let top = ui.next_widget_position();
let inner_response = ui.horizontal(|ui| {
// Outer indents first
app.settings.theme.feed_post_outer_indent(ui, &render_data);
Frame::none()
.inner_margin(app.settings.theme.feed_frame_inner_margin(&render_data))
.outer_margin(app.settings.theme.feed_frame_outer_margin(&render_data))
.rounding(app.settings.theme.feed_frame_rounding(&render_data))
.shadow(app.settings.theme.feed_frame_shadow(&render_data))
.fill(app.settings.theme.feed_frame_fill(&render_data))
.stroke(app.settings.theme.feed_frame_stroke(&render_data))
.show(ui, |ui| {
ui.horizontal_wrapped(|ui| {
// Deleted events are not shown if user did not set show_deleted_events from settings
if !(note_data.deletion.is_some()
&& !app.settings.show_deleted_events)
{
// Inner indents first
app.settings.theme.feed_post_inner_indent(ui, &render_data);
render_note_inner(
app,
ctx,
ui,
note_ref.clone(),
&render_data,
as_reply_to,
&None,
);
}
});
})
});
// Store actual rendered height for future reference
let bottom = ui.next_widget_position();
app.height.insert(id, bottom.y - top.y);
// Mark post as viewed if hovered AND we are not scrolling
if !viewed && inner_response.response.hovered() && app.current_scroll_offset == 0.0
{
let _ = GLOBALS.storage.mark_event_viewed(id, None);
}
// Record if the rendered note was visible
{
let screen_rect = ctx.input(|i| i.screen_rect); // Rect
let offscreen = bottom.y < 0.0 || top.y > screen_rect.max.y;
if !offscreen {
// Record that this note was visibly rendered
app.next_visible_note_ids.push(id);
}
}
thin_separator(
ui,
app.settings.theme.feed_post_separator_stroke(&render_data),
);
let skip = note_data.author.muted
|| (note_data.deletion.is_some() && !app.settings.show_deleted_events);
if skip {
return;
}
// even if muted, continue rendering thread children
if threaded && !as_reply_to && !app.collapsed.contains(&id) {
let replies = GLOBALS.storage.get_replies(id).unwrap_or(vec![]);
let iter = replies.iter();
let first = replies.first();
let last = replies.last();
for reply_id in iter {
super::render_note_maybe_fake(
app,
ctx,
_frame,
ui,
FeedNoteParams {
id: *reply_id,
indent: indent + 1,
as_reply_to,
threaded,
is_first: Some(reply_id) == first,
is_last: Some(reply_id) == last,
},
);
let viewed = match GLOBALS.storage.is_event_viewed(note_data.event.id) {
Ok(answer) => answer,
_ => false,
};
let is_new = app.settings.highlight_unread_events && !viewed;
let is_main_event: bool = {
let feed_kind = GLOBALS.feed.get_feed_kind();
match feed_kind {
FeedKind::Thread { id, .. } => id == note_data.event.id,
_ => false,
}
};
let height = if let Some(height) = app.height.get(&id) {
height
} else {
&0.0
};
let render_data = NoteRenderData {
height: *height,
has_repost: note_data.repost.is_some(),
is_comment_mention: false,
is_new,
is_thread: threaded,
is_first,
is_last,
is_main_event,
thread_position: indent as i32,
can_post: GLOBALS.signer.is_ready(),
};
let top = ui.next_widget_position();
let inner_response = ui.horizontal(|ui| {
// Outer indents first
app.settings.theme.feed_post_outer_indent(ui, &render_data);
Frame::none()
.inner_margin(app.settings.theme.feed_frame_inner_margin(&render_data))
.outer_margin(app.settings.theme.feed_frame_outer_margin(&render_data))
.rounding(app.settings.theme.feed_frame_rounding(&render_data))
.shadow(app.settings.theme.feed_frame_shadow(&render_data))
.fill(app.settings.theme.feed_frame_fill(&render_data))
.stroke(app.settings.theme.feed_frame_stroke(&render_data))
.show(ui, |ui| {
ui.horizontal_wrapped(|ui| {
// Inner indents first
app.settings.theme.feed_post_inner_indent(ui, &render_data);
render_note_inner(
app,
ctx,
ui,
note_ref.clone(),
&render_data,
as_reply_to,
&None,
);
});
})
});
// Store actual rendered height for future reference
let bottom = ui.next_widget_position();
app.height.insert(id, bottom.y - top.y);
// Mark post as viewed if hovered AND we are not scrolling
if !viewed && inner_response.response.hovered() && app.current_scroll_offset == 0.0 {
let _ = GLOBALS.storage.mark_event_viewed(id, None);
}
// Record if the rendered note was visible
{
let screen_rect = ctx.input(|i| i.screen_rect); // Rect
let offscreen = bottom.y < 0.0 || top.y > screen_rect.max.y;
if !offscreen {
// Record that this note was visibly rendered
app.next_visible_note_ids.push(id);
}
}
thin_separator(
ui,
app.settings.theme.feed_post_separator_stroke(&render_data),
);
}
// even if muted, continue rendering thread children
if threaded && !as_reply_to && !app.collapsed.contains(&id) {
let replies = GLOBALS.storage.get_replies(id).unwrap_or(vec![]);
let iter = replies.iter();
let first = replies.first();
let last = replies.last();
for reply_id in iter {
super::render_note_maybe_fake(
app,
ctx,
_frame,
ui,
FeedNoteParams {
id: *reply_id,
indent: indent + 1,
as_reply_to,
threaded,
is_first: Some(reply_id) == first,
is_last: Some(reply_id) == last,
},
);
}
}
}