filenames now get prefixed with the date the mail was received on

This commit is contained in:
Eclipse 2025-11-12 18:10:08 +01:00
parent 89f4b2f9a6
commit d4e5cf2bbf
2 changed files with 69 additions and 28 deletions

View File

@ -29,12 +29,10 @@ async function downloadFile(url, filename, saveAs=false) {
} }
// sequentially initiate download for each attached file // sequentially initiate download for each attached file
async function downloadAllFiles(urlsAndFilenames) { async function downloadAllFiles(date, urlsAndFilenames) {
const currentDate = getCurrentDate();
for (let i = 0; i < urlsAndFilenames.length; i++) { for (let i = 0; i < urlsAndFilenames.length; i++) {
// prefix filename // prefix filename
let prefixedFilename = currentDate + " " + urlsAndFilenames[i].filename; let prefixedFilename = date + " " + urlsAndFilenames[i].filename;
console.log(`background.js: downloadAllFiles(): i is ${i}`); console.log(`background.js: downloadAllFiles(): i is ${i}`);
await downloadFile(urlsAndFilenames[i].url, prefixedFilename, true).then(onSuccess, onFailure); await downloadFile(urlsAndFilenames[i].url, prefixedFilename, true).then(onSuccess, onFailure);
} }
@ -45,23 +43,17 @@ function handlePageactionClick(tab) {
console.log("background.js: handlePageactionClick(): sending message"); console.log("background.js: handlePageactionClick(): sending message");
// get base url // get base url
browser.tabs.query({ browser.tabs.query({currentWindow: true, active: true})
currentWindow: true,
active: true
})
.then(tabs => { .then(tabs => {
console.log(`background.js: handlePageactionClick(): tab query returned ${JSON.stringify(tabs)}`); console.log(`background.js: handlePageactionClick(): tab query returned ${JSON.stringify(tabs)}`);
baseUrl = tabs[0].url; baseUrl = tabs[0].url;
}) })
// send message to content script which will trigger said content script // send message to content script which will trigger said content script
browser.tabs.sendMessage( browser.tabs.sendMessage(tab.id, "pageAction was clicked")
tab.id,
"pageAction was clicked"
)
.then(message => { .then(message => {
console.log(`background.js: received a response from contentscript.js with content ${JSON.stringify(message.urlsAndFilenames)}`); console.log(`background.js: received a response from contentscript.js with content ${JSON.stringify(message.urlsAndFilenames)} | ${JSON.stringify(message.date)}`);
downloadAllFiles(message.urlsAndFilenames); downloadAllFiles(message.date, message.urlsAndFilenames);
}) })
.catch(error => .catch(error =>
console.error(`background.js: handlePageactionClick(): The following error occured while handling a page action: ${error}`) console.error(`background.js: handlePageactionClick(): The following error occured while handling a page action: ${error}`)

View File

@ -1,37 +1,86 @@
console.log("contentscript.js started!"); 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) { function handleReceivedMessage(message) {
// log received message // log received message
console.log(`contentscript.js received a message with content ${message}`); console.log(`contentscript.js received a message with content ${message}`);
// execute script regardless of message content // get date email was received on
const date = extractDate();
// get urls and filenames
const urlsAndFilenames = extractUrlsAndFilenames(); const urlsAndFilenames = extractUrlsAndFilenames();
clickPrintButton();
console.log(`contentscript.js: URLs and filenames extracted -> ${JSON.stringify(urlsAndFilenames)}`); 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 data as the resolved Promise's payload
return Promise.resolve({ urlsAndFilenames: urlsAndFilenames }); return Promise.resolve({ date: date, urlsAndFilenames: urlsAndFilenames });
}; }
// extract URL and filename for each mail attachment // extract URL and filename for each mail attachment
function extractUrlsAndFilenames() { function extractUrlsAndFilenames() {
console.log("contentscript.js: this is extractFileUrlsAndNames()"); console.log("contentscript.js: this is extractUrlsAndFilenames()");
// get the correct frame // get the correct frame
let frame = document.querySelector("iframe.js-mail-content"); const frame = document.querySelector("iframe.js-mail-content");
// get all divs containing attachments // get all divs containing attachments
let divs = frame.contentWindow.document.body.querySelectorAll("div.samoware-mail-message__attach__item[attachment-ref]"); const divs = frame.contentWindow.document.body.querySelectorAll("div.samoware-mail-message__attach__item[attachment-ref]");
// loop over divs and extract attachment information // loop over divs and extract attachment information
let urlsAndFilenames = []; let urlsAndFilenames = [];
divs.forEach((div) => { divs.forEach((div) => {
let url = div.getAttribute("attachment-ref"); // get url
let filename = div.getAttribute("file-name"); const url = div.getAttribute("attachment-ref");
// get filename
let filename = div.getAttribute("file-name");
// if filename is null, derive it from url // if filename is null, derive it from url
if (!filename) { if (!filename) {
let splitUrl = url.split("/"); const splitUrl = url.split("/");
filename = splitUrl[splitUrl.length - 1]; filename = splitUrl[splitUrl.length - 1];
} }
urlsAndFilenames.push({ url: url, filename: filename }); urlsAndFilenames.push({ url: url, filename: filename });
@ -39,10 +88,10 @@ function extractUrlsAndFilenames() {
return urlsAndFilenames; return urlsAndFilenames;
} }
// trigger a click event on samoware's print button // trigger a click event on samoware's print button
function clickPrintButton() { function clickPrintButton() {
let printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]'); const printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]');
printElement.click(); printElement.click();
} }
browser.runtime.onMessage.addListener(handleReceivedMessage); browser.runtime.onMessage.addListener(handleReceivedMessage);