13 |
13 |
14 class SpeedDialReader(QXmlStreamReader): |
14 class SpeedDialReader(QXmlStreamReader): |
15 """ |
15 """ |
16 Class implementing a reader object for speed dial data files. |
16 Class implementing a reader object for speed dial data files. |
17 """ |
17 """ |
|
18 |
18 def __init__(self): |
19 def __init__(self): |
19 """ |
20 """ |
20 Constructor |
21 Constructor |
21 """ |
22 """ |
22 super().__init__() |
23 super().__init__() |
23 |
24 |
24 def read(self, fileNameOrDevice): |
25 def read(self, fileNameOrDevice): |
25 """ |
26 """ |
26 Public method to read a user agent file. |
27 Public method to read a user agent file. |
27 |
28 |
28 @param fileNameOrDevice name of the file to read (string) |
29 @param fileNameOrDevice name of the file to read (string) |
29 or reference to the device to read (QIODevice) |
30 or reference to the device to read (QIODevice) |
30 @return list of speed dial pages (list of Page), number of pages per |
31 @return list of speed dial pages (list of Page), number of pages per |
31 row (integer) and size of the speed dial pages (integer) |
32 row (integer) and size of the speed dial pages (integer) |
32 """ |
33 """ |
33 self.__pages = [] |
34 self.__pages = [] |
34 self.__pagesPerRow = 0 |
35 self.__pagesPerRow = 0 |
35 self.__sdSize = 0 |
36 self.__sdSize = 0 |
36 |
37 |
37 if isinstance(fileNameOrDevice, QIODevice): |
38 if isinstance(fileNameOrDevice, QIODevice): |
38 self.setDevice(fileNameOrDevice) |
39 self.setDevice(fileNameOrDevice) |
39 else: |
40 else: |
40 f = QFile(fileNameOrDevice) |
41 f = QFile(fileNameOrDevice) |
41 if not f.exists(): |
42 if not f.exists(): |
42 return self.__pages, self.__pagesPerRow, self.__sdSize |
43 return self.__pages, self.__pagesPerRow, self.__sdSize |
43 opened = f.open(QIODevice.OpenModeFlag.ReadOnly) |
44 opened = f.open(QIODevice.OpenModeFlag.ReadOnly) |
44 if not opened: |
45 if not opened: |
45 self.raiseError(QCoreApplication.translate( |
46 self.raiseError( |
46 "SpeedDialReader", |
47 QCoreApplication.translate( |
47 "The file {0} could not be opened. Error: {1}").format( |
48 "SpeedDialReader", |
48 fileNameOrDevice, f.errorString())) |
49 "The file {0} could not be opened. Error: {1}", |
|
50 ).format(fileNameOrDevice, f.errorString()) |
|
51 ) |
49 return self.__pages, self.__pagesPerRow, self.__sdSize |
52 return self.__pages, self.__pagesPerRow, self.__sdSize |
50 self.setDevice(f) |
53 self.setDevice(f) |
51 |
54 |
52 while not self.atEnd(): |
55 while not self.atEnd(): |
53 self.readNext() |
56 self.readNext() |
54 if self.isStartElement(): |
57 if self.isStartElement(): |
55 version = self.attributes().value("version") |
58 version = self.attributes().value("version") |
56 if ( |
59 if self.name() == "SpeedDial" and (not version or version == "1.0"): |
57 self.name() == "SpeedDial" and |
|
58 (not version or version == "1.0") |
|
59 ): |
|
60 self.__readSpeedDial() |
60 self.__readSpeedDial() |
61 else: |
61 else: |
62 self.raiseError(QCoreApplication.translate( |
62 self.raiseError( |
63 "SpeedDialReader", |
63 QCoreApplication.translate( |
64 "The file is not a SpeedDial version 1.0 file.")) |
64 "SpeedDialReader", |
65 |
65 "The file is not a SpeedDial version 1.0 file.", |
|
66 ) |
|
67 ) |
|
68 |
66 return self.__pages, self.__pagesPerRow, self.__sdSize |
69 return self.__pages, self.__pagesPerRow, self.__sdSize |
67 |
70 |
68 def __readSpeedDial(self): |
71 def __readSpeedDial(self): |
69 """ |
72 """ |
70 Private method to read the speed dial data. |
73 Private method to read the speed dial data. |
71 """ |
74 """ |
72 if not self.isStartElement() and self.name() != "SpeedDial": |
75 if not self.isStartElement() and self.name() != "SpeedDial": |
73 return |
76 return |
74 |
77 |
75 while not self.atEnd(): |
78 while not self.atEnd(): |
76 self.readNext() |
79 self.readNext() |
77 if self.isEndElement(): |
80 if self.isEndElement(): |
78 if self.name() in ["Pages", "Page"]: |
81 if self.name() in ["Pages", "Page"]: |
79 continue |
82 continue |
80 else: |
83 else: |
81 break |
84 break |
82 |
85 |
83 if self.isStartElement(): |
86 if self.isStartElement(): |
84 if self.name() == "Pages": |
87 if self.name() == "Pages": |
85 attributes = self.attributes() |
88 attributes = self.attributes() |
86 pagesPerRow = attributes.value("row") |
89 pagesPerRow = attributes.value("row") |
87 if pagesPerRow.isdigit(): |
90 if pagesPerRow.isdigit(): |
95 title = attributes.value("title") |
98 title = attributes.value("title") |
96 if url: |
99 if url: |
97 if not title: |
100 if not title: |
98 title = url |
101 title = url |
99 from .Page import Page |
102 from .Page import Page |
|
103 |
100 page = Page(url, title) |
104 page = Page(url, title) |
101 self.__pages.append(page) |
105 self.__pages.append(page) |
102 else: |
106 else: |
103 self.__skipUnknownElement() |
107 self.__skipUnknownElement() |
104 |
108 |
105 def __skipUnknownElement(self): |
109 def __skipUnknownElement(self): |
106 """ |
110 """ |
107 Private method to skip over all unknown elements. |
111 Private method to skip over all unknown elements. |
108 """ |
112 """ |
109 if not self.isStartElement(): |
113 if not self.isStartElement(): |
110 return |
114 return |
111 |
115 |
112 while not self.atEnd(): |
116 while not self.atEnd(): |
113 self.readNext() |
117 self.readNext() |
114 if self.isEndElement(): |
118 if self.isEndElement(): |
115 break |
119 break |
116 |
120 |
117 if self.isStartElement(): |
121 if self.isStartElement(): |
118 self.__skipUnknownElement() |
122 self.__skipUnknownElement() |