Helpviewer/Bookmarks/BookmarksManager.py

changeset 1713
56fdde8a2441
parent 1626
a77c8ea8582c
child 1729
66b9dc45f2bd
equal deleted inserted replaced
1709:62fb6a42cd7c 1713:56fdde8a2441
9 9
10 import os 10 import os
11 11
12 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, QByteArray, \ 12 from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, QByteArray, \
13 QBuffer, QIODevice, QXmlStreamReader, QDate, QFileInfo, QUrl 13 QBuffer, QIODevice, QXmlStreamReader, QDate, QFileInfo, QUrl
14 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication 14 from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog
15 from PyQt4.QtWebKit import QWebPage
16 15
17 from E5Gui import E5MessageBox, E5FileDialog 16 from E5Gui import E5MessageBox, E5FileDialog
18 17
19 from .BookmarkNode import BookmarkNode 18 from .BookmarkNode import BookmarkNode
20 from .BookmarksModel import BookmarksModel 19 from .BookmarksModel import BookmarksModel
21 from .DefaultBookmarks import DefaultBookmarks 20 from .DefaultBookmarks import DefaultBookmarks
22 from .XbelReader import XbelReader 21 from .XbelReader import XbelReader
23 from .XbelWriter import XbelWriter 22 from .XbelWriter import XbelWriter
23 from .BookmarksImportDialog import BookmarksImportDialog
24 24
25 from Utilities.AutoSaver import AutoSaver 25 from Utilities.AutoSaver import AutoSaver
26 import Utilities 26 import Utilities
27 import Preferences 27 import Preferences
28 28
30 BOOKMARKMENU = QT_TRANSLATE_NOOP("BookmarksManager", "Bookmarks Menu") 30 BOOKMARKMENU = QT_TRANSLATE_NOOP("BookmarksManager", "Bookmarks Menu")
31 31
32 StartRoot = 0 32 StartRoot = 0
33 StartMenu = 1 33 StartMenu = 1
34 StartToolBar = 2 34 StartToolBar = 2
35
36 ##########################################################################################
37
38 extract_js = r"""
39 function walk() {
40 var parent = arguments[0];
41 var indent = arguments[1];
42
43 var result = "";
44 var children = parent.childNodes;
45 var folderName = "";
46 var folded = "";
47 for (var i = 0; i < children.length; i++) {
48 var object = children.item(i);
49 if (object.nodeName == "HR") {
50 result += indent + "<separator/>\n";
51 }
52 if (object.nodeName == "H3") {
53 folderName = object.innerHTML;
54 folded = object.folded;
55 if (object.folded == undefined)
56 folded = "false";
57 else
58 folded = "true";
59 }
60 if (object.nodeName == "A") {
61 result += indent + "<bookmark href=\"" + encodeURI(object.href).replace(/&/g, '&amp;') + "\">\n";
62 result += indent + indent + "<title>" + object.innerHTML + "</title>\n";
63 result += indent + "</bookmark>\n";
64 }
65
66 var currentIndent = indent;
67 if (object.nodeName == "DL" && folderName != "") {
68 result += indent + "<folder folded=\"" + folded + "\">\n";
69 indent += " ";
70 result += indent + "<title>" + folderName + "</title>\n";
71 }
72 result += walk(object, indent);
73 if (object.nodeName == "DL" && folderName != "") {
74 result += currentIndent + "</folder>\n";
75 }
76 }
77 return result;
78 }
79
80 var xbel = walk(document, " ");
81
82 if (xbel != "") {
83 xbel = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE xbel>\n<xbel version=\"1.0\">\n" + xbel + "</xbel>\n";
84 }
85
86 xbel;
87 """
88
89 ##########################################################################################
90 35
91 36
92 class BookmarksManager(QObject): 37 class BookmarksManager(QObject):
93 """ 38 """
94 Class implementing the bookmarks manager. 39 Class implementing the bookmarks manager.
130 self.__toolbar = None 75 self.__toolbar = None
131 self.__menu = None 76 self.__menu = None
132 self.__bookmarksModel = None 77 self.__bookmarksModel = None
133 self.__commands = QUndoStack() 78 self.__commands = QUndoStack()
134 79
135 def getFileName(self): 80 @classmethod
81 def getFileName(cls):
136 """ 82 """
137 Public method to get the file name of the bookmark file. 83 Public method to get the file name of the bookmark file.
138 84
139 @return name of the bookmark file (string) 85 @return name of the bookmark file (string)
140 """ 86 """
357 303
358 def importBookmarks(self): 304 def importBookmarks(self):
359 """ 305 """
360 Public method to import bookmarks. 306 Public method to import bookmarks.
361 """ 307 """
362 supportedFormats = [ 308 dlg = BookmarksImportDialog()
363 self.trUtf8("XBEL bookmarks") + " (*.xbel *.xml)", 309 if dlg.exec_() == QDialog.Accepted:
364 self.trUtf8("HTML Netscape bookmarks") + " (*.html *.htm)" 310 importRootNode = dlg.getImportedBookmarks()
365 ] 311 if importRootNode is not None:
366 312 self.addBookmark(self.menu(), importRootNode)
367 fileName = E5FileDialog.getOpenFileName(
368 None,
369 self.trUtf8("Import Bookmarks"),
370 "",
371 ";;".join(supportedFormats))
372 if not fileName:
373 return
374
375 reader = XbelReader()
376 importRootNode = None
377 if fileName.endswith(".html"):
378 inFile = QFile(fileName)
379 inFile.open(QIODevice.ReadOnly)
380 if inFile.openMode == QIODevice.NotOpen:
381 E5MessageBox.warning(None,
382 self.trUtf8("Import Bookmarks"),
383 self.trUtf8("""Error opening bookmarks file <b>{0}</b>.""")\
384 .format(fileName))
385 return
386
387 webpage = QWebPage()
388 webpage.mainFrame().setHtml(inFile.readAll())
389 result = webpage.mainFrame().evaluateJavaScript(extract_js)
390 buffer_ = QBuffer(result)
391 buffer_.open(QIODevice.ReadOnly)
392 importRootNode = reader.read(buffer_)
393 else:
394 importRootNode = reader.read(fileName)
395
396 if reader.error() != QXmlStreamReader.NoError:
397 E5MessageBox.warning(None,
398 self.trUtf8("Import Bookmarks"),
399 self.trUtf8("""Error when importing bookmarks on"""
400 """ line {0}, column [1}:\n{2}""")\
401 .format(reader.lineNumber(),
402 reader.columnNumber(),
403 reader.errorString()))
404 return
405
406 importRootNode.setType(BookmarkNode.Folder)
407 importRootNode.title = self.trUtf8("Imported {0}")\
408 .format(QDate.currentDate().toString(Qt.SystemLocaleShortDate))
409 self.addBookmark(self.menu(), importRootNode)
410 313
411 def exportBookmarks(self): 314 def exportBookmarks(self):
412 """ 315 """
413 Public method to export the bookmarks. 316 Public method to export the bookmarks.
414 """ 317 """

eric ide

mercurial