Commit Graph

49 Commits

Author SHA1 Message Date
William Casarin
3d4db820b4 i18n: make localization context non-global
- Simplify Localization{Context,Manager} to just Localization
- Fixed a bunch of lifetime issueo
- Removed all Arcs and Locks
- Removed globals
  * widgets now need access to &mut Localization for i18n

Signed-off-by: William Casarin <jb55@jb55.com>
2025-07-22 09:49:32 -07:00
3f5036bd32 Internationalize user-facing strings and export them for translations
Changelog-Added: Internationalized user-facing strings and exported them for translations
Signed-off-by: Terry Yiu <git@tyiu.xyz>
2025-07-21 12:45:29 -07:00
William Casarin
8a1398face clippy fixes
Signed-off-by: William Casarin <jb55@jb55.com>
2025-07-17 13:54:43 -07:00
kernelkind
cc92fc2082 make TimelineCache::timelines private
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-16 18:13:07 -04:00
William Casarin
119456e2b3 columns: switch to bitflag app options
we're adding a ScrollToTop bool for an updating change
to the toolbar, but we have too many flags now. Let's switch
to bitflags

Signed-off-by: William Casarin <jb55@jb55.com>
2025-07-15 12:42:20 -07:00
kernelkind
46633d0513 use AccountSubs for timeline contact sub
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-12 16:48:20 -04:00
William Casarin
e8444f10b3 Revert "Unify sub for contacts in accounts & timeline"
Since its causing contact timelines to not load

eg: ./target/release/notedeck --datapath new3 -c contacts

This reverts commit 9940537897.
2025-07-11 13:49:47 -07:00
William Casarin
96cb5e26ce Merge follow/unfollow from kernel
Jakub Gladysz (1):
      ui: add follow button

kernelkind (14):
      bump nostrdb
      move polling responsibility to `AccountData`
      `AccountData`: decouple query from constructor
      add constructor for `AccountData`
      add `Contacts`
      use `Contacts` in `AccountData`
      expose `AccountSubs`
      Unify sub for contacts in accounts & timeline
      move `styled_button_toggleable` to notedeck_ui
      construct NoteBuilder from existing note
      send kind 3 event
      add actions for follow/unfollow
      add UI for (un)follow
      send contact list event on account creation
2025-07-11 13:06:24 -07:00
William Casarin
c5093a7180 columns/add: move home and notifications to top
more intuitive

Signed-off-by: William Casarin <jb55@jb55.com>
2025-07-10 13:37:23 -07:00
William Casarin
f39d554c96 rename Contacts to Home
Signed-off-by: William Casarin <jb55@jb55.com>
2025-07-10 13:34:41 -07:00
kernelkind
9940537897 Unify sub for contacts in accounts & timeline
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-10 13:47:07 -04:00
Fernando López Guevara
ec25413433 feat(mobile): improve layout and behavior on narrow screens 2025-07-08 16:20:51 -07:00
Fernando López Guevara
157e114124 fix(add_column): add vertical scroll 2025-07-08 11:03:05 -03:00
kernelkind
8e92a97a57 make selected accounts non optional
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-07-02 11:41:17 -04:00
Fernando López Guevara
36667bc024 feat(app_images): add module to manage static app image assets 2025-06-25 09:53:31 -07:00
William Casarin
b67a2ddc31 hashtag: improve sanitization function
We don't want punctuation in hashtags

Signed-off-by: William Casarin <jb55@jb55.com>
2025-06-24 08:29:37 -07:00
Fernando López Guevara
f214e97382 hashtag-column: allow multiple hashtags
Changelog-Changed: Allow multiple hashtags in hashtag columns
2025-06-24 08:16:10 -07:00
kernelkind
91c9cfc34f bugfix: txn failed
`ERROR notedeck_columns::timeline: setup_new_timeline:
database error: Transaction failed`

Reproduce by creating column, deleting it, then trying to create
it again. Before this fix, it was blank. Now it displays correctly

Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-06-01 17:56:22 -04:00
Fernando López Guevara
3972f5f2ab feat(hashtag-column): handle new hashtag on Enter key press 2025-05-27 16:53:56 -03:00
William Casarin
8af80d7d10 ui: move note and profile rendering to notedeck_ui
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>
2025-04-17 12:34:43 -07:00
William Casarin
9c9b4199f5 ui crate and chrome sidebar
Signed-off-by: William Casarin <jb55@jb55.com>
2025-04-14 11:29:01 -07:00
kernelkind
ee8c1e41df move sized_button into ui/widgets as styled_button
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-04-08 22:50:00 -04:00
kernelkind
ad90a9565a canonize UserAccount
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-03-22 00:06:49 -04:00
William Casarin
2d801408b2 egui: bump to 0.31.1 2025-03-17 19:45:26 -07:00
William Casarin
51457a0260 android: update to latest winit/egui/android-activity
so we can start fixing this shit

Signed-off-by: William Casarin <jb55@jb55.com>
2025-03-11 10:51:56 -07:00
William Casarin
94e31ff715 add_column: add a bit of padding between title and desc
Co-authored-by: Grok3
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-26 19:48:04 -08:00
William Casarin
9713503d9e add_column: use weak color for descriptions
This matches the figma

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-26 19:41:08 -08:00
William Casarin
cee8ab792c algo: fix algo feed icon
temporary placeholder, but at least its less ugly

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-26 19:32:19 -08:00
kernelkind
33fdf647e3 migrate to using Images instead of MediaCache directly
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-02-25 16:49:00 -05:00
kernelkind
4f4a0feb8c rename ImageCache -> MediaCache
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-02-25 16:49:00 -05:00
William Casarin
d0be18c80e clippy: fix enum too large issue
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-10 16:33:58 -08:00
kernelkind
0aa70239fe remove # char if user inserted it
Signed-off-by: kernelkind <kernelkind@gmail.com>
2025-02-06 16:50:25 -05:00
William Casarin
c32a42f9b9 clippy: fix naming lint
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-06 12:17:48 -08:00
William Casarin
0cc1d8a600 Switch to unified timeline cache via TimelineKinds
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>
2025-02-05 18:30:45 -08:00
William Casarin
ed455f7ea4 add tokenator crate
also remove a lot of the "advanced" token parsing style
which was a bit too verbose for my tastes

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin
00ef3082f3 tokens: add a more advanced tokens parser
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin
efa5b7e32f token_parser: simplify AddColumnRoute serialization
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin
4f89d95aef token_serializer: introduce TokenWriter
This simplifies token serialization

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin
61b3a92792 token_parser: unify parsing and serialization
This reduces the number of things we have to update in our token parser
and serializer. For payloads, we we have to handle the payload cases
different, but we now have a structure that can deal with that
efficiently.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin
005ecd740d Initial token parser combinator
In an attempt to make our deck serializer more localized,
comprehensible, and less error-prone, we introduce a new parser
combinator based around string tokens.

This replaces the Selection-based intermediary types so that we have a
more direct serialization style.
2025-02-04 08:08:08 -08:00
William Casarin
662755550f wip algo timelines
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
Ken Sedgwick
e436be400e add add relay GUI 2025-01-21 12:21:13 -08:00
Ken Sedgwick
e193e00539 Mute rendering instead of ingress
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.
2025-01-02 15:21:14 -08:00
kernelkind
d7e7c75b89 use hashtag icon
closes https://github.com/damus-io/notedeck/issues/490

Signed-off-by: kernelkind <kernelkind@gmail.com>
2024-12-23 15:37:56 -05:00
William Casarin
6fa6a5733e timeline: auto-add yourself to your home timeline
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
2024-12-19 07:21:15 -08:00
kernelkind
785d102e80 show profile preview for external pubkeys
Closes: https://github.com/damus-io/notedeck/pull/589
Signed-off-by: kernelkind <kernelkind@gmail.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-18 11:05:08 -08:00
kernelkind
69a6bf3664 column: add individual column
A column for following a single user

Closes: https://github.com/damus-io/notedeck/pull/583
Signed-off-by: kernelkind <kernelkind@gmail.com>
2024-12-17 09:19:16 -08:00
William Casarin
ec755493d9 Introducing Damus Notedeck: a nostr browser
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>
2024-12-12 20:08:55 -08:00
William Casarin
74c5f0c748 split notedeck into crates
This splits notedeck into crates, separating the browser chrome and
individual apps:

* notedeck: binary file, browser chrome
* notedeck_columns: our columns app
* enostr: same as before

We still need to do more work to cleanly separate the chrome apis
from the app apis. Soon I will create notedeck-notebook to see what
makes sense to be shared between the apps.

Some obvious ones that come to mind:

1. ImageCache

We will likely want to move this to the notedeck crate, as most apps
will want some kind of image cache. In web browsers, web pages do not
need to worry about this, so we will likely have to do something similar

2. Ndb

Since NdbRef is threadsafe and Ndb is an Arc<NdbRef>, it can be safely
copied to each app. This will simplify things. In the future we might
want to create an abstraction over this? Maybe each app shouldn't have
access to the same database... we assume the data in DBs are all public
anyways, but if we have unwrapped giftwraps that could be a problem.

3. RelayPool / Subscription Manager

The browser should probably maintain these. Then apps can use ken's
high level subscription manager api and not have to worry about
connection pool details

4. Accounts

Accounts and key management should be handled by the chrome. Apps should
only have a simple signer interface.

That's all for now, just something to think about!

Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-11 11:24:29 -08:00