Wed, 21 Mar 2012 12:02:57 +0100
Adapted the bookmarks importers to Mac OS X and changed the SQL stuff of the firefox importer to use sqlite3 because of issues of QSql on Mac OS X.
--- a/Helpviewer/Bookmarks/BookmarksImportDialog.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImportDialog.py Wed Mar 21 12:02:57 2012 +0100 @@ -7,6 +7,8 @@ Module implementing a dialog for importing bookmarks from other sources. """ +import os + from PyQt4.QtCore import pyqtSlot, Qt, QSize from PyQt4.QtGui import QDialog, QListWidgetItem, QFileDialog @@ -17,6 +19,7 @@ from . import BookmarksImporters import Utilities +import Globals class BookmarksImportDialog(QDialog, Ui_BookmarksImportDialog): @@ -85,11 +88,15 @@ self.__sourceDir, QFileDialog.Options(QFileDialog.Option(0))) else: + if Globals.isMacPlatform(): + filter = "*{0}".format(os.path.splitext(self.__sourceFile)[1]) + else: + filter = self.__sourceFile path = E5FileDialog.getOpenFileName( self, self.trUtf8("Choose File ..."), - self.__sourceDir, - self.__sourceFile) + self.__sourceDir, + filter) if path: self.fileEdit.setText(Utilities.toNativeSeparators(path))
--- a/Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py Wed Mar 21 12:02:57 2012 +0100 @@ -32,6 +32,9 @@ if Globals.isWindowsPlatform(): standardDir = os.path.expandvars( "%USERPROFILE%\\AppData\\Local\\Google\\Chrome\\User Data\\Default") + elif Globals.isMacPlatform(): + standardDir = os.path.expanduser( + "~/Library/Application Support/Google/Chrome/Default") else: standardDir = os.path.expanduser("~/.config/google-chrome/Default") return ( @@ -109,7 +112,7 @@ @return imported bookmarks (BookmarkNode) """ try: - f = open(self.__fileName, "r") + f = open(self.__fileName, "r", encoding="utf-8") contents = json.load(f) f.close() except IOError as err:
--- a/Helpviewer/Bookmarks/BookmarksImporters/FirefoxImporter.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImporters/FirefoxImporter.py Wed Mar 21 12:02:57 2012 +0100 @@ -8,9 +8,9 @@ """ import os +import sqlite3 from PyQt4.QtCore import QCoreApplication, QDate, Qt, QUrl -from PyQt4.QtSql import QSqlDatabase, QSqlQuery from ..BookmarkNode import BookmarkNode @@ -32,6 +32,9 @@ if Globals.isWindowsPlatform(): standardDir = os.path.expandvars( "%APPDATA%\\Mozilla\\Firefox\\Profiles") + elif Globals.isMacPlatform(): + standardDir = os.path.expanduser( + "~/Library/Application Support/Firefox/Profiles") else: standardDir = os.path.expanduser("~/.mozilla/firefox") return ( @@ -85,14 +88,12 @@ .format(self.__fileName) return False - self.__db = QSqlDatabase.addDatabase("QSQLITE") - self.__db.setDatabaseName(self.__fileName) - opened = self.__db.open() - - if not opened: + try: + self.__db = sqlite3.connect(self.__fileName) + except sqlite3.DatabaseError as err: self._error = True self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ - .format(self.__db.lastError().text()) + .format(str(err)) return False return True @@ -103,53 +104,64 @@ @return imported bookmarks (BookmarkNode) """ - importRootNode = BookmarkNode(BookmarkNode.Folder) + importRootNode = BookmarkNode(BookmarkNode.Root) # step 1: build the hierarchy of bookmark folders folders = {} - query = QSqlQuery(self.__db) - query.exec_( - "SELECT id, parent, title FROM moz_bookmarks WHERE type = 2 and title !=''") - while query.next(): - id_ = int(query.value(0)) - parent = int(query.value(1)) - title = query.value(2) - if parent in folders: - folder = BookmarkNode(BookmarkNode.Folder, folders[parent]) - else: - folder = BookmarkNode(BookmarkNode.Folder, importRootNode) - folder.title = title.replace("&", "&&") - folders[id_] = folder + + try: + cursor = self.__db.cursor() + cursor.execute( + "SELECT id, parent, title FROM moz_bookmarks " + "WHERE type = 2 and title !=''") + for row in cursor: + id_ = row[0] + parent = row[1] + title = row[2] + if parent in folders: + folder = BookmarkNode(BookmarkNode.Folder, folders[parent]) + else: + folder = BookmarkNode(BookmarkNode.Folder, importRootNode) + folder.title = title.replace("&", "&&") + folders[id_] = folder + except sqlite3.DatabaseError as err: + self._error = True + self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ + .format(str(err)) + return None - query = QSqlQuery(self.__db) - query.exec_( - "SELECT parent, title, fk, position FROM moz_bookmarks" - " WHERE type = 1 and title != '' ORDER BY position") - while query.next(): - parent = int(query.value(0)) - title = query.value(1).replace("&", "&&") - placesId = int(query.value(2)) - - query2 = QSqlQuery(self.__db) - query2.exec_("SELECT url FROM moz_places WHERE id = {0}".format(placesId)) - if not query2.next(): - continue - - url = QUrl(query2.value(0)) - if not title or url.isEmpty() or url.scheme() in ["place", "about"]: - continue - - if parent in folders: - bookmark = BookmarkNode(BookmarkNode.Bookmark, folders[parent]) - else: - bookmark = BookmarkNode(BookmarkNode.Bookmark, importRootNode) - bookmark.url = url.toString() - bookmark.title = title.replace("&", "&&") + try: + cursor = self.__db.cursor() + cursor.execute( + "SELECT parent, title, fk, position FROM moz_bookmarks" + " WHERE type = 1 and title != '' ORDER BY position") + for row in cursor: + parent = row[0] + title = row[1] + placesId = row[2] + + cursor2 = self.__db.cursor() + cursor2.execute( + "SELECT url FROM moz_places WHERE id = {0}".format(placesId)) + row2 = cursor2.fetchone() + if row2: + url = QUrl(row2[0]) + if not title or url.isEmpty() or url.scheme() in ["place", "about"]: + continue + + if parent in folders: + bookmark = BookmarkNode(BookmarkNode.Bookmark, folders[parent]) + else: + bookmark = BookmarkNode(BookmarkNode.Bookmark, importRootNode) + bookmark.url = url.toString() + bookmark.title = title.replace("&", "&&") + except sqlite3.DatabaseError as err: + self._error = True + self._errorString = self.trUtf8("Unable to open database.\nReason: {0}")\ + .format(str(err)) + return None - if query.lastError().isValid(): - self._error = True - self._errorString = query.lastError().text() - + importRootNode.setType(BookmarkNode.Folder) if self._id == "firefox": importRootNode.title = self.trUtf8("Mozilla Firefox Import") else:
--- a/Helpviewer/Bookmarks/BookmarksImporters/HtmlImporter.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImporters/HtmlImporter.py Wed Mar 21 12:02:57 2012 +0100 @@ -145,7 +145,7 @@ @return imported bookmarks (BookmarkNode) """ try: - f = open(self.__fileName, "r") + f = open(self.__fileName, "r", encoding="utf-8") contents = f.read() f.close() except IOError as err:
--- a/Helpviewer/Bookmarks/BookmarksImporters/OperaImporter.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImporters/OperaImporter.py Wed Mar 21 12:02:57 2012 +0100 @@ -30,6 +30,9 @@ if id == "opera": if Globals.isWindowsPlatform(): standardDir = os.path.expandvars("%APPDATA%\\Opera\\Opera") + elif Globals.isMacPlatform(): + standardDir = os.path.expanduser( + "~/Library/Opera") else: standardDir = os.path.expanduser("~/.opera") return ( @@ -90,7 +93,7 @@ @return imported bookmarks (BookmarkNode) """ try: - f = open(self.__fileName, "r") + f = open(self.__fileName, "r", encoding="utf-8") contents = f.read() f.close() except IOError as err:
--- a/Helpviewer/Bookmarks/BookmarksImporters/SafariImporter.py Tue Mar 20 19:47:18 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksImporters/SafariImporter.py Wed Mar 21 12:02:57 2012 +0100 @@ -33,9 +33,9 @@ if Globals.isWindowsPlatform(): standardDir = os.path.expandvars( "%APPDATA%\\Apple Computer\\Safari") + elif Globals.isMacPlatform(): + standardDir = os.path.expanduser("~/Library/Safari") else: - # TODO: changes this on the Mac -## standardDir = os.path.expanduser("~/.config/google-chrome/Default") standardDir = "" return ( UI.PixmapCache.getPixmap("safari.png"),