Skip to content

Commit 4661abe

Browse files
committed
WebAPI: require complete stats object
1 parent d6fab3d commit 4661abe

3 files changed

Lines changed: 25 additions & 35 deletions

File tree

src/base/bittorrent/addtorrentparams.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,16 @@ namespace BitTorrent
5050
// Optional lifetime stats to seed on torrent add
5151
struct InitialTorrentStats
5252
{
53-
std::optional<qint64> totalUploaded;
54-
std::optional<qint64> totalDownloaded;
55-
std::optional<qint64> addedTime; // posix seconds
56-
std::optional<qint64> completedTime; // posix seconds
57-
std::optional<qint64> lastSeenComplete; // posix seconds
58-
std::optional<qint64> lastUpload; // posix seconds
59-
std::optional<qint64> lastDownload; // posix seconds
60-
std::optional<int> activeTime; // seconds
61-
std::optional<int> finishedTime; // seconds
62-
std::optional<int> seedingTime; // seconds
53+
qint64 totalUploaded = 0;
54+
qint64 totalDownloaded = 0;
55+
qint64 addedTime = 0; // posix seconds
56+
qint64 completedTime = 0; // posix seconds
57+
qint64 lastSeenComplete = 0; // posix seconds
58+
qint64 lastUpload = 0; // posix seconds
59+
qint64 lastDownload = 0; // posix seconds
60+
int activeTime = 0; // seconds
61+
int finishedTime = 0; // seconds
62+
int seedingTime = 0; // seconds
6363

6464
friend bool operator==(const InitialTorrentStats &lhs, const InitialTorrentStats &rhs) = default;
6565
};

src/base/bittorrent/sessionimpl.cpp

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2957,26 +2957,16 @@ bool SessionImpl::addTorrent_impl(const TorrentDescriptor &source, const AddTorr
29572957
if (addTorrentParams.initialStats)
29582958
{
29592959
const InitialTorrentStats &s = *addTorrentParams.initialStats;
2960-
if (s.totalUploaded)
2961-
p.total_uploaded = *s.totalUploaded;
2962-
if (s.totalDownloaded)
2963-
p.total_downloaded = *s.totalDownloaded;
2964-
if (s.addedTime)
2965-
p.added_time = static_cast<std::time_t>(*s.addedTime);
2966-
if (s.completedTime)
2967-
p.completed_time = static_cast<std::time_t>(*s.completedTime);
2968-
if (s.lastSeenComplete)
2969-
p.last_seen_complete = static_cast<std::time_t>(*s.lastSeenComplete);
2970-
if (s.lastUpload)
2971-
p.last_upload = static_cast<std::time_t>(*s.lastUpload);
2972-
if (s.lastDownload)
2973-
p.last_download = static_cast<std::time_t>(*s.lastDownload);
2974-
if (s.activeTime)
2975-
p.active_time = *s.activeTime;
2976-
if (s.finishedTime)
2977-
p.finished_time = *s.finishedTime;
2978-
if (s.seedingTime)
2979-
p.seeding_time = *s.seedingTime;
2960+
p.total_uploaded = s.totalUploaded;
2961+
p.total_downloaded = s.totalDownloaded;
2962+
p.added_time = static_cast<std::time_t>(s.addedTime);
2963+
p.completed_time = static_cast<std::time_t>(s.completedTime);
2964+
p.last_seen_complete = static_cast<std::time_t>(s.lastSeenComplete);
2965+
p.last_upload = static_cast<std::time_t>(s.lastUpload);
2966+
p.last_download = static_cast<std::time_t>(s.lastDownload);
2967+
p.active_time = s.activeTime;
2968+
p.finished_time = s.finishedTime;
2969+
p.seeding_time = s.seedingTime;
29802970
}
29812971

29822972
// Limits

src/webui/api/torrentscontroller.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,23 +1095,23 @@ namespace
10951095
throw APIError(APIErrorType::BadParams, u"`stats` must be a JSON object"_s);
10961096

10971097
const QJsonObject obj = doc.object();
1098-
BitTorrent::InitialTorrentStats stats;
10991098

1100-
const auto readInt64 = [&obj](const QString &key) -> std::optional<qint64>
1099+
const auto readInt64 = [&obj](const QString &key) -> qint64
11011100
{
11021101
const QJsonValue v = obj.value(key);
11031102
if (v.isUndefined() || v.isNull())
1104-
return std::nullopt;
1103+
throw APIError(APIErrorType::BadParams, u"`stats.%1` is required"_s.arg(key));
11051104
return v.toVariant().toLongLong();
11061105
};
1107-
const auto readInt = [&obj](const QString &key) -> std::optional<int>
1106+
const auto readInt = [&obj](const QString &key) -> int
11081107
{
11091108
const QJsonValue v = obj.value(key);
11101109
if (v.isUndefined() || v.isNull())
1111-
return std::nullopt;
1110+
throw APIError(APIErrorType::BadParams, u"`stats.%1` is required"_s.arg(key));
11121111
return v.toVariant().toInt();
11131112
};
11141113

1114+
BitTorrent::InitialTorrentStats stats;
11151115
stats.totalUploaded = readInt64(u"total_uploaded"_s);
11161116
stats.totalDownloaded = readInt64(u"total_downloaded"_s);
11171117
stats.addedTime = readInt64(u"added_time"_s);

0 commit comments

Comments
 (0)