filenames now get prefixed with the date the mail was received on
This commit is contained in:
parent
89f4b2f9a6
commit
d4e5cf2bbf
@ -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}`)
|
||||
|
||||
@ -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);
|
||||
browser.runtime.onMessage.addListener(handleReceivedMessage);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user