packages feed

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]