summaryrefslogtreecommitdiff
path: root/src/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Main.hs')
-rw-r--r--src/Main.hs30
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