This commit is contained in:
Bark 2025-07-04 23:49:45 +08:00 committed by GitHub
commit 3fb9a6278f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 61 additions and 35 deletions

View file

@ -269,6 +269,7 @@
<li><a href="#FilePrioNormal"><span style="display: inline-block; width: 16px;"></span> QBT_TR(Normal)QBT_TR[CONTEXT=PropListDelegate]</a></li> <li><a href="#FilePrioNormal"><span style="display: inline-block; width: 16px;"></span> QBT_TR(Normal)QBT_TR[CONTEXT=PropListDelegate]</a></li>
<li><a href="#FilePrioHigh"><span style="display: inline-block; width: 16px;"></span> QBT_TR(High)QBT_TR[CONTEXT=PropListDelegate]</a></li> <li><a href="#FilePrioHigh"><span style="display: inline-block; width: 16px;"></span> QBT_TR(High)QBT_TR[CONTEXT=PropListDelegate]</a></li>
<li><a href="#FilePrioMaximum"><span style="display: inline-block; width: 16px;"></span> QBT_TR(Maximum)QBT_TR[CONTEXT=PropListDelegate]</a></li> <li><a href="#FilePrioMaximum"><span style="display: inline-block; width: 16px;"></span> QBT_TR(Maximum)QBT_TR[CONTEXT=PropListDelegate]</a></li>
<li><a href="#FilePrioByShownOrder"><span style="display: inline-block; width: 16px;"></span> QBT_TR(By shown file order)QBT_TR[CONTEXT=PropListDelegate]</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>

View file

@ -3034,14 +3034,6 @@ window.qBittorrent.DynamicTable ??= (() => {
return rows; return rows;
} }
setIgnored(rowId, ignore) {
const row = this.rows.get(rowId.toString());
if (ignore)
row.full_data.remaining = 0;
else
row.full_data.remaining = (row.full_data.size * (1.0 - (row.full_data.progress / 100)));
}
setupCommonEvents() { setupCommonEvents() {
super.setupCommonEvents(); super.setupCommonEvents();
this.dynamicTableDiv.addEventListener("keydown", (e) => { this.dynamicTableDiv.addEventListener("keydown", (e) => {

View file

@ -47,6 +47,7 @@ window.qBittorrent.PropFiles ??= (() => {
const TriState = window.qBittorrent.FileTree.TriState; const TriState = window.qBittorrent.FileTree.TriState;
let is_seed = true; let is_seed = true;
let current_hash = ""; let current_hash = "";
const BY_SHOWN_ORDER = -2;
const normalizePriority = (priority) => { const normalizePriority = (priority) => {
switch (priority) { switch (priority) {
@ -105,7 +106,7 @@ window.qBittorrent.PropFiles ??= (() => {
const rows = getAllChildren(id, fileId); const rows = getAllChildren(id, fileId);
setFilePriority(rows.rowIds, rows.fileIds, priority); setFilePriority(rows.fileIds, priority);
updateGlobalCheckbox(); updateGlobalCheckbox();
}; };
@ -117,7 +118,7 @@ window.qBittorrent.PropFiles ??= (() => {
const rows = getAllChildren(id, fileId); const rows = getAllChildren(id, fileId);
setFilePriority(rows.rowIds, rows.fileIds, priority); setFilePriority(rows.fileIds, priority);
updateGlobalCheckbox(); updateGlobalCheckbox();
}; };
@ -241,7 +242,7 @@ window.qBittorrent.PropFiles ??= (() => {
} }
if (rowIds.length > 0) if (rowIds.length > 0)
setFilePriority(rowIds, fileIds, priority); setFilePriority(fileIds, priority);
}; };
const updateGlobalCheckbox = () => { const updateGlobalCheckbox = () => {
@ -271,7 +272,7 @@ window.qBittorrent.PropFiles ??= (() => {
checkbox.indeterminate = true; checkbox.indeterminate = true;
}; };
const setFilePriority = (ids, fileIds, priority) => { const setFilePriority = (fileIds, priority) => {
if (current_hash === "") if (current_hash === "")
return; return;
@ -292,15 +293,6 @@ window.qBittorrent.PropFiles ??= (() => {
loadTorrentFilesDataTimer = loadTorrentFilesData.delay(1000); loadTorrentFilesDataTimer = loadTorrentFilesData.delay(1000);
}); });
const ignore = (priority === FilePriority.Ignored);
ids.forEach((id) => {
torrentFilesTable.setIgnored(id, ignore);
const combobox = document.getElementById(`comboPrio${id}`);
if (combobox !== null)
selectComboboxPriority(combobox, priority);
});
}; };
let loadTorrentFilesDataTimer = -1; let loadTorrentFilesDataTimer = -1;
@ -459,26 +451,64 @@ window.qBittorrent.PropFiles ??= (() => {
if (selectedRows.length === 0) if (selectedRows.length === 0)
return; return;
const rowIds = [];
const fileIds = []; const fileIds = [];
const fillInChildren = (rowId, fileId) => {
const children = getAllChildren(rowId, fileId);
children.fileIds.forEach((childFileId, index) => {
if (fileId === -1) {
fillInChildren(children.rowIds[index], childFileId);
return;
}
if (!fileIds.includes(childFileId))
fileIds.push(childFileId);
});
};
selectedRows.forEach((rowId) => { selectedRows.forEach((rowId) => {
rowIds.push(rowId); const fileId = torrentFilesTable.getRowFileId(rowId);
fileIds.push(torrentFilesTable.getRowFileId(rowId)); if (fileId !== -1)
fileIds.push(fileId);
fillInChildren(rowId, fileId);
}); });
const uniqueRowIds = {}; // Will be used both in general case and ByShownOrder case
const uniqueFileIds = {}; const priorityList = {};
for (let i = 0; i < rowIds.length; ++i) { Object.values(FilePriority).forEach((p) => {
const rows = getAllChildren(rowIds[i], fileIds[i]); priorityList[p] = [];
rows.rowIds.forEach((rowId) => { });
uniqueRowIds[rowId] = true; const groupsNum = 3;
}); const priorityGroupSize = Math.max(Math.floor(fileIds.length / groupsNum), 1);
rows.fileIds.forEach((fileId) => {
uniqueFileIds[fileId] = true; // Will be altered only if we select ByShownOrder, use whatever is passed otherwise
}); let priorityGroup = priority;
let fileId = 0;
for (let i = 0; i < fileIds.length; ++i) {
fileId = fileIds[i];
if (priority === BY_SHOWN_ORDER) {
switch (Math.floor(i / priorityGroupSize)) {
case 0:
priorityGroup = FilePriority.Maximum;
break;
case 1:
priorityGroup = FilePriority.High;
break;
default:
case 2:
priorityGroup = FilePriority.Normal;
break;
}
}
priorityList[priorityGroup].push(fileId);
} }
setFilePriority(Object.keys(uniqueRowIds), Object.keys(uniqueFileIds), priority); Object.entries(priorityList).forEach(([groupPriority, groupedFiles]) => {
if (groupedFiles.length === 0)
return;
setFilePriority(
groupedFiles,
groupPriority
);
});
}; };
const singleFileRename = (hash) => { const singleFileRename = (hash) => {
@ -553,6 +583,9 @@ window.qBittorrent.PropFiles ??= (() => {
}, },
FilePrioMaximum: (element, ref) => { FilePrioMaximum: (element, ref) => {
filesPriorityMenuClicked(FilePriority.Maximum); filesPriorityMenuClicked(FilePriority.Maximum);
},
FilePrioByShownOrder: (element, ref) => {
filesPriorityMenuClicked(BY_SHOWN_ORDER);
} }
}, },
offsets: { offsets: {