mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 08:21:47 +00:00
Merge pull request #3 from mikedilger/nip09_delete_event_setting
PR fixes
This commit is contained in:
commit
19b864e978
@ -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);
|
||||
|
@ -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),
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user