Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/controllers/torrent/download.go
kilo 216d241143 alt attribute for ads images, fix missing tags on upload, fix wrong name for translation string (#1577)
* alt attribute for ads images

* fix <tr> too much

* fix missing <tr> that created HTML error

* fix wrong translation string name

* ditto

* fix accepted tags not having background on classic

* Put tag table inside upload table

* Update classic.css

* Remove prefix of dlsite tag on view

* Update main.css

* 10px bigger website

* fix wrong css selector

* fix markdown scroll visually broken in classic.css

* Add magnet link on torrent file not found page

* don't show magnet <a> if empty

* Fetch magnet link in download.go and pass it on to torrent_file_missing

* add magnet in template_test
2017-09-18 10:15:39 +10:00

76 lignes
2,3 Kio
Go

package torrentController
import (
"fmt"
"io"
"os"
"strconv"
"strings"
"github.com/NyaaPantsu/nyaa/config"
"github.com/NyaaPantsu/nyaa/templates"
"github.com/NyaaPantsu/nyaa/models/torrents"
"github.com/NyaaPantsu/nyaa/utils/format"
"github.com/gin-gonic/gin"
)
// DownloadTorrent : Controller for downloading a torrent
func DownloadTorrent(c *gin.Context) {
hash := c.Param("hash")
torrent, err := torrents.FindRawByHash(hash)
if err != nil {
//File not found, send 404
variables := templates.Commonvariables(c)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
if hash == "" && len(config.Get().Torrents.FileStorage) == 0 {
//File not found, send 404
variables := templates.Commonvariables(c)
var trackers []string
if torrent.Trackers == "" {
trackers = config.Get().Torrents.Trackers.Default
} else {
trackers = torrent.GetTrackersArray()
}
magnet := format.InfoHashToMagnet(strings.TrimSpace(torrent.Hash), torrent.Name, trackers...)
variables.Set("magnet", magnet)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
//Check if file exists and open
Openfile, err := os.Open(fmt.Sprintf("%s%c%s.torrent", config.Get().Torrents.FileStorage, os.PathSeparator, hash))
if err != nil {
//File not found, send 404
variables := templates.Commonvariables(c)
var trackers []string
if torrent.Trackers == "" {
trackers = config.Get().Torrents.Trackers.Default
} else {
trackers = torrent.GetTrackersArray()
}
magnet := format.InfoHashToMagnet(strings.TrimSpace(torrent.Hash), torrent.Name, trackers...)
variables.Set("magnet", magnet)
templates.Render(c, "errors/torrent_file_missing.jet.html", variables)
return
}
defer Openfile.Close() //Close after function return
//Get the file size
FileStat, _ := Openfile.Stat() //Get info from file
FileSize := strconv.FormatInt(FileStat.Size(), 10) //Get file size as a string
c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s.torrent\"", torrent.Name))
c.Header("Content-Type", "application/x-bittorrent")
c.Header("Content-Length", FileSize)
//Send the file
// We reset the offset to 0
Openfile.Seek(0, 0)
io.Copy(c.Writer, Openfile) //'Copy' the file to the client
}