tree and format
[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 :: Tag =
20 { tag_key :: !String
21 , tag_value :: !String
22 }
23
24 dbfile = "db.json"
25 root = "/mnt/data/music"
26
27 writeJSON :: a String *World -> (MaybeErrorString (), *World) | JSONEncode{|*|} a
28 writeJSON obj fp w
29 # (ok, f, w) = fopen fp FWriteData w
30 | not ok = (Error ("Cannot open " +++ fp +++ " as file"), w)
31 # (ok, w) = fclose (f <<< toJSON obj) w
32 | not ok = (Error ("Cannot close " +++ fp), w)
33 = (Ok (), w)
34
35 Start w
36 # (mfi, w) = getFileInfo root w
37 | isError mfi = abort "Cannot open root\n"
38 # (Ok fi) = mfi
39 | not fi.directory = abort "Root is not a directory\n"
40 # (tree, w) = readDirectoryTree root Nothing w
41 = writeJSON tree dbfile w