From 5535308fffdd58ac17937d676c096fe889acb77e Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Fri, 28 Dec 2012 20:24:20 +0100 Subject: Restructure Put all source files in `src/' and add the `conkeror/' directory from the old project. --- Makefile | 11 ++--------- conkeror/linkwave.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ convert.scm | 51 ----------------------------------------------- linkwave.scm | 56 ---------------------------------------------------- paths.scm | 17 ---------------- src/Makefile | 11 +++++++++++ src/convert.scm | 51 +++++++++++++++++++++++++++++++++++++++++++++++ src/linkwave.scm | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/paths.scm | 17 ++++++++++++++++ 9 files changed, 189 insertions(+), 133 deletions(-) create mode 100644 conkeror/linkwave.js delete mode 100644 convert.scm delete mode 100644 linkwave.scm delete mode 100644 paths.scm create mode 100644 src/Makefile create mode 100644 src/convert.scm create mode 100644 src/linkwave.scm create mode 100644 src/paths.scm diff --git a/Makefile b/Makefile index c0a9ee8..6bcd90a 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,4 @@ .PHONY: all -all: linkwave convert -linkwave: linkwave.scm paths.o - csc $^ -o $@ - -convert: convert.scm paths.o - csc $^ -o $@ - -paths.o: paths.scm - csc -c $^ +all: + $(MAKE) -C src/ diff --git a/conkeror/linkwave.js b/conkeror/linkwave.js new file mode 100644 index 0000000..8ac3a52 --- /dev/null +++ b/conkeror/linkwave.js @@ -0,0 +1,52 @@ +define_variable("linkwave_program", "/home/slash/projects/nlinkwave/src/linkwave", + "The location of the linkwave executable."); + +function linkwave_add_url(I, url, title) +{ + let url_string = load_spec_uri_string(load_spec(url)); + let title = yield I.minibuffer.read($prompt="name (required): ", + $initial_value=title); + let description = yield I.minibuffer.read( + $prompt="extended description: " + ); + let tags = yield I.minibuffer.read( + $prompt="tags (comma delimited): " + ); + let command = linkwave_program + ' "' + url_string + '" "' + title + + '" "' + description + '" \'' + + tags.split(',').map(function (str) + { return str.trim(); }).join("' '") + + "'"; + yield shell_command(command); +} + +function linkwave_add(I) { + check_buffer(I.buffer, content_buffer); + let result = yield linkwave_add_url(I, I.buffer.top_frame, + I.buffer.title); + + if (!result) + I.window.minibuffer.message('Added to linkwave'); + else + I.window.minibuffer.message('Couldn\'t add to linkwave'); +} +interactive("linkwave-add", + "Bookmark a page in linkwave", + linkwave_add); + +function linkwave_add_link(I) { + check_buffer(I.buffer, content_buffer); + bo = yield read_browser_object(I); + let result = yield linkwave_add_url(I, encodeURIComponent(bo), + bo.textContent); + + if (!result) + I.window.minibuffer.message('Added to linkwave'); + else + I.window.minibuffer.message('Couldn\'t add to linkwave'); +} +interactive("linkwave-add-link", + "Bookmark a link in linkwave", + linkwave_add_link); + +provide("linkwave"); diff --git a/convert.scm b/convert.scm deleted file mode 100644 index cb38385..0000000 --- a/convert.scm +++ /dev/null @@ -1,51 +0,0 @@ -;;; convert.scm -- Convert the old database into a new one -(declare (uses paths)) - -(require-extension sqlite3) -(require-library srfi-4) - -(define (blob->seconds blob) - (if (u32vector? blob) - (u32vector-ref (blob->u32vector blob) 0) - 0)) - -(define (convert-table db name converter #!optional select) - (let ((count (first-result db (string-append "SELECT COUNT(*) FROM " name))) - (progress 0)) - (for-each-row (lambda args - (apply converter args) - (set! progress (+ progress 1)) - (format #t "Converted ~s of ~s ~a rows\r~!" progress count name)) - db (or select (string-append "SELECT * FROM " name))) - (newline))) - -(define (convert) - (let ((old-db (open-database (data-file "linkwave.db"))) - (new-db (open-database (data-file "nlinkwave.db")))) - (execute new-db "CREATE TABLE bookmark (url VARCHAR(255) UNIQUE, date INTEGER, name VARCHAR(255), description TEXT)") - (execute new-db "CREATE TABLE tag (name VARCHAR(255) UNIQUE)") - (execute new-db "CREATE TABLE bookmark_tag (bookmark_id INTEGER REFERENCES bookmark(rowid), tag_id INTEGER REFERENCES tag(rowid), PRIMARY KEY (bookmark_id, tag_id))") - - (convert-table old-db "bookmark" - (lambda (url dateblob name description) - (execute new-db "INSERT INTO bookmark VALUES (?, ?, ?, ?)" - url (blob->seconds dateblob) name description))) - - (convert-table old-db "tag" - (lambda (name) - (execute new-db "INSERT INTO tag VALUES (?)" name))) - - (convert-table old-db "bookmark_tag" - (lambda (url tag) - (execute new-db "INSERT INTO bookmark_tag VALUES (?, ?)" - (first-result new-db "SELECT rowid FROM bookmark WHERE url = ?" url) - (first-result new-db "SELECT rowid FROM tag WHERE name = ?" tag))) - "SELECT url, name FROM bookmark_tag JOIN tag ON (tag_id = tag.rowid)") - - (rename-file (data-file "linkwave.db") (data-file "old-linkwave.db")) - (rename-file (data-file "nlinkwave.db") (data-file "linkwave.db")) - (format #t "Database converted.~%"))) - -(if (file-exists? "/home/slash/.local/share/linkwave/nlinkwave.db") - (format #t "Converted database already exists.~%") - (convert)) diff --git a/linkwave.scm b/linkwave.scm deleted file mode 100644 index 85e2d20..0000000 --- a/linkwave.scm +++ /dev/null @@ -1,56 +0,0 @@ -(declare (uses paths)) - -(require-extension sqlite3) -(require-library posix srfi-4) - -(: string-no-null (string -> string)) -(define (string-no-null str) - (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-tag db name) - (execute db "INSERT INTO tag VALUES (?)" name) - (last-insert-rowid db)) - -(define (add-bookmark db 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 '())) - (condition-case - (set! tag-id (first-result db "SELECT rowid FROM tag WHERE name = ?" tag)) - (exn (exn sqlite3) - (if (eq? (get-condition-property exn 'sqlite3 'status) 'done) - (set! tag-id (add-tag db tag)) - (signal exn)))) - (execute db "INSERT INTO bookmark_tag VALUES (?, ?)" - bookmark-id tag-id))) - tags))) - -(define (url-string? str) - (and (> (string-length str) 7) - (or (string= (substring str 0 7) "http://") - (string= (substring str 0 8) "https://")))) - -(define (main args) - (let ((db (open-database (data-file "linkwave.db")))) - (if (null? args) - (for-each-row print-row db "select * from bookmark") - (cond - ((url-string? (car args)) - (with-transaction - db (lambda () (add-bookmark db (car args) (cadr args) (caddr args) (cdddr args)) #t))) - (else - (format #t "Unrecognized option: ~a~%" (car args))))) - - (finalize! db #t))) - -(main (command-line-arguments)) diff --git a/paths.scm b/paths.scm deleted file mode 100644 index 50bd622..0000000 --- a/paths.scm +++ /dev/null @@ -1,17 +0,0 @@ -;;; paths.scm -- Functions which work with/on paths -(declare (unit paths)) - -(define (stored-file xdg-env file) - (let ((xdg (get-environment-variable xdg-env)) - (stored-file (string-append (get-environment-variable "HOME") "/.linkwave/" file))) - (unless (or (file-exists? stored-file) (not xdg)) - (set! stored-file (string-append xdg "/linkwave/" file))) - stored-file)) - -(: config-file (string -> string)) -(define (config-file file) - (stored-file "XDG_CONFIG_HOME" file)) - -(: data-file (string -> string)) -(define (data-file file) - (stored-file "XDG_DATA_HOME" file)) diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..c0a9ee8 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,11 @@ +.PHONY: all + +all: linkwave convert +linkwave: linkwave.scm paths.o + csc $^ -o $@ + +convert: convert.scm paths.o + csc $^ -o $@ + +paths.o: paths.scm + csc -c $^ diff --git a/src/convert.scm b/src/convert.scm new file mode 100644 index 0000000..cb38385 --- /dev/null +++ b/src/convert.scm @@ -0,0 +1,51 @@ +;;; convert.scm -- Convert the old database into a new one +(declare (uses paths)) + +(require-extension sqlite3) +(require-library srfi-4) + +(define (blob->seconds blob) + (if (u32vector? blob) + (u32vector-ref (blob->u32vector blob) 0) + 0)) + +(define (convert-table db name converter #!optional select) + (let ((count (first-result db (string-append "SELECT COUNT(*) FROM " name))) + (progress 0)) + (for-each-row (lambda args + (apply converter args) + (set! progress (+ progress 1)) + (format #t "Converted ~s of ~s ~a rows\r~!" progress count name)) + db (or select (string-append "SELECT * FROM " name))) + (newline))) + +(define (convert) + (let ((old-db (open-database (data-file "linkwave.db"))) + (new-db (open-database (data-file "nlinkwave.db")))) + (execute new-db "CREATE TABLE bookmark (url VARCHAR(255) UNIQUE, date INTEGER, name VARCHAR(255), description TEXT)") + (execute new-db "CREATE TABLE tag (name VARCHAR(255) UNIQUE)") + (execute new-db "CREATE TABLE bookmark_tag (bookmark_id INTEGER REFERENCES bookmark(rowid), tag_id INTEGER REFERENCES tag(rowid), PRIMARY KEY (bookmark_id, tag_id))") + + (convert-table old-db "bookmark" + (lambda (url dateblob name description) + (execute new-db "INSERT INTO bookmark VALUES (?, ?, ?, ?)" + url (blob->seconds dateblob) name description))) + + (convert-table old-db "tag" + (lambda (name) + (execute new-db "INSERT INTO tag VALUES (?)" name))) + + (convert-table old-db "bookmark_tag" + (lambda (url tag) + (execute new-db "INSERT INTO bookmark_tag VALUES (?, ?)" + (first-result new-db "SELECT rowid FROM bookmark WHERE url = ?" url) + (first-result new-db "SELECT rowid FROM tag WHERE name = ?" tag))) + "SELECT url, name FROM bookmark_tag JOIN tag ON (tag_id = tag.rowid)") + + (rename-file (data-file "linkwave.db") (data-file "old-linkwave.db")) + (rename-file (data-file "nlinkwave.db") (data-file "linkwave.db")) + (format #t "Database converted.~%"))) + +(if (file-exists? "/home/slash/.local/share/linkwave/nlinkwave.db") + (format #t "Converted database already exists.~%") + (convert)) diff --git a/src/linkwave.scm b/src/linkwave.scm new file mode 100644 index 0000000..85e2d20 --- /dev/null +++ b/src/linkwave.scm @@ -0,0 +1,56 @@ +(declare (uses paths)) + +(require-extension sqlite3) +(require-library posix srfi-4) + +(: string-no-null (string -> string)) +(define (string-no-null str) + (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-tag db name) + (execute db "INSERT INTO tag VALUES (?)" name) + (last-insert-rowid db)) + +(define (add-bookmark db 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 '())) + (condition-case + (set! tag-id (first-result db "SELECT rowid FROM tag WHERE name = ?" tag)) + (exn (exn sqlite3) + (if (eq? (get-condition-property exn 'sqlite3 'status) 'done) + (set! tag-id (add-tag db tag)) + (signal exn)))) + (execute db "INSERT INTO bookmark_tag VALUES (?, ?)" + bookmark-id tag-id))) + tags))) + +(define (url-string? str) + (and (> (string-length str) 7) + (or (string= (substring str 0 7) "http://") + (string= (substring str 0 8) "https://")))) + +(define (main args) + (let ((db (open-database (data-file "linkwave.db")))) + (if (null? args) + (for-each-row print-row db "select * from bookmark") + (cond + ((url-string? (car args)) + (with-transaction + db (lambda () (add-bookmark db (car args) (cadr args) (caddr args) (cdddr args)) #t))) + (else + (format #t "Unrecognized option: ~a~%" (car args))))) + + (finalize! db #t))) + +(main (command-line-arguments)) diff --git a/src/paths.scm b/src/paths.scm new file mode 100644 index 0000000..50bd622 --- /dev/null +++ b/src/paths.scm @@ -0,0 +1,17 @@ +;;; paths.scm -- Functions which work with/on paths +(declare (unit paths)) + +(define (stored-file xdg-env file) + (let ((xdg (get-environment-variable xdg-env)) + (stored-file (string-append (get-environment-variable "HOME") "/.linkwave/" file))) + (unless (or (file-exists? stored-file) (not xdg)) + (set! stored-file (string-append xdg "/linkwave/" file))) + stored-file)) + +(: config-file (string -> string)) +(define (config-file file) + (stored-file "XDG_CONFIG_HOME" file)) + +(: data-file (string -> string)) +(define (data-file file) + (stored-file "XDG_DATA_HOME" file)) -- cgit v1.3-2-g0d8e