diff options
Diffstat (limited to 'src/Main.hs')
| -rw-r--r-- | src/Main.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Main.hs b/src/Main.hs index 2f328f7..3ac5745 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -17,6 +17,7 @@ import SlackBuilder.LatestVersionCheck import SlackBuilder.Update import qualified Toml import Data.Text (Text) +import qualified Data.Text as Text import qualified Data.Text.IO as Text import Control.Monad.Trans.Reader (ReaderT(..), asks) import SlackBuilder.Package (PackageDescription(..), renderTextWithVersion) @@ -32,6 +33,9 @@ import System.Console.ANSI ) import Data.Maybe (mapMaybe) import qualified Text.URI as URI +import System.Directory (listDirectory) +import qualified Data.HashMap.Strict as HashMap +import SlackBuilder.Info (readInfoFile) autoUpdatable :: [PackageSettings] -> [PackageDescription] autoUpdatable = mapMaybe go @@ -97,6 +101,31 @@ check = SlackBuilderT (asks (getField @"packages")) >>= mapM_ checkUpdateAvailability >> liftIO (putStrLn "") +installed :: SlackBuilderT () +installed = do + listing <- listRepository + database <- foldr createDataBase HashMap.empty . mapMaybe createEntry + <$> liftIO (listDirectory "/var/lib/pkgtools/packages") + traverse_ findInfo $ HashMap.intersectionWith (,) database listing + where + findInfo (installed'@Package.DataBaseEntry{ name }, fromRepository) = do + _ <- readInfoFile fromRepository name + liftIO $ print installed' + createDataBase entry@Package.DataBaseEntry{ name } = + HashMap.insert name entry + createEntry filename = createEntryFromChunks + $ Text.split (== '-') + $ Text.reverse + $ Text.pack filename + createEntryFromChunks (build : arch : version : name) = Just + Package.DataBaseEntry + { arch = Text.reverse arch + , build = Text.reverse build + , version = Text.reverse version + , name = Text.reverse (Text.intercalate "-" name) + } + createEntryFromChunks _ = Nothing + main :: IO () main = execParser slackBuilderParser >>= handle handleException . withCommandLine @@ -116,3 +145,4 @@ main = execParser slackBuilderParser executeCommand = \case CheckCommand -> check Up2DateCommand packageName -> up2Date packageName + InstalledCommand -> installed |
