mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-21 05:43:32 -07:00
Merge 35b94986b3
into b7a43ea118
This commit is contained in:
commit
3fb9a6278f
3 changed files with 61 additions and 35 deletions
|
@ -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="#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="#FilePrioByShownOrder"><span style="display: inline-block; width: 16px;"></span> QBT_TR(By shown file order)QBT_TR[CONTEXT=PropListDelegate]</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -3034,14 +3034,6 @@ window.qBittorrent.DynamicTable ??= (() => {
|
|||
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() {
|
||||
super.setupCommonEvents();
|
||||
this.dynamicTableDiv.addEventListener("keydown", (e) => {
|
||||
|
|
|
@ -47,6 +47,7 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
const TriState = window.qBittorrent.FileTree.TriState;
|
||||
let is_seed = true;
|
||||
let current_hash = "";
|
||||
const BY_SHOWN_ORDER = -2;
|
||||
|
||||
const normalizePriority = (priority) => {
|
||||
switch (priority) {
|
||||
|
@ -105,7 +106,7 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
|
||||
const rows = getAllChildren(id, fileId);
|
||||
|
||||
setFilePriority(rows.rowIds, rows.fileIds, priority);
|
||||
setFilePriority(rows.fileIds, priority);
|
||||
updateGlobalCheckbox();
|
||||
};
|
||||
|
||||
|
@ -117,7 +118,7 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
|
||||
const rows = getAllChildren(id, fileId);
|
||||
|
||||
setFilePriority(rows.rowIds, rows.fileIds, priority);
|
||||
setFilePriority(rows.fileIds, priority);
|
||||
updateGlobalCheckbox();
|
||||
};
|
||||
|
||||
|
@ -241,7 +242,7 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
}
|
||||
|
||||
if (rowIds.length > 0)
|
||||
setFilePriority(rowIds, fileIds, priority);
|
||||
setFilePriority(fileIds, priority);
|
||||
};
|
||||
|
||||
const updateGlobalCheckbox = () => {
|
||||
|
@ -271,7 +272,7 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
checkbox.indeterminate = true;
|
||||
};
|
||||
|
||||
const setFilePriority = (ids, fileIds, priority) => {
|
||||
const setFilePriority = (fileIds, priority) => {
|
||||
if (current_hash === "")
|
||||
return;
|
||||
|
||||
|
@ -292,15 +293,6 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
|
||||
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;
|
||||
|
@ -459,26 +451,64 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
if (selectedRows.length === 0)
|
||||
return;
|
||||
|
||||
const rowIds = [];
|
||||
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) => {
|
||||
rowIds.push(rowId);
|
||||
fileIds.push(torrentFilesTable.getRowFileId(rowId));
|
||||
const fileId = torrentFilesTable.getRowFileId(rowId);
|
||||
if (fileId !== -1)
|
||||
fileIds.push(fileId);
|
||||
fillInChildren(rowId, fileId);
|
||||
});
|
||||
|
||||
const uniqueRowIds = {};
|
||||
const uniqueFileIds = {};
|
||||
for (let i = 0; i < rowIds.length; ++i) {
|
||||
const rows = getAllChildren(rowIds[i], fileIds[i]);
|
||||
rows.rowIds.forEach((rowId) => {
|
||||
uniqueRowIds[rowId] = true;
|
||||
});
|
||||
rows.fileIds.forEach((fileId) => {
|
||||
uniqueFileIds[fileId] = true;
|
||||
});
|
||||
// Will be used both in general case and ByShownOrder case
|
||||
const priorityList = {};
|
||||
Object.values(FilePriority).forEach((p) => {
|
||||
priorityList[p] = [];
|
||||
});
|
||||
const groupsNum = 3;
|
||||
const priorityGroupSize = Math.max(Math.floor(fileIds.length / groupsNum), 1);
|
||||
|
||||
// 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) => {
|
||||
|
@ -553,6 +583,9 @@ window.qBittorrent.PropFiles ??= (() => {
|
|||
},
|
||||
FilePrioMaximum: (element, ref) => {
|
||||
filesPriorityMenuClicked(FilePriority.Maximum);
|
||||
},
|
||||
FilePrioByShownOrder: (element, ref) => {
|
||||
filesPriorityMenuClicked(BY_SHOWN_ORDER);
|
||||
}
|
||||
},
|
||||
offsets: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue