Compare commits
No commits in common. "100621ad597f0eb1d52b66f76b73d74c8299d918" and "c313bc9175e0f2bdb0b96c3242c2a6fdc972b674" have entirely different histories.
100621ad59
...
c313bc9175
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-hoster-uploader",
|
"name": "multi-hoster-uploader",
|
||||||
"version": "1.1.3",
|
"version": "1.1.2",
|
||||||
"description": "Upload files to doodstream, voe, vidmoly, byse simultaneously",
|
"description": "Upload files to doodstream, voe, vidmoly, byse simultaneously",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@ -20,9 +20,6 @@ let queueSortState = { key: 'filename', direction: 'asc' };
|
|||||||
let historyRowsData = [];
|
let historyRowsData = [];
|
||||||
let historySortState = { key: 'date', direction: 'desc' };
|
let historySortState = { key: 'date', direction: 'desc' };
|
||||||
|
|
||||||
// Session-specific files for the "Files" panel (resets each session)
|
|
||||||
let sessionFilesData = [];
|
|
||||||
|
|
||||||
// --- Init ---
|
// --- Init ---
|
||||||
async function init() {
|
async function init() {
|
||||||
config = await window.api.getConfig();
|
config = await window.api.getConfig();
|
||||||
@ -36,7 +33,6 @@ async function init() {
|
|||||||
setupListeners();
|
setupListeners();
|
||||||
setupDragDrop();
|
setupDragDrop();
|
||||||
loadHistory();
|
loadHistory();
|
||||||
renderRecentUploadsPanel();
|
|
||||||
updateUploadView();
|
updateUploadView();
|
||||||
|
|
||||||
if (shouldAutoResumeQueue()) {
|
if (shouldAutoResumeQueue()) {
|
||||||
@ -609,6 +605,14 @@ async function handleContextAction(action) {
|
|||||||
persistQueueStateSoon();
|
persistQueueStateSoon();
|
||||||
} else if (action === 'copy-all-links') {
|
} else if (action === 'copy-all-links') {
|
||||||
copyAllLinks();
|
copyAllLinks();
|
||||||
|
} else if (action === 'delete-all') {
|
||||||
|
if (!uploading) {
|
||||||
|
queueJobs = [];
|
||||||
|
selectedFiles = [];
|
||||||
|
selectedJobIds.clear();
|
||||||
|
updateUploadView();
|
||||||
|
clearPersistedQueueStateSoon();
|
||||||
|
}
|
||||||
} else if (action === 'always-on-top') {
|
} else if (action === 'always-on-top') {
|
||||||
alwaysOnTopState = !alwaysOnTopState;
|
alwaysOnTopState = !alwaysOnTopState;
|
||||||
await window.api.setAlwaysOnTop(alwaysOnTopState);
|
await window.api.setAlwaysOnTop(alwaysOnTopState);
|
||||||
@ -753,29 +757,6 @@ function handleBatchDone(summary) {
|
|||||||
document.getElementById('cancelUploadBtn').style.display = 'none';
|
document.getElementById('cancelUploadBtn').style.display = 'none';
|
||||||
updateStartButton();
|
updateStartButton();
|
||||||
renderQueueTable();
|
renderQueueTable();
|
||||||
|
|
||||||
// Add completed jobs to session files panel
|
|
||||||
const dt = formatDateTime(new Date());
|
|
||||||
for (const job of queueJobs) {
|
|
||||||
if (job.status === 'done' && job.result) {
|
|
||||||
const link = job.result.download_url || job.result.embed_url || '';
|
|
||||||
if (link && !sessionFilesData.some(s => s.link === link && s.filename === job.fileName && s.host === job.hoster)) {
|
|
||||||
sessionFilesData.push({
|
|
||||||
date: dt.text, dateTs: dt.ts,
|
|
||||||
filename: job.fileName || '', host: job.hoster || '',
|
|
||||||
link, isError: false, order: sessionFilesData.length
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (job.status === 'error') {
|
|
||||||
sessionFilesData.push({
|
|
||||||
date: dt.text, dateTs: dt.ts,
|
|
||||||
filename: job.fileName || '', host: job.hoster || '',
|
|
||||||
link: `[Fehler] ${job.error || ''}`, isError: true, order: sessionFilesData.length
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
renderRecentUploadsPanel();
|
|
||||||
|
|
||||||
loadHistory();
|
loadHistory();
|
||||||
clearPersistedQueueStateSoon();
|
clearPersistedQueueStateSoon();
|
||||||
|
|
||||||
@ -1039,6 +1020,7 @@ async function loadHistory() {
|
|||||||
if (!history || history.length === 0) {
|
if (!history || history.length === 0) {
|
||||||
historyRowsData = [];
|
historyRowsData = [];
|
||||||
container.innerHTML = '<p class="empty-state">Noch keine Uploads.</p>';
|
container.innerHTML = '<p class="empty-state">Noch keine Uploads.</p>';
|
||||||
|
renderRecentUploadsPanel();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1061,17 +1043,18 @@ async function loadHistory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderHistoryTable(container);
|
renderHistoryTable(container);
|
||||||
|
renderRecentUploadsPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderRecentUploadsPanel() {
|
function renderRecentUploadsPanel() {
|
||||||
const tbody = document.getElementById('recentFilesBody');
|
const tbody = document.getElementById('recentFilesBody');
|
||||||
if (!tbody) return;
|
if (!tbody) return;
|
||||||
if (!sessionFilesData.length) {
|
if (!historyRowsData.length) {
|
||||||
tbody.innerHTML = '<tr><td colspan="4" class="empty-state">Noch keine Uploads in dieser Session.</td></tr>';
|
tbody.innerHTML = '<tr><td colspan="4" class="empty-state">Noch keine Uploads.</td></tr>';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const rows = sessionFilesData
|
const rows = historyRowsData
|
||||||
.slice()
|
.slice()
|
||||||
.sort((a, b) => b.dateTs - a.dateTs || b.order - a.order)
|
.sort((a, b) => b.dateTs - a.dateTs || b.order - a.order)
|
||||||
.slice(0, 20);
|
.slice(0, 20);
|
||||||
@ -1165,6 +1148,15 @@ function setupListeners() {
|
|||||||
queueJobs.forEach(j => { if (j.status === 'error') selectedJobIds.add(j.id); });
|
queueJobs.forEach(j => { if (j.status === 'error') selectedJobIds.add(j.id); });
|
||||||
retrySelectedJobs();
|
retrySelectedJobs();
|
||||||
});
|
});
|
||||||
|
document.getElementById('clearQueueBtn').addEventListener('click', () => {
|
||||||
|
if (!uploading) {
|
||||||
|
queueJobs = [];
|
||||||
|
selectedFiles = [];
|
||||||
|
selectedJobIds.clear();
|
||||||
|
updateUploadView();
|
||||||
|
clearPersistedQueueStateSoon();
|
||||||
|
}
|
||||||
|
});
|
||||||
document.getElementById('confirmHosterModalBtn').addEventListener('click', applyHosterSelection);
|
document.getElementById('confirmHosterModalBtn').addEventListener('click', applyHosterSelection);
|
||||||
document.getElementById('cancelHosterModalBtn').addEventListener('click', closeHosterModal);
|
document.getElementById('cancelHosterModalBtn').addEventListener('click', closeHosterModal);
|
||||||
document.getElementById('closeHosterModalBtn').addEventListener('click', closeHosterModal);
|
document.getElementById('closeHosterModalBtn').addEventListener('click', closeHosterModal);
|
||||||
|
|||||||
@ -76,6 +76,7 @@
|
|||||||
<div class="queue-actions" id="queueActions" style="display:none">
|
<div class="queue-actions" id="queueActions" style="display:none">
|
||||||
<button class="btn btn-xs btn-primary" id="copyAllLinksBtn">Alle Links kopieren</button>
|
<button class="btn btn-xs btn-primary" id="copyAllLinksBtn">Alle Links kopieren</button>
|
||||||
<button class="btn btn-xs btn-secondary" id="retryFailedBtn" style="display:none">Fehlgeschlagene erneut</button>
|
<button class="btn btn-xs btn-secondary" id="retryFailedBtn" style="display:none">Fehlgeschlagene erneut</button>
|
||||||
|
<button class="btn btn-xs btn-secondary" id="clearQueueBtn">Queue leeren</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="recent-files-panel" id="recentFilesPanel">
|
<div class="recent-files-panel" id="recentFilesPanel">
|
||||||
@ -130,6 +131,7 @@
|
|||||||
<div class="ctx-item" data-action="delete-selected">Entfernen</div>
|
<div class="ctx-item" data-action="delete-selected">Entfernen</div>
|
||||||
<div class="ctx-separator"></div>
|
<div class="ctx-separator"></div>
|
||||||
<div class="ctx-item" data-action="copy-all-links">Alle Links kopieren</div>
|
<div class="ctx-item" data-action="copy-all-links">Alle Links kopieren</div>
|
||||||
|
<div class="ctx-item" data-action="delete-all">Alle entfernen</div>
|
||||||
<div class="ctx-separator"></div>
|
<div class="ctx-separator"></div>
|
||||||
<div class="ctx-item ctx-submenu" data-action="shutdown">
|
<div class="ctx-item ctx-submenu" data-action="shutdown">
|
||||||
Shutdown nach Finish
|
Shutdown nach Finish
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user