func ListTorrents(btService *bittorrent.BTService) gin.HandlerFunc { return func(ctx *gin.Context) { btService.Session.GetTorrents() torrentsVector := btService.Session.GetTorrents() torrentsVectorSize := int(torrentsVector.Size()) items := make(xbmc.ListItems, 0, torrentsVectorSize) torrentsLog.Info("Currently downloading:") for i := 0; i < torrentsVectorSize; i++ { torrentHandle := torrentsVector.Get(i) if torrentHandle.IsValid() == false { continue } torrentStatus := torrentHandle.Status() progress := float64(torrentStatus.GetProgress()) * 100 torrentName := torrentStatus.GetName() playUrl := UrlQuery(UrlForXBMC("/play"), "resume", fmt.Sprintf("%d", i)) status := bittorrent.StatusStrings[int(torrentStatus.GetState())] if torrentStatus.GetPaused() || btService.Session.IsPaused() { status = "Paused" } torrentsLog.Info(fmt.Sprintf("- %s - %s", status, torrentName)) item := xbmc.ListItem{ Label: fmt.Sprintf("%.2f%% - %s - %s", progress, status, torrentName), Path: playUrl, Info: &xbmc.ListItemInfo{ Title: torrentName, }, } item.ContextMenu = [][]string{ []string{"LOCALIZE[30230]", fmt.Sprintf("XBMC.PlayMedia(%s)", playUrl)}, []string{"LOCALIZE[30235]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/resume/%d", i))}, []string{"LOCALIZE[30231]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/pause/%d", i))}, []string{"LOCALIZE[30232]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/delete/%d", i))}, []string{"LOCALIZE[30233]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/pause"))}, []string{"LOCALIZE[30234]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/resume"))}, } item.IsPlayable = true items = append(items, &item) } ctx.JSON(200, xbmc.NewView("", items)) } }
func ListTorrents(btService *bittorrent.BTService) gin.HandlerFunc { return func(ctx *gin.Context) { btService.Session.GetTorrents() torrentsVector := btService.Session.GetTorrents() torrentsVectorSize := int(torrentsVector.Size()) items := make(xbmc.ListItems, 0, torrentsVectorSize) torrentsLog.Info("Currently downloading:") for i := 0; i < torrentsVectorSize; i++ { torrentHandle := torrentsVector.Get(i) if torrentHandle.IsValid() == false { continue } torrentName := torrentHandle.Status(uint(libtorrent.TorrentHandleQueryName)).GetName() torrentsLog.Info(fmt.Sprintf("- %s", torrentName)) playUrl := UrlQuery(UrlForXBMC("/play"), "resume", fmt.Sprintf("%d", i)) item := xbmc.ListItem{ Label: torrentName, Path: playUrl, Info: &xbmc.ListItemInfo{ Title: torrentName, }, } item.ContextMenu = [][]string{ []string{"LOCALIZE[30230]", fmt.Sprintf("XBMC.PlayMedia(%s)", playUrl)}, []string{"LOCALIZE[30231]", fmt.Sprintf("XBMC.PlayMedia(%s)", UrlForXBMC("/torrents/pause/%d", i))}, []string{"LOCALIZE[30232]", fmt.Sprintf("XBMC.PlayMedia(%s)", UrlForXBMC("/torrents/delete/%d", i))}, } item.IsPlayable = true items = append(items, &item) } ctx.JSON(200, xbmc.NewView("", items)) } }
func ListTorrents(btService *bittorrent.BTService) gin.HandlerFunc { return func(ctx *gin.Context) { btService.Session.GetTorrents() torrentsVector := btService.Session.GetTorrents() torrentsVectorSize := int(torrentsVector.Size()) items := make(xbmc.ListItems, 0, torrentsVectorSize) torrentsLog.Info("Currently downloading:") for i := 0; i < torrentsVectorSize; i++ { torrentHandle := torrentsVector.Get(i) if torrentHandle.IsValid() == false { continue } torrentStatus := torrentHandle.Status() progress := float64(torrentStatus.GetProgress()) * 100 torrentName := torrentStatus.GetName() playUrl := UrlQuery(UrlForXBMC("/play"), "resume", fmt.Sprintf("%d", i)) status := bittorrent.StatusStrings[int(torrentStatus.GetState())] ratio := float64(0) allTimeDownload := float64(torrentStatus.GetAllTimeDownload()) if allTimeDownload > 0 { ratio = float64(torrentStatus.GetAllTimeUpload()) / allTimeDownload } timeRatio := float64(0) finished_time := float64(torrentStatus.GetFinishedTime()) download_time := float64(torrentStatus.GetActiveTime()) - finished_time if download_time > 1 { timeRatio = finished_time / download_time } seedingTime := time.Duration(torrentStatus.GetSeedingTime()) * time.Second torrentAction := []string{"LOCALIZE[30231]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/pause/%d", i))} sessionAction := []string{"LOCALIZE[30233]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/pause"))} if torrentStatus.GetPaused() { status = "Paused" torrentAction = []string{"LOCALIZE[30235]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/resume/%d", i))} } if btService.Session.IsPaused() { status = "Paused" sessionAction = []string{"LOCALIZE[30234]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/resume"))} } torrentsLog.Infof("- %.2f%% - %s - %.2f:1 / %.2f:1 (%s) - %s", progress, status, ratio, timeRatio, seedingTime.String(), torrentName) item := xbmc.ListItem{ Label: fmt.Sprintf("%.2f%% - %s - %.2f:1 / %.2f:1 (%s) - %s", progress, status, ratio, timeRatio, seedingTime.String(), torrentName), Path: playUrl, Info: &xbmc.ListItemInfo{ Title: torrentName, }, } item.ContextMenu = [][]string{ []string{"LOCALIZE[30230]", fmt.Sprintf("XBMC.PlayMedia(%s)", playUrl)}, torrentAction, []string{"LOCALIZE[30232]", fmt.Sprintf("XBMC.RunPlugin(%s)", UrlForXBMC("/torrents/delete/%d", i))}, sessionAction, } item.IsPlayable = true items = append(items, &item) } ctx.JSON(200, xbmc.NewView("", items)) } }