Dismiss error dialog for getting disconnected

If the connection to LINE is lost, when it comes back, and error dialog
appears. Detect that dialog and click it automatically.

The same detection works for any error dialog.
This commit is contained in:
Andrew Ferrazzutti 2021-06-05 23:51:12 -04:00
parent 94788a21dd
commit 6583815301
2 changed files with 19 additions and 31 deletions

View File

@ -90,7 +90,6 @@ class MautrixController {
this.qrAppearObserver = null this.qrAppearObserver = null
this.emailAppearObserver = null this.emailAppearObserver = null
this.pinAppearObserver = null this.pinAppearObserver = null
this.expiryObserver = null
this.ownID = null this.ownID = null
this.ownMsgPromise = Promise.resolve(-1) this.ownMsgPromise = Promise.resolve(-1)
@ -968,26 +967,25 @@ class MautrixController {
} }
} }
addExpiryObserver(element) {
this.removeExpiryObserver()
const button = element.querySelector("dialog button")
this.expiryObserver = new MutationObserver(changes => {
if (changes.length == 1 && !changes[0].target.classList.contains("MdNonDisp")) {
window.__mautrixExpiry(button)
}
})
this.expiryObserver.observe(element, {
attributes: true,
attributeFilter: ["class"],
})
}
removeExpiryObserver() {
if (this.expiryObserver !== null) {
this.expiryObserver.disconnect()
this.expiryObserver = null
}
}
} }
window.__mautrixController = new MautrixController() window.__mautrixController = new MautrixController()
/**
* Watch for an error dialog / PIN expiry dialog to appear, and click its "OK" button.
* Must watch for both its parent appearing & it being added to its parent in the first place.
*/
const layer = document.querySelector("#layer_contents")
new MutationObserver(() => {
if (!layer.classList.contains("MdNonDisp")) {
const button = layer.querySelector("dialog button")
if (button) {
console.log("Something expired, clicking OK button to continue")
button.click()
}
}
}).observe(layer, {
attributes: true,
attributeFilter: ["class"],
childList: true,
})

View File

@ -97,7 +97,6 @@ export default class MessagesPuppeteer {
await this.page.exposeFunction("__mautrixReceiveQR", this._receiveQRChange.bind(this)) await this.page.exposeFunction("__mautrixReceiveQR", this._receiveQRChange.bind(this))
await this.page.exposeFunction("__mautrixSendEmailCredentials", this._sendEmailCredentials.bind(this)) await this.page.exposeFunction("__mautrixSendEmailCredentials", this._sendEmailCredentials.bind(this))
await this.page.exposeFunction("__mautrixReceivePIN", this._receivePIN.bind(this)) await this.page.exposeFunction("__mautrixReceivePIN", this._receivePIN.bind(this))
await this.page.exposeFunction("__mautrixExpiry", this._receiveExpiry.bind(this))
await this.page.exposeFunction("__mautrixReceiveMessageID", await this.page.exposeFunction("__mautrixReceiveMessageID",
id => this.sentMessageIDs.add(id)) id => this.sentMessageIDs.add(id))
await this.page.exposeFunction("__mautrixReceiveChanges", await this.page.exposeFunction("__mautrixReceiveChanges",
@ -183,8 +182,6 @@ export default class MessagesPuppeteer {
await this.page.evaluate( await this.page.evaluate(
element => window.__mautrixController.addPINAppearObserver(element), loginContentArea) element => window.__mautrixController.addPINAppearObserver(element), loginContentArea)
await this.page.$eval("#layer_contents",
element => window.__mautrixController.addExpiryObserver(element))
this.log("Waiting for login response") this.log("Waiting for login response")
let doneWaiting = false let doneWaiting = false
@ -226,7 +223,6 @@ export default class MessagesPuppeteer {
await this.page.evaluate(() => window.__mautrixController.removeQRAppearObserver()) await this.page.evaluate(() => window.__mautrixController.removeQRAppearObserver())
await this.page.evaluate(() => window.__mautrixController.removeEmailAppearObserver()) await this.page.evaluate(() => window.__mautrixController.removeEmailAppearObserver())
await this.page.evaluate(() => window.__mautrixController.removePINAppearObserver()) await this.page.evaluate(() => window.__mautrixController.removePINAppearObserver())
await this.page.evaluate(() => window.__mautrixController.removeExpiryObserver())
delete this.login_email delete this.login_email
delete this.login_password delete this.login_password
@ -739,10 +735,4 @@ export default class MessagesPuppeteer {
this.log("No client connected, not sending failure reason") this.log("No client connected, not sending failure reason")
} }
} }
async _receiveExpiry(button) {
this.log("Something expired, clicking OK button to continue")
this.page.click(button).catch(err =>
this.error("Failed to dismiss expiry dialog:", err))
}
} }