diff --git a/typescript-version/package-lock.json b/typescript-version/package-lock.json
index 96f60ee..aefe4d6 100644
--- a/typescript-version/package-lock.json
+++ b/typescript-version/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "twitch-vod-manager",
- "version": "4.1.2",
+ "version": "4.1.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "twitch-vod-manager",
- "version": "4.1.2",
+ "version": "4.1.3",
"license": "MIT",
"dependencies": {
"axios": "^1.6.0",
diff --git a/typescript-version/package.json b/typescript-version/package.json
index 956495e..b048992 100644
--- a/typescript-version/package.json
+++ b/typescript-version/package.json
@@ -1,6 +1,6 @@
{
"name": "twitch-vod-manager",
- "version": "4.1.2",
+ "version": "4.1.3",
"description": "Twitch VOD Manager - Download Twitch VODs easily",
"main": "dist/main.js",
"author": "xRangerDE",
diff --git a/typescript-version/src/index.html b/typescript-version/src/index.html
index d4ad0ff..1ba4aeb 100644
--- a/typescript-version/src/index.html
+++ b/typescript-version/src/index.html
@@ -457,7 +457,7 @@
Updates
-
Version: v4.1.2
+
Version: v4.1.3
@@ -502,7 +502,7 @@
Nicht verbunden
- v4.1.2
+ v4.1.3
diff --git a/typescript-version/src/main.ts b/typescript-version/src/main.ts
index 4ce7924..e8d074e 100644
--- a/typescript-version/src/main.ts
+++ b/typescript-version/src/main.ts
@@ -8,7 +8,7 @@ import { autoUpdater } from 'electron-updater';
// ==========================================
// CONFIG & CONSTANTS
// ==========================================
-const APP_VERSION = '4.1.2';
+const APP_VERSION = '4.1.3';
const UPDATE_CHECK_URL = 'http://24-music.de/version.json';
// Paths
diff --git a/typescript-version/src/renderer-queue.ts b/typescript-version/src/renderer-queue.ts
index 7c37797..b40a103 100644
--- a/typescript-version/src/renderer-queue.ts
+++ b/typescript-version/src/renderer-queue.ts
@@ -18,6 +18,25 @@ function buildQueueFingerprint(url: string, streamer: string, date: string, cust
].join('|');
}
+let lastQueueRenderFingerprint = '';
+
+function getQueueRenderFingerprint(items: QueueItem[]): string {
+ const lang = typeof currentLanguage === 'string' ? currentLanguage : 'en';
+ const pieces = items.map((item) => [
+ item.id,
+ item.status,
+ Math.round((Number(item.progress) || 0) * 10),
+ item.currentPart || 0,
+ item.totalParts || 0,
+ item.speed || '',
+ item.eta || '',
+ item.progressStatus || '',
+ item.last_error || ''
+ ].join(':'));
+
+ return `${lang}|${pieces.join('|')}`;
+}
+
function hasActiveQueueDuplicate(url: string, streamer: string, date: string, customClip?: CustomClip): boolean {
const target = buildQueueFingerprint(url, streamer, date, customClip);
return queue.some((item) => {
@@ -130,7 +149,13 @@ function renderQueue(): void {
const hasFailed = queue.some((item) => item.status === 'error');
retryBtn.disabled = !hasFailed;
+ const renderFingerprint = getQueueRenderFingerprint(queue);
+ if (renderFingerprint === lastQueueRenderFingerprint) {
+ return;
+ }
+
if (queue.length === 0) {
+ lastQueueRenderFingerprint = renderFingerprint;
list.innerHTML = `${UI_TEXT.queue.empty}
`;
return;
}
@@ -165,6 +190,8 @@ function renderQueue(): void {
`;
}).join('');
+
+ lastQueueRenderFingerprint = renderFingerprint;
}
async function toggleDownload(): Promise {
diff --git a/typescript-version/src/styles.css b/typescript-version/src/styles.css
index 344746a..15e56f8 100644
--- a/typescript-version/src/styles.css
+++ b/typescript-version/src/styles.css
@@ -591,7 +591,7 @@ body {
margin-bottom: 6px;
}
-.form-group input, .form-group select {
+.form-group input:not([type="checkbox"]):not([type="radio"]), .form-group select {
width: 100%;
background: var(--bg-main);
border: 1px solid rgba(255,255,255,0.1);
@@ -601,11 +601,16 @@ body {
font-size: 14px;
}
-.form-group input:focus, .form-group select:focus {
+.form-group input:not([type="checkbox"]):not([type="radio"]):focus, .form-group select:focus {
outline: none;
border-color: var(--accent);
}
+.form-group input[type="checkbox"],
+.form-group input[type="radio"] {
+ width: auto;
+}
+
.language-picker {
display: grid;
grid-template-columns: 1fr 1fr;