index
[cleanm.git] / index.icl
1 implementation module index
2
3 import StdEnv
4 import Data.Maybe
5 import Data.Error
6 import System.File
7 import System.Directory
8 import Text.GenJSON
9 import Data.Tree
10
11 import format
12
13 derive JSONEncode RTree, FileInfo, Tm, MaybeError
14 derive JSONDecode RTree, FileInfo, Tm, MaybeError
15
16 :: MusicDB =
17 { mdb_format :: [Format]
18 , mdb_tree :: RTree
19 }
20
21 //:: Tag =
22 // { tag_key :: !String
23 // , tag_value :: !String
24 // }
25
26 dbfile = "db.json"
27 root = "/mnt/data/music"
28
29 writeJSON :: a String *World -> (MaybeErrorString (), *World) | JSONEncode{|*|} a
30 writeJSON obj fp w
31 # (ok, f, w) = fopen fp FWriteData w
32 | not ok = (Error ("Cannot open " +++ fp +++ " as file"), w)
33 # (ok, w) = fclose (f <<< toJSON obj) w
34 | not ok = (Error ("Cannot close " +++ fp), w)
35 = (Ok (), w)
36
37 Start w
38 # (mfi, w) = getFileInfo root w
39 | isError mfi = abort "Cannot open root\n"
40 # (Ok fi) = mfi
41 | not fi.directory = abort "Root is not a directory\n"
42 # (tree, w) = readDirectoryTree root Nothing w
43 = writeJSON tree dbfile w