- fp2cn :: Int (FilePath, FileInfo) -> ChoiceNode
- fp2cn i (fp, fi) = {id =if fi.directory (~i) i,label=dropDirectory fp,icon=Nothing,expanded=False,children=[]}
-
- fromTree :: (RTree (Int, (FilePath, a))) [Int] -> [FilePath]
- fromTree tree sel = [f\\(i, (f, _))<-leafs tree | isMember i sel]
-
-recurseDirectory :: !FilePath !FilePath !*World -> *(MaybeOSError (RTree (FilePath, FileInfo)), !*World)
-recurseDirectory acc fp w
- # fp = acc </> fp
- # (mfi, w) = getFileInfo fp w
- | isError mfi = (liftError mfi, w)
- # (Ok fi) = mfi
- | not fi.directory = (Ok $ RNode (fp, fi) [], w)
- # (mcs, w) = readDirectory fp w
- | isError mfi = (liftError mcs, w)
- # (cs, w) = appFst sequence $ mapSt (recurseDirectory fp) (filter (\c->not (elem c [".", ".."])) (fromOk mcs)) w
- = (RNode (fp, fi) <$> cs, w)
+
+ =
+
+directoryShare :: ROShared FilePath [(FilePath, MaybeOSError FileInfo)]
+directoryShare = SDSSource {SDSSource | name = "directoryShare", read = read, write=write}
+where
+ read p iw
+ # (merr, iw) = liftIWorld (readDirectory p) iw
+ | isError merr = (liftError (first exception merr), iw)
+ # (Ok files) = merr
+ # (fis, iw) = liftIWorld (seqList (map getFileInfo files)) iw
+ = (Ok $ sortBy fst [(f, fi)\\f<-files & fi<-fis], iw)
+
+ write p w iw = (Ok (const (const False)), iw)