1 implementation module index
7 import System.Directory
11 derive JSONEncode RTree, FileInfo, Tm, MaybeError
12 derive JSONDecode RTree, FileInfo, Tm, MaybeError
14 :: MusicDB :== RTree MusicEntry
16 { fe_filepath :: !FilePath
17 , fe_fileinfo :: !MaybeOSError FileInfo
18 , fe_musicentry :: [!Tag!]
22 , tag_value :: !String
25 index :: MusicDB (RTree (FilePath, MaybeOSError FileInfo)) *World -> *(MusicDB, *World)
26 index (RNode mn mcs) (RNode (fp, mfi) fcs) w = (RNode mn mcs, w)
29 root = "/mnt/data/music"
32 # (ok, f, w) = fopen dbfile FWriteData w
33 | not ok = abort "Cannot open file\n"
34 # (ok, w) = fclose (f <<< toJSON db) w
35 | not ok = abort "Cannot close file\n"
39 # (mfi, w) = getFileInfo root w
40 | isError mfi = abort "Cannot open root\n"
42 | not fi.directory = abort "Root is not a directory\n"
43 # (tree, w) = readDirectoryTree root Nothing w
44 # (db, w) = index (RNode {fe_filepath=root,fe_fileinfo=mfi,fe_musicentry=[!!]} []) tree w