14 |
14 |
15 class XbelWriter(QXmlStreamWriter): |
15 class XbelWriter(QXmlStreamWriter): |
16 """ |
16 """ |
17 Class implementing a writer object to generate XBEL bookmark files. |
17 Class implementing a writer object to generate XBEL bookmark files. |
18 """ |
18 """ |
|
19 |
19 def __init__(self): |
20 def __init__(self): |
20 """ |
21 """ |
21 Constructor |
22 Constructor |
22 """ |
23 """ |
23 super().__init__() |
24 super().__init__() |
24 |
25 |
25 self.setAutoFormatting(True) |
26 self.setAutoFormatting(True) |
26 |
27 |
27 def write(self, fileNameOrDevice, root): |
28 def write(self, fileNameOrDevice, root): |
28 """ |
29 """ |
29 Public method to write an XBEL bookmark file. |
30 Public method to write an XBEL bookmark file. |
30 |
31 |
31 @param fileNameOrDevice name of the file to write (string) |
32 @param fileNameOrDevice name of the file to write (string) |
32 or device to write to (QIODevice) |
33 or device to write to (QIODevice) |
33 @param root root node of the bookmark tree (BookmarkNode) |
34 @param root root node of the bookmark tree (BookmarkNode) |
34 @return flag indicating success (boolean) |
35 @return flag indicating success (boolean) |
35 """ |
36 """ |
37 f = fileNameOrDevice |
38 f = fileNameOrDevice |
38 else: |
39 else: |
39 f = QFile(fileNameOrDevice) |
40 f = QFile(fileNameOrDevice) |
40 if root is None or not f.open(QIODevice.OpenModeFlag.WriteOnly): |
41 if root is None or not f.open(QIODevice.OpenModeFlag.WriteOnly): |
41 return False |
42 return False |
42 |
43 |
43 self.setDevice(f) |
44 self.setDevice(f) |
44 return self.__write(root) |
45 return self.__write(root) |
45 |
46 |
46 def __write(self, root): |
47 def __write(self, root): |
47 """ |
48 """ |
48 Private method to write an XBEL bookmark file. |
49 Private method to write an XBEL bookmark file. |
49 |
50 |
50 @param root root node of the bookmark tree (BookmarkNode) |
51 @param root root node of the bookmark tree (BookmarkNode) |
51 @return flag indicating success (boolean) |
52 @return flag indicating success (boolean) |
52 """ |
53 """ |
53 self.writeStartDocument() |
54 self.writeStartDocument() |
54 self.writeDTD("<!DOCTYPE xbel>") |
55 self.writeDTD("<!DOCTYPE xbel>") |
57 if root.type() == BookmarkNode.Root: |
58 if root.type() == BookmarkNode.Root: |
58 for child in root.children(): |
59 for child in root.children(): |
59 self.__writeItem(child) |
60 self.__writeItem(child) |
60 else: |
61 else: |
61 self.__writeItem(root) |
62 self.__writeItem(root) |
62 |
63 |
63 self.writeEndDocument() |
64 self.writeEndDocument() |
64 return True |
65 return True |
65 |
66 |
66 def __writeItem(self, node): |
67 def __writeItem(self, node): |
67 """ |
68 """ |
68 Private method to write an entry for a node. |
69 Private method to write an entry for a node. |
69 |
70 |
70 @param node reference to the node to be written (BookmarkNode) |
71 @param node reference to the node to be written (BookmarkNode) |
71 """ |
72 """ |
72 if node.type() == BookmarkNode.Folder: |
73 if node.type() == BookmarkNode.Folder: |
73 self.writeStartElement("folder") |
74 self.writeStartElement("folder") |
74 if node.added.isValid(): |
75 if node.added.isValid(): |
75 self.writeAttribute("added", |
76 self.writeAttribute("added", node.added.toString(Qt.DateFormat.ISODate)) |
76 node.added.toString(Qt.DateFormat.ISODate)) |
|
77 self.writeAttribute("folded", node.expanded and "no" or "yes") |
77 self.writeAttribute("folded", node.expanded and "no" or "yes") |
78 self.writeTextElement("title", node.title) |
78 self.writeTextElement("title", node.title) |
79 for child in node.children(): |
79 for child in node.children(): |
80 self.__writeItem(child) |
80 self.__writeItem(child) |
81 self.writeEndElement() |
81 self.writeEndElement() |
82 elif node.type() == BookmarkNode.Bookmark: |
82 elif node.type() == BookmarkNode.Bookmark: |
83 self.writeStartElement("bookmark") |
83 self.writeStartElement("bookmark") |
84 if node.url: |
84 if node.url: |
85 self.writeAttribute("href", node.url) |
85 self.writeAttribute("href", node.url) |
86 if node.added.isValid(): |
86 if node.added.isValid(): |
87 self.writeAttribute("added", |
87 self.writeAttribute("added", node.added.toString(Qt.DateFormat.ISODate)) |
88 node.added.toString(Qt.DateFormat.ISODate)) |
|
89 if node.modified.isValid(): |
88 if node.modified.isValid(): |
90 self.writeAttribute( |
89 self.writeAttribute( |
91 "modified", node.modified.toString(Qt.DateFormat.ISODate)) |
90 "modified", node.modified.toString(Qt.DateFormat.ISODate) |
|
91 ) |
92 if node.visited.isValid(): |
92 if node.visited.isValid(): |
93 self.writeAttribute( |
93 self.writeAttribute( |
94 "visited", node.visited.toString(Qt.DateFormat.ISODate)) |
94 "visited", node.visited.toString(Qt.DateFormat.ISODate) |
|
95 ) |
95 self.writeAttribute("visitCount", str(node.visitCount)) |
96 self.writeAttribute("visitCount", str(node.visitCount)) |
96 self.writeTextElement("title", node.title) |
97 self.writeTextElement("title", node.title) |
97 if node.desc: |
98 if node.desc: |
98 self.writeTextElement("desc", node.desc) |
99 self.writeTextElement("desc", node.desc) |
99 self.writeEndElement() |
100 self.writeEndElement() |
100 elif node.type() == BookmarkNode.Separator: |
101 elif node.type() == BookmarkNode.Separator: |
101 self.writeEmptyElement("separator") |
102 self.writeEmptyElement("separator") |
102 if node.added.isValid(): |
103 if node.added.isValid(): |
103 self.writeAttribute("added", |
104 self.writeAttribute("added", node.added.toString(Qt.DateFormat.ISODate)) |
104 node.added.toString(Qt.DateFormat.ISODate)) |
|