Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SubtitleOperationUrlHook #1040

Merged
merged 2 commits into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions jellyfin-api/api/jellyfin-api.api
Original file line number Diff line number Diff line change
Expand Up @@ -1031,14 +1031,22 @@ public final class org/jellyfin/sdk/api/operations/SubtitleApi : org/jellyfin/sd
public final fun getSubtitleDeprecated (Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getSubtitleDeprecated (Lorg/jellyfin/sdk/model/api/request/GetSubtitleDeprecatedRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun getSubtitleDeprecated$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun getSubtitleDeprecatedUrl (Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;)Ljava/lang/String;
public static synthetic fun getSubtitleDeprecatedUrl$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;ILjava/lang/Object;)Ljava/lang/String;
public final fun getSubtitlePlaylist (Ljava/util/UUID;ILjava/lang/String;ILkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getSubtitlePlaylistUrl (Ljava/util/UUID;ILjava/lang/String;I)Ljava/lang/String;
public final fun getSubtitleUrl (Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;)Ljava/lang/String;
public static synthetic fun getSubtitleUrl$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Long;ILjava/lang/Object;)Ljava/lang/String;
public final fun getSubtitleWithTicks (Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getSubtitleWithTicks (Lorg/jellyfin/sdk/model/api/request/GetSubtitleWithTicksRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun getSubtitleWithTicks$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun getSubtitleWithTicksDeprecated (Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getSubtitleWithTicksDeprecated (Lorg/jellyfin/sdk/model/api/request/GetSubtitleWithTicksDeprecatedRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun getSubtitleWithTicksDeprecated$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun getSubtitleWithTicksDeprecatedUrl (Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ljava/lang/String;
public static synthetic fun getSubtitleWithTicksDeprecatedUrl$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ljava/lang/String;
public final fun getSubtitleWithTicksUrl (Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ljava/lang/String;
public static synthetic fun getSubtitleWithTicksUrl$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;IJLjava/lang/String;Ljava/lang/Long;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ljava/lang/String;
public final fun searchRemoteSubtitles (Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun searchRemoteSubtitles$default (Lorg/jellyfin/sdk/api/operations/SubtitleApi;Ljava/util/UUID;Ljava/lang/String;Ljava/lang/Boolean;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun uploadSubtitle (Ljava/util/UUID;Lorg/jellyfin/sdk/model/api/UploadSubtitleDto;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,44 @@ public class SubtitleApi(
startPositionTicks = request.startPositionTicks,
)

/**
* Gets subtitles in a specified format.
*
* @param routeItemId The (route) item id.
* @param routeMediaSourceId The (route) media source id.
* @param routeIndex The (route) subtitle stream index.
* @param routeFormat The (route) format of the returned subtitle.
* @param endPositionTicks Optional. The end position of the subtitle in ticks.
* @param copyTimestamps Optional. Whether to copy the timestamps.
* @param addVttTimeMap Optional. Whether to add a VTT time map.
* @param startPositionTicks The start position of the subtitle in ticks.
*/
public fun getSubtitleUrl(
routeItemId: UUID,
routeMediaSourceId: String,
routeIndex: Int,
routeFormat: String,
endPositionTicks: Long? = null,
copyTimestamps: Boolean? = false,
addVttTimeMap: Boolean? = false,
startPositionTicks: Long? = 0,
): String {
val pathParameters = buildMap<String, Any?>(4) {
put("routeItemId", routeItemId)
put("routeMediaSourceId", routeMediaSourceId)
put("routeIndex", routeIndex)
put("routeFormat", routeFormat)
}
val queryParameters = buildMap<String, Any?>(4) {
put("endPositionTicks", endPositionTicks)
put("copyTimestamps", copyTimestamps)
put("addVttTimeMap", addVttTimeMap)
put("startPositionTicks", startPositionTicks)
}
return api.createUrl("/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/Stream.{routeFormat}",
pathParameters, queryParameters)
}

/**
* Gets subtitles in a specified format.
*
Expand Down Expand Up @@ -259,6 +297,57 @@ public class SubtitleApi(
startPositionTicks = request.startPositionTicks,
)

/**
* Gets subtitles in a specified format.
*
* @param routeItemId The (route) item id.
* @param routeMediaSourceId The (route) media source id.
* @param routeIndex The (route) subtitle stream index.
* @param routeFormat The (route) format of the returned subtitle.
* @param itemId The item id.
* @param mediaSourceId The media source id.
* @param index The subtitle stream index.
* @param format The format of the returned subtitle.
* @param endPositionTicks Optional. The end position of the subtitle in ticks.
* @param copyTimestamps Optional. Whether to copy the timestamps.
* @param addVttTimeMap Optional. Whether to add a VTT time map.
* @param startPositionTicks The start position of the subtitle in ticks.
*/
@Deprecated("This member is deprecated and may be removed in the future")
public fun getSubtitleDeprecatedUrl(
routeItemId: UUID,
routeMediaSourceId: String,
routeIndex: Int,
routeFormat: String,
itemId: UUID? = null,
mediaSourceId: String? = null,
index: Int? = null,
format: String? = null,
endPositionTicks: Long? = null,
copyTimestamps: Boolean? = false,
addVttTimeMap: Boolean? = false,
startPositionTicks: Long? = 0,
): String {
val pathParameters = buildMap<String, Any?>(4) {
put("routeItemId", routeItemId)
put("routeMediaSourceId", routeMediaSourceId)
put("routeIndex", routeIndex)
put("routeFormat", routeFormat)
}
val queryParameters = buildMap<String, Any?>(8) {
put("itemId", itemId)
put("mediaSourceId", mediaSourceId)
put("index", index)
put("format", format)
put("endPositionTicks", endPositionTicks)
put("copyTimestamps", copyTimestamps)
put("addVttTimeMap", addVttTimeMap)
put("startPositionTicks", startPositionTicks)
}
return api.createUrl("/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/Stream.{routeFormat}",
pathParameters, queryParameters)
}

/**
* Gets an HLS subtitle playlist.
*
Expand Down Expand Up @@ -372,6 +461,44 @@ public class SubtitleApi(
addVttTimeMap = request.addVttTimeMap,
)

/**
* Gets subtitles in a specified format.
*
* @param routeItemId The (route) item id.
* @param routeMediaSourceId The (route) media source id.
* @param routeIndex The (route) subtitle stream index.
* @param routeStartPositionTicks The (route) start position of the subtitle in ticks.
* @param routeFormat The (route) format of the returned subtitle.
* @param endPositionTicks Optional. The end position of the subtitle in ticks.
* @param copyTimestamps Optional. Whether to copy the timestamps.
* @param addVttTimeMap Optional. Whether to add a VTT time map.
*/
public fun getSubtitleWithTicksUrl(
routeItemId: UUID,
routeMediaSourceId: String,
routeIndex: Int,
routeStartPositionTicks: Long,
routeFormat: String,
endPositionTicks: Long? = null,
copyTimestamps: Boolean? = false,
addVttTimeMap: Boolean? = false,
): String {
val pathParameters = buildMap<String, Any?>(5) {
put("routeItemId", routeItemId)
put("routeMediaSourceId", routeMediaSourceId)
put("routeIndex", routeIndex)
put("routeStartPositionTicks", routeStartPositionTicks)
put("routeFormat", routeFormat)
}
val queryParameters = buildMap<String, Any?>(3) {
put("endPositionTicks", endPositionTicks)
put("copyTimestamps", copyTimestamps)
put("addVttTimeMap", addVttTimeMap)
}
return api.createUrl("/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/{routeStartPositionTicks}/Stream.{routeFormat}",
pathParameters, queryParameters)
}

/**
* Gets subtitles in a specified format.
*
Expand Down Expand Up @@ -452,6 +579,60 @@ public class SubtitleApi(
addVttTimeMap = request.addVttTimeMap,
)

/**
* Gets subtitles in a specified format.
*
* @param routeItemId The (route) item id.
* @param routeMediaSourceId The (route) media source id.
* @param routeIndex The (route) subtitle stream index.
* @param routeStartPositionTicks The (route) start position of the subtitle in ticks.
* @param routeFormat The (route) format of the returned subtitle.
* @param itemId The item id.
* @param mediaSourceId The media source id.
* @param index The subtitle stream index.
* @param startPositionTicks The start position of the subtitle in ticks.
* @param format The format of the returned subtitle.
* @param endPositionTicks Optional. The end position of the subtitle in ticks.
* @param copyTimestamps Optional. Whether to copy the timestamps.
* @param addVttTimeMap Optional. Whether to add a VTT time map.
*/
@Deprecated("This member is deprecated and may be removed in the future")
public fun getSubtitleWithTicksDeprecatedUrl(
routeItemId: UUID,
routeMediaSourceId: String,
routeIndex: Int,
routeStartPositionTicks: Long,
routeFormat: String,
itemId: UUID? = null,
mediaSourceId: String? = null,
index: Int? = null,
startPositionTicks: Long? = null,
format: String? = null,
endPositionTicks: Long? = null,
copyTimestamps: Boolean? = false,
addVttTimeMap: Boolean? = false,
): String {
val pathParameters = buildMap<String, Any?>(5) {
put("routeItemId", routeItemId)
put("routeMediaSourceId", routeMediaSourceId)
put("routeIndex", routeIndex)
put("routeStartPositionTicks", routeStartPositionTicks)
put("routeFormat", routeFormat)
}
val queryParameters = buildMap<String, Any?>(8) {
put("itemId", itemId)
put("mediaSourceId", mediaSourceId)
put("index", index)
put("startPositionTicks", startPositionTicks)
put("format", format)
put("endPositionTicks", endPositionTicks)
put("copyTimestamps", copyTimestamps)
put("addVttTimeMap", addVttTimeMap)
}
return api.createUrl("/Videos/{routeItemId}/{routeMediaSourceId}/Subtitles/{routeIndex}/{routeStartPositionTicks}/Stream.{routeFormat}",
pathParameters, queryParameters)
}

/**
* Search remote subtitles.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jellyfin.openapi.hooks.api.BinaryOperationUrlHook
import org.jellyfin.openapi.hooks.api.ClientLogOperationUrlHook
import org.jellyfin.openapi.hooks.api.LargeOperationRequestModelHook
import org.jellyfin.openapi.hooks.api.PlayStateServiceNameHook
import org.jellyfin.openapi.hooks.api.SubtitleOperationUrlHook
import org.jellyfin.openapi.hooks.model.DotNetDescriptionHook
import org.jellyfin.openapi.hooks.model.ImageMapsHook
import org.jellyfin.openapi.hooks.model.LiveTVModelsHook
Expand All @@ -17,6 +18,7 @@ val hooksModule = module {

single { BinaryOperationUrlHook() } bind OperationUrlHook::class
single { ClientLogOperationUrlHook() } bind OperationUrlHook::class
single { SubtitleOperationUrlHook() } bind OperationUrlHook::class

single { LargeOperationRequestModelHook() } bind OperationRequestModelHook::class

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.jellyfin.openapi.hooks.api

import org.jellyfin.openapi.constants.Strings
import org.jellyfin.openapi.hooks.OperationUrlHook
import org.jellyfin.openapi.model.ApiService
import org.jellyfin.openapi.model.ApiServiceOperation

class SubtitleOperationUrlHook : OperationUrlHook {
override fun shouldOperationBuildUrlFun(api: ApiService, operation: ApiServiceOperation) =
api.name == "Subtitle${Strings.API_SERVICE_SUFFIX}" && operation.name.startsWith("getSubtitle")
}
Loading