module ReadFileF(readFileF,readBinaryFileF,readXdgFileF,readDirF) where
import Fudget() -- synonym KEvent, for hbc
import NullF
import FudgetIO
import IoF(ioF)
import HaskellIO(haskellIO)
import Message(Message(..))
import DialogueIO hiding (IOError)

readFileF :: F String (String, Either IOError String)
readFileF = K String (String, Either IOError String)
-> F String (String, Either IOError String)
forall a b. K a b -> F a b
ioF K String (String, Either IOError String)
readFileK
readBinaryFileF :: F String (String, Either IOError String)
readBinaryFileF = K String (String, Either IOError String)
-> F String (String, Either IOError String)
forall a b. K a b -> F a b
ioF K String (String, Either IOError String)
readBinaryFileK
readXdgFileF :: XdgDirectory -> F String (String, Either IOError String)
readXdgFileF = K String (String, Either IOError String)
-> F String (String, Either IOError String)
forall a b. K a b -> F a b
ioF (K String (String, Either IOError String)
 -> F String (String, Either IOError String))
-> (XdgDirectory -> K String (String, Either IOError String))
-> XdgDirectory
-> F String (String, Either IOError String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XdgDirectory -> K String (String, Either IOError String)
readXdgFileK

readFileK :: K String (String, Either IOError String)
readFileK = (String -> Request) -> K String (String, Either IOError String)
readFileK' String -> Request
ReadFile
readBinaryFileK :: K String (String, Either IOError String)
readBinaryFileK = (String -> Request) -> K String (String, Either IOError String)
readFileK' String -> Request
ReadBinaryFile
readXdgFileK :: XdgDirectory -> K String (String, Either IOError String)
readXdgFileK = (String -> Request) -> K String (String, Either IOError String)
readFileK' ((String -> Request) -> K String (String, Either IOError String))
-> (XdgDirectory -> String -> Request)
-> XdgDirectory
-> K String (String, Either IOError String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. XdgDirectory -> String -> Request
ReadXdgFile

readFileK' :: (String -> Request) -> K String (String, Either IOError String)
readFileK' String -> Request
req =
  Cont (K String (String, Either IOError String)) (KEvent String)
forall hi ho. Cont (K hi ho) (KEvent hi)
getK Cont (K String (String, Either IOError String)) (KEvent String)
-> Cont (K String (String, Either IOError String)) (KEvent String)
forall a b. (a -> b) -> a -> b
$ \ KEvent String
msg ->
  case KEvent String
msg of
    High String
filename ->
      Request
-> (Response -> K String (String, Either IOError String))
-> K String (String, Either IOError String)
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
Request -> (Response -> f b ho) -> f b ho
haskellIO (String -> Request
req String
filename) ((Response -> K String (String, Either IOError String))
 -> K String (String, Either IOError String))
-> (Response -> K String (String, Either IOError String))
-> K String (String, Either IOError String)
forall a b. (a -> b) -> a -> b
$ \ Response
resp ->
      (String, Either IOError String)
-> K String (String, Either IOError String)
-> K String (String, Either IOError String)
forall (f :: * -> * -> *) ho hi.
FudgetIO f =>
ho -> f hi ho -> f hi ho
putHigh (String
filename,case Response
resp of
                          Str String
s -> String -> Either IOError String
forall a b. b -> Either a b
Right String
s
		          Failure IOError
err -> IOError -> Either IOError String
forall a b. a -> Either a b
Left IOError
err)
      K String (String, Either IOError String)
readFileK
    KEvent String
_ -> K String (String, Either IOError String)
readFileK

readDirF :: F String (String, Either IOError [String])
readDirF = K String (String, Either IOError [String])
-> F String (String, Either IOError [String])
forall a b. K a b -> F a b
ioF K String (String, Either IOError [String])
readDirK

readDirK :: K String (String, Either IOError [String])
readDirK =
  Cont (K String (String, Either IOError [String])) (KEvent String)
forall hi ho. Cont (K hi ho) (KEvent hi)
getK Cont (K String (String, Either IOError [String])) (KEvent String)
-> Cont
     (K String (String, Either IOError [String])) (KEvent String)
forall a b. (a -> b) -> a -> b
$ \ KEvent String
msg ->
  case KEvent String
msg of
    High String
dirname ->
      Request
-> (Response -> K String (String, Either IOError [String]))
-> K String (String, Either IOError [String])
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
Request -> (Response -> f b ho) -> f b ho
haskellIO (String -> Request
ReadDirectory String
dirname) ((Response -> K String (String, Either IOError [String]))
 -> K String (String, Either IOError [String]))
-> (Response -> K String (String, Either IOError [String]))
-> K String (String, Either IOError [String])
forall a b. (a -> b) -> a -> b
$ \ Response
resp ->
      (String, Either IOError [String])
-> K String (String, Either IOError [String])
-> K String (String, Either IOError [String])
forall (f :: * -> * -> *) ho hi.
FudgetIO f =>
ho -> f hi ho -> f hi ho
putHigh (String
dirname,case Response
resp of
		         StrList [String]
filenames -> [String] -> Either IOError [String]
forall a b. b -> Either a b
Right [String]
filenames
			 Failure IOError
err -> IOError -> Either IOError [String]
forall a b. a -> Either a b
Left IOError
err)
      K String (String, Either IOError [String])
readDirK
    KEvent String
_ -> K String (String, Either IOError [String])
readDirK