Browse Source

Refactor code

Add const to variables.
Add Logger message.
Simplify code logic.
adaptive-webui-19844
Chocobo1 7 years ago
parent
commit
da75a010c7
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 70
      src/base/bittorrent/torrenthandle.cpp
  2. 2
      src/base/bittorrent/torrenthandle.h

70
src/base/bittorrent/torrenthandle.cpp

@ -776,28 +776,22 @@ bool TorrentHandle::hasFirstLastPiecePriority() const
if (!hasMetadata()) if (!hasMetadata())
return m_needsToSetFirstLastPiecePriority; return m_needsToSetFirstLastPiecePriority;
// Get int first media file const std::vector<int> filePriorities = nativeHandle().file_priorities();
std::vector<int> fp; for (int i = 0; i < static_cast<int>(filePriorities.size()); ++i) {
fp = m_nativeHandle.file_priorities(); if (filePriorities[i] <= 0)
continue;
TorrentInfo::PieceRange extremities;
bool found = false;
int count = static_cast<int>(fp.size());
for (int i = 0; i < count; ++i) {
const QString ext = Utils::Fs::fileExtension(filePath(i)); const QString ext = Utils::Fs::fileExtension(filePath(i));
if (Utils::Misc::isPreviewable(ext) && (fp[i] > 0)) { if (!Utils::Misc::isPreviewable(ext))
extremities = info().filePieces(i); continue;
found = true;
break;
}
}
if (!found) return false; // No media file
int first = m_nativeHandle.piece_priority(extremities.first()); const TorrentInfo::PieceRange extremities = info().filePieces(i);
int last = m_nativeHandle.piece_priority(extremities.last()); const int firstPiecePrio = nativeHandle().piece_priority(extremities.first());
const int lastPiecePrio = nativeHandle().piece_priority(extremities.last());
return ((firstPiecePrio == 7) && (lastPiecePrio == 7));
}
return ((first == 7) && (last == 7)); return false;
} }
TorrentState TorrentHandle::state() const TorrentState TorrentHandle::state() const
@ -1294,39 +1288,41 @@ void TorrentHandle::toggleSequentialDownload()
setSequentialDownload(!isSequentialDownload()); setSequentialDownload(!isSequentialDownload());
} }
void TorrentHandle::setFirstLastPiecePriority(bool b) void TorrentHandle::setFirstLastPiecePriority(const bool enabled)
{ {
if (!hasMetadata()) { if (!hasMetadata()) {
m_needsToSetFirstLastPiecePriority = b; m_needsToSetFirstLastPiecePriority = enabled;
return; return;
} }
std::vector<int> fp = m_nativeHandle.file_priorities(); // Download first and last pieces first for every file in the torrent
std::vector<int> pp = m_nativeHandle.piece_priorities(); const std::vector<int> filePriorities = nativeHandle().file_priorities();
std::vector<int> piecePriorities = nativeHandle().piece_priorities();
for (int index = 0; index < static_cast<int>(filePriorities.size()); ++index) {
const int filePrio = filePriorities[index];
if (filePrio <= 0)
continue;
// Download first and last pieces first for all media files in the torrent const QString ext = Utils::Fs::fileExtension(filePath(index));
int nbfiles = static_cast<int>(fp.size()); if (!Utils::Misc::isPreviewable(ext))
for (int index = 0; index < nbfiles; ++index) { continue;
const QString path = filePath(index);
const QString ext = Utils::Fs::fileExtension(path);
if (Utils::Misc::isPreviewable(ext) && (fp[index] > 0)) {
qDebug() << "File" << path << "is previewable, toggle downloading of first/last pieces first";
// Determine the priority to set // Determine the priority to set
int prio = b ? 7 : fp[index]; const int newPrio = enabled ? 7 : filePrio;
const TorrentInfo::PieceRange extremities = info().filePieces(index);
TorrentInfo::PieceRange extremities = info().filePieces(index);
// worst case: AVI index = 1% of total file size (at the end of the file) // worst case: AVI index = 1% of total file size (at the end of the file)
int nNumPieces = ceil(fileSize(index) * 0.01 / pieceLength()); const int nNumPieces = std::ceil(fileSize(index) * 0.01 / pieceLength());
for (int i = 0; i < nNumPieces; ++i) { for (int i = 0; i < nNumPieces; ++i) {
pp[extremities.first() + i] = prio; piecePriorities[extremities.first() + i] = newPrio;
pp[extremities.last() - i] = prio; piecePriorities[extremities.last() - i] = newPrio;
}
} }
} }
m_nativeHandle.prioritize_pieces(pp); m_nativeHandle.prioritize_pieces(piecePriorities);
LogMsg(tr("Download first and last piece first: %1, torrent: '%2'")
.arg((enabled ? tr("On") : tr("Off")), name()));
} }
void TorrentHandle::toggleFirstLastPiecePriority() void TorrentHandle::toggleFirstLastPiecePriority()

2
src/base/bittorrent/torrenthandle.h

@ -331,7 +331,7 @@ namespace BitTorrent
void setName(const QString &name); void setName(const QString &name);
void setSequentialDownload(bool b); void setSequentialDownload(bool b);
void toggleSequentialDownload(); void toggleSequentialDownload();
void setFirstLastPiecePriority(bool b); void setFirstLastPiecePriority(bool enabled);
void toggleFirstLastPiecePriority(); void toggleFirstLastPiecePriority();
void pause(); void pause();
void resume(bool forced = false); void resume(bool forced = false);

Loading…
Cancel
Save