ReadFileF

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 = ioF readFileK
readBinaryFileF = ioF readBinaryFileK
readXdgFileF = ioF . readXdgFileK

readFileK = readFileK' ReadFile
readBinaryFileK = readFileK' ReadBinaryFile
readXdgFileK = readFileK' . ReadXdgFile

readFileK' req =
  getK $ \ msg ->
  case msg of
    High filename ->
      haskellIO (req filename) $ \ resp ->
      putHigh (filename,case resp of
                          Str s -> Right s
		          Failure err -> Left err)
      readFileK
    _ -> readFileK

readDirF = ioF readDirK

readDirK =
  getK $ \ msg ->
  case msg of
    High dirname ->
      haskellIO (ReadDirectory dirname) $ \ resp ->
      putHigh (dirname,case resp of
		         StrList filenames -> Right filenames
			 Failure err -> Left err)
      readDirK
    _ -> readDirK