Files
neomovies-api/pkg/players/types.go
2025-11-19 15:02:59 +00:00

100 lines
2.9 KiB
Go

package players
// StreamResult represents the result of a streaming request
type StreamResult struct {
Success bool `json:"success"`
StreamURL string `json:"stream_url,omitempty"`
Provider string `json:"provider"`
Type string `json:"type"` // "direct", "iframe", "hls", etc.
Error string `json:"error,omitempty"`
}
// Player interface defines methods for streaming providers
type Player interface {
GetMovieStream(tmdbID string) (*StreamResult, error)
GetTVStream(tmdbID string, season, episode int) (*StreamResult, error)
}
// PlayersManager manages all available streaming players
type PlayersManager struct {
rgshows *RgShowsPlayer
iframevideo *IframeVideoPlayer
}
// NewPlayersManager creates a new players manager
func NewPlayersManager() *PlayersManager {
return &PlayersManager{
rgshows: NewRgShowsPlayer(),
iframevideo: NewIframeVideoPlayer(),
}
}
// GetMovieStreams tries to get movie streams from all available providers
func (pm *PlayersManager) GetMovieStreams(tmdbID string) []*StreamResult {
var results []*StreamResult
// Try RgShows
if stream, err := pm.rgshows.GetMovieStream(tmdbID); err == nil {
results = append(results, stream)
} else {
results = append(results, &StreamResult{
Success: false,
Provider: "RgShows",
Error: err.Error(),
})
}
return results
}
// GetTVStreams tries to get TV show streams from all available providers
func (pm *PlayersManager) GetTVStreams(tmdbID string, season, episode int) []*StreamResult {
var results []*StreamResult
// Try RgShows
if stream, err := pm.rgshows.GetTVStream(tmdbID, season, episode); err == nil {
results = append(results, stream)
} else {
results = append(results, &StreamResult{
Success: false,
Provider: "RgShows",
Error: err.Error(),
})
}
return results
}
// GetMovieStreamByProvider gets movie stream from specific provider
func (pm *PlayersManager) GetMovieStreamByProvider(provider, tmdbID string) (*StreamResult, error) {
switch provider {
case "rgshows":
return pm.rgshows.GetMovieStream(tmdbID)
default:
return &StreamResult{
Success: false,
Provider: provider,
Error: "provider not found",
}, nil
}
}
// GetTVStreamByProvider gets TV stream from specific provider
func (pm *PlayersManager) GetTVStreamByProvider(provider, tmdbID string, season, episode int) (*StreamResult, error) {
switch provider {
case "rgshows":
return pm.rgshows.GetTVStream(tmdbID, season, episode)
default:
return &StreamResult{
Success: false,
Provider: provider,
Error: "provider not found",
}, nil
}
}
// GetStreamWithKinopoisk gets stream using Kinopoisk ID and IMDB ID (for IframeVideo)
func (pm *PlayersManager) GetStreamWithKinopoisk(kinopoiskID, imdbID string) (*StreamResult, error) {
return pm.iframevideo.GetStream(kinopoiskID, imdbID)
}