This implements the initial logic that makes the side panel collapsible.
Since we don't have a proper hamburger control, we do the same thing we
do on iOS for now.
We want to render notes in other apps like dave, so lets move
our note rendering to notedeck_ui. We rework NoteAction so it doesn't
have anything specific to notedeck_columns
Signed-off-by: William Casarin <jb55@jb55.com>
This switches to the profiling crate for compatible
profiling between rust libraries.
To enable:
$ cargo build --release --features puffin
Feel free to experiment with other profiling backends
as well! Would be great to get tracy working.
- Upgrade `nostrdb` to v0.6.1 with relay metadata support
- Switch to `nostr::RelayUrl` for typed relay URLs
- Use `process_event_with()` to pass relay info during ingestion
- Update `Relay`, `RelayPool`, and unknown ID logic accordingly
This enables richer indexing with relay provenance in events.
Signed-off-by: William Casarin <jb55@jb55.com>
- Introduced a new "no_media" boolean in ColumnsArgs to capture the
--no-media flag.
- Updated NoteOptions to include a setting for hiding media, configured
from parsed arguments.
- Refactored Damus to consolidate note options (textmode, scramble, and
no-media) into a single NoteOptions field.
- Modified navigation UI rendering to pass the unified note_options.
This change allows users to disable media display via the --no-media flag.
Signed-off-by: William Casarin <jb55@jb55.com>
This commit introduces a new scramble option to help reduce distractions
during development by scrambling text using rot13. When enabled via the
new `--scramble` flag, text displayed in various views is transformed,
making it easier to focus on layout and behavior without reading the
actual content.
App & Args Updates
- Added a `scramble: bool` field to the main application state (in `app.rs`).
- Extended argument parsing (in `args.rs`) to recognize the `--scramble` flag.
NoteOptions Enhancement
- Introduced a new bit flag `scramble_text` in `NoteOptions` with
corresponding setter/getter methods.
UI Adjustments
- Propagated the scramble flag through note rendering functions across
navigation, timeline, and note view modules.
- Updated several UI components (e.g., in `nav.rs`, `route.rs`, and
`contents.rs`) to accept and apply the new note options.
Rot13 Implementation
- Implemented a helper function (`rot13`) to scramble text
conditionally when the scramble option is enabled.
This feature is intended for development builds only, offering a way to
obscure text content during UI tweaks and testing.
Signed-off-by: William Casarin <jb55@jb55.com>
This is a fairly large rewrite which unifies our threads, timelines and
profiles. Now all timelines have a MultiSubscriber, and can be added
and removed to columns just like Threads and Profiles.
Signed-off-by: William Casarin <jb55@jb55.com>
Sometimes the commandline is nice for loading individual threads you
want to lookup (we don't have a UI for this yet). If you don't currently
choose a different data directory, then your decks cache gets nuked when
doing this.
Change the logic so that deck persistence is disabled when using CLI
columns. This stops notedeck from nuking your default decks.
Signed-off-by: William Casarin <jb55@jb55.com>
This is an initial implementation of note multicast, which sends posted
notes to other notedecks on the same network.
This came about after I nerd sniped myself thinking about p2p nostr on
local networks[1]
You can test this exclusively without joining any other relays by
passing -r multicast on the command line.
[1] https://damus.io/note1j50pseqwma38g3aqrsnhvld0m0ysdgppw6fjnvvcj0haeulgswgq80lpca
Signed-off-by: William Casarin <jb55@jb55.com>
Previous approach was to keep muted content from getting inserted.
Instead, this version alters it's display. This makes toggling mutes
on and off externally much more stable (the display changes but we
don't have to rebuild content trees)
For now muted content is collapsed to a red "Muted" tombstone w/ a reason.
This allows ./preview to be a notedeck app runner. I am currently
using it for the ProfilePic app (which will because notedeck_viz)
Signed-off-by: William Casarin <jb55@jb55.com>
This is the most intuitive, and damus iOS does the same thing. You
have to follow yourself, sorry. Otherwise you won't see your posts
when you post which is confusing.
Fixes: https://github.com/damus-io/notedeck/issues/509
This splits notedeck into:
- notedeck
- notedeck_chrome
- notedeck_columns
The `notedeck` crate is the library that `notedeck_chrome` and
`notedeck_columns`, use. It contains common functionality related to
notedeck apps such as the NoteCache, ImageCache, etc.
The `notedeck_chrome` crate is the binary and ui chrome. It is
responsible for managing themes, user accounts, signing, data paths,
nostrdb, image caches etc. It will eventually have its own ui which has
yet to be determined. For now it just manages the browser data, which
is passed to apps via a new struct called `AppContext`.
`notedeck_columns` is our columns app, with less responsibility now that
more things are handled by `notedeck_chrome`
There is still much work left to do before this is a proper browser:
- process isolation
- sandboxing
- etc
This is the beginning of a new era! We're just getting started.
Signed-off-by: William Casarin <jb55@jb55.com>