diff --git a/src/libs/subsonic/impl/entrypoints/MediaRetrieval.cpp b/src/libs/subsonic/impl/entrypoints/MediaRetrieval.cpp index 3a0db100..d3343106 100644 --- a/src/libs/subsonic/impl/entrypoints/MediaRetrieval.cpp +++ b/src/libs/subsonic/impl/entrypoints/MediaRetrieval.cpp @@ -65,7 +65,8 @@ namespace API::Subsonic // Optional params std::optional maxBitRate{ getParameterAs(context.parameters, "maxBitRate") }; - std::optional format{ getParameterAs(context.parameters, "format") }; + const std::optional format{ getParameterAs(context.parameters, "format") }; + const std::optional timeOffset{ getParameterAs(context.parameters, "timeOffset") }; bool estimateContentLength{ getParameterAs(context.parameters, "estimateContentLength").value_or(false) }; StreamParameters parameters; @@ -75,7 +76,7 @@ namespace API::Subsonic auto transaction{ context.dbSession.createSharedTransaction() }; { - auto track{ Track::find(context.dbSession, id) }; + const auto track{ Track::find(context.dbSession, id) }; if (!track) throw RequestedDataNotFoundError{}; @@ -103,6 +104,7 @@ namespace API::Subsonic transcodeParameters.bitrate = bitRate * 1000; transcodeParameters.format = userTranscodeFormatToAvFormat(user->getSubsonicTranscodeFormat()); transcodeParameters.stripMetadata = false; // We want clients to use metadata (offline use, replay gain, etc.) + transcodeParameters.offset = std::chrono::seconds{ timeOffset ? *timeOffset : 0 }; parameters.transcodeParameters = std::move(transcodeParameters); }