packages feed

pdfname-0.1: src/Main.hs

-- | pdfname: Name a PDF file using the information from the `pdfinfo`
-- command.

module Main where

import qualified Data.Text as T
import qualified Data.Text.IO as T

import Options.Applicative ( execParser )

import System.Exit     ( exitFailure )
import System.FilePath ( (</>) )

import System.IO
  ( hPrint
  , stderr
  )

import Text.PDF.Info ( pdfInfo )

------------------------------------------------------------------------------
-- Local imports

import CreateFile
  ( createFile
  , generateFileName
  )

import Options
  ( options
  , Options( optDryRun
           , optInputFile
           )
  , outputDir
  )

import Utilities
  ( (+++)
  , die
  , isPDF
  , unlessM
  )

------------------------------------------------------------------------------

main ∷ IO ()
main = do
  opts ← execParser options

  let file ∷ FilePath
      file = optInputFile opts

  unlessM (isPDF file) $ die $ T.pack file +++ " is not a PDF file"

  info ← pdfInfo file
  case info of
    Right i → do
      newFile ← generateFileName i
      if optDryRun opts
        then putStrLn $ "The full path name will be " ++ outputDir </> newFile
        else createFile file newFile

    Left  err → do
      T.hPutStr stderr "pdfInfo exception: "
      hPrint stderr err
      exitFailure