WebBrowser/Bookmarks/XbelWriter.py

branch
QtWebEngine
changeset 4732
5ac4fc1dfc20
parent 4631
5c1a96925da4
child 5015
ca1d44f0f6b2
equal deleted inserted replaced
4731:67d861d9e492 4732:5ac4fc1dfc20
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2009 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class to write XBEL bookmark files.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import QXmlStreamWriter, QIODevice, QFile, Qt
13
14 from .BookmarkNode import BookmarkNode
15
16
17 class XbelWriter(QXmlStreamWriter):
18 """
19 Class implementing a writer object to generate XBEL bookmark files.
20 """
21 def __init__(self):
22 """
23 Constructor
24 """
25 super(XbelWriter, self).__init__()
26
27 self.setAutoFormatting(True)
28
29 def write(self, fileNameOrDevice, root):
30 """
31 Public method to write an XBEL bookmark file.
32
33 @param fileNameOrDevice name of the file to write (string)
34 or device to write to (QIODevice)
35 @param root root node of the bookmark tree (BookmarkNode)
36 @return flag indicating success (boolean)
37 """
38 if isinstance(fileNameOrDevice, QIODevice):
39 f = fileNameOrDevice
40 else:
41 f = QFile(fileNameOrDevice)
42 if root is None or not f.open(QFile.WriteOnly):
43 return False
44
45 self.setDevice(f)
46 return self.__write(root)
47
48 def __write(self, root):
49 """
50 Private method to write an XBEL bookmark file.
51
52 @param root root node of the bookmark tree (BookmarkNode)
53 @return flag indicating success (boolean)
54 """
55 self.writeStartDocument()
56 self.writeDTD("<!DOCTYPE xbel>")
57 self.writeStartElement("xbel")
58 self.writeAttribute("version", "1.0")
59 if root.type() == BookmarkNode.Root:
60 for child in root.children():
61 self.__writeItem(child)
62 else:
63 self.__writeItem(root)
64
65 self.writeEndDocument()
66 return True
67
68 def __writeItem(self, node):
69 """
70 Private method to write an entry for a node.
71
72 @param node reference to the node to be written (BookmarkNode)
73 """
74 if node.type() == BookmarkNode.Folder:
75 self.writeStartElement("folder")
76 if node.added.isValid():
77 self.writeAttribute("added", node.added.toString(Qt.ISODate))
78 self.writeAttribute("folded", node.expanded and "no" or "yes")
79 self.writeTextElement("title", node.title)
80 for child in node.children():
81 self.__writeItem(child)
82 self.writeEndElement()
83 elif node.type() == BookmarkNode.Bookmark:
84 self.writeStartElement("bookmark")
85 if node.url:
86 self.writeAttribute("href", node.url)
87 if node.added.isValid():
88 self.writeAttribute("added", node.added.toString(Qt.ISODate))
89 if node.modified.isValid():
90 self.writeAttribute(
91 "modified", node.modified.toString(Qt.ISODate))
92 if node.visited.isValid():
93 self.writeAttribute(
94 "visited", node.visited.toString(Qt.ISODate))
95 self.writeTextElement("title", node.title)
96 if node.desc:
97 self.writeTextElement("desc", node.desc)
98 self.writeEndElement()
99 elif node.type() == BookmarkNode.Separator:
100 self.writeEmptyElement("separator")
101 if node.added.isValid():
102 self.writeAttribute("added", node.added.toString(Qt.ISODate))

eric ide

mercurial