83 self._error = True |
86 self._error = True |
84 self._errorString = self.trUtf8("File '{0}' does not exist.")\ |
87 self._errorString = self.trUtf8("File '{0}' does not exist.")\ |
85 .format(self.__fileName) |
88 .format(self.__fileName) |
86 return False |
89 return False |
87 |
90 |
88 self.__db = QSqlDatabase.addDatabase("QSQLITE") |
91 try: |
89 self.__db.setDatabaseName(self.__fileName) |
92 self.__db = sqlite3.connect(self.__fileName) |
90 opened = self.__db.open() |
93 except sqlite3.DatabaseError as err: |
91 |
|
92 if not opened: |
|
93 self._error = True |
94 self._error = True |
94 self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ |
95 self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ |
95 .format(self.__db.lastError().text()) |
96 .format(str(err)) |
96 return False |
97 return False |
97 |
98 |
98 return True |
99 return True |
99 |
100 |
100 def importedBookmarks(self): |
101 def importedBookmarks(self): |
101 """ |
102 """ |
102 Public method to get the imported bookmarks. |
103 Public method to get the imported bookmarks. |
103 |
104 |
104 @return imported bookmarks (BookmarkNode) |
105 @return imported bookmarks (BookmarkNode) |
105 """ |
106 """ |
106 importRootNode = BookmarkNode(BookmarkNode.Folder) |
107 importRootNode = BookmarkNode(BookmarkNode.Root) |
107 |
108 |
108 # step 1: build the hierarchy of bookmark folders |
109 # step 1: build the hierarchy of bookmark folders |
109 folders = {} |
110 folders = {} |
110 query = QSqlQuery(self.__db) |
|
111 query.exec_( |
|
112 "SELECT id, parent, title FROM moz_bookmarks WHERE type = 2 and title !=''") |
|
113 while query.next(): |
|
114 id_ = int(query.value(0)) |
|
115 parent = int(query.value(1)) |
|
116 title = query.value(2) |
|
117 if parent in folders: |
|
118 folder = BookmarkNode(BookmarkNode.Folder, folders[parent]) |
|
119 else: |
|
120 folder = BookmarkNode(BookmarkNode.Folder, importRootNode) |
|
121 folder.title = title.replace("&", "&&") |
|
122 folders[id_] = folder |
|
123 |
111 |
124 query = QSqlQuery(self.__db) |
112 try: |
125 query.exec_( |
113 cursor = self.__db.cursor() |
126 "SELECT parent, title, fk, position FROM moz_bookmarks" |
114 cursor.execute( |
127 " WHERE type = 1 and title != '' ORDER BY position") |
115 "SELECT id, parent, title FROM moz_bookmarks " |
128 while query.next(): |
116 "WHERE type = 2 and title !=''") |
129 parent = int(query.value(0)) |
117 for row in cursor: |
130 title = query.value(1).replace("&", "&&") |
118 id_ = row[0] |
131 placesId = int(query.value(2)) |
119 parent = row[1] |
132 |
120 title = row[2] |
133 query2 = QSqlQuery(self.__db) |
121 if parent in folders: |
134 query2.exec_("SELECT url FROM moz_places WHERE id = {0}".format(placesId)) |
122 folder = BookmarkNode(BookmarkNode.Folder, folders[parent]) |
135 if not query2.next(): |
123 else: |
136 continue |
124 folder = BookmarkNode(BookmarkNode.Folder, importRootNode) |
137 |
125 folder.title = title.replace("&", "&&") |
138 url = QUrl(query2.value(0)) |
126 folders[id_] = folder |
139 if not title or url.isEmpty() or url.scheme() in ["place", "about"]: |
127 except sqlite3.DatabaseError as err: |
140 continue |
128 self._error = True |
141 |
129 self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ |
142 if parent in folders: |
130 .format(str(err)) |
143 bookmark = BookmarkNode(BookmarkNode.Bookmark, folders[parent]) |
131 return None |
144 else: |
|
145 bookmark = BookmarkNode(BookmarkNode.Bookmark, importRootNode) |
|
146 bookmark.url = url.toString() |
|
147 bookmark.title = title.replace("&", "&&") |
|
148 |
132 |
149 if query.lastError().isValid(): |
133 try: |
|
134 cursor = self.__db.cursor() |
|
135 cursor.execute( |
|
136 "SELECT parent, title, fk, position FROM moz_bookmarks" |
|
137 " WHERE type = 1 and title != '' ORDER BY position") |
|
138 for row in cursor: |
|
139 parent = row[0] |
|
140 title = row[1] |
|
141 placesId = row[2] |
|
142 |
|
143 cursor2 = self.__db.cursor() |
|
144 cursor2.execute( |
|
145 "SELECT url FROM moz_places WHERE id = {0}".format(placesId)) |
|
146 row2 = cursor2.fetchone() |
|
147 if row2: |
|
148 url = QUrl(row2[0]) |
|
149 if not title or url.isEmpty() or url.scheme() in ["place", "about"]: |
|
150 continue |
|
151 |
|
152 if parent in folders: |
|
153 bookmark = BookmarkNode(BookmarkNode.Bookmark, folders[parent]) |
|
154 else: |
|
155 bookmark = BookmarkNode(BookmarkNode.Bookmark, importRootNode) |
|
156 bookmark.url = url.toString() |
|
157 bookmark.title = title.replace("&", "&&") |
|
158 except sqlite3.DatabaseError as err: |
150 self._error = True |
159 self._error = True |
151 self._errorString = query.lastError().text() |
160 self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ |
|
161 .format(str(err)) |
|
162 return None |
152 |
163 |
|
164 importRootNode.setType(BookmarkNode.Folder) |
153 if self._id == "firefox": |
165 if self._id == "firefox": |
154 importRootNode.title = self.trUtf8("Mozilla Firefox Import") |
166 importRootNode.title = self.trUtf8("Mozilla Firefox Import") |
155 else: |
167 else: |
156 importRootNode.title = self.trUtf8("Imported {0}")\ |
168 importRootNode.title = self.trUtf8("Imported {0}")\ |
157 .format(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) |
169 .format(QDate.currentDate().toString(Qt.SystemLocaleShortDate)) |