230 Commits

Author SHA1 Message Date
Christian Meffert
ef2740a6dd [db] Add cli parameter to overwrite path to SQLite extension
This will allow pointing to the locally build (and not installed) owntone SQLite extension during development and local testing.
2024-12-27 13:17:23 +01:00
gd
e1628ff1a9 [mpd,db] MPD protocol fixes to handling of idle/noidle command and command list.
Command handling:
1. Changed mpd_read_cb() to delegate to mpd_process_line() for each received
command line.
2. mpd_process_line() handles idle state and command list state and delegates
to mpd_process_command() to handle each command line.
If the command was successful it sends OK to the client according the the
command list state.
Error responses are sent by mpd_process_command().
3. mpd_process_command() parses the args and delegates to the individual
command handler.

mpd_input_filter:
1. Removed handling of command lists. They are handled by mpd_process_line().
2. Return BEV_OK if there's at least one complete line of input even if there's
more data in the input buffer.

Idle/noidle:
1. Changed mpd_command_idle() to never write OK to the output buffer.
Instead it is the responsibility of the caller to decide on the response.

2. Removed mpd_command_noidle() instead it is handled in mpd_process_line().
If the client is not in idle state noidle is ignored (no response sent)
If the client is in idle state then it changes idle state to false and sends
OK as the response to the idle command.

Command lists:
1. Added command list state to the client context so commands in the list are
buffered and only executed after receiving command_list_end.

Connection state:
1. Added is_closing flag in the client context to ignore messages received
after freeing the events buffer in intent to close the client connection.

Command arguments parsing:
1. Updated COMMAND_ARGV_MAX to 70 to match current MPD.
2. Changed mpd_pars_range_arg to handle open-ended range.

Command pause:
1. pause is ignored in stopped state instead returning error.

Command move:
1. Changed mpd_command_move() to support moving a range.
2. Added db_queue_move_bypos_range() to support moving a range.

Command password:
1. Password authentication flag set in handler mpd_command_password() instead
of in command processor.

Config:
1. Added config value: "max_command_list_size".
   The maximum allowed size of buffered commands in command list.
2024-09-16 21:17:32 +02:00
ejurgensen
945bde7c66 [db] Fix memleak if db backup is enabled but fails
Closes issue #1741
2024-04-03 22:04:39 +02:00
whatdoineed2do
2dc448fa30
[scan/library] Media rating sync (#1681)
Automatically read/write ratings to files in the library, if options read_rating/
write_rating are enabled. Also adds a max_rating so the user can set the rating
scale.

Doesn't sync automatic rating updates, because that could lead to whole-playlist
file rewriting.

Closes #1678 

---------

Co-authored-by: whatdoineed2do/Ray <whatdoineed2do@nospam.gmail.com>
Co-authored-by: ejurgensen <espenjurgensen@gmail.com>
2024-01-24 23:30:02 +01:00
ejurgensen
5ea49c94de [library/db/jsonapi] Refactor adding items to queue via JSON API v2 2023-12-17 23:42:57 +01:00
ejurgensen
1ea90b9445 [library/db/jsonapi] Refactor adding items to queue via JSON API
Reduce code duplication and move database specific stuff from httpd_json.c
to db.c.
2023-12-17 23:42:57 +01: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
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
whatdoineed2do/Ray
4418803aba [db,jsonapi] add file_size to count query 2022-05-13 09:51:06 +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
d72958f1f7 [db] Coverity fixups 2022-01-20 20:17:38 +01:00
chme
8dfbb460c2 [db/readme] Add comment to browse_info object; update docs for genre
endpoint
2021-12-29 12:01:42 +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
d7086cab00 [db,jsonapi] Additional meta data for browse queries 2021-12-28 06:29:07 +01:00
ejurgensen
6692411040 [-] Fixup PR 1309 (usermark) 2021-09-17 22:58:21 +02:00
whatdoineed2do/Ray
4d5c256327 [db,jsonapi] revert usermark from queue item table 2021-09-16 10:43:55 +01:00
whatdoineed2do/Ray
52d1ba7dd4 [db,jsonapi] remove DB_FILES_USERMARK_MAX 2021-09-15 08:40:07 +01:00
whatdoineed2do/Ray
d43ce017f5 [db,jsonapi,smartpl] db usermark flag review 2021-09-08 14:51:55 +01:00
whatdoineed2do/Ray
e65203e1e2 [db] expand file tbl's flag values 2021-09-07 11:49:24 +01:00
whatdoineed2do/Ray
ad573b8bc7 [db,jsonapi]] update api/library/tracks and db to accept 'flag' param 2021-09-06 20:15:35 +01:00
whatdoineed2do/Ray
4dcc9b602e [db] add review 'flag' column to files/queue tbls 2021-09-06 20:15:35 +01: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
79b4a070b0 [db] Change type of "disabled" to int64
Before the value in the db was not read straight into mfi->disabled and
pli->disabled, instead it was evaluated as != 0, so the ->disabled field
would just be true or false. This was also necessary when INOTIFY_FAKE_COOKIE
(1 << 32) was written to the DB, because it could not fit in the uint32 of
mfi->disabled/pli->disabled.

I consider this juggling poor practice, so with this change it is read straight
in and out, always as a int64.
2021-02-09 15:16:06 +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
ejurgensen
f48fae20e2 [db] Remove unused db_speaker_clear_all() 2020-10-19 20:39:03 +02:00
chme
a74a3e5add [db] Add fields time_added, time_played, seek to group object 2020-08-30 09:08:41 +02:00
chme
8afae4a41b [db] Fetch additional metadata for artist and album in group query 2020-08-30 09:08:41 +02:00
ejurgensen
de5060bc57 [db] Remove a FIXME, not much of an issue 2020-08-10 23:03:37 +02:00
whatdoineed2do/Ray
d567bd004a [db,conf,json] new backup endpoint 2020-07-24 20:07:42 +02:00
ejurgensen
1b74966ef1 [db] Remove HAVE_SPOTIFY_H conditionals, not required
The db functions don't depend on the Spotify library, so remove conditionals
2020-07-05 20:43:51 +02:00
ejurgensen
0e19102efd [artwork] Define MEDIA_KIND_ALL as USHRT_MAX instead of individual num values 2020-05-02 00:52:52 +02:00
ejurgensen
9d1f15d3c2 [db] Define MEDIA_KIND_ALL 2020-05-02 00:52:52 +02:00
whatdoineed2do/Ray
e7c62086a2 [db] add artwork_url to playlist_info 2020-04-30 20:28:36 +02:00
ejurgensen
153eb40b6d [db] Remove some definitions of ARTWORK_XXX
The artwork db field should only be used to save media file artwork metadata,
which mostly means whether it has embedded artwork or not. It should not be
used to save where we found artwork for the file, since that is not static.

So this commit removes for instance ARTWORK_OWN, ARTWORK_DIR etc., which we
weren't using anyway.
2020-04-25 22:07:10 +02:00
ejurgensen
b19314e814 [db] Add cleanup to db_pl_delete(), remove db_pl_purge() 2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
57b0626906 [db] RSS support: new PL_RSS db value and new pl purge 2020-04-04 21:07:16 +02:00
ejurgensen
f61dfa0529 [db] db_pl_delete_bypath() must also delete disabled playlists
Otherwise we end up with a bunch of disabled playlists in the db.
2020-03-29 00:33:44 +01:00
whatdoineed2do/Ray
286525a85c [db] inc playcount using filter 2020-03-23 13:39:59 +00:00
chme
36ebf7d06c [jsonapi] Add support for playlist folders 2020-02-24 21:27:53 +01:00
ejurgensen
5736217315 [db] Change prototype of db_admin_getxxx() functions
Makes it possible for caller to distinguish between "not set" and "set to 0".
2020-02-23 20:30:35 +01:00
ejurgensen
00de0a3f76 [db] Fixup commit #1edfadc 2020-02-23 20:25:22 +01:00
whatdoineed2do/Ray
78194807db [db] add S_RELEASEDATE and idx 2020-02-23 20:25:22 +01:00
ejurgensen
77a8de3bea [scan] Fix db_pl_add() so it always returns correct id 2020-02-08 10:55:15 +01:00
ejurgensen
c5988665b0 [db] Expose db_pl_fetch_byid() 2020-02-08 10:55:15 +01:00
ejurgensen
08e89ffd4f [db] Use prepared statements for playlists (add/update) 2020-02-08 10:55:15 +01:00
ejurgensen
6f3c315dfc [db] Add missing declarations of media_kind column in commit 40c7522 (fixes issue #836) 2019-11-03 00:16:20 +01:00
whatdoineed2do/Ray
b126a2fbc0 [db] add 'channels' to file/queue tbl 2019-06-12 16:52:02 +01:00
whatdoineed2do/Ray
c796db251d [db] schema v20.01 support codec type/bitrate/samplerate in queue tbl 2019-06-12 16:50:52 +01:00
ejurgensen
4f5966c9ff [db] Speed up Q_PL query used by e.g. '/databases/1/containers' request
The previous solution would use subqueries to count the number of items and
streams in each playlist, which means that response time gets pretty slow if
there are many playlists.

This commit also includes a number of lesser db code changes.
2019-05-30 21:19:40 +02:00