|
1 | 1 |
|
2 | | -(function () { |
| 2 | +(async function () { |
| 3 | + |
| 4 | + /* Utility */ |
| 5 | + const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); |
| 6 | + |
3 | 7 | /* For folder sorting */ |
4 | 8 |
|
5 | 9 | const Cc = Components.classes; |
|
158 | 162 | myPrefObserver.register(); |
159 | 163 |
|
160 | 164 | /* Refresh pane */ |
| 165 | + let refreshCount = 0; |
| 166 | + for (let win of Services.wm.getEnumerator("mail:3pane")) { |
| 167 | + ++refreshCount; |
| 168 | + } |
| 169 | + tblog.debug("Refresh pane ("+refreshCount+")"); |
161 | 170 | function refreshPane(win) { |
162 | | - try { win.gFolderTreeView._rebuild(); } |
163 | | - catch (e) { setTimeout(refreshPane, 5, win); } |
| 171 | + try { |
| 172 | + win.gFolderTreeView._rebuild(); |
| 173 | + --refreshCount; |
| 174 | + } catch (e) { |
| 175 | + setTimeout(refreshPane, 5, win); |
| 176 | + } |
164 | 177 | } |
165 | 178 | for (let win of Services.wm.getEnumerator("mail:3pane")) { |
166 | 179 | refreshPane(win); |
167 | 180 | } |
| 181 | + while (refreshCount > 0) { |
| 182 | + await sleep(10); |
| 183 | + } |
168 | 184 |
|
169 | 185 | /* Ensures that the selected folder is on the screen. */ |
170 | 186 | { |
|
211 | 227 | Since Thunderbird 98, add-on startup has been delayed until Thunderbird is mostly done. |
212 | 228 | So there is no way other than immediately selecting the folder. |
213 | 229 | */ |
214 | | - const folder = MailUtils.getExistingFolder(startup_folder); |
215 | | - if (folder) { |
216 | | - if (!gFolderTreeView.selectFolder(folder, true)) { |
217 | | - tblog.debug("selectFolder failed"); |
| 230 | + const retryMax = 10; |
| 231 | + for (let retry = 1; retry <= retryMax; retry++) { |
| 232 | + let folder = MailUtils.getExistingFolder(startup_folder); |
| 233 | + if (folder) { |
| 234 | + if (gFolderTreeView.selectFolder(folder, true)) { |
| 235 | + tblog.debug("selectFolder succeeded"); |
| 236 | + } else { |
| 237 | + tblog.debug("selectFolder failed"); |
| 238 | + } |
| 239 | + break; |
| 240 | + } else { |
| 241 | + if (retry < retryMax) { |
| 242 | + tblog.debug(startup_folder+" not found ("+retry+") ..retry"); |
| 243 | + await sleep(200); |
| 244 | + } else { |
| 245 | + tblog.debug(startup_folder+" not found ("+retry+") ..giving up"); |
| 246 | + } |
218 | 247 | } |
219 | | - } else { |
220 | | - tblog.debug(startup_folder+" not found"); |
221 | 248 | } |
222 | 249 | } |
| 250 | + } else { |
| 251 | + tblog.debug("No startup folder specified"); |
223 | 252 | } |
224 | 253 |
|
| 254 | + tblog.debug("Init done"); |
| 255 | + |
225 | 256 | })() |
0 commit comments