Agenda refactor

This commit is contained in:
alma 2026-01-14 17:01:21 +01:00
parent cb967a0ca6
commit ace4e5ca3a

View File

@ -146,12 +146,51 @@ export default async function CalendarPage() {
}
});
// If sync exists but is disabled, re-enable it instead of creating a new calendar
// If sync exists but is disabled, check if it's due to invalid credentials
// Don't re-enable if the last error was 401 (invalid credentials)
if (existingSync && !existingSync.syncEnabled) {
await prisma.calendarSync.update({
where: { id: existingSync.id },
data: { syncEnabled: true }
});
const isAuthError = existingSync.lastSyncError?.includes('401') ||
existingSync.lastSyncError?.includes('Unauthorized') ||
existingSync.lastSyncError?.includes('invalid');
if (!isAuthError) {
// Only re-enable if it's not an authentication error
await prisma.calendarSync.update({
where: { id: existingSync.id },
data: { syncEnabled: true }
});
} else {
// Try to discover calendars to verify if credentials are now valid
try {
const { discoverInfomaniakCalendars } = await import('@/lib/services/caldav-sync');
const externalCalendars = await discoverInfomaniakCalendars(
account.email,
account.password!
);
if (externalCalendars.length > 0) {
// Credentials are now valid, re-enable sync
await prisma.calendarSync.update({
where: { id: existingSync.id },
data: {
syncEnabled: true,
lastSyncError: null,
externalCalendarId: externalCalendars[0].id,
externalCalendarUrl: externalCalendars[0].url
}
});
}
} catch (error) {
// Credentials are still invalid, keep sync disabled
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
await prisma.calendarSync.update({
where: { id: existingSync.id },
data: {
lastSyncError: `Identifiants invalides ou expirés (${errorMessage}). Veuillez vérifier vos identifiants Infomaniak dans la page courrier.`
}
});
}
}
continue; // Skip to next account
}
@ -211,7 +250,30 @@ export default async function CalendarPage() {
}
} catch (error) {
// Log error but don't fail the page - account may not have calendar access or credentials may be invalid
console.log(`Infomaniak calendar sync not available for ${account.email} - ${error instanceof Error ? error.message : 'Unknown error'}`);
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
console.log(`Infomaniak calendar sync not available for ${account.email} - ${errorMessage}`);
// If it's a 401 error, the credentials are likely invalid - update lastSyncError in existing sync if any
if (errorMessage.includes('401') || errorMessage.includes('Unauthorized')) {
// Check if there's a disabled sync for this account
const disabledSync = await prisma.calendarSync.findFirst({
where: {
mailCredentialId: account.id,
provider: 'infomaniak',
syncEnabled: false
}
});
if (disabledSync) {
// Update the error message
await prisma.calendarSync.update({
where: { id: disabledSync.id },
data: {
lastSyncError: `Identifiants invalides ou expirés (401 Unauthorized). Veuillez vérifier vos identifiants Infomaniak dans la page courrier.`
}
});
}
}
// Continue with other accounts even if one fails
}
}
@ -423,9 +485,13 @@ export default async function CalendarPage() {
const hasActiveSync = cal.syncConfig?.syncEnabled === true && cal.syncConfig?.mailCredential;
// Exclude "Privée"/"Default" calendars that are not actively synced
// Also log for debugging if Infomaniak calendar is missing
if (isPrivateOrDefault && cal.syncConfig?.provider === 'infomaniak' && !hasActiveSync) {
console.log(`Infomaniak calendar found but sync is disabled: ${cal.id}, syncEnabled: ${cal.syncConfig?.syncEnabled}`);
// Log for debugging if Infomaniak calendar is missing
if (isPrivateOrDefault && cal.syncConfig?.provider === 'infomaniak') {
if (!hasActiveSync) {
console.log(`Infomaniak calendar found but sync is disabled: ${cal.id}, syncEnabled: ${cal.syncConfig?.syncEnabled}, error: ${cal.syncConfig?.lastSyncError || 'none'}`);
} else {
console.log(`Infomaniak calendar is active: ${cal.id}, email: ${cal.syncConfig?.mailCredential?.email}`);
}
}
if (isPrivateOrDefault && !hasActiveSync) {