module Text.Madlibs.Packaging.Fetch ( fetchGithub
, fetchPackages
, cleanPackages
, installVimPlugin
) where
import Control.Monad (unless)
import qualified Codec.Archive.Tar as Tar
import Codec.Archive.Zip (ZipOption (..),
extractFilesFromArchive, toArchive)
import Codec.Compression.GZip (decompress)
import Network.HTTP.Client hiding (decompress)
import System.Directory (removeFile, renameDirectory)
import System.Environment (getEnv)
import System.Info (os)
import Network.HTTP.Client.TLS (tlsManagerSettings)
invalid :: String -> Bool
invalid = not . ('/' `elem`)
fetchGithub :: String -> IO ()
fetchGithub s = unless (invalid s) $ do
putStrLn $ "fetching library at " ++ s
manager <- newManager tlsManagerSettings
initialRequest <- parseRequest $ "https://github.com/" ++ s ++ "/archive/master.zip"
response <- httpLbs (initialRequest { method = "GET" }) manager
let byteStringResponse = responseBody response
putStrLn "unpacking libraries..."
home <- getEnv "HOME"
let packageDir = if os /= "mingw32" then home ++ "/.madlang" else home ++ "\\.madlang"
let archive = toArchive byteStringResponse
let options = OptDestination packageDir
extractFilesFromArchive [options] archive
let repoName = filter (/='/') . dropWhile (/='/') $ s
renameDirectory (packageDir ++ "/" ++ repoName ++ "-master") (packageDir ++ "/" ++ repoName)
installVimPlugin :: IO ()
installVimPlugin = do
putStrLn "fetching latest vim plugin..."
manager <- newManager defaultManagerSettings
initialRequest <- parseRequest "http://vmchale.com/static/vim.zip"
response <- httpLbs (initialRequest { method = "GET" }) manager
let byteStringResponse = responseBody response
putStrLn "installing locally..."
home <- getEnv "HOME"
let packageDir = if os /= "mingw32" then home ++ "/.vim" else home ++ "\\vimfiles"
let archive = toArchive byteStringResponse
let options = OptDestination packageDir
extractFilesFromArchive [options] archive
putStrLn "cleaning junk..."
removeFile (packageDir ++ "/TODO.md")
removeFile (packageDir ++ "/vim-screenshot.png")
removeFile (packageDir ++ "/README.md")
removeFile (packageDir ++ "/LICENSE")
fetchPackages :: IO ()
fetchPackages = do
putStrLn "fetching libraries..."
manager <- newManager defaultManagerSettings
initialRequest <- parseRequest "http://vmchale.com/static/packages.tar.gz"
response <- httpLbs (initialRequest { method = "GET" }) manager
let byteStringResponse = responseBody response
putStrLn "unpacking libraries..."
home <- getEnv "HOME"
let packageDir = if os /= "mingw32" then home ++ "/.madlang" else home ++ "\\.madlang"
Tar.unpack packageDir . Tar.read . decompress $ byteStringResponse
cleanPackages :: IO ()
cleanPackages =
putStrLn "done."