157 Commits

Author SHA1 Message Date
ejurgensen
e4c47c22b3 [scan] Fix issue where m3u genre doesn't override despite m3u_override = true
Closes #1668
2023-10-21 22:37:34 +02:00
ejurgensen
8796368b01 [scan] Fixup lyrics changes 2023-10-19 23:49:53 +02:00
X-Ryl669
9670f6b079 [httpd] Add fetching lyrics in the JSON api 2023-10-19 23:49:53 +02:00
X-Ryl669
cf8b3ecd3a [db,library] Add support for parsing lyrics and storing them in DB 2023-10-19 23:49:53 +02:00
ejurgensen
4662cd4cce [scan] Set consistent return type in check_path_in_directories() 2023-09-27 22:46:13 +02:00
ejurgensen
3f6c7405ed [spotify] Don't zero pthread lock when resetting credentials 2023-09-03 20:59:45 +02:00
whatdoineed2do/Ray
b9b8ced689 [scan] Handles case for file overwrite/move within library that previously original db entry for overwritten file
Fixes #1645
2023-09-01 09:17:54 +01:00
ejurgensen
7f2e05284b [scan] Read m3u8 playlists like m3u
Fixes #1639
2023-08-15 19:33:50 +02:00
ejurgensen
9f67f2d4fd [rss] Use "Unknown genre" instead of "Podcast" if no genre found
If the scanner doesn't set anything the genre will be set to unknown in db.c.

See issue #1618
2023-07-06 14:40:39 +02:00
ejurgensen
070cf6a5fc [spotify] Some cleanup of webapi client 2023-02-06 22:38:44 +01:00
ejurgensen
eee011180f [spotify] Make web api client thread safe
Protect http_session with a lock and don't use mutating globals in utility
functions where it is less clear if they are protected.
2023-02-06 22:38:44 +01:00
ejurgensen
af07f9eeb4 [scan] Changes to commit 9a3cb3b7
* 'split_genre' -> 'only_first_genre' + changed description
* fix memleak on multiple genre tags
2022-12-29 20:07:30 +01:00
whatdoineed2do/Ray
0c43de9735 [scan] option to use first genre on multi token genres
multiple genres are either supported by format (see flac/orbis) or are
handled by convention (see mp3) - ffmpeg presents either case as a
single string, seperated by ';' (ie "Pop;Rock")

Currently the server/db does not support multiple genres and will store
the ffmpeg string as-is which is unlikely the user intention.

Introduce 'split_genre' to take the first genre token
2022-12-29 20:07:30 +01:00
ejurgensen
b70188f4b8 [spotify] Fix commit 5e7bf182 to avoid picking too large images 2022-12-21 23:29:44 +01:00
ejurgensen
5e7bf1826c [spotify] Fix poor artwork resolution on playback from playlist start
Closes #1559
2022-12-21 17:39:41 +01:00
whatdoineed2do/Ray
7d26c2c954 [db,scan,jsonapi] bug fix to handle date_released before 1970, storing -ve values in db 2022-12-13 17:38:07 +00:00
ejurgensen
d468fd358e [spotify] Select best artwork size even when not ordered descending
Spotify web API docs say that images are ordered wideest first, but that isn't
happening right now, so don't rely on that for size selection.

Also makes sure we pick an image even when max_w is smaller than smallest
available image.
2022-10-30 20:31:58 +01:00
ejurgensen
684f55f603 [xcode] Align how ffmpeg API checks are done 2022-10-26 17:22:41 +02:00
whatdoineed2do
94c28386a6
[xcode] Use ffmpeg ch_layout instead of deprecated channel_layout/channels (#1536)
Co-authored-by: whatdoineed2do/Ray <whatdoineed2do@nospam.gmail.com>
2022-10-06 17:09:01 +02:00
chme
9340443a3b [spotify] Remove "Spotify saved" playlist
This special playlist was previously required to keep track of saved
albums tracks to avoid purging them after a rescan, since then the
rescan logic was changed to use the Spotify web api and this playlist
has no use anymore.
2022-06-03 07:06:17 +02:00
chme
efb9ba7767 [spotify] Additional cleanup of functionality only used with libspotify
- Remove playlist commands only used by libspotify: adding / removing
playlist command was used by the callbacks from libspotify to receive
incremental updates (did not work for some time)
- Remove "login" web api endpoint: no login into libspotify is required
any more. Spotify web api authorization follows the OAuth flow.
2022-06-03 07:06:17 +02:00
ejurgensen
0ca02687bd [spotify] Remove old libspotify integration
No longer works, libspotify has been sunset by Spotify
2022-05-25 22:49:35 +02:00
chme
d277f7c7b3 [http/spotify] Add support for http sessions across multiple requests
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).
2022-05-01 09:01:23 +02:00
chme
ecc139641a [spotify] Respect album_override setting when parsing Spotify tracks 2022-04-04 20:51:14 +02:00
ejurgensen
edd22b6874 [scan] Remove unused libunistring includes 2022-02-12 20:58:16 +01:00
chme
1d2e4dc7a8 [db,library] Add "scan_kind" field to playlists, directories and files
(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"
2022-01-22 10:38:31 +01:00
ejurgensen
cd4386228d [spotify] Coverity fixups 2022-01-20 20:17:38 +01:00
ejurgensen
a09da06e8f [scan] Coverity fixups 2022-01-20 20:17:38 +01:00
chme
8becdee8f1 [db] Refactor db_query_fetch_* functions to take the output parameter
first and the input parameter as last parameter
2021-12-28 07:23:56 +01:00
chme
a65ee4462e [db] Refactor fetching query result into generic function
Additionally changes the return value in case the end of the result set
is reached.
2021-12-28 06:55:35 +01:00
ejurgensen
1418bfb245 [scan] Don't iTunes playlist scan timestamp on failed scan
Also some refactoring.

Closes #1359
2021-12-01 20:11:54 +01:00
ejurgensen
5e66dbd8c9 [spotify] Fix Spotify initialization issues
* loading library even though library playback login failed
2021-11-01 10:37:17 +01:00
ejurgensen
65d578f8c8 [scan] Ignore 0-byte files in library so ffmpeg 3.2 doesn't crash 2021-10-29 23:08:37 +02:00
chme
ce3e79d804 [spotify] Move "has_podcast_support" to spotify_status and expose this
flag in the web API
2021-09-04 09:46:29 +02:00
chme
c58e792ff4 [spotify] Code format change 2021-09-04 09:46:28 +02:00
chme
f700935b57 [spotify] Add artwork support for episodes (podcasts) 2021-09-04 09:46:28 +02:00
chme
24450bc90a [spotify] Scan spotify podcast subscriptions into library 2021-09-04 09:46:28 +02:00
ejurgensen
de7ab1547f [library] Remove needless stat() in scan_playlist()
Fixes time-of-check time-of-use warning from CodeQL
2021-09-02 00:12:18 +02:00
ejurgensen
6f0fef6179 [spotify] Reintroduce libspotify support, change spotifyc to librespot-c
Select use of either libspotify or librespot-c as streaming backend via config
option.

librespot-c (renamed/improved spotifyc) impl has the following:
- sync interface
- seek support
- honor bitrate config, set client and thread name
- use web access token with "streaming" scope for login
- fix issue with podcast playback

Also say goodbye to file-based Spotify login.
2021-05-31 23:24:58 +02:00
ejurgensen
a67c74ba6c [spotify] Introduce own spotifyc as replacement for libspotify 2021-05-31 11:54:30 +02:00
ejurgensen
684c23a044 [db] Fix error where adding Spotify track to queue returns "0 tracks added"
Caused by queue_item_add returning >0 as success, but caller is expecting ==0.
Try to avoid other occurancess of this issue by generally checking for error
("ret < 0") instead.
2021-05-24 21:55:09 +02:00
ejurgensen
c1db4d914f [http] Also allow remote playlists to have https streams (fixes #1251)
Fix it by adding net_is_http_or_https() utility function in misc.h and make
sure it used whenever a http protocol check is made.
2021-05-19 22:53:25 +02:00
taku0220
4d22cb05b3 [scan]Add sort tags for ALAC 2021-05-19 03:02:08 +09:00
ejurgensen
5f1686695a [-] Name update forked-daapd -> owntone throughout the code 2021-04-24 23:54:20 +02:00
Peter Salas
8ba35dfa19 [scan] Remove leftover iTunes #ifdefs 2021-02-28 08:31:16 -08:00
ejurgensen
bd91a238ec [db] Upgrade schema to 21.06, change default of query_limit to 0 2021-02-10 20:04:56 +01:00
ejurgensen
689d1ce3dd [db] Refactor queue_item functions
- Use prepared statements
- Add qi_mfi_map that defines mapping between mfi, dbmfi and qi
- Use qi_cols_map/qi_mfi_map for iteration (avoid duplicating field references)
- Stick to "qi" as name for a queue_item in db.c (more similar to mfi/pli/gri)
- Some renaming and other minor stuff in db.c's queue code
2021-02-09 15:16:06 +01:00
whatdoineed2do/Ray
2e69f5dac6 [rss] defer playlistitems purge til ready to update with new rss
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
2020-11-21 14:01:39 +00:00
ejurgensen
3233aefa8a [scan] Improve logging of inotify events 2020-10-19 20:24:31 +02:00
ejurgensen
bb9536ef44 [scan] Early skip if file should be ignored
Avoids needless logging, e.g. from failed lstat(). Closes #1078.
2020-08-22 21:38:12 +02:00