7 Module implementing a class to read XBEL bookmark files. |
7 Module implementing a class to read XBEL bookmark files. |
8 """ |
8 """ |
9 |
9 |
10 from __future__ import unicode_literals # __IGNORE_WARNING__ |
10 from __future__ import unicode_literals # __IGNORE_WARNING__ |
11 |
11 |
12 from PyQt4.QtCore import QXmlStreamReader, QXmlStreamEntityResolver, QIODevice, \ |
12 from PyQt4.QtCore import QXmlStreamReader, QXmlStreamEntityResolver, \ |
13 QFile, QCoreApplication, QXmlStreamNamespaceDeclaration, QDateTime, Qt |
13 QIODevice, QFile, QCoreApplication, QXmlStreamNamespaceDeclaration, \ |
|
14 QDateTime, Qt |
14 |
15 |
15 from .BookmarkNode import BookmarkNode |
16 from .BookmarkNode import BookmarkNode |
16 |
17 |
17 |
18 |
18 class XmlEntityResolver(QXmlStreamEntityResolver): |
19 class XmlEntityResolver(QXmlStreamEntityResolver): |
69 if self.name() == "xbel" and \ |
70 if self.name() == "xbel" and \ |
70 (not version or version == "1.0"): |
71 (not version or version == "1.0"): |
71 self.__readXBEL(root) |
72 self.__readXBEL(root) |
72 else: |
73 else: |
73 self.raiseError(QCoreApplication.translate( |
74 self.raiseError(QCoreApplication.translate( |
74 "XbelReader", "The file is not an XBEL version 1.0 file.")) |
75 "XbelReader", |
|
76 "The file is not an XBEL version 1.0 file.")) |
75 |
77 |
76 return root |
78 return root |
77 |
79 |
78 def __readXBEL(self, node): |
80 def __readXBEL(self, node): |
79 """ |
81 """ |
108 if not self.isStartElement() and self.name() != "folder": |
110 if not self.isStartElement() and self.name() != "folder": |
109 return |
111 return |
110 |
112 |
111 folder = BookmarkNode(BookmarkNode.Folder, node) |
113 folder = BookmarkNode(BookmarkNode.Folder, node) |
112 folder.expanded = self.attributes().value("folded") == "no" |
114 folder.expanded = self.attributes().value("folded") == "no" |
113 folder.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) |
115 folder.added = QDateTime.fromString( |
|
116 self.attributes().value("added"), Qt.ISODate) |
114 |
117 |
115 while not self.atEnd(): |
118 while not self.atEnd(): |
116 self.readNext() |
119 self.readNext() |
117 if self.isEndElement(): |
120 if self.isEndElement(): |
118 break |
121 break |
135 |
138 |
136 def __readTitle(self, node): |
139 def __readTitle(self, node): |
137 """ |
140 """ |
138 Private method to read the title element. |
141 Private method to read the title element. |
139 |
142 |
140 @param node reference to the bookmark node title belongs to (BookmarkNode) |
143 @param node reference to the bookmark node title belongs to |
|
144 (BookmarkNode) |
141 """ |
145 """ |
142 if not self.isStartElement() and self.name() != "title": |
146 if not self.isStartElement() and self.name() != "title": |
143 return |
147 return |
144 |
148 |
145 node.title = self.readElementText() |
149 node.title = self.readElementText() |
146 |
150 |
147 def __readDescription(self, node): |
151 def __readDescription(self, node): |
148 """ |
152 """ |
149 Private method to read the desc element. |
153 Private method to read the desc element. |
150 |
154 |
151 @param node reference to the bookmark node desc belongs to (BookmarkNode) |
155 @param node reference to the bookmark node desc belongs to |
|
156 (BookmarkNode) |
152 """ |
157 """ |
153 if not self.isStartElement() and self.name() != "desc": |
158 if not self.isStartElement() and self.name() != "desc": |
154 return |
159 return |
155 |
160 |
156 node.desc = self.readElementText() |
161 node.desc = self.readElementText() |
157 |
162 |
158 def __readSeparator(self, node): |
163 def __readSeparator(self, node): |
159 """ |
164 """ |
160 Private method to read a separator element. |
165 Private method to read a separator element. |
161 |
166 |
162 @param node reference to the bookmark node the separator belongs to (BookmarkNode) |
167 @param node reference to the bookmark node the separator belongs to |
|
168 (BookmarkNode) |
163 """ |
169 """ |
164 sep = BookmarkNode(BookmarkNode.Separator, node) |
170 sep = BookmarkNode(BookmarkNode.Separator, node) |
165 sep.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) |
171 sep.added = QDateTime.fromString( |
|
172 self.attributes().value("added"), Qt.ISODate) |
166 |
173 |
167 # empty elements have a start and end element |
174 # empty elements have a start and end element |
168 while not self.atEnd(): |
175 while not self.atEnd(): |
169 self.readNext() |
176 self.readNext() |
170 if self.isEndElement(): |
177 if self.isEndElement(): |
208 self.__readInfo() |
215 self.__readInfo() |
209 else: |
216 else: |
210 self.__skipUnknownElement() |
217 self.__skipUnknownElement() |
211 |
218 |
212 if not bookmark.title: |
219 if not bookmark.title: |
213 bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") |
220 bookmark.title = QCoreApplication.translate( |
|
221 "XbelReader", "Unknown title") |
214 |
222 |
215 def __readInfo(self): |
223 def __readInfo(self): |
216 """ |
224 """ |
217 Private method to read and parse an info subtree. |
225 Private method to read and parse an info subtree. |
218 """ |
226 """ |
219 self.addExtraNamespaceDeclaration( |
227 self.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration( |
220 QXmlStreamNamespaceDeclaration("bookmark", "http://www.python.org")) |
228 "bookmark", "http://www.python.org")) |
221 self.skipCurrentElement() |
229 self.skipCurrentElement() |
222 |
230 |
223 def __skipUnknownElement(self): |
231 def __skipUnknownElement(self): |
224 """ |
232 """ |
225 Private method to skip over all unknown elements. |
233 Private method to skip over all unknown elements. |