43 lines
1.4 KiB
Haskell
43 lines
1.4 KiB
Haskell
module Torrent where
|
|
|
|
import JSONTypes
|
|
import Network.HTTP.Base
|
|
import qualified Data.Text as T
|
|
import Data.List (intercalate)
|
|
|
|
type Quality = String
|
|
|
|
trackerList :: [String]
|
|
trackerList = [ "udp://open.demonii.com:1337/announce"
|
|
, "udp://tracker.openbittorrent.com:80"
|
|
, "udp://tracker.coppersurfer.tk:6969"
|
|
, "udp://glotorrents.pw:6969/announce"
|
|
, "udp://tracker.opentrackr.org:1337/announce"
|
|
, "udp://torrent.gresille.org:80/announce"
|
|
, "udp://p4p.arenabg.com:1337"
|
|
, "udp://tracker.leechers-paradise.org:6969"
|
|
]
|
|
|
|
trackerString :: String
|
|
trackerString = "&tr=" <> intercalate "&tr=" trackerList
|
|
|
|
toMagnets :: JSONMovie -> [(Quality, String)]
|
|
toMagnets m = map (\t -> (quality t, toMagnet name (hash t))) torrents
|
|
where
|
|
name = T.unpack (movie_title_long m)
|
|
quality = T.unpack . torrent_quality
|
|
hash = T.unpack . torrent_hash
|
|
torrents = movie_torrents m
|
|
|
|
|
|
toMagnet :: String -> String -> String
|
|
toMagnet long_name hash = "magnet:?xt=urn:btih:" <> hash <> "&dn"
|
|
<> (urlEncode long_name) <> trackerString
|
|
|
|
printMagnets :: JSONMovie -> IO ()
|
|
printMagnets movie = do
|
|
putStrLn $ '\n' : title ++ '\n' : replicate (length title) '='
|
|
mapM_ ( \(q, m) -> putStrLn (q ++ '\t' : m)) (toMagnets movie)
|
|
where
|
|
title = T.unpack (movie_title movie)
|