Add special case handling for draft messages so that if a Draft is
updated via an event it is correctly updated on the IMAP client via a
the new `imap.MessageUpdated event`.
This patch also updates Gluon to the latest version.
After sending, a client might append to the sent folder over IMAP.
In this case, we perform deduplication and return the message ID of the
sent message. However, if we haven't already processed this message in
gluon, it doesn't work as expected.
This change polls the event stream immediately after send. Note that it
doesn't wait for these events to be processed; that should be done in a
follow-up commit.
The newer liteapi contact code saves keys as *crypto.Key, however the
legacy code expects them to be strings. There was a bug in connecting
the new code to the legacy code: it was assumed these strings were meant
to be a base64 encoded string but they were actually just raw string
bytes.
We should only listen on constants.Host when serving IMAP and SMTP.
This change fixes that. It also adds a test that we can send over SMTP
and receive over IMAP.
Only delete messages when unlabeled from trash/spam if they only exists
in All Mail and (spam or trash).
This patch also ports delete_from_trash.feature and use status rather
than fetch to count messages in a mailboxes.
It's possible (but very rare, I don't think proton still allows it)
for an address to have no keys. If we try to load the address keyring
for such an address, this change logs a warning that no decryption
entities were found in the unlocked keyring.
It bumps liteapi to a version that does not return an error when no
keys could be unlocked.
Depending on the timing of bridge closure, it was possible for the
IMAP/SMTP servers to not have started serving yet. By grouping this in
a cancelable goroutine group (*xsync.Group), we mitigate this issue.
Further, depending on internet disconnection timing during user login,
it was possible for a user to be improperly logged in. This change
fixes this and adds test coverage for it.
Lastly, depending on timing, certain background tasks (updates check,
connectivity ping) could be improperly started or closed. This change
groups them in the *xsync.Group as well to be closed properly.
This fixes various race conditions and leaks related to the user's sync
and API event stream. It was possible for a sync/stream to begin after a
user was already closed; this change prevents that by managing the
goroutines related to sync/stream within cancellable groups.
Add missing Close calls.
Properly handle nil channel for `user.startSync`.
This patch also updated liteapi and Gluon to latest master and dev
version respectively.
There was a race condition internal to the go-smtp library.
In order to fix it, a version bump was necessary.
However, this significantly changed the library interface.
We need to unlock the user keyring anyway to unlock the address keyring,
so we should just return it instead of re-unlocking the user keyring
when sending a message.
When an IMAP client appends a message to a mailbox, it can specify
which flags it wants the appended message to have. We need to handle
these in a proton-specific way; not-seen messages need to be imported
with the Unread bool set to true, and flagged messages need to
additionally be imported with the Starred label.
Other: renaming of bridge-gui.
WIP: locate bridge exe.
WIP: bridge process launch.
WIP: cleaner closure of bridge.
WIP: grpcClient connection retries.
WIP: clean exit when bridge process is killed.
Fixed issues from MR review. [skip-ci].
WIP: Fixed gRPC case in CMakelists.txt [skip-ci]
It caused issues on Debian.
WIP: update gRPC/protobuf and tweaked CMakeLists.txt. [skip-ci]
WIP: Fixed a bug where splash screen could not be dismissed. [skip-ci]
WIP: updates
WIP: cache on disk and autostart.
WIP: mail, keychain and more.
WIP: updated grpc version in go mod file.
WIP: user list.
WIP: RPC service placeholder
WIP: test C++ RPC client skeleton.
Other: missing license script update.
WIP: use Qt test framework.
WIP: test for app and login calls.
WIP: test for update & cache on disk calls.
WIP: tests for mail settings calls.
WIP: all client tests.
WIP: linter fixes.
WIP: fix missing license link.
WIP: update dependency_license script for gRPC and protobuf.
WIP: removed unused file.
WIP: app & login event streaming tests.
WIP: update event stream tests.
WIP: completed event streaming tests.
GODT-1554: qt C++ frontend skeleton.
WIP: C++ backend declaration.
wip: started drafting user model.
WIP: users. not functional.
WIP: invokable methods
WIP: Exception class + backend 'injection' into QML.
WIP: switch to VCPKG to ease multi-arch compilation, C++ RPC client skeleton.
WIP: Renaming and reorganisation
WIP:introduced new 'grpc' go frontend.
WIP: Worker & Oveerseer for thread management.
WIP: added log to C++ app.
WIP: event stream architecture on Go side.
WIP: event parsing and streamer stopping.
WIP: Moved grpc to frontend subfolder + use vcpkg for gRPC and protobuf.
WIP: windows building ok
WIP: wired a few messages
WIP: more wiring.
WIP: Fixed imports after rebase on top of devel.
WIP: wired some bool and string properties.
WIP: more properties.
WIP: wired cache on disk stuff
WIP: connect event watcher.
WIP: login
WIP: fix showSplashScreen
WIP: Wired login calls.
WIP: user list.
WIP: Refactored main().
WIP: User retrieval .
WIP: no shared pointer in user model.
WIP: fixed user count.
WIP: cached goos.
WIP: Wired autostart
WIP: beta channel toggle wired.
WIP: User removal
WIP: wired theme
WIP: implemented configure apple mail.
WIP: split mode.
WIP: fixed user updates.
WIP: fixed Quit from tray icon
WIP: wired CurrentEmailClient
WIP: wired UseSSLForSMTP
WIP: wired change ports .
WIP: wired DoH. .
WIP: wired keychain calls.
WIP: wired autoupdate option.
WIP: QML Backend clean-up.
WIP: cleanup.
WIP: moved user related files in subfolder. .
WIP: User are managed using smart pointers.
WIP: cleanup.
WIP: more cleanup.
WIP: mail events forwarding
WIP: code inspection tweaks from CLion.
WIP: moved QML, cleanup, and missing copyright notices.
WIP: Backend is not QMLBackend.
Other: fixed issues reported by Leander. [skip ci]
WIP: updates
WIP: cache on disk and autostart.
WIP: mail, keychain and more.
WIP: updated grpc version in go mod file.
WIP: user list.
WIP: RPC service placeholder
WIP: test C++ RPC client skeleton.
Other: missing license script update.
WIP: use Qt test framework.
WIP: test for app and login calls.
WIP: test for update & cache on disk calls.
WIP: tests for mail settings calls.
WIP: all client tests.
WIP: linter fixes.
WIP: fix missing license link.
WIP: update dependency_license script for gRPC and protobuf.
WIP: removed unused file.
WIP: app & login event streaming tests.
WIP: update event stream tests.
WIP: completed event streaming tests.
- GODT-1246 Implement settings view.
- GODT-1257 GODT-1246: Account and Help view
- GODT-1298: Minimal working build (panics)
- GODT-1298: loading QML (needs Popup window)
- GODT-1298: WARN: Adding PopupWindow not possible!
In therecipe qt the `quickwidgets` classes are within `quick` module, but
forgot to add library and include paths into cgo flags. Therefore
compilation fails and it would be hard to patch therecipe in order to
fix it.
I am not sure if rewrite PopupWindow into go would make any difference,
therefore I decided to use normal QML Window without borders.
- GODT-1298: Rework status window, add backend props, slots and signals.
- GODT-1298: Users
- GODT-1298: Login
- GODT-1298: WIP Help and bug report
- GODT-1178: MacOS dock icon control
- GODT-1298: Help, bug report, update and events
- GODT-1298: Apple Mail config and Settings (without cache on disk)
- GODT-1158: simple on-disk cache in store
- GODT-1158: better member naming in event loop
- GODT-1158: create on-disk cache during bridge setup
- GODT-1158: better job options
- GODT-1158: rename GetLiteral to GetRFC822
- GODT-1158: rename events -> currentEvents
- GODT-1158: unlock cache per-user
- GODT-1158: clean up cache after logout
- GODT-1158: randomized encrypted cache passphrase
- GODT-1158: Opt out of on-disk cache in settings
- GODT-1158: free space in cache
- GODT-1158: make tests compile
- GODT-1158: optional compression
- GODT-1158: cache custom location
- GODT-1158: basic capacity checker
- GODT-1158: cache free space config
- GODT-1158: only unlock cache if pmapi client is unlocked as well
- GODT-1158: simple background sync worker
- GODT-1158: set size/bodystructure when caching message
- GODT-1158: limit store db update blocking with semaphore
- GODT-1158: dumb 10-semaphore
- GODT-1158: properly handle delete; remove bad bodystructure handling
- GODT-1158: hacky fix for caching after logout... baaaaad
- GODT-1158: cache worker
- GODT-1158: compute body structure lazily
- GODT-1158: cache size in store
- GODT-1158: notify cacher when adding to store
- GODT-1158: 15 second store cache watcher
- GODT-1158: enable cacher
- GODT-1158: better cache worker starting/stopping
- GODT-1158: limit cacher to less concurrency than disk cache
- GODT-1158: message builder prio + pchan pkg
- GODT-1158: fix pchan, use in message builder
- GODT-1158: no sem in cacher (rely on message builder prio)
- GODT-1158: raise priority of existing jobs when requested
- GODT-1158: pending messages in on-disk cache
- GODT-1158: WIP just a note about deleting messages from disk cache
- GODT-1158: pending wait when trying to write
- GODT-1158: pending.add to return bool
- GODT-1225: Headers in bodystructure are stored as bytes.
- GODT-1158: fixing header caching
- GODT-1158: don't cache in background
- GODT-1158: all concurrency set in settings
- GODT-1158: worker pools inside message builder
- GODT-1158: fix linter issues
- GODT-1158: remove completed builds from builder
- GODT-1158: remove builder pool
- GODT-1158: cacher defer job done properly
- GODT-1158: fix linter
- GODT-1299: Continue with bodystructure build if deserialization failed
- GODT-1324: Delete messages from the cache when they are deleted on the server
- GODT-1158: refactor cache tests
- GODT-1158: move builder to app/bridge
- GODT-1306: Migrate cache on disk when location is changed (and delete when disabled)