diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Main.hs | 63 |
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 |
