Compare commits
No commits in common. "9b493c7aabb2df8048c2679c34a474563adffafa" and "ad9299e74c4d98bcc9309758144ad6e42b8eabac" have entirely different histories.
9b493c7aab
...
ad9299e74c
26
main.js
26
main.js
@ -845,32 +845,6 @@ ipcMain.handle('import-backup', async (_event, password) => {
|
|||||||
return { ok: true, config: configStore.load() };
|
return { ok: true, config: configStore.load() };
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.handle('import-upload-log', async () => {
|
|
||||||
const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, {
|
|
||||||
title: 'Upload-Log importieren',
|
|
||||||
filters: [
|
|
||||||
{ name: 'Log-Dateien', extensions: ['log', 'txt'] },
|
|
||||||
{ name: 'Alle Dateien', extensions: ['*'] }
|
|
||||||
],
|
|
||||||
properties: ['openFile']
|
|
||||||
});
|
|
||||||
if (canceled || !filePaths.length) return { canceled: true };
|
|
||||||
const content = fs.readFileSync(filePaths[0], 'utf-8');
|
|
||||||
// Parse log format: date|hoster|link||filename|
|
|
||||||
const entries = [];
|
|
||||||
for (const line of content.split('\n')) {
|
|
||||||
const trimmed = line.trim();
|
|
||||||
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
||||||
const parts = trimmed.split('|');
|
|
||||||
if (parts.length >= 5) {
|
|
||||||
const hoster = (parts[1] || '').trim();
|
|
||||||
const fileName = (parts[4] || '').trim();
|
|
||||||
if (hoster && fileName) entries.push({ hoster, fileName });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { entries, path: filePaths[0] };
|
|
||||||
});
|
|
||||||
|
|
||||||
ipcMain.handle('copy-to-clipboard', (_event, text) => {
|
ipcMain.handle('copy-to-clipboard', (_event, text) => {
|
||||||
clipboard.writeText(text);
|
clipboard.writeText(text);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "multi-hoster-uploader",
|
"name": "multi-hoster-uploader",
|
||||||
"version": "2.5.8",
|
"version": "2.5.7",
|
||||||
"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": {
|
||||||
|
|||||||
@ -38,9 +38,6 @@ contextBridge.exposeInMainWorld('api', {
|
|||||||
finishAfterActive: () => ipcRenderer.invoke('finish-after-active'),
|
finishAfterActive: () => ipcRenderer.invoke('finish-after-active'),
|
||||||
runHealthCheck: (payload) => ipcRenderer.invoke('run-health-check', payload),
|
runHealthCheck: (payload) => ipcRenderer.invoke('run-health-check', payload),
|
||||||
|
|
||||||
// Log import
|
|
||||||
importUploadLog: () => ipcRenderer.invoke('import-upload-log'),
|
|
||||||
|
|
||||||
// Clipboard
|
// Clipboard
|
||||||
copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text),
|
copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text),
|
||||||
|
|
||||||
|
|||||||
@ -3098,7 +3098,6 @@ 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('importLogBtn').addEventListener('click', importUploadLog);
|
|
||||||
document.getElementById('confirmHosterModalBtn').addEventListener('click', applyHosterSelection);
|
document.getElementById('confirmHosterModalBtn').addEventListener('click', applyHosterSelection);
|
||||||
document.getElementById('cancelHosterModalBtn').addEventListener('click', cancelHosterModal);
|
document.getElementById('cancelHosterModalBtn').addEventListener('click', cancelHosterModal);
|
||||||
document.getElementById('closeHosterModalBtn').addEventListener('click', cancelHosterModal);
|
document.getElementById('closeHosterModalBtn').addEventListener('click', cancelHosterModal);
|
||||||
@ -3281,47 +3280,6 @@ function handleShutdownCountdown(data) {
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Log import: remove already-uploaded file+hoster combos from queue ---
|
|
||||||
async function importUploadLog() {
|
|
||||||
const result = await window.api.importUploadLog();
|
|
||||||
if (!result || result.canceled) return;
|
|
||||||
const entries = result.entries || [];
|
|
||||||
if (entries.length === 0) {
|
|
||||||
showCopyToast('Keine Einträge im Log gefunden');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build lookup Set: "filename_lower|hoster"
|
|
||||||
const logKeys = new Set();
|
|
||||||
for (const entry of entries) {
|
|
||||||
logKeys.add(`${entry.fileName.toLowerCase()}|${entry.hoster.toLowerCase()}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find queue jobs that match (already uploaded)
|
|
||||||
let removed = 0;
|
|
||||||
queueJobs = queueJobs.filter(job => {
|
|
||||||
const key = `${job.fileName.toLowerCase()}|${job.hoster.toLowerCase()}`;
|
|
||||||
if (logKeys.has(key) && job.status !== 'done') {
|
|
||||||
removeJobFromIndex(job);
|
|
||||||
removed++;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (removed > 0) {
|
|
||||||
selectedJobIds.clear();
|
|
||||||
syncSelectedFilesFromQueue();
|
|
||||||
rebuildJobIndex();
|
|
||||||
renderQueueTable();
|
|
||||||
updateUploadView();
|
|
||||||
updateStatusBar();
|
|
||||||
persistQueueStateSoon(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
showCopyToast(`${removed} bereits hochgeladene Jobs aus Queue entfernt (${entries.length} Log-Einträge gelesen)`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Link operations ---
|
// --- Link operations ---
|
||||||
function copyAllLinks() {
|
function copyAllLinks() {
|
||||||
const links = queueJobs
|
const links = queueJobs
|
||||||
|
|||||||
@ -94,7 +94,6 @@
|
|||||||
<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="importLogBtn" title="Log importieren — bereits hochgeladene aus Queue entfernen">Log importieren</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="resize-handle" id="recentFilesResizer"></div>
|
<div class="resize-handle" id="recentFilesResizer"></div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user