Started coding reader
[ReadingsJQM.git] / js / app / Catalogue.coffee
index c556e5b..0b1f1e8 100644 (file)
@@ -7,23 +7,30 @@ class Readings.Catalogue
     this
 
   init: (db) ->
+    unneded_stmts = (stmt, idx) ->
+      stmt.indexOf("PRAGMA")==0 or
+      stmt.indexOf("BEGIN TRANSACTION")==0 or
+      stmt.indexOf("COMMIT")==0 or
+      /^\s*$/.exec stmt
+
     if not db?
       db = @db
     console.log "initializing DB"
     db.changeVersion "", Readings.config.get 'db_version'
-    $.ajax "initdb.sql"
+    $.ajax Readings.config.get('initdburl'),
       type: "GET"
       dataType: 'text'
       success: (sql) =>
         sql = sql.split /;\n/
-        sql = sql.slice(1,-2)
+        sql = $.grep sql, unneded_stmts, true
 
         create = (tx) =>
           for stmt in sql
-            console.log stmt
             tx.executeSql stmt, [],
               (tx,rs) => true,
-              (tx,err) => console.error(err)
+              (tx,err) =>
+                console.error("error for #{stmt}")
+                console.error(err)
 
         db.transaction create
       error: =>
@@ -69,7 +76,22 @@ class Readings.Catalogue
         @wrap_error()
 
   withBooks: (tag, cb) ->
-    @db.readTransaction (tx)=>
+    @db.readTransaction (tx) =>
       console.log "books in tag: #{tag.books}"
       tx.executeSql "SELECT * FROM book WHERE id IN (#{tag.books}) ORDER BY sort_key",
         [], ((tx, rs) => cb(@map_rs(rs, (rec)->new Readings.Book(rec)))), @wrap_error()
+
+  fetchBook: (book_id, fetch_contents, cb) ->
+    unless typeof book_id == "number" or /^[0-9]+$/.exec book_id
+      throw Error "book_id = '#{book_id}' is not a number"
+
+    @db.readTransaction (tx) =>
+      tx.executeSql "SELECT * FROM book WHERE id=?", [book_id],
+        (tx, rs) =>
+          if rs.rows.length > 0
+            book = new Readings.Book rs.rows.item(0)
+            if fetch_contents and not book.is_local()
+              book.fetch (book) ->
+                cb(book)
+            else
+              return cb(book)