summaryrefslogtreecommitdiff
path: root/lib/SlackBuilder/Package.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2023-10-05 19:24:42 +0200
committerEugen Wissner <belka@caraus.de>2023-10-05 19:24:42 +0200
commitf3beee3e19e2d64c8700cf67eb6cefc345efcf41 (patch)
tree0c623d8000656894cc0831a35642836057f8ea7d /lib/SlackBuilder/Package.hs
parent7b5598a02e0faff590d94391a8b323e6fe74a4fe (diff)
downloadslackbuilder-f3beee3e19e2d64c8700cf67eb6cefc345efcf41.tar.gz
Combine info file structures
Diffstat (limited to 'lib/SlackBuilder/Package.hs')
-rw-r--r--lib/SlackBuilder/Package.hs55
1 files changed, 11 insertions, 44 deletions
diff --git a/lib/SlackBuilder/Package.hs b/lib/SlackBuilder/Package.hs
index bd53447..4371040 100644
--- a/lib/SlackBuilder/Package.hs
+++ b/lib/SlackBuilder/Package.hs
@@ -2,10 +2,10 @@ module SlackBuilder.Package
( DownloadPlaceholder(..)
, Download(..)
, DownloadTemplate(..)
+ , Package(..)
, PackageInfo(..)
, Maintainer(..)
, Updater(..)
- , infoTemplate
, renderDownloadWithVersion
) where
@@ -15,12 +15,19 @@ import qualified Data.Text as Text
import Text.URI (URI(..))
import qualified Text.URI as URI
import Crypto.Hash (Digest, MD5)
-import GHC.Records (HasField(..))
-import System.FilePath (takeBaseName)
-import Data.List (partition)
import SlackBuilder.Trans
import Control.Monad.Catch (MonadThrow)
+-- | Contains information how a package can be updated.
+data Package = Package
+ { latest :: Updater
+ , category :: Text
+ , name :: Text
+ , homepage :: URI
+ , requires :: [Text]
+ , reupload :: Bool
+ }
+
-- | Download URI with the MD5 checksum of the target.
data Download = Download
{ download :: URI
@@ -73,43 +80,3 @@ renderDownloadWithVersion (DownloadTemplate components) version =
-- | Function used to get the latest version of a source.
data Updater = Updater (SlackBuilderT (Maybe Text)) DownloadTemplate
-
-packageName :: PackageInfo -> Text
-packageName PackageInfo{ path } = Text.pack $ takeBaseName path
-
-infoTemplate :: PackageInfo -> [Download] -> Text
-infoTemplate package downloads =
- let (downloads64, downloads32) = partition (getField @"is64") downloads
- (download32, md5sum32, download64, md5sum64) = downloadEntries downloads64 downloads32
-
- in Text.unlines
- [ "PRGNAM=\"" <> packageName package <> "\""
- , "VERSION=\"" <> getField @"version" package <> "\""
- , "HOMEPAGE=\"" <> getField @"homepage" package <> "\""
- , "DOWNLOAD=\"" <> download32 <> "\""
- , "MD5SUM=\"" <> md5sum32 <> "\""
- , "DOWNLOAD_x86_64=\"" <> download64 <> "\""
- , "MD5SUM_x86_64=\"" <> md5sum64 <> "\""
- , "REQUIRES=\"" <> Text.unwords (getField @"requires" package) <> "\""
- , "MAINTAINER=\"" <> getField @"name" (getField @"maintainer" package) <> "\""
- , "EMAIL=\"" <> getField @"email" (getField @"maintainer" package) <> "\""
- ]
-
-downloadEntries :: [Download] -> [Download] -> (Text, Text, Text, Text)
-downloadEntries downloads64 downloads32 =
- let download32 =
- if null downloads32 && not (null downloads64)
- then
- "UNSUPPORTED"
- else
- Text.intercalate " \\\n "
- $ URI.render . getField @"download" <$> downloads32
-
- md5sum32 = Text.intercalate " \\\n "
- $ Text.pack . show . getField @"md5sum" <$> downloads32
- download64 = Text.intercalate " \\\n "
- $ URI.render . getField @"download" <$> downloads64
- md5sum64 = Text.intercalate " \\\n "
- $ Text.pack . show . getField @"md5sum" <$> downloads64
-
- in (download32, md5sum32, download64, md5sum64)