diff --git a/src/mail-app/mail/model/SpamClassificationHandler.ts b/src/mail-app/mail/model/SpamClassificationHandler.ts index ff53a0b3a8..34e458faed 100644 --- a/src/mail-app/mail/model/SpamClassificationHandler.ts +++ b/src/mail-app/mail/model/SpamClassificationHandler.ts @@ -37,27 +37,33 @@ export class SpamClassificationHandler { sendMoveMailServiceRequest = debounce(DEBOUNCE_MOVE_MAIL_SERVICE_REQUESTS_MS, async (mailFacade: MailFacade) => { // Each update to MoveMailService (for ham or spam mails that did move) requires one request // We debounce the requests to a rate of DEBOUNCE_MOVE_MAIL_SERVICE_REQUESTS_MS - await this.sendMoveMailRequest(mailFacade, this.hamMoveMailData) - await this.sendMoveMailRequest(mailFacade, this.spamMoveMailData) + if (this.hamMoveMailData) { + const moveMailData = this.hamMoveMailData + this.hamMoveMailData = null + await this.sendMoveMailRequest(mailFacade, moveMailData) + } + if (this.spamMoveMailData) { + const moveMailData = this.spamMoveMailData + this.spamMoveMailData = null + await this.sendMoveMailRequest(mailFacade, moveMailData) + } }) - async sendMoveMailRequest(mailFacade: MailFacade, moveMailData: MoveMailData | null): Promise { - if (moveMailData) { - mailFacade - .moveMails(moveMailData.mails, moveMailData.targetFolder, null, ClientClassifierType.CLIENT_CLASSIFICATION) - .catch( - ofClass(LockedError, (e) => { - // LockedError should no longer be thrown!?! - console.log("moving mails failed", e, moveMailData.targetFolder) - }), - ) - .catch( - ofClass(PreconditionFailedError, (e) => { - // move mail operation may have been locked by other process - console.log("moving mails failed", e, moveMailData.targetFolder) - }), - ) - } + async sendMoveMailRequest(mailFacade: MailFacade, moveMailData: MoveMailData): Promise { + mailFacade + .moveMails(moveMailData.mails, moveMailData.targetFolder, null, ClientClassifierType.CLIENT_CLASSIFICATION) + .catch( + ofClass(LockedError, (e) => { + // LockedError should no longer be thrown!?! + console.log("moving mails failed", e, moveMailData.targetFolder) + }), + ) + .catch( + ofClass(PreconditionFailedError, (e) => { + // move mail operation may have been locked by other process + console.log("moving mails failed", e, moveMailData.targetFolder) + }), + ) } public async predictSpamForNewMail(mail: Mail, mailDetails: MailDetails, sourceFolder: MailFolder, folderSystem: FolderSystem): Promise { diff --git a/src/mail-app/workerUtils/spamClassification/SpamClassifier.ts b/src/mail-app/workerUtils/spamClassification/SpamClassifier.ts index 20148155cd..e7d5468683 100644 --- a/src/mail-app/workerUtils/spamClassification/SpamClassifier.ts +++ b/src/mail-app/workerUtils/spamClassification/SpamClassifier.ts @@ -38,7 +38,6 @@ import type { Tensor } from "@tensorflow/tfjs-core" import type { ModelArtifacts } from "@tensorflow/tfjs-core/dist/io/types" import type { ModelFitArgs } from "@tensorflow/tfjs-layers" import { OfflineStoragePersistence } from "../index/OfflineStoragePersistence" -import { Mail } from "../../../common/api/entities/tutanota/TypeRefs" assertWorkerOrNode() @@ -64,7 +63,7 @@ export type SpamPredMailDatum = { ownerGroup: Id } -const PREDICTION_THRESHOLD = 0.5 +const PREDICTION_THRESHOLD = 0.55 export type PreprocessConfiguration = { isPreprocessMails: boolean