ui: add initial Profile hover previews
The idea with these is that on notedeck you can just hover your cursor over a profile link to see the profile. I just have a stub for now, but full design coming soon after. Also simplify the preview system even further with a macro. In the future I imagine we can grep every preview in the codebase, and then include this as a string inside this macro. This is some kind of template metaprogramming insanity but in theory it could work. Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -123,16 +123,27 @@ fn render_note_contents(
|
||||
match block.blocktype() {
|
||||
BlockType::MentionBech32 => match block.as_mention().unwrap() {
|
||||
Mention::Pubkey(npub) => {
|
||||
ui.colored_label(colors::PURPLE, "@");
|
||||
let profile = damus.ndb.get_profile_by_pubkey(txn, npub.pubkey()).ok();
|
||||
if let Some(name) = profile
|
||||
.as_ref()
|
||||
.and_then(|p| crate::profile::get_profile_name(p))
|
||||
{
|
||||
ui.colored_label(colors::PURPLE, name);
|
||||
} else {
|
||||
ui.colored_label(colors::PURPLE, "nostrich");
|
||||
}
|
||||
ui.horizontal(|ui| {
|
||||
let profile = damus.ndb.get_profile_by_pubkey(txn, npub.pubkey()).ok();
|
||||
|
||||
let name: String = if let Some(name) =
|
||||
profile.as_ref().and_then(crate::profile::get_profile_name)
|
||||
{
|
||||
format!("@{}", name)
|
||||
} else {
|
||||
"@nostrich".to_string()
|
||||
};
|
||||
|
||||
let resp = ui.colored_label(colors::PURPLE, &name);
|
||||
|
||||
if let Some(rec) = profile.as_ref() {
|
||||
resp.on_hover_ui_at_pointer(|ui| {
|
||||
egui::Frame::default().show(ui, |ui| {
|
||||
ui.add(ui::ProfilePreview::new(rec));
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Mention::Note(note) if options.has_note_previews() => {
|
||||
|
||||
@@ -106,7 +106,7 @@ impl<'a> Note<'a> {
|
||||
match profile
|
||||
.as_ref()
|
||||
.ok()
|
||||
.and_then(|p| p.record.profile()?.picture())
|
||||
.and_then(|p| p.record().profile()?.picture())
|
||||
{
|
||||
// these have different lifetimes and types,
|
||||
// so the calls must be separate
|
||||
|
||||
Reference in New Issue
Block a user