The change removes all direct calls to mxml from the modules that need an XML
parser (lastfm.c, pipe.c, rssscanner.c and httpd_rsp.c).
Even with the help of mxml, reading XML is hard, so a layer is added which
helps deal with stuff like whitespace and CDATA. This should make OwnTone more
resilient to any XML variations it might receive.
The changes fixes issue #1677.
This change allows to reuse curl handles for multiple requests.
Reusing a curl handle improves performance if more than one request is
made against a service (connection, session cache, dns cache are kept
between requests).
(db upgrade to v22.00)
`scan_kind` identifies the library "scanner" component that created the
item and is responsible to keep it up to date (rescan).
The library update now supports passing a `scan_kind` to update only the
items of one particular "scanner". This allows e. g. to only update the
item from the Spotify library or only update the RSS feeds.
The OwnTone database is upgraded to v22.00 and the `scan_kind` columns
in `files`, `playlists`, `directories` are identified by:
1. Check if item is part of a RSS playlist (podcast RSS feed), they
belong to the "rssscanner"
2. Check if item has a Spotify `virtual_path`, they belong to the
"spotifyscanner"
3. Remaining items belong to the "filescanner"
Current impl fetches pl, purge pl items, fetch RSS, inserts entries. If the RSS
fetch fails (remote server is temporary unreachable) the playlistitems for that
RSS are all dropped.
This has a side effect that RSS playlists cannot be determined from tracks (see
issue #1126) and thus cannot be deleted.
Simple fix to defer playlist item purge to the point that the RSS fetch is ok
and before the inserts
Fixes issue when performing an 'api/rescan' (results in RSS_SCAN_META scan type
in this module) that would result in a library_media_save() -> a readd even for
entries that already exist in db. This would result in dropping db record, incl
play_count etc instead of an update
2.10's mxmlDelete memleaks, and mxml is used in many parts of forked-daapd. So
to avoid that we ship upstream's fixed version of mxmlDelete and use that.
Makes it possible for the caller to request that a previous callback is
replaced, so we don't end up with more and more callbacks. Also add other
options for future use.