diff options
-rw-r--r-- | kiki.hs | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -110,8 +110,15 @@ listKeys style pkts = listKeysFiltered style [] pkts | |||
110 | -- Operates in List Monad... | 110 | -- Operates in List Monad... |
111 | -- returns all output as a single string | 111 | -- returns all output as a single string |
112 | listKeysFiltered :: Foldable t => FingerprintStyle -> t [Char] -> [Packet] -> [Char] | 112 | listKeysFiltered :: Foldable t => FingerprintStyle -> t [Char] -> [Packet] -> [Char] |
113 | listKeysFiltered style grips pkts = do | 113 | listKeysFiltered style grips pkts0 = do |
114 | let fp = case style of | 114 | let pkts | null grips = pkts0 |
115 | | otherwise = scrub pkts0 | ||
116 | scrub [] = [] | ||
117 | scrub xs = | ||
118 | let ys = dropWhile (\p -> not (isKey p && not (is_subkey p)) || not (matchAnyGrip p)) xs | ||
119 | (as,bs) = span (\p -> not (isKey p) || is_subkey p || matchAnyGrip p) ys | ||
120 | in as ++ scrub bs | ||
121 | fp = case style of | ||
115 | FingerprintAuto -> \p -> show (fingerprint p) | 122 | FingerprintAuto -> \p -> show (fingerprint p) |
116 | Fingerprint5 -> \p -> show (fingerprintv 5 p) | 123 | Fingerprint5 -> \p -> show (fingerprintv 5 p) |
117 | masterkeys = filter (\k -> isKey k && not (is_subkey k)) pkts | 124 | masterkeys = filter (\k -> isKey k && not (is_subkey k)) pkts |
@@ -128,8 +135,9 @@ listKeysFiltered style grips pkts = do | |||
128 | code (c,(m,s),_,_,_) = (fingerprint_material m,-c) | 135 | code (c,(m,s),_,_,_) = (fingerprint_material m,-c) |
129 | ownerkey (_,(a,_),_,_,_) = a | 136 | ownerkey (_,(a,_),_,_,_) = a |
130 | sameMaster (ownerkey->a) (ownerkey->b) = fingerprint_material a==fingerprint_material b | 137 | sameMaster (ownerkey->a) (ownerkey->b) = fingerprint_material a==fingerprint_material b |
138 | matchAnyGrip top = any (flip fpmatch top . Just) grips | ||
131 | matchgrip _ | null grips = True | 139 | matchgrip _ | null grips = True |
132 | matchgrip ((code,(top,sub), kind, hashed,claimants):_) | any (flip fpmatch top . Just) grips = True | 140 | matchgrip ((code,(top,sub), kind, hashed,claimants):_) | matchAnyGrip top = True |
133 | matchgrip _ = False | 141 | matchgrip _ = False |
134 | gs = filter matchgrip $ groupBy sameMaster (sortBy (comparing code) as) | 142 | gs = filter matchgrip $ groupBy sameMaster (sortBy (comparing code) as) |
135 | singles = filter (\k -> fp k `notElem` map fp parents) masterkeys -- \\ parents | 143 | singles = filter (\k -> fp k `notElem` map fp parents) masterkeys -- \\ parents |