summaryrefslogtreecommitdiff
path: root/src/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Main.hs')
-rw-r--r--src/Main.hs63
1 files changed, 35 insertions, 28 deletions
diff --git a/src/Main.hs b/src/Main.hs
index 9c28456..5e2b0ca 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -32,6 +32,7 @@ import System.Console.ANSI
, ConsoleLayer(..)
)
import Data.Maybe (fromJust, mapMaybe)
+import qualified Text.URI as URI
findUpdatable :: Text -> [PackageSettings] -> DownloaderSettings
findUpdatable packageName = getField @"downloader" . fromJust
@@ -40,33 +41,39 @@ findUpdatable packageName = getField @"downloader" . fromJust
githubAutoUpdatables :: [PackageSettings] -> [PackageDescription]
githubAutoUpdatables = mapMaybe go
where
- go PackageSettings{ downloader = setting }
- | Just githubSettings <- getField @"github" setting = Just
- $ PackageDescription
- { latest =
- let ghArguments = uncurry PackageOwner githubSettings
- template = Package.DownloadTemplate $ getField @"template" setting
- in Package.Updater
- { detectLatest = latestGitHub ghArguments (getField @"version" setting)
- , getVersion = repackageWithTemplate (getField @"repackage" setting) template
- , is64 = getField @"is64" setting
- }
+ go PackageSettings{ downloader = setting, downloaders } = do
+ latest' <- packageUpdaterFromSettings setting
+ pure $ PackageDescription
+ { latest = latest'
, name = getField @"name" setting
- , downloaders = mempty
- }
- | Just packagistSettings <- getField @"packagist" setting = Just
- $ PackageDescription
- { latest =
- let packagistArguments = uncurry PackageOwner packagistSettings
- template = Package.DownloadTemplate $ getField @"template" setting
- in Package.Updater
- { detectLatest = latestPackagist packagistArguments
- , getVersion = repackageWithTemplate (getField @"repackage" setting) template
- , is64 = getField @"is64" setting
- }
- , name = getField @"name" setting
- , downloaders = mempty
+ , downloaders = Map.fromList $ mapMaybe forDownloader downloaders
}
+ forDownloader downloaderSettings@DownloaderSettings{ name } =
+ (name,) <$> packageUpdaterFromSettings downloaderSettings
+
+packageUpdaterFromSettings :: DownloaderSettings -> Maybe Package.Updater
+packageUpdaterFromSettings DownloaderSettings{..} = do
+ getVersion' <- getVersionSettings
+ detectLatest' <- detectLatestSettings
+ Just Package.Updater
+ { detectLatest = detectLatest'
+ , getVersion = getVersion'
+ , is64 = is64
+ }
+ where
+ detectLatestSettings
+ | Just githubSettings <- github =
+ let ghArguments = uncurry PackageOwner githubSettings
+ in Just $ latestGitHub ghArguments version
+ | Just packagistSettings <- packagist =
+ let packagistArguments = uncurry PackageOwner packagistSettings
+ in Just $ latestPackagist packagistArguments
+ | otherwise = Nothing
+ getVersionSettings
+ | Just template' <- template =
+ Just $ repackageWithTemplate repackage $ Package.DownloadTemplate template'
+ | Just CloneSettings{..} <- clone =
+ flip cloneFromGit tagTemplate <$> URI.mkURI remote
| otherwise = Nothing
autoUpdatable :: [PackageSettings] -> [PackageDescription]
@@ -75,7 +82,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
{ latest =
let setting = findUpdatable "webex" packageSettings
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
- template = Package.DownloadTemplate $ getField @"template" setting
+ template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments (getField @"version" setting)
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
@@ -88,7 +95,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
{ latest =
let setting = findUpdatable "dmd" packageSettings
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
- template = Package.DownloadTemplate $ getField @"template" setting
+ template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments (getField @"version" setting)
, getVersion = repackageWithTemplate (getField @"repackage" setting) template
@@ -101,7 +108,7 @@ autoUpdatable packageSettings = githubAutoUpdatables packageSettings ++
{ latest =
let setting = findUpdatable "d-tools" packageSettings
textArguments = uncurry TextArguments $ fromJust $ getField @"text" setting
- template = Package.DownloadTemplate $ getField @"template" setting
+ template = Package.DownloadTemplate $ fromJust $ getField @"template" setting
in Package.Updater
{ detectLatest = latestText textArguments (getField @"version" setting)
, getVersion = repackageWithTemplate (getField @"repackage" setting) template