# xmltv XMLTV for electronic program guide (EPG) parser and generator using serde. ## Features - Flatten some elements like `` to be a boolean in order to avoid boilerplate - CLI available to perform some operations ## Usage ### Library ```rust use std::str::FromStr; use quick_xml::de::from_str; use quick_xml::se::to_string_with_root; use xmltv::*; fn main() { let xml = "\ \ Les feux de l'amour é\ \ \ Le journal\ \ \ Le journal\ \ "; // deserialize into the root object (Tv) let item: Tv = from_str(xml).unwrap(); // serialize into string let _out = to_string_with_root("tv", &tv).unwrap(); } ``` To serialize **big files**, you can look into `tests/from_files.rs::test_programmes_from_files`. It reads programmes one by one without loading everything in RAM. ### Command line interface (CLI) Install it with `cargo install xmltv` or with the binaries. - `-c ` or `--channels=`: channels you want to keep, ie: `-c tf1,m6,Arte`. You can also check them with the TUI using `-c ?` - `--cleanse `: items you want to remove form the XMLTV file. I made this option because, in XMLTV file there are a lot of data and we don't need all of them and we may want to reduce the size of the file. Available items are: - `credits`: remove all credits. If you want to remove some of them, use: - `directors` - `actors` - `writers` - `adapters` - `producers` - `composers` - `editors` - `presenters` - `commentators` - `guests` - `categories` - `new` - `countries` - `keywords` - `sub-titles` - `languages` - `videos` - `audios` - `subtitles` - `last-chances` - `descriptions` - `dates` - `origin-languages` - `length` - `premieres` - `previously-showns` - `ratings` - `star-ratings` - `reviews` - `images` - `episode-nums` - `icons` - `urls` - `-d NUMBER` or `--days NUMBER`: number of days in the EPG to keep - `-o ` or `--output `: new XMLTV file you want to generate otherwise it is printed in the console. ## Roadmap - [ ] CLI - [ ] limit to *N* days `-d `. `-d 3` means from today and the nex 3 days - [ ] clean: remove some unwanted elements to make it lighter. You can remove description `--no-description`, all credits `--no-credits` or partial one (`--no-directors`, `--no-actors`, `--no-guests`, ...), `--no-categories`, `--no-keywords`, `--no-countries`, ... You can also remove unwanted time slot(s) (like between 0:00-6:00 and/or 23:30-23:59) or unwanted day(s) `--days 1,2,3,5,6,7` (here no thursday, first day is monday). - [ ] load external filter (`-l ` or `--load `) from a configuration file to avoid a command with too many arguments or just to follow favorite programmes. - [ ] export to various format (RSS/Atom/Jsonfeed, iCal, JSON, CSV) - [ ] Terminal UI (TUI) - [x] check channels to filter - [ ] search in the title (and maybe other like keywords, description, credits) - [ ] show EPG - [ ] export selected program to calendar (`.ics`) - [ ] configure favorites and filters? ## Ressources XMLTV DTD is here: https://github.com/XMLTV/xmltv/blob/master/xmltv.dtd