Julien BLACHE
ba251b16ae
Start keeping track of DAAP sessions
...
This will soon be required as we'll need to keep some knowledge about
the session in some cases. This also makes us a bit more compliant.
2010-01-20 18:24:52 +01:00
Julien BLACHE
f126b04521
Tell libavl to free() ITML <-> DB mappings
...
The mappings should be free()d with the standard free() when we are
done with the tree. This fixes a memory leak.
2010-01-20 18:19:51 +01:00
Julien BLACHE
2cb67743fc
Add service type to the "ALL FOR NOW" message
2010-01-20 18:17:04 +01:00
Julien BLACHE
d47c205452
Feed .remote files to the Remote pairing agent
2010-01-17 10:52:58 +01:00
Julien BLACHE
3c7456f545
Add Remote pairing services start/stop
2010-01-17 10:52:58 +01:00
Julien BLACHE
c191aff5cd
Add remote_pairing.[ch] to sources
2010-01-17 10:52:58 +01:00
Julien BLACHE
625b8e3177
Add a pairing agent for Remote
...
Remote is the iPod/iPhone application that can act as a remote control for
iTunes. Remote must be paired with an iTunes instance before it can control
it; this pairing process includes a challenge/response autentication.
This pairing agent makes it possible to pair Remote with a forked-daapd
instance. It is the very first step for Remote support.
2010-01-17 10:52:58 +01:00
Julien BLACHE
04f4622086
Add generic mDNS browsing + resolving facility
2010-01-17 10:52:58 +01:00
Julien BLACHE
2b2ec87e7e
Add the "remote" logdomain for Remote pairing
2010-01-17 10:52:58 +01:00
Julien BLACHE
73fa690fd4
Advertise the _touch-able._tcp service
...
_touch-able._tcp is the service used by Remote.app to discover and identify
libraries it interacts with.
2010-01-17 10:52:58 +01:00
Julien BLACHE
d228e0dcb8
Rename servername variable to a more appropriate libname
2010-01-17 10:52:58 +01:00
Julien BLACHE
b918d14e38
Fix group_entries list traversal
2010-01-17 10:52:58 +01:00
Julien BLACHE
dd1712abdc
Use glibc endianness-related headers if available
...
BSD headers aren't working properly on kFreeBSD, so use the glibc ones.
2010-01-17 10:52:58 +01:00
Julien BLACHE
bf2c2b68c0
Revert "Remove default playlist & special case"
...
This reverts commit af95cee79b
.
The default playlist is actually used by iTunes, so revert its removal. I
misremembered it being there for RSP.
2010-01-14 17:39:56 +01:00
Julien BLACHE
af95cee79b
Remove default playlist & special case
...
The default playlist (called "Library") doesn't actually have a purpose; I
though it was needed for RSP (SoundBridge) but it doesn't look like it makes
any difference with or without this playlist.
2010-01-13 19:56:15 +01:00
Ace Jones
1b34c9d555
Always set media_kind, for real
...
The problem is, you can't set INITIAL values for the file scanner, because
the filescanner doesn't fill in values on top of already existing values.
2010-01-13 19:45:04 +01:00
Julien BLACHE
ed3dbc1f35
Fill in the watch_info struct only when it's needed
2010-01-12 18:50:04 +01:00
Julien BLACHE
364b22c030
Implement directory rescanning on top of kqueue/kevent for FreeBSD
2010-01-12 18:45:44 +01:00
Julien BLACHE
69bae139bb
Make push_dir()/pop_dir() accept a stack as first argument
2010-01-12 18:45:31 +01:00
Julien BLACHE
79cdb4f9aa
Make forked-daapd build on GNU/kFreeBSD
2010-01-10 17:49:01 +01:00
Ace Jones
d96cdd7400
Add DAAP request handler for databases/###/groups (albums)
...
As of now we only support album groups, but there may be more than
album groups.
2010-01-10 14:43:23 +01:00
Ace Jones
5cfbe75bae
Add database code for groups queries
2010-01-10 14:43:22 +01:00
Ace Jones
e033d35195
Rework error handling in daap_reply_playlists()
...
Kill a bit of code duplication in the error handling.
2010-01-10 14:43:22 +01:00
Ace Jones
ac82b176a0
Rework error handling in daap_reply_songlist_generic()
...
Kill a bit of code duplication in the error handling.
2010-01-10 14:43:22 +01:00
Ace Jones
cac2c032f6
Add the daap.songalbumartist DMAP field
2010-01-10 12:11:00 +01:00
Ace Jones
e948f69d0d
Add safe_atoull()
2010-01-10 12:09:29 +01:00
Julien BLACHE
5b5e142c22
Replace inotify with kqueue on FreeBSD - stub
...
Start replacing inotify in the filescanner with kqueue. Only a stub at
this point, kqueue/kevent doesn't deliver nearly as much information
as inotify does. This will require some work, and someone willing to
do that work.
2010-01-09 13:48:52 +01:00
Julien BLACHE
9695c11186
Add an opaque pointer to watch_info
...
Used on FreeBSD to hold a pointer to the kevent struct.
2010-01-09 13:45:33 +01:00
Julien BLACHE
5681793534
Replace signalfd with kqueue for FreeBSD
2010-01-09 13:44:56 +01:00
Julien BLACHE
8d7c566d95
Use m_realpath(path) instead of realpath(path, NULL)
2010-01-09 13:44:10 +01:00
Julien BLACHE
b9d8a5880a
Introduce m_realpath() to replace realpath(path, NULL)
2010-01-09 13:43:29 +01:00
Julien BLACHE
3724f943b9
Use sys/endian.h on FreeBSD
2010-01-09 13:42:59 +01:00
Julien BLACHE
99df67b53c
Include sys/param.h for PATH_MAX
2010-01-09 13:42:23 +01:00
Julien BLACHE
6c38cd2ef5
Add missing sys/types.h & sys/stat.h for stat & friends
2010-01-09 13:41:51 +01:00
Julien BLACHE
6033e29348
Use standard pipe() syscall on non-Linux platforms
2010-01-09 13:41:14 +01:00
Julien BLACHE
2f99797d9a
Use sizeof(void *) instead of __WORDSIZE
2010-01-09 13:39:45 +01:00
Julien BLACHE
613717f6b8
Fix a format string mismatch (long vs uint64_t)
2010-01-09 13:38:41 +01:00
Julien BLACHE
cdf0e2f9a5
Fix incorrect log domain
2010-01-09 11:14:23 +01:00
Julien BLACHE
cefa51b5c6
Fix signal handler - readd event to event loop
2010-01-09 11:03:16 +01:00
Julien BLACHE
11f6b1e78f
Kill duplicate fclose()
2010-01-09 11:00:41 +01:00
Julien BLACHE
5887cc2e27
Kill dead variables in signal_cb()
2010-01-08 12:29:13 +01:00
Ace Jones
fc971974f0
Fill in media_kind=1 for music
...
Also move item_kind initialization further up.
2010-01-06 18:41:27 +01:00
Julien BLACHE
974a74a833
Update copyright notices for 2010
2010-01-05 19:34:00 +01:00
Julien BLACHE
60a06dfb0a
Change album and album_artist column definitions to be NOT NULL
...
Unfortunately SQLite doesn't support adding constraints with ALTER TABLE,
so this constraint cannot be added upon upgrade.
2010-01-05 19:23:52 +01:00
Julien BLACHE
26d603aa61
Introduce generic database upgrade function
2010-01-05 19:18:30 +01:00
Julien BLACHE
db0bff61c7
Remove -y option, as it doesn't actually exist
2010-01-05 18:32:00 +01:00
Julien BLACHE
d273c72a4b
Add database upgrade to populate album_artist for every file
...
Bump schema_version to 3, even though this isn't exactly a schema upgrade.
2010-01-05 18:25:23 +01:00
Ace Jones
67e3739bc2
Allow DMAP queries on daap.songalbumid
2010-01-05 18:25:23 +01:00
Ace Jones
f2965f8ac6
Make daap_songalbumid available as a function inside SQLite
2010-01-05 18:25:18 +01:00
Ace Jones
d3350713d1
Return daap.songalbumid as a hash of the album_artist + album
...
iPhone remote will later want to query by album. Instead of doing a
fulltext query, it uses a 64-bit hash of the album + album_artist. It
is not necessary to use the same hash algorithm that iTunes uses. The
important thing is that we can later respond to a query=('daap.songalbumid:xxx')
with this value.
2010-01-04 18:00:05 +01:00
Ace Jones
19a244095a
Add daap_songalbumid() to generate the songalbumid hash
...
Make it an inline function as it's a short function and has only got
2 call sites.
2010-01-04 17:59:21 +01:00
Julien BLACHE
8ef57bbb41
Add the MurmurHash2, 64bit version
...
Hash algorithm by Austin Appleby, <http://murmurhash.googlepages.com >
2010-01-04 17:58:28 +01:00
Ace Jones
e16d8a9747
Use the 'artist' field for 'album_artist' if there is no album artist set
2010-01-04 17:56:20 +01:00
Ace Jones
117ee15e44
Add handler for DMAP extra_data requests
...
iPhone Remote uses the following requests to get cover art for
songs and albums:
/databases/#/items/#/extra_data/artwork
/databases/#/groups/#/extra_data/artwork
For now, we will return the valid and correct response that we
have "No content". In the future, the real artwork could be
extracted and returned here.
2010-01-03 18:55:32 +01:00
Julien BLACHE
d20fdbda95
Cast pANTLR3_STRING to char * to avoid printf-format warnings
2009-12-31 22:21:56 +01:00
Julien BLACHE
046e3d6d90
Fixup DPRINTF() format strings
2009-12-31 22:21:19 +01:00
Julien BLACHE
5e338b033a
Add missing trk_id argument to DPRINTF() calls
2009-12-31 22:20:48 +01:00
Julien BLACHE
61c6627713
Mark DPRINTF() as a printf-like function
2009-12-31 20:39:51 +01:00
Julien BLACHE
207e85c6c0
Regain root privileges to unlink PID file at exit
2009-12-31 20:19:13 +01:00
Julien BLACHE
1ac46983b9
Use setegid/seteuid to be able to regain root privileges
2009-12-31 20:19:13 +01:00
Julien BLACHE
662ba32d35
Fix ret/iret variables usage
2009-12-31 20:12:36 +01:00
Julien BLACHE
8feeecd895
Send a Content-Length header when plainly streaming a whole file
...
That is, don't send a Content-Length if we're decoding a whole file,
as we do not know the exact size in this case.
Based on a patch by Ace Jones.
2009-12-31 16:50:19 +01:00
Julien BLACHE
a91b1ef46e
Reindent dmap_query_fields, no code changes.
2009-12-31 16:50:19 +01:00
Ace Jones
ddc4c667ea
Enable DMAP queries on com.apple.itunes.mediakind
...
Used by Remote on the iPhone.
2009-12-31 16:41:10 +01:00
Ace Jones
995c212dc7
Support query filter in playlist list query
...
iTunes uses query filters in DAAP containers requests, so support that here.
2009-12-30 18:53:55 +01:00
Ace Jones
040e760789
Add support for Remote, the iPhone remote control for iTunes
...
Remote needs the same DAAP query quirk as iTunes and supports the
same codecs.
2009-12-30 18:49:52 +01:00
Ace Jones
abbba5cf47
Fix typo in DAAP error message
2009-12-30 18:47:41 +01:00
Ace Jones
76fc069f22
Fix missing argument to debug call
2009-12-30 18:46:41 +01:00
Julien BLACHE
ff03c2679d
DMAP comparison against empty string needs to check against NULL too
...
'dmap.foo!:' -> (dmap.foo <> '' AND dmap.foo IS NOT NULL)
'dmap.foo:' -> (dmap.foo = '' OR dmap.foo IS NULL)
2009-12-29 22:04:49 +01:00
Julien BLACHE
8025db2dc2
Allow negation operator for string comparisons in DMAP queries
2009-12-29 19:10:51 +01:00
Julien BLACHE
f56884015f
Allow empty values in DMAP queries for string fields
2009-12-29 19:10:22 +01:00
Julien BLACHE
371725b0da
Fix segfault in db_file_update
...
Fix wrong type (%Q instead of %d) for tv_episode_sort and tv_season_num in
the SQL query for db_file_update().
2009-12-27 08:19:16 +01:00
Julien BLACHE
a52dcd264c
Force a full rescan after DB migration
2009-12-27 08:17:25 +01:00
Julien BLACHE
7cb0eec5d5
Don't increase play count if not streaming at least half of the file
...
When streaming AAC/MP4 files that aren't stream-optimized (metadata at the
end of the file), clients will seek through the file to grab the metadata
prior to playing the file, causing the play count to increase by 2 or 3.
To counter that, do not increase play count if not streaming at least half
of the file.
2009-12-26 09:57:37 +01:00
Julien BLACHE
403153f64b
Reindent the dmap_fields table, no code changes
2009-12-26 09:28:28 +01:00
Ace Jones
000e13b7ee
Return TV metadata in DMAP response
2009-12-26 09:23:13 +01:00
Julien BLACHE
66716841ea
Handle database schema upgrade from v1 to v2
2009-12-26 09:20:51 +01:00
Julien BLACHE
42a7715c69
Reindent data tables, no code changes
2009-12-26 08:44:55 +01:00
Ace Jones
a0ec19ada6
Add TV metadata to the database
...
With this, we're bumping SCHEMA_VERSION to 2.
2009-12-26 08:39:39 +01:00
Ace Jones
2ae6fcd864
Pick up TV-related metadata in MP4 video files
...
TV-related metadata as found in TV shows bought on the iTunes store, for
instance.
At the time of writing, ffmpeg doesn't support this yet. Until it does,
contact Ace Jones <ace.jones1@yahoo.com> for patches and instructions.
2009-12-26 08:31:12 +01:00
Ace Jones
a0b015f1e4
Accomodate TV meta-data in internal structures
...
Add new fields for TV-related metadata to struct media_file_info and
struct db_media_file_info.
2009-12-26 08:28:28 +01:00
Ace Jones
30e07abae3
Check chdir() return value to silence a warning
2009-12-24 21:28:41 +01:00
Ace Jones
d231faff2d
Handle DAAP activity request
...
Reply to the DAAP /activity request with 204 / No content. Used by iTunes to
ping the server while streaming.
2009-12-20 14:43:28 +01:00
Julien BLACHE
72b1237500
Send a Content-Length header when streaming
...
Patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:46:47 +01:00
Julien BLACHE
ff89ce0183
Add support for end offset in Range header
...
Honor end offset provided in the Range header and do not stream more than
what the client asked for.
Based on a patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:42:48 +01:00
Julien BLACHE
b9e7df5be3
Return a proper Content-Type when streaming videos
...
Clients like Front Row expect video/<type> for video streaming, whereas iTunes
likes application/x-dmap-tagged when streaming audio.
Based on a patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:04:30 +01:00
Julien BLACHE
df2cbea9b2
Add supported codec list for Front Row and QuickTime
...
Patch from Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 20:45:57 +01:00
Julien BLACHE
38c502cb7e
Properly close the raw file that was streamed when cleaning up after streaming
...
Report & fix by Ace Jones <ace.jones1@yahoo.com>
2009-12-08 19:54:48 +01:00
Julien BLACHE
ab760903b1
Use stream_end() to do the cleanup in stream_fail_cb()
...
Introduce a new 'failed' parameter to stream_end() as some actions shouldn't
be done when cleaning up after a connection failure.
2009-12-08 19:52:51 +01:00
Julien BLACHE
6114c31c61
Hook up iTunes library scanner
2009-11-28 10:55:43 +01:00
Julien BLACHE
3154416415
Integrate iTunes library scanner as an optional component
2009-11-28 10:55:43 +01:00
Julien BLACHE
d923e8d73b
Add iTunes Music Library XML scanner
2009-11-28 10:55:43 +01:00
Julien BLACHE
3ff067da4e
Add itunes_overrides parameter
2009-11-28 10:55:43 +01:00
Julien BLACHE
a6cbb2a8ec
Introduce db_file_id_byfilebase and db_file_id_byfile
...
File id lookup by basepath + filename and filename only.
2009-11-28 10:55:43 +01:00
Julien BLACHE
66cd10dc52
Introduce db_file_id_byurl and share code with db_file_id_bypath
2009-11-28 10:55:42 +01:00
Julien BLACHE
ecb2991881
Add db_pl_fetch_bytitlepath
2009-11-28 10:55:42 +01:00
Julien BLACHE
04ce09e5be
Rename db_pl_add_item -> db_pl_add_item_bypath
...
For consistency with db_pl_add_item_byid & similar database functions.
2009-11-28 10:55:42 +01:00
Julien BLACHE
a45f46f3eb
Introduce db_pl_add_item_byid()
2009-11-28 10:55:42 +01:00
Julien BLACHE
1a397ca79b
Check that db_pl_fetch_byquery only gets 1 query result
2009-11-28 10:55:42 +01:00
Julien BLACHE
6a1c01fa15
Allow playlists from different files to have the same title
2009-11-28 10:55:42 +01:00
Julien BLACHE
8f07db5c10
Add support for FLAC files with ID3v2 tags.
...
Patch from Wolfgang Holler <woelfs@googlemail.com>.
2009-11-18 20:14:03 +01:00
Julien BLACHE
946758cec7
Rework iTunes 9 absolute request uri fix
2009-11-14 11:23:03 +01:00
Julien BLACHE
f8f183f2f6
Fixup iTunes 9 Request-URI before processing
...
iTunes 9 sends requests with a Request-URI like
daap://10.1.1.20:3689/server-info
The DAAP server expected the Request-URI to be just /server-info, and so
couldn't match the request to any handler.
In addition, evhttp would declare this request a proxy request which also
broke keep-alive handling resulting in the server closing the connection
after the reply. iTunes doesn't like that.
2009-11-13 21:53:47 +01:00
Julien BLACHE
6cc9abadbd
Skip files that have no audio streams
2009-11-01 12:52:30 +01:00
Julien BLACHE
9b56d51f92
Avoid divide-by-zero for files with duration < AV_TIME_BASE
2009-11-01 12:51:50 +01:00
Julien BLACHE
c36b3c360d
Fix DAAP request regexps - IDs can (thankfully) be more than 1-digit long
2009-11-01 12:39:11 +01:00
Julien BLACHE
9229f3dff9
Flush log as we go.
2009-10-04 12:08:46 +02:00
Julien BLACHE
aa52f1d30b
Add license and copyright statement to -v/--version and usage message
2009-09-21 19:52:05 +02:00
Julien BLACHE
11909725e2
Use ffmpeg's memory allocator for transcode buffer
...
ffmpeg's allocator ensures the allocated memory is properly aligned for
any kind of optimized operation used in ffmpeg.
2009-07-24 08:19:31 +02:00
Julien BLACHE
2323fd302c
Fix memory leak (transcode buffer)
2009-07-24 08:18:53 +02:00
Julien BLACHE
1bd3b3a076
Fix paths and rename the project
2009-06-12 13:00:34 +02:00
Julien BLACHE
e1c0b6d4b7
Move *_offsetof() macro definitions to db.h
2009-06-11 23:17:17 +02:00
Julien BLACHE
1f92052409
Rename the songs table
2009-06-11 23:03:53 +02:00
Julien BLACHE
3cadbdb1e3
Remove unused db_file_fetch_bypath()
2009-06-11 20:46:11 +02:00
Julien BLACHE
0ad20e5220
Rework process_media_file() and related DB support routines
...
Avoid pulling all the file info from the DB in process_media_file() as
anything besides the file id and timestamp is not used at all.
2009-06-11 20:44:22 +02:00
Julien BLACHE
0a8c171187
Store playlist items paths instead of resolving to file ids
...
This allows for more dynamic playlists now that files can move
around while we're running.
2009-06-11 20:27:31 +02:00
Julien BLACHE
3b7ff30c1b
Remove useless force_update field in media file info
2009-06-11 19:15:22 +02:00
Julien BLACHE
c918c5c689
Always rescan directories to update playlists
2009-06-11 19:11:03 +02:00
Julien BLACHE
538d81b402
Always rescan and update playlists
...
This is needed to keep relative playlist items up to date in the
database when the playlist file moves around.
2009-06-11 19:04:21 +02:00
Julien BLACHE
c589d92b14
Use db_get_count() wherever applicable; simplify db_{pl,files}_get_count() prototypes
2009-06-11 18:41:50 +02:00
Julien BLACHE
2d1c35b855
Count playlist items on the fly
2009-06-11 18:28:01 +02:00
Julien BLACHE
30204cbb76
Remove unused toplevel watch attribute
2009-06-11 17:36:13 +02:00
Julien BLACHE
c81b33bd02
Bring db_watch_delete_bywd() prototype back in line with other db_watch_delete_by*()
2009-06-11 17:35:32 +02:00
Julien BLACHE
582f0e6746
Handle inotify events for directories
2009-06-11 17:35:25 +02:00
Julien BLACHE
07e22d8870
Add watch query/enumeration
2009-06-11 16:44:49 +02:00
Julien BLACHE
129ca8dfff
Add watch deletion by path/match/cookie routines
2009-06-11 16:15:35 +02:00
Julien BLACHE
267ab7cb1a
Rename db_query_get_count() to db_get_count()
...
Make that a generic helper, given it's used outside queries.
2009-06-11 15:45:49 +02:00
Julien BLACHE
cef1636415
Add watch-moving routines
2009-06-11 15:42:51 +02:00
Julien BLACHE
87aa24454d
Add watch-marking routines
2009-06-11 15:24:10 +02:00
Julien BLACHE
56127b3ecc
Add file and playlist disable-by-match routines
2009-06-11 15:09:10 +02:00
Julien BLACHE
34b0c22e46
Handle symlink-to-directory creation
2009-06-11 13:51:19 +02:00
Julien BLACHE
279fb95979
Watch for IN_CLOSE_WRITE in addition to IN_MODIFY and IN_CREATE
...
When receiving IN_CREATE or IN_MODIFY, there's no guarantee the file is
in its final state. Similarly, IN_MOVED_TO doesn't guarantee the file is
available when we receive it. And it actually isn't.
Watching for IN_CLOSE_WRITE fixes all that.
2009-06-11 13:45:02 +02:00
Julien BLACHE
467b177c17
Handle IN_DELETE, IN_MOVED_FROM and IN_MOVED_TO for files
2009-06-10 22:28:59 +02:00
Julien BLACHE
d63da9f08f
Add file and playlist enable/disable routines
2009-06-10 22:28:54 +02:00
Julien BLACHE
9ff8913dd6
Add file and playlist deletion (by path) routines
2009-06-10 22:28:49 +02:00
Julien BLACHE
ac96ac6baf
Move to the SQL database for storage of inotify watch info
2009-06-10 22:28:49 +02:00
Julien BLACHE
a9697eccdf
Add storage of inotify watch info
2009-06-10 22:28:43 +02:00
Julien BLACHE
bfa2488343
Add support for disabled files and playlists
2009-06-10 19:11:12 +02:00
Julien BLACHE
177fb35d81
Add missing argument to DPRINTF() call
2009-06-10 19:11:12 +02:00
Julien BLACHE
94421b0b1b
Handle IN_IGNORED events in inotify callback
2009-06-10 19:10:44 +02:00
Julien BLACHE
cbab1f80e0
ie->len is 0 for events reported on the watch subject
...
ie->len is non-0 only when the event is being reported for a file or
directory inside a watched directory.
2009-06-10 19:10:37 +02:00
Julien BLACHE
c8cc6bd603
Run event loop for each directory and each playlist when scanning in bulk mode
2009-06-10 19:04:18 +02:00
Julien BLACHE
4e38d168e1
Set and check database schema version
2009-06-10 19:04:18 +02:00
Julien BLACHE
ab1f9db6b3
Remove unused L_LOCK logdomain
2009-06-10 19:04:18 +02:00
Julien BLACHE
7314dd21c7
Purge old files and playlists after bulk scan
2009-06-10 19:04:18 +02:00
Julien BLACHE
4e3b29f502
Remove the old database code
2009-06-10 19:04:18 +02:00
Julien BLACHE
a200703393
Switch to the new database code
2009-06-10 19:04:18 +02:00
Julien BLACHE
f2c677462b
Add new database code
2009-06-10 19:04:12 +02:00
Julien BLACHE
52d3fd1064
Clear evkeyvalq structs before use; fix crasher
2009-06-07 19:06:59 +02:00
Julien BLACHE
149d5432c6
Rework error handling and cleanup
2009-06-07 19:06:59 +02:00