Commit log

bc45d1b fix: images display (#237)

Click to expand commit body
* fix: images display (#223)

Signed-off-by: drew <me@andrinoff.com>

* fix: improve image rendering

Signed-off-by: drew <me@andrinoff.com>

---------

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

27b7b1f fix: preserve paginated emails during background refresh (#235)

Click to expand commit body
* fix: preserve paginated emails during background refresh

EmailsRefreshedMsg was overwriting m.emailsByAcct and rebuilding
m.emails from scratch, discarding any emails loaded via pagination.
This caused a race where paginated emails appeared in the inbox list
but could not be opened because they no longer existed in the main
model's email store.

Merge refreshed emails with existing paginated emails instead of
replacing them. Also remove an unnecessary getEmailByUIDAndAccount
lookup in ViewEmailMsg that silently blocked opening emails not yet
in the store, and drop the unused email parameter from
fetchEmailBodyCmd.

* fix: restore email existence guard in ViewEmailMsg

Keep the pre-fetch check to avoid unnecessary IMAP server calls
for emails not in the local store. The merge fix in
EmailsRefreshedMsg ensures paginated emails are preserved, so
this guard now works correctly.

* fix: prevent email view from closing after paginated emails load

Three interconnected issues caused the email view to auto-close when
opening an email that was loaded via pagination:

1. The inbox's EmailsRefreshedMsg handler overwrote its internal email
   data with the raw (unmerged) refresh response, discarding paginated
   emails. Since main.go already merges the data and pushes it via
   SetEmails, the inbox handler now only clears the refreshing flag.

2. EmailsRefreshedMsg was forwarded to m.current twice: once at the top
   of Update (line 110) and again explicitly. This second call could
   target the wrong component or overwrite correctly merged data. Fixed
   by calling m.inbox.Update() directly to clear the refreshing state.

3. The EmailsFetchedMsg handler unconditionally set m.current = m.inbox,
   which would close the email view if a pagination fetch with offset 0
   completed while the user was reading an email. Fixed by only switching
   to inbox from a loading screen, not from an active email view.

Signed-off-by: drew <me@andrinoff.com>

---------

Signed-off-by: drew <me@andrinoff.com>
Co-authored-by: drew <me@andrinoff.com>

arclayto and drew created

fbddb86 fix: mark emails as read when opened (#233)

Click to expand commit body
Add MarkEmailAsRead() that sets the IMAP \Seen flag via UidStore.
Called from FetchEmailBodyFromMailbox() after successfully fetching
the email body. Uses the existing BODY.PEEK[] fetch to keep fetch
and flag-setting separate.

Fixes #232

arclayto created

17914d9 fix: sort email batches by date instead of UID (#231)

Click to expand commit body
UID ordering is not reliable for all IMAP servers (e.g. Proton Bridge),
causing emails to display oldest-first. Sort by Date instead, consistent
with the Date-based sorting already used elsewhere in the codebase.

Fixes #230

arclayto created

4054266 docs: update demo.gif (#229)

github-actions[bot] created

eda9086 feat: multiple attachments and better filepicker (#227)

Click to expand commit body
Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

3510334 feat: add Nix flake for building and development (#228)

Click to expand commit body
* feat: add Nix flake for building and development

* docs: add Nix Flakes in the installation methods

Signed-off-by: drew <me@andrinoff.com>

* ci: add flake update workflow

Signed-off-by: drew <me@andrinoff.com>

---------

Signed-off-by: drew <me@andrinoff.com>
Co-authored-by: Alexander Holte-Davidsen <alexander.holte.davidsen@kulturit.no>
Co-authored-by: drew <me@andrinoff.com>

Alexander Holte-Davidsen , Alexander Holte-Davidsen , and drew created

c552eef fix(deps): update module charm.land/bubbletea/v2 to v2.0.1 (#226)

Click to expand commit body
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

renovate[bot] and renovate[bot] created

ef25957 feat: s/mime (#225)

Click to expand commit body
* feat: s/mime

Signed-off-by: drew <me@andrinoff.com>

* test: fix focus cycling tests

Signed-off-by: drew <me@andrinoff.com>

* feat: email view verification of s/mime

Signed-off-by: drew <me@andrinoff.com>

* feat: add support for encryption

Signed-off-by: drew <me@andrinoff.com>

* fix: settings reconfig

Signed-off-by: drew <me@andrinoff.com>

---------

Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

5902333 ci: update installation URL (#221)

Drew Smirnoff created

91a8dd8 fix: add support for STARTTLS (#219)

Click to expand commit body
Signed-off-by: drew <me@andrinoff.com>

Drew Smirnoff created

49b9aaf docs: update demo.gif (#202)

Click to expand commit body
Co-authored-by: andrinoff <175145001+andrinoff@users.noreply.github.com>

github-actions[bot] and andrinoff created

1c1e8d7 ci: fix config (#216)

Drew Smirnoff created

4a9a70b feat: mailing lists (#147) (#214)

Drew Smirnoff created

f5595b5 ci: add feat to the labeler (#215)

Drew Smirnoff created

1736110 style: make keybinds always stick to the bottom (#213)

Drew Smirnoff created

d611eb0 feat: contextual tips (#212)

Drew Smirnoff created

8fdf8d4 chore(deps): update dependency typescript to ~5.9.0 (#206)

Click to expand commit body
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

renovate[bot] and renovate[bot] created

0548296 docs: typo fix (#208)

Drew Smirnoff created

a5c1c08 docs: update README (#207)

Click to expand commit body
* docs: update README

* docs: add banner

Drew Smirnoff created

396ee6a docs: add website (#205)

Click to expand commit body
* docs: add website

docs: add website

* fix: remove yml

Drew Smirnoff created

81012dd chore(deps): migrate to charm v2 (#204)

Click to expand commit body
* chore(scope): migrate to charm v2

* test: upgrade tests to v2, correct html_test

Drew Smirnoff created

5d34707 ci: fix demo config (#203)

Drew Smirnoff created

f36bfd5 ci: add fetch_email to dummy config (#201)

Drew Smirnoff created

af7c56a fix!: sending from wrong email (#199) (#200)

Drew Smirnoff created

4728bda feat: secure passwords (#193) (#194)

Click to expand commit body
* feat: OS keyring to store passwords

* fix: add migration tool to the config

Drew Smirnoff created

464630f fix: add flatpak detection and update (#192)

Drew Smirnoff created

e5fa284 chore(deps): update actions/checkout action to v6 (#151)

Click to expand commit body
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Drew Smirnoff <me@andrinoff.com>

renovate[bot] , renovate[bot] , and Drew Smirnoff created

91659b1 ci: checkout repo before labeler (#190)

Drew Smirnoff created

b20f1cd ci: include title in labeler (#188)

Drew Smirnoff created

60989c8 ci: issue labeler + footer changed for goreleaser (#186)

Drew Smirnoff created

700fe3e chore: add mastodon verification (#185)

Drew Smirnoff created

f7d73fa ci: fix workflows not triggered by release (#183)

Drew Smirnoff created

48f0c44 fix: highlight links (#182)

Drew Smirnoff created

42774ab ci: add mastodon-notify (#181)

Drew Smirnoff created

69433d1 chore(deps): update goreleaser/goreleaser-action action to v7 (#164)

renovate[bot] created

78fa42c docs: update demo.gif (#175)

github-actions[bot] created

89e29f1 docs: add INSTALLATION.md (#180)

Click to expand commit body
* docs: add MacOS guide (#169)

* docs: installation on Linux (#168)

* feat: Windows install guide

* docs: update README to include new link to docs (#166)

Drew Smirnoff created

9829e86 feat: flatpak support (#179)

Click to expand commit body
* feat: flatpakref added to the website

* fix: build err

* fix: error with Go build

* Make the read-only Go caches writable so we can delete them

Drew Smirnoff created

997d0b4 fix: refresh/load-more cursor reset (#170) (#177)

Drew Smirnoff created

c3f6cfe feat: disable images (#171) (#172)

Click to expand commit body
* feat: new settings design and disable images (#171)

* feat: turn off images in email (#171)

Drew Smirnoff created

12147c6 chore: fix demo.tape (#174)

Click to expand commit body
Removed 1 more step to show Settings, and not Trash and Archive

Drew Smirnoff created

32422e1 chore: remove gif (#173)

Click to expand commit body
Removes an unnecessary GIF, added by accident

Drew Smirnoff created

5bd554c chore(deps): update peter-evans/create-pull-request action to v8 (#155)

renovate[bot] created

0a59072 docs: update demo.gif (#162)

Click to expand commit body
docs: update demo.gif from release [skip ci]

Co-authored-by: andrinoff <175145001+andrinoff@users.noreply.github.com>

github-actions[bot] and andrinoff created

83120e6 fix: remove co in demo (#161)

Click to expand commit body
* docs: update demo.gif from release [skip ci]

* fix: remove co

---------

Co-authored-by: andrinoff <175145001+andrinoff@users.noreply.github.com>
Co-authored-by: drew <me@andrinoff.com>

github-actions[bot] , andrinoff , and drew created

76ee4d2 ci: fix typo in demo (#160)

Drew Smirnoff created

9d5abef ci: auto-generate demos (#159)

Click to expand commit body
* ci: remove HOME override

* fix: remove install-fonts

* fix: manual install of vhs
cause: charmbracelet/vhs-action#459

* fix: not persist credentials

* chore: update tape

* fix: update branch name

* fix: update the path of config

* fix: get font and load in color

* fix: attempting to get color and cursor

* fix: remove build step

* include version in go build

Drew Smirnoff created

55524ff chore: cleanup assets (#157)

Drew Smirnoff created

637a8f4 chore: update go version back to 1.26 (#156)

Drew Smirnoff created