feat: Add audio playback system with Media3 and comprehensive audio content classification

- Add Media3 dependencies (ExoPlayer, HLS, MediaSession, UI) for audio streaming
- Implement AudioPlayerService as MediaSessionService with foreground playback support
- Create AudioHandler for playback control and AudioMedia domain model with AudioContentType enum
- Add MiniPlayerBar and FullPlayerSheet UI components with play/pause, seek, and navigation controls
- Implement AudioClassifier with strict priority
This commit is contained in:
2026-02-11 11:23:22 -05:00
parent 1deac8850a
commit 2b8134f5b7
21 changed files with 1394 additions and 60 deletions
+76 -1
View File
@@ -47,13 +47,88 @@
- Mode lecture focus sans distraction
- Barre d'outils de formatage
### 🤖 Intelligence Artificielle (Google Gemini)
### Intelligence Artificielle (Google Gemini)
- **Analyse IA d'URL** : Extraction intelligente du titre, description et tags via Gemini
- **Suggestions de tags IA** : Génération automatique de tags pertinents
- **Classification de contenu** : Détection automatique du type (Article, Vidéo, Tutorial, Repository)
- **Fallback multi-modèles** : Essai automatique de plusieurs modèles Gemini (2.5 Flash Lite → 1.5 Flash)
- **Classification en lot** : Scan et classification de tous les bookmarks existants
### 🏷️ Scanner et Classer (Maintenance)
La fonction **"Scanner et Classer"** disponible dans les paramètres permet d'analyser automatiquement tous vos bookmarks pour améliorer leur organisation :
#### Fonctionnement automatique
1. **Analyse des URLs** : Le système examine chaque lien de votre collection
2. **Détection du type de contenu** : Classification automatique selon 14 catégories :
- **Article** : Articles de blog, actualités, publications
- **Vidéo** : YouTube, Vimeo, Dailymotion, Twitch, Netflix
- **🎵 Musique** : Spotify (tracks/albums/artists/playlists), Deezer, Tidal, Apple Music, YouTube Music, Bandcamp, SoundCloud, Mixcloud, Beatport
- **📻 Radio** *(nouveau)* : TuneIn, Radio Garden, myTuner, iHeartRadio, OnlineRadioBox, radio.net, FluxRadios, Radio-Canada OHdio (direct/premiere), flux streaming (.m3u/.m3u8/.pls), serveurs Icecast/Shoutcast
- **🎙️ Podcast** : Apple Podcasts, Overcast, Pocket Casts, Castbox, Stitcher, Acast, Anchor, Libsyn, Simplecast, Buzzsprout, Spotify (shows/épisodes), Radio-Canada OHdio (balados), flux RSS/XML audio
- **Social** : Facebook, Twitter/X, Instagram, LinkedIn, Reddit, TikTok, Pinterest
- **Repository** : GitHub, GitLab, BitBucket, StackOverflow
- **Shopping** : Amazon, eBay, Etsy, AliExpress
- **Document** : Google Docs, Notion, Trello, Jira, Confluence
- **PDF** : Fichiers PDF directs
- **Image** : Images directes, Imgur, Flickr
- **Newsletter** : Lettres d'information (Substack, Revue, Mailchimp)
- **News** : Sites d'actualités (BBC, CNN, Reuters, Le Monde, Le Figaro, The Guardian, New York Times, sites avec "news" dans le domaine)
- **Unknown** : Contenu non identifié (sites personnels, blogs non catégorisés, outils spécialisés, contenu ne correspondant à aucune catégorie prédéfinie)
3. **Identification des sites** : Détection automatique du nom du site (YouTube, GitHub, Amazon, etc.)
4. **Ajout de tags intelligents** : Ajout automatique de tags pertinents selon le type :
- `video` pour les vidéos
- `music` pour la musique
- `radio` pour les radios
- `podcast` pour les podcasts
- `social` pour les réseaux sociaux
- `news` pour les actualités
- `repository`, `dev` pour le code
- `shopping` pour les achats
- `article`, `document`, `pdf`, `image`, `newsletter`
#### Classification audio intelligente (Radio / Podcast / Musique)
L'application utilise un classifieur audio dédié (`AudioClassifier`) qui analyse l'URL avec un **ordre de priorité strict** pour éviter les faux positifs :
1. **RADIO** (priorité la plus haute) — Détecté si :
- L'URL pointe vers un flux streaming direct (`.m3u`, `.m3u8`, `.pls`)
- L'hôte contient un serveur de streaming (Icecast, Shoutcast, StreamTheWorld)
- Le sous-domaine est `stream.*` ou `live.*`
- L'URL est sur un agrégateur radio (TuneIn, Radio Garden, iHeartRadio, etc.)
- Radio-Canada OHdio : paths `/direct/`, `/premiere/`, `/audio-fil/` (hors balados)
2. **PODCAST** (priorité moyenne) — Détecté si :
- L'URL est sur une plateforme dédiée (Apple Podcasts, Overcast, Pocket Casts, Anchor, etc.)
- Spotify : paths `/show/` ou `/episode/` uniquement
- Radio-Canada OHdio : paths contenant `/balados/`
- Flux RSS/XML audio (`.xml`, `.rss`)
3. **MUSIQUE** (priorité standard) — Détecté si :
- L'URL est sur un service de streaming musical (Deezer, Tidal, Apple Music, YouTube Music, Bandcamp, SoundCloud, Mixcloud, Beatport)
- Spotify : paths `/track/`, `/album/`, `/artist/` ou `/playlist/`
> **Exemple Spotify** : `open.spotify.com/track/...` → Musique, `open.spotify.com/show/...` → Podcast, `open.spotify.com/episode/...` → Podcast
#### Avantages
- **Organisation automatique** : Vos liens sont catégorisés sans effort manuel
- **Filtrage amélioré** : Utilisez les tags auto-générés dans le menu latéral pour filtrer
- **Statistiques précises** : Le tableau de bord affiche la répartition par type de contenu
- **Recherche optimisée** : Les tags additionnels améliorent la recherche full-text
#### Utilisation
1. Allez dans **Paramètres** → **Maintenance**
2. Appuyez sur **"Scanner et Classer"**
3. Patientez pendant l'analyse (le temps dépend du nombre de liens)
4. Un message indique le nombre de liens mis à jour
5. Les nouveaux tags sont immédiatement disponibles pour le filtrage
#### Notes importantes
- Cette fonction ne modifie que les métadonnées (type, site, tags)
- Le contenu de vos liens (titre, description, URL) reste inchangé
- Les tags existants sont conservés, de nouveaux tags sont simplement ajoutés
- L'opération est sans risque et peut être répétée si nécessaire
### 🌐 Extraction de Métadonnées
- Extraction automatique des OpenGraph (titre, description, image) via JSoup
- Détection du type de contenu (article, vidéo, image, audio, code, repository, social, etc.)