Compare commits

...

3 Commits

Author SHA1 Message Date
Hendrik Luup 8d5f404b77
Merge 2ec40cea02 into bd0b74fccb 2024-04-16 00:59:20 +02:00
Hendrik Luup 2ec40cea02 feat(web): add context menu items for sequential downloading 2024-03-10 14:51:38 +02:00
Hendrik Luup d19b534c1d feat(web): show sequential download status in inspector 2024-03-10 14:51:38 +02:00
6 changed files with 53 additions and 0 deletions

View File

@ -12,6 +12,14 @@ export class ActionManager extends EventTarget {
shortcut: 'D',
text: 'Deselect all',
},
'disable-sequential-downloading': {
enabled: true,
text: 'Disable sequential downloading',
},
'enable-sequential-downloading': {
enabled: true,
text: 'Enable sequential downloading',
},
'move-bottom': { enabled: false, text: 'Move to the back of the queue' },
'move-down': { enabled: false, text: 'Move down in the queue' },
'move-top': { enabled: false, text: 'Move to the front of the queue' },

View File

@ -94,6 +94,9 @@ export class ContextMenu extends EventTarget {
add_item('remove-selected-torrents', true);
add_item('trash-selected-torrents', true);
add_separator();
add_item('enable-sequential-downloading');
add_item('disable-sequential-downloading');
add_separator();
add_item('verify-selected-torrents');
add_item('show-move-dialog');
add_item('show-rename-dialog');

View File

@ -91,6 +91,7 @@ export class Inspector extends EventTarget {
['availability', 'Availability:'],
['uploaded', 'Uploaded:'],
['downloaded', 'Downloaded:'],
['sequential_download', 'Sequential download:'],
['state', 'State:'],
['running_time', 'Running time:'],
['remaining_time', 'Remaining:'],
@ -563,6 +564,14 @@ export class Inspector extends EventTarget {
const link = torrents[0].getMagnetLink();
e.info.magnetLink.innerHTML = `<a class="inspector-info-magnet" href="${link}"><button></button></a>`;
}
// Sequential Download
const isSequential = torrents.reduce((acc, cur) => {
cur = cur.isSequentialDownload() ? 'Yes' : 'No';
return acc !== none && acc !== cur ? mixed : cur;
}, none);
setTextContent(e.info.sequential_download, isSequential);
}
/// PEERS PAGE

View File

@ -281,6 +281,21 @@ export class Remote {
});
}
_setSequentialDownload(torrentIds, state, callback) {
const args = {
ids: torrentIds,
sequentialDownload: state,
};
this.sendRequest({ arguments: args, method: 'torrent-set' }, callback);
}
disableSequentialDownload(torrentIds, callback) {
this._setSequentialDownload(torrentIds, false, callback);
}
enableSequentialDownload(torrentIds, callback) {
this._setSequentialDownload(torrentIds, true, callback);
}
// Added queue calls
moveTorrentsToTop(torrent_ids, callback, context) {
this.sendTorrentActionRequests(

View File

@ -255,6 +255,9 @@ export class Torrent extends EventTarget {
isSeeding() {
return this.getStatus() === Torrent._StatusSeed;
}
isSequentialDownload() {
return this.fields.sequentialDownload;
}
isStopped() {
return this.getStatus() === Torrent._StatusStopped;
}
@ -607,6 +610,7 @@ Torrent.Fields.Stats = [
'rateUpload',
'recheckProgress',
'seedRatioMode',
'sequentialDownload',
'seedRatioLimit',
'sizeWhenDone',
'status',

View File

@ -170,6 +170,12 @@ export class Transmission extends EventTarget {
? Prefs.DisplayFull
: Prefs.DisplayCompact;
break;
case 'enable-sequential-downloading':
this._enableSequentialDownload(this.getSelectedTorrents());
break;
case 'disable-sequential-downloading':
this._disableSequentialDownload(this.getSelectedTorrents());
break;
case 'trash-selected-torrents':
this._removeSelectedTorrents(true);
break;
@ -853,6 +859,14 @@ TODO: fix this when notifications get fixed
this,
);
}
_enableSequentialDownload(torrents) {
this.remote.enableSequentialDownload(Transmission._getTorrentIds(torrents));
}
_disableSequentialDownload(torrents) {
this.remote.disableSequentialDownload(
Transmission._getTorrentIds(torrents),
);
}
_verifyTorrents(torrents) {
this.remote.verifyTorrents(
Transmission._getTorrentIds(torrents),