Files
silo-server/internal/subtitles/types.go
T

85 lines
2.9 KiB
Go

// internal/subtitles/types.go
package subtitles
import "time"
// SubtitleFormat represents a subtitle file format.
type SubtitleFormat string
const (
FormatSRT SubtitleFormat = "srt"
FormatASS SubtitleFormat = "ass"
FormatSSA SubtitleFormat = "ssa"
FormatVTT SubtitleFormat = "vtt"
FormatSUB SubtitleFormat = "sub"
)
// SearchRequest contains the parameters for searching subtitle providers.
type SearchRequest struct {
IMDbID string
TMDbID string
Title string
Year int
Season int // 0 for movies
Episode int // 0 for movies
Languages []string
Filename string // media filename for provider-side matching
FileHash string // OSHash for OpenSubtitles moviehash search
MediaInfo *MediaMatchInfo
}
// MediaMatchInfo holds metadata about the media file for scoring subtitle matches.
type MediaMatchInfo struct {
ReleaseGroup string
Resolution string
VideoCodec string
AudioCodec string
Source string // BluRay, WEB-DL, etc.
}
// SubtitleResult represents a single subtitle search result from a provider.
type SubtitleResult struct {
ID string `json:"id"`
Provider string `json:"provider"`
Language string `json:"language"`
ReleaseName string `json:"release_name"`
Format SubtitleFormat `json:"format"`
Score float64 `json:"score"`
Downloads int `json:"downloads"`
HearingImpaired bool `json:"hearing_impaired"`
UploadDate time.Time `json:"upload_date,omitempty"`
}
// DownloadedSubtitle represents a subtitle that has been downloaded and stored.
type DownloadedSubtitle struct {
ID int `json:"id"`
MediaFileID int `json:"media_file_id"`
Provider string `json:"provider"`
Language string `json:"language"`
Format SubtitleFormat `json:"format"`
ReleaseName string `json:"release_name"`
S3Key string `json:"-"` // internal, not exposed to frontend
Score float64 `json:"score"`
HearingImpaired bool `json:"hearing_impaired"`
DownloadedBy *int `json:"-"` // audit only
CreatedAt time.Time `json:"created_at"`
}
// ProviderConfig stores the configuration for a subtitle provider.
type ProviderConfig struct {
ProviderName string `json:"provider_name"`
Enabled bool `json:"enabled"`
APIKey string `json:"-"` // never serialized
HasAPIKey bool `json:"has_api_key"`
Username string `json:"-"`
Password string `json:"-"`
HasCredentials bool `json:"has_credentials"`
UpdatedAt time.Time `json:"updated_at"`
}
// SearchResponse contains merged search results and any warnings.
type SearchResponse struct {
Results []SubtitleResult `json:"results"`
Warnings []string `json:"warnings,omitempty"`
}