@@ -253,10 +253,10 @@ checkPieces fileLookup indices pieces req ss
254 fl <- fileLookup pieces
254 fl <- fileLookup pieces
255 case (fl, isFile) of
255 case (fl, isFile) of
256− (FLDoesNotExist, _) -> return NotFound
256+ (Nothing, _) -> return NotFound
257− (FLFile file, True) -> handleCache file
257+ (Just (Right file), True) -> handleCache file
258− (FLFile{}, False) -> return $ Redirect $ init pieces
258+ (Just Right{}, False) -> return $ Redirect $ init pieces
259− (FLFolder folder@(Folder _ contents), _) -> do
259+ (Just (Left folder@(Folder _ contents)), _) -> do
260 case checkIndices $ map fileName $ rights contents of
260 case checkIndices $ map fileName $ rights contents of
261 Just index -> return $ Redirect $ setLast pieces $ Piece (T.unpack index) index
261 Just index -> return $ Redirect $ setLast pieces $ Piece (T.unpack index) index
262 Nothing ->
262 Nothing ->
@@ -324,7 +324,7 @@ defaultDirListing = StaticDirListing (Just defaultListing) []
324oneYear :: Int
324oneYear :: Int
325oneYear = 60 * 60 * 24 * 365
325oneYear = 60 * 60 * 24 * 365
327−data FileLookup = FLFolder Folder | FLFile File | FLDoesNotExist -- FIXME remove
327+type FileLookup = Maybe (Either Folder File)
329data Folder = Folder
329data Folder = Folder
330 { folderName :: T.Text
330 { folderName :: T.Text
@@ -383,7 +383,7 @@ fileSystemLookup prefix pieces = do
385 fs <- getFileStatus fp
385 fs <- getFileStatus fp
386− return $ FLFile File
386+ return $ Just $ Right File
387 { fileGetSize = fromIntegral $ fileSize fs
387 { fileGetSize = fromIntegral $ fileSize fs
388 , fileToResponse = \s h -> W.ResponseFile s h fp Nothing
388 , fileToResponse = \s h -> W.ResponseFile s h fp Nothing
389 , fileName = piecePretty $ last pieces
389 , fileName = piecePretty $ last pieces
@@ -420,8 +420,8 @@ fileSystemLookup prefix pieces = do
420 , fileGetModified = Just $ modificationTime fs
420 , fileGetModified = Just $ modificationTime fs
422 else return $ Left $ Folder name' [])
422 else return $ Left $ Folder name' [])
423− return $ FLFolder $ Folder (error "413") entries
423+ return $ Just $ Left $ Folder (error "413") entries
424− else return FLDoesNotExist
424+ else return Nothing
426type Embedded = Map.Map T.Text EmbeddedEntry
426type Embedded = Map.Map T.Text EmbeddedEntry
@@ -432,19 +432,19 @@ embeddedLookup root pieces =
432 return $ elookup "<root>" (map piecePretty pieces) root
432 return $ elookup "<root>" (map piecePretty pieces) root
434 elookup :: T.Text -> [T.Text] -> Embedded -> FileLookup
434 elookup :: T.Text -> [T.Text] -> Embedded -> FileLookup
435− elookup p [] x = FLFolder $ Folder p $ map toEntry $ Map.toList x
435+ elookup p [] x = Just $ Left $ Folder p $ map toEntry $ Map.toList x
436 elookup p [""] x = elookup p [] x
436 elookup p [""] x = elookup p [] x
437 elookup _ (p:ps) x =
437 elookup _ (p:ps) x =
438 case Map.lookup p x of
438 case Map.lookup p x of
439− Nothing -> FLDoesNotExist
439+ Nothing -> Nothing
440 Just (EEFile f) ->
440 Just (EEFile f) ->
441 case ps of
441 case ps of
442− [] -> FLFile $ bsToFile p f
442+ [] -> Just $ Right $ bsToFile p f
443− _ -> FLDoesNotExist
443+ _ -> Nothing
444 Just (EEFolder y) -> elookup p ps y
444 Just (EEFolder y) -> elookup p ps y
446toEntry :: (T.Text, EmbeddedEntry) -> Either Folder File
446toEntry :: (T.Text, EmbeddedEntry) -> Either Folder File
447−toEntry (name, EEFolder e) = Left $ Folder name (error "toEntry")
447+toEntry (name, EEFolder e) = Left $ Folder name []
448toEntry (name, EEFile bs) = Right $ File
448toEntry (name, EEFile bs) = Right $ File
449 { fileGetSize = S8.length bs
449 { fileGetSize = S8.length bs
450 , fileToResponse = \s h -> W.ResponseBuilder s h $ fromByteString bs
450 , fileToResponse = \s h -> W.ResponseBuilder s h $ fromByteString bs