func ProviderGetEpisode(ctx *gin.Context) { provider := ctx.Params.ByName("provider") showId := ctx.Params.ByName("showId") seasonNumber, _ := strconv.Atoi(ctx.Params.ByName("season")) episodeNumber, _ := strconv.Atoi(ctx.Params.ByName("episode")) log.Println("Searching links for TVDB Id:", showId) show, err := tvdb.NewShowCached(showId, "en") if err != nil { ctx.Error(err) return } episode := show.Seasons[seasonNumber].Episodes[episodeNumber-1] log.Printf("Resolved %s to %s", showId, show.SeriesName) searcher := providers.NewAddonSearcher(provider) torrents := searcher.SearchEpisodeLinks(show, episode) if ctx.Request.URL.Query().Get("resolve") == "true" { for _, torrent := range torrents { torrent.Resolve() } } data, err := json.MarshalIndent(providerDebugResponse{ Payload: searcher.GetEpisodeSearchObject(show, episode), Results: torrents, }, "", " ") if err != nil { xbmc.AddonFailure(provider) ctx.Error(err) } ctx.Data(200, "application/json", data) }
func Lookup(ctx *gin.Context) { var db DataBase LibraryPath := config.Get().LibraryPath DBPath := filepath.Join(LibraryPath, fmt.Sprintf("%s.json", DBName)) if _, err := os.Stat(DBPath); err == nil { file, err := ioutil.ReadFile(DBPath) if err != nil { ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") ctx.JSON(200, gin.H{ "success": false, }) return } json.Unmarshal(file, &db) } Movies := make([]*Item, 0, len(db.Movies)) Shows := make([]*Item, 0, len(db.Shows)) for i := 0; i < len(db.Movies); i++ { movie := tmdb.GetMovieFromIMDB(db.Movies[i], "en") Movies = append(Movies, &Item{ Id: db.Movies[i], Title: movie.OriginalTitle, Year: strings.Split(movie.ReleaseDate, "-")[0], Overview: movie.Overview, Poster: imageEndpoint + "w500" + movie.PosterPath, }) } for i := 0; i < len(db.Shows); i++ { show, err := tvdb.NewShowCached(db.Shows[i], "en") if err != nil { ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") ctx.JSON(200, gin.H{ "success": false, }) return } Shows = append(Shows, &Item{ Id: db.Shows[i], Title: show.SeriesName, Year: strings.Split(show.FirstAired, "-")[0], Overview: show.Overview, Poster: tvdbBanners + show.Poster, }) } ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") ctx.JSON(200, gin.H{ "success": true, "results": gin.H{ "movies": Movies, "shows": Shows, }, }) }
func ShowSeasons(ctx *gin.Context) { show, err := tvdb.NewShowCached(ctx.Params.ByName("showId"), config.Get().Language) if err != nil { ctx.Error(err) return } items := show.Seasons.ToListItems(show) reversedItems := make(xbmc.ListItems, 0) for i := len(items) - 1; i >= 0; i-- { item := items[i] item.Path = UrlForXBMC("/show/%d/season/%d/episodes", show.Id, item.Info.Season) reversedItems = append(reversedItems, item) } // xbmc.ListItems always returns false to Less() so that order is unchanged ctx.JSON(200, xbmc.NewView("seasons", reversedItems)) }
func showEpisodeLinks(showId string, seasonNumber, episodeNumber int) ([]*bittorrent.Torrent, error) { log.Println("Searching links for TVDB Id:", showId) show, err := tvdb.NewShowCached(showId, config.Get().Language) if err != nil { return nil, err } episode := show.Seasons[seasonNumber].Episodes[episodeNumber-1] log.Printf("Resolved %s to %s\n", showId, show.SeriesName) searchers := providers.GetEpisodeSearchers() if len(searchers) == 0 { xbmc.Notify("Quasar", "LOCALIZE[30204]", config.AddonIcon()) } return providers.SearchEpisode(searchers, show, episode), nil }
func ShowEpisodes(ctx *gin.Context) { show, err := tvdb.NewShowCached(ctx.Params.ByName("showId"), config.Get().Language) if err != nil { ctx.Error(err) return } seasonNumber, _ := strconv.Atoi(ctx.Params.ByName("season")) season := show.Seasons[seasonNumber] items := season.Episodes.ToListItems(show) for _, item := range items { playUrl := UrlForXBMC("/show/%d/season/%d/episode/%d/play", show.Id, season.Season, item.Info.Episode, ) episodeLinksUrl := UrlForXBMC("/show/%d/season/%d/episode/%d/links", show.Id, season.Season, item.Info.Episode, ) if config.Get().ChooseStreamAuto == true { item.Path = playUrl } else { item.Path = episodeLinksUrl } item.ContextMenu = [][]string{ []string{"LOCALIZE[30202]", fmt.Sprintf("XBMC.PlayMedia(%s)", episodeLinksUrl)}, []string{"LOCALIZE[30023]", fmt.Sprintf("XBMC.PlayMedia(%s)", playUrl)}, []string{"LOCALIZE[30203]", "XBMC.Action(Info)"}, } item.IsPlayable = true } ctx.JSON(200, xbmc.NewView("episodes", items)) }