]> gitweb @ CieloNegro.org - blackboard-dns.git/blob - DDNS/Zone.hs
Split commands off
[blackboard-dns.git] / DDNS / Zone.hs
1 module DDNS.Zone
2     ( listZones
3     , completeZoneName
4     )
5     where
6
7 import           Control.Monad
8 import           Control.Monad.Trans
9 import           Data.List
10 import           Database.HaskellDB
11 import qualified DDNS.DB.Zones as Zones
12 import           Network.DNS.Message
13 import           System.Console.Haskeline
14
15
16 listZones :: Database -> IO [DomainName]
17 listZones db
18     = do rows <- query db $ do t <- table Zones.zones
19                                project (Zones.zone << t!Zones.zone)
20          return $ map (read . (!Zones.zone)) rows
21
22 completeZoneName :: MonadIO m => Database -> CompletionFunc m
23 completeZoneName db
24     = completeWord Nothing "" $ \ prefix ->
25       do zones <- liftM (map show) $ liftIO $ listZones db
26          return $ produceCands zones prefix
27     where
28       produceCands :: [String] -> String -> [Completion]
29       produceCands zones prefix
30           = let cands = filter (prefix `isPrefixOf`) zones
31                 comps = map mkComp cands
32             in
33               comps
34
35       mkComp :: String -> Completion
36       mkComp zn
37           = Completion {
38               replacement = zn
39             , display     = zn
40             , isFinished  = True
41             }