diff --git a/CHANGELOG.md b/CHANGELOG.md index 408a819..87671bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 4.0.2 +- Fix a bug with the analytics ping throttling algorithm. + ## 4.0.1 - Force close the http client from `IOAnalytics.close()`. This prevents lingering requests from making the application hang. diff --git a/lib/src/usage_impl.dart b/lib/src/usage_impl.dart index c774c6f..7fae01a 100644 --- a/lib/src/usage_impl.dart +++ b/lib/src/usage_impl.dart @@ -43,10 +43,10 @@ class ThrottlingBucket { } void _checkReplenish() { - var now = DateTime.now().millisecondsSinceEpoch; + final now = DateTime.now().millisecondsSinceEpoch; - if (_lastReplenish + 1000 >= now) { - var inc = (now - _lastReplenish) ~/ 1000; + if (_lastReplenish + 1000 < now) { + final inc = (now - _lastReplenish) ~/ 1000; drops = math.min(drops + inc, startingCount); _lastReplenish += (1000 * inc); } diff --git a/pubspec.yaml b/pubspec.yaml index 36738fd..a70557a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ # BSD-style license that can be found in the LICENSE file. name: usage -version: 4.0.1 +version: 4.0.2 description: A Google Analytics wrapper for command-line, web, and Flutter apps. homepage: https://github.com/dart-lang/usage @@ -15,4 +15,4 @@ dependencies: dev_dependencies: pedantic: ^1.9.0 - test: ^1.16.0-nullsafety + test: ^1.16.0 diff --git a/test/usage_impl_test.dart b/test/usage_impl_test.dart index ae71261..8373d96 100644 --- a/test/usage_impl_test.dart +++ b/test/usage_impl_test.dart @@ -25,6 +25,18 @@ void defineTests() { } expect(bucket.removeDrop(), false); }); + + test('does re-send after throttling', () async { + var bucket = ThrottlingBucket(20); + for (var i = 0; i < 20; i++) { + expect(bucket.removeDrop(), true); + } + expect(bucket.removeDrop(), false); + + // TODO: Re-write to use package:fake_async. + await Future.delayed(Duration(milliseconds: 1500)); + expect(bucket.removeDrop(), true); + }); }); group('AnalyticsImpl', () {