Commit Graph
100 Commits
Author SHA1 Message Date
kernelkind dea695fa8e actionbar: don't early return
it's not good practice to early return while rendering,
super easy to introduce flickering

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-31 19:29:11 -04:00
kernelkind 8b5464641d render follow pack by index from virtual list
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:16:05 -04:00
kernelkind c06d18f76b prop Onboarding as mut
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:14:52 -04:00
kernelkind 84e60e0642 add virtual list to Onboarding
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:14:02 -04:00
kernelkind 23f35c60bb add Nip51SetCache helper methods
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:13:17 -04:00
kernelkind 30c2ebdcc2 use indexmap
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:12:41 -04:00
kernelkind 1658600604 expose indexmap to notedeck
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 21:11:28 -04:00
kernelkind 529377a706 ui: reactions closer approximation of iOS design
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 20:15:40 -04:00
kernelkind 30af03cfcc fix reaction target bug
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 20:02:34 -04:00
kernelkind bb878d3772 fix duplicate ReactionUnit for multiple kth indices
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 20:02:34 -04:00
kernelkind 5c9eb492b6 introduce failing test for reaction duplication bug
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 20:02:34 -04:00
kernelkind 0b584a773f ui: remove unnecessary reverse
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:57:00 -04:00
kernelkind 78504a6673 use TimelineUnits instead of Vec<NoteRef>
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:56:56 -04:00
kernelkind ae204cbd5c upgrade TimelineOpenResult to hold new pubkeys too
for handling unknown profiles

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:56:53 -04:00
kernelkind 7d4e9799e5 ui: add rendering for NoteUnits
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:56:48 -04:00
kernelkind 55d7cd3379 prop UnknownIds for initial timeline
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:32:10 -04:00
kernelkind 697040d862 make since optimize accept Option<&NoteRef> instead of notes
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:32:07 -04:00
kernelkind 49866418a6 note: account for mutes in the notifications dot
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:32:03 -04:00
kernelkind 9b784dfdf7 add TimelineUnits
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:59 -04:00
kernelkind c1d6c0f535 add reactions kind to notifications filter
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:54 -04:00
kernelkind 1a93663b1a replace HybridSet with NoteUnits
This will unify the collections that hold the notes to timelines
and threads and allow the notifications timeline to have grouped
notifications, among other things

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:50 -04:00
kernelkind 4992e25b3a unknownids: use pk bytes
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:47 -04:00
kernelkind 7b1ace328f add muted helper
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:43 -04:00
kernelkind 2973a0c6c5 appease clippy
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:42 -04:00
kernelkind 4f63629715 ui: add like icon
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:37 -04:00
kernelkind 686dea9831 move HybridSet to own file
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:34 -04:00
kernelkind 01171ff9d7 remove commented out code...
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:27 -04:00
kernelkind b421e7e45f make TimelineCache::notes private
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-25 10:31:20 -04:00
kernelkind 86641c6121 use the onboarding follow pack curator pubkey
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-19 15:05:28 -04:00
kernelkind 9ef72ec7de fix contact list bug
not a great solution but we're going to get a new sub manager
soon so it'll probably get replaced anyway

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:24 -04:00
kernelkind 1566cd5cf4 integrate onboarding
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:21 -04:00
kernelkind bdcd31cda0 add onboarding related state to app
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:19 -04:00
kernelkind a782d01ec2 add onboarding view
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:16 -04:00
kernelkind 8d4c0cfdbe TMP: temporary author for trusted pks list
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:14 -04:00
kernelkind f8f720c193 add onboarding 'manager'
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:09 -04:00
kernelkind 2a439b1f30 nip 51 set widget
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:04 -04:00
kernelkind 8399c951fa add nip51 set caching structs
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:07:00 -04:00
kernelkind ac1bbeac1b add impl for ScaledTextureFlags::RESPECT_MAX_DIMS
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:06:57 -04:00
kernelkind dc91b6ffae extract a pub render_media from image_carousel
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:06:55 -04:00
kernelkind 28bd13d110 add flags to ScaledTexture
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:06:48 -04:00
kernelkind 0b12b08c59 clippy: allow collapsible match
clippy being annoying

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-17 15:06:42 -04:00
kernelkind b750c0a927 use toolbar in columns rather than chrome
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:20:38 -04:00
kernelkind 49ef85aef6 copy toolbar rendering to notedeck_ui
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:18:28 -04:00
kernelkind 29f59459d2 add toolbar defaults
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:18:28 -04:00
kernelkind cd0bd53b3d add toolbar related logic
copied from chrome

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:18:28 -04:00
kernelkind 5c0546deab add select_by_route
selects the column containing the desired route. Add it if it
doesn't exist and it's easy to do

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:18:28 -04:00
kernelkind 1469f9a074 add toolbar icons to notedeck_ui
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:07:42 -04:00
kernelkind 3d8018bb9a make compose button animate horiz rather than vert
it animating over the toolbar made the bar dissapear for
some reason

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:06:18 -04:00
kernelkind 361d0e3708 make search icon more customizable
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-13 19:04:16 -04:00
kernelkind d12f66e5cd appease clippy
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-04 16:13:53 -04:00
kernelkind e8be471608 set scroll offset when routing to thread
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-04 16:12:45 -04:00
kernelkind 97d15e41e7 add ThreadNote::set_scroll_offset
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-04 16:12:42 -04:00
kernelkind ea5c876da6 add scroll_offset to NoteAction::Note
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-04 16:12:38 -04:00
kernelkind 75eefcbf72 TMP: use new egui-nav to fix scroll offset issues
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-08-04 16:12:27 -04:00
kernelkind 41aa2db3c7 use unseen notification indicator
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:08:08 -04:00
kernelkind 10225158e5 paint unseen indicator
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:07:36 -04:00
kernelkind 557608db9b chrome: method to find whether there are unseen notifications
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:07:35 -04:00
kernelkind 8697a5cb0a set fresh from TimelineCache
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:07:28 -04:00
kernelkind 7aca39aae8 add NotesFreshness to TimelineTab
necessary for notifications indicator

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:07:24 -04:00
kernelkind aa467b9be0 extract notifications filter to own method
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-31 19:07:13 -04:00
kernelkind b04f50a9f6 insert space after mention selection
closes: https://github.com/damus-io/notedeck/issues/985

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 18:11:27 -04:00
kernelkind 233be47659 TMP: update egui for better TextInputState handling
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 17:45:12 -04:00
kernelkind 173972f920 mentions: don't lose focus after select mention
Closes: https://github.com/damus-io/notedeck/issues/728

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 17:45:09 -04:00
kernelkind 31ec21ea02 mention-picker: re-add spacing from inner_margin
shouldn't do this in Frame, for some reason that captures the drag

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 17:45:05 -04:00
kernelkind d3d8d7be4b fix scroll regression
Closes: https://github.com/damus-io/notedeck/issues/986

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 17:45:02 -04:00
kernelkind 09dc101c1b rename SearchResultsView => MentionPickerView
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-30 17:44:51 -04:00
kernelkind 2bd139ef9e use DragSwitch to allow dragging anywhere in navigation
instead of just the top header when there is a vertical scroll

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:54:36 -04:00
kernelkind cda0a68854 add route_uses_frame
need to know this to get the correct drag id

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:54:32 -04:00
kernelkind a555707f67 get scroll id for Route
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:54:11 -04:00
kernelkind 1601914b8b use DragSwitch in Column
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:43 -04:00
kernelkind aac0f54991 add DragSwitch
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:40 -04:00
kernelkind 8960b3f052 add scroll_id for all views with vertical scroll
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:35 -04:00
kernelkind 6db6cf7b7a enforce scroll_id for ThreadView
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:28 -04:00
kernelkind 0bc32272d2 refactor scrolling for post, reply & quote views
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:25 -04:00
kernelkind b05d39cc81 TMP: update egui-nav
need this to make drag switching work

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-24 17:53:12 -04:00
kernelkind 0b27282985 bugfix: unsubscribe all decks when log out account
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 21:39:58 -04:00
kernelkind 1c547bbcaa bugfix: unsubscribe from timelines on deck deletion
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 21:25:09 -04:00
kernelkind d4082eb818 bugfix: properly sub to new selected acc after removal of selected
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 20:31:36 -04:00
kernelkind 0b8a4fdf55 move select account logic to own method
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 20:22:48 -04:00
kernelkind 8263e56f41 expose AccountCache::falback
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 19:33:56 -04:00
kernelkind 8daa1d2adf allow removal of Damoose account
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 19:24:33 -04:00
kernelkind b9cae65b72 make UserAccount cloneable
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 19:24:01 -04:00
kernelkind 049bb3e8bb use NwcError instead of nwc::Error
need to clone

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 19:01:51 -04:00
kernelkind d22dd9ed31 appease clippy
```
error: large size difference between variants
   --> crates/notedeck_columns/src/column.rs:249:1
    |
249 | / pub enum IntermediaryRoute {
250 | |     Timeline(Timeline),
    | |     ------------------ the largest variant contains at least 280 bytes
251 | |     Route(Route),
    | |     ------------ the second-largest variant contains at least 72 bytes
252 | | }
    | |_^ the entire enum is at least 280 bytes
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant
    = note: `-D clippy::large-enum-variant` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::large_enum_variant)]`
help: consider boxing the large fields to reduce the total size of the enum
    |
250 -     Timeline(Timeline),
250 +     Timeline(Box<Timeline>),
    |

error: could not compile `notedeck_columns` (lib) due to 1 previous error
```

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 19:01:46 -04:00
kernelkind fdef74c353 fix: sometimes most recent contacts list wasn't used
`ndb::poll_for_notes` appears to give notes as they arrive. We
need to make sure we only use the most recent for contacts

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 18:17:56 -04:00
kernelkind 030e4226f8 appease clippy
```
error: large size difference between variants
   --> crates/notedeck_columns/src/column.rs:249:1
    |
249 | / pub enum IntermediaryRoute {
250 | |     Timeline(Timeline),
    | |     ------------------ the largest variant contains at least 280 bytes
251 | |     Route(Route),
    | |     ------------ the second-largest variant contains at least 72 bytes
252 | | }
    | |_^ the entire enum is at least 280 bytes
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant
    = note: `-D clippy::large-enum-variant` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(clippy::large_enum_variant)]`
help: consider boxing the large fields to reduce the total size of the enum
    |
250 -     Timeline(Timeline),
250 +     Timeline(Box<Timeline>),
    |

error: could not compile `notedeck_columns` (lib) due to 1 previous error
```

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 18:17:53 -04:00
kernelkind 34afa755b8 add ChromePanelAction::Profile & use for pfp
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 15:23:41 -04:00
kernelkind 45490c918d add new Accounts button to chrome sidebar
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 15:23:32 -04:00
kernelkind a31fdd3ed2 use saturating sub
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-17 15:23:15 -04:00
kernelkind 5168d50257 add info statements
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:13:09 -04:00
kernelkind cc92fc2082 make TimelineCache::timelines private
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:13:07 -04:00
kernelkind dc4e3d7510 increment sub count when necessary
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:13:04 -04:00
kernelkind 95e9e4326a add TimelineCache helper methods
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:13:00 -04:00
kernelkind 4db6f37017 track all timeline related subscriptions in TimelineSub
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:12:58 -04:00
kernelkind 6544d43d02 replace MultiSubscriber with TimelineSub
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:12:46 -04:00
kernelkind efae62024e migrate to check following through Contacts::is_following
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-14 21:34:33 -04:00
kernelkind 142aa879c3 make Contacts::is_following use bytes instead of Pubkey
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-14 21:34:08 -04:00
kernelkind a7f5319fde remove MuteFun prop
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-14 21:34:05 -04:00
kernelkind 397bfce817 add Accounts to NoteContext
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-14 21:34:02 -04:00
kernelkind 8c71e154f4 allow body on unknown profile
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-14 15:26:07 -04:00