mirror of
https://github.com/ThisIsBenny/iOS-Widgets.git
synced 2025-06-06 13:37:41 +00:00
widget parameter support
Signed-off-by: Benny Samir Hierl <bennysamir@posteo.de>
This commit is contained in:
parent
815c7f0331
commit
8bb641e6ee
1 changed files with 57 additions and 42 deletions
|
@ -12,10 +12,24 @@ If the dial-in data of a meeting should not be recognized, the invitation can be
|
||||||
|
|
||||||
*****************************/
|
*****************************/
|
||||||
|
|
||||||
let timeformat = 'de-DE'
|
let timeformat, countryCode
|
||||||
let countryCode = '+49'
|
|
||||||
|
|
||||||
const listLimit = (config.widgetFamily == 'medium')? 1:5;
|
let widgetInputRAW = args.widgetParameter;
|
||||||
|
let widgetInput = null;
|
||||||
|
|
||||||
|
if (widgetInputRAW) {
|
||||||
|
widgetInput = widgetInputRAW.toString().split(';')
|
||||||
|
countryCode = widgetInput[0]
|
||||||
|
timeformat = widgetInput[1] || 'de-DE'
|
||||||
|
if (/^\+[\d]{1,3}$/.test(countryCode) === false) {
|
||||||
|
throw new Error('Invalid format of country code: ' + countryCode);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
countryCode = '+49'
|
||||||
|
timeformat = 'de-DE'
|
||||||
|
}
|
||||||
|
|
||||||
|
const listLimit = (config.widgetFamily == 'medium') ? 1 : 5;
|
||||||
|
|
||||||
let iconColor;
|
let iconColor;
|
||||||
if (Device.isUsingDarkAppearance()) {
|
if (Device.isUsingDarkAppearance()) {
|
||||||
|
@ -26,14 +40,15 @@ if (Device.isUsingDarkAppearance()) {
|
||||||
|
|
||||||
let now = new Date()
|
let now = new Date()
|
||||||
let end = new Date()
|
let end = new Date()
|
||||||
end.setHours(23,59,59,999);
|
end.setHours(23, 59, 59, 999);
|
||||||
|
|
||||||
const matchPatterns = {
|
const matchPatterns = {
|
||||||
skype: {
|
skype: {
|
||||||
online: [
|
online: [
|
||||||
/Skype-Besprechung teilnehmen <(https?:\/\/[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF./\-_]*)>/
|
/Skype-Besprechung teilnehmen <(https?:\/\/[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF./\-_]*)>/
|
||||||
],
|
],
|
||||||
phone: [
|
phone: [
|
||||||
{number: /Per Telefon teilnehmen[\r\n\s]+.*<tel:(\+49[0-9%]+)>/, pin: /Konferenzkennung:[\s]([0-9]+)/}
|
{ number: /Per Telefon teilnehmen[\r\n\s]+.*<tel:(\+49[0-9%]+)>/, pin: /Konferenzkennung:[\s]([0-9]+)/ }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
circuit: {
|
circuit: {
|
||||||
|
@ -41,7 +56,7 @@ const matchPatterns = {
|
||||||
/(https:\/\/eu\.yourcircuit\.com\/guest\?token=[\a-z0-9-]+)/
|
/(https:\/\/eu\.yourcircuit\.com\/guest\?token=[\a-z0-9-]+)/
|
||||||
],
|
],
|
||||||
phone: [
|
phone: [
|
||||||
{number: /Einwahlnummern[\r\n]*Deutschland[\r\n]*Deutsch[\r\n]*(\+49[0-9\s]+)/, pin: /PIN[\r\n]*([0-9\s]+)#/}
|
{ number: /Einwahlnummern[\r\n]*Deutschland[\r\n]*Deutsch[\r\n]*(\+49[0-9\s]+)/, pin: /PIN[\r\n]*([0-9\s]+)#/ }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
msteams: {
|
msteams: {
|
||||||
|
@ -54,7 +69,7 @@ const matchPatterns = {
|
||||||
let upcomingRemoteMeeting = (await CalendarEvent.between(now, end)).map((event) => {
|
let upcomingRemoteMeeting = (await CalendarEvent.between(now, end)).map((event) => {
|
||||||
if (event.notes) {
|
if (event.notes) {
|
||||||
for (const [key, value] of Object.entries(matchPatterns)) {
|
for (const [key, value] of Object.entries(matchPatterns)) {
|
||||||
for (pattern of value.online || []) {
|
for (pattern of value.online || []) {
|
||||||
let m = event.notes.match(new RegExp(pattern, 'im'))
|
let m = event.notes.match(new RegExp(pattern, 'im'))
|
||||||
if (m && m[1]) {
|
if (m && m[1]) {
|
||||||
event.dialInUrl = m[1]
|
event.dialInUrl = m[1]
|
||||||
|
@ -63,12 +78,12 @@ let upcomingRemoteMeeting = (await CalendarEvent.between(now, end)).map((event)
|
||||||
}
|
}
|
||||||
// Some Invitations contains multiple phone numbers with different Country Codes, why first all numbers will be collected and late the needed number with the given country code will be filtered out
|
// Some Invitations contains multiple phone numbers with different Country Codes, why first all numbers will be collected and late the needed number with the given country code will be filtered out
|
||||||
let dialInNumbers = []
|
let dialInNumbers = []
|
||||||
for (pattern of value.phone || []) {
|
for (pattern of value.phone || []) {
|
||||||
let numberMatch = event.notes.match(new RegExp(pattern.number, 'im'))
|
let numberMatch = event.notes.match(new RegExp(pattern.number, 'im'))
|
||||||
if (numberMatch && numberMatch[1]) {
|
if (numberMatch && numberMatch[1]) {
|
||||||
let dialInNumber = numberMatch[1]
|
let dialInNumber = numberMatch[1]
|
||||||
let pinMatch = event.notes.match(new RegExp(pattern.pin, 'im'))
|
let pinMatch = event.notes.match(new RegExp(pattern.pin, 'im'))
|
||||||
if (pinMatch && pinMatch[1]) {
|
if (pinMatch && pinMatch[1]) {
|
||||||
dialInNumber += ',,' + pinMatch[1] + '#'
|
dialInNumber += ',,' + pinMatch[1] + '#'
|
||||||
}
|
}
|
||||||
dialInNumbers.push(dialInNumber.replace(/%20|[\s\r\n]/g, ''))
|
dialInNumbers.push(dialInNumber.replace(/%20|[\s\r\n]/g, ''))
|
||||||
|
@ -136,18 +151,18 @@ else if (nextUpcomingMeeting) {
|
||||||
|
|
||||||
if (nextUpcomingMeeting.dialInNumber) {
|
if (nextUpcomingMeeting.dialInNumber) {
|
||||||
let phoneImage = rightStack.addImage(SFSymbol.named('phone').image)
|
let phoneImage = rightStack.addImage(SFSymbol.named('phone').image)
|
||||||
phoneImage.imageSize = new Size(25,25)
|
phoneImage.imageSize = new Size(25, 25)
|
||||||
phoneImage.url = 'tel:' + nextUpcomingMeeting.dialInNumber
|
phoneImage.url = 'tel:' + nextUpcomingMeeting.dialInNumber
|
||||||
if (iconColor) {phoneImage.tintColor = new Color(iconColor)}
|
if (iconColor) { phoneImage.tintColor = new Color(iconColor) }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextUpcomingMeeting.dialInUrl) {
|
if (nextUpcomingMeeting.dialInUrl) {
|
||||||
rightStack.addSpacer(10)
|
rightStack.addSpacer(10)
|
||||||
let videoImage = rightStack.addImage(SFSymbol.named('video').image)
|
let videoImage = rightStack.addImage(SFSymbol.named('video').image)
|
||||||
videoImage.imageSize = new Size(25,25)
|
videoImage.imageSize = new Size(25, 25)
|
||||||
videoImage.url = nextUpcomingMeeting.dialInUrl
|
videoImage.url = nextUpcomingMeeting.dialInUrl
|
||||||
videoImage.centerAlignImage()
|
videoImage.centerAlignImage()
|
||||||
if (iconColor) {videoImage.tintColor = new Color(iconColor)}
|
if (iconColor) { videoImage.tintColor = new Color(iconColor) }
|
||||||
}
|
}
|
||||||
rightStack.addSpacer()
|
rightStack.addSpacer()
|
||||||
widget.addSpacer()
|
widget.addSpacer()
|
||||||
|
@ -156,7 +171,7 @@ else if (nextUpcomingMeeting) {
|
||||||
upcomingMeetingStack.layoutVertically()
|
upcomingMeetingStack.layoutVertically()
|
||||||
|
|
||||||
if (upComingMeetings && upComingMeetings.length > 0) {
|
if (upComingMeetings && upComingMeetings.length > 0) {
|
||||||
let upComingText = upcomingMeetingStack.addText((upComingMeetings.length == 1)? 'Upcoming Remote Meeting':'Upcoming Remote Meetings')
|
let upComingText = upcomingMeetingStack.addText((upComingMeetings.length == 1) ? 'Upcoming Remote Meeting' : 'Upcoming Remote Meetings')
|
||||||
upComingText.font = Font.boldSystemFont(10)
|
upComingText.font = Font.boldSystemFont(10)
|
||||||
upcomingMeetingStack.addSpacer(2)
|
upcomingMeetingStack.addSpacer(2)
|
||||||
}
|
}
|
||||||
|
@ -184,16 +199,16 @@ else if (nextUpcomingMeeting) {
|
||||||
|
|
||||||
if (upComingMeetings[i].dialInNumber) {
|
if (upComingMeetings[i].dialInNumber) {
|
||||||
let phoneImage = rightColumn.addImage(SFSymbol.named('phone').image)
|
let phoneImage = rightColumn.addImage(SFSymbol.named('phone').image)
|
||||||
phoneImage.imageSize = new Size(15,15)
|
phoneImage.imageSize = new Size(15, 15)
|
||||||
phoneImage.url = 'tel:' + upComingMeetings[i].dialInNumber
|
phoneImage.url = 'tel:' + upComingMeetings[i].dialInNumber
|
||||||
if (iconColor) {phoneImage.tintColor = new Color(iconColor)}
|
if (iconColor) { phoneImage.tintColor = new Color(iconColor) }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upComingMeetings[i].dialInUrl) {
|
if (upComingMeetings[i].dialInUrl) {
|
||||||
let videoImage = rightColumn.addImage(SFSymbol.named('video').image)
|
let videoImage = rightColumn.addImage(SFSymbol.named('video').image)
|
||||||
videoImage.imageSize = new Size(15,15)
|
videoImage.imageSize = new Size(15, 15)
|
||||||
videoImage.url = upComingMeetings[i].dialInUrl
|
videoImage.url = upComingMeetings[i].dialInUrl
|
||||||
if (iconColor) {videoImage.tintColor = new Color(iconColor)}
|
if (iconColor) { videoImage.tintColor = new Color(iconColor) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
widget.addSpacer(5)
|
widget.addSpacer(5)
|
||||||
|
@ -206,7 +221,7 @@ else if (nextUpcomingMeeting) {
|
||||||
widget.addSpacer()
|
widget.addSpacer()
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!config.runsInWidget) {
|
if (!config.runsInWidget) {
|
||||||
await widget.presentLarge()
|
await widget.presentLarge()
|
||||||
} else {
|
} else {
|
||||||
// Tell the system to show the widget.
|
// Tell the system to show the widget.
|
||||||
|
|
Loading…
Add table
Reference in a new issue