{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Aura.Pkgbuild.Fetch
( getPkgbuild
, pkgbuildUrl
) where
import Aura.Types (PkgName(..), Pkgbuild(..))
import Aura.Utils (urlContents)
import BasePrelude
import Control.Exception (SomeException, catch)
import Data.Generics.Product (field)
import qualified Data.Text as T
import Lens.Micro ((^.))
import Network.HTTP.Client (Manager)
import Network.URI (escapeURIString, isUnescapedInURIComponent)
import System.FilePath ((</>))
type E = SomeException
baseUrl :: String
baseUrl = "https://aur.archlinux.org/"
pkgbuildUrl :: String -> String
pkgbuildUrl p = baseUrl </> "cgit/aur.git/plain/PKGBUILD?h="
++ escapeURIString isUnescapedInURIComponent p
getPkgbuild :: MonadIO m => Manager -> PkgName -> m (Maybe Pkgbuild)
getPkgbuild m p = e $ do
t <- urlContents m . pkgbuildUrl . T.unpack $ p ^. field @"name"
pure $ fmap Pkgbuild t
where e f = liftIO $ f `catch` (\(_ :: E) -> return Nothing)