src/eric7/WebBrowser/Bookmarks/XbelWriter.py

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

eric ide

mercurial