diff --git a/linkwave.scm b/linkwave.scm index 7e26a05..f36c5e2 100644 --- a/linkwave.scm +++ b/linkwave.scm @@ -5,13 +5,38 @@ (: string-no-null (string -> string)) (define (string-no-null str) - (substring str 0 (- (string-length str) 1))) + (if (and (> (string-length str) 0) + (char=? (string-ref str (- (string-length str) 1)) #\nul)) + (substring str 0 (- (string-length str) 1)) + str)) (: print-row (string fixnum string string -> void)) (define (print-row url seconds name description) (format #t "~a~% ~a~% ~a~% ~a~%~%" (string-no-null name) (string-no-null description) (string-no-null url) (seconds->string seconds))) +(define (add-bookmark url name description tags) + (execute db "INSERT INTO bookmark VALUES (?, STRFTIME('%s'), ?, ?)" + url name description) + (let ((bookmark-id (last-insert-rowid db))) + (for-each (lambda (tag) + (let ((tag-id (first-result db "SELECT rowid FROM tag WHERE name = ?" tag))) + (unless tag-id + (execute db "INSERT INTO tag VALUES (?)" tag) + (set! tag-id (last-insert-rowid db))) + (execute db "INSERT INTO bookmark_tag VALUES (?, ?)" + bookmark-id tag-id))) + tags))) + (define db (open-database (data-file "linkwave.db"))) -(for-each-row print-row db "select * from bookmark") + +(let ((cla (command-line-arguments))) + (if (null? cla) + (for-each-row print-row db "select * from bookmark") + (cond + ((and (>= (string-length (car cla)) 7) (string= (substring (car cla) 0 7) "http://")) + (add-bookmark (car cla) (cadr cla) (caddr cla) (cdddr cla))) + (else + (format #t "Unrecognized option: ~a~%" (car cla)))))) + (finalize! db #t)