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
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}`)

View File

@ -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 });
@ -41,7 +90,7 @@ function extractUrlsAndFilenames() {
// 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();
}