feat(file-management): add symbolic link import action#771
Open
sebbeke wants to merge 2 commits into
Open
Conversation
added 2 commits
July 19, 2026 23:30
Add a configurable symbolic link file action for virtual and FUSE-backed storage workflows. Preserve existing symlink targets during import, avoid copying file contents, and keep source files under downloader control. Expose the new action in the frontend and add coverage for regular files, absolute links, relative links, and failed imports. Supports use cases discussed in Listenarr Discussion Listenarrs#334, including NZBDav, rclone, FUSE, and Real-Debrid mounted storage. Parts of this implementation were developed with the assistance of AI. All generated changes were reviewed, adjusted, and tested before committing.
Build the custom Listenarr image with GitHub Actions and publish it to GitHub Container Registry for linux/amd64.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a configurable Symbolic Link completed-file action for virtual, remote, and FUSE-backed storage workflows.
This allows Listenarr to import audiobooks without copying their contents locally when the source is exposed through systems such as NZBDav, rclone, Zurg, or other mounted storage providers.
This addresses the use case discussed in Discussion #334, where hardlinks are not possible because the source and destination are located on different filesystems.
Changes
Added
Symbolic Linkfile action to the backend.Changed
Motivation
The existing
Hardlink/Copyaction is not suitable for workflows where completed downloads are exposed through a separate filesystem, such as an rclone or WebDAV FUSE mount.In those environments:
The new action creates a symbolic link instead, avoiding the full copy while still allowing applications such as Audiobookshelf to access the audiobook through the mounted source.
Example:
Supported workflows
This implementation is intended to support workflows including:
The symbolic-link target must remain available for the imported audiobook to remain accessible. Applications consuming the library must also have access to the target under the same absolute path.
Testing
The implementation was tested for:
Notes
Related discussion: #334
Parts of this implementation were developed with AI assistance. All AI-assisted changes were reviewed and adjusted before committing, and the resulting implementation was tested against the scenarios described above.