hbro-contrib-1.3.0.0: Hbro/Download.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
module Hbro.Download where
-- {{{ Imports
import Hbro.Prelude
import Network.URI
import System.Process
-- }}}
aria, wget, axel :: (ControlIO m)
=> FilePath -- ^ Destination directory
-> URI -- ^ URI to download
-> Text -- ^ Destination file name
-> m ()
aria (fpToText -> destination) (tshow -> uri) outputFile
= downloadWith "aria2c" [uri, "-d", destination, "-o", outputFile, "-q"] outputFile
wget destination (tshow -> uri) outputFile
= downloadWith "wget" [uri, "-O", dest] outputFile
where dest = fpToText (destination </> fpFromText outputFile)
axel destination (tshow -> uri) outputFile
= downloadWith "axel" [uri, "-o", dest] outputFile
where dest = fpToText (destination </> fpFromText outputFile)
downloadWith :: (ControlIO m) => Text -> [Text] -> Text -> m ()
downloadWith (unpack -> program) (map unpack -> args) (unpack -> outputFile) = handleIO (io . print) . io $ do
callProcess "notify-send" ["Download started", outputFile]
callProcess program args
callProcess "notify-send" ["Download finished", outputFile]