Commit d7184b29 by yexing

[yx] update

parent b8205e2d
2.0.2 2.2.4
\ No newline at end of file \ 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 @@ ...@@ -19642,30 +19642,39 @@
chrome.tabs.onRemoved.addListener((tabId) => { chrome.tabs.onRemoved.addListener((tabId) => {
tabCache.delete(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) => { chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => { (async () => {
if (msg.type === "run") { if (msg.type === "run") {
startTask(); startTask();
sendTabMsg(msg, sendResponse); 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 { try {
let { url, fn } = msg.data; await sopLink(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 });
sendResponse({ status: "ok" }); sendResponse({ status: "ok" });
} catch (err) { } catch (err) {
sendResponse({ status: "error", error: err.message }); sendResponse({ status: "error", error: err.message });
...@@ -19675,46 +19684,26 @@ ...@@ -19675,46 +19684,26 @@
return true; return true;
}); });
let taskInterval = null; let taskInterval = null, taskNum = 0, logs = [];
function startTask() { function startTask() {
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen']).then(console.log); // 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: [], taskLen: 0, taskCount: 0 });
chrome.storage.local.set({ isRunning: true, logs: [] });
taskNum++;
if (taskInterval) return; if (taskInterval) return;
chrome.storage.local.set({ isRunning: true });
taskInterval = setInterval(() => { taskInterval = setInterval(() => {
// 推送更新 // 推送更新
chrome.storage.local.get(['taskNum', 'logs'], ({logs = [], taskNum = 0}) => { const ackLen = logs.filter(x => x.message.includes("完成")).length;
const ackLen = logs.filter(x => x.includes("完成")).length; if (ackLen === taskNum) {
if (ackLen === taskNum) { taskNum = 0;
clearInterval(taskInterval); clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false }); chrome.storage.local.set({ isRunning: false });
} logs.push("已全部完成");
chrome.runtime.sendMessage({ }
type: 'progress', logs 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); }, 1000);
} }
......
...@@ -197,11 +197,20 @@ ...@@ -197,11 +197,20 @@
} }
async send() { async send() {
const fns = []; const fns = [];
const blobs = this.tasks.map(async (task, idx) => { const blobs = (
fns.push(task.getFileName(`${this.len}-${idx + 1}`)); await Promise.all(
return await task.send(true); this.tasks
}); .map((task, idx) => {
return createZip(blobs, fns); 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 { class Task {
...@@ -378,7 +387,7 @@ ...@@ -378,7 +387,7 @@
// 跨域 // 跨域
const fn = this.getFileName(); const fn = this.getFileName();
response = await chrome.runtime.sendMessage({ response = await chrome.runtime.sendMessage({
type: "uploadLink", type: "sopLink",
data: { url, fn }, data: { url, fn },
}); });
console.log(response); console.log(response);
...@@ -712,39 +721,25 @@ ...@@ -712,39 +721,25 @@
'//*[@id="header"]/div[1]/div[1]/div/div[3]/a' '//*[@id="header"]/div[1]/div[1]/div/div[3]/a'
).click(); ).click();
} }
}// 存在数据竞态问题 }const addLog = (message) => {
// const addTaskCount = async () => {
// const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
// chrome.storage.local.set({ taskCount: taskCount + 1 });
// }
const addLog = async (message) => {
const logEntry = { const logEntry = {
time: new Date().toLocaleTimeString(), time: new Date().toLocaleTimeString(),
message message
}; };
const logs = await chrome.storage.local.get(["logs"]); chrome.runtime.sendMessage({ type: "addLog", data: logEntry });
let newLogs = [...logs, logEntry];
newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
chrome.storage.local.set({ logs: newLogs });
}; };
async function run(options) { async function run(options) {
const name = Object.values(TABLE).find(x => x.uri === options.uri).name; const name = Object.values(TABLE).find(x => x.uri === options.uri).name;
let tasks = await createTasks(options.uri, options.period); let tasks = await createTasks(options.uri, options.period);
tasks = options.sn ? [tasks.at(options.sn)] : tasks; tasks = options.sn ? [tasks.at(options.sn)] : tasks;
let moment = 0, idx = 0, len = tasks.length; let moment = 3000, 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 });
for (const task of tasks) { for (const task of tasks) {
const pf = `${++idx + 1}/${len}`; const pf = `${++idx}/${len}`;
await addLog(`${name} 运行中 ${pf}`); addLog(`${name} 运行中 ${pf}`);
console.log(`${pf} start: ${JSON.stringify(task)}`); console.log(`${pf} start: ${JSON.stringify(task)}`);
let data = await task.send(); let data = await task.send();
if (data === false) return; if (data === true || data === false) {
if (data === true) { continue;
// await addTaskCount();
return;
} }
let fn = task.getFileName(); let fn = task.getFileName();
...@@ -761,12 +756,10 @@ ...@@ -761,12 +756,10 @@
uploadFile(fn, form); uploadFile(fn, form);
// downloadFile(fn, data); // downloadFile(fn, data);
} }
// await addTaskCount();
console.log(`${pf} end: ${fn}`); console.log(`${pf} end: ${fn}`);
await sleep(moment); await sleep(moment);
moment += 3000; // 3s
} }
await addLog(`插件运行完成`); addLog(`${name} 运行完成`);
} }
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => { (async () => {
......
...@@ -260,17 +260,17 @@ ...@@ -260,17 +260,17 @@
document.querySelector('.modal').style.display = 'none'; document.querySelector('.modal').style.display = 'none';
}); });
const btn = document.querySelector(".confirm"); const btn = document.querySelector(".confirm");
chrome.storage.local.get(['isRunning', 'logs'], ({ isRunning, logs = [] }) => { chrome.storage.local.get(['isRunning'], ({ isRunning = false }) => {
if (isRunning) { if (isRunning) {
showModal(); showModal();
disableButton(btn); disableButton(btn);
} else { } else {
enableButton(btn); enableButton(btn);
} }
renderLogs(logs);
}); });
document.querySelector('.cancel').addEventListener('click', () => { 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); enableButton(btn);
}); });
chrome.runtime.onMessage.addListener((msg) => { 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"]}]} {"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 \ No newline at end of file
...@@ -40,30 +40,39 @@ chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => { ...@@ -40,30 +40,39 @@ chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
chrome.tabs.onRemoved.addListener((tabId) => { chrome.tabs.onRemoved.addListener((tabId) => {
tabCache.delete(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) => { chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => { (async () => {
if (msg.type === "run") { if (msg.type === "run") {
startTask(); startTask();
sendTabMsg(msg, sendResponse); 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 { try {
let { url, fn } = msg.data; await sopLink(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 });
sendResponse({ status: "ok" }); sendResponse({ status: "ok" });
} catch (err) { } catch (err) {
sendResponse({ status: "error", error: err.message }); sendResponse({ status: "error", error: err.message });
...@@ -73,46 +82,26 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { ...@@ -73,46 +82,26 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
return true; return true;
}); });
let taskInterval = null; let taskInterval = null, taskNum = 0, logs = [];
function startTask() { function startTask() {
// chrome.storage.local.get(['isRunning', 'logs', 'taskCount', 'taskLen']).then(console.log); // chrome.storage.local.get(['isRunning', 'logs']).then(console.log);
// chrome.storage.local.set({ isRunning: true, logs: [], taskLen: 0, taskCount: 0 }); // chrome.storage.local.set({ isRunning: true, logs: [] });
chrome.storage.local.set({ isRunning: true, logs: [] });
taskNum++;
if (taskInterval) return; if (taskInterval) return;
chrome.storage.local.set({ isRunning: true });
taskInterval = setInterval(() => { taskInterval = setInterval(() => {
// 推送更新 // 推送更新
chrome.storage.local.get(['taskNum', 'logs'], ({logs = [], taskNum = 0}) => { const ackLen = logs.filter(x => x.message.includes("完成")).length;
const ackLen = logs.filter(x => x.includes("完成")).length; if (ackLen === taskNum) {
if (ackLen === taskNum) { taskNum = 0;
clearInterval(taskInterval); clearInterval(taskInterval);
chrome.storage.local.set({ isRunning: false }); chrome.storage.local.set({ isRunning: false });
} logs.push("已全部完成");
chrome.runtime.sendMessage({ }
type: 'progress', logs 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); }, 1000);
} }
......
...@@ -13,11 +13,20 @@ class TaskGroup { ...@@ -13,11 +13,20 @@ class TaskGroup {
} }
async send() { async send() {
const fns = []; const fns = [];
const blobs = this.tasks.map(async (task, idx) => { const blobs = (
fns.push(task.getFileName(`${this.len}-${idx + 1}`)); await Promise.all(
return await task.send(true); this.tasks
}); .map((task, idx) => {
return createZip(blobs, fns); 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 { class Task {
...@@ -194,7 +203,7 @@ const rrCallback = async function (response) { ...@@ -194,7 +203,7 @@ const rrCallback = async function (response) {
// 跨域 // 跨域
const fn = this.getFileName(); const fn = this.getFileName();
response = await chrome.runtime.sendMessage({ response = await chrome.runtime.sendMessage({
type: "uploadLink", type: "sopLink",
data: { url, fn }, data: { url, fn },
}); });
console.log(response); console.log(response);
......
...@@ -13,39 +13,25 @@ async function webJump() { ...@@ -13,39 +13,25 @@ async function webJump() {
).click(); ).click();
} }
}; };
// 存在数据竞态问题 const addLog = (message) => {
// const addTaskCount = async () => {
// const { taskCount = 0 } = await chrome.storage.local.get(["taskCount"]);
// chrome.storage.local.set({ taskCount: taskCount + 1 });
// }
const addLog = async (message) => {
const logEntry = { const logEntry = {
time: new Date().toLocaleTimeString(), time: new Date().toLocaleTimeString(),
message message
}; };
const logs = await chrome.storage.local.get(["logs"]); chrome.runtime.sendMessage({ type: "addLog", data: logEntry });
let newLogs = [...logs, logEntry];
newLogs = newLogs.slice(Math.max(newLogs.length - 30, 0)); // 限制日志数量
chrome.storage.local.set({ logs: newLogs });
} }
async function run(options) { async function run(options) {
const name = Object.values(TABLE).find(x => x.uri === options.uri).name; const name = Object.values(TABLE).find(x => x.uri === options.uri).name;
let tasks = await createTasks(options.uri, options.period); let tasks = await createTasks(options.uri, options.period);
tasks = options.sn ? [tasks.at(options.sn)] : tasks; tasks = options.sn ? [tasks.at(options.sn)] : tasks;
let moment = 0, idx = 0, len = tasks.length; let moment = 3000, 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 });
for (const task of tasks) { for (const task of tasks) {
const pf = `${++idx + 1}/${len}`; const pf = `${++idx}/${len}`;
await addLog(`${name} 运行中 ${pf}`); addLog(`${name} 运行中 ${pf}`);
console.log(`${pf} start: ${JSON.stringify(task)}`); console.log(`${pf} start: ${JSON.stringify(task)}`);
let data = await task.send(); let data = await task.send();
if (data === false) return; if (data === true || data === false) {
if (data === true) { continue;
// await addTaskCount();
return;
} }
let fn = task.getFileName(); let fn = task.getFileName();
...@@ -62,12 +48,10 @@ async function run(options) { ...@@ -62,12 +48,10 @@ async function run(options) {
uploadFile(fn, form); uploadFile(fn, form);
// downloadFile(fn, data); // downloadFile(fn, data);
} }
// await addTaskCount();
console.log(`${pf} end: ${fn}`); console.log(`${pf} end: ${fn}`);
await sleep(moment); await sleep(moment);
moment += 3000; // 3s
} }
await addLog(`插件运行完成`); addLog(`${name} 运行完成`);
} }
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
(async () => { (async () => {
......
...@@ -56,17 +56,17 @@ window.onload = function () { ...@@ -56,17 +56,17 @@ window.onload = function () {
document.querySelector('.modal').style.display = 'none'; document.querySelector('.modal').style.display = 'none';
}); });
const btn = document.querySelector(".confirm"); const btn = document.querySelector(".confirm");
chrome.storage.local.get(['isRunning', 'logs'], ({ isRunning, logs = [] }) => { chrome.storage.local.get(['isRunning'], ({ isRunning = false }) => {
if (isRunning) { if (isRunning) {
showModal(); showModal();
disableButton(btn); disableButton(btn);
} else { } else {
enableButton(btn); enableButton(btn);
} }
renderLogs(logs);
}); });
document.querySelector('.cancel').addEventListener('click', () => { 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); enableButton(btn);
}); });
chrome.runtime.onMessage.addListener((msg) => { 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