Files
noteflow/scripts/diagnose-rss.js
Claude 852d631c25 Fluidity: Visual feedback system + RSS auto-init + Diagnostic
Améliorations majeures de la fluidité de l'application :

RSS Auto-Initialization:
- Auto-initialisation de 3 flux français par défaut (Le Monde, BBC, Le Figaro)
- Lancement automatique au premier démarrage du serveur
- Timeout protection (15s) pour parsing RSS
- Logging détaillé avec emojis pour meilleur suivi

Visual Feedback System:
- Skeleton loaders CSS pour performance perçue améliorée
- Indicateur de rafraîchissement (top-right) pendant mises à jour RSS
- Loading spinners animés
- Animations fade-in fluides
- Empty states avec styles appropriés

Diagnostic Tools:
- Script diagnose-rss.js pour troubleshooting
- Affiche état complet: feeds, articles, résumés, settings
- Auto-initialise la base de données si nécessaire

Client Improvements:
- Fonctions showRefreshIndicator() / hideRefreshIndicator()
- Indicateur visuel pendant auto-refresh toutes les 30s
- Meilleure gestion des erreurs avec feedback visuel

Files modified:
- services/rss-scheduler.js: initializeDefaultFeeds()
- public/css/skeleton.css: NEW - Complete visual feedback system
- public/index.html: Added skeleton.css + refresh indicator
- public/js/complete-app.js: Visual feedback functions
- scripts/diagnose-rss.js: NEW - RSS diagnostic tool

User impact:
✓ Flux RSS automatiquement peuplés au premier lancement
✓ Interface plus fluide avec indicateurs visuels
✓ Performance perçue grandement améliorée
✓ Auto-refresh transparent toutes les 30s
2025-11-11 17:55:01 +00:00

81 lines
2.7 KiB
JavaScript

// Script de diagnostic RSS
const { getAll, initDatabase } = require('../config/database');
const logger = require('../config/logger');
async function diagnoseRSS() {
console.log('\n==================== DIAGNOSTIC RSS ====================\n');
try {
// Initialize database first
await initDatabase();
// Vérifier les flux RSS
const feeds = await getAll('SELECT * FROM rss_feeds');
console.log(`📰 Flux RSS en base: ${feeds?.length || 0}`);
if (feeds && feeds.length > 0) {
feeds.forEach(feed => {
console.log(` - ${feed.title || feed.url} (${feed.enabled ? 'activé' : 'désactivé'})`);
console.log(` Dernière mise à jour: ${feed.last_fetched_at || 'jamais'}`);
});
} else {
console.log(' ⚠️ Aucun flux RSS configuré');
console.log(' 💡 Ajoutez un flux via l\'interface admin');
}
console.log('');
// Vérifier les articles
const articles = await getAll('SELECT COUNT(*) as count FROM rss_articles');
console.log(`📄 Articles RSS en base: ${articles[0]?.count || 0}`);
if (articles[0]?.count > 0) {
const recentArticles = await getAll(`
SELECT
a.title,
a.pub_date,
f.title as feed_title
FROM rss_articles a
LEFT JOIN rss_feeds f ON a.feed_id = f.id
ORDER BY a.pub_date DESC
LIMIT 5
`);
console.log('\n5 derniers articles:');
recentArticles.forEach((article, i) => {
console.log(` ${i + 1}. ${article.title}`);
console.log(` Source: ${article.feed_title || 'Inconnu'}`);
console.log(` Date: ${article.pub_date}`);
});
}
console.log('');
// Vérifier les résumés
const summaries = await getAll('SELECT COUNT(*) as count FROM rss_summaries');
console.log(`📝 Résumés RSS en base: ${summaries[0]?.count || 0}`);
console.log('');
// Vérifier les settings
const settings = await getAll('SELECT * FROM settings WHERE key LIKE "rss%" OR key LIKE "openrouter%"');
console.log(`⚙️ Settings RSS/OpenRouter: ${settings?.length || 0}`);
if (settings && settings.length > 0) {
settings.forEach(setting => {
const value = setting.key.includes('api_key')
? (setting.value ? '***' + setting.value.slice(-4) : 'non défini')
: setting.value;
console.log(` - ${setting.key}: ${value}`);
});
}
console.log('\n========================================================\n');
} catch (error) {
console.error('❌ Erreur lors du diagnostic:', error);
}
process.exit(0);
}
// Exécuter le diagnostic
diagnoseRSS();