X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=blackboard-dns.git;a=blobdiff_plain;f=DDNS%2FZone.hs;fp=DDNS%2FZone.hs;h=aca51e9b4c8b7cfafe69ae90801e5d81b9a49ab4;hp=0000000000000000000000000000000000000000;hb=20021ec127c5574db472d88ff47cbf7e656969f4;hpb=3674500cd498050a48d69d1d30a6139ba3ba88f5 diff --git a/DDNS/Zone.hs b/DDNS/Zone.hs new file mode 100644 index 0000000..aca51e9 --- /dev/null +++ b/DDNS/Zone.hs @@ -0,0 +1,41 @@ +module DDNS.Zone + ( listZones + , completeZoneName + ) + where + +import Control.Monad +import Control.Monad.Trans +import Data.List +import Database.HaskellDB +import qualified DDNS.DB.Zones as Zones +import Network.DNS.Message +import System.Console.Haskeline + + +listZones :: Database -> IO [DomainName] +listZones db + = do rows <- query db $ do t <- table Zones.zones + project (Zones.zone << t!Zones.zone) + return $ map (read . (!Zones.zone)) rows + +completeZoneName :: MonadIO m => Database -> CompletionFunc m +completeZoneName db + = completeWord Nothing "" $ \ prefix -> + do zones <- liftM (map show) $ liftIO $ listZones db + return $ produceCands zones prefix + where + produceCands :: [String] -> String -> [Completion] + produceCands zones prefix + = let cands = filter (prefix `isPrefixOf`) zones + comps = map mkComp cands + in + comps + + mkComp :: String -> Completion + mkComp zn + = Completion { + replacement = zn + , display = zn + , isFinished = True + }