Commit Graph

12955 Commits

Author SHA1 Message Date
Max Kellermann
cb412b221c output/multiple: update API documentation 2018-06-22 22:59:30 +02:00
Max Kellermann
1ca1269a59 input/curl: use class MaybeBufferedInputStream
For remote files (not streams), this downloads as quickly as possible
to a large buffer instead of throttling the stream during playback.
Throttling can make the server impatient and it may then disconnect.

This is what Qobuz and Tidal do, and this commit attempts to solve
this by not letting the Qobuz/Tidal server wait (closes #241).
2018-06-22 22:33:16 +02:00
Max Kellermann
6681b14b71 input/MaybeBuffered: proxy InputStream implementation which auto-uses BufferedInputStream 2018-06-22 22:33:16 +02:00
Max Kellermann
12f2418445 input/buffered: proxy InputStream implementation which caches in a huge buffer 2018-06-22 22:33:16 +02:00
Max Kellermann
ae8a2ab652 util/SparseBuffer: new utility class 2018-06-22 22:18:26 +02:00
Max Kellermann
d0fbf6db59 input/Stream: remove attribute "cond", replace with handler interface
This adds a bit of overhead, but also adds flexibility to the API,
because arbitrary triggers may be invoked from that virtual method
implementation, not just Cond::signal().

The motivation for this is to make the handlers more dynamic, for the
upcoming buffering class utilizing ProxyInputStream.
2018-06-22 19:37:18 +02:00
Max Kellermann
01d8eb6290 input/rewind: move sources out of the "plugins" directory
This is not a plugin.
2018-06-22 19:31:06 +02:00
Max Kellermann
197968d65e input/Stream: mark qobuz:// and tidal:// as "seeking is expensive"
Those are loaded with the "curl" input plugin, and this one is
"expensive", because it needs to send a new HTTP request with Range
header for each seek.
2018-06-21 22:35:36 +02:00
Max Kellermann
2cb83a1f84 input/Stream: make "uri" const 2018-06-14 17:31:54 +02:00
Max Kellermann
d7c94e30c5 input/Stream: remove obsolete comment 2018-06-14 17:31:33 +02:00
Max Kellermann
510d2514a0 doc/user.xml: mention the cache_directory requirement for mounts 2018-06-05 22:10:28 +02:00
Max Kellermann
5217a74b7f storage/udisks: return file path in MapUTF8()
The absolute udisks:// URI is not usable with InputStream::Open(), and
thus we need to return the LocalStorage::MapUTF8() return value
instead.
2018-06-05 22:01:28 +02:00
Max Kellermann
cccf35d140 storage/udisks: add missing MountWait() call to MapFS() 2018-06-05 21:56:28 +02:00
Max Kellermann
249316c8fc storage/udisks: implement MapFS() 2018-06-05 21:54:50 +02:00
Max Kellermann
cd24449495 doc/user.xml: document the two udisks plugins 2018-06-05 21:35:30 +02:00
Max Kellermann
687834328c doc/user.xml: add section explaining storage/neighbor plugins and mounts 2018-06-05 21:35:30 +02:00
Max Kellermann
4d015aff30 doc/user.xml: rewrite the "Introduction" section with text from the website 2018-06-05 21:35:30 +02:00
Max Kellermann
ba8040d068 storage/udisks: new plugin
Documentation will follow soon.
2018-06-04 22:00:52 +02:00
Max Kellermann
5fa94d2a85 lib/dbus/AsyncRequest: add missing include 2018-06-04 22:00:52 +02:00
Max Kellermann
7eee79c145 neighbor/udisks: move code to class UDisks2::ParseObjects(ODBus::Message) 2018-06-04 21:50:34 +02:00
Max Kellermann
9626523420 neighbor/udisks: move code to class UDisks2::ParseObjects(ReadMessageIter) 2018-06-04 21:41:51 +02:00
Max Kellermann
0150131984 test/run_neighbor_explorer: make GlobalInit const 2018-06-04 17:44:31 +02:00
Max Kellermann
2ddd45e5e1 test/run_neighbor_explorer: use ShutdownHandler to catch SIGINT/SIGTERM 2018-06-04 17:42:47 +02:00
Max Kellermann
03c89c9cec neighbor/udisks: move ParseObject() to UDisks2.cxx 2018-06-04 17:23:55 +02:00
Max Kellermann
640de5518b neighbor/udisks: move struct UdisksObject to UDisks2.hxx 2018-06-04 17:23:55 +02:00
Max Kellermann
a92c694f1b neighbor/Iter: add missing include 2018-06-04 17:23:55 +02:00
Max Kellermann
a159299a4b lib/dbus/AsyncRequest: new helper class 2018-06-04 12:21:17 +02:00
Max Kellermann
d048545f1a lib/dbus/Connection: add DBusConnection& cast operator 2018-06-04 12:20:41 +02:00
Max Kellermann
aea6d354b7 lib/dbus/ObjectManager: use TypeTraits instead of CPP macro 2018-06-03 20:30:08 +02:00
Max Kellermann
d3793dfe5b lib/dbus/Types: add ObjectPathTypeTraits 2018-06-03 20:30:08 +02:00
Max Kellermann
234f8d287a lib/dbus/Types: rename _MakeStructTypeAsString to ConcatTypeAsString 2018-06-03 20:29:01 +02:00
Max Kellermann
8d49c2d028 neighbor/udisks: show only filesystems, hide raw drives 2018-06-03 20:20:37 +02:00
Max Kellermann
e560f6bc63 lib/dbus/ReadIter: add ForEachProperty() 2018-06-03 20:18:46 +02:00
Max Kellermann
fbfbc5682a lib/dbus/ReadIter: add ForEachRecurse() 2018-06-03 20:18:08 +02:00
Max Kellermann
d4141bf7f1 lib/dbus/ReadIter: add API documentation 2018-06-03 20:05:37 +02:00
Max Kellermann
6c81fa1ec5 neighbor/udisks: move code to ForEachInterface() 2018-06-03 14:47:12 +02:00
Max Kellermann
24874b8286 Merge branch 'v0.20.x' 2018-06-03 14:22:29 +02:00
Max Kellermann
b63664988f lib/dbus/Types: support DBUS_TYPE_DICT_ENTRY 2018-06-03 12:19:17 +02:00
Max Kellermann
eeb00ac45b util/TemplateString: new utility library 2018-06-03 12:13:47 +02:00
Max Kellermann
37e25f93d6 lib/dbus/Glue: move Connect()/Disconnect() calls to I/O thread 2018-06-03 12:08:37 +02:00
Max Kellermann
d58d65ebf0 lib/dbus/Glue: use private connection
Avoid interfering with libraries also using the shared connection.
2018-06-03 11:00:58 +02:00
Max Kellermann
adf2d3aff2 zeroconf/Avahi: move dbus_shutdown() call to the end of Main()
Calling dbus_shutdown() too early will break the "udisks2" neighbor
plugin.
2018-06-03 10:37:54 +02:00
Max Kellermann
32064a23c1 neighbor/udisks2: move Open()/Close() calls into the I/O thread
Fixes assertion failure.
2018-06-03 10:08:11 +02:00
Max Kellermann
c60b50b1ae neighbor/udisks2: use SafeSingleton for managing the ODBus::Glue instance
Allows other objects to use the same single instance as well.
2018-06-03 09:58:34 +02:00
Max Kellermann
f3ffdaf21f lib/dbus/Glue: singleton for global initialization 2018-06-03 09:28:04 +02:00
Max Kellermann
3aade67046 basic udisks2 support
To get udisks2 support started, this commit contains the configure.ac
option and a "neighbor" plugin which shows block devices.  Later, this
will allow mounting removable media with a new storage plugin.
2018-06-02 19:44:46 +02:00
Max Kellermann
dc111bbec2 odbus: import dbus-1 OO wrapper library
From a7cef404c1

To be used by upcoming code.
2018-06-02 19:15:56 +02:00
Max Kellermann
acd61a0e8e test/run_neighbor_explorer: dump NeighborGlue::GetList() after initialization 2018-06-02 19:15:36 +02:00
Christian Kröner
58590b71d1 Fix pause for OSX output plugin (delay one second) 2018-06-02 19:02:37 +02:00
Max Kellermann
8dcb1f805d db/proxy: support tags "ArtistSort", "AlbumArtistSort", "AlbumSort"
Closes #284
2018-05-28 20:14:07 +02:00