Commit d7184b29 by yexing

[yx] update

parent b8205e2d
2.0.2
\ No newline at end of file
2.2.4
\ No newline at end of file
No preview for this file type

1.48 KB | W: | H:

1.33 KB | W: | H:

plugin/dist/icon.png
plugin/dist/icon.png
plugin/dist/icon.png
plugin/dist/icon.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -19642,30 +19642,39 @@
chrome.tabs.onRemoved.addListener((tabId) => {
tabCache.delete(tabId);
});
async function sopLink(data) {
let { url, fn } = data;
console.log(`GET ${url}`);
let response = await fetch(url);
console.log(response);
let blob = await response.blob();
const csv = xlsx2csv(await blob.arrayBuffer(), { type: "array" });
if (!csv.includes("No data found")) {
fn = fn.replace(/\.\w+$/g, ".csv");
const zip = await createZip([csv], [fn]);
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", zip, fn);
await uploadFile(fn, form);
// downloadFile(fn, zip);
}
}
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
if (msg.type === "run") {
startTask();
sendTabMsg(msg, sendResponse);
} else if (msg.type === "uploadLink") {
} else if (msg.type === "resetTaskNum") {
taskNum = 0;
logs = [];
clearInterval(taskInterval);
sendResponse();
} else if (msg.type === "addLog") {
logs.push(msg.data);
sendResponse();
} else if (msg.type === "sopLink") {
try {
let { url, fn } = msg.data;
console.log(`GET ${url}`);
let response = await fetch(url);
console.log(response);
let blob = await response.blob();
const csv = xlsx2csv(await blob.arrayBuffer(), { type: "array" });
if (!csv.includes("No data found")) {
fn = fn.replace(/\.\w+$/g, ".csv");
const zip = await createZip([csv], [fn]);
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", zip, fn);
await uploadFile(fn, form);
// downloadFile(fn, zip);
}
const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
chrome.storage.local.set({ taskCount: taskCount + 1 });
await sopLink(msg.data);
sendResponse({ status: "ok" });
} catch (err) {
sendResponse({ status: "error", error: err.message });
......@@ -19675,46 +19684,26 @@
return true;
});
let taskInterval = null;
let taskInterval = null, taskNum = 0, logs = [];
function startTask() {
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen']).then(console.log);
// chrome.storage.local.set({ isRunning: true, logs: [], taskLen: 0, taskCount: 0 });
chrome.storage.local.set({ isRunning: true, logs: [] });
taskNum++;
if (taskInterval) return;
chrome.storage.local.set({ isRunning: true });
taskInterval = setInterval(() => {
// 推送更新
chrome.storage.local.get(['taskNum', 'logs'], ({logs = [], taskNum = 0}) => {
const ackLen = logs.filter(x => x.includes("完成")).length;
if (ackLen === taskNum) {
clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false });
}
chrome.runtime.sendMessage({
type: 'progress', logs
});
const ackLen = logs.filter(x => x.message.includes("完成")).length;
if (ackLen === taskNum) {
taskNum = 0;
clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false });
logs.push("已全部完成");
}
chrome.runtime.sendMessage({
type: 'progress', logs
});
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen'], (
// { isRunning = true, logs = [], taskCount = 0, taskLen = 0 }
// ) => {
// const progress = Math.ceil(taskCount / (taskLen || 1) * 100);
// const logEntry = {
// time: new Date().toLocaleTimeString(),
// message: `进度更新: ${progress}%`
// };
// let newLogs = [...logs, logEntry];
// newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
// chrome.storage.local.set({ logs: newLogs });
// // 推送更新
// chrome.runtime.sendMessage({
// type: 'progress',
// logs: newLogs
// });
// if (progress >= 100 || !isRunning) {
// clearInterval(taskInterval);
// chrome.storage.local.set({ isRunning: false });
// }
// });
}, 1000);
}
......
......@@ -197,11 +197,20 @@
}
async send() {
const fns = [];
const blobs = this.tasks.map(async (task, idx) => {
fns.push(task.getFileName(`${this.len}-${idx + 1}`));
return await task.send(true);
});
return createZip(blobs, fns);
const blobs = (
await Promise.all(
this.tasks
.map((task, idx) => {
fns.push(task.getFileName(`${this.len}-${idx + 1}`));
return task.send(true);
})
)
).filter(x => x !== false && x !== true);
if (blobs.length > 0) {
return createZip(blobs, fns);
} else {
return false;
}
}
}
class Task {
......@@ -378,7 +387,7 @@
// 跨域
const fn = this.getFileName();
response = await chrome.runtime.sendMessage({
type: "uploadLink",
type: "sopLink",
data: { url, fn },
});
console.log(response);
......@@ -712,39 +721,25 @@
'//*[@id="header"]/div[1]/div[1]/div/div[3]/a'
).click();
}
}// 存在数据竞态问题
// const addTaskCount = async () => {
// const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
// chrome.storage.local.set({ taskCount: taskCount + 1 });
// }
const addLog = async (message) => {
}const addLog = (message) => {
const logEntry = {
time: new Date().toLocaleTimeString(),
message
};
const logs = await chrome.storage.local.get(["logs"]);
let newLogs = [...logs, logEntry];
newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
chrome.storage.local.set({ logs: newLogs });
chrome.runtime.sendMessage({ type: "addLog", data: logEntry });
};
async function run(options) {
const name = Object.values(TABLE).find(x => x.uri === options.uri).name;
let tasks = await createTasks(options.uri, options.period);
tasks = options.sn ? [tasks.at(options.sn)] : tasks;
let moment = 0, idx = 0, len = tasks.length;
// const { taskLen = 0 } = await chrome.storage.local.get([`taskLen`]);
// chrome.storage.local.set({ taskLen: taskLen + len });
const { taskNum = 0 } = await chrome.storage.local.get([`taskNum`]);
chrome.storage.local.set({ taskNum: taskNum + 1 });
let moment = 3000, idx = 0, len = tasks.length;
for (const task of tasks) {
const pf = `${++idx + 1}/${len}`;
await addLog(`${name} 运行中 ${pf}`);
const pf = `${++idx}/${len}`;
addLog(`${name} 运行中 ${pf}`);
console.log(`${pf} start: ${JSON.stringify(task)}`);
let data = await task.send();
if (data === false) return;
if (data === true) {
// await addTaskCount();
return;
if (data === true || data === false) {
continue;
}
let fn = task.getFileName();
......@@ -761,12 +756,10 @@
uploadFile(fn, form);
// downloadFile(fn, data);
}
// await addTaskCount();
console.log(`${pf} end: ${fn}`);
await sleep(moment);
moment += 3000; // 3s
}
await addLog(`插件运行完成`);
addLog(`${name} 运行完成`);
}
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
......
......@@ -260,17 +260,17 @@
document.querySelector('.modal').style.display = 'none';
});
const btn = document.querySelector(".confirm");
chrome.storage.local.get(['isRunning', 'logs'], ({ isRunning, logs = [] }) => {
chrome.storage.local.get(['isRunning'], ({ isRunning = false }) => {
if (isRunning) {
showModal();
disableButton(btn);
} else {
enableButton(btn);
}
renderLogs(logs);
});
document.querySelector('.cancel').addEventListener('click', () => {
chrome.storage.local.set({ isRunning: false, logs: [], taskCount: 0, taskLen: 0 });
chrome.storage.local.set({ isRunning: false });
chrome.runtime.sendMessage({ type: "resetTaskNum" });
enableButton(btn);
});
chrome.runtime.onMessage.addListener((msg) => {
......
{"name":"WalmartExports","description":"导出沃尔玛报表","version":"2.0.2","manifest_version":3,"background":{"service_worker":"./js/background.js"},"permissions":["tabs","activeTab","scripting","notifications","storage","alarms"],"action":{"default_title":"WalmartExports","default_popup":"popup.html","default_icon":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"}},"icons":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"},"web_accessible_resources":[{"resources":["src/main.js"],"matches":["<all_urls>"]}],"host_permissions":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"content_scripts":[{"matches":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"js":["./js/main.js"]}]}
\ No newline at end of file
{"name":"WalmartExports","description":"导出沃尔玛报表","version":"2.2.4","manifest_version":3,"background":{"service_worker":"./js/background.js"},"permissions":["tabs","activeTab","scripting","notifications","storage","alarms"],"action":{"default_title":"WalmartExports","default_popup":"popup.html","default_icon":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"}},"icons":{"16":"icon.png","32":"icon.png","48":"icon.png","128":"icon.png"},"web_accessible_resources":[{"resources":["src/main.js"],"matches":["<all_urls>"]}],"host_permissions":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"content_scripts":[{"matches":["https://seller.walmart.com/*","https://advertising.walmart.com/*","https://login.account.wal-mart.com/*","https://marketplace.walmartapis.com/*","https://walmart.meinuosha.com/*"],"js":["./js/main.js"]}]}
\ No newline at end of file
......@@ -40,30 +40,39 @@ chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
chrome.tabs.onRemoved.addListener((tabId) => {
tabCache.delete(tabId);
});
async function sopLink(data) {
let { url, fn } = data;
console.log(`GET ${url}`);
let response = await fetch(url);
console.log(response);
let blob = await response.blob();
const csv = xlsx2csv(await blob.arrayBuffer(), { type: "array" });
if (!csv.includes("No data found")) {
fn = fn.replace(/\.\w+$/g, ".csv");
const zip = await createZip([csv], [fn]);
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", zip, fn);
await uploadFile(fn, form);
// downloadFile(fn, zip);
}
}
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
if (msg.type === "run") {
startTask();
sendTabMsg(msg, sendResponse);
} else if (msg.type === "uploadLink") {
} else if (msg.type === "resetTaskNum") {
taskNum = 0;
logs = [];
clearInterval(taskInterval);
sendResponse();
} else if (msg.type === "addLog") {
logs.push(msg.data);
sendResponse();
} else if (msg.type === "sopLink") {
try {
let { url, fn } = msg.data;
console.log(`GET ${url}`);
let response = await fetch(url);
console.log(response);
let blob = await response.blob();
const csv = xlsx2csv(await blob.arrayBuffer(), { type: "array" });
if (!csv.includes("No data found")) {
fn = fn.replace(/\.\w+$/g, ".csv");
const zip = await createZip([csv], [fn]);
fn = fn.replace(/\.\w+$/g, ".zip");
const form = new FormData();
form.append("zipfile", zip, fn);
await uploadFile(fn, form);
// downloadFile(fn, zip);
}
const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
chrome.storage.local.set({ taskCount: taskCount + 1 });
await sopLink(msg.data);
sendResponse({ status: "ok" });
} catch (err) {
sendResponse({ status: "error", error: err.message });
......@@ -73,46 +82,26 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
return true;
});
let taskInterval = null;
let taskInterval = null, taskNum = 0, logs = [];
function startTask() {
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen']).then(console.log);
// chrome.storage.local.set({ isRunning: true, logs: [], taskLen: 0, taskCount: 0 });
chrome.storage.local.set({ isRunning: true, logs: [] });
// chrome.storage.local.get(['isRunning', 'logs']).then(console.log);
// chrome.storage.local.set({ isRunning: true, logs: [] });
taskNum++;
if (taskInterval) return;
chrome.storage.local.set({ isRunning: true });
taskInterval = setInterval(() => {
// 推送更新
chrome.storage.local.get(['taskNum', 'logs'], ({logs = [], taskNum = 0}) => {
const ackLen = logs.filter(x => x.includes("完成")).length;
if (ackLen === taskNum) {
clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false });
}
chrome.runtime.sendMessage({
type: 'progress', logs
});
const ackLen = logs.filter(x => x.message.includes("完成")).length;
if (ackLen === taskNum) {
taskNum = 0;
clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false });
logs.push("已全部完成");
}
chrome.runtime.sendMessage({
type: 'progress', logs
});
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen'], (
// { isRunning = true, logs = [], taskCount = 0, taskLen = 0 }
// ) => {
// const progress = Math.ceil(taskCount / (taskLen || 1) * 100);
// const logEntry = {
// time: new Date().toLocaleTimeString(),
// message: `进度更新: ${progress}%`
// };
// let newLogs = [...logs, logEntry];
// newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
// chrome.storage.local.set({ logs: newLogs });
// // 推送更新
// chrome.runtime.sendMessage({
// type: 'progress',
// logs: newLogs
// });
// if (progress >= 100 || !isRunning) {
// clearInterval(taskInterval);
// chrome.storage.local.set({ isRunning: false });
// }
// });
}, 1000);
}
......
......@@ -13,11 +13,20 @@ class TaskGroup {
}
async send() {
const fns = [];
const blobs = this.tasks.map(async (task, idx) => {
fns.push(task.getFileName(`${this.len}-${idx + 1}`));
return await task.send(true);
});
return createZip(blobs, fns);
const blobs = (
await Promise.all(
this.tasks
.map((task, idx) => {
fns.push(task.getFileName(`${this.len}-${idx + 1}`));
return task.send(true);
})
)
).filter(x => x !== false && x !== true);
if (blobs.length > 0) {
return createZip(blobs, fns);
} else {
return false;
}
}
}
class Task {
......@@ -194,7 +203,7 @@ const rrCallback = async function (response) {
// 跨域
const fn = this.getFileName();
response = await chrome.runtime.sendMessage({
type: "uploadLink",
type: "sopLink",
data: { url, fn },
});
console.log(response);
......
......@@ -13,39 +13,25 @@ async function webJump() {
).click();
}
};
// 存在数据竞态问题
// const addTaskCount = async () => {
// const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
// chrome.storage.local.set({ taskCount: taskCount + 1 });
// }
const addLog = async (message) => {
const addLog = (message) => {
const logEntry = {
time: new Date().toLocaleTimeString(),
message
};
const logs = await chrome.storage.local.get(["logs"]);
let newLogs = [...logs, logEntry];
newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
chrome.storage.local.set({ logs: newLogs });
chrome.runtime.sendMessage({ type: "addLog", data: logEntry });
}
async function run(options) {
const name = Object.values(TABLE).find(x => x.uri === options.uri).name;
let tasks = await createTasks(options.uri, options.period);
tasks = options.sn ? [tasks.at(options.sn)] : tasks;
let moment = 0, idx = 0, len = tasks.length;
// const { taskLen = 0 } = await chrome.storage.local.get([`taskLen`]);
// chrome.storage.local.set({ taskLen: taskLen + len });
const { taskNum = 0 } = await chrome.storage.local.get([`taskNum`]);
chrome.storage.local.set({ taskNum: taskNum + 1 });
let moment = 3000, idx = 0, len = tasks.length;
for (const task of tasks) {
const pf = `${++idx + 1}/${len}`;
await addLog(`${name} 运行中 ${pf}`);
const pf = `${++idx}/${len}`;
addLog(`${name} 运行中 ${pf}`);
console.log(`${pf} start: ${JSON.stringify(task)}`);
let data = await task.send();
if (data === false) return;
if (data === true) {
// await addTaskCount();
return;
if (data === true || data === false) {
continue;
}
let fn = task.getFileName();
......@@ -62,12 +48,10 @@ async function run(options) {
uploadFile(fn, form);
// downloadFile(fn, data);
}
// await addTaskCount();
console.log(`${pf} end: ${fn}`);
await sleep(moment);
moment += 3000; // 3s
}
await addLog(`插件运行完成`);
addLog(`${name} 运行完成`);
}
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => {
......
......@@ -56,17 +56,17 @@ window.onload = function () {
document.querySelector('.modal').style.display = 'none';
});
const btn = document.querySelector(".confirm");
chrome.storage.local.get(['isRunning', 'logs'], ({ isRunning, logs = [] }) => {
chrome.storage.local.get(['isRunning'], ({ isRunning = false }) => {
if (isRunning) {
showModal();
disableButton(btn);
} else {
enableButton(btn);
}
renderLogs(logs);
});
document.querySelector('.cancel').addEventListener('click', () => {
chrome.storage.local.set({ isRunning: false, logs: [], taskCount: 0, taskLen: 0 });
chrome.storage.local.set({ isRunning: false });
chrome.runtime.sendMessage({ type: "resetTaskNum" });
enableButton(btn);
});
chrome.runtime.onMessage.addListener((msg) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment