#+TODO: TODO INPROGRESS ONHOLD | DONE CLOSED
#+PRIORITIES: 0 4 3
* TODO [#1] replace the panics with error handling;
* TODO [#1] release: 0.1.0 when the pipelines are green;
* TODO [#2] error handling and details in the nom parsing;
* TODO [#2] add the support to HTTP URLs (non HTTPS);
* TODO [#2] fix or remove the validation of the port: it's inconsistent;
* TODO [#2] tests: hide behind a x11-tests feature flag the clipboard tests;
* TODO [#3] ci: reduce and refactor the Github actions to a minimal, reasonable set;
* TODO [#3] ci: consider moving branches a-la-gitflow under /features;
* TODO [#3] ci: extract the percentage of coverage in a README badge;
* TODO [#3] async version of the domain checking;
* TODO [#3] do not repeat the URL parsing to set the domain;
* TODO [#3] allow attributes when parsing the <title> tag (<title data-react-);
* TODO [#3] add a usage and an integration test checklist;
* TODO [#3] add a checklist to test for regressions (then add live-tests);
* TODO [#3] consider introducing automated versioning, releases and tagging;
* TODO [#3] consider release to crates.io;
* TODO [#3] add a dry run option that prints the email on STDOUT;
* TODO [#4] configure sender and receiver by options (do not pullute the ENV);
* TODO [#4] add support for =msmtpq --q-mgmt= instead of the msmtp-queue wrapper;
* TODO [#4] configure sender and receiver by config file (do not pullute the ENV);
* TODO [#4] make this a daemon in the background with its own socket;
* TODO [#4] implement a custom reader from the clipboard;
* TODO [#4] enable the spooling via crontab;
* TODO [#4] export stats, queue state / size and debug messages;
* TODO [#4] convert the list of tasks in issues / features / branches;
* TODO [#4] consider crossterm-rs/terminal;
* TODO [#4] add flag verbose: u8, structopt(short, long, parse(from_occurrences));
* TODO [#4] verify that the error path in has__redirect is really unreachable;
* TODO [#4] make the email an external template file to fill in;
* DONE [#0] docs: proper syntax for documentation blocks;
* DONE [#0] resolve the compilation warnings;* DONE [#1] docs: add a awesome-class quality README;
* DONE [#0] implement the URL title retrieving system and parsing;
* DONE [#0] plug in the HTTP parsing to extract the page title;
* DONE [#0] fix opts priority: --url to disable all, --host to ignore the clipboard;
* DONE [#0] add the scaffolding of the test suite;
* DONE [#1] docs: add a section in the README with the limitations (X11, HTTPS);
* DONE [#1] docs: README shields from shields.io;
* DONE [#1] docs: fix TOC in REFERENCES;
* DONE [#1] docs: add project disclaimer;
* DONE [#1] test: increase coverage: test for retry, redirect, parsing and options handling;
* DONE [#1] detect redirect and warn or fail;
* DONE [#1] detect redirect and follow it with limited attempts;
* DONE [#1] extract the path from both the clipboard URL and add the path as option;
* DONE [#1] add the --url option to the args to pass a full url;
* DONE [#1] add the option --clipboard to simplify the opts priorities;
* DONE [#1] the --clipboard option is the default if no option is given;
* DONE [#1] split the code in bin and lib for testing and code-cleanness;
* DONE [#2] do not fail if there is no title in the page;
* DONE [#2] ci: consider CI pipelines using GitHub actions;
* DONE [#2] add the initial scaffolding;
* DONE [#2] trim the page_title from whitespaces;
* DONE [#2] support relative redirects;
* DONE [#3] figure out why I cannot use .map__err;
* DONE [#3] test: resolve the COVERHERE coverage markers;
* DONE [#3] add cargo-make and create a task to ru the coverage;
* DONE [#3] configure sender and receiver by ENV;
* DONE [#3] async function to retrieve the URL title;
* DONE [#3] move this project in a repository of its own;* TODO configure sender and receiver by .config;
* DONE [#3] figure out the functional distinction between host and domain;
* DONE [#3] reconsider the support the domain or the host;
* DONE [#3] remove the debug prints;
* DONE [#3] add logging;
* DONE [#3] the CLI options are missing scheme, path, query and fragment;
* DONE [#3] mutex the options from args and the clipboarded value;
* DONE [#3] consider using conventional commits;
* DONE [#3] fix the parsing of query and fragment in parts if a URL was given;
* DONE [#3] add a command to run MSMTP and start processing the queue;
* DONE [#3] configure and tighten the linting levels;
* DONE [#3] use string constants where possible;
* CLOSED [#3] use constants for the email fields;
* CLOSED [#3] use lazy__static initialization for bare HTTP GET request;
* CLOSED [#4] if scheme is unused, remove it;