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.

Wed, 21 Mar 2012 12:02:57 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 21 Mar 2012 12:02:57 +0100
changeset 1725
d7a3430f7cbf
parent 1723
6e690a8f5971
child 1726
5d3132740ece

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.

Helpviewer/Bookmarks/BookmarksImportDialog.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksImporters/FirefoxImporter.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksImporters/HtmlImporter.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksImporters/OperaImporter.py file | annotate | diff | comparison | revisions
Helpviewer/Bookmarks/BookmarksImporters/SafariImporter.py file | annotate | diff | comparison | revisions
--- 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"),

eric ide

mercurial