First, it's best to open the file as binary so the JSON module itself
can figure out how to decode it (it will just use UTF-8). Then, we can
use `load` instead of `loads` to avoid needing to read the file
explicitly ourselves.
Previously, if continuing to edit (i.e. invoking the $EDITOR) multiple
times in one invocation of EditPlugin.edit_objects, the plugin would
reload the old state from the file tags. The initial 'old state' is
usually only loaded from the database, though. As a consequence, if
database and tags were not in sync, the diffs from first and all
subsequent edits could differ unexpectedly.
we just look for the bad string in the HTML. this has the downside
that we may consider songs that have those exact lyrics (you never
know, really) may trigger this warning as well and we would fail to
fetch those songs.
we also fail if lyrics contain another magic string that seems to come
up when you do fill in the CAPTCHA after being blocked.
this is necessary because otherwise artists with different string
representations but the same slug would overwrite one another
this outlines more clearly the code duplication between the rst code
and the slugify function, something which can be fixed later.
we write the artists files in a subdirectory, to avoid infinite
recursions or flooding the current directory needlessly.
this way, the user has a good base structure and can just chain the
command into sphinx to continue building the next format, after
possible tweaks.
skip was a misnomer: we actually skip "unfetched" lyrics. this means
it's somewhat of a double-negative and really confusing.
--local is clearer, although less in opposition with --force
this makes the ePUB easier to parse by e-readers, because they do not
need to load one giant HTML file, but one per author. it also makes
sphinx rendering more efficient and interactive
ReStructuredText has the advantage over HTML that it can be rendered
easily to multiple formats (HTML, ePUB, PDF) and it supports indexes.
the output needs to be fed into a file and integrated into an existing
Sphinx document, of course.
the idea here is to format the lyrics output a little better so that
it can (for example) be shown as a web page or an ebook.
the new skip option allows for faster generation of the output in the
(most common) case where not all lyrics are available.