Compare commits
No commits in common. "9ea92126372a7e6e029d669858cb1a9c4f23a1e9" and "ccfb7c18bad000d7fb9b7669d26254cf226f6d9b" have entirely different histories.
9ea9212637
...
ccfb7c18ba
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-hoster-uploader",
|
"name": "multi-hoster-uploader",
|
||||||
"version": "2.2.2",
|
"version": "2.2.1",
|
||||||
"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": {
|
||||||
|
|||||||
@ -1019,25 +1019,6 @@ function showContextMenu(x, y) {
|
|||||||
cancelSep.style.display = 'none';
|
cancelSep.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dynamic "delete by hoster" submenu
|
|
||||||
const deleteHosterSubmenu = menu.querySelector('.ctx-hoster-delete-submenu');
|
|
||||||
const deleteHosterContainer = menu.querySelector('.ctx-hoster-delete-items');
|
|
||||||
const hosterCounts = new Map();
|
|
||||||
queueJobs.forEach(j => hosterCounts.set(j.hoster, (hosterCounts.get(j.hoster) || 0) + 1));
|
|
||||||
deleteHosterContainer.innerHTML = '';
|
|
||||||
if (hosterCounts.size > 0) {
|
|
||||||
deleteHosterSubmenu.style.display = '';
|
|
||||||
hosterCounts.forEach((count, hoster) => {
|
|
||||||
const item = document.createElement('div');
|
|
||||||
item.className = 'ctx-item ctx-item-danger';
|
|
||||||
item.dataset.action = `delete-hoster:${hoster}`;
|
|
||||||
item.textContent = `${getHosterLabel(hoster)} (${count})`;
|
|
||||||
deleteHosterContainer.appendChild(item);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
deleteHosterSubmenu.style.display = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
menu.style.display = 'block';
|
menu.style.display = 'block';
|
||||||
const menuX = Math.min(x, window.innerWidth - menu.offsetWidth - 5);
|
const menuX = Math.min(x, window.innerWidth - menu.offsetWidth - 5);
|
||||||
menu.style.left = menuX + 'px';
|
menu.style.left = menuX + 'px';
|
||||||
@ -1045,12 +1026,7 @@ function showContextMenu(x, y) {
|
|||||||
|
|
||||||
// Flip submenus if they would overflow the viewport right edge
|
// Flip submenus if they would overflow the viewport right edge
|
||||||
menu.querySelectorAll('.ctx-submenu-items').forEach(sub => {
|
menu.querySelectorAll('.ctx-submenu-items').forEach(sub => {
|
||||||
// Temporarily show to measure actual width (display:none → offsetWidth=0)
|
|
||||||
sub.style.visibility = 'hidden';
|
|
||||||
sub.style.display = 'block';
|
|
||||||
sub.classList.toggle('flip-left', menuX + menu.offsetWidth + sub.offsetWidth > window.innerWidth);
|
sub.classList.toggle('flip-left', menuX + menu.offsetWidth + sub.offsetWidth > window.innerWidth);
|
||||||
sub.style.display = '';
|
|
||||||
sub.style.visibility = '';
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1276,25 +1252,6 @@ async function handleContextAction(action) {
|
|||||||
renderQueueTable();
|
renderQueueTable();
|
||||||
updateStatusBar();
|
updateStatusBar();
|
||||||
updateQueueActionButtons();
|
updateQueueActionButtons();
|
||||||
} else if (action.startsWith('delete-hoster:')) {
|
|
||||||
const hoster = action.replace('delete-hoster:', '');
|
|
||||||
// Cancel active uploads for this hoster
|
|
||||||
const activeIds = queueJobs
|
|
||||||
.filter(j => j.hoster === hoster && (j.status === 'uploading' || j.status === 'queued' || j.status === 'retrying' || j.status === 'getting-server' || j.status === 'preview'))
|
|
||||||
.map(j => j.id);
|
|
||||||
if (activeIds.length > 0) await window.api.cancelSelectedJobs(activeIds);
|
|
||||||
// Remove ALL jobs for this hoster
|
|
||||||
queueJobs = queueJobs.filter(j => {
|
|
||||||
if (j.hoster === hoster) { removeJobFromIndex(j); return false; }
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
selectedJobIds.clear();
|
|
||||||
syncSelectedFilesFromQueue();
|
|
||||||
renderQueueTable();
|
|
||||||
if (queueJobs.length === 0) { selectedFiles = []; updateUploadView(); }
|
|
||||||
updateStatusBar();
|
|
||||||
updateQueueActionButtons();
|
|
||||||
persistQueueStateSoon(true);
|
|
||||||
} else if (action.startsWith('shutdown-')) {
|
} else if (action.startsWith('shutdown-')) {
|
||||||
const mode = action.replace('shutdown-', '');
|
const mode = action.replace('shutdown-', '');
|
||||||
await window.api.setShutdownAfterFinish(mode);
|
await window.api.setShutdownAfterFinish(mode);
|
||||||
|
|||||||
@ -265,10 +265,6 @@
|
|||||||
<div class="ctx-separator"></div>
|
<div class="ctx-separator"></div>
|
||||||
<div class="ctx-item" data-action="delete-selected">Entfernen</div>
|
<div class="ctx-item" data-action="delete-selected">Entfernen</div>
|
||||||
<div class="ctx-item" data-action="delete-all">Alle entfernen</div>
|
<div class="ctx-item" data-action="delete-all">Alle entfernen</div>
|
||||||
<div class="ctx-submenu ctx-hoster-delete-submenu" style="display:none">
|
|
||||||
<div class="ctx-item ctx-item-danger">Hoster entfernen ▸</div>
|
|
||||||
<div class="ctx-submenu-items ctx-hoster-delete-items"></div>
|
|
||||||
</div>
|
|
||||||
<div class="ctx-separator ctx-hoster-cancel-sep" style="display:none"></div>
|
<div class="ctx-separator ctx-hoster-cancel-sep" style="display:none"></div>
|
||||||
<div class="ctx-hoster-cancel-items"></div>
|
<div class="ctx-hoster-cancel-items"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user