Instead of applying inbox rules based on the unread mail state in the
inbox folder, we introduce the new ProcessingState enum on
the mail type. If a mail has been processed by the leader client, which
is checking for matching inbox rules, the ProcessingState is
updated. If there is a matching rule the flag is updated through the
MoveMailService, if there is no matching rule, the flag is updated
using the ClientClassifierResultService. Both requests are
throttled / debounced. After processing inbox rules, spam prediction
is conducted for mails that have not yet been moved by an inbox rule.
The ProcessingState for not matching ham mails is also updated using
the ClientClassifierResultService.
This new inbox rule handing solves the following two problems:
- when clicking on a notification it could still happen,
that sometimes the inbox rules where not applied
- when the inbox folder had a lot of unread mails, the loading time did
massively increase, since inbox rules were re-applied on every load
Co-authored-by: amm <amm@tutao.de>
Co-authored-by: Nick <nif@tutao.de>
Co-authored-by: das <das@tutao.de>
Co-authored-by: abp <abp@tutao.de>
Co-authored-by: jhm <17314077+jomapp@users.noreply.github.com>
Co-authored-by: map <mpfau@users.noreply.github.com>
Co-authored-by: Kinan <104761667+kibibytium@users.noreply.github.com>
Reviewed by jhm, abp, das.
The library is added to support training a spam classification model on
client. A custom rollupTensorFlow was created to only use the needed
methods on the final file, which also has multiple stubs which remove
code which is unwanted such as Requests.
Co-authored-by: jhm <17314077+jomapp@users.noreply.github.com>
Co-authored-by: abp <abp@tutao.de>
- Remove the ability to customize all colors, instead only allowing the
user to choose the base theme (light/dark) and the source color from
which the theme will be generated.
- Adjust newToOldColorTokenMap to correctly render new Material 3 theme
on old clients.
- Generate new Material 3 theme from old whitelabel config for non admin
users.
- Migrate whitelabel to new Material 3 theme post login of admin.
Close#9459
Co-authored-by: paw <paw-hub@users.noreply.github.com>
Co-authored-by: hrb-hub <hrb-hub@users.noreply.github.com>
Co-authored-by: ivk <ivk@tutao.de>
We use the REG command to manipulate/query the Windows registry.
Also adds CommandExecutor so that we have a nice, unit-testable way to
execute commands.
Closes#9398
Lazyload EventBannerImpl.ts to allow EventBanner.ts to stay with MailView
Adds a new directory mail-app/gui/date to date-gui chunk allowing calendar
related ui to stay inside mail-app folder structure.
Co-authored-by: ivk <ivk@tutao.de>
Search extends range on login based on the OfflineTimeRangeDate
Extending search range extends OfflineTimeRangeDate
Co-authored-by: ivk <ivk@tutao.de>
Close#8549
Refactor our instance deserialization/serialization pipeline, both on
TypeScript and on Rust [sdk] to use typeId and attributeIds instead of
typeNames and attributeNames. We furthermore ignore cardinalities
on associations until the instance layer and always
store associations as arrays. This commit introduces **eventual
consistency** on the client, i.e. we are from now on always storing data
in the newest schema format (activeApplicationVersionsForWritingSum)
which ensures that all data is already available on the client after
updating the client to a newer version. This removes the need for
offline migrations on the client and also removes backward migrations
on the server. Furthermore, the server model types are now available
on the client, retrievable through the ApplicationTypesFacade. This is
our first step towards FastSync.
Co-authored-by: nig <nig@tutao.de>
Co-authored-by: abp <abp@tutao.de>
Co-authored-by: jomapp <17314077+jomapp@users.noreply.github.com>
Co-authored-by: map <mpfau@users.noreply.github.com>
Co-authored-by: sug <sug@tutao.de>
Co-authored-by: Kinan <104761667+kibibytium@users.noreply.github.com>
To celebrate Tuta's eleventh birthday, there will be a special offer from 2025-03-26 10:00 CET until 2025-04-05 23:59 CEST. The Legend plan will be offered at the price of the Revolutionary plan.
- Tuta birthday offer added to theme engine
- Reintroduced Tuta Birthday promotion pricing for App Store subscriptions
Resolves#8623
Co-authored-by: cag <cag@tutao.de>
Co-authored-by: yoy <yoy@tutao.de>
Co-authored-by: jug <129423545+jgoedde@users.noreply.github.com>
Co-authored-by: arm <armhub@users.noreply.github.com>
- Own dialog, then, if user is happy, open native iOS in app rating dialog
- Triggers:
-- After using the app for minimum 7 days, we can show the dialog after the user created three events / after three mails
-- When the user did 10 activities within a 28-day period. (sending and email creating event. )
-- After succeeding the paywall
- Use device config to store data needed to trigger the dialog
- Added tests
- Added method to get the native app's installation date (Android & iOS)
- Added comment about `SKStoreReviewController.requestReview()` deprecation
Co-authored-by: arm <armhub@users.noreply.github.com>
Co-authored-by: jat <jat@tutao.de>
- The legend plan shall be sold for the price of revolutionary during
the cyber monday week
- Added a golden color to the builtin themes
- Changed the order of plans to highlight the legend plan better
Co-authored-by: jat <jat@tutao.de>
Co-authored-by: arm <armhub@users.noreply.github.com>
Co-authored-by: jug <jug@tutao.de>
After rebase of restructuring for app split we were left with two
versions of `openMailbox()`. The one that supports opening mails was
not used anymore.
We swapped the implementation for a real one, moved it into the mail
part of the source tree and refactored both `openMailbox()` and
`openCalendar()` to be classes with injected dependencies.
Fix#7650
Co-authored-by: hrb-hub <181954414+hrb-hub@users.noreply.github.com>
This adds a dialog containing the contents of the notifications page
of the onboarding wizard. This new dialog is displayed when switching
the current extended notification setting via the rich notifications
news item or the settings page.
Co-authored-by: wec43 <162116343+wec43@users.noreply.github.com>
This commit moves some functions that are used in both App and Worker.
Also renames CommonMailUtils to SharedMailUtils.ts because there share
functionalities between both apps and creates a new file CommonMailUtils
to store functions that are common between app and worker.
This commit implements the production build script of Calendar's webapp.
Calendar app contains user management, so this commit also moves
settings page files that are related to it to the common chunk.
Co-authored-by: Murilo Pereira <34790144+murilopereirame@users.noreply.github.com>
This commit fixes the Build scripts and missing imports
from rebase. Fixes tests after apps split, and This commit fixes the
Android project changing the gradle task used to build the Android app.
Also fixes some import errors caused by the rebase.
Implemented extended notifications which include the sender.
Re-implemented credential encryption and storage, moved credential
data to the native storage, changed credential encryption on mobile to
always be device lock + implement app lock independently of encryption.
Re-implemented SSE on desktop in a more modular way.
Re-organized iOS app to share the code between the main app code and
app extensions.
Close#6608
Co-authored-by: wec43 <wec@tutao.de>
Adapt the tests to work with the new format of loading the fallback and
the wasm files. This commit also fixes the ESBuild function to correctly
resolve the fallback and generate it.
Remove the hardcoded make command and add the option to use a provided
command instead of make. Also adds the possibility to provide env vars
and a working dir for Wasm generation.
* Moves Setup Wizard to it owns chunk
Setup wizard is only needed on native devices such Android and iOS,
with that in mind, this commit moves the whole setup wizard to it owns
chunks, so it can be loaded on demand and isn't automatically loaded in
desktop or web app.
Closes#6844
* Add missing translation
Introduces a new package in order to avoid tutanota-crypto depending
on the whole tutanota-utils. With this package we can have one canonical
CryptoError.
We add another entry point to tutanota-crypto in order to be able to
import only error classes from any chunk.
We've adjusted moduleResolution for tsconfig to support export maps
for our new entry point.
We've updated @rollup/plugin-typescript to add support for export maps.
We have reorganized utils to adjust the chunking. Error utils are now
a part of the main chunk.
We have moved ServiceWorkerClient into the main chunk because we need
to handle the errors and also because it is anyway invoked only after
the other initialization is done.
close#6342
main changes:
* split UI-related code off CalendarUtils into CalendarGuiUtils
* moved the ParserCombinator lib into common-min (mainly because of
ParserError which inherits from TutanotaError)
* moved UI-related calendar code that can be used from other places
than calendar view into its own bundle date-gui.
date now contains common calendar code for worker/main, date-gui
depends on it and adds UI-related code.
* according to rollups type definitions, the output option property is
ignored by rollup.rollup, so it moved to bundle.write
* we don't use commonjs deps in the desktop bundle anymore, so the
commonjs plugin can go away from DesktopBuilder
[build] remove some unnecessary rollup plugins
[build] unify the native plugins
[build] vendor keytar
[build] vendor better-sqlite3 deps and restrict module resolution
it's now checked in and can be updated with buildSrc/updateLibs.js
close#4213
Allow deriving keys with it if the server requests it, but do not use it
by default to create new keys.
tutadb#1559
Co-authored-by: @vitoreiji, @paw-hub, @charlag