Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | storage/nfs: use the libnfs async API | Max Kellermann | 2014-10-09 | 4 | -49/+398 |
| | | | | Share the NFS connection with the NFS input plugin. | ||||
* | lib/nfs/Connection: reduce Error instance allocations | Max Kellermann | 2014-10-09 | 1 | -3/+2 |
| | |||||
* | lib/nfs/Glue: add assertion | Max Kellermann | 2014-10-09 | 1 | -0/+1 |
| | |||||
* | StoragePlugin: pass EventLoop to constructor | Max Kellermann | 2014-10-09 | 11 | -15/+31 |
| | |||||
* | test/run_input, ...: add struct ScopeIOThread | Max Kellermann | 2014-10-07 | 9 | -32/+57 |
| | | | | Auto-stop the IO thread in all error handlers. | ||||
* | storage/nfs: move code to class MemoryStorageDirectoryReader | Max Kellermann | 2014-10-07 | 4 | -73/+151 |
| | | | | | | Read all directory entries into memory and close the struct nfsdir before returning the StorageDirectoryReader instance. This is what libnfs does, anyway. | ||||
* | storage/nfs: move code to Copy() | Max Kellermann | 2014-10-07 | 1 | -18/+30 |
| | |||||
* | lib/nfs/Connection: add methods {Open,Read,Close}Directory() | Max Kellermann | 2014-10-07 | 2 | -0/+53 |
| | |||||
* | lib/nfs/Connection: add method Stat(path) | Max Kellermann | 2014-10-07 | 2 | -0/+33 |
| | |||||
* | test/run_storage: new debug program | Max Kellermann | 2014-10-07 | 2 | -2/+143 |
| | |||||
* | Makefile.am: add libnfs and libsmbclient to STORAGE_LIBS | Max Kellermann | 2014-10-07 | 1 | -1/+4 |
| | |||||
* | lib/nfs/Connection: make GetEventLoop() public | Max Kellermann | 2014-10-06 | 1 | -4/+4 |
| | |||||
* | lib/nfs/Base: kludge to reduce number of NFS mounts | Max Kellermann | 2014-10-05 | 5 | -7/+128 |
| | | | | | | | Creating a NfsStorage sets its own export_name as the "base". Now NfsFileReader can use this information to derive the export_name to be mounted, instead of guessing. This solves the "too many connection" problem on the NFS server while updating the database. | ||||
* | Makefile.am: compile libffmpeg.a with FFMPEG_CFLAGS | Max Kellermann | 2014-10-04 | 1 | -0/+2 |
| | |||||
* | PlaylistStream: use OpenLocalInputStream() | Max Kellermann | 2014-10-02 | 1 | -5/+3 |
| | |||||
* | PlaylistStream: pass Path instance to playlist_open_path() | Max Kellermann | 2014-10-02 | 3 | -11/+19 |
| | | | | | Convert filesystem charset to UTF-8 for playlist_list_open_uri(). This fixes one of many remaining charset bugs. | ||||
* | archive/bzip2: use OpenLocalInputStream() | Max Kellermann | 2014-10-02 | 1 | -2/+2 |
| | |||||
* | input/Open: use OpenLocalInputStream() | Max Kellermann | 2014-10-02 | 5 | -33/+34 |
| | | | | | | | Make the "open" method of plugins "file" and "archive" dummy methods that always fail. Instead, let InputStream::Open() hard-code access to these two plugins by using OpenLocalInputStream(). This allows simplifyin the algorithm for falling back to probing archive plugins. | ||||
* | DecoderThread: use OpenLocalInputStream() for local files | Max Kellermann | 2014-10-02 | 1 | -1/+20 |
| | |||||
* | TagFile: use OpenLocalInputStream() | Max Kellermann | 2014-10-02 | 1 | -3/+4 |
| | |||||
* | input/LocalOpen: new library for opening local files | Max Kellermann | 2014-10-02 | 3 | -0/+87 |
| | | | | Combines the "file" and the "archive" input plugins. | ||||
* | input/archive: export function OpenArchiveInputStream() | Max Kellermann | 2014-10-02 | 2 | -16/+33 |
| | |||||
* | input/file: export function OpenFileInputStream() | Max Kellermann | 2014-10-02 | 2 | -13/+37 |
| | |||||
* | input/file: generate Error when errno==ENOENT | Max Kellermann | 2014-10-02 | 1 | -1/+1 |
| | | | | | This special case was useless. Fixes the dreaded "Unrecognized URI" error message when a file does not exist. | ||||
* | input/file: make the "fd" attribute "const" | Max Kellermann | 2014-10-02 | 1 | -1/+1 |
| | |||||
* | input/file: make variables more local | Max Kellermann | 2014-10-02 | 1 | -6/+3 |
| | |||||
* | storage: remove redundant "virtual" keywords | Max Kellermann | 2014-10-02 | 5 | -38/+34 |
| | | | | "override" implies "virtual". | ||||
* | input/file: convert to class | Max Kellermann | 2014-10-02 | 1 | -1/+2 |
| | |||||
* | storage/Interface: include cleanup | Max Kellermann | 2014-10-01 | 7 | -2/+11 |
| | |||||
* | Makefile.am: fix header file names | Max Kellermann | 2014-10-01 | 1 | -4/+7 |
| | | | | Found by "make distcheck". | ||||
* | lib/nfs/FileReader: postpone the nfs_close_async() call | Max Kellermann | 2014-10-01 | 4 | -6/+92 |
| | | | | | | If an async opertion is in progress, nfs_close_async() will make libnfs crash because the RPC callback will dereference an object that was freed by nfs_close_async(). | ||||
* | lib/nfs/Connection: fix memory leak when cancelling Open() | Max Kellermann | 2014-10-01 | 2 | -5/+23 |
| | | | | Close the newly allocated file handle passed to the callback. | ||||
* | lib/nfs/Connection: remove Mutex | Max Kellermann | 2014-10-01 | 2 | -18/+12 |
| | | | | | All locks are currenly held from only a single thread (the IOThread) and thus we don't need the Mutex. | ||||
* | lib/nfs/Connection: add method GetEventLoop() | Max Kellermann | 2014-10-01 | 2 | -1/+5 |
| | |||||
* | lib/nfs/Connection: remove obsolete flag postponed_destroy | Max Kellermann | 2014-10-01 | 2 | -18/+2 |
| | |||||
* | lib/nfs/Connection: remove deprecated move constructor workaround | Max Kellermann | 2014-10-01 | 1 | -16/+0 |
| | | | | | Not used anymore because NfsManager now uses boost::intrusive::set instead of std::map. | ||||
* | storage/nfs: make a few attributes "const" | Max Kellermann | 2014-10-01 | 1 | -3/+3 |
| | |||||
* | lib/nfs/Manager: use boost::intrusive::map | Max Kellermann | 2014-10-01 | 2 | -37/+78 |
| | | | | | Reduce overhead for storing the key twice, and more overhead while looking up the connection to remove it after a failure. | ||||
* | lib/nfs/Glue: add assertion | Max Kellermann | 2014-10-01 | 1 | -0/+4 |
| | |||||
* | lib/nfs/Glue: destruct the NfsManager in the I/O thread | Max Kellermann | 2014-10-01 | 3 | -5/+8 |
| | | | | | This allows eliminating the indirection code from the NfsConnection destructor. | ||||
* | lib/nfs/Glue: eliminate class NfsGlue | Max Kellermann | 2014-10-01 | 1 | -17/+1 |
| | | | | It's just a useless wrapper for class NfsManager. | ||||
* | lib/nfs/Cancellable: use boost::intrusive::list | Max Kellermann | 2014-10-01 | 3 | -40/+18 |
| | | | | | Reduce Remove() overhead because we don't have to walk the list to find an iterator by reference. | ||||
* | Tag: support "AlbumSort" | Max Kellermann | 2014-09-29 | 4 | -1/+6 |
| | | | | | The new tag is supported by all decoders that use the tag name table, and the ID3v2 tag "TSOA" maps to it. | ||||
* | storage/nfs: convert file name to UTF-8 | Max Kellermann | 2014-09-28 | 1 | -8/+30 |
| | | | | | Assume the configured filesystem character set is also used by the NFS server. | ||||
* | storage/nfs: use string::append() instead of string::insert() | Max Kellermann | 2014-09-28 | 1 | -3/+2 |
| | | | | | Swap the order of adding the URI and the slash, because appending is cheaper than inserting. | ||||
* | storage/nfs: move code to UriToNfsPath() | Max Kellermann | 2014-09-28 | 1 | -6/+13 |
| | |||||
* | fs/AllocatedPath: add method Steal() | Max Kellermann | 2014-09-28 | 1 | -0/+8 |
| | |||||
* | fs/AllocatedPath: API documentation grammar fixes | Max Kellermann | 2014-09-28 | 1 | -5/+5 |
| | |||||
* | Add MusicBrainz' Release Track Id tag | Wieland Hoffmann | 2014-09-27 | 7 | -1/+14 |
| | | | | | | | | | | The Release Track Id uniquely identifies a recording on a release - that is, even if a recording appears twice on a release (meaning that the combination of recording and release id are not enough to figure out which one it is), the release track id will allow differentiating the two. The tag names are taken from https://musicbrainz.org/doc/MusicBrainz_Picard/Tags/Mapping | ||||
* | pcm: --disable-dsd also disables the dsd2pcm library | Max Kellermann | 2014-09-26 | 3 | -3/+17 |
| |