diff --git a/src/components/TorrentDetail/Tabs/Info.vue b/src/components/TorrentDetail/Tabs/Info.vue index f08c224d..e41cdec2 100644 --- a/src/components/TorrentDetail/Tabs/Info.vue +++ b/src/components/TorrentDetail/Tabs/Info.vue @@ -27,6 +27,14 @@ {{ torrent.eta }} </td> </tr> + <tr id="torrentLastActivity"> + <td :class="commonStyle"> + {{ $t('torrent.properties.last_activity') }} + </td> + <td> + {{ torrent.last_activity }} + </td> + </tr> <tr id="torrentPeers"> <td :class="commonStyle"> {{ $t('modals.detail.pageInfo.peers') }} @@ -200,7 +208,6 @@ export default defineComponent({ }, async mounted() { await this.getTorrentProperties() - await this.renderTorrentPieceStates() }, computed: { ...mapState(['webuiSettings']), @@ -214,11 +221,6 @@ export default defineComponent({ return this.torrent?.state ? this.torrent.state.toLowerCase() : '' } }, - watch: { - torrent() { - this.renderTorrentPieceStates() - } - }, methods: { async getTorrentProperties() { const props = await qbit.getTorrentProperties(this.torrent?.hash as string) @@ -229,64 +231,6 @@ export default defineComponent({ this.isPrivateTorrent = props.is_private this.wastedSize = props.total_wasted }, - async renderTorrentPieceStates() { - const canvas: HTMLCanvasElement | null = document.querySelector('#pieceStates canvas') - if (canvas === null) return - - const files = await qbit.getTorrentFiles(this.torrent?.hash as string) - const pieces = await qbit.getTorrentPieceStates(this.torrent?.hash as string) - if (!pieces) return - - // Source: https://github.com/qbittorrent/qBittorrent/blob/6229b817300344759139d2fedbd59651065a561d/src/webui/www/private/scripts/prop-general.js#L230 - canvas.width = pieces.length - const ctx = canvas.getContext('2d') as CanvasRenderingContext2D - ctx.clearRect(0, 0, canvas.width, canvas.height) - - // Group contiguous colors together and draw as a single rectangle - let color = '' - let rectWidth = 1 - - for (let i = 0; i < pieces.length; ++i) { - const status = pieces[i] - let newColor = '' - - if (status === 1) - // requested / downloading - newColor = this.$vuetify.theme.currentTheme['torrent-downloading'] as string - else if (status === 2) - // already downloaded - newColor = this.$vuetify.theme.currentTheme['torrent-done'] as string - else { - // pending download - const selected_piece_ranges = files.filter(file => file.priority !== 0).map(file => file.piece_range) - for (const [min_piece_range, max_piece_range] of selected_piece_ranges) { - if (i > min_piece_range && i < max_piece_range) { - newColor = this.$vuetify.theme.currentTheme['torrent-paused'] as string - break - } - } - } - - if (newColor === color) { - ++rectWidth - continue - } - - if (color !== '') { - ctx.fillStyle = color - ctx.fillRect(i - rectWidth, 0, rectWidth, canvas.height) - } - - rectWidth = 1 - color = newColor - } - - // Fill a rect at the end of the canvas if one is needed - if (color !== '') { - ctx.fillStyle = color - ctx.fillRect(pieces.length - rectWidth, 0, rectWidth, canvas.height) - } - }, stringContainsUrl(string: string) { return stringContainsUrl(string) },