Helpviewer/SpeedDial/SpeedDialReader.py

changeset 1699
10706f6ad9d2
child 2302
f29e9405c851
equal deleted inserted replaced
1698:dba994e19891 1699:10706f6ad9d2
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6
7 """
8 Module implementing a class to read speed dial data files.
9 """
10
11 from PyQt4.QtCore import QXmlStreamReader, QIODevice, QFile, QCoreApplication
12
13 from .Page import Page
14
15
16 class SpeedDialReader(QXmlStreamReader):
17 """
18 Class implementing a reader object for speed dial data files.
19 """
20 def __init__(self):
21 """
22 Constructor
23 """
24 super().__init__()
25
26 def read(self, fileNameOrDevice):
27 """
28 Public method to read a user agent file.
29
30 @param fileNameOrDevice name of the file to read (string)
31 or reference to the device to read (QIODevice)
32 @return list of speed dial pages (list of Page), number of pages per row (integer)
33 and size of the speed dial pages (integer)
34 """
35 self.__pages = []
36 self.__pagesPerRow = 0
37 self.__sdSize = 0
38
39 if isinstance(fileNameOrDevice, QIODevice):
40 self.setDevice(fileNameOrDevice)
41 else:
42 f = QFile(fileNameOrDevice)
43 if not f.exists():
44 return self.__pages, self.__pagesPerRow, self.__sdSize
45 f.open(QFile.ReadOnly)
46 self.setDevice(f)
47
48 while not self.atEnd():
49 self.readNext()
50 if self.isStartElement():
51 version = self.attributes().value("version")
52 if self.name() == "SpeedDial" and \
53 (not version or version == "1.0"):
54 self.__readSpeedDial()
55 else:
56 self.raiseError(QCoreApplication.translate(
57 "SpeedDialReader",
58 "The file is not a SpeedDial version 1.0 file."))
59
60 return self.__pages, self.__pagesPerRow, self.__sdSize
61
62 def __readSpeedDial(self):
63 """
64 Private method to read the speed dial data.
65 """
66 if not self.isStartElement() and self.name() != "SpeedDial":
67 return
68
69 while not self.atEnd():
70 self.readNext()
71 if self.isEndElement():
72 if self.name() in ["Pages", "Page"]:
73 continue
74 else:
75 break
76
77 if self.isStartElement():
78 if self.name() == "Pages":
79 attributes = self.attributes()
80 pagesPerRow = attributes.value("row")
81 if pagesPerRow.isdigit():
82 self.__pagesPerRow = int(pagesPerRow)
83 sdSize = attributes.value("size")
84 if sdSize.isdigit():
85 self.__sdSize = int(sdSize)
86 elif self.name() == "Page":
87 attributes = self.attributes()
88 url = attributes.value("url")
89 title = attributes.value("title")
90 if url:
91 if not title:
92 title = url
93 page = Page(url, title)
94 self.__pages.append(page)
95 else:
96 self.__skipUnknownElement()
97
98 def __skipUnknownElement(self):
99 """
100 Private method to skip over all unknown elements.
101 """
102 if not self.isStartElement():
103 return
104
105 while not self.atEnd():
106 self.readNext()
107 if self.isEndElement():
108 break
109
110 if self.isStartElement():
111 self.__skipUnknownElement()

eric ide

mercurial