Files
flood/server/services/Transmission/util/torrentPropertiesUtil.ts
2024-08-13 22:31:39 +00:00

56 lines
1.7 KiB
TypeScript

import type {TorrentProperties} from '../../../../shared/types/Torrent';
import type {TransmissionTorrentProperties} from '../types/TransmissionTorrentsMethods';
import {TransmissionTorrentError, TransmissionTorrentStatus} from '../types/TransmissionTorrentsMethods';
const getTorrentStatus = (
properties: Pick<
TransmissionTorrentProperties,
'error' | 'status' | 'rateDownload' | 'rateUpload' | 'haveValid' | 'totalSize'
>,
): TorrentProperties['status'] => {
const {error, status, rateDownload, rateUpload, haveValid, totalSize} = properties;
const statuses: TorrentProperties['status'] = [];
switch (status) {
case TransmissionTorrentStatus.TR_STATUS_CHECK:
case TransmissionTorrentStatus.TR_STATUS_CHECK_WAIT:
statuses.push('checking');
break;
case TransmissionTorrentStatus.TR_STATUS_DOWNLOAD:
case TransmissionTorrentStatus.TR_STATUS_DOWNLOAD_WAIT:
statuses.push('downloading');
if (rateDownload > 0) {
statuses.push('active');
} else {
statuses.push('inactive');
}
break;
case TransmissionTorrentStatus.TR_STATUS_SEED:
case TransmissionTorrentStatus.TR_STATUS_SEED_WAIT:
statuses.push('seeding');
if (rateUpload > 0) {
statuses.push('active');
} else {
statuses.push('inactive');
}
break;
case TransmissionTorrentStatus.TR_STATUS_STOPPED:
statuses.push('stopped', 'inactive');
break;
default:
break;
}
if (error !== TransmissionTorrentError.TR_STAT_OK) {
statuses.push('error');
}
if (haveValid === totalSize) {
statuses.push('complete');
}
return statuses;
};
export default {getTorrentStatus};