0
|
1 var GoogleBookmarksParser = {
|
|
2 parse: function(xml, idStart) {
|
|
3 var items = xml.getElementsByTagName('item');
|
|
4
|
|
5 var list = [];
|
|
6 for (var i = 0, len = items.length; i < len; i++) {
|
|
7 var bookmark = {};
|
|
8 var item = items[i];
|
|
9
|
|
10 bookmark.id = idStart + i;
|
|
11 bookmark.url = this.getFirstText(item, 'link');
|
|
12 bookmark.title = this.getFirstText(item, 'title');
|
|
13 bookmark.info = this.getInfo(item);
|
|
14 bookmark.tags = this.getTags(item);
|
|
15 bookmark.time = this.getFirstText(item, 'pubDate');
|
|
16
|
|
17 list.push(bookmark);
|
|
18 }
|
|
19
|
|
20 return list;
|
|
21 },
|
|
22 getInfo: function(item) {
|
|
23
|
|
24 var annotation = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_annotation');
|
|
25 return (annotation.length != 0) ? annotation[0].firstChild.nodeValue : '';
|
|
26 },
|
|
27 getTags: function(item) {
|
|
28
|
|
29 var tags = item.getElementsByTagNameNS('http://www.google.com/history/', 'bkmk_label');
|
|
30
|
|
31 var tagsList = [];
|
|
32 for (var i = 0, len = tags.length; i < len; i++) {
|
|
33 tagsList.push(tags[i].firstChild.nodeValue);
|
|
34 }
|
|
35
|
|
36 if (tagsList.length == 0) {
|
|
37 return '';
|
|
38 }
|
|
39 return '[' + tagsList.join('] [') + ']';
|
|
40 },
|
|
41 getFirstText: function(element, tagName) {
|
|
42 var firstChild = element.getElementsByTagName(tagName)[0].firstChild;
|
|
43 return (firstChild) ? firstChild.nodeValue : '';
|
|
44 }
|
|
45 }
|
|
46
|
|
47
|
|
48 var GoogleBookmarksLoader = function(statusElement, loadingElement, database, callback) {
|
|
49 this.init(statusElement, loadingElement, database, callback);
|
|
50 };
|
|
51
|
|
52 for (var prop in LoaderBase.prototype) {
|
|
53 GoogleBookmarksLoader.prototype[prop] = LoaderBase.prototype[prop];
|
|
54 }
|
|
55
|
|
56 GoogleBookmarksLoader.prototype.url = 'https://www.google.com/bookmarks/lookup?output=rss&sort=date';
|
|
57 GoogleBookmarksLoader.COLLECT_SIZE = 1000;
|
|
58
|
|
59 GoogleBookmarksLoader.prototype._load = function() {
|
|
60 this.bookmarks = [];
|
|
61 this.__load();
|
|
62 }
|
|
63 GoogleBookmarksLoader.prototype.__load = function() {
|
|
64
|
|
65 var self = this;
|
|
66 var request = new XMLHttpRequest();
|
|
67
|
|
68 request.onreadystatechange = function() {
|
|
69 if (request.readyState == 4) {
|
|
70 try {
|
|
71 request.status
|
|
72 } catch(e) {
|
|
73 // error
|
|
74 self.error('error :connect error :' + self.url);
|
|
75 }
|
|
76
|
|
77 if (request.status == 200) {
|
|
78 // success
|
|
79
|
|
80 var xml = request.responseXML;
|
|
81
|
|
82 var tempBookmarks = GoogleBookmarksParser.parse(xml, self.bookmarks.length);
|
|
83 self.bookmarks = self.bookmarks.concat(tempBookmarks);
|
|
84
|
|
85 if (tempBookmarks.length < GoogleBookmarksLoader.COLLECT_SIZE) {
|
|
86
|
|
87 var userId = 'dummy';
|
|
88 prefBranch.setCharPref('userId', userId);
|
|
89 incsearch.userId = userId;
|
|
90
|
|
91 self.total = self.bookmarks.length;
|
|
92
|
|
93 var generator = self.update(self.bookmarks);
|
|
94
|
|
95 var executer = new Executer(
|
|
96 generator,
|
|
97 100,
|
|
98 function(count) {
|
|
99 self.dispLoading(count);
|
|
100 },
|
|
101 function() {
|
|
102 self.dispEnd(self.bookmarks.length);
|
|
103 self.callback();
|
|
104 }
|
|
105 );
|
|
106
|
|
107 executer.run();
|
|
108
|
|
109 } else {
|
|
110 self.__load();
|
|
111 }
|
|
112 } else {
|
|
113 // error
|
|
114 var errMsg = 'error :' + request.status + ' :' + request.statusText + ' :' + self.url;
|
|
115 self.error(errMsg);
|
|
116 }
|
|
117 }
|
|
118 };
|
|
119
|
|
120 request.open("GET", this.url + '&start=' + this.bookmarks.length + '&num=' + GoogleBookmarksLoader.COLLECT_SIZE, true);
|
|
121 request.send(null);
|
|
122 };
|
|
123
|
|
124
|
|
125 IncSearch.prototype.createEditUrl = function(bookmark) {
|
|
126 return 'http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=' + encodeURIComponent(bookmark.url);
|
|
127 };
|
|
128
|
|
129
|
|
130 var EXTENSION_NAME = 'googlebookmarks_incsearch';
|
|
131 var BookmarkLoader = GoogleBookmarksLoader;
|