aboutsummaryrefslogtreecommitdiff
path: root/src/FSD/PackageInfo.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/FSD/PackageInfo.hs')
-rw-r--r--src/FSD/PackageInfo.hs70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/FSD/PackageInfo.hs b/src/FSD/PackageInfo.hs
new file mode 100644
index 0000000..959c225
--- /dev/null
+++ b/src/FSD/PackageInfo.hs
@@ -0,0 +1,70 @@
+{-
+Copyright (C) 2022 Yuchen Pei.
+
+This file is part of fsd.
+
+fsd is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+fsd is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+Public License for more details.
+
+You should have received a copy of the GNU Affero General Public
+License along with fsd. If not, see <https://www.gnu.org/licenses/>.
+
+-}
+
+{-# LANGUAGE ImportQualifiedPost #-}
+module FSD.PackageInfo where
+
+import Data.Generics
+import Data.Maybe
+import Data.Text qualified as T
+import Data.Text (Text)
+import Data.Char
+import Data.Time
+import FSD.Types
+
+makePackageInfo ::
+ Source ->
+ Package ->
+ Translation ->
+ FSDChangeLogEntry ->
+ Upstream ->
+ Copyright ->
+ IO (Maybe PackageInfo)
+makePackageInfo source package trans change upstream copyright =
+ if or
+ [ sPackage source /= pPackage package,
+ sPackage source /= tPackage trans,
+ sPackage source /= clPackage change,
+ sPackage source /= uPackage upstream,
+ sPackage source /= crPackage copyright,
+ sVersion source /= pVersion package,
+ sVersion source /= clVersion change
+ ]
+ then return Nothing
+ else do
+ time <- getCurrentTime
+ return $
+ Just
+ PackageInfo
+ { piPackage = sPackage source,
+ piVersion = sVersion source,
+ piTimestamp = time,
+ piFile = sFile source,
+ piHomepage = orElse (sHomepage source) (pHomepage package),
+ piTags = unTags $ pTags package,
+ piShortDesc = tShortDesc trans,
+ piFullDesc = tFullDesc trans,
+ piUpstreamName = uName upstream,
+ piContacts = uContacts upstream,
+ piSources = unSources $ uSources upstream,
+ piLicenses = crLicenses copyright,
+ piCLAuthor = clAuthor change,
+ piCLTimestamp = clTimestamp change
+ }