Skip to content

Commit c9f2e84

Browse files
committed
display spam score on the tab
1 parent 6519f98 commit c9f2e84

File tree

3 files changed

+39
-32
lines changed

3 files changed

+39
-32
lines changed

src/components/EmailBodyTabs.tsx

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,23 @@
1-
import { useState } from "react";
1+
import { useState, } from "react";
22
import { Email } from "../types";
33
import BrokenLinksChecker from "./BrokenLinksChecker";
44
import SpamAssassin from "./SpamAssassin";
55
import { open } from "@tauri-apps/api/shell";
66
import GoogleChrome from "./icons/GoogleChrome";
77
import Firefox from "./icons/Firefox";
8-
import { cacheDir } from "@tauri-apps/api/path"
9-
import { writeTextFile, createDir, readDir } from "@tauri-apps/api/fs";
10-
import { BaseDirectory } from "@tauri-apps/api/fs"
118
import HtmlPreview from "./HtmlPreview";
9+
import { ensureEmailFileIsWritten } from "../utils/utils";
1210

13-
async function ensureEmailFileIsWritten(email: Email): Promise<string> {
14-
const fileName = `${email.id}.html`;
15-
const cacheDirPath = await cacheDir();
16-
const appCacheDir = `${cacheDirPath}/BladeMail`;
17-
18-
try {
19-
await createDir("BladeMail", {
20-
dir: BaseDirectory.Cache
21-
});
22-
} catch (e) { }
23-
24-
try {
25-
const result = await writeTextFile(`BladeMail/${fileName}`, email.html, {
26-
dir: BaseDirectory.Cache
27-
});
28-
29-
console.log(result)
30-
} catch (e) {
31-
}
32-
33-
return appCacheDir + "/" + fileName;
34-
}
3511

3612
export default function EmailBodyTabs({ email }: { email: Email }) {
3713
const tabs = ["html", "html source", "text", "raw", 'links checker', 'Spam Assassin'];
3814
const [activeTab, setActiveTab] = useState("html");
15+
const [spamScore, setSpamScore] = useState<number>(0);
3916

4017
async function openInBrowser(browserName: 'google chrome' | 'firefox') {
4118
// ensure html file is write to temp folder
4219
const filePath = await ensureEmailFileIsWritten(email);
4320

44-
console.log(filePath)
4521
if (filePath) {
4622
open(filePath, browserName)
4723
}
@@ -58,13 +34,13 @@ export default function EmailBodyTabs({ email }: { email: Email }) {
5834
onClick={() => setActiveTab(tab)}
5935
>
6036
{tab.toUpperCase()}
37+
{tab === "Spam Assassin" && <span className="bg-white text-gray-500 px-1 ml-0.5 rounded">{spamScore}</span>}
6138
</li>
6239
))}
6340
</ul>
6441
</div>
6542
<div className="h-full w-full overflow-auto p-5">
6643
<div className="h-full w-full rounded-xl bg-white text-sm">
67-
6844
{/* html preview tab */}
6945
<div className={`relative h-full w-full ${activeTab === "html" ? "flex" : "hidden"}`}>
7046
<HtmlPreview html={email.html} />
@@ -108,7 +84,7 @@ export default function EmailBodyTabs({ email }: { email: Email }) {
10884

10985
{/* spam assassin tab */}
11086
<div className={activeTab === "Spam Assassin" ? "block" : "hidden"}>
111-
<SpamAssassin email={email} />
87+
<SpamAssassin email={email} setSpamScore={setSpamScore} />
11288
</div>
11389
</div>
11490
</div>

src/components/SpamAssassin.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { useEffect, useState } from "react";
22
import { Email } from "../types";
33
import { getClient, ResponseType, Body } from "@tauri-apps/api/http";
4-
import { randomQuotes } from "../utils/quote-machines";
54

65
export interface SpamReport {
76
report: string,
@@ -25,11 +24,18 @@ async function checkSpam(raw: string) {
2524
return response.data
2625
}
2726

28-
export default function SpamAssassin({ email }: { email: Email }) {
27+
export default function SpamAssassin({ email, setSpamScore }: { email: Email, setSpamScore: (score: number) => void }) {
2928
const [result, setResult] = useState<SpamReport>()
3029

3130
useEffect(() => {
32-
checkSpam(email.raw).then(response => setResult(response))
31+
const timer = setTimeout(() => {
32+
checkSpam(email.raw).then(response => {
33+
setResult(response)
34+
setSpamScore(response.score)
35+
})
36+
}, 500); // this prevent we check spam when email is open too fast
37+
38+
return () => clearTimeout(timer);
3339
}, [])
3440

3541
return (

src/utils/utils.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import { Email } from "../types";
2+
import { cacheDir } from "@tauri-apps/api/path"
3+
import { writeTextFile, createDir, readDir } from "@tauri-apps/api/fs";
4+
import { BaseDirectory } from "@tauri-apps/api/fs"
25

36
export function makeExcerpt(email: Email) {
47
let excerpt = "";
@@ -30,4 +33,26 @@ export function parseUrls(html: string): string[] {
3033
images.push(match[2]);
3134
}
3235
return [...new Set(links.concat(images))]
36+
}
37+
38+
39+
export async function ensureEmailFileIsWritten(email: Email): Promise<string> {
40+
const fileName = `${email.id}.html`;
41+
const cacheDirPath = await cacheDir();
42+
const appCacheDir = `${cacheDirPath}/BladeMail`;
43+
44+
try {
45+
await createDir("BladeMail", {
46+
dir: BaseDirectory.Cache
47+
});
48+
} catch (e) { }
49+
50+
try {
51+
await writeTextFile(`BladeMail/${fileName}`, email.html, {
52+
dir: BaseDirectory.Cache
53+
});
54+
} catch (e) {
55+
}
56+
57+
return appCacheDir + "/" + fileName;
3358
}

0 commit comments

Comments
 (0)