func (as *AddonSearcher) call(method string, searchObject interface{}) []*bittorrent.Torrent { torrents := make([]*bittorrent.Torrent, 0) cid, c := GetCallback() cbUrl := fmt.Sprintf("%s/callbacks/%s", util.GetHTTPHost(), cid) payload := &SearchPayload{ Method: method, CallbackURL: cbUrl, SearchObject: searchObject, } xbmc.ExecuteAddon(as.addonId, payload.String()) timeout := providerTimeout() conf := config.Get() if conf.CustomProviderTimeoutEnabled == true { timeout = time.Duration(conf.CustomProviderTimeout) * time.Second } select { case <-time.After(timeout): as.log.Info("Provider %s was too slow. Ignored.", as.addonId) RemoveCallback(cid) case result := <-c: json.Unmarshal(result, &torrents) } return torrents }
func UrlForHTTP(pattern string, args ...interface{}) string { u, _ := url.Parse(fmt.Sprintf(pattern, args...)) return util.GetHTTPHost() + u.String() }
func SubtitlesIndex(ctx *gin.Context) { q := ctx.Request.URL.Query() searchString := q.Get("searchstring") languages := strings.Split(q.Get("languages"), ",") labels := xbmc.InfoLabels( "VideoPlayer.Title", "VideoPlayer.OriginalTitle", "VideoPlayer.Year", "VideoPlayer.TVshowtitle", "VideoPlayer.Season", "VideoPlayer.Episode", ) playingFile := xbmc.PlayerGetPlayingFile() // are we reading a file from Pulsar? if strings.HasPrefix(playingFile, util.GetHTTPHost()) { playingFile = strings.Replace(playingFile, util.GetHTTPHost()+"/files", config.Get().DownloadPath, 1) playingFile, _ = url.QueryUnescape(playingFile) } for i, lang := range languages { if lang == "Portuguese (Brazil)" { languages[i] = "pob" } else { isoLang := xbmc.ConvertLanguage(lang, xbmc.ISO_639_2) if isoLang == "gre" { isoLang = "ell" } languages[i] = isoLang } } payloads := []osdb.SearchPayload{} if searchString != "" { payloads = append(payloads, osdb.SearchPayload{ Query: searchString, Languages: strings.Join(languages, ","), }) } else { if strings.HasPrefix(playingFile, "http://") == false && strings.HasPrefix(playingFile, "https://") == false { appendLocalFilePayloads(playingFile, &payloads) } if labels["VideoPlayer.TVshowtitle"] != "" { appendEpisodePayloads(labels, &payloads) } else { appendMoviePayloads(labels, &payloads) } } for i, payload := range payloads { payload.Languages = strings.Join(languages, ",") payloads[i] = payload } client, err := osdb.NewClient() if err != nil { ctx.AbortWithError(500, err) return } if err := client.LogIn("", "", ""); err != nil { ctx.AbortWithError(500, err) return } items := make(xbmc.ListItems, 0) results, _ := client.SearchSubtitles(payloads) for _, sub := range results { rating, _ := strconv.ParseFloat(sub.SubRating, 64) subLang := sub.LanguageName if subLang == "Brazilian" { subLang = "Portuguese (Brazil)" } item := &xbmc.ListItem{ Label: subLang, Label2: sub.SubFileName, Icon: strconv.Itoa(int((rating / 2) + 0.5)), Thumbnail: sub.ISO639, Path: UrlQuery(UrlForXBMC("/subtitle/%s", sub.IDSubtitleFile), "file", sub.SubFileName, "lang", sub.SubLanguageID, "fmt", sub.SubFormat, "dl", sub.SubDownloadLink), Properties: make(map[string]string), } if sub.MatchedBy == "moviehash" { item.Properties["sync"] = "true" } if sub.SubHearingImpaired == "1" { item.Properties["hearing_imp"] = "true" } items = append(items, item) } ctx.JSON(200, xbmc.NewView("", items)) }