samoware-multisave/contentscript.js

98 lines
3.0 KiB
JavaScript

console.log("contentscript.js started!");
// get date email was received on
function extractDate() {
console.log("contentscript.js: this is extractDate()");
// get element containing date from mail list
const dateElement = document.querySelector(".samoware-mail-list__item_mode_active .samoware-mail-list__time");
// robustify
if ( dateElement === null ) {
return "nodate";
}
// check if date is actually a time and return today's date
if ( dateElement.innerText.includes(":") ) {
return getTodaysDate();
}
// parse date string
const dateArray = dateElement.innerText.split("/");
const yyyy = "20" + String(dateArray.pop());
const mm = String(dateArray.pop()).padStart(2, '0');
const dd = String(dateArray.pop()).padStart(2, '0');
// log value and return
console.log(`contentscript.js: date is ${yyyy + mm + dd}`);
return yyyy + mm + dd;
}
function getTodaysDate() {
let today = new Date();
let yyyy = today.getFullYear();
let mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
let dd = String(today.getDate()).padStart(2, '0');
// log value and return
console.log(`contentscript.js: today's date is ${yyyy + mm + dd}`);
return yyyy + mm + dd;
}
// execute script regardless of message content
function handleReceivedMessage(message) {
// log received message
console.log(`contentscript.js received a message with content ${message}`);
// get date email was received on
const date = extractDate();
// get urls and filenames
const urlsAndFilenames = extractUrlsAndFilenames();
console.log(`contentscript.js: URLs and filenames extracted -> ${JSON.stringify(urlsAndFilenames)}`);
// trigger click on print button
clickPrintButton();
// return data as the resolved Promise's payload
return Promise.resolve({ date: date, urlsAndFilenames: urlsAndFilenames });
}
// extract URL and filename for each mail attachment
function extractUrlsAndFilenames() {
console.log("contentscript.js: this is extractUrlsAndFilenames()");
// get the correct frame
const frame = document.querySelector("iframe.js-mail-content");
// get all divs containing attachments
const divs = frame.contentWindow.document.body.querySelectorAll("div.samoware-mail-message__attach__item[attachment-ref]");
// loop over divs and extract attachment information
let urlsAndFilenames = [];
divs.forEach((div) => {
// get url
const url = div.getAttribute("attachment-ref");
// get filename
let filename = div.getAttribute("file-name");
// if filename is null, derive it from url
if (!filename) {
const splitUrl = url.split("/");
filename = splitUrl[splitUrl.length - 1];
}
urlsAndFilenames.push({ url: url, filename: filename });
});
return urlsAndFilenames;
}
// trigger a click event on samoware's print button
function clickPrintButton() {
const printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]');
printElement.click();
}
browser.runtime.onMessage.addListener(handleReceivedMessage);