From 6e266b3dba2589b878ecbd719c1de501f5313525 Mon Sep 17 00:00:00 2001 From: alma Date: Mon, 21 Apr 2025 13:01:00 +0200 Subject: [PATCH] mail page rest --- app/courrier/page.tsx | 91 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 13 deletions(-) diff --git a/app/courrier/page.tsx b/app/courrier/page.tsx index 0cd95fe7..df6d70a2 100644 --- a/app/courrier/page.tsx +++ b/app/courrier/page.tsx @@ -450,22 +450,22 @@ const renderEmailContent = (email: Email) => { console.log('Subject:', email.subject); console.log('Body length:', email.body.length); console.log('First 200 chars of body:', email.body.substring(0, 200)); - + try { - const parsed = parseFullEmail(email.body); + const parsed = parseFullEmail(email.body) as ParsedEmailContent; console.log('Parsed content:', { - hasText: 'text' in parsed ? !!parsed.text : false, - hasHtml: 'html' in parsed ? !!parsed.html : false, - textPreview: 'text' in parsed ? parsed.text?.substring(0, 100) : 'No text', - htmlPreview: 'html' in parsed ? parsed.html?.substring(0, 100) : 'No HTML' + hasText: !!parsed.text, + hasHtml: !!parsed.html, + textPreview: parsed.text?.substring(0, 100) || 'No text', + htmlPreview: parsed.html?.substring(0, 100) || 'No HTML' }); + + const isHtml = !!parsed.html || email.body.includes('<'); + const content = parsed.text || parsed.html || email.body; - const content = 'text' in parsed ? parsed.text : ('html' in parsed ? parsed.html || '' : email.body); console.log('Selected content type:', isHtml ? 'HTML' : 'Plain text'); console.log('Content preview:', content.substring(0, 100) + '...'); - const isHtml = 'html' in parsed ? !!parsed.html : content.includes('<'); - if (isHtml) { // Enhanced HTML sanitization const sanitizedHtml = content @@ -497,7 +497,7 @@ const renderEmailContent = (email: Email) => { return (
- {'attachments' in parsed && parsed.attachments && parsed.attachments.length > 0 && ( + {parsed.attachments && parsed.attachments.length > 0 && (

Attachments:

@@ -542,7 +542,7 @@ const renderEmailContent = (email: Email) => { return (
- {'attachments' in parsed && parsed.attachments && parsed.attachments.length > 0 && ( + {parsed.attachments && parsed.attachments.length > 0 && (

Attachments:

@@ -1283,7 +1283,7 @@ export default function MailPage() { console.log('Subject:', email.subject); console.log('Body length:', email.body.length); console.log('First 200 chars of body:', email.body.substring(0, 200)); - + try { const parsed = parseFullEmail(email.body); console.log('Parsed content:', { @@ -1292,8 +1292,73 @@ export default function MailPage() { textPreview: 'text' in parsed ? parsed.text?.substring(0, 100) : 'No text', htmlPreview: 'html' in parsed ? parsed.html?.substring(0, 100) : 'No HTML' }); + + let preview = ''; + if ('text' in parsed && parsed.text) { + preview = parsed.text; + console.log('Using text content for preview'); + } else if ('html' in parsed && parsed.html) { + preview = parsed.html + .replace(/]*>[\s\S]*?<\/style>/gi, '') + .replace(/]*>[\s\S]*?<\/script>/gi, '') + .replace(/<[^>]+>/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + console.log('Using HTML content for preview'); + } + + if (!preview) { + console.log('No preview from parsed content, using raw body'); + preview = email.body + .replace(/<[^>]+>/g, ' ') + .replace(/ |‌|»|«|>/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + } + + console.log('Final preview before cleaning:', preview.substring(0, 100) + '...'); + + // Clean up the preview + preview = preview + .replace(/^>+/gm, '') + .replace(/Content-Type:[^\n]+/g, '') + .replace(/Content-Transfer-Encoding:[^\n]+/g, '') + .replace(/--[a-zA-Z0-9]+(-[a-zA-Z0-9]+)?/g, '') + .replace(/boundary=[^\n]+/g, '') + .replace(/charset=[^\n]+/g, '') + .replace(/[\r\n]+/g, ' ') + .replace(/=3D/g, '=') + .replace(/=20/g, ' ') + .replace(/=E2=80=99/g, "'") + .replace(/=E2=80=9C/g, '"') + .replace(/=E2=80=9D/g, '"') + .replace(/=E2=80=93/g, '–') + .replace(/=E2=80=94/g, '—') + .replace(/=C2=A0/g, ' ') + .replace(/=C3=A0/g, 'à') + .replace(/=C3=A9/g, 'é') + .replace(/=C3=A8/g, 'è') + .replace(/=C3=AA/g, 'ê') + .replace(/=C3=AB/g, 'ë') + .replace(/=C3=B4/g, 'ô') + .replace(/=C3=B9/g, 'ù') + .replace(/=C3=BB/g, 'û') + .trim(); + + // Take first 100 characters + preview = preview.substring(0, 100); - // ... rest of the function ... + // Try to end at a complete word + if (preview.length === 100) { + const lastSpace = preview.lastIndexOf(' '); + if (lastSpace > 80) { + preview = preview.substring(0, lastSpace); + } + preview += '...'; + } + + console.log('Final preview:', preview); + return preview || 'No preview available'; } catch (e) { console.error('Error in generateEmailPreview:', e); return 'Error generating preview';