Files
seanime/codegen/generated/handlers.json
2024-07-29 16:09:13 -04:00

6061 lines
186 KiB
JSON

[
{
"name": "HandleGetAnimeCollection",
"trimmedName": "GetAnimeCollection",
"comments": [
"HandleGetAnimeCollection",
"",
"\t@summary returns the user's AniList anime collection.",
"\t@desc Calling GET will return the cached anime collection.",
"\t@desc The manga collection is also refreshed in the background, and upon completion, a WebSocket event is sent.",
"\t@desc Calling POST will refetch both the anime and manga collections.",
"\t@returns anilist.AnimeCollection",
"\t@route /api/v1/anilist/collection [GET,POST]",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns the user's AniList anime collection.",
"descriptions": [
"Calling GET will return the cached anime collection.",
"The manga collection is also refreshed in the background, and upon completion, a WebSocket event is sent.",
"Calling POST will refetch both the anime and manga collections."
],
"endpoint": "/api/v1/anilist/collection",
"methods": [
"GET",
"POST"
],
"params": [],
"bodyFields": [],
"returns": "anilist.AnimeCollection",
"returnGoType": "anilist.AnimeCollection",
"returnTypescriptType": "AL_AnimeCollection"
}
},
{
"name": "HandleGetRawAnimeCollection",
"trimmedName": "GetRawAnimeCollection",
"comments": [
"HandleGetRawAnimeCollection",
"",
"\t@summary returns the user's AniList anime collection without filtering out custom lists.",
"\t@desc Calling GET will return the cached anime collection.",
"\t@returns anilist.AnimeCollection",
"\t@route /api/v1/anilist/collection/raw [GET,POST]",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns the user's AniList anime collection without filtering out custom lists.",
"descriptions": [
"Calling GET will return the cached anime collection."
],
"endpoint": "/api/v1/anilist/collection/raw",
"methods": [
"GET",
"POST"
],
"params": [],
"bodyFields": [],
"returns": "anilist.AnimeCollection",
"returnGoType": "anilist.AnimeCollection",
"returnTypescriptType": "AL_AnimeCollection"
}
},
{
"name": "HandleEditAnilistListEntry",
"trimmedName": "EditAnilistListEntry",
"comments": [
"HandleEditAnilistListEntry",
"",
"\t@summary updates the user's list entry on Anilist.",
"\t@desc This is used to edit an entry on AniList.",
"\t@desc The \"type\" field is used to determine if the entry is an anime or manga and refreshes the collection accordingly.",
"\t@desc The client should refetch collection-dependent queries after this mutation.",
"\t@returns true",
"\t@route /api/v1/anilist/list-entry [POST]",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "updates the user's list entry on Anilist.",
"descriptions": [
"This is used to edit an entry on AniList.",
"The \"type\" field is used to determine if the entry is an anime or manga and refreshes the collection accordingly.",
"The client should refetch collection-dependent queries after this mutation."
],
"endpoint": "/api/v1/anilist/list-entry",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Status",
"jsonName": "status",
"goType": "anilist.MediaListStatus",
"usedStructType": "anilist.MediaListStatus",
"typescriptType": "AL_MediaListStatus",
"required": false,
"descriptions": []
},
{
"name": "Score",
"jsonName": "score",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Progress",
"jsonName": "progress",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "StartDate",
"jsonName": "startedAt",
"goType": "anilist.FuzzyDateInput",
"usedStructType": "anilist.FuzzyDateInput",
"typescriptType": "AL_FuzzyDateInput",
"required": false,
"descriptions": []
},
{
"name": "EndDate",
"jsonName": "completedAt",
"goType": "anilist.FuzzyDateInput",
"usedStructType": "anilist.FuzzyDateInput",
"typescriptType": "AL_FuzzyDateInput",
"required": false,
"descriptions": []
},
{
"name": "Type",
"jsonName": "type",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "true",
"returnGoType": "true",
"returnTypescriptType": "true"
}
},
{
"name": "HandleGetAnilistAnimeDetails",
"trimmedName": "GetAnilistAnimeDetails",
"comments": [
"HandleGetAnilistAnimeDetails",
"",
"\t@summary returns more details about an AniList anime entry.",
"\t@desc This fetches more fields omitted from the base queries.",
"\t@param id - int - true - \"The AniList anime ID\"",
"\t@returns anilist.AnimeDetailsById_Media",
"\t@route /api/v1/anilist/media-details/{id} [GET]",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns more details about an AniList anime entry.",
"descriptions": [
"This fetches more fields omitted from the base queries."
],
"endpoint": "/api/v1/anilist/media-details/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The AniList anime ID"
]
}
],
"bodyFields": [],
"returns": "anilist.AnimeDetailsById_Media",
"returnGoType": "anilist.AnimeDetailsById_Media",
"returnTypescriptType": "AL_AnimeDetailsById_Media"
}
},
{
"name": "HandleGetAnilistStudioDetails",
"trimmedName": "GetAnilistStudioDetails",
"comments": [
"HandleGetAnilistStudioDetails",
"",
"\t@summary returns details about a studio.",
"\t@desc This fetches media produced by the studio.",
"\t@param id - int - true - \"The AniList studio ID\"",
"\t@returns anilist.StudioDetails",
"\t@route /api/v1/anilist/studio-details/{id} [GET]",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns details about a studio.",
"descriptions": [
"This fetches media produced by the studio."
],
"endpoint": "/api/v1/anilist/studio-details/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The AniList studio ID"
]
}
],
"bodyFields": [],
"returns": "anilist.StudioDetails",
"returnGoType": "anilist.StudioDetails",
"returnTypescriptType": "AL_StudioDetails"
}
},
{
"name": "HandleDeleteAnilistListEntry",
"trimmedName": "DeleteAnilistListEntry",
"comments": [
"HandleDeleteAnilistListEntry",
"",
"\t@summary deletes an entry from the user's AniList list.",
"\t@desc This is used to delete an entry on AniList.",
"\t@desc The \"type\" field is used to determine if the entry is an anime or manga and refreshes the collection accordingly.",
"\t@desc The client should refetch collection-dependent queries after this mutation.",
"\t@route /api/v1/anilist/list-entry [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "deletes an entry from the user's AniList list.",
"descriptions": [
"This is used to delete an entry on AniList.",
"The \"type\" field is used to determine if the entry is an anime or manga and refreshes the collection accordingly.",
"The client should refetch collection-dependent queries after this mutation."
],
"endpoint": "/api/v1/anilist/list-entry",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Type",
"jsonName": "type",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleAnilistListAnime",
"trimmedName": "AnilistListAnime",
"comments": [
"HandleAnilistListAnime",
"",
"\t@summary returns a list of anime based on the search parameters.",
"\t@desc This is used by the \"Discover\" and \"Advanced Search\".",
"\t@route /api/v1/anilist/list-anime [POST]",
"\t@returns anilist.ListAnime",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns a list of anime based on the search parameters.",
"descriptions": [
"This is used by the \"Discover\" and \"Advanced Search\"."
],
"endpoint": "/api/v1/anilist/list-anime",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Page",
"jsonName": "page",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Search",
"jsonName": "search",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "PerPage",
"jsonName": "perPage",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Sort",
"jsonName": "sort",
"goType": "[]anilist.MediaSort",
"usedStructType": "anilist.MediaSort",
"typescriptType": "Array\u003cAL_MediaSort\u003e",
"required": false,
"descriptions": []
},
{
"name": "Status",
"jsonName": "status",
"goType": "[]anilist.MediaStatus",
"usedStructType": "anilist.MediaStatus",
"typescriptType": "Array\u003cAL_MediaStatus\u003e",
"required": false,
"descriptions": []
},
{
"name": "Genres",
"jsonName": "genres",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": false,
"descriptions": []
},
{
"name": "AverageScoreGreater",
"jsonName": "averageScore_greater",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Season",
"jsonName": "season",
"goType": "anilist.MediaSeason",
"usedStructType": "anilist.MediaSeason",
"typescriptType": "AL_MediaSeason",
"required": false,
"descriptions": []
},
{
"name": "SeasonYear",
"jsonName": "seasonYear",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Format",
"jsonName": "format",
"goType": "anilist.MediaFormat",
"usedStructType": "anilist.MediaFormat",
"typescriptType": "AL_MediaFormat",
"required": false,
"descriptions": []
},
{
"name": "IsAdult",
"jsonName": "isAdult",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": false,
"descriptions": []
}
],
"returns": "anilist.ListAnime",
"returnGoType": "anilist.ListAnime",
"returnTypescriptType": "AL_ListAnime"
}
},
{
"name": "HandleAnilistListRecentAiringAnime",
"trimmedName": "AnilistListRecentAiringAnime",
"comments": [
"HandleAnilistListRecentAiringAnime",
"",
"\t@summary returns a list of recently aired anime.",
"\t@desc This is used by the \"Schedule\" page to display recently aired anime.",
"\t@route /api/v1/anilist/list-recent-anime [POST]",
"\t@returns anilist.ListRecentAnime",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns a list of recently aired anime.",
"descriptions": [
"This is used by the \"Schedule\" page to display recently aired anime."
],
"endpoint": "/api/v1/anilist/list-recent-anime",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Page",
"jsonName": "page",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Search",
"jsonName": "search",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "PerPage",
"jsonName": "perPage",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "AiringAtGreater",
"jsonName": "airingAt_greater",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "AiringAtLesser",
"jsonName": "airingAt_lesser",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
}
],
"returns": "anilist.ListRecentAnime",
"returnGoType": "anilist.ListRecentAnime",
"returnTypescriptType": "AL_ListRecentAnime"
}
},
{
"name": "HandleGetAniListStats",
"trimmedName": "GetAniListStats",
"comments": [
"HandleGetAniListStats",
"",
"\t@summary returns the anilist stats.",
"\t@desc This returns the AniList stats for the user.",
"\t@route /api/v1/anilist/stats [GET]",
"\t@returns anilist.Stats",
""
],
"filepath": "internal/handlers/anilist.go",
"filename": "anilist.go",
"api": {
"summary": "returns the anilist stats.",
"descriptions": [
"This returns the AniList stats for the user."
],
"endpoint": "/api/v1/anilist/stats",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "anilist.Stats",
"returnGoType": "anilist.Stats",
"returnTypescriptType": "AL_Stats"
}
},
{
"name": "HandleGetLibraryCollection",
"trimmedName": "GetLibraryCollection",
"comments": [
"HandleGetLibraryCollection",
"",
"\t@summary returns the main local anime collection.",
"\t@desc This creates a new LibraryCollection struct and returns it.",
"\t@desc This is used to get the main anime collection of the user.",
"\t@desc It uses the cached Anilist anime collection for the GET method.",
"\t@desc It refreshes the AniList anime collection if the POST method is used.",
"\t@route /api/v1/library/collection [GET,POST]",
"\t@returns anime.LibraryCollection",
""
],
"filepath": "internal/handlers/anime_collection.go",
"filename": "anime_collection.go",
"api": {
"summary": "returns the main local anime collection.",
"descriptions": [
"This creates a new LibraryCollection struct and returns it.",
"This is used to get the main anime collection of the user.",
"It uses the cached Anilist anime collection for the GET method.",
"It refreshes the AniList anime collection if the POST method is used."
],
"endpoint": "/api/v1/library/collection",
"methods": [
"GET",
"POST"
],
"params": [],
"bodyFields": [],
"returns": "anime.LibraryCollection",
"returnGoType": "anime.LibraryCollection",
"returnTypescriptType": "Anime_LibraryCollection"
}
},
{
"name": "HandleAddUnknownMedia",
"trimmedName": "AddUnknownMedia",
"comments": [
"HandleAddUnknownMedia",
"",
"\t@summary adds the given media to the user's AniList planning collections",
"\t@desc Since media not found in the user's AniList collection are not displayed in the library, this route is used to add them.",
"\t@desc The response is ignored in the frontend, the client should just refetch the entire library collection.",
"\t@route /api/v1/library/unknown-media [POST]",
"\t@returns anilist.AnimeCollection",
""
],
"filepath": "internal/handlers/anime_collection.go",
"filename": "anime_collection.go",
"api": {
"summary": "adds the given media to the user's AniList planning collections",
"descriptions": [
"Since media not found in the user's AniList collection are not displayed in the library, this route is used to add them.",
"The response is ignored in the frontend, the client should just refetch the entire library collection."
],
"endpoint": "/api/v1/library/unknown-media",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaIds",
"jsonName": "mediaIds",
"goType": "[]int",
"usedStructType": "",
"typescriptType": "Array\u003cnumber\u003e",
"required": true,
"descriptions": []
}
],
"returns": "anilist.AnimeCollection",
"returnGoType": "anilist.AnimeCollection",
"returnTypescriptType": "AL_AnimeCollection"
}
},
{
"name": "HandleGetAnimeEntry",
"trimmedName": "GetAnimeEntry",
"comments": [
"HandleGetAnimeEntry",
"",
"\t@summary return a media entry for the given AniList anime media id.",
"\t@desc This is used by the anime media entry pages to get all the data about the anime.",
"\t@desc This includes episodes and metadata (if any), AniList list data, download info...",
"\t@route /api/v1/library/anime-entry/{id} [GET]",
"\t@param id - int - true - \"AniList anime media ID\"",
"\t@returns anime.AnimeEntry",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "return a media entry for the given AniList anime media id.",
"descriptions": [
"This is used by the anime media entry pages to get all the data about the anime.",
"This includes episodes and metadata (if any), AniList list data, download info..."
],
"endpoint": "/api/v1/library/anime-entry/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"AniList anime media ID"
]
}
],
"bodyFields": [],
"returns": "anime.AnimeEntry",
"returnGoType": "anime.AnimeEntry",
"returnTypescriptType": "Anime_AnimeEntry"
}
},
{
"name": "HandleAnimeEntryBulkAction",
"trimmedName": "AnimeEntryBulkAction",
"comments": [
"HandleAnimeEntryBulkAction",
"",
"\t@summary perform given action on all the local files for the given media id.",
"\t@desc This is used to unmatch or toggle the lock status of all the local files for a specific media entry",
"\t@desc The response is not used in the frontend. The client should just refetch the entire media entry data.",
"\t@route /api/v1/library/anime-entry/bulk-action [PATCH]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "perform given action on all the local files for the given media id.",
"descriptions": [
"This is used to unmatch or toggle the lock status of all the local files for a specific media entry",
"The response is not used in the frontend. The client should just refetch the entire media entry data."
],
"endpoint": "/api/v1/library/anime-entry/bulk-action",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Action",
"jsonName": "action",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleOpenAnimeEntryInExplorer",
"trimmedName": "OpenAnimeEntryInExplorer",
"comments": [
"HandleOpenAnimeEntryInExplorer",
"",
"\t@summary opens the directory of a media entry in the file explorer.",
"\t@desc This finds a common directory for all media entry local files and opens it in the file explorer.",
"\t@desc Returns 'true' whether the operation was successful or not, errors are ignored.",
"\t@route /api/v1/library/anime-entry/open-in-explorer [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "opens the directory of a media entry in the file explorer.",
"descriptions": [
"This finds a common directory for all media entry local files and opens it in the file explorer.",
"Returns 'true' whether the operation was successful or not, errors are ignored."
],
"endpoint": "/api/v1/library/anime-entry/open-in-explorer",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleFetchAnimeEntrySuggestions",
"trimmedName": "FetchAnimeEntrySuggestions",
"comments": [
"HandleFetchAnimeEntrySuggestions",
"",
"\t@summary returns a list of media suggestions for files in the given directory.",
"\t@desc This is used by the \"Resolve unmatched media\" feature to suggest media entries for the local files in the given directory.",
"\t@desc If some matches files are found in the directory, it will ignore them and base the suggestions on the remaining files.",
"\t@route /api/v1/library/anime-entry/suggestions [POST]",
"\t@returns []anilist.BaseAnime",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "returns a list of media suggestions for files in the given directory.",
"descriptions": [
"This is used by the \"Resolve unmatched media\" feature to suggest media entries for the local files in the given directory.",
"If some matches files are found in the directory, it will ignore them and base the suggestions on the remaining files."
],
"endpoint": "/api/v1/library/anime-entry/suggestions",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Dir",
"jsonName": "dir",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "[]anilist.BaseAnime",
"returnGoType": "anilist.BaseAnime",
"returnTypescriptType": "Array\u003cAL_BaseAnime\u003e"
}
},
{
"name": "HandleAnimeEntryManualMatch",
"trimmedName": "AnimeEntryManualMatch",
"comments": [
"HandleAnimeEntryManualMatch",
"",
"\t@summary matches un-matched local files in the given directory to the given media.",
"\t@desc It is used by the \"Resolve unmatched media\" feature to manually match local files to a specific media entry.",
"\t@desc Matching involves the use of scanner.FileHydrator. It will also lock the files.",
"\t@desc The response is not used in the frontend. The client should just refetch the entire library collection.",
"\t@route /api/v1/library/anime-entry/manual-match [POST]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "matches un-matched local files in the given directory to the given media.",
"descriptions": [
"It is used by the \"Resolve unmatched media\" feature to manually match local files to a specific media entry.",
"Matching involves the use of scanner.FileHydrator. It will also lock the files.",
"The response is not used in the frontend. The client should just refetch the entire library collection."
],
"endpoint": "/api/v1/library/anime-entry/manual-match",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Dir",
"jsonName": "dir",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleGetMissingEpisodes",
"trimmedName": "GetMissingEpisodes",
"comments": [
"HandleGetMissingEpisodes",
"",
"\t@summary returns a list of episodes missing from the user's library collection",
"\t@desc It detects missing episodes by comparing the user's AniList collection 'next airing' data with the local files.",
"\t@desc This route can be called multiple times, as it does not bypass the cache.",
"\t@route /api/v1/library/missing-episodes [GET]",
"\t@returns anime.MissingEpisodes",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "returns a list of episodes missing from the user's library collection",
"descriptions": [
"It detects missing episodes by comparing the user's AniList collection 'next airing' data with the local files.",
"This route can be called multiple times, as it does not bypass the cache."
],
"endpoint": "/api/v1/library/missing-episodes",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "anime.MissingEpisodes",
"returnGoType": "anime.MissingEpisodes",
"returnTypescriptType": "Anime_MissingEpisodes"
}
},
{
"name": "HandleGetAnimeEntrySilenceStatus",
"trimmedName": "GetAnimeEntrySilenceStatus",
"comments": [
"HandleGetAnimeEntrySilenceStatus",
"",
"\t@summary returns the silence status of a media entry.",
"\t@param id - int - true - \"The ID of the media entry.\"",
"\t@route /api/v1/library/anime-entry/silence/{id} [GET]",
"\t@returns models.SilencedMediaEntry",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "returns the silence status of a media entry.",
"descriptions": [],
"endpoint": "/api/v1/library/anime-entry/silence/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The ID of the media entry."
]
}
],
"bodyFields": [],
"returns": "models.SilencedMediaEntry",
"returnGoType": "models.SilencedMediaEntry",
"returnTypescriptType": "Models_SilencedMediaEntry"
}
},
{
"name": "HandleToggleAnimeEntrySilenceStatus",
"trimmedName": "ToggleAnimeEntrySilenceStatus",
"comments": [
"HandleToggleAnimeEntrySilenceStatus",
"",
"\t@summary toggles the silence status of a media entry.",
"\t@desc The missing episodes should be re-fetched after this.",
"\t@route /api/v1/library/anime-entry/silence [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "toggles the silence status of a media entry.",
"descriptions": [
"The missing episodes should be re-fetched after this."
],
"endpoint": "/api/v1/library/anime-entry/silence",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleUpdateAnimeEntryProgress",
"trimmedName": "UpdateAnimeEntryProgress",
"comments": [
"HandleUpdateAnimeEntryProgress",
"",
"\t@summary update the progress of the given anime media entry.",
"\t@desc This is used to update the progress of the given anime media entry on AniList and MyAnimeList (if an account is linked).",
"\t@desc The response is not used in the frontend, the client should just refetch the entire media entry data.",
"\t@desc NOTE: This is currently only used by the 'Online streaming' feature since anime progress updates are handled by the Playback Manager.",
"\t@route /api/v1/library/anime-entry/update-progress [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/anime_entries.go",
"filename": "anime_entries.go",
"api": {
"summary": "update the progress of the given anime media entry.",
"descriptions": [
"This is used to update the progress of the given anime media entry on AniList and MyAnimeList (if an account is linked).",
"The response is not used in the frontend, the client should just refetch the entire media entry data.",
"NOTE: This is currently only used by the 'Online streaming' feature since anime progress updates are handled by the Playback Manager."
],
"endpoint": "/api/v1/library/anime-entry/update-progress",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "MalId",
"jsonName": "malId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "EpisodeNumber",
"jsonName": "episodeNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "TotalEpisodes",
"jsonName": "totalEpisodes",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleLogin",
"trimmedName": "Login",
"comments": [
"HandleLogin",
"",
"\t@summary logs in the user by saving the JWT token in the database.",
"\t@desc This is called when the JWT token is obtained from AniList after logging in with redirection on the client.",
"\t@desc It also fetches the Viewer data from AniList and saves it in the database.",
"\t@desc It creates a new handlers.Status and refreshes App modules.",
"\t@route /api/v1/auth/login [POST]",
"\t@returns handlers.Status",
""
],
"filepath": "internal/handlers/auth.go",
"filename": "auth.go",
"api": {
"summary": "logs in the user by saving the JWT token in the database.",
"descriptions": [
"This is called when the JWT token is obtained from AniList after logging in with redirection on the client.",
"It also fetches the Viewer data from AniList and saves it in the database.",
"It creates a new handlers.Status and refreshes App modules."
],
"endpoint": "/api/v1/auth/login",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Token",
"jsonName": "token",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "handlers.Status",
"returnGoType": "handlers.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleLogout",
"trimmedName": "Logout",
"comments": [
"HandleLogout",
"",
"\t@summary logs out the user by removing JWT token from the database.",
"\t@desc It removes JWT token and Viewer data from the database.",
"\t@desc It creates a new handlers.Status and refreshes App modules.",
"\t@route /api/v1/auth/logout [POST]",
"\t@returns handlers.Status",
""
],
"filepath": "internal/handlers/auth.go",
"filename": "auth.go",
"api": {
"summary": "logs out the user by removing JWT token from the database.",
"descriptions": [
"It removes JWT token and Viewer data from the database.",
"It creates a new handlers.Status and refreshes App modules."
],
"endpoint": "/api/v1/auth/logout",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "handlers.Status",
"returnGoType": "handlers.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleRunAutoDownloader",
"trimmedName": "RunAutoDownloader",
"comments": [
"HandleRunAutoDownloader",
"",
"\t@summary tells the AutoDownloader to check for new episodes if enabled.",
"\t@desc This will run the AutoDownloader if it is enabled.",
"\t@desc It does nothing if the AutoDownloader is disabled.",
"\t@route /api/v1/auto-downloader/run [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "tells the AutoDownloader to check for new episodes if enabled.",
"descriptions": [
"This will run the AutoDownloader if it is enabled.",
"It does nothing if the AutoDownloader is disabled."
],
"endpoint": "/api/v1/auto-downloader/run",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetAutoDownloaderRule",
"trimmedName": "GetAutoDownloaderRule",
"comments": [
"HandleGetAutoDownloaderRule",
"",
"\t@summary returns the rule with the given DB id.",
"\t@desc This is used to get a specific rule, useful for editing.",
"\t@route /api/v1/auto-downloader/rule/{id} [GET]",
"\t@param id - int - true - \"The DB id of the rule\"",
"\t@returns anime.AutoDownloaderRule",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "returns the rule with the given DB id.",
"descriptions": [
"This is used to get a specific rule, useful for editing."
],
"endpoint": "/api/v1/auto-downloader/rule/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The DB id of the rule"
]
}
],
"bodyFields": [],
"returns": "anime.AutoDownloaderRule",
"returnGoType": "anime.AutoDownloaderRule",
"returnTypescriptType": "Anime_AutoDownloaderRule"
}
},
{
"name": "HandleGetAutoDownloaderRules",
"trimmedName": "GetAutoDownloaderRules",
"comments": [
"HandleGetAutoDownloaderRules",
"",
"\t@summary returns all rules.",
"\t@desc This is used to list all rules. It returns an empty slice if there are no rules.",
"\t@route /api/v1/auto-downloader/rules [GET]",
"\t@returns []anime.AutoDownloaderRule",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "returns all rules.",
"descriptions": [
"This is used to list all rules. It returns an empty slice if there are no rules."
],
"endpoint": "/api/v1/auto-downloader/rules",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]anime.AutoDownloaderRule",
"returnGoType": "anime.AutoDownloaderRule",
"returnTypescriptType": "Array\u003cAnime_AutoDownloaderRule\u003e"
}
},
{
"name": "HandleCreateAutoDownloaderRule",
"trimmedName": "CreateAutoDownloaderRule",
"comments": [
"HandleCreateAutoDownloaderRule",
"",
"\t@summary creates a new rule.",
"\t@desc The body should contain the same fields as entities.AutoDownloaderRule.",
"\t@desc It returns the created rule.",
"\t@route /api/v1/auto-downloader/rule [POST]",
"\t@returns anime.AutoDownloaderRule",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "creates a new rule.",
"descriptions": [
"The body should contain the same fields as entities.AutoDownloaderRule.",
"It returns the created rule."
],
"endpoint": "/api/v1/auto-downloader/rule",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Enabled",
"jsonName": "enabled",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "ReleaseGroups",
"jsonName": "releaseGroups",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
},
{
"name": "Resolutions",
"jsonName": "resolutions",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
},
{
"name": "ComparisonTitle",
"jsonName": "comparisonTitle",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "TitleComparisonType",
"jsonName": "titleComparisonType",
"goType": "anime.AutoDownloaderRuleTitleComparisonType",
"usedStructType": "anime.AutoDownloaderRuleTitleComparisonType",
"typescriptType": "Anime_AutoDownloaderRuleTitleComparisonType",
"required": true,
"descriptions": []
},
{
"name": "EpisodeType",
"jsonName": "episodeType",
"goType": "anime.AutoDownloaderRuleEpisodeType",
"usedStructType": "anime.AutoDownloaderRuleEpisodeType",
"typescriptType": "Anime_AutoDownloaderRuleEpisodeType",
"required": true,
"descriptions": []
},
{
"name": "EpisodeNumbers",
"jsonName": "episodeNumbers",
"goType": "[]int",
"usedStructType": "",
"typescriptType": "Array\u003cnumber\u003e",
"required": false,
"descriptions": []
},
{
"name": "Destination",
"jsonName": "destination",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "anime.AutoDownloaderRule",
"returnGoType": "anime.AutoDownloaderRule",
"returnTypescriptType": "Anime_AutoDownloaderRule"
}
},
{
"name": "HandleUpdateAutoDownloaderRule",
"trimmedName": "UpdateAutoDownloaderRule",
"comments": [
"HandleUpdateAutoDownloaderRule",
"",
"\t@summary updates a rule.",
"\t@desc The body should contain the same fields as entities.AutoDownloaderRule.",
"\t@desc It returns the updated rule.",
"\t@route /api/v1/auto-downloader/rule [PATCH]",
"\t@returns anime.AutoDownloaderRule",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "updates a rule.",
"descriptions": [
"The body should contain the same fields as entities.AutoDownloaderRule.",
"It returns the updated rule."
],
"endpoint": "/api/v1/auto-downloader/rule",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Rule",
"jsonName": "rule",
"goType": "anime.AutoDownloaderRule",
"usedStructType": "anime.AutoDownloaderRule",
"typescriptType": "Anime_AutoDownloaderRule",
"required": false,
"descriptions": []
}
],
"returns": "anime.AutoDownloaderRule",
"returnGoType": "anime.AutoDownloaderRule",
"returnTypescriptType": "Anime_AutoDownloaderRule"
}
},
{
"name": "HandleDeleteAutoDownloaderRule",
"trimmedName": "DeleteAutoDownloaderRule",
"comments": [
"HandleDeleteAutoDownloaderRule",
"",
"\t@summary deletes a rule.",
"\t@desc It returns 'true' if the rule was deleted.",
"\t@route /api/v1/auto-downloader/rule/{id} [DELETE]",
"\t@param id - int - true - \"The DB id of the rule\"",
"\t@returns bool",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "deletes a rule.",
"descriptions": [
"It returns 'true' if the rule was deleted."
],
"endpoint": "/api/v1/auto-downloader/rule/{id}",
"methods": [
"DELETE"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The DB id of the rule"
]
}
],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetAutoDownloaderItems",
"trimmedName": "GetAutoDownloaderItems",
"comments": [
"HandleGetAutoDownloaderItems",
"",
"\t@summary returns all queued items.",
"\t@desc Queued items are episodes that are downloaded but not scanned or not yet downloaded.",
"\t@desc The AutoDownloader uses these items in order to not download the same episode twice.",
"\t@route /api/v1/auto-downloader/items [GET]",
"\t@returns []models.AutoDownloaderItem",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "returns all queued items.",
"descriptions": [
"Queued items are episodes that are downloaded but not scanned or not yet downloaded.",
"The AutoDownloader uses these items in order to not download the same episode twice."
],
"endpoint": "/api/v1/auto-downloader/items",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]models.AutoDownloaderItem",
"returnGoType": "models.AutoDownloaderItem",
"returnTypescriptType": "Array\u003cModels_AutoDownloaderItem\u003e"
}
},
{
"name": "HandleDeleteAutoDownloaderItem",
"trimmedName": "DeleteAutoDownloaderItem",
"comments": [
"HandleDeleteAutoDownloaderItem",
"",
"\t@summary delete a queued item.",
"\t@desc This is used to remove a queued item from the list.",
"\t@desc Returns 'true' if the item was deleted.",
"\t@route /api/v1/auto-downloader/item [DELETE]",
"\t@param id - int - true - \"The DB id of the item\"",
"\t@returns bool",
""
],
"filepath": "internal/handlers/auto_downloader.go",
"filename": "auto_downloader.go",
"api": {
"summary": "delete a queued item.",
"descriptions": [
"This is used to remove a queued item from the list.",
"Returns 'true' if the item was deleted."
],
"endpoint": "/api/v1/auto-downloader/item",
"methods": [
"DELETE"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The DB id of the item"
]
}
],
"bodyFields": [
{
"name": "ID",
"jsonName": "id",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleDirectorySelector",
"trimmedName": "DirectorySelector",
"comments": [
"HandleDirectorySelector",
"",
"\t@summary returns directory content based on the input path.",
"\t@desc This used by the directory selector component to get directory validation and suggestions.",
"\t@desc It returns subdirectories based on the input path.",
"\t@desc It returns 500 error if the directory does not exist (or cannot be accessed).",
"\t@route /api/v1/directory-selector [POST]",
"\t@returns handlers.DirectorySelectorResponse",
""
],
"filepath": "internal/handlers/directory_selector.go",
"filename": "directory_selector.go",
"api": {
"summary": "returns directory content based on the input path.",
"descriptions": [
"This used by the directory selector component to get directory validation and suggestions.",
"It returns subdirectories based on the input path.",
"It returns 500 error if the directory does not exist (or cannot be accessed)."
],
"endpoint": "/api/v1/directory-selector",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Input",
"jsonName": "input",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "handlers.DirectorySelectorResponse",
"returnGoType": "handlers.DirectorySelectorResponse",
"returnTypescriptType": "DirectorySelectorResponse"
}
},
{
"name": "HandleSetDiscordMangaActivity",
"trimmedName": "SetDiscordMangaActivity",
"comments": [
"HandleSetDiscordMangaActivity",
"",
"\t@summary sets manga activity for discord rich presence.",
"\t@route /api/v1/discord/presence/manga [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/discord.go",
"filename": "discord.go",
"api": {
"summary": "sets manga activity for discord rich presence.",
"descriptions": [],
"endpoint": "/api/v1/discord/presence/manga",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Title",
"jsonName": "title",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Image",
"jsonName": "image",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Chapter",
"jsonName": "chapter",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleCancelDiscordActivity",
"trimmedName": "CancelDiscordActivity",
"comments": [
"HandleCancelDiscordActivity",
"",
"\t@summary cancels the current discord rich presence activity.",
"\t@route /api/v1/discord/presence/cancel [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/discord.go",
"filename": "discord.go",
"api": {
"summary": "cancels the current discord rich presence activity.",
"descriptions": [],
"endpoint": "/api/v1/discord/presence/cancel",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetDocs",
"trimmedName": "GetDocs",
"comments": [
"HandleGetDocs",
"",
"\t@summary returns the API documentation",
"\t@route /api/v1/internal/docs [GET]",
"\t@returns docs.Docs",
""
],
"filepath": "internal/handlers/docs.go",
"filename": "docs.go",
"api": {
"summary": "returns the API documentation",
"descriptions": [],
"endpoint": "/api/v1/internal/docs",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "docs.Docs",
"returnGoType": "docs.Docs",
"returnTypescriptType": "INTERNAL_Docs"
}
},
{
"name": "HandleDownloadTorrentFile",
"trimmedName": "DownloadTorrentFile",
"comments": [
"HandleDownloadTorrentFile",
"",
"\t@summary downloads torrent files to the destination folder",
"\t@route /api/v1/download-torrent-file [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/download.go",
"filename": "download.go",
"api": {
"summary": "downloads torrent files to the destination folder",
"descriptions": [],
"endpoint": "/api/v1/download-torrent-file",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "DownloadUrls",
"jsonName": "download_urls",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
},
{
"name": "Destination",
"jsonName": "destination",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Media",
"jsonName": "media",
"goType": "anilist.BaseAnime",
"usedStructType": "anilist.BaseAnime",
"typescriptType": "AL_BaseAnime",
"required": false,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleDownloadRelease",
"trimmedName": "DownloadRelease",
"comments": [
"HandleDownloadRelease",
"",
"\t@summary downloads selected release asset to the destination folder.",
"\t@desc Downloads the selected release asset to the destination folder and extracts it if possible.",
"\t@desc If the extraction fails, the error message will be returned in the successful response.",
"\t@desc The successful response will contain the destination path of the extracted files.",
"\t@desc It only returns an error if the download fails.",
"\t@route /api/v1/download-release [POST]",
"\t@returns handlers.DownloadReleaseResponse",
""
],
"filepath": "internal/handlers/download.go",
"filename": "download.go",
"api": {
"summary": "downloads selected release asset to the destination folder.",
"descriptions": [
"Downloads the selected release asset to the destination folder and extracts it if possible.",
"If the extraction fails, the error message will be returned in the successful response.",
"The successful response will contain the destination path of the extracted files.",
"It only returns an error if the download fails."
],
"endpoint": "/api/v1/download-release",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "DownloadUrl",
"jsonName": "download_url",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Destination",
"jsonName": "destination",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "handlers.DownloadReleaseResponse",
"returnGoType": "handlers.DownloadReleaseResponse",
"returnTypescriptType": "DownloadReleaseResponse"
}
},
{
"name": "HandleOpenInExplorer",
"trimmedName": "OpenInExplorer",
"comments": [
"HandleOpenInExplorer",
"",
"\t@summary opens the given directory in the file explorer.",
"\t@desc It returns 'true' whether the operation was successful or not.",
"\t@route /api/v1/open-in-explorer [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/explorer.go",
"filename": "explorer.go",
"api": {
"summary": "opens the given directory in the file explorer.",
"descriptions": [
"It returns 'true' whether the operation was successful or not."
],
"endpoint": "/api/v1/open-in-explorer",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Path",
"jsonName": "path",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleFetchExternalExtensionData",
"trimmedName": "FetchExternalExtensionData",
"comments": [
"HandleFetchExternalExtensionData",
"",
"\t@summary returns the extension data from the given manifest uri.",
"\t@route /api/v1/extensions/external/fetch [POST]",
"\t@returns extension.Extension",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns the extension data from the given manifest uri.",
"descriptions": [],
"endpoint": "/api/v1/extensions/external/fetch",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "ManifestURI",
"jsonName": "manifestUri",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "extension.Extension",
"returnGoType": "extension.Extension",
"returnTypescriptType": "Extension_Extension"
}
},
{
"name": "HandleInstallExternalExtension",
"trimmedName": "InstallExternalExtension",
"comments": [
"HandleInstallExternalExtension",
"",
"\t@summary installs the extension from the given manifest uri.",
"\t@route /api/v1/extensions/external/install [POST]",
"\t@returns extension_repo.ExtensionInstallResponse",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "installs the extension from the given manifest uri.",
"descriptions": [],
"endpoint": "/api/v1/extensions/external/install",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "ManifestURI",
"jsonName": "manifestUri",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "extension_repo.ExtensionInstallResponse",
"returnGoType": "extension_repo.ExtensionInstallResponse",
"returnTypescriptType": "ExtensionRepo_ExtensionInstallResponse"
}
},
{
"name": "HandleUninstallExternalExtension",
"trimmedName": "UninstallExternalExtension",
"comments": [
"HandleUninstallExternalExtension",
"",
"\t@summary uninstalls the extension with the given ID.",
"\t@route /api/v1/extensions/external/uninstall [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "uninstalls the extension with the given ID.",
"descriptions": [],
"endpoint": "/api/v1/extensions/external/uninstall",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "ID",
"jsonName": "id",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleReloadExternalExtensions",
"trimmedName": "ReloadExternalExtensions",
"comments": [
"HandleReloadExternalExtensions",
"",
"\t@summary reloads the external extensions.",
"\t@route /api/v1/extensions/external/reload [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "reloads the external extensions.",
"descriptions": [],
"endpoint": "/api/v1/extensions/external/reload",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleListExtensionData",
"trimmedName": "ListExtensionData",
"comments": [
"HandleListExtensionData",
"",
"\t@summary returns the loaded extensions",
"\t@route /api/v1/extensions/list [GET]",
"\t@returns []extension.Extension",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns the loaded extensions",
"descriptions": [],
"endpoint": "/api/v1/extensions/list",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]extension.Extension",
"returnGoType": "extension.Extension",
"returnTypescriptType": "Array\u003cExtension_Extension\u003e"
}
},
{
"name": "HandleGetAllExtensions",
"trimmedName": "GetAllExtensions",
"comments": [
"HandleGetAllExtensions",
"",
"\t@summary returns all loaded and invalid extensions.",
"\t@route /api/v1/extensions/all [POST]",
"\t@returns extension_repo.AllExtensions",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns all loaded and invalid extensions.",
"descriptions": [],
"endpoint": "/api/v1/extensions/all",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "WithUpdates",
"jsonName": "withUpdates",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "extension_repo.AllExtensions",
"returnGoType": "extension_repo.AllExtensions",
"returnTypescriptType": "ExtensionRepo_AllExtensions"
}
},
{
"name": "HandleListMangaProviderExtensions",
"trimmedName": "ListMangaProviderExtensions",
"comments": [
"HandleListMangaProviderExtensions",
"",
"\t@summary returns the installed manga providers.",
"\t@route /api/v1/extensions/list/manga-provider [GET]",
"\t@returns []extension_repo.MangaProviderExtensionItem",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns the installed manga providers.",
"descriptions": [],
"endpoint": "/api/v1/extensions/list/manga-provider",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]extension_repo.MangaProviderExtensionItem",
"returnGoType": "extension_repo.MangaProviderExtensionItem",
"returnTypescriptType": "Array\u003cExtensionRepo_MangaProviderExtensionItem\u003e"
}
},
{
"name": "HandleListOnlinestreamProviderExtensions",
"trimmedName": "ListOnlinestreamProviderExtensions",
"comments": [
"HandleListOnlinestreamProviderExtensions",
"",
"\t@summary returns the installed online streaming providers.",
"\t@route /api/v1/extensions/list/onlinestream-provider [GET]",
"\t@returns []extension_repo.OnlinestreamProviderExtensionItem",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns the installed online streaming providers.",
"descriptions": [],
"endpoint": "/api/v1/extensions/list/onlinestream-provider",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]extension_repo.OnlinestreamProviderExtensionItem",
"returnGoType": "extension_repo.OnlinestreamProviderExtensionItem",
"returnTypescriptType": "Array\u003cExtensionRepo_OnlinestreamProviderExtensionItem\u003e"
}
},
{
"name": "HandleListAnimeTorrentProviderExtensions",
"trimmedName": "ListAnimeTorrentProviderExtensions",
"comments": [
"HandleListAnimeTorrentProviderExtensions",
"",
"\t@summary returns the installed torrent providers.",
"\t@route /api/v1/extensions/list/anime-torrent-provider [GET]",
"\t@returns []extension_repo.AnimeTorrentProviderExtensionItem",
""
],
"filepath": "internal/handlers/extensions.go",
"filename": "extensions.go",
"api": {
"summary": "returns the installed torrent providers.",
"descriptions": [],
"endpoint": "/api/v1/extensions/list/anime-torrent-provider",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]extension_repo.AnimeTorrentProviderExtensionItem",
"returnGoType": "extension_repo.AnimeTorrentProviderExtensionItem",
"returnTypescriptType": "Array\u003cExtensionRepo_AnimeTorrentProviderExtensionItem\u003e"
}
},
{
"name": "HandleGetFileCacheTotalSize",
"trimmedName": "GetFileCacheTotalSize",
"comments": [
"HandleGetFileCacheTotalSize",
"",
"\t@summary returns the total size of cache files.",
"\t@desc The total size of the cache files is returned in human-readable format.",
"\t@route /api/v1/filecache/total-size [GET]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/filecache.go",
"filename": "filecache.go",
"api": {
"summary": "returns the total size of cache files.",
"descriptions": [
"The total size of the cache files is returned in human-readable format."
],
"endpoint": "/api/v1/filecache/total-size",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleRemoveFileCacheBucket",
"trimmedName": "RemoveFileCacheBucket",
"comments": [
"HandleRemoveFileCacheBucket",
"",
"\t@summary deletes all buckets with the given prefix.",
"\t@desc The bucket value is the prefix of the cache files that should be deleted.",
"\t@desc Returns 'true' if the operation was successful.",
"\t@route /api/v1/filecache/bucket [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/filecache.go",
"filename": "filecache.go",
"api": {
"summary": "deletes all buckets with the given prefix.",
"descriptions": [
"The bucket value is the prefix of the cache files that should be deleted.",
"Returns 'true' if the operation was successful."
],
"endpoint": "/api/v1/filecache/bucket",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "Bucket",
"jsonName": "bucket",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetFileCacheMediastreamVideoFilesTotalSize",
"trimmedName": "GetFileCacheMediastreamVideoFilesTotalSize",
"comments": [
"HandleGetFileCacheMediastreamVideoFilesTotalSize",
"",
"\t@summary returns the total size of cached video file data.",
"\t@desc The total size of the cache video file data is returned in human-readable format.",
"\t@route /api/v1/filecache/mediastream/videofiles/total-size [GET]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/filecache.go",
"filename": "filecache.go",
"api": {
"summary": "returns the total size of cached video file data.",
"descriptions": [
"The total size of the cache video file data is returned in human-readable format."
],
"endpoint": "/api/v1/filecache/mediastream/videofiles/total-size",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleClearFileCacheMediastreamVideoFiles",
"trimmedName": "ClearFileCacheMediastreamVideoFiles",
"comments": [
"HandleClearFileCacheMediastreamVideoFiles",
"",
"\t@summary deletes the contents of the mediastream video file cache directory.",
"\t@desc Returns 'true' if the operation was successful.",
"\t@route /api/v1/filecache/mediastream/videofiles [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/filecache.go",
"filename": "filecache.go",
"api": {
"summary": "deletes the contents of the mediastream video file cache directory.",
"descriptions": [
"Returns 'true' if the operation was successful."
],
"endpoint": "/api/v1/filecache/mediastream/videofiles",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetLocalFiles",
"trimmedName": "GetLocalFiles",
"comments": [
"HandleGetLocalFiles",
"",
"\t@summary returns all local files.",
"\t@desc Reminder that local files are scanned from the library path.",
"\t@route /api/v1/library/local-files [GET]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/localfiles.go",
"filename": "localfiles.go",
"api": {
"summary": "returns all local files.",
"descriptions": [
"Reminder that local files are scanned from the library path."
],
"endpoint": "/api/v1/library/local-files",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleLocalFileBulkAction",
"trimmedName": "LocalFileBulkAction",
"comments": [
"HandleLocalFileBulkAction",
"",
"\t@summary performs an action on all local files.",
"\t@desc This will perform the given action on all local files.",
"\t@desc The response is ignored, the client should refetch the entire library collection and media entry.",
"\t@route /api/v1/library/local-files [POST]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/localfiles.go",
"filename": "localfiles.go",
"api": {
"summary": "performs an action on all local files.",
"descriptions": [
"This will perform the given action on all local files.",
"The response is ignored, the client should refetch the entire library collection and media entry."
],
"endpoint": "/api/v1/library/local-files",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Action",
"jsonName": "action",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleUpdateLocalFileData",
"trimmedName": "UpdateLocalFileData",
"comments": [
"HandleUpdateLocalFileData",
"",
"\t@summary updates the local file with the given path.",
"\t@desc This will update the local file with the given path.",
"\t@desc The response is ignored, the client should refetch the entire library collection and media entry.",
"\t@route /api/v1/library/local-file [PATCH]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/localfiles.go",
"filename": "localfiles.go",
"api": {
"summary": "updates the local file with the given path.",
"descriptions": [
"This will update the local file with the given path.",
"The response is ignored, the client should refetch the entire library collection and media entry."
],
"endpoint": "/api/v1/library/local-file",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Path",
"jsonName": "path",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Metadata",
"jsonName": "metadata",
"goType": "anime.LocalFileMetadata",
"usedStructType": "anime.LocalFileMetadata",
"typescriptType": "Anime_LocalFileMetadata",
"required": false,
"descriptions": []
},
{
"name": "Locked",
"jsonName": "locked",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "Ignored",
"jsonName": "ignored",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleDeleteLocalFiles",
"trimmedName": "DeleteLocalFiles",
"comments": [
"HandleDeleteLocalFiles",
"",
"\t@summary deletes the local file with the given paths.",
"\t@desc The response is ignored, the client should refetch the entire library collection and media entry.",
"\t@route /api/v1/library/local-files [DELETE]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/localfiles.go",
"filename": "localfiles.go",
"api": {
"summary": "deletes the local file with the given paths.",
"descriptions": [
"The response is ignored, the client should refetch the entire library collection and media entry."
],
"endpoint": "/api/v1/library/local-files",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "Paths",
"jsonName": "paths",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleRemoveEmptyDirectories",
"trimmedName": "RemoveEmptyDirectories",
"comments": [
"HandleRemoveEmptyDirectories",
"",
"\t@summary deletes the empty directories from the library path.",
"\t@route /api/v1/library/empty-directories [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/localfiles.go",
"filename": "localfiles.go",
"api": {
"summary": "deletes the empty directories from the library path.",
"descriptions": [],
"endpoint": "/api/v1/library/empty-directories",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleMALAuth",
"trimmedName": "MALAuth",
"comments": [
"HandleMALAuth",
"",
"\t@summary fetches the access and refresh tokens for the given code.",
"\t@desc This is used to authenticate the user with MyAnimeList.",
"\t@desc It will save the info in the database, effectively logging the user in.",
"\t@desc The client should re-fetch the server status after this.",
"\t@route /api/v1/mal/auth [POST]",
"\t@returns handlers.MalAuthResponse",
""
],
"filepath": "internal/handlers/mal.go",
"filename": "mal.go",
"api": {
"summary": "fetches the access and refresh tokens for the given code.",
"descriptions": [
"This is used to authenticate the user with MyAnimeList.",
"It will save the info in the database, effectively logging the user in.",
"The client should re-fetch the server status after this."
],
"endpoint": "/api/v1/mal/auth",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Code",
"jsonName": "code",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "State",
"jsonName": "state",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "CodeVerifier",
"jsonName": "code_verifier",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "handlers.MalAuthResponse",
"returnGoType": "handlers.MalAuthResponse",
"returnTypescriptType": "MalAuthResponse"
}
},
{
"name": "HandleEditMALListEntryProgress",
"trimmedName": "EditMALListEntryProgress",
"comments": [
"HandleEditMALListEntryProgress",
"",
"\t@summary updates the progress of a MAL list entry.",
"\t@route /api/v1/mal/list-entry/progress [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/mal.go",
"filename": "mal.go",
"api": {
"summary": "updates the progress of a MAL list entry.",
"descriptions": [],
"endpoint": "/api/v1/mal/list-entry/progress",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Progress",
"jsonName": "progress",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleMALLogout",
"trimmedName": "MALLogout",
"comments": [
"HandleMALLogout",
"",
"\t@summary logs the user out of MyAnimeList.",
"\t@desc This will delete the MAL info from the database, effectively logging the user out.",
"\t@desc The client should re-fetch the server status after this.",
"\t@route /api/v1/mal/logout [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/mal.go",
"filename": "mal.go",
"api": {
"summary": "logs the user out of MyAnimeList.",
"descriptions": [
"This will delete the MAL info from the database, effectively logging the user out.",
"The client should re-fetch the server status after this."
],
"endpoint": "/api/v1/mal/logout",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetAnilistMangaCollection",
"trimmedName": "GetAnilistMangaCollection",
"comments": [
"HandleGetAnilistMangaCollection",
"",
"\t@summary returns the user's AniList manga collection.",
"\t@route /api/v1/manga/anilist/collection [GET]",
"\t@returns anilist.MangaCollection",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns the user's AniList manga collection.",
"descriptions": [],
"endpoint": "/api/v1/manga/anilist/collection",
"methods": [
"GET"
],
"params": [],
"bodyFields": [
{
"name": "BypassCache",
"jsonName": "bypassCache",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "anilist.MangaCollection",
"returnGoType": "anilist.MangaCollection",
"returnTypescriptType": "AL_MangaCollection"
}
},
{
"name": "HandleGetRawAnilistMangaCollection",
"trimmedName": "GetRawAnilistMangaCollection",
"comments": [
"HandleGetRawAnilistMangaCollection",
"",
"\t@summary returns the user's AniList manga collection.",
"\t@route /api/v1/manga/anilist/collection/raw [GET,POST]",
"\t@returns anilist.MangaCollection",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns the user's AniList manga collection.",
"descriptions": [],
"endpoint": "/api/v1/manga/anilist/collection/raw",
"methods": [
"GET",
"POST"
],
"params": [],
"bodyFields": [],
"returns": "anilist.MangaCollection",
"returnGoType": "anilist.MangaCollection",
"returnTypescriptType": "AL_MangaCollection"
}
},
{
"name": "HandleGetMangaCollection",
"trimmedName": "GetMangaCollection",
"comments": [
"HandleGetMangaCollection",
"",
"\t@summary returns the user's main manga collection.",
"\t@desc This is an object that contains all the user's manga entries in a structured format.",
"\t@route /api/v1/manga/collection [GET]",
"\t@returns manga.Collection",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns the user's main manga collection.",
"descriptions": [
"This is an object that contains all the user's manga entries in a structured format."
],
"endpoint": "/api/v1/manga/collection",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "manga.Collection",
"returnGoType": "manga.Collection",
"returnTypescriptType": "Manga_Collection"
}
},
{
"name": "HandleGetMangaEntry",
"trimmedName": "GetMangaEntry",
"comments": [
"HandleGetMangaEntry",
"",
"\t@summary returns a manga entry for the given AniList manga id.",
"\t@desc This is used by the manga media entry pages to get all the data about the anime. It includes metadata and AniList list data.",
"\t@route /api/v1/manga/entry/{id} [GET]",
"\t@param id - int - true - \"AniList manga media ID\"",
"\t@returns manga.Entry",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns a manga entry for the given AniList manga id.",
"descriptions": [
"This is used by the manga media entry pages to get all the data about the anime. It includes metadata and AniList list data."
],
"endpoint": "/api/v1/manga/entry/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"AniList manga media ID"
]
}
],
"bodyFields": [],
"returns": "manga.Entry",
"returnGoType": "manga.Entry",
"returnTypescriptType": "Manga_Entry"
}
},
{
"name": "HandleGetMangaEntryDetails",
"trimmedName": "GetMangaEntryDetails",
"comments": [
"HandleGetMangaEntryDetails",
"",
"\t@summary returns more details about an AniList manga entry.",
"\t@desc This fetches more fields omitted from the base queries.",
"\t@route /api/v1/manga/entry/{id}/details [GET]",
"\t@param id - int - true - \"AniList manga media ID\"",
"\t@returns anilist.MangaDetailsById_Media",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns more details about an AniList manga entry.",
"descriptions": [
"This fetches more fields omitted from the base queries."
],
"endpoint": "/api/v1/manga/entry/{id}/details",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"AniList manga media ID"
]
}
],
"bodyFields": [],
"returns": "anilist.MangaDetailsById_Media",
"returnGoType": "anilist.MangaDetailsById_Media",
"returnTypescriptType": "AL_MangaDetailsById_Media"
}
},
{
"name": "HandleEmptyMangaEntryCache",
"trimmedName": "EmptyMangaEntryCache",
"comments": [
"HandleEmptyMangaEntryCache",
"",
"\t@summary empties the cache for a manga entry.",
"\t@desc This will empty the cache for a manga entry (chapter lists and pages), allowing the client to fetch fresh data.",
"\t@desc HandleGetMangaEntryChapters should be called after this to fetch the new chapter list.",
"\t@desc Returns 'true' if the operation was successful.",
"\t@route /api/v1/manga/entry/cache [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "empties the cache for a manga entry.",
"descriptions": [
"This will empty the cache for a manga entry (chapter lists and pages), allowing the client to fetch fresh data.",
"HandleGetMangaEntryChapters should be called after this to fetch the new chapter list.",
"Returns 'true' if the operation was successful."
],
"endpoint": "/api/v1/manga/entry/cache",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetMangaEntryChapters",
"trimmedName": "GetMangaEntryChapters",
"comments": [
"HandleGetMangaEntryChapters",
"",
"\t@summary returns the chapters for a manga entry based on the provider.",
"\t@route /api/v1/manga/chapters [POST]",
"\t@returns manga.ChapterContainer",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns the chapters for a manga entry based on the provider.",
"descriptions": [],
"endpoint": "/api/v1/manga/chapters",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "manga.ChapterContainer",
"returnGoType": "manga.ChapterContainer",
"returnTypescriptType": "Manga_ChapterContainer"
}
},
{
"name": "HandleGetMangaEntryPages",
"trimmedName": "GetMangaEntryPages",
"comments": [
"HandleGetMangaEntryPages",
"",
"\t@summary returns the pages for a manga entry based on the provider and chapter id.",
"\t@desc This will return the pages for a manga chapter.",
"\t@desc If the app is offline and the chapter is not downloaded, it will return an error.",
"\t@desc If the app is online and the chapter is not downloaded, it will return the pages from the provider.",
"\t@desc If the chapter is downloaded, it will return the appropriate struct.",
"\t@desc If 'double page' is requested, it will fetch image sizes and include the dimensions in the response.",
"\t@route /api/v1/manga/pages [POST]",
"\t@returns manga.PageContainer",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns the pages for a manga entry based on the provider and chapter id.",
"descriptions": [
"This will return the pages for a manga chapter.",
"If the app is offline and the chapter is not downloaded, it will return an error.",
"If the app is online and the chapter is not downloaded, it will return the pages from the provider.",
"If the chapter is downloaded, it will return the appropriate struct.",
"If 'double page' is requested, it will fetch image sizes and include the dimensions in the response."
],
"endpoint": "/api/v1/manga/pages",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "ChapterId",
"jsonName": "chapterId",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "DoublePage",
"jsonName": "doublePage",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "manga.PageContainer",
"returnGoType": "manga.PageContainer",
"returnTypescriptType": "Manga_PageContainer"
}
},
{
"name": "HandleAnilistListManga",
"trimmedName": "AnilistListManga",
"comments": [
"HandleAnilistListManga",
"",
"\t@summary returns a list of manga based on the search parameters.",
"\t@desc This is used by \"Advanced Search\" and search function.",
"\t@route /api/v1/manga/anilist/list [POST]",
"\t@returns anilist.ListManga",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "returns a list of manga based on the search parameters.",
"descriptions": [
"This is used by \"Advanced Search\" and search function."
],
"endpoint": "/api/v1/manga/anilist/list",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Page",
"jsonName": "page",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Search",
"jsonName": "search",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "PerPage",
"jsonName": "perPage",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Sort",
"jsonName": "sort",
"goType": "[]anilist.MediaSort",
"usedStructType": "anilist.MediaSort",
"typescriptType": "Array\u003cAL_MediaSort\u003e",
"required": false,
"descriptions": []
},
{
"name": "Status",
"jsonName": "status",
"goType": "[]anilist.MediaStatus",
"usedStructType": "anilist.MediaStatus",
"typescriptType": "Array\u003cAL_MediaStatus\u003e",
"required": false,
"descriptions": []
},
{
"name": "Genres",
"jsonName": "genres",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": false,
"descriptions": []
},
{
"name": "AverageScoreGreater",
"jsonName": "averageScore_greater",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Year",
"jsonName": "year",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "IsAdult",
"jsonName": "isAdult",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": false,
"descriptions": []
},
{
"name": "Format",
"jsonName": "format",
"goType": "anilist.MediaFormat",
"usedStructType": "anilist.MediaFormat",
"typescriptType": "AL_MediaFormat",
"required": false,
"descriptions": []
}
],
"returns": "anilist.ListManga",
"returnGoType": "anilist.ListManga",
"returnTypescriptType": "AL_ListManga"
}
},
{
"name": "HandleUpdateMangaProgress",
"trimmedName": "UpdateMangaProgress",
"comments": [
"HandleUpdateMangaProgress",
"",
"\t@summary updates the progress of a manga entry.",
"\t@desc Note: MyAnimeList is not supported",
"\t@route /api/v1/manga/update-progress [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga.go",
"filename": "manga.go",
"api": {
"summary": "updates the progress of a manga entry.",
"descriptions": [
"Note: MyAnimeList is not supported"
],
"endpoint": "/api/v1/manga/update-progress",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "MalId",
"jsonName": "malId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "ChapterNumber",
"jsonName": "chapterNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "TotalChapters",
"jsonName": "totalChapters",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleDownloadMangaChapters",
"trimmedName": "DownloadMangaChapters",
"comments": [
"HandleDownloadMangaChapters",
"",
"\t@summary adds chapters to the download queue.",
"\t@route /api/v1/manga/download-chapters [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "adds chapters to the download queue.",
"descriptions": [],
"endpoint": "/api/v1/manga/download-chapters",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "ChapterIds",
"jsonName": "chapterIds",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
},
{
"name": "StartNow",
"jsonName": "startNow",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetMangaDownloadData",
"trimmedName": "GetMangaDownloadData",
"comments": [
"HandleGetMangaDownloadData",
"",
"\t@summary returns the download data for a specific media.",
"\t@desc This is used to display information about the downloaded and queued chapters in the UI.",
"\t@desc If the 'cached' parameter is false, it will refresh the data by rescanning the download folder.",
"\t@route /api/v1/manga/download-data [POST]",
"\t@returns manga.MediaDownloadData",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "returns the download data for a specific media.",
"descriptions": [
"This is used to display information about the downloaded and queued chapters in the UI.",
"If the 'cached' parameter is false, it will refresh the data by rescanning the download folder."
],
"endpoint": "/api/v1/manga/download-data",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Cached",
"jsonName": "cached",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "manga.MediaDownloadData",
"returnGoType": "manga.MediaDownloadData",
"returnTypescriptType": "Manga_MediaDownloadData"
}
},
{
"name": "HandleGetMangaDownloadQueue",
"trimmedName": "GetMangaDownloadQueue",
"comments": [
"HandleGetMangaDownloadQueue",
"",
"\t@summary returns the items in the download queue.",
"\t@route /api/v1/manga/download-queue [GET]",
"\t@returns []models.ChapterDownloadQueueItem",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "returns the items in the download queue.",
"descriptions": [],
"endpoint": "/api/v1/manga/download-queue",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]models.ChapterDownloadQueueItem",
"returnGoType": "models.ChapterDownloadQueueItem",
"returnTypescriptType": "Array\u003cModels_ChapterDownloadQueueItem\u003e"
}
},
{
"name": "HandleStartMangaDownloadQueue",
"trimmedName": "StartMangaDownloadQueue",
"comments": [
"HandleStartMangaDownloadQueue",
"",
"\t@summary starts the download queue if it's not already running.",
"\t@desc This will start the download queue if it's not already running.",
"\t@desc Returns 'true' whether the queue was started or not.",
"\t@route /api/v1/manga/download-queue/start [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "starts the download queue if it's not already running.",
"descriptions": [
"This will start the download queue if it's not already running.",
"Returns 'true' whether the queue was started or not."
],
"endpoint": "/api/v1/manga/download-queue/start",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleStopMangaDownloadQueue",
"trimmedName": "StopMangaDownloadQueue",
"comments": [
"HandleStopMangaDownloadQueue",
"",
"\t@summary stops the manga download queue.",
"\t@desc This will stop the manga download queue.",
"\t@desc Returns 'true' whether the queue was stopped or not.",
"\t@route /api/v1/manga/download-queue/stop [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "stops the manga download queue.",
"descriptions": [
"This will stop the manga download queue.",
"Returns 'true' whether the queue was stopped or not."
],
"endpoint": "/api/v1/manga/download-queue/stop",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleClearAllChapterDownloadQueue",
"trimmedName": "ClearAllChapterDownloadQueue",
"comments": [
"HandleClearAllChapterDownloadQueue",
"",
"\t@summary clears all chapters from the download queue.",
"\t@desc This will clear all chapters from the download queue.",
"\t@desc Returns 'true' whether the queue was cleared or not.",
"\t@desc This will also send a websocket event telling the client to refetch the download queue.",
"\t@route /api/v1/manga/download-queue [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "clears all chapters from the download queue.",
"descriptions": [
"This will clear all chapters from the download queue.",
"Returns 'true' whether the queue was cleared or not.",
"This will also send a websocket event telling the client to refetch the download queue."
],
"endpoint": "/api/v1/manga/download-queue",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleResetErroredChapterDownloadQueue",
"trimmedName": "ResetErroredChapterDownloadQueue",
"comments": [
"HandleResetErroredChapterDownloadQueue",
"",
"\t@summary resets the errored chapters in the download queue.",
"\t@desc This will reset the errored chapters in the download queue, so they can be re-downloaded.",
"\t@desc Returns 'true' whether the queue was reset or not.",
"\t@desc This will also send a websocket event telling the client to refetch the download queue.",
"\t@route /api/v1/manga/download-queue/reset-errored [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "resets the errored chapters in the download queue.",
"descriptions": [
"This will reset the errored chapters in the download queue, so they can be re-downloaded.",
"Returns 'true' whether the queue was reset or not.",
"This will also send a websocket event telling the client to refetch the download queue."
],
"endpoint": "/api/v1/manga/download-queue/reset-errored",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleDeleteMangaDownloadedChapters",
"trimmedName": "DeleteMangaDownloadedChapters",
"comments": [
"HandleDeleteMangaDownloadedChapters",
"",
"\t@summary deletes downloaded chapters.",
"\t@desc This will delete downloaded chapters from the filesystem.",
"\t@desc Returns 'true' whether the chapters were deleted or not.",
"\t@desc The client should refetch the download data after this.",
"\t@route /api/v1/manga/download-chapter [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "deletes downloaded chapters.",
"descriptions": [
"This will delete downloaded chapters from the filesystem.",
"Returns 'true' whether the chapters were deleted or not.",
"The client should refetch the download data after this."
],
"endpoint": "/api/v1/manga/download-chapter",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "DownloadIds",
"jsonName": "downloadIds",
"goType": "[]chapter_downloader.DownloadID",
"usedStructType": "chapter_downloader.DownloadID",
"typescriptType": "Array\u003cChapterDownloader_DownloadID\u003e",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetMangaDownloadsList",
"trimmedName": "GetMangaDownloadsList",
"comments": [
"HandleGetMangaDownloadsList",
"",
"\t@summary displays the list of downloaded manga.",
"\t@desc This analyzes the download folder and returns a well-formatted structure for displaying downloaded manga.",
"\t@desc It returns a list of manga.DownloadListItem where the media data might be nil if it's not in the AniList collection.",
"\t@route /api/v1/manga/downloads [GET]",
"\t@returns []manga.DownloadListItem",
""
],
"filepath": "internal/handlers/manga_download.go",
"filename": "manga_download.go",
"api": {
"summary": "displays the list of downloaded manga.",
"descriptions": [
"This analyzes the download folder and returns a well-formatted structure for displaying downloaded manga.",
"It returns a list of manga.DownloadListItem where the media data might be nil if it's not in the AniList collection."
],
"endpoint": "/api/v1/manga/downloads",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]manga.DownloadListItem",
"returnGoType": "manga.DownloadListItem",
"returnTypescriptType": "Array\u003cManga_DownloadListItem\u003e"
}
},
{
"name": "HandleTestDump",
"trimmedName": "TestDump",
"comments": [
"HandleTestDump",
"",
"\t@summary this is a dummy handler for testing purposes.",
"\t@route /api/v1/test-dump [POST]",
""
],
"filepath": "internal/handlers/manual_dump.go",
"filename": "manual_dump.go",
"api": {
"summary": "this is a dummy handler for testing purposes.",
"descriptions": [],
"endpoint": "/api/v1/test-dump",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleStartDefaultMediaPlayer",
"trimmedName": "StartDefaultMediaPlayer",
"comments": [
"HandleStartDefaultMediaPlayer",
"",
"\t@summary launches the default media player (vlc or mpc-hc).",
"\t@route /api/v1/media-player/start [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/mediaplayer.go",
"filename": "mediaplayer.go",
"api": {
"summary": "launches the default media player (vlc or mpc-hc).",
"descriptions": [],
"endpoint": "/api/v1/media-player/start",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetMediastreamSettings",
"trimmedName": "GetMediastreamSettings",
"comments": [
"HandleGetMediastreamSettings",
"",
"\t@summary get mediastream settings.",
"\t@desc This returns the mediastream settings.",
"\t@returns models.MediastreamSettings",
"\t@route /api/v1/mediastream/settings [GET]",
""
],
"filepath": "internal/handlers/mediastream.go",
"filename": "mediastream.go",
"api": {
"summary": "get mediastream settings.",
"descriptions": [
"This returns the mediastream settings."
],
"endpoint": "/api/v1/mediastream/settings",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "models.MediastreamSettings",
"returnGoType": "models.MediastreamSettings",
"returnTypescriptType": "Models_MediastreamSettings"
}
},
{
"name": "HandleSaveMediastreamSettings",
"trimmedName": "SaveMediastreamSettings",
"comments": [
"HandleSaveMediastreamSettings",
"",
"\t@summary save mediastream settings.",
"\t@desc This saves the mediastream settings.",
"\t@returns models.MediastreamSettings",
"\t@route /api/v1/mediastream/settings [PATCH]",
""
],
"filepath": "internal/handlers/mediastream.go",
"filename": "mediastream.go",
"api": {
"summary": "save mediastream settings.",
"descriptions": [
"This saves the mediastream settings."
],
"endpoint": "/api/v1/mediastream/settings",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Settings",
"jsonName": "settings",
"goType": "models.MediastreamSettings",
"usedStructType": "models.MediastreamSettings",
"typescriptType": "Models_MediastreamSettings",
"required": true,
"descriptions": []
}
],
"returns": "models.MediastreamSettings",
"returnGoType": "models.MediastreamSettings",
"returnTypescriptType": "Models_MediastreamSettings"
}
},
{
"name": "HandleRequestMediastreamMediaContainer",
"trimmedName": "RequestMediastreamMediaContainer",
"comments": [
"HandleRequestMediastreamMediaContainer",
"",
"\t@summary request media stream.",
"\t@desc This requests a media stream and returns the media container to start the playback.",
"\t@returns mediastream.MediaContainer",
"\t@route /api/v1/mediastream/request [POST]",
""
],
"filepath": "internal/handlers/mediastream.go",
"filename": "mediastream.go",
"api": {
"summary": "request media stream.",
"descriptions": [
"This requests a media stream and returns the media container to start the playback."
],
"endpoint": "/api/v1/mediastream/request",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Path",
"jsonName": "path",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "StreamType",
"jsonName": "streamType",
"goType": "mediastream.StreamType",
"usedStructType": "mediastream.StreamType",
"typescriptType": "Mediastream_StreamType",
"required": true,
"descriptions": []
},
{
"name": "AudioStreamIndex",
"jsonName": "audioStreamIndex",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "ClientId",
"jsonName": "clientId",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "mediastream.MediaContainer",
"returnGoType": "mediastream.MediaContainer",
"returnTypescriptType": "Mediastream_MediaContainer"
}
},
{
"name": "HandlePreloadMediastreamMediaContainer",
"trimmedName": "PreloadMediastreamMediaContainer",
"comments": [
"HandlePreloadMediastreamMediaContainer",
"",
"\t@summary preloads media stream for playback.",
"\t@desc This preloads a media stream by extracting the media information and attachments.",
"\t@returns bool",
"\t@route /api/v1/mediastream/preload [POST]",
""
],
"filepath": "internal/handlers/mediastream.go",
"filename": "mediastream.go",
"api": {
"summary": "preloads media stream for playback.",
"descriptions": [
"This preloads a media stream by extracting the media information and attachments."
],
"endpoint": "/api/v1/mediastream/preload",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Path",
"jsonName": "path",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "StreamType",
"jsonName": "streamType",
"goType": "mediastream.StreamType",
"usedStructType": "mediastream.StreamType",
"typescriptType": "Mediastream_StreamType",
"required": true,
"descriptions": []
},
{
"name": "AudioStreamIndex",
"jsonName": "audioStreamIndex",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleMediastreamShutdownTranscodeStream",
"trimmedName": "MediastreamShutdownTranscodeStream",
"comments": [
"HandleMediastreamShutdownTranscodeStream",
"",
"\t@summary shuts down the transcode stream",
"\t@desc This requests the transcoder to shut down. It should be called when unmounting the player (playback is no longer needed).",
"\t@desc This will also send an events.MediastreamShutdownStream event.",
"\t@desc It will not return any error and is safe to call multiple times.",
"\t@returns bool",
"\t@route /api/v1/mediastream/shutdown-transcode [POST]",
""
],
"filepath": "internal/handlers/mediastream.go",
"filename": "mediastream.go",
"api": {
"summary": "shuts down the transcode stream",
"descriptions": [
"This requests the transcoder to shut down. It should be called when unmounting the player (playback is no longer needed).",
"This will also send an events.MediastreamShutdownStream event.",
"It will not return any error and is safe to call multiple times."
],
"endpoint": "/api/v1/mediastream/shutdown-transcode",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePopulateTVDBEpisodes",
"trimmedName": "PopulateTVDBEpisodes",
"comments": [
"HandlePopulateTVDBEpisodes",
"",
"\t@summary populate cache with TVDB episode metadata.",
"\t@desc This will populate the cache with TVDB episode metadata for the given media.",
"\t@returns []tvdb.Episode",
"\t@route /api/v1/metadata-provider/tvdb-episodes [POST]",
""
],
"filepath": "internal/handlers/metadata.go",
"filename": "metadata.go",
"api": {
"summary": "populate cache with TVDB episode metadata.",
"descriptions": [
"This will populate the cache with TVDB episode metadata for the given media."
],
"endpoint": "/api/v1/metadata-provider/tvdb-episodes",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "[]tvdb.Episode",
"returnGoType": "tvdb.Episode",
"returnTypescriptType": "Array\u003cTVDB_Episode\u003e"
}
},
{
"name": "HandleEmptyTVDBEpisodes",
"trimmedName": "EmptyTVDBEpisodes",
"comments": [
"HandleEmptyTVDBEpisodes",
"",
"\t@summary empties TVDB episode metadata cache.",
"\t@desc This will empty the TVDB episode metadata cache for the given media.",
"\t@returns bool",
"\t@route /api/v1/metadata-provider/tvdb-episodes [DELETE]",
""
],
"filepath": "internal/handlers/metadata.go",
"filename": "metadata.go",
"api": {
"summary": "empties TVDB episode metadata cache.",
"descriptions": [
"This will empty the TVDB episode metadata cache for the given media."
],
"endpoint": "/api/v1/metadata-provider/tvdb-episodes",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePopulateFillerData",
"trimmedName": "PopulateFillerData",
"comments": [
"HandlePopulateFillerData",
"",
"\t@summary fetches and caches filler data for the given media.",
"\t@desc This will fetch and cache filler data for the given media.",
"\t@returns true",
"\t@route /api/v1/metadata-provider/filler [POST]",
""
],
"filepath": "internal/handlers/metadata.go",
"filename": "metadata.go",
"api": {
"summary": "fetches and caches filler data for the given media.",
"descriptions": [
"This will fetch and cache filler data for the given media."
],
"endpoint": "/api/v1/metadata-provider/filler",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "true",
"returnGoType": "true",
"returnTypescriptType": "true"
}
},
{
"name": "HandleRemoveFillerData",
"trimmedName": "RemoveFillerData",
"comments": [
"HandleRemoveFillerData",
"",
"\t@summary removes filler data cache.",
"\t@desc This will remove the filler data cache for the given media.",
"\t@returns bool",
"\t@route /api/v1/metadata-provider/filler [DELETE]",
""
],
"filepath": "internal/handlers/metadata.go",
"filename": "metadata.go",
"api": {
"summary": "removes filler data cache.",
"descriptions": [
"This will remove the filler data cache for the given media."
],
"endpoint": "/api/v1/metadata-provider/filler",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleCreateOfflineSnapshot",
"trimmedName": "CreateOfflineSnapshot",
"comments": [
"HandleCreateOfflineSnapshot",
"",
"\t@summary creates an offline snapshot.",
"\t@desc This will create an offline snapshot of the given anime media ids and downloaded manga chapters.",
"\t@desc It sends a websocket event when the snapshot is created, telling the client to refetch the offline snapshot.",
"\t@desc This is a non-blocking operation.",
"\t@route /api/v1/offline/snapshot [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/offline.go",
"filename": "offline.go",
"api": {
"summary": "creates an offline snapshot.",
"descriptions": [
"This will create an offline snapshot of the given anime media ids and downloaded manga chapters.",
"It sends a websocket event when the snapshot is created, telling the client to refetch the offline snapshot.",
"This is a non-blocking operation."
],
"endpoint": "/api/v1/offline/snapshot",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "AnimeMediaIds",
"jsonName": "animeMediaIds",
"goType": "[]int",
"usedStructType": "",
"typescriptType": "Array\u003cnumber\u003e",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetOfflineSnapshot",
"trimmedName": "GetOfflineSnapshot",
"comments": [
"HandleGetOfflineSnapshot",
"",
"\t@summary retrieves the offline snapshot.",
"\t@desc This will return the latest offline snapshot. (Offline only)",
"\t@route /api/v1/offline/snapshot [GET]",
"\t@returns offline.Snapshot",
""
],
"filepath": "internal/handlers/offline.go",
"filename": "offline.go",
"api": {
"summary": "retrieves the offline snapshot.",
"descriptions": [
"This will return the latest offline snapshot. (Offline only)"
],
"endpoint": "/api/v1/offline/snapshot",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "offline.Snapshot",
"returnGoType": "offline.Snapshot",
"returnTypescriptType": "Offline_Snapshot"
}
},
{
"name": "HandleGetOfflineSnapshotEntry",
"trimmedName": "GetOfflineSnapshotEntry",
"comments": [
"HandleGetOfflineSnapshotEntry",
"",
"\t@summary retrieves an offline snapshot entry.",
"\t@desc This will return the latest offline snapshot entry so the client can display the data.",
"\t@route /api/v1/offline/snapshot-entry [GET]",
"\t@returns offline.SnapshotEntry",
""
],
"filepath": "internal/handlers/offline.go",
"filename": "offline.go",
"api": {
"summary": "retrieves an offline snapshot entry.",
"descriptions": [
"This will return the latest offline snapshot entry so the client can display the data."
],
"endpoint": "/api/v1/offline/snapshot-entry",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "offline.SnapshotEntry",
"returnGoType": "offline.SnapshotEntry",
"returnTypescriptType": "Offline_SnapshotEntry"
}
},
{
"name": "HandleUpdateOfflineEntryListData",
"trimmedName": "UpdateOfflineEntryListData",
"comments": [
"HandleUpdateOfflineEntryListData",
"",
"\t@summary updates data for an offline entry list.",
"\t@desc This will update the offline entry list data. (Offline only)",
"\t@route /api/v1/offline/snapshot-entry [PATCH]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/offline.go",
"filename": "offline.go",
"api": {
"summary": "updates data for an offline entry list.",
"descriptions": [
"This will update the offline entry list data. (Offline only)"
],
"endpoint": "/api/v1/offline/snapshot-entry",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Status",
"jsonName": "status",
"goType": "anilist.MediaListStatus",
"usedStructType": "anilist.MediaListStatus",
"typescriptType": "AL_MediaListStatus",
"required": false,
"descriptions": []
},
{
"name": "Score",
"jsonName": "score",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Progress",
"jsonName": "progress",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "StartDate",
"jsonName": "startDate",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "EndDate",
"jsonName": "endDate",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "Type",
"jsonName": "type",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleSyncOfflineData",
"trimmedName": "SyncOfflineData",
"comments": [
"HandleSyncOfflineData",
"",
"\t@summary synchronizes offline data with AniList when the user is back online.",
"\t@route /api/v1/offline/sync [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/offline.go",
"filename": "offline.go",
"api": {
"summary": "synchronizes offline data with AniList when the user is back online.",
"descriptions": [],
"endpoint": "/api/v1/offline/sync",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetOnlineStreamEpisodeList",
"trimmedName": "GetOnlineStreamEpisodeList",
"comments": [
"HandleGetOnlineStreamEpisodeList",
"",
"\t@summary returns the episode list for the given media and provider.",
"\t@desc It returns the episode list for the given media and provider.",
"\t@desc The episodes are cached using a file cache.",
"\t@desc The episode list is just a list of episodes with no video sources, it's what the client uses to display the episodes and subsequently fetch the sources.",
"\t@desc The episode list might be nil or empty if nothing could be found, but the media will always be returned.",
"\t@route /api/v1/onlinestream/episode-list [POST]",
"\t@returns onlinestream.EpisodeListResponse",
""
],
"filepath": "internal/handlers/onlinestream.go",
"filename": "onlinestream.go",
"api": {
"summary": "returns the episode list for the given media and provider.",
"descriptions": [
"It returns the episode list for the given media and provider.",
"The episodes are cached using a file cache.",
"The episode list is just a list of episodes with no video sources, it's what the client uses to display the episodes and subsequently fetch the sources.",
"The episode list might be nil or empty if nothing could be found, but the media will always be returned."
],
"endpoint": "/api/v1/onlinestream/episode-list",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Dubbed",
"jsonName": "dubbed",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
}
],
"returns": "onlinestream.EpisodeListResponse",
"returnGoType": "onlinestream.EpisodeListResponse",
"returnTypescriptType": "Onlinestream_EpisodeListResponse"
}
},
{
"name": "HandleGetOnlineStreamEpisodeSource",
"trimmedName": "GetOnlineStreamEpisodeSource",
"comments": [
"HandleGetOnlineStreamEpisodeSource",
"",
"\t@summary returns the video sources for the given media, episode number and provider.",
"\t@route /api/v1/onlinestream/episode-source [POST]",
"\t@returns onlinestream.EpisodeSource",
""
],
"filepath": "internal/handlers/onlinestream.go",
"filename": "onlinestream.go",
"api": {
"summary": "returns the video sources for the given media, episode number and provider.",
"descriptions": [],
"endpoint": "/api/v1/onlinestream/episode-source",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "EpisodeNumber",
"jsonName": "episodeNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Dubbed",
"jsonName": "dubbed",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "onlinestream.EpisodeSource",
"returnGoType": "onlinestream.EpisodeSource",
"returnTypescriptType": "Onlinestream_EpisodeSource"
}
},
{
"name": "HandleOnlineStreamEmptyCache",
"trimmedName": "OnlineStreamEmptyCache",
"comments": [
"HandleOnlineStreamEmptyCache",
"",
"\t@summary empties the cache for the given media.",
"\t@route /api/v1/onlinestream/cache [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/onlinestream.go",
"filename": "onlinestream.go",
"api": {
"summary": "empties the cache for the given media.",
"descriptions": [],
"endpoint": "/api/v1/onlinestream/cache",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackPlayVideo",
"trimmedName": "PlaybackPlayVideo",
"comments": [
"HandlePlaybackPlayVideo",
"",
"\t@summary plays the video with the given path using the default media player.",
"\t@desc This tells the Playback Manager to play the video using the default media player and start tracking progress.",
"\t@desc This returns 'true' if the video was successfully played.",
"\t@route /api/v1/playback-manager/play [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "plays the video with the given path using the default media player.",
"descriptions": [
"This tells the Playback Manager to play the video using the default media player and start tracking progress.",
"This returns 'true' if the video was successfully played."
],
"endpoint": "/api/v1/playback-manager/play",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Path",
"jsonName": "path",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackPlayRandomVideo",
"trimmedName": "PlaybackPlayRandomVideo",
"comments": [
"HandlePlaybackPlayRandomVideo",
"",
"\t@summary plays a random, unwatched video using the default media player.",
"\t@desc This tells the Playback Manager to play a random, unwatched video using the media player and start tracking progress.",
"\t@desc It respects the user's progress data and will prioritize \"current\" and \"repeating\" media if they are many of them.",
"\t@desc This returns 'true' if the video was successfully played.",
"\t@route /api/v1/playback-manager/play-random [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "plays a random, unwatched video using the default media player.",
"descriptions": [
"This tells the Playback Manager to play a random, unwatched video using the media player and start tracking progress.",
"It respects the user's progress data and will prioritize \"current\" and \"repeating\" media if they are many of them.",
"This returns 'true' if the video was successfully played."
],
"endpoint": "/api/v1/playback-manager/play-random",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackSyncCurrentProgress",
"trimmedName": "PlaybackSyncCurrentProgress",
"comments": [
"HandlePlaybackSyncCurrentProgress",
"",
"\t@summary updates the AniList progress of the currently playing media.",
"\t@desc This is called after 'Update progress' is clicked when watching a media.",
"\t@desc This route returns the media ID of the currently playing media, so the client can refetch the media entry data.",
"\t@route /api/v1/playback-manager/sync-current-progress [POST]",
"\t@returns int",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "updates the AniList progress of the currently playing media.",
"descriptions": [
"This is called after 'Update progress' is clicked when watching a media.",
"This route returns the media ID of the currently playing media, so the client can refetch the media entry data."
],
"endpoint": "/api/v1/playback-manager/sync-current-progress",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "int",
"returnGoType": "int",
"returnTypescriptType": "number"
}
},
{
"name": "HandlePlaybackPlayNextEpisode",
"trimmedName": "PlaybackPlayNextEpisode",
"comments": [
"HandlePlaybackPlayNextEpisode",
"",
"\t@summary plays the next episode of the currently playing media.",
"\t@desc This will play the next episode of the currently playing media.",
"\t@desc This is non-blocking so the client should prevent multiple calls until the next status is received.",
"\t@route /api/v1/playback-manager/next-episode [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "plays the next episode of the currently playing media.",
"descriptions": [
"This will play the next episode of the currently playing media.",
"This is non-blocking so the client should prevent multiple calls until the next status is received."
],
"endpoint": "/api/v1/playback-manager/next-episode",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackStartPlaylist",
"trimmedName": "PlaybackStartPlaylist",
"comments": [
"HandlePlaybackStartPlaylist",
"",
"\t@summary starts playing a playlist.",
"\t@desc The client should refetch playlists.",
"\t@route /api/v1/playback-manager/start-playlist [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "starts playing a playlist.",
"descriptions": [
"The client should refetch playlists."
],
"endpoint": "/api/v1/playback-manager/start-playlist",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "DbId",
"jsonName": "dbId",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackCancelCurrentPlaylist",
"trimmedName": "PlaybackCancelCurrentPlaylist",
"comments": [
"HandlePlaybackCancelCurrentPlaylist",
"",
"\t@summary ends the current playlist.",
"\t@desc This will stop the current playlist. This is non-blocking.",
"\t@route /api/v1/playback-manager/cancel-playlist [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "ends the current playlist.",
"descriptions": [
"This will stop the current playlist. This is non-blocking."
],
"endpoint": "/api/v1/playback-manager/cancel-playlist",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandlePlaybackPlaylistNext",
"trimmedName": "PlaybackPlaylistNext",
"comments": [
"HandlePlaybackPlaylistNext",
"",
"\t@summary moves to the next item in the current playlist.",
"\t@desc This is non-blocking so the client should prevent multiple calls until the next status is received.",
"\t@route /api/v1/playback-manager/playlist-next [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playback_manager.go",
"filename": "playback_manager.go",
"api": {
"summary": "moves to the next item in the current playlist.",
"descriptions": [
"This is non-blocking so the client should prevent multiple calls until the next status is received."
],
"endpoint": "/api/v1/playback-manager/playlist-next",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleCreatePlaylist",
"trimmedName": "CreatePlaylist",
"comments": [
"HandleCreatePlaylist",
"",
"\t@summary creates a new playlist.",
"\t@desc This will create a new playlist with the given name and local file paths.",
"\t@desc The response is ignored, the client should re-fetch the playlists after this.",
"\t@route /api/v1/playlist [POST]",
"\t@returns anime.Playlist",
""
],
"filepath": "internal/handlers/playlist.go",
"filename": "playlist.go",
"api": {
"summary": "creates a new playlist.",
"descriptions": [
"This will create a new playlist with the given name and local file paths.",
"The response is ignored, the client should re-fetch the playlists after this."
],
"endpoint": "/api/v1/playlist",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Name",
"jsonName": "name",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Paths",
"jsonName": "paths",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
}
],
"returns": "anime.Playlist",
"returnGoType": "anime.Playlist",
"returnTypescriptType": "Anime_Playlist"
}
},
{
"name": "HandleGetPlaylists",
"trimmedName": "GetPlaylists",
"comments": [
"HandleGetPlaylists",
"",
"\t@summary returns all playlists.",
"\t@route /api/v1/playlists [GET]",
"\t@returns []anime.Playlist",
""
],
"filepath": "internal/handlers/playlist.go",
"filename": "playlist.go",
"api": {
"summary": "returns all playlists.",
"descriptions": [],
"endpoint": "/api/v1/playlists",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]anime.Playlist",
"returnGoType": "anime.Playlist",
"returnTypescriptType": "Array\u003cAnime_Playlist\u003e"
}
},
{
"name": "HandleUpdatePlaylist",
"trimmedName": "UpdatePlaylist",
"comments": [
"HandleUpdatePlaylist",
"",
"\t@summary updates a playlist.",
"\t@returns the updated playlist",
"\t@desc The response is ignored, the client should re-fetch the playlists after this.",
"\t@route /api/v1/playlist [PATCH]",
"\t@param id - int - true - \"The ID of the playlist to update.\"",
"\t@returns anime.Playlist",
""
],
"filepath": "internal/handlers/playlist.go",
"filename": "playlist.go",
"api": {
"summary": "updates a playlist.",
"descriptions": [
"The response is ignored, the client should re-fetch the playlists after this."
],
"endpoint": "/api/v1/playlist",
"methods": [
"PATCH"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The ID of the playlist to update."
]
}
],
"bodyFields": [
{
"name": "DbId",
"jsonName": "dbId",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Name",
"jsonName": "name",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Paths",
"jsonName": "paths",
"goType": "[]string",
"usedStructType": "",
"typescriptType": "Array\u003cstring\u003e",
"required": true,
"descriptions": []
}
],
"returns": "anime.Playlist",
"returnGoType": "anime.Playlist",
"returnTypescriptType": "Anime_Playlist"
}
},
{
"name": "HandleDeletePlaylist",
"trimmedName": "DeletePlaylist",
"comments": [
"HandleDeletePlaylist",
"",
"\t@summary deletes a playlist.",
"\t@route /api/v1/playlist [DELETE]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/playlist.go",
"filename": "playlist.go",
"api": {
"summary": "deletes a playlist.",
"descriptions": [],
"endpoint": "/api/v1/playlist",
"methods": [
"DELETE"
],
"params": [],
"bodyFields": [
{
"name": "DbId",
"jsonName": "dbId",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetPlaylistEpisodes",
"trimmedName": "GetPlaylistEpisodes",
"comments": [
"HandleGetPlaylistEpisodes",
"",
"\t@summary returns all the local files of a playlist media entry that have not been watched.",
"\t@route /api/v1/playlist/episodes/{id}/{progress} [GET]",
"\t@param id - int - true - \"The ID of the media entry.\"",
"\t@param progress - int - true - \"The progress of the media entry.\"",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/playlist.go",
"filename": "playlist.go",
"api": {
"summary": "returns all the local files of a playlist media entry that have not been watched.",
"descriptions": [],
"endpoint": "/api/v1/playlist/episodes/{id}/{progress}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The ID of the media entry."
]
},
{
"name": "progress",
"jsonName": "progress",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"The progress of the media entry."
]
}
],
"bodyFields": [],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleInstallLatestUpdate",
"trimmedName": "InstallLatestUpdate",
"comments": [
"HandleInstallLatestUpdate",
"",
"\t@summary installs the latest update.",
"\t@desc This will install the latest update and launch the new version.",
"\t@route /api/v1/install-update [POST]",
"\t@returns handler.Status",
""
],
"filepath": "internal/handlers/releases.go",
"filename": "releases.go",
"api": {
"summary": "installs the latest update.",
"descriptions": [
"This will install the latest update and launch the new version."
],
"endpoint": "/api/v1/install-update",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "FallbackDestination",
"jsonName": "fallback_destination",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "handler.Status",
"returnGoType": "handler.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleGetLatestUpdate",
"trimmedName": "GetLatestUpdate",
"comments": [
"HandleGetLatestUpdate",
"",
"\t@summary returns the latest update.",
"\t@desc This will return the latest update.",
"\t@desc If an error occurs, it will return an empty update.",
"\t@route /api/v1/latest-update [GET]",
"\t@returns updater.Update",
""
],
"filepath": "internal/handlers/releases.go",
"filename": "releases.go",
"api": {
"summary": "returns the latest update.",
"descriptions": [
"This will return the latest update.",
"If an error occurs, it will return an empty update."
],
"endpoint": "/api/v1/latest-update",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "updater.Update",
"returnGoType": "updater.Update",
"returnTypescriptType": "Updater_Update"
}
},
{
"name": "makeHandler",
"trimmedName": "makeHandler",
"comments": [
"makeHandler creates a new route handler function.",
"It takes the App instance and a custom handler function as arguments.",
"The custom handler function is similar to a fiber handler, but it takes a RouteCtx as an argument, allowing route handlers to access the app's state.",
"We use a sync.Pool to avoid allocating memory for each request.",
""
],
"filepath": "internal/handlers/routes.go",
"filename": "routes.go",
"api": {
"summary": "",
"descriptions": [],
"endpoint": "",
"methods": null,
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
},
{
"name": "RespondWithData",
"trimmedName": "RespondWithData",
"comments": [
"RespondWithData responds with a JSON response containing the given data.",
""
],
"filepath": "internal/handlers/routes.go",
"filename": "routes.go",
"api": {
"summary": "",
"descriptions": [],
"endpoint": "",
"methods": null,
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
},
{
"name": "RespondWithError",
"trimmedName": "RespondWithError",
"comments": [
"RespondWithError responds with a JSON response containing the given error.",
""
],
"filepath": "internal/handlers/routes.go",
"filename": "routes.go",
"api": {
"summary": "",
"descriptions": [],
"endpoint": "",
"methods": null,
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleScanLocalFiles",
"trimmedName": "ScanLocalFiles",
"comments": [
"HandleScanLocalFiles",
"",
"\t@summary scans the user's library.",
"\t@desc This will scan the user's library.",
"\t@desc The response is ignored, the client should re-fetch the library after this.",
"\t@route /api/v1/library/scan [POST]",
"\t@returns []anime.LocalFile",
""
],
"filepath": "internal/handlers/scan.go",
"filename": "scan.go",
"api": {
"summary": "scans the user's library.",
"descriptions": [
"This will scan the user's library.",
"The response is ignored, the client should re-fetch the library after this."
],
"endpoint": "/api/v1/library/scan",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Enhanced",
"jsonName": "enhanced",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "SkipLockedFiles",
"jsonName": "skipLockedFiles",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "SkipIgnoredFiles",
"jsonName": "skipIgnoredFiles",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "[]anime.LocalFile",
"returnGoType": "anime.LocalFile",
"returnTypescriptType": "Array\u003cAnime_LocalFile\u003e"
}
},
{
"name": "HandleGetScanSummaries",
"trimmedName": "GetScanSummaries",
"comments": [
"HandleGetScanSummaries",
"",
"\t@summary returns the latest scan summaries.",
"\t@route /api/v1/library/scan-summaries [GET]",
"\t@returns []db.ScanSummaryItem",
""
],
"filepath": "internal/handlers/scan_summary.go",
"filename": "scan_summary.go",
"api": {
"summary": "returns the latest scan summaries.",
"descriptions": [],
"endpoint": "/api/v1/library/scan-summaries",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]db.ScanSummaryItem",
"returnGoType": "db.ScanSummaryItem",
"returnTypescriptType": "Array\u003cDB_ScanSummaryItem\u003e"
}
},
{
"name": "HandleGetSettings",
"trimmedName": "GetSettings",
"comments": [
"HandleGetSettings",
"",
"\t@summary returns the app settings.",
"\t@route /api/v1/settings [GET]",
"\t@returns models.Settings",
""
],
"filepath": "internal/handlers/settings.go",
"filename": "settings.go",
"api": {
"summary": "returns the app settings.",
"descriptions": [],
"endpoint": "/api/v1/settings",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "models.Settings",
"returnGoType": "models.Settings",
"returnTypescriptType": "Models_Settings"
}
},
{
"name": "HandleGettingStarted",
"trimmedName": "GettingStarted",
"comments": [
"HandleGettingStarted",
"",
"\t@summary updates the app settings.",
"\t@desc This will update the app settings.",
"\t@desc The client should re-fetch the server status after this.",
"\t@route /api/v1/start [POST]",
"\t@returns handlers.Status",
""
],
"filepath": "internal/handlers/settings.go",
"filename": "settings.go",
"api": {
"summary": "updates the app settings.",
"descriptions": [
"This will update the app settings.",
"The client should re-fetch the server status after this."
],
"endpoint": "/api/v1/start",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Library",
"jsonName": "library",
"goType": "models.LibrarySettings",
"usedStructType": "models.LibrarySettings",
"typescriptType": "Models_LibrarySettings",
"required": true,
"descriptions": []
},
{
"name": "MediaPlayer",
"jsonName": "mediaPlayer",
"goType": "models.MediaPlayerSettings",
"usedStructType": "models.MediaPlayerSettings",
"typescriptType": "Models_MediaPlayerSettings",
"required": true,
"descriptions": []
},
{
"name": "Torrent",
"jsonName": "torrent",
"goType": "models.TorrentSettings",
"usedStructType": "models.TorrentSettings",
"typescriptType": "Models_TorrentSettings",
"required": true,
"descriptions": []
},
{
"name": "Anilist",
"jsonName": "anilist",
"goType": "models.AnilistSettings",
"usedStructType": "models.AnilistSettings",
"typescriptType": "Models_AnilistSettings",
"required": true,
"descriptions": []
},
{
"name": "Discord",
"jsonName": "discord",
"goType": "models.DiscordSettings",
"usedStructType": "models.DiscordSettings",
"typescriptType": "Models_DiscordSettings",
"required": true,
"descriptions": []
},
{
"name": "EnableTranscode",
"jsonName": "enableTranscode",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "EnableTorrentStreaming",
"jsonName": "enableTorrentStreaming",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "handlers.Status",
"returnGoType": "handlers.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleSaveSettings",
"trimmedName": "SaveSettings",
"comments": [
"HandleSaveSettings",
"",
"\t@summary updates the app settings.",
"\t@desc This will update the app settings.",
"\t@desc The client should re-fetch the server status after this.",
"\t@route /api/v1/settings [PATCH]",
"\t@returns handlers.Status",
""
],
"filepath": "internal/handlers/settings.go",
"filename": "settings.go",
"api": {
"summary": "updates the app settings.",
"descriptions": [
"This will update the app settings.",
"The client should re-fetch the server status after this."
],
"endpoint": "/api/v1/settings",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Library",
"jsonName": "library",
"goType": "models.LibrarySettings",
"usedStructType": "models.LibrarySettings",
"typescriptType": "Models_LibrarySettings",
"required": true,
"descriptions": []
},
{
"name": "MediaPlayer",
"jsonName": "mediaPlayer",
"goType": "models.MediaPlayerSettings",
"usedStructType": "models.MediaPlayerSettings",
"typescriptType": "Models_MediaPlayerSettings",
"required": true,
"descriptions": []
},
{
"name": "Torrent",
"jsonName": "torrent",
"goType": "models.TorrentSettings",
"usedStructType": "models.TorrentSettings",
"typescriptType": "Models_TorrentSettings",
"required": true,
"descriptions": []
},
{
"name": "Anilist",
"jsonName": "anilist",
"goType": "models.AnilistSettings",
"usedStructType": "models.AnilistSettings",
"typescriptType": "Models_AnilistSettings",
"required": true,
"descriptions": []
},
{
"name": "Discord",
"jsonName": "discord",
"goType": "models.DiscordSettings",
"usedStructType": "models.DiscordSettings",
"typescriptType": "Models_DiscordSettings",
"required": true,
"descriptions": []
}
],
"returns": "handlers.Status",
"returnGoType": "handlers.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleSaveAutoDownloaderSettings",
"trimmedName": "SaveAutoDownloaderSettings",
"comments": [
"HandleSaveAutoDownloaderSettings",
"",
"\t@summary updates the auto-downloader settings.",
"\t@route /api/v1/settings/auto-downloader [PATCH]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/settings.go",
"filename": "settings.go",
"api": {
"summary": "updates the auto-downloader settings.",
"descriptions": [],
"endpoint": "/api/v1/settings/auto-downloader",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Interval",
"jsonName": "interval",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Enabled",
"jsonName": "enabled",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "DownloadAutomatically",
"jsonName": "downloadAutomatically",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "NewStatus",
"trimmedName": "NewStatus",
"comments": [
"NewStatus returns a new Status struct.",
"It uses the RouteCtx to get the App instance containing the Database instance.",
""
],
"filepath": "internal/handlers/status.go",
"filename": "status.go",
"api": {
"summary": "",
"descriptions": [],
"endpoint": "",
"methods": null,
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleGetStatus",
"trimmedName": "GetStatus",
"comments": [
"HandleGetStatus",
"",
"\t@summary returns the server status.",
"\t@desc The server status includes app info, auth info and settings.",
"\t@desc The client uses this to set the UI.",
"\t@desc It is called on every page load to get the most up-to-date data.",
"\t@desc It should be called right after updating the settings.",
"\t@route /api/v1/status [GET]",
"\t@returns handlers.Status",
""
],
"filepath": "internal/handlers/status.go",
"filename": "status.go",
"api": {
"summary": "returns the server status.",
"descriptions": [
"The server status includes app info, auth info and settings.",
"The client uses this to set the UI.",
"It is called on every page load to get the most up-to-date data.",
"It should be called right after updating the settings."
],
"endpoint": "/api/v1/status",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "handlers.Status",
"returnGoType": "handlers.Status",
"returnTypescriptType": "Status"
}
},
{
"name": "HandleGetTheme",
"trimmedName": "GetTheme",
"comments": [
"HandleGetTheme",
"",
"\t@summary returns the theme settings.",
"\t@route /api/v1/theme [GET]",
"\t@returns models.Theme",
""
],
"filepath": "internal/handlers/theme.go",
"filename": "theme.go",
"api": {
"summary": "returns the theme settings.",
"descriptions": [],
"endpoint": "/api/v1/theme",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "models.Theme",
"returnGoType": "models.Theme",
"returnTypescriptType": "Models_Theme"
}
},
{
"name": "HandleUpdateTheme",
"trimmedName": "UpdateTheme",
"comments": [
"HandleUpdateTheme",
"",
"\t@summary updates the theme settings.",
"\t@desc The server status should be re-fetched after this on the client.",
"\t@route /api/v1/theme [PATCH]",
"\t@returns models.Theme",
""
],
"filepath": "internal/handlers/theme.go",
"filename": "theme.go",
"api": {
"summary": "updates the theme settings.",
"descriptions": [
"The server status should be re-fetched after this on the client."
],
"endpoint": "/api/v1/theme",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Theme",
"jsonName": "theme",
"goType": "models.Theme",
"usedStructType": "models.Theme",
"typescriptType": "Models_Theme",
"required": true,
"descriptions": []
}
],
"returns": "models.Theme",
"returnGoType": "models.Theme",
"returnTypescriptType": "Models_Theme"
}
},
{
"name": "HandleGetActiveTorrentList",
"trimmedName": "GetActiveTorrentList",
"comments": [
"HandleGetActiveTorrentList",
"",
"\t@summary returns all active torrents.",
"\t@desc This handler is used by the client to display the active torrents.",
"",
"\t@route /api/v1/torrent-client/list [GET]",
"\t@returns []torrent_client.Torrent",
""
],
"filepath": "internal/handlers/torrent_client.go",
"filename": "torrent_client.go",
"api": {
"summary": "returns all active torrents.",
"descriptions": [
"This handler is used by the client to display the active torrents."
],
"endpoint": "/api/v1/torrent-client/list",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "[]torrent_client.Torrent",
"returnGoType": "torrent_client.Torrent",
"returnTypescriptType": "Array\u003cTorrentClient_Torrent\u003e"
}
},
{
"name": "HandleTorrentClientAction",
"trimmedName": "TorrentClientAction",
"comments": [
"HandleTorrentClientAction",
"",
"\t@summary performs an action on a torrent.",
"\t@desc This handler is used to pause, resume or remove a torrent.",
"\t@route /api/v1/torrent-client/action [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/torrent_client.go",
"filename": "torrent_client.go",
"api": {
"summary": "performs an action on a torrent.",
"descriptions": [
"This handler is used to pause, resume or remove a torrent."
],
"endpoint": "/api/v1/torrent-client/action",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Hash",
"jsonName": "hash",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Action",
"jsonName": "action",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "Dir",
"jsonName": "dir",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleTorrentClientDownload",
"trimmedName": "TorrentClientDownload",
"comments": [
"HandleTorrentClientDownload",
"",
"\t@summary adds torrents to the torrent client.",
"\t@desc It fetches the magnets from the provided URLs and adds them to the torrent client.",
"\t@desc If smart select is enabled, it will try to select the best torrent based on the missing episodes.",
"\t@route /api/v1/torrent-client/download [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/torrent_client.go",
"filename": "torrent_client.go",
"api": {
"summary": "adds torrents to the torrent client.",
"descriptions": [
"It fetches the magnets from the provided URLs and adds them to the torrent client.",
"If smart select is enabled, it will try to select the best torrent based on the missing episodes."
],
"endpoint": "/api/v1/torrent-client/download",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Torrents",
"jsonName": "torrents",
"goType": "[]hibiketorrent.AnimeTorrent",
"usedStructType": "hibiketorrent.AnimeTorrent",
"typescriptType": "Array\u003cHibikeTorrent_AnimeTorrent\u003e",
"required": true,
"descriptions": []
},
{
"name": "Destination",
"jsonName": "destination",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "SmartSelect",
"jsonName": "smartSelect",
"goType": "",
"usedStructType": "",
"typescriptType": "any",
"required": true,
"descriptions": []
},
{
"name": "Media",
"jsonName": "media",
"goType": "anilist.BaseAnime",
"usedStructType": "anilist.BaseAnime",
"typescriptType": "AL_BaseAnime",
"required": false,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleTorrentClientAddMagnetFromRule",
"trimmedName": "TorrentClientAddMagnetFromRule",
"comments": [
"HandleTorrentClientAddMagnetFromRule",
"",
"\t@summary adds magnets to the torrent client based on the AutoDownloader item.",
"\t@desc This is used to download torrents that were queued by the AutoDownloader.",
"\t@desc The item will be removed from the queue if the magnet was added successfully.",
"\t@desc The AutoDownloader items should be re-fetched after this.",
"\t@route /api/v1/torrent-client/rule-magnet [POST]",
"\t@returns bool",
""
],
"filepath": "internal/handlers/torrent_client.go",
"filename": "torrent_client.go",
"api": {
"summary": "adds magnets to the torrent client based on the AutoDownloader item.",
"descriptions": [
"This is used to download torrents that were queued by the AutoDownloader.",
"The item will be removed from the queue if the magnet was added successfully.",
"The AutoDownloader items should be re-fetched after this."
],
"endpoint": "/api/v1/torrent-client/rule-magnet",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MagnetUrl",
"jsonName": "magnetUrl",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "RuleId",
"jsonName": "ruleId",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "QueuedItemId",
"jsonName": "queuedItemId",
"goType": "uint",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleSearchTorrent",
"trimmedName": "SearchTorrent",
"comments": [
"HandleSearchTorrent",
"",
"\t@summary searches torrents and returns a list of torrents and their previews.",
"\t@desc This will search for torrents and return a list of torrents with previews.",
"\t@desc If smart search is enabled, it will filter the torrents based on search parameters.",
"\t@route /api/v1/torrent/search [POST]",
"\t@returns torrent.SearchData",
""
],
"filepath": "internal/handlers/torrent_search.go",
"filename": "torrent_search.go",
"api": {
"summary": "searches torrents and returns a list of torrents and their previews.",
"descriptions": [
"This will search for torrents and return a list of torrents with previews.",
"If smart search is enabled, it will filter the torrents based on search parameters."
],
"endpoint": "/api/v1/torrent/search",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Type",
"jsonName": "type",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": [
"\"smart\" or \"simple\"",
"",
"\"smart\" or \"simple\""
]
},
{
"name": "Provider",
"jsonName": "provider",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "Query",
"jsonName": "query",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "EpisodeNumber",
"jsonName": "episodeNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Batch",
"jsonName": "batch",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": false,
"descriptions": []
},
{
"name": "Media",
"jsonName": "media",
"goType": "anilist.BaseAnime",
"usedStructType": "anilist.BaseAnime",
"typescriptType": "AL_BaseAnime",
"required": false,
"descriptions": []
},
{
"name": "AbsoluteOffset",
"jsonName": "absoluteOffset",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
},
{
"name": "Resolution",
"jsonName": "resolution",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": false,
"descriptions": []
},
{
"name": "BestRelease",
"jsonName": "bestRelease",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": false,
"descriptions": []
}
],
"returns": "torrent.SearchData",
"returnGoType": "torrent.SearchData",
"returnTypescriptType": "Torrent_SearchData"
}
},
{
"name": "HandleGetTorrentstreamEpisodeCollection",
"trimmedName": "GetTorrentstreamEpisodeCollection",
"comments": [
"HandleGetTorrentstreamEpisodeCollection",
"",
"\t@summary get list of episodes",
"\t@desc This returns a list of episodes.",
"\t@returns torrentstream.EpisodeCollection",
"\t@param id - int - true - \"AniList anime media ID\"",
"\t@route /api/v1/torrentstream/episodes/{id} [GET]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "get list of episodes",
"descriptions": [
"This returns a list of episodes."
],
"endpoint": "/api/v1/torrentstream/episodes/{id}",
"methods": [
"GET"
],
"params": [
{
"name": "id",
"jsonName": "id",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": [
"AniList anime media ID"
]
}
],
"bodyFields": [],
"returns": "torrentstream.EpisodeCollection",
"returnGoType": "torrentstream.EpisodeCollection",
"returnTypescriptType": "Torrentstream_EpisodeCollection"
}
},
{
"name": "HandleGetTorrentstreamSettings",
"trimmedName": "GetTorrentstreamSettings",
"comments": [
"HandleGetTorrentstreamSettings",
"",
"\t@summary get torrentstream settings.",
"\t@desc This returns the torrentstream settings.",
"\t@returns models.TorrentstreamSettings",
"\t@route /api/v1/torrentstream/settings [GET]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "get torrentstream settings.",
"descriptions": [
"This returns the torrentstream settings."
],
"endpoint": "/api/v1/torrentstream/settings",
"methods": [
"GET"
],
"params": [],
"bodyFields": [],
"returns": "models.TorrentstreamSettings",
"returnGoType": "models.TorrentstreamSettings",
"returnTypescriptType": "Models_TorrentstreamSettings"
}
},
{
"name": "HandleSaveTorrentstreamSettings",
"trimmedName": "SaveTorrentstreamSettings",
"comments": [
"HandleSaveTorrentstreamSettings",
"",
"\t@summary save torrentstream settings.",
"\t@desc This saves the torrentstream settings.",
"\t@desc The client should refetch the server status.",
"\t@returns models.TorrentstreamSettings",
"\t@route /api/v1/torrentstream/settings [PATCH]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "save torrentstream settings.",
"descriptions": [
"This saves the torrentstream settings.",
"The client should refetch the server status."
],
"endpoint": "/api/v1/torrentstream/settings",
"methods": [
"PATCH"
],
"params": [],
"bodyFields": [
{
"name": "Settings",
"jsonName": "settings",
"goType": "models.TorrentstreamSettings",
"usedStructType": "models.TorrentstreamSettings",
"typescriptType": "Models_TorrentstreamSettings",
"required": true,
"descriptions": []
}
],
"returns": "models.TorrentstreamSettings",
"returnGoType": "models.TorrentstreamSettings",
"returnTypescriptType": "Models_TorrentstreamSettings"
}
},
{
"name": "HandleGetTorrentstreamTorrentFilePreviews",
"trimmedName": "GetTorrentstreamTorrentFilePreviews",
"comments": [
"HandleGetTorrentstreamTorrentFilePreviews",
"",
"\t@summary get list of torrent files from a batch",
"\t@desc This returns a list of file previews from the torrent",
"\t@returns []torrentstream.FilePreview",
"\t@route /api/v1/torrentstream/torrent-file-previews [POST]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "get list of torrent files from a batch",
"descriptions": [
"This returns a list of file previews from the torrent"
],
"endpoint": "/api/v1/torrentstream/torrent-file-previews",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "Torrent",
"jsonName": "torrent",
"goType": "hibiketorrent.AnimeTorrent",
"usedStructType": "hibiketorrent.AnimeTorrent",
"typescriptType": "HibikeTorrent_AnimeTorrent",
"required": false,
"descriptions": []
},
{
"name": "EpisodeNumber",
"jsonName": "episodeNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "Media",
"jsonName": "media",
"goType": "anilist.BaseAnime",
"usedStructType": "anilist.BaseAnime",
"typescriptType": "AL_BaseAnime",
"required": false,
"descriptions": []
}
],
"returns": "[]torrentstream.FilePreview",
"returnGoType": "torrentstream.FilePreview",
"returnTypescriptType": "Array\u003cTorrentstream_FilePreview\u003e"
}
},
{
"name": "HandleTorrentstreamStartStream",
"trimmedName": "TorrentstreamStartStream",
"comments": [
"HandleTorrentstreamStartStream",
"",
"\t@summary starts a torrent stream.",
"\t@desc This starts the entire streaming process.",
"\t@returns bool",
"\t@route /api/v1/torrentstream/start [POST]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "starts a torrent stream.",
"descriptions": [
"This starts the entire streaming process."
],
"endpoint": "/api/v1/torrentstream/start",
"methods": [
"POST"
],
"params": [],
"bodyFields": [
{
"name": "MediaId",
"jsonName": "mediaId",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "EpisodeNumber",
"jsonName": "episodeNumber",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": true,
"descriptions": []
},
{
"name": "AniDBEpisode",
"jsonName": "aniDBEpisode",
"goType": "string",
"usedStructType": "",
"typescriptType": "string",
"required": true,
"descriptions": []
},
{
"name": "AutoSelect",
"jsonName": "autoSelect",
"goType": "bool",
"usedStructType": "",
"typescriptType": "boolean",
"required": true,
"descriptions": []
},
{
"name": "Torrent",
"jsonName": "torrent",
"goType": "hibiketorrent.AnimeTorrent",
"usedStructType": "hibiketorrent.AnimeTorrent",
"typescriptType": "HibikeTorrent_AnimeTorrent",
"required": false,
"descriptions": []
},
{
"name": "FileIndex",
"jsonName": "fileIndex",
"goType": "int",
"usedStructType": "",
"typescriptType": "number",
"required": false,
"descriptions": []
}
],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleTorrentstreamStopStream",
"trimmedName": "TorrentstreamStopStream",
"comments": [
"HandleTorrentstreamStopStream",
"",
"\t@summary stop a torrent stream.",
"\t@desc This stops the entire streaming process and drops the torrent if it's below a threshold.",
"\t@desc This is made to be used while the stream is running.",
"\t@returns bool",
"\t@route /api/v1/torrentstream/stop [POST]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "stop a torrent stream.",
"descriptions": [
"This stops the entire streaming process and drops the torrent if it's below a threshold.",
"This is made to be used while the stream is running."
],
"endpoint": "/api/v1/torrentstream/stop",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "HandleTorrentstreamDropTorrent",
"trimmedName": "TorrentstreamDropTorrent",
"comments": [
"HandleTorrentstreamDropTorrent",
"",
"\t@summary drops a torrent stream.",
"\t@desc This stops the entire streaming process and drops the torrent completely.",
"\t@desc This is made to be used to force drop a torrent.",
"\t@returns bool",
"\t@route /api/v1/torrentstream/drop [POST]",
""
],
"filepath": "internal/handlers/torrentstream.go",
"filename": "torrentstream.go",
"api": {
"summary": "drops a torrent stream.",
"descriptions": [
"This stops the entire streaming process and drops the torrent completely.",
"This is made to be used to force drop a torrent."
],
"endpoint": "/api/v1/torrentstream/drop",
"methods": [
"POST"
],
"params": [],
"bodyFields": [],
"returns": "bool",
"returnGoType": "bool",
"returnTypescriptType": "boolean"
}
},
{
"name": "newWebSocketEventHandler",
"trimmedName": "newWebSocketEventHandler",
"comments": [
"newWebSocketEventHandler creates a new websocket handler for real-time event communication",
""
],
"filepath": "internal/handlers/websocket.go",
"filename": "websocket.go",
"api": {
"summary": "",
"descriptions": [],
"endpoint": "",
"methods": null,
"params": [],
"bodyFields": [],
"returns": "boolean",
"returnGoType": "boolean",
"returnTypescriptType": "boolean"
}
}
]