diff --git a/src/app.rs b/src/app.rs index 7dd8afd4..36e828f1 100644 --- a/src/app.rs +++ b/src/app.rs @@ -957,7 +957,12 @@ fn timelines_view(ui: &mut egui::Ui, sizes: Size, app: &mut Damus, columns: usiz .horizontal(|mut strip| { strip.cell(|ui| { let rect = ui.available_rect_before_wrap(); - let side_panel = DesktopSidePanel::new(app).show(ui); + let side_panel = DesktopSidePanel::new( + &app.ndb, + &mut app.img_cache, + app.accounts.get_selected_account(), + ) + .show(ui); let router = if let Some(router) = app .columns diff --git a/src/ui/profile/preview.rs b/src/ui/profile/preview.rs index 798dc09c..25ef49ef 100644 --- a/src/ui/profile/preview.rs +++ b/src/ui/profile/preview.rs @@ -1,6 +1,7 @@ use crate::app_style::NotedeckTextStyle; use crate::imgcache::ImageCache; use crate::ui::ProfilePic; +use crate::user_account::UserAccount; use crate::{colors, images, DisplayName}; use egui::load::TexturePoll; use egui::{Frame, RichText, Sense, Widget}; @@ -175,6 +176,22 @@ pub fn get_profile_url_owned(profile: Option>) -> &str { } } +pub fn get_account_url<'a>( + txn: &'a nostrdb::Transaction, + ndb: &nostrdb::Ndb, + account: Option<&UserAccount>, +) -> &'a str { + if let Some(selected_account) = account { + if let Ok(profile) = ndb.get_profile_by_pubkey(txn, selected_account.pubkey.bytes()) { + get_profile_url_owned(Some(profile)) + } else { + get_profile_url_owned(None) + } + } else { + get_profile_url(None) + } +} + fn display_name_widget( display_name: DisplayName<'_>, add_placeholder_space: bool, diff --git a/src/ui/side_panel.rs b/src/ui/side_panel.rs index 20cbaeb5..64688d04 100644 --- a/src/ui/side_panel.rs +++ b/src/ui/side_panel.rs @@ -5,13 +5,15 @@ use crate::{ account_manager::AccountsRoute, colors, column::Column, + imgcache::ImageCache, route::{Route, Router}, + user_account::UserAccount, Damus, }; use super::{ anim::{AnimationHelper, ICON_EXPANSION_MULTIPLE}, - profile::preview::{get_profile_url, get_profile_url_tmp}, + profile::preview::get_account_url, ProfilePic, View, }; @@ -19,7 +21,9 @@ pub static SIDE_PANEL_WIDTH: f32 = 64.0; static ICON_WIDTH: f32 = 40.0; pub struct DesktopSidePanel<'a> { - app: &'a mut Damus, + ndb: &'a nostrdb::Ndb, + img_cache: &'a mut ImageCache, + selected_account: Option<&'a UserAccount>, } impl<'a> View for DesktopSidePanel<'a> { @@ -50,8 +54,16 @@ impl SidePanelResponse { } impl<'a> DesktopSidePanel<'a> { - pub fn new(app: &'a mut Damus) -> Self { - DesktopSidePanel { app } + pub fn new( + ndb: &'a nostrdb::Ndb, + img_cache: &'a mut ImageCache, + selected_account: Option<&'a UserAccount>, + ) -> Self { + Self { + ndb, + img_cache, + selected_account, + } } pub fn panel() -> SidePanel { @@ -138,23 +150,10 @@ impl<'a> DesktopSidePanel<'a> { let min_pfp_size = ICON_WIDTH; let cur_pfp_size = helper.scale_1d_pos(min_pfp_size); - let selected_account = self.app.accounts().get_selected_account(); - let txn = nostrdb::Transaction::new(&self.app.ndb).expect("should be able to create txn"); - let profile_url = if let Some(selected_account) = selected_account { - if let Ok(profile) = self - .app - .ndb() - .get_profile_by_pubkey(&txn, selected_account.pubkey.bytes()) - { - get_profile_url_tmp(Some(profile)) - } else { - get_profile_url_tmp(None) - } - } else { - get_profile_url(None) - }; + let txn = nostrdb::Transaction::new(self.ndb).expect("should be able to create txn"); + let profile_url = get_account_url(&txn, self.ndb, self.selected_account); - let widget = ProfilePic::new(self.app.img_cache_mut(), profile_url).size(cur_pfp_size); + let widget = ProfilePic::new(self.img_cache, profile_url).size(cur_pfp_size); ui.put(helper.get_animation_rect(), widget); @@ -365,7 +364,11 @@ mod preview { .clip(true) .horizontal(|mut strip| { strip.cell(|ui| { - let mut panel = DesktopSidePanel::new(&mut self.app); + let mut panel = DesktopSidePanel::new( + &self.app.ndb, + &mut self.app.img_cache, + self.app.accounts.get_selected_account(), + ); let response = panel.show(ui); DesktopSidePanel::perform_action(