Commit Graph

3596 Commits

Author SHA1 Message Date
ejurgensen
75dd9a5764 [daap] Fixup 2018-10-04 22:39:46 +02:00
ejurgensen
6109a5b6dd [daap] Don't send two errors on auth problems + use 401 instead of 403 (issue #594) 2018-10-04 22:33:30 +02:00
ejurgensen
75743bea80 [daap] Fix missing prompt for library password for non-remote DAAP clients (fixes #594) 2018-09-30 22:39:53 +02:00
ejurgensen
b54c9ff1c6 [db] Fix count error in db_build_query_browse() if no items match query 2018-09-23 01:37:40 +02:00
ejurgensen
aa3aa383ef [raop] If ipv6 fails, fall back to ipv4 and disable ipv6 permanently for the device 2018-09-19 23:03:33 +02:00
ejurgensen
f686756dd8 [db] Upgrade schema to 19.10 to remove invalid time_skipped values from commit fde0a281 2018-09-19 19:40:45 +02:00
ejurgensen
a003c419c3 [db] Add missing casts of time_skipped (fixes #593)
The print mask for some reason uses int64, so time_skipped was too short
2018-09-19 08:12:40 +02:00
ejurgensen
4a16384d3a [filescanner] Convert plist timestamps to Unix when importing iTunes XML 2018-09-18 20:29:28 +02:00
ejurgensen
97233d4753 [raop] Put ipv6 IP literals in brackets as per rfc3986 2018-09-16 22:19:27 +02:00
ejurgensen
2a9d3f7474
Merge pull request #591 from chme/queue_add_pos
[db] Add support to add items to the queue at a specified position
2018-09-16 13:13:13 -07:00
chme
7252b3e509 [db] Add support to add items to the queue at specified position 2018-09-16 09:36:43 +02:00
chme
f84e67ed5e [db/conf] Add automatic calculation of ratings based on played/skipped
If activated in the configuration file, rating is updated after playing
or skipping a song. The calculation is based on how it is done in the
mpdstats plugin for beets
(https://beets.readthedocs.io/en/latest/plugins/mpdstats.html).
2018-09-16 08:46:16 +02:00
chme
3ca5402638 [dacp] Only return requested number of queue item (fixes #556) 2018-09-13 21:11:41 +02:00
ejurgensen
2c1f2f1b15 [mdns] connection test: don't wait if connect() succeeds immediately 2018-09-10 20:18:06 +02:00
ejurgensen
475c598d0e [mdns] Check return values of avahi_address_snprint() 2018-09-09 22:17:31 +02:00
chme
461a1d55bf [player] Only add persistent items to history
The current logic in httpd_dacp.c cannot handle non persistent items
correctly. The items are always shown with the dummy_mfi with "unkown
artist" etc.
2018-09-08 09:14:24 +02:00
chme
9a47335a05 [player] Only increment playcount and scrobble persistent items
Ommits useless update query for playcount for items that are not in the
library. Also avoids trying to scrobble these items (fixes error log
message "lastfm: Scrobble failed, track id 9999999 is unknown")
2018-09-08 08:32:49 +02:00
ejurgensen
ce1bf8f40d [web] Lower log level of libwebsockets 2018-09-08 00:24:49 +02:00
ejurgensen
b3fc87170e [mdns] Fix missing check of the value-result from getsockopt(SO_ERROR)
The connection test would not catch "No route to host", as this is returned
through the value-result buffer.

This fix might partially solve issue #498.
2018-09-07 23:19:46 +02:00
ejurgensen
93730281f4 [dacp] Map discrete-pause to playpause command handler 2018-09-07 21:40:23 +02:00
ejurgensen
3ba92aa860 [httpd] Better logging of unauthorized requests 2018-09-07 17:01:32 +02:00
ejurgensen
16e375e637 [db/misc] Cast ARRAY_SIZE to unsigned (avoids compiler warnings) 2018-09-04 20:07:05 +02:00
ejurgensen
350361e8bb [db] Be forwards compatible with tables that have additional columns 2018-09-02 23:38:46 +02:00
ejurgensen
a29772e8be [raop] Fix AirPlay 2 issue #557, fix for stream metadata, better logging
AirPlay 2 devices like Sonos One and AirPort Express with firmware 7.8
require auth-setup before ANNOUNCE, otherwise they will return 403.

Also fixed a problem where metadata did not get sent when toggling
a speaker on/off if we were playing an endless stream.
2018-09-02 20:22:38 +02:00
whatdoineed2do
e3ce003190 genre search functionality (#559)
* [jsonapi] Add support for listing albums for genres
2018-09-02 09:05:18 +02:00
chme
ef3ab53562 [mdns] Fix compile warning "directive output may be truncated" (provided
string length might not be big enough for ipv6 addresses)
2018-09-02 07:46:50 +02:00
ejurgensen
697338d118
Merge pull request #567 from whatdoineed2do/bug/httpd-dir-check
[bugfix] httpd dir check does not like symlinks to directories
2018-08-26 00:24:45 +02:00
Rok Mandeljc
083f58abf7 daap_request: cache the query result only if user agent was provided
Avoid calling cache_daap_add() when hreq->user_agent is NULL
(user agent is not provided by the client), because it will
trigger a segfault when strdup() is called with that NULL pointer.

Fixes #571.
2018-08-24 17:05:11 +02:00
ejurgensen
231b5615f1 [main] Just show version info when called with -v argument 2018-08-18 23:59:57 +02:00
ejurgensen
fde0a28142 Support for skip_count and time_skipped file metadata 2018-08-18 22:56:27 +02:00
whatdoineed2do
8b7c19a299 [httpd] allow webdir (htdocs) to be symlink to dir 2018-08-18 11:34:03 +01:00
ejurgensen
5ee0b69d39 [transcode] Set ffmpeg options so that it will attempt to reconnect streams 2018-08-12 19:50:54 +02:00
ejurgensen
ab1ded35e4 [config] Make user_agent configurable + don't use ffmpeg default (ref issue #562) 2018-08-12 19:49:23 +02:00
ejurgensen
970769cab6 [mdns] Fix mdns problems with ATV4 and ipv6
Avahi gives us several ipv6 addresses for an ATV4 that aren't actually
connectable. Here we simply try to make a connection to the address,
and if it is not possible within a timeout we ignore the announcement.

We also now don't start a mdns record browser if the address from the
resolver passes the connection test and isn't link-local.
2018-06-25 21:44:07 +02:00
ejurgensen
0d4dd06b51 [filescanner] iTunes XML mapping of Play Count and Play Date
See issue #549
2018-06-25 20:03:38 +02:00
ejurgensen
975d75d607 [daap] Add mapping of dmap.persistentid
Used by rtRemote when starting playback of a searched item
2018-06-17 23:11:05 +02:00
ejurgensen
9d95466e09 [db] Use ANALYZE instead of PRAGMA optimize (reverts commit cd96ec5)
Turns out PRAGMA optimize does not analyze tables on a fresh install,
which means that sqlite_stat1 is not available for the query planner,
which means that wrong indexes are used.

See https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=49928&sid=1e5d1d418315d7565ae027d751dd94a0&start=1350#p1328964
2018-06-16 21:43:58 +02:00
ejurgensen
3325b2d9ce [transcode] Use proper const for avfilter_get_by_name() result 2018-06-06 00:00:22 +02:00
chme
f4422e9cf4 [MAKEFILE/misc] Add option to disable inclusion of default webinterface 2018-06-03 23:39:37 +03:00
chme
cc98eef88f [websocket] Properly log libwebsockets log messages 2018-05-31 10:57:28 +03:00
chme
705b7013c3 [player/dacp/mpd/json] Update master volume after setting speaker volume
Changing a speaker volume in a DACP clients results in two dacp requests
(at least in Retune):

setproperty?include-speaker-id=0&dmcp.volume=41
setproperty?speaker-id=198018693182577&dmcp.volume=43

The first request sets the absolute volume for the speaker (player.c -
volume_setabs_speaker). The second request is only triggered if the
volume from the first one is not the new master volume. This second
requests adjusts the relativ volume based on the loudest device (new
master volume) (player.c - volume_setrel_speaker). After the second
request the master volume and the relative volumes are correct (range
from 0 - 100 percent and master volume is 100 percent).

MPD and JSON API clients only set the absolute volume which results in
inconsistent master_volume and relative volumes. The added option to
update the master volume in volume_setabs_speaker/volume_setrel_speaker
makes sure the master volume and the relative volumes are correctly set.
2018-05-31 10:49:53 +03:00
chme
3d779e1273 [player] Additional debug logs for speaker volume 2018-05-31 10:49:53 +03:00
ejurgensen
b6e1269cf2 [raop/dacp/player] Support for Airplay speakers to register volume updates
Implements Active-Remote, which is sent to the speaker, so it can use this
to tell us who it is when it makes dacp request with a device-volume update.
2018-05-27 16:12:20 +02:00
ejurgensen
646bf37f17 [dacp] Add support for play + stop commands
These commands are not used by Remote, but some Airplay speakers are
able to make them (e.g. my Sony STR-DN1040).

Also prepare being able to set the device volume property.
2018-05-14 23:09:04 +02:00
ejurgensen
05c935a7b7 [main] mdns announce dacp so that speakers can use it for playback control
See issue #531
2018-05-14 22:00:35 +02:00
ejurgensen
f5d7477ddb
Merge pull request #530 from chme/spotify_rework
Allow playing arbitrary spotify tracks
2018-05-11 19:12:04 +02:00
ejurgensen
83b6bcebcd [raop] Use OPTIONS for keep_alive instead of GET_PARAMETER
Old Airport Express hangs up if we use GET_PARAMETER (despite announcing support
for it...), and since iTunes seems to use OPTIONS we also do that. We weren't
really using the return value of GET_PARAMETER anyway.

See also comment added to commit d9a67b6dce
2018-05-10 21:46:24 +02:00
chme
c77acbddf2 [artwork] Ignore artwork requests for items with a non persistent id 2018-05-10 07:23:33 +02:00
chme
843fbeb066 [jsonapi] Add non-library uris to the queue 2018-05-10 07:02:15 +02:00
chme
7bab990eb3 [spotify/jsonapi] Expose access token and user country in JSON API
spoitfy endpoint
2018-05-10 07:02:15 +02:00
chme
d562cb9b6b [spotify] Retry playback setup if song is still loading 2018-05-10 07:02:15 +02:00
chme
f108b6b498 [spotify] Support adding arbitrary spotify-uris to the queue
Allows adding non-library spotify tracks to be added to the queue. The
path given to queue_add should either be a spotify track, album or
playlist uri.
2018-05-10 07:02:15 +02:00
chme
e6a5168c0d [spotify] (Re-) add track-relinking for playlists and albums
Appending the market parameter got lost in the refactoring and therefor
not track-relinking happend
2018-05-09 22:47:37 +02:00
chme
116f7a0253 [spotify] Log progress of scanning saved albums/playlists 2018-05-09 22:47:37 +02:00
chme
cfc5fef88d [spotify] Refactor spotify_webapi 2018-05-09 22:47:37 +02:00
chme
eaab6f887b [spotify] Decoupling of the spotify webapi from libspotify integration
Separation of scanning Spotify songs into the library (spotify_webapi.c)
and playing Spotify songs through libspotify (spotify.c).
2018-05-09 22:47:37 +02:00
chme
85257788ba [jsonapi] Add cache control header to count endpoint and fix
not-modified-since check to check against the last db update instead of
last start time
2018-05-09 22:29:52 +02:00
chme
41e99ca3cd [db/mpd/jsonapi] Include artist and album count in filecount query; add
count endpoint and additional metadata to JSON API; remove unused
artist-/album-count queries
2018-05-09 22:29:52 +02:00
chme
ae3e0b6bf5 [httpd] Lower log level if file is not found 2018-04-26 22:20:27 +02:00
ejurgensen
d84818649a [transcode] Fix for issue #502, ffmpeg segfault when jpeg encoding
For some reason it seems the Docker version of ffmpeg 3.4 uses "optimal"
Huffman tables (despite not being default), which cause ffmpeg to crash
when mjpeg encoder is encoding artwork jpeg's
2018-04-21 23:19:41 +02:00
chme
43745cf5c3 [smartpl.g] Fix memleak in smart playlist parsing with string operators 2018-04-15 22:11:40 +02:00
chme
359d12f4ff [db] Free order by-clause in playist_info 2018-04-15 22:11:40 +02:00
chme
6ceede44f4 [db] Use default -1 for playlists.query_limit column 2018-04-15 22:11:40 +02:00
chme
f167e975c2 Unify naming of "order by" clause in structs/table 2018-04-15 22:11:40 +02:00
chme
47a79d40f1 [db] Allow fetching playlists if the schema contains more columns than
the column map (can happen if there was a minor db version upgrade)
2018-04-15 22:11:40 +02:00
chme
d15018cb99 [httpd/jsonapi] Add cache control headers to some json api endpoints
Adds utility functions to httpd.c for checking the request headers for
either an "If-None-Match" or an "If-Not-Modified-Since" headers. If the
header value is found and it matches the current value for the requested
resource, we return early with a http response code 403 (Not Modified).
If the request header value is not present or does not match we add the
current ETag/Last-Modified values to the response headers and process
the request normally.
2018-04-15 22:11:40 +02:00
chme
99a812ad9a [jsonapi] Add new endpoints for artist/album/playlist/seek 2018-04-15 22:11:40 +02:00
chme
33459bd4ef [jsonapi] Extend search endpoint to support queries in smartpl language 2018-04-15 22:11:40 +02:00
chme
f1c7672426 [db] Fix total results for album group query
The query did not respect the filter and therefor always returned the
number of albums in the library and not the number of albums for the
given query.
2018-04-15 22:11:40 +02:00
chme
6bdcda1524 [db/filescanner] Upgrade database to v19.08 and support limit/order by
in smart playlist files
2018-04-15 22:11:40 +02:00
chme
5189fe2305 [smartpl/filescanner] Refactor smart playlist parsing
Moves the actual parsing with ANTLR3 out of filescanner.c to allow
future reuse in different context (JSON api)
2018-04-15 22:11:40 +02:00
chme
9708e26dd1 [db] Add support for ORDER BY and HAVING clause in query parameter 2018-04-15 22:11:40 +02:00
chme
84f262401e [smartpl.g] Add ORDER BY, LIMIT and HAVING to smart playlist grammar 2018-04-15 22:11:40 +02:00
chme
7dd8955a92 [filescanner] Add http stream to the library prior to adding to a
persistent playlist
2018-04-15 22:09:28 +02:00
chme
60ebac076b Refactor adding non library items to the queue
Instead of asking a client to first scan the path into a media_file_info
object and afterwards add it to the queue, we now offer a library
function to directly add a path.

The library-source that can handle the given path translates the path
into new queue item(s) and adds them to the queue.
2018-04-15 22:09:28 +02:00
ejurgensen
acd5bd3272 [raop] Always try to get volumes from devices at keep_alive intervals
Should be ok, even if the device does not support GET_PARAMETER for
volume, no harm done, we will just stop querying.
2018-04-14 22:19:53 +02:00
ejurgensen
d9a67b6dce [raop] Use GET_PARAMETER of volume to keep connection alive and get speaker volume 2018-04-11 22:29:07 +02:00
chme
879307f3ac [smartpl] Support "starts with" operator for string fields 2018-03-17 13:23:48 +01:00
ejurgensen
ea4ea072cd
Merge pull request #499 from chme/jsonapi
New endpoints for the JSON api (library, queue)
2018-03-17 09:38:02 +01:00
chme
a78ed20848 [jsonapi] Add new JSON api endpoints
Allows
- browsing artists/albums/playlists
- search
- moving a queue item
2018-03-14 19:22:13 +01:00
chme
d1b47465a8 [jsonapi] Disable gzipping response
An attempt to improve the performance of the artists and albums
endpoints.
2018-03-14 19:21:57 +01:00
chme
66bdb7c0a9 [db] Add function to get a human readable string for data and media kind 2018-03-14 19:21:57 +01:00
chme
d59e62312a [httpd] Allow cross origin POST, PUT, DELETE, OPTIONS requests
If the web interface is hosted on a different server, this is required
to allow sending e. g. post/put requests to control outputs.
2018-03-14 19:12:20 +01:00
chme
a764fb3c52 [httpd] Serve index.html if requested source is a directory
Defaults to an index.html file instead of redirecting to admin.html. It
will not redirect to index.html, but instead serve the file (if exists)
directly. This allows nicer uris in the webinterface.

We will still redirect to admin.html if no index.html is found for
requests to http://ip:port/
2018-03-14 19:12:20 +01:00
ejurgensen
e79beb6877 [httpd_daap] Workaround for Android "Remote for iTunes" requesting playlist 0
See issue #505
2018-03-11 22:40:07 +01:00
chme
2b5fa56bf9 [dacp] Add missing call to "db_queue_enum_end" in error case 2018-03-08 21:50:41 +01:00
chme
f47a17e186 [db] Remove unused function "db_queue_get_pos_byfileid" 2018-03-08 21:50:41 +01:00
ejurgensen
50c6d3f272 [db] Silence misleading log error message
We were logging a missing lastfm_sk in the admin table as
an error, which it really isn't
2018-03-03 20:13:09 +01:00
ejurgensen
ea6fd1476a [db] Improve speed of browse queries (issue #478)
Before, we returned either unordered (for RSP, meaning client had to
sort) or ordered by a client selected sort_clause[]. The latter are
multi-purpose and therefore not optimised for browse queries.

To speed up, we predefine the entire set of browse queries, including
order, with matching indices. The predefined queries are used except
if the client explicitly requests a non-default order or query.

As a special bonus, the commit also allows queries with I_SUB that
have an offset but no limit.
2018-03-02 21:11:31 +01:00
ejurgensen
121b812c30 [transcode] Lower log level of "will transcode" messages 2018-03-02 20:51:33 +01:00
chme
cd96ec579a [db/library] Use "PRAGMA optimize" instead of "ANALYZE"
ANALYZE collects and saves statistics even if there were no database
changes and the last collected data is still good.

According to the sqlite3 documentation, it is recommended to use "PRAGMA
optimize" which will call "ANALYZE" if it is necessary. "PRAGMA
optimize" will run "ANALYZE" based on prior queries on the same database
connection. It is recommended to run optimize before closing the
connection.

(see https://www.sqlite.org/lang_analyze.html)
2018-02-26 18:41:28 +01:00
ejurgensen
666af127d5 [raop] Fix gcrypt error handling in raop_verification.c
And I learnt that gcrypt doesn't follow the negative-on-error pattern
2018-02-22 22:36:50 +01:00
ejurgensen
c2a563eec7 [main] Remove build date so there will be no complaints about non-producible builds 2018-02-22 22:16:22 +01:00
ejurgensen
f386c13bd9 [pipe] Add forgotten include of config.h 2018-02-22 22:11:42 +01:00
ejurgensen
6a56c19ad5 [pipe] Add forgotten include of pthread 2018-02-22 22:03:37 +01:00
ejurgensen
6c2ee276de
Merge pull request #495 from chme/fixwarnings
Fix compiler warnings
2018-02-22 21:52:17 +01:00
ejurgensen
b1c9518a78 [-] Make json-c a required library
Already kind of was required, as it was required by Spotify, Chromecast and the web api
2018-02-22 21:49:11 +01:00
chme
30aa4cf525 [db] Fix comments 2018-02-22 21:36:14 +01:00
chme
8b2d40d46f Initialize local variables to silence OpenWrt compiler warnings 2018-02-22 21:35:38 +01:00
chme
1212723072 [jsonapi] Do not set "DAAP-Server" header in json api response 2018-02-15 19:19:13 +01:00
chme
0e9feac829 [jsonapi] Rework outputs endpoint and strictly match uris by request
method
2018-02-15 19:19:13 +01:00
chme
83bb06225b [misc] Add helper function to check if a key with a given type exists 2018-02-15 19:19:13 +01:00
chme
1379ef235c [httpd] Support assigning request methods to uri handlers 2018-02-15 19:19:13 +01:00
chme
a98713ba49 [jsonapi] Return proper HTTP status codes 2018-02-11 10:55:11 +01:00
chme
d4b05e98ae [httpd] Add PUT and DELETE to the allowed http request methods 2018-02-10 10:39:32 +01:00
chme
43887d160f [mpd] Refactor commands to enable/disable/toggle/volume for outputs 2018-02-10 09:04:18 +01:00
chme
decf9f1329 [player] Add commands to enable/disable output 2018-02-10 09:04:18 +01:00
chme
93879c6f90 [player] Refactor speaker enumerate callback 2018-02-10 09:04:18 +01:00
chme
94fd370df2 [player] Simplify parameter passing to player commands 2018-02-10 09:04:18 +01:00
chme
d36e6ac5ab [player] Refactor speaker_set/speaker_activate 2018-02-10 09:04:18 +01:00
chme
f2659d995b [player] Refactor speaker_set/speaker_deactivate 2018-02-07 21:04:47 +01:00
ejurgensen
e70f9623db [filescanner] Update ffmpeg id3 tag mapping, include grouping tags 2018-01-31 21:46:17 +01:00
ejurgensen
0b3f4dfa15 [transcode] Ignore some errors from avcodec_send_packet(), fixes #483
Since the stream can at least in some cases be transcoded anyway
2018-01-26 22:37:28 +01:00
Scott Shambarger
49c88a9cc5 [configure] Fixed make distcheck 2018-01-25 21:52:20 -08:00
ejurgensen
c23f2c01b2 [scan] Fix bugs related to iTunes XML playlists
1) They would get disabled after rescan
2) Playlists and playlistitems didn't get cleaned up
2018-01-25 22:26:00 +01:00
ejurgensen
e1fb3607e9 [scan] Treat playlists with mtime==db_timestamp as modified + better virtual_path for iTunes XML playlists
Should fix a problem where saving a playlist with gedit was not picked up by forked-daapd as a modification
2018-01-24 21:36:50 +01:00
ejurgensen
4000d15778 [main] Add cmd line options to disable mdns announcements + update man page 2018-01-14 19:46:19 +01:00
chme
18a6372fb1 [dbperf] Use sqlite3_trace_v2 instead of deprecated sqlite3_profile
Set log severity depending on how long the query was running and return
early if log level is lower than the current one.
2018-01-13 11:05:58 +01:00
chme
c747456880 [logger] Expose log severity 2018-01-13 10:51:48 +01:00
ejurgensen
4da45bdfab [httpd] Parser should allow queries that are not key/value
E.g. http://prem3.di.fm:80/progressive_hi?my_premium_key
2018-01-08 20:13:05 +01:00
ejurgensen
45d193e56c [scan] Use open()/close() instead of euidaccess() to support ACL's
Fixes #474
2018-01-06 20:10:34 +01:00
ejurgensen
8d043dd9e9 [http] Temporary fix for bug in commit 8f899f2
See 8f899f2051 (commitcomment-26433079)
2018-01-02 21:20:28 +01:00
ejurgensen
f71028b25d
Merge pull request #477 from chme/player
[player] Check player state in stop and pause commands
2017-12-30 12:53:43 +01:00
ejurgensen
7d66acf0a0
Merge pull request #476 from chme/mpd_check_args
[mpd] Refactoring of minimum argument check
2017-12-30 12:53:32 +01:00
chme
981fd3e183 [db] Update queue_version in db_queue_move_byitemid
Fixes missing queue updates in MPDroid after moving an item in the
queue. MPDroid moves items with the 'moveid' command and retrieves the
playlist changes with the 'plchanges' command, due to the missing
queue_version update the last command did not return any changes and the
queue in MPDroid did not get updated.
2017-12-30 08:01:07 +01:00
chme
183ac17fd5 [player] Check player state in stop and pause commands 2017-12-28 16:30:38 +01:00
chme
141c4e926b [mpd] Formatting of channel and sticker handler list 2017-12-28 16:12:56 +01:00
chme
8ad6f75815 [mpd] Refactor minimum argument check 2017-12-28 16:12:56 +01:00
chme
d90b869354 [pipe] Do not rely on the DATABASE event to be triggered during startup
to start listening on pipes
2017-12-28 16:05:03 +01:00
ejurgensen
4274653624 [pipe] Allow autostart of pipe even if it interrupts other playback (fix for #465) 2017-12-28 11:45:59 +01:00
ejurgensen
1646149902
Merge pull request #472 from chme/mmap
Add option to enable memory-mapped I/O for sqlite3
2017-12-27 18:56:03 +01:00
ejurgensen
4802823f3c Revert "[spotify/artwork] Load artwork for spotify through the wep api" and "[spotify] Thread safety for the webapi access"
Wait with this until it becomes necessary or we can achieve same performance as libspotify

This reverts commit 997b4da4ad and 2da993cc7b
2017-12-27 18:51:11 +01:00
chme
56f4b32ef3 Add option to enable memory-mapped I/O 2017-12-26 08:06:38 +01:00
chme
2da993cc7b [spotify] Thread safety for the webapi access
The web api might be accessed from different threads (library, worker,
dacp), therefor protect from concurrently running refresh-token requests
(accessing the globals in spotify_webapi.c)
2017-12-25 19:52:40 +01:00
chme
997b4da4ad [spotify/artwork] Load artwork for spotify through the wep api 2017-12-25 19:52:40 +01:00
ejurgensen
731106276f
Merge pull request #466 from chme/libspotify_remove_scan
[spotify] Remove scanning saved playlist with libspotify
2017-12-25 19:33:41 +01:00
Wolfgang Scherer
a7f9d633a3 [mpd] minimal urlhandlers command 2017-12-24 02:46:40 +01:00
chme
434be28460 [mpd] Support position parameter in command 'addid' 2017-12-22 11:24:43 +01:00
chme
a1372c692e [mpd] Implement 'playlistfind' and 'playlistsearch' 2017-12-22 11:24:43 +01:00
chme
6f4f7c5b16 [mpd] command 'currentsong': report current item if player is stopped 2017-12-22 11:24:43 +01:00
chme
80e0808b18 [mpd] command 'status': report current/next if player is stopped 2017-12-22 11:24:43 +01:00
chme
4d995c8501 [spotify] Add missing init/destroy of status_lck mutex 2017-12-22 09:53:00 +01:00
chme
210e6228bc [spotify] Prevent duplicate scan on startup
The logged_in callback is called during relogin in the initscan.
Additionally initscan explicitly starts the scan leading to a duplicate
scan run.
To prevent this from happening removed the scan call in the logged_in
callback and split the spotify_login_user function into a private
function (without scan) and a public function (with scan).
2017-12-18 22:46:09 +01:00
chme
4f811ff6e0 [logger] Return early if severity or domain do not match 2017-12-17 12:41:21 +01:00
chme
83d8a55701 [spotify] Make libspotify login synchronous
Scanning saved albums/playlists over the webapi requires a logged in
libspotify session. To ensure, that the login process finished before
starting the webapi scan, the login needs to be synchronous.
2017-12-17 09:39:45 +01:00
chme
64f574cd83 [spotify] Fix logdomain in log statements 2017-12-17 09:15:32 +01:00
chme
471eb9db46 [db] Do not trigger a DATABASE event if db_directory_enable_bypath does
not change the library
2017-12-17 09:13:09 +01:00
chme
1b8b0b2d83 [spotify] Only scan saved albums and playlist if webapi token is valid
and libspotify login succeeded

Each saved track needs to be registered with libspotify otherwise
playback of this track will fail. This makes sure we only add saved
tracks to the library that are playable. 

Also attempt a rescan if libspotify login succeeded. With this change it
does not matter if a user first logs into libspotify and then authorizes
the webapi access or the other way around.
2017-12-17 09:12:01 +01:00
chme
418f808d2e [spotify] Remove scanning playlists with libspotify 2017-12-17 08:08:55 +01:00
ejurgensen
b428760599 [scan] Fix for issue #463, fname not getting updated on file rename
Also modify code style of _enable/_disable functions in db.c
2017-12-16 23:09:29 +01:00
chme
4034582f1a [mpd] Fix 'noidle' command handling
The noidle command did not prevent idle events to be sent to the client
directly when they occured. This resulted e. g. in M.A.L.P. in errors
trying to play an album from the library)
2017-12-16 08:19:45 +01:00
chme
5a57a564a4 [db] Instantly notify about rating changes 2017-12-15 19:08:32 +01:00
chme
e00a4a1995 [cache] Do not rebuild cache on rating change events 2017-12-15 19:08:32 +01:00
chme
e7d6fbb9fc [listener/etc.] Rename LISTENER_STICKER to LISTENER_RATING
Unit there is a real sticker implementation, make it clear, that the
event is only triggered for rating changes.
2017-12-15 19:08:32 +01:00
chme
c00febd8ac [library] remove initialization of globals to zero 2017-12-15 19:08:32 +01:00
chme
9f1568349b [mpd] minor cleanup 2017-12-15 19:08:32 +01:00
chme
9165cfc5da [mpd] Return virtual path to clients in 'sticker find' 2017-12-15 19:08:32 +01:00
chme
dec625ec30 [mpd] Implement 'sticker find' with operator/value parameters 2017-12-15 19:08:32 +01:00
chme
b17e50438c [db] Comment for DB_FILES_RATING_MAX 2017-12-15 19:08:32 +01:00
chme
7b04787fc1 [mpd] Check upper bound for sticker 'rating' 2017-12-15 19:08:32 +01:00
chme
7a916c84a2 [mpd] Refactor sticker commands 2017-12-15 19:08:32 +01:00
chme
ef52f4ddc0 Rework user rating updates 2017-12-15 19:08:32 +01:00
Wolfgang Scherer
bbc5d3787e [mpd] rating sticker translator 2017-12-15 19:08:32 +01:00
chme
88f7d4601d [db] Fix adding urls to the queue that are not in the library 2017-12-13 22:02:38 +01:00
chme
4ebc6da0ee [ws] Notify about player status, options, volume, queue changes 2017-12-13 21:44:33 +01:00
chme
5cb33189df [jsonapi] New endpoints for player.html
- control playback and retrieve player status
- get current queue
- set shuffle, repeat, consume mode
- set volume
2017-12-13 21:44:33 +01:00
ejurgensen
10233dcad3 [chromecast] Check for null address from getifaddrs() (credit @yantoz, issue #455) 2017-12-10 19:50:57 +01:00
chme
0b07cff633 [player] Only update queue item in metadata_update_cb on changed
metadata. This avoids an unnecessary update query and queue change
notification (leading to clients requesting the unchanged queue).
2017-12-09 11:01:41 +01:00
chme
2ee02d407b [mpd] Add support for version and ranges to 'plchanges' and
'plchangesposid'
2017-12-09 11:01:41 +01:00
chme
912635e737 [db] Update queue_version for changed queue items 2017-12-09 11:01:41 +01:00
chme
91573752d9 [db] Update v19.05 to v19.06
- queue table: define id column as AUTOINCREMENT (requires drop+create)
- queue table: add column queue_version
- files table: update http-stream virtual paths (constructing the
virtual path for http-streams changed in pr #449, this migrates existing
databases to be consistent to the newly created paths)
2017-12-09 11:01:41 +01:00
chme
7083c65314 [main/httpd] Configurable web root directory over cli parameter 2017-12-03 10:46:50 +01:00
chme
8776aa36e2 [player] Trigger SPEAKER event after finishing the command speaker_set 2017-12-03 10:46:03 +01:00
chme
d839e8cabb [listener/player] Adjust code comment for LISTENER_SPEAKER event 2017-12-03 10:46:03 +01:00
chme
1689182432 [player/raop] Trigger the SPEAKER event if device verification
succeeded/failed
2017-12-03 10:46:03 +01:00
chme
eece4ce768 [ws] Listen and notify about output events 2017-12-03 10:46:03 +01:00
chme
80c1ef3114 [jsonapi] New endpoints for outputs and device verification 2017-12-03 10:46:03 +01:00
chme
f696229fff [player/dacp/mpd] Pass additional information to speaker enum callback 2017-12-03 10:46:03 +01:00
Wolfgang Scherer
b363c0dac2 [mpd] Consistent playlist name setup (#450) 2017-12-02 16:45:11 +01:00
Wolfgang Scherer
bb451802d2 [db] Queue notification when metadata changes (#448) 2017-12-02 16:44:29 +01:00
Wolfgang Scherer
0d006904da [scan] Consistent HTTP virtual paths (#449) 2017-12-02 16:44:01 +01:00
ejurgensen
617a0992d0 [http] Align indentation with the rest of the code 2017-11-27 17:53:59 +01:00
Wolfgang Scherer
8f899f2051 [http] .pls playlists (#447) 2017-11-27 09:48:17 +01:00
Wolfgang Scherer
dcc6fcf206 [mpd] Close connection for close command (#444) 2017-11-21 19:29:17 +01:00
chme
4800f9943b [db] Rename 'ADMIN_*' defines to 'DB_ADMIN_*' 2017-11-19 22:08:23 +01:00
chme
96bcaa9102 [mpd] Fix noidle command returning an error; fix format error in stats
command
2017-11-19 22:08:23 +01:00
chme
65444bba47 [mpd] Fix missing free for query_params.filter (mostly in case an error
occured)
2017-11-19 22:08:23 +01:00
chme
360439f448 [mpd] Cosmetic changes: fix indentation, use bool instead of int 2017-11-19 22:08:23 +01:00
chme
a0a6b7d473 [mpd] Send correct value for uptime in 'stats' command 2017-11-19 22:08:23 +01:00
chme
f49a3c888a [db] Store start time in admin table 2017-11-19 22:08:23 +01:00
chme
38ab4b9676 [db] Functions to read/store int in the admin table and introduce
constants for admin table keys
2017-11-19 22:08:23 +01:00
ejurgensen
5315bdf83e [raop] Make sure to set requires_auth if we get RTSP_FORBIDDEN 2017-11-19 20:11:42 +01:00
Wolfgang Scherer
fa76b6380c [mpd] correct handling of noidle command 2017-11-18 07:15:45 +01:00
chme
8d130cdc7c [listener] Support passing multiple events in a single notify call 2017-11-18 07:15:45 +01:00
chme
1e24b3656a [mpd] Fix idle command (idle events got lost if they happened while the
client was not in idle mode)
2017-11-18 07:15:45 +01:00
chme
4fe4bee809 [db] Only trigger the library update callback, if a query changed at
least one row
2017-11-17 19:40:04 +01:00
chme
1cdb9f450d [library/mpd] Store db update time in admin table and trigger DATABASE
event on init/rescan only if an update/insert occurred
2017-11-17 19:40:04 +01:00
chme
ea0cc64aa3 [db] Add functions to read/store int64 values in admin table 2017-11-17 18:12:03 +01:00
Wolfgang Scherer
37aaf73f6a [library] Deferrable library update time with persistence (TBD) 2017-11-17 18:12:03 +01:00
Wolfgang Scherer
e7e2b2c9a6 [library] Decrease library update delay and clarify purpose 2017-11-17 18:12:03 +01:00
Wolfgang Scherer
9f11a69c79 [mpd] enable database and update events for idle clients 2017-11-17 18:12:03 +01:00
ejurgensen
a6fab4ac0d [httpd/mpd] Adjustments to commit #69ff42f 2017-11-15 23:13:20 +01:00
Wolfgang Scherer
69ff42fc6a [mpd] apply trusted_networks to MPD 2017-11-15 22:29:22 +01:00
Wolfgang Scherer
ef767a08a4 [db] Report directory names that end in spaces 2017-11-15 22:25:12 +01:00
Wolfgang Scherer
3d43721cd0 [scan] After rescan, fullrescan inotify must be enabled 2017-11-13 19:52:17 +01:00
ejurgensen
3d5aeda7aa [httpd] Implement "trusted_networks" option
Some clients aren't really capable of authenticating + some users probably
don't want to enter a password for the web interface. This option allows
clients on for instance the local network to connect without authentication.
2017-11-12 21:29:57 +01:00
ejurgensen
6d937469f5 [httpd] Decrease log level of stream complete messages 2017-11-11 22:20:09 +01:00
ejurgensen
473a29ef8a [httpd] More refactoring, reduce code duplication in the httpd_xxx modules 2017-11-11 22:20:09 +01:00
ejurgensen
9ed810d9df [httpd] Refactor httpd.c
- move stuff around and clean up
- put oauth out in own module like the other modules
2017-11-11 22:20:09 +01:00
ejurgensen
709d99d4c4 [httpd] Major refactor of the httpd request handling
Make it easier to add new parameters later, get rid of redundant code, clean
up, align between httpd_xxx modules and introduce new bugs. Yes, the refactor
got a bit out of hand.
2017-11-11 22:20:09 +01:00
ejurgensen
0ebdd89715 [httpd_dacp] Log unrecognised requests 2017-11-11 22:20:09 +01:00
ejurgensen
d9f6097886 [httpd_dacp] Update to align with master 2017-11-11 22:20:09 +01:00
ejurgensen
20937ea4c9 [httpd_daap] Try to use revision as it is supposed to be used 2017-11-11 22:20:09 +01:00
ejurgensen
725319789e [httpd_dacp] Add debug logging of our playstatusupdates
Might help trace why some remotes sometimes show incorrect status
2017-11-11 22:20:09 +01:00
ejurgensen
fdc9054890 [httpd_daap] Improve code clarity a bit 2017-11-11 22:20:09 +01:00
ejurgensen
7b97503f04 [spotify] Protect against weird artwork data size from libspotify
For some reason libspotify sometimes returns >1GB sizes?
2017-11-11 22:20:09 +01:00
ejurgensen
eff9e6ebeb [httpd] Add promiscuous mode option, i.e. no auth requirements
For people who want to avoid the web login, or want to get around pairing
problems. This is also added because commit #e59a1a1 means that all
Remotes are now subject to auth, not just those with a user-agent name that
starts with "Remote".
2017-11-11 22:20:09 +01:00
ejurgensen
8e7c47cce9 [httpd_daapd] Refactor daap 2017-11-11 22:20:09 +01:00
ejurgensen
50638223ac [dmap] Add a function able to make generate dmap errors without also sending them 2017-11-11 22:20:09 +01:00
ejurgensen
b710d728f8 [db] Add a free_query_params function 2017-11-11 22:20:09 +01:00
ejurgensen
75b14b85e9
Merge pull request #435 from wolfmanx/mpd-argument-unquoting
[mpd] Quoted argument unescaping fixed
2017-11-11 10:04:57 +01:00
ejurgensen
430d3f9f41
Merge pull request #437 from wolfmanx/mpd-password
[mpd] password command
2017-11-11 08:25:02 +01:00
Wolfgang Scherer
c48b819170 [mpd] password command 2017-11-10 09:55:44 +01:00
ejurgensen
5c3f1e9263 [filescanner] Fixup code style 2017-11-10 00:09:31 +01:00
Wolfgang Scherer
16fa1e77b2 [scan] Configuration option to follow symlinks 2017-11-09 01:16:44 +01:00
Wolfgang Scherer
5a960a3450 [mpd] Quoted argument unescaping fixed 2017-11-08 23:03:32 +01:00
Wolfgang Scherer
540d771648 [pulseaudio] allow specification of pulseaudio server 2017-11-05 19:33:14 +01:00
ejurgensen
04dc5956ed [mpd] Fix crash-on-exit because evconnlistener_free() doesn't ignore NULL pointers (issue #430) 2017-10-30 23:07:10 +01:00
ejurgensen
b7f5070ad3 [httpd_dacp] New fix attempt for issue #423 - revision number handling
Commit 190e37e was wrong, we can't just update revision number every time, we
should not do it when we are called with 0 or 1 as revision-number. In those
cases we must return the revision number the client should use, which should
either be the current pending (if other clients are waiting) or the number
following what was used last time we were called with > 1 rev num.

Hopefully this fixes Hyperfine issues.
2017-10-30 20:16:34 +01:00
ejurgensen
79b2cf4fd7 [db] Log path to db on error, so it's easier to debug 2017-10-29 22:07:58 +01:00
ejurgensen
0c9a23e8d2 [pairing] Better log messages for failed pairing attempts 2017-10-28 21:23:21 +02:00
chme
f82b22042f [lastfm/jsonapi/ws/main] New JSON-API-endpoints for Last.fm integration
In preparation for the new endpoints the following refactorings where
done in lastfm.c:
- Initialize lastfm.c in main.c instead of on first scrobble attempt
(necessary to retrieve the correct lastfm status)
- Return error messages if login attempt failed
- Add api function for status and logout
- Notify about Last.fm status changes

Unrelated changes in lastfm.c are:
- Refactoring of request_post
- Add request parameters sorted alphabetically and remove calling the
sort method in request_post
2017-10-28 12:22:45 +02:00
ejurgensen
b64d282f32 [artwork] Fix for issue #427, some embedded file artwork not showing
Artwork in embedded files not showing up in non-legacy mode if the artwork does
not require rescaling. The bug is that we are by mistake sending a chunk of the
embedded file, not the artwork in it.
2017-10-27 19:51:37 +02:00
ejurgensen
66a46173fa [httpd_daap.c] Improve user_agent_filter() code
E.g. remove hardcoded values of DATA_KIND_x
2017-10-21 19:19:51 +02:00
ejurgensen
2beb2fc4cf [httpd_dacp] Fixup temp log line 2017-10-20 22:46:00 +02:00
ejurgensen
190e37e537 [httpd_dacp] Fix bug where not always increasing revision number (issue #423)
The bug affected Hyperfine Remote, which would not call back with a playstatusupdate
when it got a cmsr which had the same value as the previous (a value of 2)
2017-10-20 22:28:31 +02:00
ejurgensen
a94fda38cc [mpd] Some minor fixup 2017-10-20 19:49:17 +02:00
ejurgensen
64dd6b93da [filescanner] Add missing timestamp update in itunes scanner 2017-10-17 23:12:30 +02:00
ejurgensen
e9e8567e8c [filescanner] Make sure to split in transactions even when playlist tracks are unknown 2017-10-17 23:12:30 +02:00
ejurgensen
2d54d0d8fe [filescanner] More alignment of iTunes scanner with the playlist scanner
I.e. use transactions and don't scan unmodified files
2017-10-17 23:11:31 +02:00
ejurgensen
bf8fa1c3f0 [db] Remove poorly performing and now unused _bymatch() functions 2017-10-17 23:11:31 +02:00
ejurgensen
322abb8274 [filescanner] Copy playlist scan optimisations to itunes scanner 2017-10-17 23:11:31 +02:00
ejurgensen
3520ab030e [filescanner] Fix wrong param in filescanner_playlist.c 2017-10-17 23:11:31 +02:00
ejurgensen
a57f7fc188 [httpd_dacp] Clean up code, remove dead stores 2017-10-17 23:11:31 +02:00
ejurgensen
1070f507a2 [filescanner] Add some const's and various fixup 2017-10-17 23:11:31 +02:00
ejurgensen
78dd8c89b6 [filescanner] Log message modifications 2017-10-17 23:11:31 +02:00
ejurgensen
00b7b97382 [db] Make I_FNAME index case insensitive and search fname using COLLATE NOCASE
Also some cleaning up
2017-10-17 23:11:31 +02:00
ejurgensen
88a565ea2c [db] Replace sqlite3_xxx() calls outside db.c/cache.c so they are abstracted 2017-10-17 23:11:31 +02:00
ejurgensen
659b5c70c4 [db] Faster size check in db.c's db_snprintf() 2017-10-17 23:11:31 +02:00
ejurgensen
47585d0d03 [db] Add methods db_mprintf() and db_snprintf() which wrap sqlite 2017-10-17 23:11:31 +02:00