types

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2024 License: GPL-2.0 Imports: 2 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PlexSessionCacheDuration = 30 * time.Second
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthConfig

type AuthConfig struct {
	Issuer       string
	ClientID     string
	ClientSecret string
	RedirectURL  string
}

AuthConfig holds the OIDC configuration

type Changes

type Changes struct {
	New   []string `json:"new"`
	Fixed []string `json:"fixed"`
}

type LoginRequest

type LoginRequest struct {
	Username string `json:"username" binding:"required"`
	Password string `json:"password" binding:"required"`
}

LoginRequest represents the login credentials

type MediaContainer

type MediaContainer struct {
	XMLName  xml.Name `xml:"MediaContainer"`
	Version  string   `xml:"version,attr"`
	Platform string   `xml:"platform,attr"`
}

type MediaRequest

type MediaRequest struct {
	ID        int       `json:"id"`
	Status    int       `json:"status"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
	Media     struct {
		ID                int      `json:"id"`
		TmdbID            int      `json:"tmdbId"`
		TvdbID            int      `json:"tvdbId"`
		Status            int      `json:"status"`
		Requests          []string `json:"requests"`
		CreatedAt         string   `json:"createdAt"`
		UpdatedAt         string   `json:"updatedAt"`
		MediaType         string   `json:"mediaType"`
		ServiceUrl        string   `json:"serviceUrl"`
		Title             string   `json:"title,omitempty"`
		ExternalServiceID int      `json:"externalServiceId,omitempty"`
	} `json:"media"`
	RequestedBy struct {
		ID           int    `json:"id"`
		Email        string `json:"email"`
		Username     string `json:"username"`
		PlexToken    string `json:"plexToken"`
		PlexUsername string `json:"plexUsername"`
		UserType     int    `json:"userType"`
		Permissions  int    `json:"permissions"`
		Avatar       string `json:"avatar"`
		CreatedAt    string `json:"createdAt"`
		UpdatedAt    string `json:"updatedAt"`
		RequestCount int    `json:"requestCount"`
	} `json:"requestedBy"`
	ModifiedBy struct {
		ID           int    `json:"id"`
		Email        string `json:"email"`
		Username     string `json:"username"`
		PlexToken    string `json:"plexToken"`
		PlexUsername string `json:"plexUsername"`
		UserType     int    `json:"userType"`
		Permissions  int    `json:"permissions"`
		Avatar       string `json:"avatar"`
		CreatedAt    string `json:"createdAt"`
		UpdatedAt    string `json:"updatedAt"`
		RequestCount int    `json:"requestCount"`
	} `json:"modifiedBy"`
	Is4k       bool   `json:"is4k"`
	ServerID   int    `json:"serverId"`
	ProfileID  int    `json:"profileId"`
	RootFolder string `json:"rootFolder"`
}

type PlexMedia

type PlexMedia struct {
	AudioChannels int        `json:"audioChannels"`
	AudioCodec    string     `json:"audioCodec"`
	Bitrate       int        `json:"bitrate"`
	Container     string     `json:"container"`
	Duration      int        `json:"duration"`
	ID            string     `json:"id"`
	Selected      bool       `json:"selected"`
	Part          []PlexPart `json:"Part"`
}

type PlexPart

type PlexPart struct {
	Container    string       `json:"container"`
	Duration     int          `json:"duration"`
	File         string       `json:"file"`
	HasThumbnail string       `json:"hasThumbnail"`
	ID           string       `json:"id"`
	Key          string       `json:"key"`
	Size         int64        `json:"size"`
	Decision     string       `json:"decision"`
	Selected     bool         `json:"selected"`
	Stream       []PlexStream `json:"Stream"`
}

type PlexPlayer

type PlexPlayer struct {
	Address             string `json:"address"`
	Device              string `json:"device"`
	MachineIdentifier   string `json:"machineIdentifier"`
	Model               string `json:"model"`
	Platform            string `json:"platform"`
	PlatformVersion     string `json:"platformVersion"`
	Product             string `json:"product"`
	Profile             string `json:"profile"`
	State               string `json:"state"`
	RemotePublicAddress string `json:"remotePublicAddress"`
	Title               string `json:"title"`
	Vendor              string `json:"vendor"`
	Version             string `json:"version"`
}

type PlexResponse

type PlexResponse struct {
	MediaContainer MediaContainer `json:"MediaContainer"`
}

type PlexSession

type PlexSession struct {
	AddedAt              int64                 `json:"addedAt"`
	Art                  string                `json:"art"`
	Duration             int                   `json:"duration"`
	GrandparentArt       string                `json:"grandparentArt"`
	GrandparentGuid      string                `json:"grandparentGuid"`
	GrandparentKey       string                `json:"grandparentKey"`
	GrandparentRatingKey string                `json:"grandparentRatingKey"`
	GrandparentThumb     string                `json:"grandparentThumb"`
	GrandparentTitle     string                `json:"grandparentTitle"`
	Guid                 string                `json:"guid"`
	Index                int                   `json:"index"`
	Key                  string                `json:"key"`
	LibrarySectionID     string                `json:"librarySectionID"`
	LibrarySectionKey    string                `json:"librarySectionKey"`
	LibrarySectionTitle  string                `json:"librarySectionTitle"`
	MusicAnalysisVersion string                `json:"musicAnalysisVersion"`
	ParentGuid           string                `json:"parentGuid"`
	ParentIndex          int                   `json:"parentIndex"`
	ParentKey            string                `json:"parentKey"`
	ParentRatingKey      string                `json:"parentRatingKey"`
	ParentStudio         string                `json:"parentStudio"`
	ParentThumb          string                `json:"parentThumb"`
	ParentTitle          string                `json:"parentTitle"`
	ParentYear           int                   `json:"parentYear"`
	RatingCount          int                   `json:"ratingCount"`
	RatingKey            string                `json:"ratingKey"`
	SessionKey           string                `json:"sessionKey"`
	Thumb                string                `json:"thumb"`
	Title                string                `json:"title"`
	TitleSort            string                `json:"titleSort"`
	Type                 string                `json:"type"`
	UpdatedAt            int64                 `json:"updatedAt"`
	ViewOffset           int                   `json:"viewOffset"`
	Media                []PlexMedia           `json:"Media"`
	User                 *PlexUser             `json:"User,omitempty"`
	Player               *PlexPlayer           `json:"Player,omitempty"`
	Session              *PlexSessionInfo      `json:"Session,omitempty"`
	TranscodeSession     *PlexTranscodeSession `json:"TranscodeSession,omitempty"`
}

type PlexSessionInfo

type PlexSessionInfo struct {
	ID        string `json:"id"`
	Bandwidth int    `json:"bandwidth"`
	Location  string `json:"location"`
}

type PlexSessionsResponse

type PlexSessionsResponse struct {
	MediaContainer struct {
		Size     int           `json:"size"`
		Metadata []PlexSession `json:"Metadata"`
	} `json:"MediaContainer"`
}

type PlexStream

type PlexStream struct {
	AlbumGain            string `json:"albumGain"`
	AlbumPeak            string `json:"albumPeak"`
	AlbumRange           string `json:"albumRange"`
	AudioChannelLayout   string `json:"audioChannelLayout"`
	BitDepth             int    `json:"bitDepth"`
	Bitrate              int    `json:"bitrate"`
	Channels             int    `json:"channels"`
	Codec                string `json:"codec"`
	DisplayTitle         string `json:"displayTitle"`
	ExtendedDisplayTitle string `json:"extendedDisplayTitle"`
	Gain                 string `json:"gain"`
	ID                   string `json:"id"`
	Index                int    `json:"index"`
	Loudness             string `json:"loudness"`
	LRA                  string `json:"lra"`
	Peak                 string `json:"peak"`
	SamplingRate         int    `json:"samplingRate"`
	Selected             bool   `json:"selected"`
	StreamType           int    `json:"streamType"`
	Location             string `json:"location"`
}

type PlexTranscodeSession

type PlexTranscodeSession struct {
	Key                     string  `json:"key"`
	Throttled               bool    `json:"throttled"`
	Complete                bool    `json:"complete"`
	Progress                float64 `json:"progress"`
	Speed                   float64 `json:"speed"`
	Size                    int64   `json:"size"`
	VideoDecision           string  `json:"videoDecision"`
	AudioDecision           string  `json:"audioDecision"`
	Protocol                string  `json:"protocol"`
	Container               string  `json:"container"`
	VideoCodec              string  `json:"videoCodec"`
	AudioCodec              string  `json:"audioCodec"`
	Width                   int     `json:"width"`
	Height                  int     `json:"height"`
	TranscodeHwRequested    bool    `json:"transcodeHwRequested"`
	TranscodeHwFullPipeline bool    `json:"transcodeHwFullPipeline"`
	TimeStamp               float64 `json:"timeStamp"`
	MaxOffsetAvailable      float64 `json:"maxOffsetAvailable"`
	MinOffsetAvailable      float64 `json:"minOffsetAvailable"`
}

type PlexUser

type PlexUser struct {
	ID    string `json:"id"`
	Title string `json:"title"`
	Thumb string `json:"thumb"`
}

type ProwlarrIndexer

type ProwlarrIndexer struct {
	ID       int    `json:"id"`
	Name     string `json:"name"`
	Enable   bool   `json:"enable"`
	Priority int    `json:"priority"`
}

ProwlarrIndexer represents an indexer in Prowlarr

type ProwlarrStats

type ProwlarrStats struct {
	Stats    ProwlarrStatsResponse `json:"stats"`
	Indexers []ProwlarrIndexer     `json:"indexers"`
}

ProwlarrStats represents the combined stats for Prowlarr

type ProwlarrStatsResponse

type ProwlarrStatsResponse struct {
	GrabCount    int `json:"grabCount"`
	FailCount    int `json:"failCount"`
	IndexerCount int `json:"indexerCount"`
}

ProwlarrStatsResponse represents the stats response from Prowlarr API

type QueueRecord

type QueueRecord struct {
	ID                      int             `json:"id"`
	Title                   string          `json:"title"`
	Status                  string          `json:"status"`
	TimeLeft                string          `json:"timeleft,omitempty"`
	EstimatedCompletionTime string          `json:"estimatedCompletionTime"`
	Indexer                 string          `json:"indexer"`
	DownloadClient          string          `json:"downloadClient"`
	Size                    int64           `json:"size"`
	SizeLeft                int64           `json:"sizeleft"`
	TrackedDownloadStatus   string          `json:"trackedDownloadStatus"`
	TrackedDownloadState    string          `json:"trackedDownloadState"`
	StatusMessages          []StatusMessage `json:"statusMessages"`
	ErrorMessage            string          `json:"errorMessage"`
	DownloadId              string          `json:"downloadId"`
	Protocol                string          `json:"protocol"`
}

QueueRecord represents a record in the Sonarr queue

type RadarrCustomFormat

type RadarrCustomFormat struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
}

RadarrCustomFormat represents a custom format in Radarr

type RadarrMovie

type RadarrMovie struct {
	Title         string               `json:"title"`
	OriginalTitle string               `json:"originalTitle"`
	Year          int                  `json:"year"`
	FolderPath    string               `json:"folderPath"`
	CustomFormats []RadarrCustomFormat `json:"customFormats"`
}

RadarrMovie represents the movie information in a queue record

type RadarrMovieResponse

type RadarrMovieResponse struct {
	ID            int     `json:"id"`
	Title         string  `json:"title"`
	OriginalTitle string  `json:"originalTitle"`
	Year          int     `json:"year"`
	Overview      string  `json:"overview"`
	ImdbId        string  `json:"imdbId"`
	TmdbId        int     `json:"tmdbId"`
	Status        string  `json:"status"`
	Added         string  `json:"added"`
	HasFile       bool    `json:"hasFile"`
	Path          string  `json:"path"`
	SizeOnDisk    int64   `json:"sizeOnDisk"`
	Runtime       int     `json:"runtime"`
	Ratings       Ratings `json:"ratings"`
}

RadarrMovieResponse represents a movie from Radarr's movie endpoint

type RadarrQueueDeleteOptions

type RadarrQueueDeleteOptions struct {
	RemoveFromClient bool `json:"removeFromClient"`
	Blocklist        bool `json:"blocklist"`
	SkipRedownload   bool `json:"skipRedownload"`
	ChangeCategory   bool `json:"changeCategory"`
}

RadarrQueueDeleteOptions represents the options for deleting a queue item

type RadarrQueueRecord

type RadarrQueueRecord struct {
	ID                      int                   `json:"id"`
	MovieID                 int                   `json:"movieId"`
	Title                   string                `json:"title"`
	Status                  string                `json:"status"`
	TimeLeft                string                `json:"timeleft,omitempty"`
	EstimatedCompletionTime string                `json:"estimatedCompletionTime"`
	Protocol                string                `json:"protocol"` // "usenet" or "torrent"
	Indexer                 string                `json:"indexer"`
	DownloadClient          string                `json:"downloadClient"`
	Size                    int64                 `json:"size"`
	SizeLeft                int64                 `json:"sizeleft"`
	CustomFormatScore       int                   `json:"customFormatScore"`
	TrackedDownloadStatus   string                `json:"trackedDownloadStatus"`
	TrackedDownloadState    string                `json:"trackedDownloadState"`
	StatusMessages          []RadarrStatusMessage `json:"statusMessages"`
	ErrorMessage            string                `json:"errorMessage"`
	DownloadId              string                `json:"downloadId"`
	Movie                   RadarrMovie           `json:"movie"`
}

RadarrQueueRecord represents a record in the Radarr queue

type RadarrQueueResponse

type RadarrQueueResponse struct {
	Page          int                 `json:"page"`
	PageSize      int                 `json:"pageSize"`
	SortKey       string              `json:"sortKey"`
	SortDirection string              `json:"sortDirection"`
	TotalRecords  int                 `json:"totalRecords"`
	Records       []RadarrQueueRecord `json:"records"`
}

RadarrQueueResponse represents the queue response from Radarr API

type RadarrStatusMessage

type RadarrStatusMessage struct {
	Title    string   `json:"title"`
	Messages []string `json:"messages"`
}

RadarrStatusMessage represents detailed status information for a queue record

type Rating

type Rating struct {
	Value float64 `json:"value"`
	Votes int     `json:"votes"`
}

Rating represents a single rating source

type Ratings

type Ratings struct {
	Tmdb  Rating `json:"tmdb"`
	Imdb  Rating `json:"imdb"`
	Value int    `json:"value"`
	Votes int    `json:"votes"`
}

Ratings represents rating information for a movie

type RegisterRequest

type RegisterRequest struct {
	Username string `json:"username" binding:"required,min=3,max=32"`
	Email    string `json:"email" binding:"required,email"`
	Password string `json:"password" binding:"required,min=8"`
}

RegisterRequest represents the registration data

type RequestsResponse

type RequestsResponse struct {
	PageInfo struct {
		Pages    int `json:"pages"`
		PageSize int `json:"pageSize"`
		Results  int `json:"results"`
		Page     int `json:"page"`
	} `json:"pageInfo"`
	Results []interface{} `json:"results"`
}

type RequestsStats

type RequestsStats struct {
	PendingCount int            `json:"pendingCount"`
	Requests     []MediaRequest `json:"requests"`
}

type Season

type Season struct {
	EpisodeFileCount  int     `json:"episodeFileCount"`
	EpisodeCount      int     `json:"episodeCount"`
	TotalEpisodeCount int     `json:"totalEpisodeCount"`
	SizeOnDisk        int64   `json:"sizeOnDisk"`
	PercentOfEpisodes float64 `json:"percentOfEpisodes"`
}

Season represents season statistics

type SeriesRatings

type SeriesRatings struct {
	Votes int     `json:"votes"`
	Value float64 `json:"value"`
}

SeriesRatings represents rating information for a series

type SeriesStatistics

type SeriesStatistics struct {
	SeasonCount       int     `json:"seasonCount"`
	EpisodeFileCount  int     `json:"episodeFileCount"`
	EpisodeCount      int     `json:"episodeCount"`
	TotalEpisodeCount int     `json:"totalEpisodeCount"`
	SizeOnDisk        int64   `json:"sizeOnDisk"`
	PercentOfEpisodes float64 `json:"percentOfEpisodes"`
}

SeriesStatistics represents series-wide statistics

type ServiceConfigResponse

type ServiceConfigResponse struct {
	InstanceID  string `json:"instanceId"`
	DisplayName string `json:"displayName"`
	URL         string `json:"url"`
	APIKey      string `json:"apiKey,omitempty"`
}

type ServiceHealth

type ServiceHealth struct {
	Status          string    `json:"status"`
	ResponseTime    int64     `json:"responseTime"`
	LastChecked     time.Time `json:"lastChecked"`
	Message         string    `json:"message"`
	UpdateAvailable bool      `json:"updateAvailable"`
	Version         string    `json:"version,omitempty"`
}

type SessionData

type SessionData struct {
	AccessToken  string    `json:"access_token"`
	TokenType    string    `json:"token_type"`
	RefreshToken string    `json:"refresh_token"`
	IDToken      string    `json:"id_token"`
	ExpiresAt    time.Time `json:"expires_at"`
	UserID       int64     `json:"user_id,omitempty"`   // Added for built-in auth
	AuthType     string    `json:"auth_type,omitempty"` // "oidc" or "builtin"
}

SessionData holds the session information

type SonarrQueueDeleteOptions

type SonarrQueueDeleteOptions struct {
	RemoveFromClient bool `json:"removeFromClient"`
	Blocklist        bool `json:"blocklist"`
	SkipRedownload   bool `json:"skipRedownload"`
	ChangeCategory   bool `json:"changeCategory"`
}

SonarrQueueDeleteOptions represents the options for deleting a queue item in Sonarr

type SonarrQueueResponse

type SonarrQueueResponse struct {
	Page          int           `json:"page"`
	PageSize      int           `json:"pageSize"`
	SortKey       string        `json:"sortKey"`
	SortDirection string        `json:"sortDirection"`
	TotalRecords  int           `json:"totalRecords"`
	Records       []QueueRecord `json:"records"`
}

SonarrQueueResponse represents the queue response from Sonarr API

type SonarrSeason

type SonarrSeason struct {
	SeasonNumber int     `json:"seasonNumber"`
	Monitored    bool    `json:"monitored"`
	Statistics   *Season `json:"statistics,omitempty"`
}

SonarrSeason represents a season in a series

type SonarrSeriesResponse

type SonarrSeriesResponse struct {
	ID           int              `json:"id"`
	Title        string           `json:"title"`
	TitleSlug    string           `json:"titleSlug"`
	Overview     string           `json:"overview"`
	Status       string           `json:"status"`
	Added        string           `json:"added"`
	Year         int              `json:"year"`
	Path         string           `json:"path"`
	TvdbId       int              `json:"tvdbId"`
	ImdbId       string           `json:"imdbId"`
	SizeOnDisk   int64            `json:"sizeOnDisk"`
	Runtime      int              `json:"runtime"`
	Network      string           `json:"network"`
	AirTime      string           `json:"airTime"`
	Monitored    bool             `json:"monitored"`
	SeasonFolder bool             `json:"seasonFolder"`
	Seasons      []SonarrSeason   `json:"seasons"`
	Statistics   SeriesStatistics `json:"statistics"`
	Ratings      SeriesRatings    `json:"ratings"`
}

SonarrSeriesResponse represents a series from Sonarr's series endpoint

type SonarrStatsResponse

type SonarrStatsResponse struct {
	MovieCount       int `json:"movieCount"`
	EpisodeCount     int `json:"episodeCount"`
	EpisodeFileCount int `json:"episodeFileCount"`
	Monitored        int `json:"monitored"`
	Unmonitored      int `json:"unmonitored"`
	QueuedCount      int `json:"queuedCount"`
	MissingCount     int `json:"missingCount"`
}

SonarrStatsResponse represents the stats response from Sonarr API

type StatusMessage

type StatusMessage struct {
	Title    string   `json:"title"`
	Messages []string `json:"messages"`
}

StatusMessage represents detailed status information for a queue record

type StatusResponse

type StatusResponse struct {
	Version         string `json:"version"`
	CommitTag       string `json:"commitTag"`
	Status          int    `json:"status"`
	UpdateAvailable bool   `json:"updateAvailable"`
}

type UpdateResponse

type UpdateResponse struct {
	Version     string    `json:"version"`
	Branch      string    `json:"branch"`
	ReleaseDate time.Time `json:"releaseDate"`
	FileName    string    `json:"fileName"`
	URL         string    `json:"url"`
	Installed   bool      `json:"installed"`
	InstalledOn time.Time `json:"installedOn"`
	Installable bool      `json:"installable"`
	Latest      bool      `json:"latest"`
	Changes     Changes   `json:"changes"`
	Hash        string    `json:"hash"`
}

type User

type User struct {
	ID           int64     `json:"id"`
	Username     string    `json:"username"`
	Email        string    `json:"email"`
	PasswordHash string    `json:"-"`
	CreatedAt    time.Time `json:"created_at"`
	UpdatedAt    time.Time `json:"updated_at"`
}

User represents a user in the system

type WebhookProxyRequest

type WebhookProxyRequest struct {
	TargetUrl string `json:"targetUrl"`
	APIKey    string `json:"apiKey"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL