mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-27 17:38:51 +05:00
100 lines
2.8 KiB
Go
100 lines
2.8 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)
|
||
|
|
}
|