func getMovieById(movieId string, language string) *Movie { var movie *Movie cacheStore := cache.NewFileStore(path.Join(config.Get().ProfilePath, "cache")) key := fmt.Sprintf("com.tmdb.movie.%s.%s", movieId, language) if err := cacheStore.Get(key, &movie); err != nil { rateLimiter.Call(func() { napping.Get( tmdbEndpoint+"movie/"+movieId, &napping.Params{"api_key": apiKey, "append_to_response": "credits,images,alternative_titles,translations,external_ids,trailers", "language": language}, &movie, nil, ) if movie != nil { cacheStore.Set(key, movie, cacheTime) } }) } if movie == nil { return nil } switch t := movie.RawPopularity.(type) { case string: popularity, _ := strconv.ParseFloat(t, 64) movie.Popularity = popularity case float64: movie.Popularity = t } return movie }
func GetShow(showId int, language string) *Show { var show *Show cacheStore := cache.NewFileStore(path.Join(config.Get().ProfilePath, "cache")) key := fmt.Sprintf("com.tmdb.show.%d.%s", showId, language) if err := cacheStore.Get(key, &show); err != nil { rateLimiter.Call(func() { napping.Get( tmdbEndpoint+"tv/"+strconv.Itoa(showId), &napping.Params{"api_key": apiKey, "append_to_response": "credits,images,alternative_titles,translations,external_ids", "language": language}, &show, nil, ) }) if show != nil { cacheStore.Set(key, show, cacheTime) } } if show == nil { return nil } switch t := show.RawPopularity.(type) { case string: if popularity, err := strconv.ParseFloat(t, 64); err == nil { show.Popularity = popularity } case float64: show.Popularity = t } return show }
func getClientId() string { clientId := "" key := "io.steeve.pulsar.ga" cacheStore := cache.NewFileStore(path.Join(config.Get().ProfilePath)) if err := cacheStore.Get(key, &clientId); err != nil { clientUUID, _ := uuid.NewV4() clientId := clientUUID.String() cacheStore.Set(key, clientId, clientIdCacheTime) } return clientId }
func NewShowCached(tvdbId string, language string) (*Show, error) { var show *Show cacheStore := cache.NewFileStore(path.Join(config.Get().ProfilePath, "cache")) key := fmt.Sprintf("com.tvdb.show.%s.%s", tvdbId, language) if err := cacheStore.Get(key, &show); err != nil { newShow, err := NewShow(tvdbId, language) if err != nil { return nil, err } if newShow != nil { cacheStore.Set(key, newShow, cacheTime) } show = newShow } return show, nil }
func Find(externalId string, externalSource string) *FindResult { var result *FindResult cacheStore := cache.NewFileStore(path.Join(config.Get().ProfilePath, "cache")) key := fmt.Sprintf("com.tmdb.find.%s.%s", externalSource, externalId) if err := cacheStore.Get(key, &result); err != nil { rateLimiter.Call(func() { napping.Get( tmdbEndpoint+"find/"+externalId, &napping.Params{"api_key": apiKey, "external_source": externalSource}, &result, nil, ) cacheStore.Set(key, result, 365*24*time.Hour) }) } return result }
func Routes(btService *bittorrent.BTService) *gin.Engine { r := gin.Default() gin.SetMode(gin.ReleaseMode) r.Use(ga.GATracker()) store := cache.NewFileStore(path.Join(config.Get().ProfilePath, "cache")) r.GET("/", Index) r.GET("/search", Search) r.GET("/pasted", PasteURL) movies := r.Group("/movies") { movies.GET("/", cache.Cache(store, IndexCacheTime), MoviesIndex) movies.GET("/search", SearchMovies) movies.GET("/popular", cache.Cache(store, DefaultCacheTime), PopularMovies) movies.GET("/popular/:genre", cache.Cache(store, DefaultCacheTime), PopularMovies) movies.GET("/top", cache.Cache(store, DefaultCacheTime), TopRatedMovies) movies.GET("/imdb250", cache.Cache(store, DefaultCacheTime), IMDBTop250) movies.GET("/mostvoted", cache.Cache(store, DefaultCacheTime), MoviesMostVoted) movies.GET("/genres", cache.Cache(store, IndexCacheTime), MovieGenres) } movie := r.Group("/movie") { movie.GET("/:imdbId/links", MovieLinks) movie.GET("/:imdbId/play", MoviePlay) } shows := r.Group("/shows") { shows.GET("/", cache.Cache(store, IndexCacheTime), TVIndex) shows.GET("/search", SearchShows) shows.GET("/popular", cache.Cache(store, DefaultCacheTime), PopularShows) shows.GET("/popular/:genre", cache.Cache(store, DefaultCacheTime), PopularShows) shows.GET("/top", cache.Cache(store, DefaultCacheTime), TopRatedShows) shows.GET("/mostvoted", cache.Cache(store, DefaultCacheTime), TVMostVoted) shows.GET("/genres", cache.Cache(store, IndexCacheTime), TVGenres) } show := r.Group("/show") { show.GET("/:showId/seasons", cache.Cache(store, DefaultCacheTime), ShowSeasons) show.GET("/:showId/season/:season/episodes", cache.Cache(store, EpisodesCacheTime), ShowEpisodes) show.GET("/:showId/season/:season/episode/:episode/links", ShowEpisodeLinks) show.GET("/:showId/season/:season/episode/:episode/play", ShowEpisodePlay) } provider := r.Group("/provider") { provider.GET("/:provider/movie/:imdbId", ProviderGetMovie) provider.GET("/:provider/show/:showId/season/:season/episode/:episode", ProviderGetEpisode) } repo := r.Group("/repository") { repo.GET("/:user/:repository/*filepath", repository.GetAddonFiles) repo.HEAD("/:user/:repository/*filepath", repository.GetAddonFiles) } r.GET("/youtube/:id", PlayYoutubeVideo) r.GET("/subtitles", SubtitlesIndex) r.GET("/subtitle/:id", SubtitleGet) r.GET("/play", Play(btService)) r.POST("/callbacks/:cid", providers.CallbackHandler) cmd := r.Group("/cmd") { cmd.GET("/clear_cache", ClearCache) } return r }