module FilePickF(oldFilePickF,smallPickListF) where
import List2(sort)
import MoreF(pickListF)--,PickListRequest(..)
import ListRequest(replaceAll)
import CompOps
--import Defaults(menuFont)
import FilePaths
import IoF(ioF)
import HaskellIO(hIOerr)
import Fudget
import NullF(startupF,getK,putK)--F,K,
--import FudgetIO
import ReadFileF(readDirF)
--import Geometry(Point(..))
import LayoutDir(Orientation(..))
import LayoutOps
--import Spacer(layoutModifierF)
import Loops(loopLeftF)
import SerCompF(bypassF)
import InputMsg(stripInputMsg)--InputMsg(..),
import InputSP(inputLeaveDoneSP)--,inputDoneSP
import InputF(inputThroughF)--,InF(..)
import DStringF(stringF)
import EitherUtils(stripEither)
--import Message(Message(..))
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) -- startpath ?!!!

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 err   -> [show err, filePath sdir]
	  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 = {-layoutModifierF lf-} ((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)
--  where lf (Layout _ fh fv) = Layout (Point 240 120) fh fv

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)