Skip to content

Commit

Permalink
Show rank in UI
Browse files Browse the repository at this point in the history
  • Loading branch information
Rexios80 committed Jul 30, 2024
1 parent def7120 commit 4ce04d4
Show file tree
Hide file tree
Showing 9 changed files with 12 additions and 120 deletions.
3 changes: 0 additions & 3 deletions database.rules.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
{
"rules": {
"developer": {
".read": "auth != null"
},
"stats": {
"$package": {
".read": "auth != null"
Expand Down
66 changes: 0 additions & 66 deletions pub_stats/lib/controller/data_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ class DataController {
final loadedStats = <PackageStats>[].rx;
final timeSpan = _defaultTimeSpan.rx;

final loadingDeveloperPackageStats = false.rx;
final developerPackageStats = <PackageStats>[].rx;

DataController._({
required this.globalStats,
required List<PackageCountSnapshot> packageCounts,
Expand Down Expand Up @@ -86,13 +83,6 @@ class DataController {
}

Future<void> _parsePath(String path) async {
if (path == '/developer') {
await fetchDeveloperPackageStats();
return;
}

developerPackageStats.clear();

final match = RegExp(r'\/packages\/(.+)').firstMatch(path);
if (match == null) return;
final pathPackages = match[1]!.split(',').toSet();
Expand Down Expand Up @@ -203,8 +193,6 @@ class DataController {
final stats = await _fetchStatsForUi(package);
if (stats == null) return;

developerPackageStats.clear();

if (clear) loadedStats.clear();
loadedStats.add(stats);

Expand All @@ -219,64 +207,10 @@ class DataController {
_setPathPackages();
}

Future<void> fetchDeveloperPackageStats() async {
if (developerPackageStats.isNotEmpty) {
// Don't fetch if we already have the stats
_logger.d('Already loaded developer stats');
return;
}

_url.setDeveloperPackages();

loadingDeveloperPackageStats.value = true;
try {
final packages = await _pub.getDeveloperPackages();
final packageStatsFutures = packages.map(_fetchStats);
final packageStats = await Future.wait(packageStatsFutures);

// Remove duplicates (there shouldn't be any but there are for some reason)
final distinctPackageStats = {
for (final stats in packageStats) stats.package: stats,
}.values.toList();

distinctPackageStats.sort(_sortStats);

loadedStats.clear();
developerPackageStats.replaceAll(distinctPackageStats);
} catch (e) {
_logger.e(e);
FastOverlays.showSnackBar(
const SnackBar(content: Text('Unable to get developer package stats')),
);
} finally {
loadingDeveloperPackageStats.value = false;
}
}

int _sortStats(PackageStats a, PackageStats b) {
// Sort by popularity first
final popularityComparison = (b.stats.lastOrNull?.popularityScore ?? -1)
.compareTo(a.stats.lastOrNull?.popularityScore ?? -1);
if (popularityComparison != 0) {
return popularityComparison;
}

// Then by like count
final likeComparison = (b.stats.lastOrNull?.likeCount ?? -1)
.compareTo(a.stats.lastOrNull?.likeCount ?? -1);
if (likeComparison != 0) {
return likeComparison;
}

// Then by name
return a.package.compareTo(b.package);
}

/// Reset to show global stats
void reset() {
loading.value = false;
loadedStats.clear();
developerPackageStats.clear();

_url.reset();
}
Expand Down
8 changes: 0 additions & 8 deletions pub_stats/lib/repo/pub_repo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,4 @@ class PubRepo {
final results = await _pub.search(PackageTag.publisher(name));
return results.packages.isNotEmpty;
}

Future<Set<String>> getDeveloperPackages() async {
return {
...await _pub.fetchAllPackages(PackageTag.publisher('rexios.dev')),
...await _pub.fetchAllPackages(PackageTag.publisher('iodesignteam.com')),
...await _pub.fetchAllPackages(PackageTag.publisher('vrchat.community')),
}.map((e) => e.package).toSet();
}
}
4 changes: 0 additions & 4 deletions pub_stats/lib/repo/url_repo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ class UrlRepo {
_url.setPath('/packages/${packages.join(',')}');
}

void setDeveloperPackages() {
_url.setPath('/developer');
}

Uri get uri => _url.uri;

Stream<Uri> get uriStream => _url.uriStream;
Expand Down
8 changes: 0 additions & 8 deletions pub_stats/lib/view/widget/footer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,6 @@ class Footer extends StatelessWidget {
label: 'Built with fast_ui',
onTap: () => launchUrlString(Links.fastUi),
),
FastBuilder(
() => FooterTextLink(
label: 'My package stats',
onTap: _dataController.loadingDeveloperPackageStats.value
? null
: _dataController.fetchDeveloperPackageStats,
),
),
FooterTextLink(
label: 'Licenses',
onTap: () => FastOverlays.showLicensePage(
Expand Down
24 changes: 0 additions & 24 deletions pub_stats/lib/view/widget/stats/developer_package_stats.dart

This file was deleted.

9 changes: 8 additions & 1 deletion pub_stats/lib/view/widget/stats/stats_charts.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:pub_stats/model/package_score_snapshot.dart';
import 'package:pub_stats/model/package_stats.dart';
import 'package:fast_ui/fast_ui.dart';
import 'package:pub_stats/view/widget/stats/base_stat_chart.dart';
import 'package:pub_stats_core/pub_stats_core.dart';
import 'package:url_launcher/url_launcher_string.dart';

class StatsCharts extends StatelessWidget {
Expand All @@ -30,6 +31,7 @@ class StatsCharts extends StatelessWidget {
final popularityScoreChart =
PopularityScoreChart(spots: _createSpots((e) => e.popularityScore));

final overallRank = stats.first.overallRank;
return Column(
children: [
if (stats.length == 1) ...[
Expand All @@ -46,7 +48,12 @@ class StatsCharts extends StatelessWidget {
),
),
),
const SizedBox(height: 4),
if (overallRank != null)
Text(
'Rank ${overallRank + 1}',
style: context.textTheme.labelSmall,
),
const SizedBox(height: 12),
Text(
'Last updated ${stats.first.stats.isNotEmpty ? Formatting.timeAgo(stats.first.stats.last.timestamp) : 'never'}',
style: context.textTheme.bodySmall,
Expand Down
5 changes: 0 additions & 5 deletions pub_stats/lib/view/widget/stats/stats_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:pub_stats/controller/data_controller.dart';
import 'package:pub_stats/view/widget/global_stats_view.dart';
import 'package:pub_stats/view/widget/stats/developer_package_stats.dart';
import 'package:pub_stats/view/widget/stats/diff_list.dart';
import 'package:pub_stats/view/widget/stats/stats_charts.dart';
import 'package:sliver_tools/sliver_tools.dart';
Expand Down Expand Up @@ -35,10 +34,6 @@ class StatsView extends StatelessWidget {
],
],
);
} else if (_controller.developerPackageStats.isNotEmpty) {
return DeveloperPackageStats(
stats: _controller.developerPackageStats,
);
} else {
return SliverToBoxAdapter(
child: GlobalStatsView(stats: _controller.globalStats),
Expand Down
5 changes: 4 additions & 1 deletion pub_stats_core/lib/src/model/package_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,10 @@ extension PackageDataDiffExtension on PackageDataDiff {
json.map(
(k, v) {
final field = PackageDataField.values.byName(k);
return MapEntry(field, field.diffFromJson(v));
return MapEntry(
field,
field.diffFromJson((v as Map).cast<String, dynamic>()),
);
},
);

Expand Down

0 comments on commit 4ce04d4

Please sign in to comment.