module FilePickF(oldFilePickF,smallPickListF) where
import List2(sort)
import MoreF(pickListF)
import ListRequest(replaceAll)
import CompOps
import FilePaths
import IoF(ioF)
import HaskellIO(hIOerr)
import Fudget
import NullF(startupF,getK,putK)
import ReadFileF(readDirF)
import LayoutDir(Orientation(..))
import LayoutOps
import Loops(loopLeftF)
import SerCompF(bypassF)
import InputMsg(stripInputMsg)
import InputSP(inputLeaveDoneSP)
import InputF(inputThroughF)
import DStringF(stringF)
import EitherUtils(stripEither)
import DialogueIO hiding (IOError)
dirF :: F String AFilePath
dirF = String -> AFilePath
aFilePath (String -> AFilePath) -> F String String -> F String AFilePath
forall a b e. (a -> b) -> F e a -> F e b
>^=< F String String -> F String String
forall a. F a a -> F a a
bypassF (SP (InputMsg String) String
forall b. SP (InputMsg b) b
inputLeaveDoneSP SP (InputMsg String) String
-> F String (InputMsg String) -> F String String
forall a b e. SP a b -> F e a -> F e b
>^^=< F String (InputMsg String)
stringF)
shownameF :: F String (InputMsg String)
shownameF = F String (InputMsg String) -> F String (InputMsg String)
forall a. InF a a -> InF a a
inputThroughF F String (InputMsg String)
stringF
startpath :: String
startpath = String
"."
lsF :: F AFilePath [AFilePath]
lsF = (String, Either IOError [String]) -> [AFilePath]
forall a. (String, Either a [String]) -> [AFilePath]
paths((String, Either IOError [String]) -> [AFilePath])
-> F String (String, Either IOError [String])
-> F String [AFilePath]
forall a b e. (a -> b) -> F e a -> F e b
>^=<F String (String, Either IOError [String])
readDirFF String [AFilePath]
-> (AFilePath -> String) -> F AFilePath [AFilePath]
forall c d e. F c d -> (e -> c) -> F e d
>=^<AFilePath -> String
filePath
where
paths :: (String, Either a [String]) -> [AFilePath]
paths (String
dir,Either a [String]
resp) =
case Either a [String]
resp of
Right [String]
files -> ((String -> AFilePath) -> [String] -> [AFilePath]
forall a b. (a -> b) -> [a] -> [b]
map (AFilePath -> String -> AFilePath
extendPath AFilePath
sdir) ([String] -> [AFilePath])
-> ([String] -> [String]) -> [String] -> [AFilePath]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> [String]
forall a. Ord a => [a] -> [a]
sort ([String] -> [String])
-> ([String] -> [String]) -> [String] -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/=String
".")) [String]
files
Left a
err -> [String -> AFilePath
aFilePath String
"Error", AFilePath
sdir]
where sdir :: AFilePath
sdir = String -> AFilePath
aFilePath String
dir
smallPickListF :: (d -> String) -> F [d] d
smallPickListF d -> String
f = ((Int, d) -> d
forall a b. (a, b) -> b
snd((Int, d) -> d)
-> (InputMsg (Int, d) -> (Int, d)) -> InputMsg (Int, d) -> d
forall b c a. (b -> c) -> (a -> b) -> a -> c
.InputMsg (Int, d) -> (Int, d)
forall p. InputMsg p -> p
stripInputMsg(InputMsg (Int, d) -> d)
-> F (PickListRequest d) (InputMsg (Int, d))
-> F (PickListRequest d) d
forall a b e. (a -> b) -> F e a -> F e b
>^=<(d -> String) -> F (PickListRequest d) (InputMsg (Int, d))
forall a.
(a -> String) -> F (PickListRequest a) (InputMsg (Int, a))
pickListF d -> String
fF (PickListRequest d) d -> ([d] -> PickListRequest d) -> F [d] d
forall c d e. F c d -> (e -> c) -> F e d
>=^<[d] -> PickListRequest d
forall a. [a] -> ListRequest a
replaceAll)
oldFilePickF :: F String (InputMsg String)
oldFilePickF =
let showdirF :: F AFilePath AFilePath
showdirF =
[AFilePath] -> F AFilePath AFilePath -> F AFilePath AFilePath
forall hi ho. [hi] -> F hi ho -> F hi ho
startupF [String -> AFilePath
aFilePath String
startpath]
((AFilePath -> AFilePath
compactPath (AFilePath -> AFilePath)
-> F [AFilePath] AFilePath -> F [AFilePath] AFilePath
forall a b e. (a -> b) -> F e a -> F e b
>^=< F [AFilePath] AFilePath
filePickListF) F [AFilePath] AFilePath
-> F AFilePath [AFilePath] -> F AFilePath AFilePath
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>==< F AFilePath [AFilePath]
lsF)
filePickListF :: F [AFilePath] AFilePath
filePickListF = (AFilePath -> String) -> F [AFilePath] AFilePath
forall d. (d -> String) -> F [d] d
smallPickListF AFilePath -> String
pathTail
routeK :: K AFilePath (Either String String)
routeK =
Cont (K AFilePath (Either String String)) (KEvent AFilePath)
forall hi ho. Cont (K hi ho) (KEvent hi)
getK Cont (K AFilePath (Either String String)) (KEvent AFilePath)
-> Cont (K AFilePath (Either String String)) (KEvent AFilePath)
forall a b. (a -> b) -> a -> b
$ \ KEvent AFilePath
msg ->
case KEvent AFilePath
msg of
High AFilePath
p ->
let s :: String
s = AFilePath -> String
filePath AFilePath
p
cont :: (String -> Either String String)
-> K AFilePath (Either String String)
cont String -> Either String String
r = KCommand (Either String String)
-> K AFilePath (Either String String)
-> K AFilePath (Either String String)
forall ho hi. KCommand ho -> K hi ho -> K hi ho
putK (Either String String -> KCommand (Either String String)
forall a b. b -> Message a b
High (String -> Either String String
r String
s)) K AFilePath (Either String String)
routeK
fileCont :: K AFilePath (Either String String)
fileCont = (String -> Either String String)
-> K AFilePath (Either String String)
cont String -> Either String String
forall a b. b -> Either a b
Right
dirCont :: K AFilePath (Either String String)
dirCont = (String -> Either String String)
-> K AFilePath (Either String String)
cont String -> Either String String
forall a b. a -> Either a b
Left
checkCont :: Response -> K AFilePath (Either String String)
checkCont (Str (Char
'd':String
_)) = K AFilePath (Either String String)
dirCont
checkCont Response
_ = K AFilePath (Either String String)
fileCont
in Request
-> (IOError -> K AFilePath (Either String String))
-> (Response -> K AFilePath (Either String String))
-> K AFilePath (Either String String)
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
Request -> (IOError -> f b ho) -> (Response -> f b ho) -> f b ho
hIOerr (String -> Request
StatusFile String
s) (K AFilePath (Either String String)
-> IOError -> K AFilePath (Either String String)
forall a b. a -> b -> a
const K AFilePath (Either String String)
fileCont) Response -> K AFilePath (Either String String)
checkCont
F a1 f
f1 >=#=< :: F a1 f -> F e a1 -> F e f
>=#=< F e a1
f2 = (F a1 f
f1,Orientation
Below) (F a1 f, Orientation) -> F e a1 -> F e f
forall a1 f e. (F a1 f, Orientation) -> F e a1 -> F e f
>#==< F e a1
f2
in F String (InputMsg String)
shownameF F String (InputMsg String)
-> F String String -> F String (InputMsg String)
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>=#=<
F (Either String String) (Either String String) -> F String String
forall a b c. F (Either a b) (Either a c) -> F b c
loopLeftF (((K AFilePath (Either String String)
-> F AFilePath (Either String String)
forall a b. K a b -> F a b
ioF K AFilePath (Either String String)
routeK F AFilePath (Either String String)
-> F AFilePath AFilePath -> F AFilePath (Either String String)
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>==< F AFilePath AFilePath
showdirF) F AFilePath (Either String String)
-> F String AFilePath -> F String (Either String String)
forall a1 b a2. F a1 b -> F a2 a1 -> F a2 b
>=#=< F String AFilePath
dirF) F String (Either String String)
-> (Either String String -> String)
-> F (Either String String) (Either String String)
forall c d e. F c d -> (e -> c) -> F e d
>=^< Either String String -> String
forall p. Either p p -> p
stripEither)