import Text.GenJSON
import Data.Tree
+import format
+
derive JSONEncode RTree, FileInfo, Tm, MaybeError
derive JSONDecode RTree, FileInfo, Tm, MaybeError
-:: MusicDB :== RTree MusicEntry
-:: MusicEntry =
- { fe_filepath :: !FilePath
- , fe_fileinfo :: !MaybeOSError FileInfo
- , fe_musicentry :: [!Tag!]
- }
+:: MusicDB =
+ { mdb_format :: [Format]
+ , mdb_tree :: RTree
:: Tag =
{ tag_key :: !String
, tag_value :: !String
}
-index :: MusicDB (RTree (FilePath, MaybeOSError FileInfo)) *World -> *(MusicDB, *World)
-index (RNode mn mcs) (RNode (fp, mfi) fcs) w = (RNode mn mcs, w)
-
dbfile = "db.json"
root = "/mnt/data/music"
-writeDB db w
- # (ok, f, w) = fopen dbfile FWriteData w
- | not ok = abort "Cannot open file\n"
- # (ok, w) = fclose (f <<< toJSON db) w
- | not ok = abort "Cannot close file\n"
- = w
+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
# (Ok fi) = mfi
| not fi.directory = abort "Root is not a directory\n"
# (tree, w) = readDirectoryTree root Nothing w
- # (db, w) = index (RNode {fe_filepath=root,fe_fileinfo=mfi,fe_musicentry=[!!]} []) tree w
- = writeDB tree w
+ = writeJSON tree dbfile w