[ { "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": [] }, { "name": "NotYetAired", "jsonName": "notYetAired", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": false, "descriptions": [] }, { "name": "Sort", "jsonName": "sort", "goType": "[]anilist.AiringSort", "usedStructType": "anilist.AiringSort", "typescriptType": "Array\u003cAL_AiringSort\u003e", "required": false, "descriptions": [] } ], "returns": "anilist.ListRecentAnime", "returnGoType": "anilist.ListRecentAnime", "returnTypescriptType": "AL_ListRecentAnime" } }, { "name": "HandleAnilistListMissedSequels", "trimmedName": "AnilistListMissedSequels", "comments": [ "HandleAnilistListMissedSequels", "", "\t@summary returns a list of sequels not in the user's list.", "\t@desc This is used by the \"Discover\" page to display sequels the user may have missed.", "\t@route /api/v1/anilist/list-missed-sequels [GET]", "\t@returns []anilist.BaseAnime", "" ], "filepath": "internal/handlers/anilist.go", "filename": "anilist.go", "api": { "summary": "returns a list of sequels not in the user's list.", "descriptions": [ "This is used by the \"Discover\" page to display sequels the user may have missed." ], "endpoint": "/api/v1/anilist/list-missed-sequels", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]anilist.BaseAnime", "returnGoType": "anilist.BaseAnime", "returnTypescriptType": "Array\u003cAL_BaseAnime\u003e" } }, { "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": "HandleGetAnimeEpisodeCollection", "trimmedName": "GetAnimeEpisodeCollection", "comments": [ "HandleGetAnimeEpisodeCollection", "", "\t@summary gets list of main episodes", "\t@desc This returns a list of main episodes for the given AniList anime media id.", "\t@desc It also loads the episode list into the different modules.", "\t@returns anime.EpisodeCollection", "\t@param id - int - true - \"AniList anime media ID\"", "\t@route /api/v1/anime/episode-collection/{id} [GET]", "" ], "filepath": "internal/handlers/anime.go", "filename": "anime.go", "api": { "summary": "gets list of main episodes", "descriptions": [ "This returns a list of main episodes for the given AniList anime media id.", "It also loads the episode list into the different modules." ], "endpoint": "/api/v1/anime/episode-collection/{id}", "methods": [ "GET" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "AniList anime media ID" ] } ], "bodyFields": [], "returns": "anime.EpisodeCollection", "returnGoType": "anime.EpisodeCollection", "returnTypescriptType": "Anime_EpisodeCollection" } }, { "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": "HandleGetAnimeCollectionSchedule", "trimmedName": "GetAnimeCollectionSchedule", "comments": [ "HandleGetAnimeCollectionSchedule", "", "\t@summary returns anime collection schedule", "\t@desc This is used by the \"Schedule\" page to display the anime schedule.", "\t@route /api/v1/library/schedule [GET]", "\t@returns []anime.ScheduleItem", "" ], "filepath": "internal/handlers/anime_collection.go", "filename": "anime_collection.go", "api": { "summary": "returns anime collection schedule", "descriptions": [ "This is used by the \"Schedule\" page to display the anime schedule." ], "endpoint": "/api/v1/library/schedule", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]anime.ScheduleItem", "returnGoType": "anime.ScheduleItem", "returnTypescriptType": "Array\u003cAnime_ScheduleItem\u003e" } }, { "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.Entry", "" ], "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.Entry", "returnGoType": "anime.Entry", "returnTypescriptType": "Anime_Entry" } }, { "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": "Paths", "jsonName": "paths", "goType": "[]string", "usedStructType": "", "typescriptType": "Array\u003cstring\u003e", "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.", "\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.", "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": "HandleUpdateAnimeEntryRepeat", "trimmedName": "UpdateAnimeEntryRepeat", "comments": [ "HandleUpdateAnimeEntryRepeat", "", "\t@summary update the repeat value of the given anime media entry.", "\t@desc This is used to update the repeat value of the given anime media entry on AniList.", "\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/update-repeat [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/anime_entries.go", "filename": "anime_entries.go", "api": { "summary": "update the repeat value of the given anime media entry.", "descriptions": [ "This is used to update the repeat value of the given anime media entry on AniList.", "The response is not used in the frontend, the client should just refetch the entire media entry data." ], "endpoint": "/api/v1/library/anime-entry/update-repeat", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Repeat", "jsonName": "repeat", "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": "HandleGetAutoDownloaderRulesByAnime", "trimmedName": "GetAutoDownloaderRulesByAnime", "comments": [ "HandleGetAutoDownloaderRulesByAnime", "", "\t@summary returns the rules with the given media id.", "\t@route /api/v1/auto-downloader/rule/anime/{id} [GET]", "\t@param id - int - true - \"The AniList anime id of the rules\"", "\t@returns []anime.AutoDownloaderRule", "" ], "filepath": "internal/handlers/auto_downloader.go", "filename": "auto_downloader.go", "api": { "summary": "returns the rules with the given media id.", "descriptions": [], "endpoint": "/api/v1/auto-downloader/rule/anime/{id}", "methods": [ "GET" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "The AniList anime id of the rules" ] } ], "bodyFields": [], "returns": "[]anime.AutoDownloaderRule", "returnGoType": "anime.AutoDownloaderRule", "returnTypescriptType": "Array\u003cAnime_AutoDownloaderRule\u003e" } }, { "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": "AdditionalTerms", "jsonName": "additionalTerms", "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": "HandleUpdateContinuityWatchHistoryItem", "trimmedName": "UpdateContinuityWatchHistoryItem", "comments": [ "HandleUpdateContinuityWatchHistoryItem", "", "\t@summary Updates watch history item.", "\t@desc This endpoint is used to update a watch history item.", "\t@desc Since this is low priority, we ignore any errors.", "\t@route /api/v1/continuity/item [PATCH]", "\t@returns bool", "" ], "filepath": "internal/handlers/continuity.go", "filename": "continuity.go", "api": { "summary": "Updates watch history item.", "descriptions": [ "This endpoint is used to update a watch history item.", "Since this is low priority, we ignore any errors." ], "endpoint": "/api/v1/continuity/item", "methods": [ "PATCH" ], "params": [], "bodyFields": [ { "name": "Options", "jsonName": "options", "goType": "continuity.UpdateWatchHistoryItemOptions", "usedStructType": "continuity.UpdateWatchHistoryItemOptions", "typescriptType": "Continuity_UpdateWatchHistoryItemOptions", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetContinuityWatchHistoryItem", "trimmedName": "GetContinuityWatchHistoryItem", "comments": [ "HandleGetContinuityWatchHistoryItem", "", "\t@summary Returns a watch history item.", "\t@desc This endpoint is used to retrieve a watch history item.", "\t@route /api/v1/continuity/item/{id} [GET]", "\t@param id - int - true - \"AniList anime media ID\"", "\t@returns continuity.WatchHistoryItemResponse", "" ], "filepath": "internal/handlers/continuity.go", "filename": "continuity.go", "api": { "summary": "Returns a watch history item.", "descriptions": [ "This endpoint is used to retrieve a watch history item." ], "endpoint": "/api/v1/continuity/item/{id}", "methods": [ "GET" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "AniList anime media ID" ] } ], "bodyFields": [], "returns": "continuity.WatchHistoryItemResponse", "returnGoType": "continuity.WatchHistoryItemResponse", "returnTypescriptType": "Continuity_WatchHistoryItemResponse" } }, { "name": "HandleGetContinuityWatchHistory", "trimmedName": "GetContinuityWatchHistory", "comments": [ "HandleGetContinuityWatchHistory", "", "\t@summary Returns the continuity watch history", "\t@desc This endpoint is used to retrieve all watch history items.", "\t@route /api/v1/continuity/history [GET]", "\t@returns continuity.WatchHistory", "" ], "filepath": "internal/handlers/continuity.go", "filename": "continuity.go", "api": { "summary": "Returns the continuity watch history", "descriptions": [ "This endpoint is used to retrieve all watch history items." ], "endpoint": "/api/v1/continuity/history", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "continuity.WatchHistory", "returnGoType": "continuity.WatchHistory", "returnTypescriptType": "Continuity_WatchHistory" } }, { "name": "HandleGetDebridSettings", "trimmedName": "GetDebridSettings", "comments": [ "HandleGetDebridSettings", "", "\t@summary get debrid settings.", "\t@desc This returns the debrid settings.", "\t@returns models.DebridSettings", "\t@route /api/v1/debrid/settings [GET]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "get debrid settings.", "descriptions": [ "This returns the debrid settings." ], "endpoint": "/api/v1/debrid/settings", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "models.DebridSettings", "returnGoType": "models.DebridSettings", "returnTypescriptType": "Models_DebridSettings" } }, { "name": "HandleSaveDebridSettings", "trimmedName": "SaveDebridSettings", "comments": [ "HandleSaveDebridSettings", "", "\t@summary save debrid settings.", "\t@desc This saves the debrid settings.", "\t@desc The client should refetch the server status.", "\t@returns models.DebridSettings", "\t@route /api/v1/debrid/settings [PATCH]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "save debrid settings.", "descriptions": [ "This saves the debrid settings.", "The client should refetch the server status." ], "endpoint": "/api/v1/debrid/settings", "methods": [ "PATCH" ], "params": [], "bodyFields": [ { "name": "Settings", "jsonName": "settings", "goType": "models.DebridSettings", "usedStructType": "models.DebridSettings", "typescriptType": "Models_DebridSettings", "required": true, "descriptions": [] } ], "returns": "models.DebridSettings", "returnGoType": "models.DebridSettings", "returnTypescriptType": "Models_DebridSettings" } }, { "name": "HandleDebridAddTorrents", "trimmedName": "DebridAddTorrents", "comments": [ "HandleDebridAddTorrents", "", "\t@summary add torrent to debrid.", "\t@desc This adds a torrent to the debrid service.", "\t@returns bool", "\t@route /api/v1/debrid/torrents [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "add torrent to debrid.", "descriptions": [ "This adds a torrent to the debrid service." ], "endpoint": "/api/v1/debrid/torrents", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Torrents", "jsonName": "torrents", "goType": "[]hibiketorrent.AnimeTorrent", "usedStructType": "hibiketorrent.AnimeTorrent", "typescriptType": "Array\u003cHibikeTorrent_AnimeTorrent\u003e", "required": true, "descriptions": [] }, { "name": "Media", "jsonName": "media", "goType": "anilist.BaseAnime", "usedStructType": "anilist.BaseAnime", "typescriptType": "AL_BaseAnime", "required": false, "descriptions": [] }, { "name": "Destination", "jsonName": "destination", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDebridDownloadTorrent", "trimmedName": "DebridDownloadTorrent", "comments": [ "HandleDebridDownloadTorrent", "", "\t@summary download torrent from debrid.", "\t@desc Manually downloads a torrent from the debrid service locally.", "\t@returns bool", "\t@route /api/v1/debrid/torrents/download [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "download torrent from debrid.", "descriptions": [ "Manually downloads a torrent from the debrid service locally." ], "endpoint": "/api/v1/debrid/torrents/download", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "TorrentItem", "jsonName": "torrentItem", "goType": "debrid.TorrentItem", "usedStructType": "debrid.TorrentItem", "typescriptType": "Debrid_TorrentItem", "required": true, "descriptions": [] }, { "name": "Destination", "jsonName": "destination", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDebridCancelDownload", "trimmedName": "DebridCancelDownload", "comments": [ "HandleDebridCancelDownload", "", "\t@summary cancel download from debrid.", "\t@desc This cancels a download from the debrid service.", "\t@returns bool", "\t@route /api/v1/debrid/torrents/cancel [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "cancel download from debrid.", "descriptions": [ "This cancels a download from the debrid service." ], "endpoint": "/api/v1/debrid/torrents/cancel", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ItemID", "jsonName": "itemID", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDebridDeleteTorrent", "trimmedName": "DebridDeleteTorrent", "comments": [ "HandleDebridDeleteTorrent", "", "\t@summary remove torrent from debrid.", "\t@desc This removes a torrent from the debrid service.", "\t@returns bool", "\t@route /api/v1/debrid/torrent [DELETE]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "remove torrent from debrid.", "descriptions": [ "This removes a torrent from the debrid service." ], "endpoint": "/api/v1/debrid/torrent", "methods": [ "DELETE" ], "params": [], "bodyFields": [ { "name": "TorrentItem", "jsonName": "torrentItem", "goType": "debrid.TorrentItem", "usedStructType": "debrid.TorrentItem", "typescriptType": "Debrid_TorrentItem", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDebridGetTorrents", "trimmedName": "DebridGetTorrents", "comments": [ "HandleDebridGetTorrents", "", "\t@summary get torrents from debrid.", "\t@desc This gets the torrents from the debrid service.", "\t@returns []debrid.TorrentItem", "\t@route /api/v1/debrid/torrents [GET]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "get torrents from debrid.", "descriptions": [ "This gets the torrents from the debrid service." ], "endpoint": "/api/v1/debrid/torrents", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]debrid.TorrentItem", "returnGoType": "debrid.TorrentItem", "returnTypescriptType": "Array\u003cDebrid_TorrentItem\u003e" } }, { "name": "HandleDebridGetTorrentInfo", "trimmedName": "DebridGetTorrentInfo", "comments": [ "HandleDebridGetTorrentInfo", "", "\t@summary get torrent info from debrid.", "\t@desc This gets the torrent info from the debrid service.", "\t@returns debrid.TorrentInfo", "\t@route /api/v1/debrid/torrents/info [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "get torrent info from debrid.", "descriptions": [ "This gets the torrent info from the debrid service." ], "endpoint": "/api/v1/debrid/torrents/info", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Torrent", "jsonName": "torrent", "goType": "hibiketorrent.AnimeTorrent", "usedStructType": "hibiketorrent.AnimeTorrent", "typescriptType": "HibikeTorrent_AnimeTorrent", "required": true, "descriptions": [] } ], "returns": "debrid.TorrentInfo", "returnGoType": "debrid.TorrentInfo", "returnTypescriptType": "Debrid_TorrentInfo" } }, { "name": "HandleDebridGetTorrentFilePreviews", "trimmedName": "DebridGetTorrentFilePreviews", "comments": [ "HandleDebridGetTorrentFilePreviews", "", "\t@summary get list of torrent files", "\t@returns []debrid_client.FilePreview", "\t@route /api/v1/debrid/torrents/file-previews [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "get list of torrent files", "descriptions": [], "endpoint": "/api/v1/debrid/torrents/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": "[]debrid_client.FilePreview", "returnGoType": "debrid_client.FilePreview", "returnTypescriptType": "Array\u003cDebridClient_FilePreview\u003e" } }, { "name": "HandleDebridStartStream", "trimmedName": "DebridStartStream", "comments": [ "HandleDebridStartStream", "", "\t@summary start stream from debrid.", "\t@desc This starts streaming a torrent from the debrid service.", "\t@returns bool", "\t@route /api/v1/debrid/stream/start [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "start stream from debrid.", "descriptions": [ "This starts streaming a torrent from the debrid service." ], "endpoint": "/api/v1/debrid/stream/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": "FileId", "jsonName": "fileId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "FileIndex", "jsonName": "fileIndex", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": false, "descriptions": [] }, { "name": "PlaybackType", "jsonName": "playbackType", "goType": "debrid_client.StreamPlaybackType", "usedStructType": "debrid_client.StreamPlaybackType", "typescriptType": "DebridClient_StreamPlaybackType", "required": true, "descriptions": [] }, { "name": "ClientId", "jsonName": "clientId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDebridCancelStream", "trimmedName": "DebridCancelStream", "comments": [ "HandleDebridCancelStream", "", "\t@summary cancel stream from debrid.", "\t@desc This cancels a stream from the debrid service.", "\t@returns bool", "\t@route /api/v1/debrid/stream/cancel [POST]", "" ], "filepath": "internal/handlers/debrid.go", "filename": "debrid.go", "api": { "summary": "cancel stream from debrid.", "descriptions": [ "This cancels a stream from the debrid service." ], "endpoint": "/api/v1/debrid/stream/cancel", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Options", "jsonName": "options", "goType": "debrid_client.CancelStreamOptions", "usedStructType": "debrid_client.CancelStreamOptions", "typescriptType": "DebridClient_CancelStreamOptions", "required": false, "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": "HandleDirectstreamPlayLocalFile", "trimmedName": "DirectstreamPlayLocalFile", "comments": [ "HandleDirectstreamPlayLocalFile", "", "\t@summary request local file stream.", "\t@desc This requests a local file stream and returns the media container to start the playback.", "\t@returns mediastream.MediaContainer", "\t@route /api/v1/directstream/play/localfile [POST]", "" ], "filepath": "internal/handlers/directstream.go", "filename": "directstream.go", "api": { "summary": "request local file stream.", "descriptions": [ "This requests a local file stream and returns the media container to start the playback." ], "endpoint": "/api/v1/directstream/play/localfile", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Path", "jsonName": "path", "goType": "string", "usedStructType": "", "typescriptType": "string", "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": "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": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "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": "HandleSetDiscordLegacyAnimeActivity", "trimmedName": "SetDiscordLegacyAnimeActivity", "comments": [ "HandleSetDiscordLegacyAnimeActivity", "", "\t@summary sets anime activity for discord rich presence.", "\t@route /api/v1/discord/presence/legacy-anime [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/discord.go", "filename": "discord.go", "api": { "summary": "sets anime activity for discord rich presence.", "descriptions": [], "endpoint": "/api/v1/discord/presence/legacy-anime", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "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": "IsMovie", "jsonName": "isMovie", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] }, { "name": "EpisodeNumber", "jsonName": "episodeNumber", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleSetDiscordAnimeActivityWithProgress", "trimmedName": "SetDiscordAnimeActivityWithProgress", "comments": [ "HandleSetDiscordAnimeActivityWithProgress", "", "\t@summary sets anime activity for discord rich presence with progress.", "\t@route /api/v1/discord/presence/anime [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/discord.go", "filename": "discord.go", "api": { "summary": "sets anime activity for discord rich presence with progress.", "descriptions": [], "endpoint": "/api/v1/discord/presence/anime", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "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": "IsMovie", "jsonName": "isMovie", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] }, { "name": "EpisodeNumber", "jsonName": "episodeNumber", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Progress", "jsonName": "progress", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Duration", "jsonName": "duration", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "TotalEpisodes", "jsonName": "totalEpisodes", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": false, "descriptions": [] }, { "name": "CurrentEpisodeCount", "jsonName": "currentEpisodeCount", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": false, "descriptions": [] }, { "name": "EpisodeTitle", "jsonName": "episodeTitle", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": false, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleUpdateDiscordAnimeActivityWithProgress", "trimmedName": "UpdateDiscordAnimeActivityWithProgress", "comments": [ "HandleUpdateDiscordAnimeActivityWithProgress", "", "\t@summary updates the anime activity for discord rich presence with progress.", "\t@route /api/v1/discord/presence/anime-update [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/discord.go", "filename": "discord.go", "api": { "summary": "updates the anime activity for discord rich presence with progress.", "descriptions": [], "endpoint": "/api/v1/discord/presence/anime-update", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Progress", "jsonName": "progress", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Duration", "jsonName": "duration", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Paused", "jsonName": "paused", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "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 []handlers.ApiDocsGroup", "" ], "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": "[]handlers.ApiDocsGroup", "returnGoType": "handlers.ApiDocsGroup", "returnTypescriptType": "Array\u003cApiDocsGroup\u003e" } }, { "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": "HandleUpdateExtensionCode", "trimmedName": "UpdateExtensionCode", "comments": [ "HandleUpdateExtensionCode", "", "\t@summary updates the extension code with the given ID and reloads the extensions.", "\t@route /api/v1/extensions/external/edit-payload [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "updates the extension code with the given ID and reloads the extensions.", "descriptions": [], "endpoint": "/api/v1/extensions/external/edit-payload", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ID", "jsonName": "id", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Payload", "jsonName": "payload", "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": "HandleReloadExternalExtension", "trimmedName": "ReloadExternalExtension", "comments": [ "HandleReloadExternalExtension", "", "\t@summary reloads the external extension with the given ID.", "\t@route /api/v1/extensions/external/reload [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "reloads the external extension with the given ID.", "descriptions": [], "endpoint": "/api/v1/extensions/external/reload", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ID", "jsonName": "id", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "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": "HandleGetExtensionPayload", "trimmedName": "GetExtensionPayload", "comments": [ "HandleGetExtensionPayload", "", "\t@summary returns the payload of the extension with the given ID.", "\t@route /api/v1/extensions/payload/{id} [GET]", "\t@returns string", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the payload of the extension with the given ID.", "descriptions": [], "endpoint": "/api/v1/extensions/payload/{id}", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "name": "HandleListDevelopmentModeExtensions", "trimmedName": "ListDevelopmentModeExtensions", "comments": [ "HandleListDevelopmentModeExtensions", "", "\t@summary returns the development mode extensions", "\t@route /api/v1/extensions/list/development [GET]", "\t@returns []extension.Extension", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the development mode extensions", "descriptions": [], "endpoint": "/api/v1/extensions/list/development", "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": "HandleGetExtensionUpdateData", "trimmedName": "GetExtensionUpdateData", "comments": [ "HandleGetExtensionUpdateData", "", "\t@summary returns the update data that were found for the extensions.", "\t@route /api/v1/extensions/updates [GET]", "\t@returns []extension_repo.UpdateData", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the update data that were found for the extensions.", "descriptions": [], "endpoint": "/api/v1/extensions/updates", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]extension_repo.UpdateData", "returnGoType": "extension_repo.UpdateData", "returnTypescriptType": "Array\u003cExtensionRepo_UpdateData\u003e" } }, { "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": "HandleGetPluginSettings", "trimmedName": "GetPluginSettings", "comments": [ "HandleGetPluginSettings", "", "\t@summary returns the plugin settings.", "\t@route /api/v1/extensions/plugin-settings [GET]", "\t@returns extension_repo.StoredPluginSettingsData", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the plugin settings.", "descriptions": [], "endpoint": "/api/v1/extensions/plugin-settings", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "extension_repo.StoredPluginSettingsData", "returnGoType": "extension_repo.StoredPluginSettingsData", "returnTypescriptType": "ExtensionRepo_StoredPluginSettingsData" } }, { "name": "HandleSetPluginSettingsPinnedTrays", "trimmedName": "SetPluginSettingsPinnedTrays", "comments": [ "HandleSetPluginSettingsPinnedTrays", "", "\t@summary sets the pinned trays in the plugin settings.", "\t@route /api/v1/extensions/plugin-settings/pinned-trays [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "sets the pinned trays in the plugin settings.", "descriptions": [], "endpoint": "/api/v1/extensions/plugin-settings/pinned-trays", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "PinnedTrayPluginIds", "jsonName": "pinnedTrayPluginIds", "goType": "[]string", "usedStructType": "", "typescriptType": "Array\u003cstring\u003e", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGrantPluginPermissions", "trimmedName": "GrantPluginPermissions", "comments": [ "HandleGrantPluginPermissions", "", "\t@summary grants the plugin permissions to the extension with the given ID.", "\t@route /api/v1/extensions/plugin-permissions/grant [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "grants the plugin permissions to the extension with the given ID.", "descriptions": [], "endpoint": "/api/v1/extensions/plugin-permissions/grant", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ID", "jsonName": "id", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleRunExtensionPlaygroundCode", "trimmedName": "RunExtensionPlaygroundCode", "comments": [ "HandleRunExtensionPlaygroundCode", "", "\t@summary runs the code in the extension playground.", "\t@desc Returns the logs", "\t@route /api/v1/extensions/playground/run [POST]", "\t@returns extension_playground.RunPlaygroundCodeResponse", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "runs the code in the extension playground.", "descriptions": [ "Returns the logs" ], "endpoint": "/api/v1/extensions/playground/run", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Params", "jsonName": "params", "goType": "extension_playground.RunPlaygroundCodeParams", "usedStructType": "extension_playground.RunPlaygroundCodeParams", "typescriptType": "RunPlaygroundCodeParams", "required": false, "descriptions": [] } ], "returns": "extension_playground.RunPlaygroundCodeResponse", "returnGoType": "extension_playground.RunPlaygroundCodeResponse", "returnTypescriptType": "RunPlaygroundCodeResponse" } }, { "name": "HandleGetExtensionUserConfig", "trimmedName": "GetExtensionUserConfig", "comments": [ "HandleGetExtensionUserConfig", "", "\t@summary returns the user config definition and current values for the extension with the given ID.", "\t@route /api/v1/extensions/user-config/{id} [GET]", "\t@returns extension_repo.ExtensionUserConfig", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the user config definition and current values for the extension with the given ID.", "descriptions": [], "endpoint": "/api/v1/extensions/user-config/{id}", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "extension_repo.ExtensionUserConfig", "returnGoType": "extension_repo.ExtensionUserConfig", "returnTypescriptType": "ExtensionRepo_ExtensionUserConfig" } }, { "name": "HandleSaveExtensionUserConfig", "trimmedName": "SaveExtensionUserConfig", "comments": [ "HandleSaveExtensionUserConfig", "", "\t@summary saves the user config for the extension with the given ID and reloads it.", "\t@route /api/v1/extensions/user-config [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "saves the user config for the extension with the given ID and reloads it.", "descriptions": [], "endpoint": "/api/v1/extensions/user-config", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ID", "jsonName": "id", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Version", "jsonName": "version", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Values", "jsonName": "values", "goType": "map[string]string", "usedStructType": "", "typescriptType": "Record\u003cstring, string\u003e", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetMarketplaceExtensions", "trimmedName": "GetMarketplaceExtensions", "comments": [ "HandleGetMarketplaceExtensions", "", "\t@summary returns the marketplace extensions.", "\t@route /api/v1/extensions/marketplace [GET]", "\t@returns []extension.Extension", "" ], "filepath": "internal/handlers/extensions.go", "filename": "extensions.go", "api": { "summary": "returns the marketplace extensions.", "descriptions": [], "endpoint": "/api/v1/extensions/marketplace", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]extension.Extension", "returnGoType": "extension.Extension", "returnTypescriptType": "Array\u003cExtension_Extension\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 string", "" ], "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": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "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 string", "" ], "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": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "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": "HandleSetOfflineMode", "trimmedName": "SetOfflineMode", "comments": [ "HandleSetOfflineMode", "", "\t@summary sets the offline mode.", "\t@desc Returns true if the offline mode is active, false otherwise.", "\t@route /api/v1/local/offline [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "sets the offline mode.", "descriptions": [ "Returns true if the offline mode is active, false otherwise." ], "endpoint": "/api/v1/local/offline", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Enabled", "jsonName": "enabled", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalGetTrackedMediaItems", "trimmedName": "LocalGetTrackedMediaItems", "comments": [ "HandleLocalGetTrackedMediaItems", "", "\t@summary gets all tracked media.", "\t@route /api/v1/local/track [GET]", "\t@returns []local.TrackedMediaItem", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "gets all tracked media.", "descriptions": [], "endpoint": "/api/v1/local/track", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]local.TrackedMediaItem", "returnGoType": "local.TrackedMediaItem", "returnTypescriptType": "Array\u003cLocal_TrackedMediaItem\u003e" } }, { "name": "HandleLocalAddTrackedMedia", "trimmedName": "LocalAddTrackedMedia", "comments": [ "HandleLocalAddTrackedMedia", "", "\t@summary adds one or multiple media to be tracked for offline sync.", "\t@route /api/v1/local/track [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "adds one or multiple media to be tracked for offline sync.", "descriptions": [], "endpoint": "/api/v1/local/track", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Media", "jsonName": "media", "goType": "[]__STRUCT__", "inlineStructType": "[]struct{\nMediaId int `json:\"mediaId\"`\nType string `json:\"type\"`}", "usedStructType": "", "typescriptType": "Array\u003c{ mediaId: number; type: string; }\u003e", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalRemoveTrackedMedia", "trimmedName": "LocalRemoveTrackedMedia", "comments": [ "HandleLocalRemoveTrackedMedia", "", "\t@summary remove media from being tracked for offline sync.", "\t@desc This will remove anime from being tracked for offline sync and delete any associated data.", "\t@route /api/v1/local/track [DELETE]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "remove media from being tracked for offline sync.", "descriptions": [ "This will remove anime from being tracked for offline sync and delete any associated data." ], "endpoint": "/api/v1/local/track", "methods": [ "DELETE" ], "params": [], "bodyFields": [ { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "Type", "jsonName": "type", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalGetIsMediaTracked", "trimmedName": "LocalGetIsMediaTracked", "comments": [ "HandleLocalGetIsMediaTracked", "", "\t@summary checks if media is being tracked for offline sync.", "\t@route /api/v1/local/track/{id}/{type} [GET]", "\t@param id - int - true - \"AniList anime media ID\"", "\t@param type - string - true - \"Type of media (anime/manga)\"", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "checks if media is being tracked for offline sync.", "descriptions": [], "endpoint": "/api/v1/local/track/{id}/{type}", "methods": [ "GET" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "AniList anime media ID" ] }, { "name": "type", "jsonName": "type", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [ "Type of media (anime/manga)" ] } ], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalSyncData", "trimmedName": "LocalSyncData", "comments": [ "HandleLocalSyncData", "", "\t@summary syncs local data with AniList.", "\t@route /api/v1/local/local [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "syncs local data with AniList.", "descriptions": [], "endpoint": "/api/v1/local/local", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalGetSyncQueueState", "trimmedName": "LocalGetSyncQueueState", "comments": [ "HandleLocalGetSyncQueueState", "", "\t@summary gets the current sync queue state.", "\t@desc This will return the list of media that are currently queued for syncing.", "\t@route /api/v1/local/queue [GET]", "\t@returns local.QueueState", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "gets the current sync queue state.", "descriptions": [ "This will return the list of media that are currently queued for syncing." ], "endpoint": "/api/v1/local/queue", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "local.QueueState", "returnGoType": "local.QueueState", "returnTypescriptType": "Local_QueueState" } }, { "name": "HandleLocalSyncAnilistData", "trimmedName": "LocalSyncAnilistData", "comments": [ "HandleLocalSyncAnilistData", "", "\t@summary syncs AniList data with local.", "\t@route /api/v1/local/anilist [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "syncs AniList data with local.", "descriptions": [], "endpoint": "/api/v1/local/anilist", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalSetHasLocalChanges", "trimmedName": "LocalSetHasLocalChanges", "comments": [ "HandleLocalSetHasLocalChanges", "", "\t@summary sets the flag to determine if there are local changes that need to be synced with AniList.", "\t@route /api/v1/local/updated [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "sets the flag to determine if there are local changes that need to be synced with AniList.", "descriptions": [], "endpoint": "/api/v1/local/updated", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Updated", "jsonName": "updated", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalGetHasLocalChanges", "trimmedName": "LocalGetHasLocalChanges", "comments": [ "HandleLocalGetHasLocalChanges", "", "\t@summary gets the flag to determine if there are local changes that need to be synced with AniList.", "\t@route /api/v1/local/updated [GET]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "gets the flag to determine if there are local changes that need to be synced with AniList.", "descriptions": [], "endpoint": "/api/v1/local/updated", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleLocalGetLocalStorageSize", "trimmedName": "LocalGetLocalStorageSize", "comments": [ "HandleLocalGetLocalStorageSize", "", "\t@summary gets the size of the local storage in a human-readable format.", "\t@route /api/v1/local/storage/size [GET]", "\t@returns string", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "gets the size of the local storage in a human-readable format.", "descriptions": [], "endpoint": "/api/v1/local/storage/size", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "name": "HandleLocalSyncSimulatedDataToAnilist", "trimmedName": "LocalSyncSimulatedDataToAnilist", "comments": [ "HandleLocalSyncSimulatedDataToAnilist", "", "\t@summary syncs the simulated data to AniList.", "\t@route /api/v1/local/sync-simulated-to-anilist [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/local.go", "filename": "local.go", "api": { "summary": "syncs the simulated data to AniList.", "descriptions": [], "endpoint": "/api/v1/local/sync-simulated-to-anilist", "methods": [ "POST" ], "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": "HandleImportLocalFiles", "trimmedName": "ImportLocalFiles", "comments": [ "HandleImportLocalFiles", "", "\t@summary imports local files from the given path.", "\t@desc This will import local files from 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-files/import [POST]", "" ], "filepath": "internal/handlers/localfiles.go", "filename": "localfiles.go", "api": { "summary": "imports local files from the given path.", "descriptions": [ "This will import local files from the given path.", "The response is ignored, the client should refetch the entire library collection and media entry." ], "endpoint": "/api/v1/library/local-files/import", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "DataFilePath", "jsonName": "dataFilePath", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "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": "HandleUpdateLocalFiles", "trimmedName": "UpdateLocalFiles", "comments": [ "HandleUpdateLocalFiles", "", "\t@summary updates local files with the given paths.", "\t@desc The client should refetch the entire library collection and media entry.", "\t@route /api/v1/library/local-files [PATCH]", "\t@returns bool", "" ], "filepath": "internal/handlers/localfiles.go", "filename": "localfiles.go", "api": { "summary": "updates local files with the given paths.", "descriptions": [ "The client should refetch the entire library collection and media entry." ], "endpoint": "/api/v1/library/local-files", "methods": [ "PATCH" ], "params": [], "bodyFields": [ { "name": "Paths", "jsonName": "paths", "goType": "[]string", "usedStructType": "", "typescriptType": "Array\u003cstring\u003e", "required": true, "descriptions": [] }, { "name": "Action", "jsonName": "action", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": false, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDeleteLocalFiles", "trimmedName": "DeleteLocalFiles", "comments": [ "HandleDeleteLocalFiles", "", "\t@summary deletes local files with the given paths.", "\t@desc This will delete the local files with the given paths.", "\t@desc The client should refetch the entire library collection and media entry.", "\t@route /api/v1/library/local-files [DELETE]", "\t@returns bool", "" ], "filepath": "internal/handlers/localfiles.go", "filename": "localfiles.go", "api": { "summary": "deletes local files with the given paths.", "descriptions": [ "This will delete the local files with the given paths.", "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": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleRemoveEmptyDirectories", "trimmedName": "RemoveEmptyDirectories", "comments": [ "HandleRemoveEmptyDirectories", "", "\t@summary removes empty directories.", "\t@desc This will remove empty directories in the library path.", "\t@route /api/v1/library/empty-directories [DELETE]", "\t@returns bool", "" ], "filepath": "internal/handlers/localfiles.go", "filename": "localfiles.go", "api": { "summary": "removes empty directories.", "descriptions": [ "This will remove empty directories in the library path." ], "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": "HandleGetMangaLatestChapterNumbersMap", "trimmedName": "GetMangaLatestChapterNumbersMap", "comments": [ "HandleGetMangaLatestChapterNumbersMap", "", "\t@summary returns the latest chapter number for all manga entries.", "\t@route /api/v1/manga/latest-chapter-numbers [GET]", "\t@returns map[int][]manga.MangaLatestChapterNumberItem", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "returns the latest chapter number for all manga entries.", "descriptions": [], "endpoint": "/api/v1/manga/latest-chapter-numbers", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "map[int][]manga.MangaLatestChapterNumberItem", "returnGoType": "manga.MangaLatestChapterNumberItem", "returnTypescriptType": "Record\u003cnumber, Array\u003cManga_MangaLatestChapterNumberItem\u003e\u003e" } }, { "name": "HandleRefetchMangaChapterContainers", "trimmedName": "RefetchMangaChapterContainers", "comments": [ "HandleRefetchMangaChapterContainers", "", "\t@summary refetches the chapter containers for all manga entries previously cached.", "\t@route /api/v1/manga/refetch-chapter-containers [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "refetches the chapter containers for all manga entries previously cached.", "descriptions": [], "endpoint": "/api/v1/manga/refetch-chapter-containers", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "SelectedProviderMap", "jsonName": "selectedProviderMap", "goType": "map[int]string", "usedStructType": "", "typescriptType": "Record\u003cnumber, string\u003e", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "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": "HandleGetMangaEntryDownloadedChapters", "trimmedName": "GetMangaEntryDownloadedChapters", "comments": [ "HandleGetMangaEntryDownloadedChapters", "", "\t@summary returns all download chapters for a manga entry,", "\t@route /api/v1/manga/downloaded-chapters/{id} [GET]", "\t@param id - int - true - \"AniList manga media ID\"", "\t@returns []manga.ChapterContainer", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "returns all download chapters for a manga entry,", "descriptions": [], "endpoint": "/api/v1/manga/downloaded-chapters/{id}", "methods": [ "GET" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "AniList manga media ID" ] } ], "bodyFields": [], "returns": "[]manga.ChapterContainer", "returnGoType": "manga.ChapterContainer", "returnTypescriptType": "Array\u003cManga_ChapterContainer\u003e" } }, { "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": "CountryOfOrigin", "jsonName": "countryOfOrigin", "goType": "string", "usedStructType": "", "typescriptType": "string", "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": "HandleMangaManualSearch", "trimmedName": "MangaManualSearch", "comments": [ "HandleMangaManualSearch", "", "\t@summary returns search results for a manual search.", "\t@desc Returns search results for a manual search.", "\t@route /api/v1/manga/search [POST]", "\t@returns []hibikemanga.SearchResult", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "returns search results for a manual search.", "descriptions": [ "Returns search results for a manual search." ], "endpoint": "/api/v1/manga/search", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Query", "jsonName": "query", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "[]hibikemanga.SearchResult", "returnGoType": "hibikemanga.SearchResult", "returnTypescriptType": "Array\u003cHibikeManga_SearchResult\u003e" } }, { "name": "HandleMangaManualMapping", "trimmedName": "MangaManualMapping", "comments": [ "HandleMangaManualMapping", "", "\t@summary manually maps a manga entry to a manga ID from the provider.", "\t@desc This is used to manually map a manga entry to a manga ID from the provider.", "\t@desc The client should re-fetch the chapter container after this.", "\t@route /api/v1/manga/manual-mapping [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "manually maps a manga entry to a manga ID from the provider.", "descriptions": [ "This is used to manually map a manga entry to a manga ID from the provider.", "The client should re-fetch the chapter container after this." ], "endpoint": "/api/v1/manga/manual-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "MangaId", "jsonName": "mangaId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetMangaMapping", "trimmedName": "GetMangaMapping", "comments": [ "HandleGetMangaMapping", "", "\t@summary returns the mapping for a manga entry.", "\t@desc This is used to get the mapping for a manga entry.", "\t@desc An empty string is returned if there's no manual mapping. If there is, the manga ID will be returned.", "\t@route /api/v1/manga/get-mapping [POST]", "\t@returns manga.MappingResponse", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "returns the mapping for a manga entry.", "descriptions": [ "This is used to get the mapping for a manga entry.", "An empty string is returned if there's no manual mapping. If there is, the manga ID will be returned." ], "endpoint": "/api/v1/manga/get-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] } ], "returns": "manga.MappingResponse", "returnGoType": "manga.MappingResponse", "returnTypescriptType": "Manga_MappingResponse" } }, { "name": "HandleRemoveMangaMapping", "trimmedName": "RemoveMangaMapping", "comments": [ "HandleRemoveMangaMapping", "", "\t@summary removes the mapping for a manga entry.", "\t@desc This is used to remove the mapping for a manga entry.", "\t@desc The client should re-fetch the chapter container after this.", "\t@route /api/v1/manga/remove-mapping [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "removes the mapping for a manga entry.", "descriptions": [ "This is used to remove the mapping for a manga entry.", "The client should re-fetch the chapter container after this." ], "endpoint": "/api/v1/manga/remove-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetLocalMangaPage", "trimmedName": "GetLocalMangaPage", "comments": [ "HandleGetLocalMangaPage", "", "\t@summary returns a local manga page.", "\t@route /api/v1/manga/local-page/{path} [GET]", "\t@returns manga.PageContainer", "" ], "filepath": "internal/handlers/manga.go", "filename": "manga.go", "api": { "summary": "returns a local manga page.", "descriptions": [], "endpoint": "/api/v1/manga/local-page/{path}", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "manga.PageContainer", "returnGoType": "manga.PageContainer", "returnTypescriptType": "Manga_PageContainer" } }, { "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": "bool", "returnGoType": "bool", "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": "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": "HandleNakamaWebSocket", "trimmedName": "NakamaWebSocket", "comments": [ "HandleNakamaWebSocket handles WebSocket connections for Nakama peers", "", "\t@summary handles WebSocket connections for Nakama peers.", "\t@desc This endpoint handles WebSocket connections from Nakama peers when this instance is acting as a host.", "\t@route /api/v1/nakama/ws [GET]", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "handles WebSocket connections for Nakama peers.", "descriptions": [ "This endpoint handles WebSocket connections from Nakama peers when this instance is acting as a host." ], "endpoint": "/api/v1/nakama/ws", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleSendNakamaMessage", "trimmedName": "SendNakamaMessage", "comments": [ "HandleSendNakamaMessage", "", "\t@summary sends a custom message through Nakama.", "\t@desc This allows sending custom messages to connected peers or the host.", "\t@route /api/v1/nakama/message [POST]", "\t@returns nakama.MessageResponse", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "sends a custom message through Nakama.", "descriptions": [ "This allows sending custom messages to connected peers or the host." ], "endpoint": "/api/v1/nakama/message", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "MessageType", "jsonName": "messageType", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Payload", "jsonName": "payload", "goType": "", "usedStructType": "", "typescriptType": "any", "required": true, "descriptions": [] }, { "name": "PeerID", "jsonName": "peerId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": false, "descriptions": [] } ], "returns": "nakama.MessageResponse", "returnGoType": "nakama.MessageResponse", "returnTypescriptType": "Nakama_MessageResponse" } }, { "name": "HandleGetNakamaAnimeLibrary", "trimmedName": "GetNakamaAnimeLibrary", "comments": [ "HandleGetNakamaAnimeLibrary", "", "\t@summary shares the local anime collection with Nakama clients.", "\t@desc This creates a new LibraryCollection struct and returns it.", "\t@desc This is used to share the local anime collection with Nakama clients.", "\t@route /api/v1/nakama/host/anime/library/collection [GET]", "\t@returns nakama.NakamaAnimeLibrary", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "shares the local anime collection with Nakama clients.", "descriptions": [ "This creates a new LibraryCollection struct and returns it.", "This is used to share the local anime collection with Nakama clients." ], "endpoint": "/api/v1/nakama/host/anime/library/collection", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "nakama.NakamaAnimeLibrary", "returnGoType": "nakama.NakamaAnimeLibrary", "returnTypescriptType": "Nakama_NakamaAnimeLibrary" } }, { "name": "HandleGetNakamaAnimeLibraryCollection", "trimmedName": "GetNakamaAnimeLibraryCollection", "comments": [ "HandleGetNakamaAnimeLibraryCollection", "", "\t@summary shares the local anime collection with Nakama clients.", "\t@desc This creates a new LibraryCollection struct and returns it.", "\t@desc This is used to share the local anime collection with Nakama clients.", "\t@route /api/v1/nakama/host/anime/library/collection [GET]", "\t@returns anime.LibraryCollection", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "shares the local anime collection with Nakama clients.", "descriptions": [ "This creates a new LibraryCollection struct and returns it.", "This is used to share the local anime collection with Nakama clients." ], "endpoint": "/api/v1/nakama/host/anime/library/collection", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "anime.LibraryCollection", "returnGoType": "anime.LibraryCollection", "returnTypescriptType": "Anime_LibraryCollection" } }, { "name": "HandleGetNakamaAnimeLibraryFiles", "trimmedName": "GetNakamaAnimeLibraryFiles", "comments": [ "HandleGetNakamaAnimeLibraryFiles", "", "\t@summary return the local files 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@route /api/v1/nakama/host/anime/library/files/{id} [POST]", "\t@param id - int - true - \"AniList anime media ID\"", "\t@returns []anime.LocalFile", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "return the local files 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." ], "endpoint": "/api/v1/nakama/host/anime/library/files/{id}", "methods": [ "POST" ], "params": [ { "name": "id", "jsonName": "id", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [ "AniList anime media ID" ] } ], "bodyFields": [], "returns": "[]anime.LocalFile", "returnGoType": "anime.LocalFile", "returnTypescriptType": "Array\u003cAnime_LocalFile\u003e" } }, { "name": "HandleGetNakamaAnimeAllLibraryFiles", "trimmedName": "GetNakamaAnimeAllLibraryFiles", "comments": [ "HandleGetNakamaAnimeAllLibraryFiles", "", "\t@summary return all the local files for the host.", "\t@desc This is used to share the local anime collection with Nakama clients.", "\t@route /api/v1/nakama/host/anime/library/files [POST]", "\t@returns []anime.LocalFile", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "return all the local files for the host.", "descriptions": [ "This is used to share the local anime collection with Nakama clients." ], "endpoint": "/api/v1/nakama/host/anime/library/files", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "[]anime.LocalFile", "returnGoType": "anime.LocalFile", "returnTypescriptType": "Array\u003cAnime_LocalFile\u003e" } }, { "name": "HandleNakamaPlayVideo", "trimmedName": "NakamaPlayVideo", "comments": [ "HandleNakamaPlayVideo", "", "\t@summary plays the media from the host.", "\t@route /api/v1/nakama/play [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "plays the media from the host.", "descriptions": [], "endpoint": "/api/v1/nakama/play", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Path", "jsonName": "path", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "AniDBEpisode", "jsonName": "anidbEpisode", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaHostTorrentstreamServeStream", "trimmedName": "NakamaHostTorrentstreamServeStream", "comments": [ "Note: This is not used anymore. Each peer will independently stream the torrent.", "route /api/v1/nakama/host/torrentstream/stream", "Allows peers to stream the currently playing torrent.", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaHostDebridstreamServeStream", "trimmedName": "NakamaHostDebridstreamServeStream", "comments": [ "route /api/v1/nakama/host/debridstream/stream", "Allows peers to stream the currently playing torrent.", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaHostGetDebridstreamURL", "trimmedName": "NakamaHostGetDebridstreamURL", "comments": [ "route /api/v1/nakama/host/debridstream/url", "Returns the debrid stream URL for direct access by peers to avoid host bandwidth usage", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaHostAnimeLibraryServeStream", "trimmedName": "NakamaHostAnimeLibraryServeStream", "comments": [ "route /api/v1/nakama/host/anime/library/stream?path={base64_encoded_path}", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaProxyStream", "trimmedName": "NakamaProxyStream", "comments": [ "route /api/v1/nakama/stream", "Proxies stream requests to the host. It inserts the Nakama password in the headers.", "It checks if the password is valid.", "For debrid streams, it redirects directly to the debrid service to avoid host bandwidth usage.", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaReconnectToHost", "trimmedName": "NakamaReconnectToHost", "comments": [ "HandleNakamaReconnectToHost", "", "\t@summary reconnects to the Nakama host.", "\t@desc This attempts to reconnect to the configured Nakama host if the connection was lost.", "\t@route /api/v1/nakama/reconnect [POST]", "\t@returns nakama.MessageResponse", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "reconnects to the Nakama host.", "descriptions": [ "This attempts to reconnect to the configured Nakama host if the connection was lost." ], "endpoint": "/api/v1/nakama/reconnect", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "nakama.MessageResponse", "returnGoType": "nakama.MessageResponse", "returnTypescriptType": "Nakama_MessageResponse" } }, { "name": "HandleNakamaRemoveStaleConnections", "trimmedName": "NakamaRemoveStaleConnections", "comments": [ "HandleNakamaRemoveStaleConnections", "", "\t@summary removes stale peer connections.", "\t@desc This removes peer connections that haven't responded to ping messages for a while.", "\t@route /api/v1/nakama/cleanup [POST]", "\t@returns nakama.MessageResponse", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "removes stale peer connections.", "descriptions": [ "This removes peer connections that haven't responded to ping messages for a while." ], "endpoint": "/api/v1/nakama/cleanup", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "nakama.MessageResponse", "returnGoType": "nakama.MessageResponse", "returnTypescriptType": "Nakama_MessageResponse" } }, { "name": "HandleNakamaCreateWatchParty", "trimmedName": "NakamaCreateWatchParty", "comments": [ "HandleNakamaCreateWatchParty", "", "\t@summary creates a new watch party session.", "\t@desc This creates a new watch party that peers can join to watch content together in sync.", "\t@route /api/v1/nakama/watch-party/create [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "creates a new watch party session.", "descriptions": [ "This creates a new watch party that peers can join to watch content together in sync." ], "endpoint": "/api/v1/nakama/watch-party/create", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Settings", "jsonName": "settings", "goType": "nakama.WatchPartySessionSettings", "usedStructType": "nakama.WatchPartySessionSettings", "typescriptType": "Nakama_WatchPartySessionSettings", "required": false, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaJoinWatchParty", "trimmedName": "NakamaJoinWatchParty", "comments": [ "HandleNakamaJoinWatchParty", "", "\t@summary joins an existing watch party.", "\t@desc This allows a peer to join an active watch party session.", "\t@route /api/v1/nakama/watch-party/join [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "joins an existing watch party.", "descriptions": [ "This allows a peer to join an active watch party session." ], "endpoint": "/api/v1/nakama/watch-party/join", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleNakamaLeaveWatchParty", "trimmedName": "NakamaLeaveWatchParty", "comments": [ "HandleNakamaLeaveWatchParty", "", "\t@summary leaves the current watch party.", "\t@desc This removes the user from the active watch party session.", "\t@route /api/v1/nakama/watch-party/leave [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/nakama.go", "filename": "nakama.go", "api": { "summary": "leaves the current watch party.", "descriptions": [ "This removes the user from the active watch party session." ], "endpoint": "/api/v1/nakama/watch-party/leave", "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": "HandleOnlinestreamManualSearch", "trimmedName": "OnlinestreamManualSearch", "comments": [ "HandleOnlinestreamManualSearch", "", "\t@summary returns search results for a manual search.", "\t@desc Returns search results for a manual search.", "\t@route /api/v1/onlinestream/search [POST]", "\t@returns []hibikeonlinestream.SearchResult", "" ], "filepath": "internal/handlers/onlinestream.go", "filename": "onlinestream.go", "api": { "summary": "returns search results for a manual search.", "descriptions": [ "Returns search results for a manual search." ], "endpoint": "/api/v1/onlinestream/search", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Query", "jsonName": "query", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "Dubbed", "jsonName": "dubbed", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] } ], "returns": "[]hibikeonlinestream.SearchResult", "returnGoType": "hibikeonlinestream.SearchResult", "returnTypescriptType": "Array\u003cHibikeOnlinestream_SearchResult\u003e" } }, { "name": "HandleOnlinestreamManualMapping", "trimmedName": "OnlinestreamManualMapping", "comments": [ "HandleOnlinestreamManualMapping", "", "\t@summary manually maps an anime entry to an anime ID from the provider.", "\t@desc This is used to manually map an anime entry to an anime ID from the provider.", "\t@desc The client should re-fetch the chapter container after this.", "\t@route /api/v1/onlinestream/manual-mapping [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/onlinestream.go", "filename": "onlinestream.go", "api": { "summary": "manually maps an anime entry to an anime ID from the provider.", "descriptions": [ "This is used to manually map an anime entry to an anime ID from the provider.", "The client should re-fetch the chapter container after this." ], "endpoint": "/api/v1/onlinestream/manual-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] }, { "name": "AnimeId", "jsonName": "animeId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetOnlinestreamMapping", "trimmedName": "GetOnlinestreamMapping", "comments": [ "HandleGetOnlinestreamMapping", "", "\t@summary returns the mapping for an anime entry.", "\t@desc This is used to get the mapping for an anime entry.", "\t@desc An empty string is returned if there's no manual mapping. If there is, the anime ID will be returned.", "\t@route /api/v1/onlinestream/get-mapping [POST]", "\t@returns onlinestream.MappingResponse", "" ], "filepath": "internal/handlers/onlinestream.go", "filename": "onlinestream.go", "api": { "summary": "returns the mapping for an anime entry.", "descriptions": [ "This is used to get the mapping for an anime entry.", "An empty string is returned if there's no manual mapping. If there is, the anime ID will be returned." ], "endpoint": "/api/v1/onlinestream/get-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "MediaId", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] } ], "returns": "onlinestream.MappingResponse", "returnGoType": "onlinestream.MappingResponse", "returnTypescriptType": "Onlinestream_MappingResponse" } }, { "name": "HandleRemoveOnlinestreamMapping", "trimmedName": "RemoveOnlinestreamMapping", "comments": [ "HandleRemoveOnlinestreamMapping", "", "\t@summary removes the mapping for an anime entry.", "\t@desc This is used to remove the mapping for an anime entry.", "\t@desc The client should re-fetch the chapter container after this.", "\t@route /api/v1/onlinestream/remove-mapping [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/onlinestream.go", "filename": "onlinestream.go", "api": { "summary": "removes the mapping for an anime entry.", "descriptions": [ "This is used to remove the mapping for an anime entry.", "The client should re-fetch the chapter container after this." ], "endpoint": "/api/v1/onlinestream/remove-mapping", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Provider", "jsonName": "provider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "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": "HandlePlaybackGetNextEpisode", "trimmedName": "PlaybackGetNextEpisode", "comments": [ "HandlePlaybackGetNextEpisode", "", "\t@summary gets the next episode of the currently playing media.", "\t@desc This is used by the client's autoplay feature", "\t@route /api/v1/playback-manager/next-episode [GET]", "\t@returns *anime.LocalFile", "" ], "filepath": "internal/handlers/playback_manager.go", "filename": "playback_manager.go", "api": { "summary": "gets the next episode of the currently playing media.", "descriptions": [ "This is used by the client's autoplay feature" ], "endpoint": "/api/v1/playback-manager/next-episode", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "*anime.LocalFile", "returnGoType": "anime.LocalFile", "returnTypescriptType": "Anime_LocalFile" } }, { "name": "HandlePlaybackAutoPlayNextEpisode", "trimmedName": "PlaybackAutoPlayNextEpisode", "comments": [ "HandlePlaybackAutoPlayNextEpisode", "", "\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@route /api/v1/playback-manager/autoplay-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." ], "endpoint": "/api/v1/playback-manager/autoplay-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": "HandlePlaybackStartManualTracking", "trimmedName": "PlaybackStartManualTracking", "comments": [ "HandlePlaybackStartManualTracking", "", "\t@summary starts manual tracking of a media.", "\t@desc Used for tracking progress of media that is not played through any integrated media player.", "\t@desc This should only be used for trackable episodes (episodes that count towards progress).", "\t@desc This returns 'true' if the tracking was successfully started.", "\t@route /api/v1/playback-manager/manual-tracking/start [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/playback_manager.go", "filename": "playback_manager.go", "api": { "summary": "starts manual tracking of a media.", "descriptions": [ "Used for tracking progress of media that is not played through any integrated media player.", "This should only be used for trackable episodes (episodes that count towards progress).", "This returns 'true' if the tracking was successfully started." ], "endpoint": "/api/v1/playback-manager/manual-tracking/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": "ClientId", "jsonName": "clientId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandlePlaybackCancelManualTracking", "trimmedName": "PlaybackCancelManualTracking", "comments": [ "HandlePlaybackCancelManualTracking", "", "\t@summary cancels manual tracking of a media.", "\t@desc This will stop the server from expecting progress updates for the media.", "\t@route /api/v1/playback-manager/manual-tracking/cancel [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/playback_manager.go", "filename": "playback_manager.go", "api": { "summary": "cancels manual tracking of a media.", "descriptions": [ "This will stop the server from expecting progress updates for the media." ], "endpoint": "/api/v1/playback-manager/manual-tracking/cancel", "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 handlers.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": "handlers.Status", "returnGoType": "handlers.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": "HandleGetChangelog", "trimmedName": "GetChangelog", "comments": [ "HandleGetChangelog", "", "\t@summary returns the changelog for versions greater than or equal to the given version.", "\t@route /api/v1/changelog [GET]", "\t@param before query string true \"The version to get the changelog for.\"", "\t@returns string", "" ], "filepath": "internal/handlers/releases.go", "filename": "releases.go", "api": { "summary": "returns the changelog for versions greater than or equal to the given version.", "descriptions": [], "endpoint": "/api/v1/changelog", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "name": "HandleSaveIssueReport", "trimmedName": "SaveIssueReport", "comments": [ "HandleSaveIssueReport", "", "\t@summary saves the issue report in memory.", "\t@route /api/v1/report/issue [POST]", "\t@returns bool", "" ], "filepath": "internal/handlers/report.go", "filename": "report.go", "api": { "summary": "saves the issue report in memory.", "descriptions": [], "endpoint": "/api/v1/report/issue", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "ClickLogs", "jsonName": "clickLogs", "goType": "[]report.ClickLog", "usedStructType": "report.ClickLog", "typescriptType": "Array\u003cReport_ClickLog\u003e", "required": true, "descriptions": [] }, { "name": "NetworkLogs", "jsonName": "networkLogs", "goType": "[]report.NetworkLog", "usedStructType": "report.NetworkLog", "typescriptType": "Array\u003cReport_NetworkLog\u003e", "required": true, "descriptions": [] }, { "name": "ReactQueryLogs", "jsonName": "reactQueryLogs", "goType": "[]report.ReactQueryLog", "usedStructType": "report.ReactQueryLog", "typescriptType": "Array\u003cReport_ReactQueryLog\u003e", "required": true, "descriptions": [] }, { "name": "ConsoleLogs", "jsonName": "consoleLogs", "goType": "[]report.ConsoleLog", "usedStructType": "report.ConsoleLog", "typescriptType": "Array\u003cReport_ConsoleLog\u003e", "required": true, "descriptions": [] }, { "name": "IsAnimeLibraryIssue", "jsonName": "isAnimeLibraryIssue", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleDownloadIssueReport", "trimmedName": "DownloadIssueReport", "comments": [ "HandleDownloadIssueReport", "", "\t@summary generates and downloads the issue report file.", "\t@route /api/v1/report/issue/download [GET]", "\t@returns report.IssueReport", "" ], "filepath": "internal/handlers/report.go", "filename": "report.go", "api": { "summary": "generates and downloads the issue report file.", "descriptions": [], "endpoint": "/api/v1/report/issue/download", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "report.IssueReport", "returnGoType": "report.IssueReport", "returnTypescriptType": "Report_IssueReport" } }, { "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 []summary.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": "[]summary.ScanSummaryItem", "returnGoType": "summary.ScanSummaryItem", "returnTypescriptType": "Array\u003cSummary_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": "Manga", "jsonName": "manga", "goType": "models.MangaSettings", "usedStructType": "models.MangaSettings", "typescriptType": "Models_MangaSettings", "required": true, "descriptions": [] }, { "name": "Notifications", "jsonName": "notifications", "goType": "models.NotificationSettings", "usedStructType": "models.NotificationSettings", "typescriptType": "Models_NotificationSettings", "required": true, "descriptions": [] }, { "name": "Nakama", "jsonName": "nakama", "goType": "models.NakamaSettings", "usedStructType": "models.NakamaSettings", "typescriptType": "Models_NakamaSettings", "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": [] }, { "name": "DebridProvider", "jsonName": "debridProvider", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] }, { "name": "DebridApiKey", "jsonName": "debridApiKey", "goType": "string", "usedStructType": "", "typescriptType": "string", "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": [] }, { "name": "Manga", "jsonName": "manga", "goType": "models.MangaSettings", "usedStructType": "models.MangaSettings", "typescriptType": "Models_MangaSettings", "required": true, "descriptions": [] }, { "name": "Notifications", "jsonName": "notifications", "goType": "models.NotificationSettings", "usedStructType": "models.NotificationSettings", "typescriptType": "Models_NotificationSettings", "required": true, "descriptions": [] }, { "name": "Nakama", "jsonName": "nakama", "goType": "models.NakamaSettings", "usedStructType": "models.NakamaSettings", "typescriptType": "Models_NakamaSettings", "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": [] }, { "name": "EnableEnhancedQueries", "jsonName": "enableEnhancedQueries", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] }, { "name": "EnableSeasonCheck", "jsonName": "enableSeasonCheck", "goType": "bool", "usedStructType": "", "typescriptType": "boolean", "required": true, "descriptions": [] }, { "name": "UseDebrid", "jsonName": "useDebrid", "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": "bool", "returnGoType": "bool", "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": "HandleGetLogFilenames", "trimmedName": "GetLogFilenames", "comments": [ "HandleGetLogFilenames", "", "\t@summary returns the log filenames.", "\t@desc This returns the filenames of all log files in the logs directory.", "\t@route /api/v1/logs/filenames [GET]", "\t@returns []string", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "returns the log filenames.", "descriptions": [ "This returns the filenames of all log files in the logs directory." ], "endpoint": "/api/v1/logs/filenames", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "[]string", "returnGoType": "string", "returnTypescriptType": "Array\u003cstring\u003e" } }, { "name": "HandleDeleteLogs", "trimmedName": "DeleteLogs", "comments": [ "HandleDeleteLogs", "", "\t@summary deletes certain log files.", "\t@desc This deletes the log files with the given filenames.", "\t@route /api/v1/logs [DELETE]", "\t@returns bool", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "deletes certain log files.", "descriptions": [ "This deletes the log files with the given filenames." ], "endpoint": "/api/v1/logs", "methods": [ "DELETE" ], "params": [], "bodyFields": [ { "name": "Filenames", "jsonName": "filenames", "goType": "[]string", "usedStructType": "", "typescriptType": "Array\u003cstring\u003e", "required": true, "descriptions": [] } ], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "HandleGetLatestLogContent", "trimmedName": "GetLatestLogContent", "comments": [ "HandleGetLatestLogContent", "", "\t@summary returns the content of the latest server log file.", "\t@desc This returns the content of the most recent seanime- log file after flushing logs.", "\t@route /api/v1/logs/latest [GET]", "\t@returns string", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "returns the content of the latest server log file.", "descriptions": [ "This returns the content of the most recent seanime- log file after flushing logs." ], "endpoint": "/api/v1/logs/latest", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "string", "returnGoType": "string", "returnTypescriptType": "string" } }, { "name": "HandleGetAnnouncements", "trimmedName": "GetAnnouncements", "comments": [ "HandleGetAnnouncements", "", "\t@summary returns the server announcements.", "\t@desc This returns the announcements for the server.", "\t@route /api/v1/announcements [POST]", "\t@returns []updater.Announcement", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "returns the server announcements.", "descriptions": [ "This returns the announcements for the server." ], "endpoint": "/api/v1/announcements", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "Platform", "jsonName": "platform", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "descriptions": [] } ], "returns": "[]updater.Announcement", "returnGoType": "updater.Announcement", "returnTypescriptType": "Array\u003cUpdater_Announcement\u003e" } }, { "name": "HandleGetMemoryStats", "trimmedName": "GetMemoryStats", "comments": [ "HandleGetMemoryStats", "", "\t@summary returns current memory statistics.", "\t@desc This returns real-time memory usage statistics from the Go runtime.", "\t@route /api/v1/memory/stats [GET]", "\t@returns handlers.MemoryStatsResponse", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "returns current memory statistics.", "descriptions": [ "This returns real-time memory usage statistics from the Go runtime." ], "endpoint": "/api/v1/memory/stats", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "handlers.MemoryStatsResponse", "returnGoType": "handlers.MemoryStatsResponse", "returnTypescriptType": "MemoryStatsResponse" } }, { "name": "HandleGetMemoryProfile", "trimmedName": "GetMemoryProfile", "comments": [ "HandleGetMemoryProfile", "", "\t@summary generates and returns a memory profile.", "\t@desc This generates a memory profile that can be analyzed with go tool pprof.", "\t@desc Query parameters: heap=true for heap profile, allocs=true for alloc profile.", "\t@route /api/v1/memory/profile [GET]", "\t@returns nil", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "generates and returns a memory profile.", "descriptions": [ "This generates a memory profile that can be analyzed with go tool pprof.", "Query parameters: heap=true for heap profile, allocs=true for alloc profile." ], "endpoint": "/api/v1/memory/profile", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "nil", "returnGoType": "nil", "returnTypescriptType": "null" } }, { "name": "HandleGetGoRoutineProfile", "trimmedName": "GetGoRoutineProfile", "comments": [ "HandleGetGoRoutineProfile", "", "\t@summary generates and returns a goroutine profile.", "\t@desc This generates a goroutine profile showing all running goroutines and their stack traces.", "\t@route /api/v1/memory/goroutine [GET]", "\t@returns nil", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "generates and returns a goroutine profile.", "descriptions": [ "This generates a goroutine profile showing all running goroutines and their stack traces." ], "endpoint": "/api/v1/memory/goroutine", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "nil", "returnGoType": "nil", "returnTypescriptType": "null" } }, { "name": "HandleGetCPUProfile", "trimmedName": "GetCPUProfile", "comments": [ "HandleGetCPUProfile", "", "\t@summary generates and returns a CPU profile.", "\t@desc This generates a CPU profile for the specified duration (default 30 seconds).", "\t@desc Query parameter: duration=30 for duration in seconds.", "\t@route /api/v1/memory/cpu [GET]", "\t@returns nil", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "generates and returns a CPU profile.", "descriptions": [ "This generates a CPU profile for the specified duration (default 30 seconds).", "Query parameter: duration=30 for duration in seconds." ], "endpoint": "/api/v1/memory/cpu", "methods": [ "GET" ], "params": [], "bodyFields": [], "returns": "nil", "returnGoType": "nil", "returnTypescriptType": "null" } }, { "name": "HandleForceGC", "trimmedName": "ForceGC", "comments": [ "HandleForceGC", "", "\t@summary forces garbage collection and returns memory stats.", "\t@desc This forces a garbage collection cycle and returns the updated memory statistics.", "\t@route /api/v1/memory/gc [POST]", "\t@returns handlers.MemoryStatsResponse", "" ], "filepath": "internal/handlers/status.go", "filename": "status.go", "api": { "summary": "forces garbage collection and returns memory stats.", "descriptions": [ "This forces a garbage collection cycle and returns the updated memory statistics." ], "endpoint": "/api/v1/memory/gc", "methods": [ "POST" ], "params": [], "bodyFields": [], "returns": "handlers.MemoryStatsResponse", "returnGoType": "handlers.MemoryStatsResponse", "returnTypescriptType": "MemoryStatsResponse" } }, { "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": "__STRUCT__", "inlineStructType": "struct{\nEnabled bool `json:\"enabled\"`\nMissingEpisodeNumbers []int `json:\"missingEpisodeNumbers\"`}", "usedStructType": "", "typescriptType": "{ enabled: boolean; missingEpisodeNumbers: Array\u003cnumber\u003e; }", "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": "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": [] }, { "name": "PlaybackType", "jsonName": "playbackType", "goType": "torrentstream.PlaybackType", "usedStructType": "torrentstream.PlaybackType", "typescriptType": "Torrentstream_PlaybackType", "required": true, "descriptions": [] }, { "name": "ClientId", "jsonName": "clientId", "goType": "string", "usedStructType": "", "typescriptType": "string", "required": true, "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": "HandleGetTorrentstreamBatchHistory", "trimmedName": "GetTorrentstreamBatchHistory", "comments": [ "HandleGetTorrentstreamBatchHistory", "", "\t@summary returns the most recent batch selected.", "\t@desc This returns the most recent batch selected.", "\t@returns torrentstream.BatchHistoryResponse", "\t@route /api/v1/torrentstream/batch-history [POST]", "" ], "filepath": "internal/handlers/torrentstream.go", "filename": "torrentstream.go", "api": { "summary": "returns the most recent batch selected.", "descriptions": [ "This returns the most recent batch selected." ], "endpoint": "/api/v1/torrentstream/batch-history", "methods": [ "POST" ], "params": [], "bodyFields": [ { "name": "MediaID", "jsonName": "mediaId", "goType": "int", "usedStructType": "", "typescriptType": "number", "required": true, "descriptions": [] } ], "returns": "torrentstream.BatchHistoryResponse", "returnGoType": "torrentstream.BatchHistoryResponse", "returnTypescriptType": "Torrentstream_BatchHistoryResponse" } }, { "name": "HandleTorrentstreamServeStream", "trimmedName": "TorrentstreamServeStream", "comments": [ "route /api/v1/torrentstream/stream/*", "" ], "filepath": "internal/handlers/torrentstream.go", "filename": "torrentstream.go", "api": { "summary": "", "descriptions": [], "endpoint": "", "methods": null, "params": [], "bodyFields": [], "returns": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } }, { "name": "webSocketEventHandler", "trimmedName": "webSocketEventHandler", "comments": [ "webSocketEventHandler 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": "bool", "returnGoType": "bool", "returnTypescriptType": "boolean" } } ]