index
[cleanm.git] / index.icl
index 373ed82..95032d1 100644 (file)
--- a/index.icl
+++ b/index.icl
@@ -8,32 +8,31 @@ import System.Directory
 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!]
-       }
-:: Tag =
-       { tag_key   :: !String
-       , tag_value :: !String
+:: MusicDB =
+       { mdb_format :: [Format]
+       , mdb_tree   :: RTree
        }
 
-index :: MusicDB (RTree (FilePath, MaybeOSError FileInfo)) *World -> *(MusicDB, *World)
-index (RNode mn mcs) (RNode (fp, mfi) fcs) w = (RNode mn mcs, w)
+//:: Tag =
+//     { tag_key   :: !String
+//     , tag_value :: !String
+//     }
 
 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
@@ -41,5 +40,4 @@ Start 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