Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion app/lib/frontend/templates/views/pkg/score_tab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:_pub_shared/format/number_format.dart';
import 'package:pana/models.dart';
import 'package:pub_dev/shared/popularity_storage.dart';

import '../../../../scorecard/models.dart' hide ReportStatus;
import '../../../../shared/urls.dart' as urls;
import '../../../dom/dom.dart' as d;
import '../../../request_context.dart';
import '../../../static_files.dart';
import '../../package_misc.dart' show formatScore;

Expand Down Expand Up @@ -39,7 +41,9 @@ d.Node scoreTabNode({
children: [
_likeKeyFigureNode(likeCount),
_pubPointsKeyFigureNode(report, showPending),
_popularityKeyFigureNode(card.popularityScore),
requestContext.experimentalFlags.showDownloadCounts
? _downloadCountsKeyFigureNode(card.thirtyDaysDownloadCounts)
: _popularityKeyFigureNode(card.popularityScore),
],
),
if (showPending)
Expand Down Expand Up @@ -266,6 +270,21 @@ d.Node _popularityKeyFigureNode(double? popularity) {
);
}

d.Node _downloadCountsKeyFigureNode(int? downloadCounts) {
if (downloadCounts == null) {
return _keyFigureNode(
value: '--',
supplemental: '',
label: 'downloads',
);
}
return _keyFigureNode(
value: formatWith3SignificantDigits(downloadCounts).value,
supplemental: formatWith3SignificantDigits(downloadCounts).suffix,
label: 'downloads',
);
}

d.Node _pubPointsKeyFigureNode(Report? report, bool showPending) {
if (report == null) {
return _keyFigureNode(
Expand Down
2 changes: 1 addition & 1 deletion app/lib/package/models.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1196,7 +1196,7 @@ class PackagePageData {
scoreCard: scoreCard,
popularity: popularityStorage.lookupAsScore(package.name!),
thirtyDaysDownloadCounts:
downloadCountsBackend.lookup30DayTotalCounts(package.name!),
downloadCountsBackend.lookup30DaysTotalCounts(package.name!),
);
}
}
Expand Down
2 changes: 1 addition & 1 deletion app/lib/scorecard/backend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class ScoreCardBackend {
scoreCard: card,
popularity: popularityStorage.lookupAsScore(package),
thirtyDaysDownloadCounts:
downloadCountsBackend.lookup30DayTotalCounts(package),
downloadCountsBackend.lookup30DaysTotalCounts(package),
);
});
}
Expand Down
4 changes: 4 additions & 0 deletions app/lib/scorecard/models.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'dart:io';
import 'package:_pub_shared/search/tags.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:pana/models.dart';
import 'package:pub_dev/service/download_counts/backend.dart';
import 'package:pub_dev/task/models.dart';

import '../scorecard/backend.dart';
Expand Down Expand Up @@ -70,6 +71,9 @@ class ScoreCardData {

// TODO: refactor code to use popularityStorage directly.
double get popularityScore => popularityStorage.lookup(packageName!);

int? get thirtyDaysDownloadCounts =>
downloadCountsBackend.lookup30DaysTotalCounts(packageName!);
}

@JsonSerializable(includeIfNull: false)
Expand Down
2 changes: 1 addition & 1 deletion app/lib/service/download_counts/backend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class DownloadCountsBackend {
await _thirtyDaysTotals.close();
}

int? lookup30DayTotalCounts(String package) =>
int? lookup30DaysTotalCounts(String package) =>
_thirtyDaysTotals.isAvailable ? _thirtyDaysTotals.value![package] : null;

Future<CountData?> lookupDownloadCountData(String pkg) async {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,22 +102,22 @@ void main() {

testWithProfile('cache 30-days totals', fn: () async {
await generateFake30DaysTotals({'foo': 70, 'bar': 105, 'baz': 140});
expect(downloadCountsBackend.lookup30DayTotalCounts('foo'), isNull);
expect(downloadCountsBackend.lookup30DayTotalCounts('bar'), isNull);
expect(downloadCountsBackend.lookup30DayTotalCounts('baz'), isNull);
expect(downloadCountsBackend.lookup30DaysTotalCounts('foo'), isNull);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bar'), isNull);
expect(downloadCountsBackend.lookup30DaysTotalCounts('baz'), isNull);

await downloadCountsBackend.start();
expect(downloadCountsBackend.lookup30DayTotalCounts('foo'), 70);
expect(downloadCountsBackend.lookup30DayTotalCounts('bar'), 105);
expect(downloadCountsBackend.lookup30DayTotalCounts('baz'), 140);
expect(downloadCountsBackend.lookup30DayTotalCounts('bax'), isNull);
expect(downloadCountsBackend.lookup30DaysTotalCounts('foo'), 70);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bar'), 105);
expect(downloadCountsBackend.lookup30DaysTotalCounts('baz'), 140);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bax'), isNull);

await generateFake30DaysTotals({'foo': 90, 'bar': 120, 'baz': 150});
await downloadCountsBackend.start();
expect(downloadCountsBackend.lookup30DayTotalCounts('foo'), 90);
expect(downloadCountsBackend.lookup30DayTotalCounts('bar'), 120);
expect(downloadCountsBackend.lookup30DayTotalCounts('baz'), 150);
expect(downloadCountsBackend.lookup30DayTotalCounts('bax'), isNull);
expect(downloadCountsBackend.lookup30DaysTotalCounts('foo'), 90);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bar'), 120);
expect(downloadCountsBackend.lookup30DaysTotalCounts('baz'), 150);
expect(downloadCountsBackend.lookup30DaysTotalCounts('bax'), isNull);
});
});
}
Loading