Files
reiverr/shared/reiverr-plugin.proto

172 lines
4.1 KiB
Protocol Buffer

syntax = "proto3";
package aleksilassila.reiverr.plugin.v1;
// Plugin Service - handles plugin metadata and configuration
service PluginService {
// Get plugin metadata and version
rpc GetInfo(Empty) returns (PluginInfo);
}
// Media Source Provider Service - handles user-specific requests
service PluginMediaService {
// Get a list of available streamables
rpc GetStreamables(StreamablesRequest) returns (StreamablesResponse);
// Get a link to a streamable - on the plugin side, this can create a transcoding session for example
rpc GetStream(StreamRequest) returns (StreamResponse);
}
// Catalogue Provider Service - handles library catalogues
service PluginCatalogueService {
// Get what catalogues are available
rpc GetCatalogues(CataloguesRequest) returns (CataloguesResponse);
// Get everything in a catalogue - e.g. all movies or all series
rpc GetCatalogue(CatalogueRequest) returns (CatalogueResponse);
// // Get missing items in catalogue
// rpc GetMissingInCatalogue(MissingCatalogueRequest) returns (MissingCatalogueResponse);
}
// Management Profile Service - NEW for monitoring/management profiles
// service ManagementProfileService {
// }
// Common Messages
message Empty {}
message PluginInfo {
string name = 1;
string api_version = 2;
string description = 3;
bool streaming_supported = 4;
bool catalogues_supported = 5;
}
message StreamablesRequest {
string title = 1;
optional int32 season = 2;
optional int32 episode = 3;
optional double runtime_minutes = 4;
optional string tmdb_id = 5;
optional string imdb_id = 6;
optional string tvdb_id = 7;
// optional string media_type = 6; // "movie" or "series"
}
message StreamablesResponse {
repeated StreamableItem items = 1;
}
message StreamableItem {
string id = 1;
string label = 2;
optional string quality = 3;
optional string source = 8;
optional string language = 4;
optional string release_group = 5;
optional string size = 6;
optional string bitrate = 7;
// string type = 3; // "movie" or "series"
// string tmdb_id = 4;
// string media_type = 5; // "movie" or "series"
}
message StreamRequest {
string id = 1;
}
message StreamResponse {
repeated VideoTrack videoTracks = 1;
repeated SubtitleTrack subtitleTracks = 2;
}
message VideoTrack {
string label = 1;
string url = 2;
string type = 3; // "direct", "hls", "dash"
optional string lang = 5;
optional bool proxy = 4;
// optional string quality = 4;
// optional string codec = 5;
// optional int32 bitrate = 6;
}
message SubtitleTrack {
string label = 1;
string url = 2;
string lang = 3;
string kind = 4; // "subtitles", "captions", "descriptions"
optional bool proxy = 5;
}
// Catalogue Messages
message CataloguesRequest {}
message CataloguesResponse {
repeated CatalogueInfo catalogues = 1;
}
message CatalogueInfo {
string id = 1;
string label = 2;
repeated OrderOption order_options = 3;
}
message OrderOption {
string label = 1;
string value = 2;
optional string direction = 3; // Define for direction grouping
}
message CatalogueRequest {
string catalogue_id = 1;
optional string order = 2; // Referes to OrderOption.value
optional PaginationParams pagination = 3;
// PaginationParams pagination = 2;
// optional string order = 3;
// optional string direction = 4;
}
message CatalogueResponse {
repeated CatalogueItem items = 1;
// int32 total = 2;
// int32 page = 3;
// int32 items_per_page = 4;
}
message CatalogueItem {
string id = 1;
string label = 2;
string media_type = 3; // "movie" or "series"
optional string tmdb_id = 4;
optional string poster_url = 5;
optional string backdrop_url = 6;
}
message PaginationParams {
int32 page = 1; // 1-based page number
int32 items_per_page = 2;
}
// message MissingCatalogueRequest {
// UserContext user_context = 1;
// PaginationParams pagination = 2;
// optional string order = 3;
// optional string direction = 4;
// map<string, string> my_list_items_json = 5;
// }
// message MissingCatalogueResponse {
// repeated string items_json = 1;
// int32 total = 2;
// int32 page = 3;
// int32 items_per_page = 4;
// }