Release v1.6.5
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7446e07a8c
commit
335873a7f6
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "real-debrid-downloader",
|
"name": "real-debrid-downloader",
|
||||||
"version": "1.6.4",
|
"version": "1.6.5",
|
||||||
"description": "Real-Debrid Downloader Desktop (Electron + React + TypeScript)",
|
"description": "Real-Debrid Downloader Desktop (Electron + React + TypeScript)",
|
||||||
"main": "build/main/main/main.js",
|
"main": "build/main/main/main.js",
|
||||||
"author": "Sucukdeluxe",
|
"author": "Sucukdeluxe",
|
||||||
|
|||||||
@ -1474,6 +1474,38 @@ export function App(): ReactElement {
|
|||||||
movePackage(packageId, "down");
|
movePackage(packageId, "down");
|
||||||
}, [movePackage]);
|
}, [movePackage]);
|
||||||
|
|
||||||
|
const moveSelectedPackages = useCallback((direction: "up" | "down") => {
|
||||||
|
const currentOrder = packageOrderRef.current;
|
||||||
|
const selPkgs = new Set([...selectedIds].filter((id) => snapshot.session.packages[id]));
|
||||||
|
if (selPkgs.size === 0) return;
|
||||||
|
const order = [...currentOrder];
|
||||||
|
if (direction === "up") {
|
||||||
|
for (let i = 0; i < order.length; i++) {
|
||||||
|
if (selPkgs.has(order[i]) && i > 0 && !selPkgs.has(order[i - 1])) {
|
||||||
|
[order[i - 1], order[i]] = [order[i], order[i - 1]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (let i = order.length - 1; i >= 0; i--) {
|
||||||
|
if (selPkgs.has(order[i]) && i < order.length - 1 && !selPkgs.has(order[i + 1])) {
|
||||||
|
[order[i], order[i + 1]] = [order[i + 1], order[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const unchanged = order.length === currentOrder.length && order.every((id, idx) => id === currentOrder[idx]);
|
||||||
|
if (unchanged) return;
|
||||||
|
setDownloadsSortDescending(false);
|
||||||
|
pendingPackageOrderRef.current = [...order];
|
||||||
|
pendingPackageOrderAtRef.current = Date.now();
|
||||||
|
packageOrderRef.current = [...order];
|
||||||
|
void window.rd.reorderPackages(order).catch((error) => {
|
||||||
|
pendingPackageOrderRef.current = null;
|
||||||
|
pendingPackageOrderAtRef.current = 0;
|
||||||
|
packageOrderRef.current = serverPackageOrderRef.current;
|
||||||
|
showToast(`Sortierung fehlgeschlagen: ${String(error)}`, 2400);
|
||||||
|
});
|
||||||
|
}, [selectedIds, snapshot.session.packages, showToast]);
|
||||||
|
|
||||||
const onPackageToggle = useCallback((packageId: string): void => {
|
const onPackageToggle = useCallback((packageId: string): void => {
|
||||||
void window.rd.togglePackage(packageId).catch((error) => {
|
void window.rd.togglePackage(packageId).catch((error) => {
|
||||||
showToast(`Paket-Umschalten fehlgeschlagen: ${String(error)}`, 2400);
|
showToast(`Paket-Umschalten fehlgeschlagen: ${String(error)}`, 2400);
|
||||||
@ -2148,6 +2180,23 @@ export function App(): ReactElement {
|
|||||||
>
|
>
|
||||||
<svg viewBox="0 0 24 24" width="18" height="18"><rect x="4" y="4" width="16" height="16" rx="2" fill="currentColor" /></svg>
|
<svg viewBox="0 0 24 24" width="18" height="18"><rect x="4" y="4" width="16" height="16" rx="2" fill="currentColor" /></svg>
|
||||||
</button>
|
</button>
|
||||||
|
<div className="ctrl-separator" />
|
||||||
|
<button
|
||||||
|
className="ctrl-icon-btn ctrl-move"
|
||||||
|
title="Ausgewählte nach oben"
|
||||||
|
disabled={tab !== "downloads" || [...selectedIds].filter((id) => snapshot.session.packages[id]).length === 0}
|
||||||
|
onClick={() => moveSelectedPackages("up")}
|
||||||
|
>
|
||||||
|
<svg viewBox="0 0 24 24" width="16" height="16"><path d="M12 4l-7 7h4.5v9h5v-9H19z" fill="currentColor" /></svg>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
className="ctrl-icon-btn ctrl-move"
|
||||||
|
title="Ausgewählte nach unten"
|
||||||
|
disabled={tab !== "downloads" || [...selectedIds].filter((id) => snapshot.session.packages[id]).length === 0}
|
||||||
|
onClick={() => moveSelectedPackages("down")}
|
||||||
|
>
|
||||||
|
<svg viewBox="0 0 24 24" width="16" height="16"><path d="M12 20l7-7h-4.5V4h-5v9H5z" fill="currentColor" /></svg>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{snapshot.reconnectSeconds > 0 && (
|
{snapshot.reconnectSeconds > 0 && (
|
||||||
<div className="reconnect-badge" style={{ marginLeft: "auto" }}>Reconnect: {snapshot.reconnectSeconds}s</div>
|
<div className="reconnect-badge" style={{ marginLeft: "auto" }}>Reconnect: {snapshot.reconnectSeconds}s</div>
|
||||||
|
|||||||
@ -344,6 +344,15 @@ body,
|
|||||||
background: rgba(244, 63, 94, 0.1);
|
background: rgba(244, 63, 94, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ctrl-icon-btn.ctrl-move:not(:disabled) {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ctrl-icon-btn.ctrl-move:hover:not(:disabled) {
|
||||||
|
border-color: var(--accent);
|
||||||
|
background: color-mix(in srgb, var(--accent) 10%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
.ctrl-icon-btn.ctrl-speed.active {
|
.ctrl-icon-btn.ctrl-speed.active {
|
||||||
color: #f59e0b;
|
color: #f59e0b;
|
||||||
border-color: rgba(245, 158, 11, 0.5);
|
border-color: rgba(245, 158, 11, 0.5);
|
||||||
@ -577,7 +586,7 @@ body,
|
|||||||
|
|
||||||
.pkg-column-header {
|
.pkg-column-header {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 160px 80px 110px 110px 70px 160px 90px;
|
/* grid-template-columns set via inline style from columnOrder */
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding: 5px 12px;
|
padding: 5px 12px;
|
||||||
background: var(--card);
|
background: var(--card);
|
||||||
@ -595,7 +604,8 @@ body,
|
|||||||
.pkg-column-header .pkg-col-account,
|
.pkg-column-header .pkg-col-account,
|
||||||
.pkg-column-header .pkg-col-prio,
|
.pkg-column-header .pkg-col-prio,
|
||||||
.pkg-column-header .pkg-col-status,
|
.pkg-column-header .pkg-col-status,
|
||||||
.pkg-column-header .pkg-col-speed {
|
.pkg-column-header .pkg-col-speed,
|
||||||
|
.pkg-column-header .pkg-col-added {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,7 +623,7 @@ body,
|
|||||||
|
|
||||||
.pkg-columns {
|
.pkg-columns {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 160px 80px 110px 110px 70px 160px 90px;
|
/* grid-template-columns set via inline style from columnOrder */
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
@ -639,7 +649,8 @@ body,
|
|||||||
.pkg-columns .pkg-col-account,
|
.pkg-columns .pkg-col-account,
|
||||||
.pkg-columns .pkg-col-prio,
|
.pkg-columns .pkg-col-prio,
|
||||||
.pkg-columns .pkg-col-status,
|
.pkg-columns .pkg-col-status,
|
||||||
.pkg-columns .pkg-col-speed {
|
.pkg-columns .pkg-col-speed,
|
||||||
|
.pkg-columns .pkg-col-added {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@ -862,7 +873,7 @@ body,
|
|||||||
.status-bar {
|
.status-bar {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 16px;
|
gap: 8px 16px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@ -873,6 +884,16 @@ body,
|
|||||||
margin: 0 -14px -10px;
|
margin: 0 -14px -10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.footer-spacer {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-btn {
|
||||||
|
font-size: 11px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.settings-shell {
|
.settings-shell {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-rows: auto 1fr;
|
||||||
@ -1286,7 +1307,7 @@ td {
|
|||||||
|
|
||||||
.item-row {
|
.item-row {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 160px 80px 110px 110px 70px 160px 90px;
|
/* grid-template-columns set via inline style from columnOrder */
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 0 -12px;
|
margin: 0 -12px;
|
||||||
@ -1348,6 +1369,22 @@ td {
|
|||||||
color: #64748b !important;
|
color: #64748b !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pkg-col-dragging {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pkg-col-drop-target {
|
||||||
|
box-shadow: -2px 0 0 0 var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pkg-column-header .pkg-col {
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pkg-column-header .pkg-col.sortable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.ctx-menu-sub {
|
.ctx-menu-sub {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@ -1378,6 +1415,12 @@ td {
|
|||||||
color: var(--accent) !important;
|
color: var(--accent) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ctx-menu-disabled {
|
||||||
|
opacity: 0.4;
|
||||||
|
cursor: not-allowed !important;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.item-remove {
|
.item-remove {
|
||||||
background: none;
|
background: none;
|
||||||
border: none;
|
border: none;
|
||||||
@ -1807,8 +1850,9 @@ td {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.pkg-columns,
|
.pkg-columns,
|
||||||
.pkg-column-header {
|
.pkg-column-header,
|
||||||
grid-template-columns: 1fr;
|
.item-row {
|
||||||
|
grid-template-columns: 1fr !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pkg-column-header .pkg-col-progress,
|
.pkg-column-header .pkg-col-progress,
|
||||||
@ -1817,7 +1861,8 @@ td {
|
|||||||
.pkg-column-header .pkg-col-account,
|
.pkg-column-header .pkg-col-account,
|
||||||
.pkg-column-header .pkg-col-prio,
|
.pkg-column-header .pkg-col-prio,
|
||||||
.pkg-column-header .pkg-col-status,
|
.pkg-column-header .pkg-col-status,
|
||||||
.pkg-column-header .pkg-col-speed {
|
.pkg-column-header .pkg-col-speed,
|
||||||
|
.pkg-column-header .pkg-col-added {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1827,7 +1872,8 @@ td {
|
|||||||
.pkg-columns .pkg-col-account,
|
.pkg-columns .pkg-col-account,
|
||||||
.pkg-columns .pkg-col-prio,
|
.pkg-columns .pkg-col-prio,
|
||||||
.pkg-columns .pkg-col-status,
|
.pkg-columns .pkg-col-status,
|
||||||
.pkg-columns .pkg-col-speed {
|
.pkg-columns .pkg-col-speed,
|
||||||
|
.pkg-columns .pkg-col-added {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user