From d4e5cf2bbfe4e19e28f7d00a780c6009110e5c36 Mon Sep 17 00:00:00 2001 From: Eclipse Date: Wed, 12 Nov 2025 18:10:08 +0100 Subject: [PATCH] filenames now get prefixed with the date the mail was received on --- background.js | 20 ++++--------- contentscript.js | 77 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 69 insertions(+), 28 deletions(-) diff --git a/background.js b/background.js index 16308eb..dfed0ef 100644 --- a/background.js +++ b/background.js @@ -29,12 +29,10 @@ async function downloadFile(url, filename, saveAs=false) { } // sequentially initiate download for each attached file -async function downloadAllFiles(urlsAndFilenames) { - const currentDate = getCurrentDate(); - +async function downloadAllFiles(date, urlsAndFilenames) { for (let i = 0; i < urlsAndFilenames.length; i++) { // prefix filename - let prefixedFilename = currentDate + " " + urlsAndFilenames[i].filename; + let prefixedFilename = date + " " + urlsAndFilenames[i].filename; console.log(`background.js: downloadAllFiles(): i is ${i}`); await downloadFile(urlsAndFilenames[i].url, prefixedFilename, true).then(onSuccess, onFailure); } @@ -45,23 +43,17 @@ function handlePageactionClick(tab) { console.log("background.js: handlePageactionClick(): sending message"); // get base url - browser.tabs.query({ - currentWindow: true, - active: true - }) + browser.tabs.query({currentWindow: true, active: true}) .then(tabs => { console.log(`background.js: handlePageactionClick(): tab query returned ${JSON.stringify(tabs)}`); baseUrl = tabs[0].url; }) // send message to content script which will trigger said content script - browser.tabs.sendMessage( - tab.id, - "pageAction was clicked" - ) + browser.tabs.sendMessage(tab.id, "pageAction was clicked") .then(message => { - console.log(`background.js: received a response from contentscript.js with content ${JSON.stringify(message.urlsAndFilenames)}`); - downloadAllFiles(message.urlsAndFilenames); + console.log(`background.js: received a response from contentscript.js with content ${JSON.stringify(message.urlsAndFilenames)} | ${JSON.stringify(message.date)}`); + downloadAllFiles(message.date, message.urlsAndFilenames); }) .catch(error => console.error(`background.js: handlePageactionClick(): The following error occured while handling a page action: ${error}`) diff --git a/contentscript.js b/contentscript.js index dc5567c..92a48d6 100644 --- a/contentscript.js +++ b/contentscript.js @@ -1,37 +1,86 @@ 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}`); - // execute script regardless of message content + // get date email was received on + const date = extractDate(); + + // get urls and filenames const urlsAndFilenames = extractUrlsAndFilenames(); - clickPrintButton(); 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({ urlsAndFilenames: urlsAndFilenames }); -}; + return Promise.resolve({ date: date, urlsAndFilenames: urlsAndFilenames }); +} // extract URL and filename for each mail attachment function extractUrlsAndFilenames() { - console.log("contentscript.js: this is extractFileUrlsAndNames()"); + console.log("contentscript.js: this is extractUrlsAndFilenames()"); + // 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 - 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 let urlsAndFilenames = []; divs.forEach((div) => { - let url = div.getAttribute("attachment-ref"); - let filename = div.getAttribute("file-name"); + // 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) { - let splitUrl = url.split("/"); + const splitUrl = url.split("/"); filename = splitUrl[splitUrl.length - 1]; } urlsAndFilenames.push({ url: url, filename: filename }); @@ -39,10 +88,10 @@ function extractUrlsAndFilenames() { return urlsAndFilenames; } -// trigger a click event on samoware's print button +// trigger a click event on samoware's print button function clickPrintButton() { - let printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]'); + const printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]'); printElement.click(); } -browser.runtime.onMessage.addListener(handleReceivedMessage); \ No newline at end of file +browser.runtime.onMessage.addListener(handleReceivedMessage);