better formatting of magnet links, unspaghettied some code

This commit is contained in:
Rachel Lambda Samuelsson 2021-09-07 18:37:21 +02:00
parent 6446f54c20
commit 538c88728f
3 changed files with 18 additions and 7 deletions

View File

@ -11,7 +11,7 @@ import qualified Data.ByteString.Lazy.Internal as BL
data JSONResponse d = JSONResponse
{ resp_status :: T.Text
, resp_message :: T.Text
, response_data :: d
, response_data :: Maybe d
} deriving (Show)
instance (FromJSON d) => FromJSON (JSONResponse d) where

View File

@ -16,7 +16,7 @@ makeRequest :: (FromJSON a) => String -> WR.Options -> IO (Either T.Text a)
makeRequest url opts = do
r <- asJSON =<< getWith opts url
pure $ case (r ^. responseBody) of
(JSONResponse "ok" _ d) -> Right d
(JSONResponse "ok" _ (Just d)) -> Right d
(JSONResponse _ m _) -> Left m
getMovies :: IO (Either T.Text JSONListMovies)

View File

@ -5,6 +5,8 @@ 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"
@ -19,13 +21,22 @@ trackerList = [ "udp://open.demonii.com:1337/announce"
trackerString :: String
trackerString = "&tr=" <> intercalate "&tr=" trackerList
toMagnets :: JSONMovie -> [String]
toMagnets m = map (toMagnet $ T.unpack (movie_title_long m)) (map (T.unpack . torrent_hash) (movie_torrents m))
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
toMagnet long_name hash = "magnet:?xt=urn:btih:" <> hash <> "&dn"
<> (urlEncode long_name) <> trackerString
printMagnets :: JSONMovie -> IO ()
printMagnets movie = do
putStrLn . T.unpack $ movie_title movie
mapM_ (putStrLn . ("\t" ++)) (toMagnets movie)
putStrLn $ '\n' : title ++ '\n' : replicate (length title) '='
mapM_ ( \(q, m) -> putStrLn (q ++ '\t' : m)) (toMagnets movie)
where
title = T.unpack (movie_title movie)