summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Rename `login` to `user` in the client.Owen Jacobson2025-03-24
|
* Update the API docs to describe `user`s, not `login`s.Owen Jacobson2025-03-23
|
* Rename `login` to `user` throughout the serverOwen Jacobson2025-03-23
|
* Change the prefix for newly-generated user IDs to `U`, for `User`.Owen Jacobson2025-03-23
|
* Rename the `login` module to `user`.Owen Jacobson2025-03-23
|
* Rename `user` to `login` at the database.Owen Jacobson2025-03-23
|
* Expire messages after 30 days.Owen Jacobson2025-03-23
| | | | In a discussion with wlonk, we both agreed that 15 days is _too_ aggressive, but also that it's not quite time to implement configurable expiry.
* Merge branch 'prop/restartable-state'Owen Jacobson2025-03-23
|\
| * Track state on a per-session basis, rather than via globals.Owen Jacobson2025-02-26
| | | | | | | | | | | | | | | | | | | | | | Sorry about the thousand-line omnibus change; this is functionally a rewrite of the client's state tracking, flavoured to resemble the existing code as far as is possible, rather than something that can be parted out and committed in pieces. Highlights: * No more `store.writeable()`s. All state is now tracked using state runs or derivatives. State is still largely structured the way it was, but several bits of nested state have been rewritten to ensure that their properties are reactive just as much as their containers are. * State is no longer global. `(app)/+layout` manages a stateful session, created via its load hook and started/stopped via component mount and destroy events. The session also tracks an event source for the current state, and feeds events into the state, broadly along the same lines as the previous stores-based approach. Together these two changes fix up several rough spots integrating state with Svelte, and allow for the possibility of multiple states. This is a major step towards restartable states, and thus towards better connection management, which will require the ability to "start over" once a connection is restored.
| * Split Markdown rendering out into its own JS module.Owen Jacobson2025-02-25
|/
* Merge remote-tracking branch 'origin/prop/fix-scroll'Owen Jacobson2025-02-25
|\
| * Don't scroll all the time as messages are addedKit La Touche2025-02-25
| | | | | | | | Only once on load, then once per new message.
* | Remove forced `are you sure` prompt when navigating away.Owen Jacobson2025-02-25
|/
* Merge branch 'prop/preserve-state'Owen Jacobson2025-02-24
|\
| * npm run fmtOwen Jacobson2025-02-24
| |
| * Move constant closer to usageOwen Jacobson2025-02-24
| |
| * Only redirect to last active channel off of /Kit La Touche2025-02-21
| |
| * Merge branch 'main' into prop/preserve-stateKit La Touche2025-02-21
| |\
| * | Only check for message visibility while a channel is actually attached to ↵Owen Jacobson2025-02-20
| | | | | | | | | | | | | | | | | | the DOM. Prevents this from breaking during DOM unmounting, when leaving a channel.
| * | Remove explanatory commentKit La Touche2025-02-20
| | | | | | | | | | | | That no longer vitally pertains.
| * | Remember last active channel and navigate there on root loadKit La Touche2025-02-20
| | | | | | | | | | | | To facilitate PWA behaviour.
| * | Separate channel metadata out into its own storeKit La Touche2025-02-20
| | | | | | | | | | | | | | | | | | | | | | | | This is stored locally, and, while parallel to channel info, is not the same as. Eventually, this may hold info about moot/decayed channels, and grow unbounded. That'll need to be addressed.
| * | Merge local channel data and remote to maintain stateKit La Touche2025-02-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | When we hit the boot endpoint, we get the server's view of things. If we just setChannels with that, we overwrite all our locally-stored info in on things like lastReadAt. So we need to merge data. Eventually, this might militate for a `meta` key containing an object of locally stored data, rather than having to handle each key specially.
* | | Merge branch 'prop/global-state-at-top-level'Owen Jacobson2025-02-24
|\ \ \ | |_|/ |/| |
| * | Hoist global state access out of individual components.Owen Jacobson2025-02-21
|/ / | | | | | | | | | | | | | | Access to "global" (maybe "external?") state is now handled at the top level of the component hierarchy, in `+page.svelte`, `+layout.svelte`, and their associated scripts. State is otherwise passed down through props, and changes are passed up through callbacks. This is - hopefully - groundwork for refactoring state management a bit. I wanted to move access to state out to a smaller number of places, so that I have fewer places to update to implement reconnect logic. My broader goal is to make it easier to refactor these kinds of external side effects, as well, though no such changes are in this branch. This change also makes testing a mile easier, since tests can interact with props and callbacks instead of emulating the whole HTTP request stack and the Pilcrow API. This change removes do-very-little tests.
* | Ensure `must_use` warnings fire even after results are unwrapped.Owen Jacobson2025-02-21
| |
* | Remove stray importsOwen Jacobson2025-02-21
| |
* | Retire use of $page store in favour of Sv5 page stateOwen Jacobson2025-02-21
| |
* | Be a little more pedantic about constant str ref lifetimesOwen Jacobson2025-02-21
| |
* | Reorder impl to match traitOwen Jacobson2025-02-21
| |
* | Add missing awaits on goto() callsOwen Jacobson2025-02-21
| |
* | Fix invalid JSONOwen Jacobson2025-02-21
| |
* | Be a bit more careful with the nesting of anchors and list items.Owen Jacobson2025-02-21
| | | | | | | | Browsers cope with weird nestings mostly fine, but there's no upside for us in testing that.
* | Remove unused type attribute on textareaOwen Jacobson2025-02-21
| |
* | Remove duplicate `content` hack from reset.Owen Jacobson2025-02-21
| | | | | | | | | | | | According to <https://stackoverflow.com/a/6803278>, this was needed for old versions of Safari. However, since at least 2022, Safari has supported `content: none` just fine. Related Safari bug (still open as of this writing, comments relevnat): <https://bugs.webkit.org/show_bug.cgi?id=20032>
* | Provide fallback generic fonts for our custom fontsOwen Jacobson2025-02-21
| |
* | Remove nonexistent CSS variableOwen Jacobson2025-02-21
| |
* | Remove references to nonexistent italic variants of FiraCodeOwen Jacobson2025-02-21
| |
* | Write down a brief mission blurb.Owen Jacobson2025-02-21
| |
* | Split "set up the event source" and "apply events to state" from one another.Owen Jacobson2025-02-21
| |
* | Upgrade to Rust 1.85 and Rust 2024 edition.Owen Jacobson2025-02-20
| | | | | | | | | | | | | | | | There are a couple of migration suggestions from `cargo fix --edition` that I have deliberately skipped, which are intended to make sure that the changes to `if let` scoping don't bite us. They don't, I'm pretty sure, and if I turn out to be wrong, I'd rather fix the scoping issues (as they arise) than use `match` (`cargo fix --edition`'s suggestion). This change also includes a bulk reformat and a clippy cleanup. NOTA BENE: As this requires a new Rust toolchain, you'll need to update Rust (`rustup update`, normally) or the server won't build. This also applies to the Debian builder Docker image; it'll need to be rebuilt (from scratch, pulling its base image again) as well.
* | Use axios to compute event stream URL, why not.Owen Jacobson2025-02-20
| | | | | | | | It's amazing what you can learn by skimming the docs.
* | We no longer need async-trait.Owen Jacobson2025-02-20
| | | | | | | | It was here to support axum 0.7.x.
* | Remove the last lingering Svelte4-style event bindings.Owen Jacobson2025-02-20
| |
* | Let Svelte's `$derived` handling figure out update ordering for the channels ↵Owen Jacobson2025-02-20
| | | | | | | | | | | | | | | | | | | | | | | | | | list. This fixes a bug. To reproduce: 1. Open the client and log in. 2. Create a new channel using the `create channel` UI. The expected result - and the behaviour after this commit - is that the newly-created channel will be shown in the sidebar immediately. The buggy behaviour is that it was not, but would appear in the sidebar once the client is reloaded. The channel would also not appear for other clients until they reloaded. I'm not actually completely sure of _why_ this fixes the bug, but it does.
* | Upgrade to latest thiserrorOwen Jacobson2025-02-19
| |
* | Upgrade Axum to 0.8.1.Owen Jacobson2025-02-19
|/
* Upgrade sqlx to latest.Owen Jacobson2025-02-18
| | | | | | | | | | | | | | | | | | | | We can't quite update rusqlite to latest as well, as it uses a slightly newer libsqlite3-sys crate. I made sure this pair of versions is valid: % cargo tree --invert libsqlite3-sys libsqlite3-sys v0.30.1 ├── rusqlite v0.32.1 │ └── pilcrow v0.1.0 (/Users/owen/Projects/grimoire.ca/pilcrow) └── sqlx-sqlite v0.8.3 └── sqlx v0.8.3 └── pilcrow v0.1.0 (/Users/owen/Projects/grimoire.ca/pilcrow) libsqlite3-sys v0.30.1 └── sqlx-sqlite v0.8.3 └── sqlx-macros-core v0.8.3 └── sqlx-macros v0.8.3 (proc-macro) └── sqlx v0.8.3 (*) As both sqlx and rusqlite resolve to use the same version of libsqlite3-sys, we're fine.
* Mass-upgrade Rust dependenciesOwen Jacobson2025-02-18
|
* Mass update JS dependencies.Owen Jacobson2025-02-18
| | | | I hit an actual Svelte bug (it was misattributing which component state changes originated in) that's fixed in newer Svelte 5, so I might as well hit 'em all.