forked from fair/matrix-puppeteer-line
add timezone support
This commit is contained in:
parent
7a10061384
commit
1d7e098853
|
@ -19,9 +19,10 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"arg": "^4.1.3",
|
||||
"chrono-node": "^2.1.7",
|
||||
"systemd-daemon": "^1.1.2",
|
||||
"puppeteer": "9.1.1"
|
||||
"chrono-node": "^2.3.8",
|
||||
"dayjs": "^1.11.3",
|
||||
"puppeteer": "9.1.1",
|
||||
"systemd-daemon": "^1.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-eslint": "^10.1.0",
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
* @return {Promise<Date>}
|
||||
*/
|
||||
window.__chronoParseDate = function (text, ref, option) {}
|
||||
window._tryParseDateByTimeZone = function (text, ref, option) { }
|
||||
/**
|
||||
* @param {...string} text - The objects to log.
|
||||
* @return {Promise<void>}
|
||||
|
@ -143,7 +144,7 @@ class MautrixController {
|
|||
* @private
|
||||
*/
|
||||
async _tryParseDate(text, ref, option) {
|
||||
const parsed = await window.__chronoParseDate(text, ref, option)
|
||||
const parsed = await window.__tryParseDateByTimeZone(text, ref, option)
|
||||
return parsed ? new Date(parsed) : null
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ MessagesPuppeteer.extensionDir = config.extension_dir || MessagesPuppeteer.exten
|
|||
MessagesPuppeteer.cycleDelay = config.cycle_delay || MessagesPuppeteer.cycleDelay
|
||||
MessagesPuppeteer.useXdotool = config.use_xdotool || MessagesPuppeteer.useXdotool
|
||||
MessagesPuppeteer.jiggleDelay = config.jiggle_delay || MessagesPuppeteer.jiggleDelay
|
||||
|
||||
MessagesPuppeteer.timeZone = config.timeZone || MessagesPuppeteer.timeZone
|
||||
const api = new PuppetAPI(config.listen)
|
||||
|
||||
function stop() {
|
||||
|
|
|
@ -22,6 +22,9 @@ import chrono from "chrono-node"
|
|||
|
||||
import TaskQueue from "./taskqueue.js"
|
||||
import { sleep } from "./util.js"
|
||||
import dayjs from 'dayjs';
|
||||
import utc from 'dayjs/plugin/utc.js';
|
||||
import timezone from 'dayjs/plugin/timezone.js';
|
||||
|
||||
export default class MessagesPuppeteer {
|
||||
static profileDir = "./profiles"
|
||||
|
@ -34,7 +37,7 @@ export default class MessagesPuppeteer {
|
|||
static viewport = { width: 960, height: 840 }
|
||||
static url = undefined
|
||||
static extensionDir = "extension_files"
|
||||
|
||||
static timeZone = "Asia/Taipei"
|
||||
/**
|
||||
*
|
||||
* @param {string} id
|
||||
|
@ -142,7 +145,7 @@ export default class MessagesPuppeteer {
|
|||
await this.page.exposeFunction("__mautrixLoggedOut",
|
||||
this._onLoggedOut.bind(this))
|
||||
await this.page.exposeFunction("__chronoParseDate", chrono.parseDate)
|
||||
|
||||
await this.page.exposeFunction("__tryParseDateByTimeZone", this._tryParseDateByTimeZone.bind(this))
|
||||
// NOTE Must *always* re-login on a browser session, so no need to check if already logged in
|
||||
this.loginRunning = false
|
||||
this.loginCancelled = false
|
||||
|
@ -150,6 +153,28 @@ export default class MessagesPuppeteer {
|
|||
this.log("Startup complete")
|
||||
}
|
||||
|
||||
async _tryParseDateByTimeZone(text, ref, option) {
|
||||
const localTz = MessagesPuppeteer.timeZone // This is the ISO string
|
||||
dayjs.extend(utc);
|
||||
dayjs.extend(timezone);
|
||||
const localTime = dayjs.tz(new Date(), localTz)
|
||||
const localOffset = localTime.utcOffset() // returns in minutes
|
||||
|
||||
const custom = chrono.casual.clone()
|
||||
custom.refiners.push({
|
||||
refine: (results) => {
|
||||
Array.from(results).forEach((result) => {
|
||||
// Returns the time with the offset in included (must use minutes)
|
||||
result.start.imply('timezoneOffset', localOffset)
|
||||
result.end && result.end.imply('timezoneOffset', localOffset)
|
||||
})
|
||||
return results
|
||||
}})
|
||||
const parsed = custom.parseDate(text, ref, option)
|
||||
this.log(`parsed ${parsed}`)
|
||||
return parsed
|
||||
}
|
||||
|
||||
async _preparePage(navigateTo) {
|
||||
await this.page.bringToFront()
|
||||
if (navigateTo) {
|
||||
|
|
Loading…
Reference in New Issue