Add README.md with project documentation
61dfb8d parent: 901512c added
README.md +153 -0 | new file mode 100644 | ||
| @@ -0,0 +1,153 @@ | ||
| 1 | +# RSS Podcast Downloader | |
| 2 | + | |
| 3 | +Un outil en Rust avec interface egui pour télécharger automatiquement des podcasts à partir de flux RSS. | |
| 4 | + | |
| 5 | +## Fonctionnalités | |
| 6 | + | |
| 7 | +- **Gestion des flux RSS** : Ajout, modification et suppression de flux podcast | |
| 8 | +- **Téléchargement automatique** : Synchronisation et téléchargement des nouveaux épisodes | |
| 9 | +- **Dossiers personnalisés** : Chaque flux peut avoir son propre dossier de téléchargement | |
| 10 | +- **Interface graphique** : Application native avec egui (OpenGL) | |
| 11 | +- **Persistance** : Sauvegarde des flux configurés dans un fichier JSON | |
| 12 | + | |
| 13 | +## Prérequis | |
| 14 | + | |
| 15 | +- [Rust](https://www.rust-lang.org/) 1.70 ou supérieur | |
| 16 | +- Git (optionnel, pour cloner le dépôt) | |
| 17 | + | |
| 18 | +## Installation | |
| 19 | + | |
| 20 | +### À partir des sources | |
| 21 | + | |
| 22 | +```bash | |
| 23 | +# Cloner le dépôt | |
| 24 | +git clone https://github.com/votre-utilisateur/rss-podcast-dl-egui.git | |
| 25 | +cd rss-podcast-dl-egui | |
| 26 | + | |
| 27 | +# Compiler en mode release | |
| 28 | +cargo build --release | |
| 29 | + | |
| 30 | +# Le binaire sera généré dans target/release/rss-podcast-dl-egui.exe | |
| 31 | +``` | |
| 32 | + | |
| 33 | +## Utilisation | |
| 34 | + | |
| 35 | +### Lancement | |
| 36 | + | |
| 37 | +```bash | |
| 38 | +cargo run | |
| 39 | +``` | |
| 40 | + | |
| 41 | +Ou exécuter directement le binaire compilé : | |
| 42 | +```bash | |
| 43 | +./target/release/rss-podcast-dl-egui | |
| 44 | +``` | |
| 45 | + | |
| 46 | +### Interface | |
| 47 | + | |
| 48 | +L'application propose une interface simple avec : | |
| 49 | + | |
| 50 | +- **Écran d'accueil** : | |
| 51 | + - Bouton "Ajouter un flux" pour ajouter un nouveau flux RSS | |
| 52 | + - Bouton "Synchroniser les flux" pour télécharger les nouveaux épisodes | |
| 53 | + - Liste des flux configurés avec options d'édition et suppression | |
| 54 | + | |
| 55 | +- **Ajout d'un flux** : | |
| 56 | + - **Nom du podcast** : Nom pour identifier le flux | |
| 57 | + - **URL du flux RSS** : URL du flux RSS du podcast | |
| 58 | + - **Dossier de téléchargement** : Chemin absolu vers le dossier de destination | |
| 59 | + | |
| 60 | +- **Édition d'un flux** : | |
| 61 | + - Modification du nom, URL et dossier de téléchargement | |
| 62 | + - Activation/désactivation du flux | |
| 63 | + | |
| 64 | +## Configuration | |
| 65 | + | |
| 66 | +Les flux sont automatiquement sauvegardés dans un fichier `feeds.json` situé dans : | |
| 67 | +- **Windows** : `%APPDATA%\rss-podcast-dl-egui\feeds.json` | |
| 68 | +- **Linux/macOS** : `~/.config/rss-podcast-dl-egui/feeds.json` | |
| 69 | + | |
| 70 | +### Format du fichier de configuration | |
| 71 | + | |
| 72 | +```json | |
| 73 | +[ | |
| 74 | + { | |
| 75 | + "url": "https://exemple.com/podcast.rss", | |
| 76 | + "name": "Nom du Podcast", | |
| 77 | + "download_path": "/chemin/vers/dossier", | |
| 78 | + "enabled": true | |
| 79 | + } | |
| 80 | +] | |
| 81 | +``` | |
| 82 | + | |
| 83 | +## Structure du projet | |
| 84 | + | |
| 85 | +``` | |
| 86 | +. | |
| 87 | +├── src/ | |
| 88 | +│ ├── app.rs # Application principale egui | |
| 89 | +│ ├── config/ | |
| 90 | +│ │ ├── app_state.rs # État global de l'application | |
| 91 | +│ │ ├── feed.rs # Structure Feed et méthodes | |
| 92 | +│ │ ├── episode.rs # Structure Episode | |
| 93 | +│ │ ├── mod.rs # Exports du module config | |
| 94 | +│ │ └── storage.rs # Sauvegarde/chargement des flux | |
| 95 | +│ ├── main.rs # Point d'entrée | |
| 96 | +│ ├── rss/ | |
| 97 | +│ │ ├── downloader.rs # Téléchargement des épisodes | |
| 98 | +│ │ ├── episode_extractor.rs # Extraction des épisodes depuis le RSS | |
| 99 | +│ │ ├── mod.rs | |
| 100 | +│ │ ├── parser.rs # Parsing du flux RSS | |
| 101 | +│ │ └── sync.rs # Synchronisation des flux | |
| 102 | +│ └── ui/ | |
| 103 | +│ ├── add_feed_dialog.rs # Dialogue d'ajout de flux | |
| 104 | +│ ├── feed_edit_dialog.rs # Dialogue d'édition de flux | |
| 105 | +│ ├── feed_list.rs # Liste des flux | |
| 106 | +│ ├── home.rs # Écran d'accueil | |
| 107 | +│ └── mod.rs | |
| 108 | +├── spec/ | |
| 109 | +│ ├── init-plan.md # Plan initial du projet | |
| 110 | +│ └── init-tasks.md # Tâches détaillées | |
| 111 | +└── Cargo.toml | |
| 112 | +``` | |
| 113 | + | |
| 114 | +## Technologies utilisées | |
| 115 | + | |
| 116 | +- **Langage** : Rust | |
| 117 | +- **Framework UI** : [egui](https://github.com/emilk/egui) - Immediate mode GUI | |
| 118 | +- **Parsing RSS** : [rss](https://crates.io/crates/rss) crate | |
| 119 | +- **Sérialisation** : [serde](https://crates.io/crates/serde) avec [serde_json](https://crates.io/crates/serde_json) | |
| 120 | +- **Logging** : [log](https://crates.io/crates/log) avec [env_logger](https://crates.io/crates/env_logger) | |
| 121 | +- **Requêtes HTTP** : [reqwest](https://crates.io/crates/reqwest) (avec support blocking) | |
| 122 | + | |
| 123 | +## Dépendances | |
| 124 | + | |
| 125 | +Voir [Cargo.toml](Cargo.toml) pour la liste complète des dépendances. | |
| 126 | + | |
| 127 | +## Variables d'environnement | |
| 128 | + | |
| 129 | +- `RUST_LOG` : Niveau de logging (ex: `RUST_LOG=info`) | |
| 130 | + | |
| 131 | +## Roadmap | |
| 132 | + | |
| 133 | +- [x] Phase 1 : Structure de base et configuration | |
| 134 | +- [x] Phase 2 : Interface utilisateur principale | |
| 135 | +- [x] Phase 3 : Gestion des flux RSS | |
| 136 | +- [x] Phase 4 : Persistance des données | |
| 137 | +- [x] Phase 5 : Synchronisation et téléchargement | |
| 138 | +- [ ] Détection automatique des nouveaux épisodes | |
| 139 | +- [ ] Notifications de téléchargement | |
| 140 | +- [ ] Support des playlists | |
| 141 | +- [ ] Filtrage par date ou numéro d'épisode | |
| 142 | + | |
| 143 | +## Contribution | |
| 144 | + | |
| 145 | +Les contributions sont les bienvenues ! Ouvrez une issue ou soumettez une pull request. | |
| 146 | + | |
| 147 | +## Licence | |
| 148 | + | |
| 149 | +Ce projet est sous licence MIT. Voir [LICENSE](LICENSE) pour plus de détails. | |
| 150 | + | |
| 151 | +--- | |
| 152 | + | |
| 153 | +Développé avec Rust et egui. | |
| \ No newline at end of file | ||
| new file mode 100644 | |||
| @@ -0,0 +1,153 @@ | |||
| 1 | +# RSS Podcast Downloader | ||
| 2 | + | ||
| 3 | +Un outil en Rust avec interface egui pour télécharger automatiquement des podcasts à partir de flux RSS. | ||
| 4 | + | ||
| 5 | +## Fonctionnalités | ||
| 6 | + | ||
| 7 | +- **Gestion des flux RSS** : Ajout, modification et suppression de flux podcast | ||
| 8 | +- **Téléchargement automatique** : Synchronisation et téléchargement des nouveaux épisodes | ||
| 9 | +- **Dossiers personnalisés** : Chaque flux peut avoir son propre dossier de téléchargement | ||
| 10 | +- **Interface graphique** : Application native avec egui (OpenGL) | ||
| 11 | +- **Persistance** : Sauvegarde des flux configurés dans un fichier JSON | ||
| 12 | + | ||
| 13 | +## Prérequis | ||
| 14 | + | ||
| 15 | +- [Rust](https://www.rust-lang.org/) 1.70 ou supérieur | ||
| 16 | +- Git (optionnel, pour cloner le dépôt) | ||
| 17 | + | ||
| 18 | +## Installation | ||
| 19 | + | ||
| 20 | +### À partir des sources | ||
| 21 | + | ||
| 22 | +```bash | ||
| 23 | +# Cloner le dépôt | ||
| 24 | +git clone https://github.com/votre-utilisateur/rss-podcast-dl-egui.git | ||
| 25 | +cd rss-podcast-dl-egui | ||
| 26 | + | ||
| 27 | +# Compiler en mode release | ||
| 28 | +cargo build --release | ||
| 29 | + | ||
| 30 | +# Le binaire sera généré dans target/release/rss-podcast-dl-egui.exe | ||
| 31 | +``` | ||
| 32 | + | ||
| 33 | +## Utilisation | ||
| 34 | + | ||
| 35 | +### Lancement | ||
| 36 | + | ||
| 37 | +```bash | ||
| 38 | +cargo run | ||
| 39 | +``` | ||
| 40 | + | ||
| 41 | +Ou exécuter directement le binaire compilé : | ||
| 42 | +```bash | ||
| 43 | +./target/release/rss-podcast-dl-egui | ||
| 44 | +``` | ||
| 45 | + | ||
| 46 | +### Interface | ||
| 47 | + | ||
| 48 | +L'application propose une interface simple avec : | ||
| 49 | + | ||
| 50 | +- **Écran d'accueil** : | ||
| 51 | + - Bouton "Ajouter un flux" pour ajouter un nouveau flux RSS | ||
| 52 | + - Bouton "Synchroniser les flux" pour télécharger les nouveaux épisodes | ||
| 53 | + - Liste des flux configurés avec options d'édition et suppression | ||
| 54 | + | ||
| 55 | +- **Ajout d'un flux** : | ||
| 56 | + - **Nom du podcast** : Nom pour identifier le flux | ||
| 57 | + - **URL du flux RSS** : URL du flux RSS du podcast | ||
| 58 | + - **Dossier de téléchargement** : Chemin absolu vers le dossier de destination | ||
| 59 | + | ||
| 60 | +- **Édition d'un flux** : | ||
| 61 | + - Modification du nom, URL et dossier de téléchargement | ||
| 62 | + - Activation/désactivation du flux | ||
| 63 | + | ||
| 64 | +## Configuration | ||
| 65 | + | ||
| 66 | +Les flux sont automatiquement sauvegardés dans un fichier `feeds.json` situé dans : | ||
| 67 | +- **Windows** : `%APPDATA%\rss-podcast-dl-egui\feeds.json` | ||
| 68 | +- **Linux/macOS** : `~/.config/rss-podcast-dl-egui/feeds.json` | ||
| 69 | + | ||
| 70 | +### Format du fichier de configuration | ||
| 71 | + | ||
| 72 | +```json | ||
| 73 | +[ | ||
| 74 | + { | ||
| 75 | + "url": "https://exemple.com/podcast.rss", | ||
| 76 | + "name": "Nom du Podcast", | ||
| 77 | + "download_path": "/chemin/vers/dossier", | ||
| 78 | + "enabled": true | ||
| 79 | + } | ||
| 80 | +] | ||
| 81 | +``` | ||
| 82 | + | ||
| 83 | +## Structure du projet | ||
| 84 | + | ||
| 85 | +``` | ||
| 86 | +. | ||
| 87 | +├── src/ | ||
| 88 | +│ ├── app.rs # Application principale egui | ||
| 89 | +│ ├── config/ | ||
| 90 | +│ │ ├── app_state.rs # État global de l'application | ||
| 91 | +│ │ ├── feed.rs # Structure Feed et méthodes | ||
| 92 | +│ │ ├── episode.rs # Structure Episode | ||
| 93 | +│ │ ├── mod.rs # Exports du module config | ||
| 94 | +│ │ └── storage.rs # Sauvegarde/chargement des flux | ||
| 95 | +│ ├── main.rs # Point d'entrée | ||
| 96 | +│ ├── rss/ | ||
| 97 | +│ │ ├── downloader.rs # Téléchargement des épisodes | ||
| 98 | +│ │ ├── episode_extractor.rs # Extraction des épisodes depuis le RSS | ||
| 99 | +│ │ ├── mod.rs | ||
| 100 | +│ │ ├── parser.rs # Parsing du flux RSS | ||
| 101 | +│ │ └── sync.rs # Synchronisation des flux | ||
| 102 | +│ └── ui/ | ||
| 103 | +│ ├── add_feed_dialog.rs # Dialogue d'ajout de flux | ||
| 104 | +│ ├── feed_edit_dialog.rs # Dialogue d'édition de flux | ||
| 105 | +│ ├── feed_list.rs # Liste des flux | ||
| 106 | +│ ├── home.rs # Écran d'accueil | ||
| 107 | +│ └── mod.rs | ||
| 108 | +├── spec/ | ||
| 109 | +│ ├── init-plan.md # Plan initial du projet | ||
| 110 | +│ └── init-tasks.md # Tâches détaillées | ||
| 111 | +└── Cargo.toml | ||
| 112 | +``` | ||
| 113 | + | ||
| 114 | +## Technologies utilisées | ||
| 115 | + | ||
| 116 | +- **Langage** : Rust | ||
| 117 | +- **Framework UI** : [egui](https://github.com/emilk/egui) - Immediate mode GUI | ||
| 118 | +- **Parsing RSS** : [rss](https://crates.io/crates/rss) crate | ||
| 119 | +- **Sérialisation** : [serde](https://crates.io/crates/serde) avec [serde_json](https://crates.io/crates/serde_json) | ||
| 120 | +- **Logging** : [log](https://crates.io/crates/log) avec [env_logger](https://crates.io/crates/env_logger) | ||
| 121 | +- **Requêtes HTTP** : [reqwest](https://crates.io/crates/reqwest) (avec support blocking) | ||
| 122 | + | ||
| 123 | +## Dépendances | ||
| 124 | + | ||
| 125 | +Voir [Cargo.toml](Cargo.toml) pour la liste complète des dépendances. | ||
| 126 | + | ||
| 127 | +## Variables d'environnement | ||
| 128 | + | ||
| 129 | +- `RUST_LOG` : Niveau de logging (ex: `RUST_LOG=info`) | ||
| 130 | + | ||
| 131 | +## Roadmap | ||
| 132 | + | ||
| 133 | +- [x] Phase 1 : Structure de base et configuration | ||
| 134 | +- [x] Phase 2 : Interface utilisateur principale | ||
| 135 | +- [x] Phase 3 : Gestion des flux RSS | ||
| 136 | +- [x] Phase 4 : Persistance des données | ||
| 137 | +- [x] Phase 5 : Synchronisation et téléchargement | ||
| 138 | +- [ ] Détection automatique des nouveaux épisodes | ||
| 139 | +- [ ] Notifications de téléchargement | ||
| 140 | +- [ ] Support des playlists | ||
| 141 | +- [ ] Filtrage par date ou numéro d'épisode | ||
| 142 | + | ||
| 143 | +## Contribution | ||
| 144 | + | ||
| 145 | +Les contributions sont les bienvenues ! Ouvrez une issue ou soumettez une pull request. | ||
| 146 | + | ||
| 147 | +## Licence | ||
| 148 | + | ||
| 149 | +Ce projet est sous licence MIT. Voir [LICENSE](LICENSE) pour plus de détails. | ||
| 150 | + | ||
| 151 | +--- | ||
| 152 | + | ||
| 153 | +Développé avec Rust et egui. | ||
| \ No newline at end of file | \ No newline at end of file | ||