implementation module index import StdEnv import Data.Maybe import Data.Error import System.File import System.Directory import Text.GenJSON import Data.Tree import format derive JSONEncode RTree, FileInfo, Tm, MaybeError derive JSONDecode RTree, FileInfo, Tm, MaybeError :: MusicDB = { mdb_format :: [Format] , mdb_tree :: RTree } //:: Tag = // { tag_key :: !String // , tag_value :: !String // } dbfile = "db.json" root = "/mnt/data/music" writeJSON :: a String *World -> (MaybeErrorString (), *World) | JSONEncode{|*|} a writeJSON obj fp w # (ok, f, w) = fopen fp FWriteData w | not ok = (Error ("Cannot open " +++ fp +++ " as file"), w) # (ok, w) = fclose (f <<< toJSON obj) w | not ok = (Error ("Cannot close " +++ fp), w) = (Ok (), w) Start w # (mfi, w) = getFileInfo root w | isError mfi = abort "Cannot open root\n" # (Ok fi) = mfi | not fi.directory = abort "Root is not a directory\n" # (tree, w) = readDirectoryTree root Nothing w = writeJSON tree dbfile w