Unverified Commit 97e03104 authored by Greg Spencer's avatar Greg Spencer Committed by GitHub

Make the 'time to update' message depend up on the channel. (#24173)

Fixes #24158
parent 72b6a706
......@@ -207,20 +207,34 @@ class FlutterVersion {
/// The amount of time we wait before pinging the server to check for the
/// availability of a newer version of Flutter.
@visibleForTesting
static const Duration kCheckAgeConsideredUpToDate = Duration(days: 3);
static const Duration checkAgeConsideredUpToDate = Duration(days: 3);
/// We warn the user if the age of their Flutter installation is greater than
/// this duration.
/// this duration. The durations are slightly longer than the expected release
/// cadence for each channel, to give the user a grace period before they get
/// notified.
///
/// This is set to 5 weeks because releases are currently around every 4 weeks.
/// For example, for the beta channel, this is set to five weeks because
/// beta releases happen approximately every month.
@visibleForTesting
static const Duration kVersionAgeConsideredUpToDate = Duration(days: 35);
static Duration versionAgeConsideredUpToDate(String channel) {
switch (channel) {
case 'stable':
return const Duration(days: 365 ~/ 2); // Six months
case 'beta':
return const Duration(days: 7 * 8); // Eight weeks
case 'dev':
return const Duration(days: 7 * 4); // Four weeks
default:
return const Duration(days: 7 * 3); // Three weeks
}
}
/// The amount of time we wait between issuing a warning.
///
/// This is to avoid annoying users who are unable to upgrade right away.
@visibleForTesting
static const Duration kMaxTimeSinceLastWarning = Duration(days: 1);
static const Duration maxTimeSinceLastWarning = Duration(days: 1);
/// The amount of time we pause for to let the user read the message about
/// outdated Flutter installation.
......@@ -238,7 +252,7 @@ class FlutterVersion {
static Future<void> resetFlutterVersionFreshnessCheck() async {
try {
await Cache.instance.getStampFileFor(
VersionCheckStamp.kFlutterVersionCheckStampFile,
VersionCheckStamp.flutterVersionCheckStampFile,
).delete();
} on FileSystemException {
// Ignore, since we don't mind if the file didn't exist in the first place.
......@@ -258,7 +272,7 @@ class FlutterVersion {
final DateTime localFrameworkCommitDate = DateTime.parse(frameworkCommitDate);
final Duration frameworkAge = _clock.now().difference(localFrameworkCommitDate);
final bool installationSeemsOutdated = frameworkAge > kVersionAgeConsideredUpToDate;
final bool installationSeemsOutdated = frameworkAge > versionAgeConsideredUpToDate(channel);
// Get whether there's a newer version on the remote. This only goes
// to the server if we haven't checked recently so won't happen on every
......@@ -273,8 +287,8 @@ class FlutterVersion {
// Do not load the stamp before the above server check as it may modify the stamp file.
final VersionCheckStamp stamp = await VersionCheckStamp.load();
final DateTime lastTimeWarningWasPrinted = stamp.lastTimeWarningWasPrinted ?? _clock.ago(kMaxTimeSinceLastWarning * 2);
final bool beenAWhileSinceWarningWasPrinted = _clock.now().difference(lastTimeWarningWasPrinted) > kMaxTimeSinceLastWarning;
final DateTime lastTimeWarningWasPrinted = stamp.lastTimeWarningWasPrinted ?? _clock.ago(maxTimeSinceLastWarning * 2);
final bool beenAWhileSinceWarningWasPrinted = _clock.now().difference(lastTimeWarningWasPrinted) > maxTimeSinceLastWarning;
// We show a warning if either we know there is a new remote version, or we couldn't tell but the local
// version is outdated.
......@@ -327,7 +341,7 @@ class FlutterVersion {
/// Gets the release date of the latest available Flutter version.
///
/// This method sends a server request if it's been more than
/// [kCheckAgeConsideredUpToDate] since the last version check.
/// [checkAgeConsideredUpToDate] since the last version check.
///
/// Returns null if the cached version is out-of-date or missing, and we are
/// unable to reach the server to get the latest version.
......@@ -339,7 +353,7 @@ class FlutterVersion {
final Duration timeSinceLastCheck = _clock.now().difference(versionCheckStamp.lastTimeVersionWasChecked);
// Don't ping the server too often. Return cached value if it's fresh.
if (timeSinceLastCheck < kCheckAgeConsideredUpToDate)
if (timeSinceLastCheck < checkAgeConsideredUpToDate)
return versionCheckStamp.lastKnownRemoteVersion;
}
......@@ -381,10 +395,10 @@ class VersionCheckStamp {
/// The prefix of the stamp file where we cache Flutter version check data.
@visibleForTesting
static const String kFlutterVersionCheckStampFile = 'flutter_version_check';
static const String flutterVersionCheckStampFile = 'flutter_version_check';
static Future<VersionCheckStamp> load() async {
final String versionCheckStamp = Cache.instance.getStampFor(kFlutterVersionCheckStampFile);
final String versionCheckStamp = Cache.instance.getStampFor(flutterVersionCheckStampFile);
if (versionCheckStamp != null) {
// Attempt to parse stamp JSON.
......@@ -435,8 +449,8 @@ class VersionCheckStamp {
if (newTimeWarningWasPrinted != null)
jsonData['lastTimeWarningWasPrinted'] = '$newTimeWarningWasPrinted';
const JsonEncoder kPrettyJsonEncoder = JsonEncoder.withIndent(' ');
Cache.instance.setStampFor(kFlutterVersionCheckStampFile, kPrettyJsonEncoder.convert(jsonData));
const JsonEncoder prettyJsonEncoder = JsonEncoder.withIndent(' ');
Cache.instance.setStampFor(flutterVersionCheckStampFile, prettyJsonEncoder.convert(jsonData));
}
Map<String, String> toJson({
......
......@@ -188,7 +188,7 @@ void main() {
)).thenAnswer((_) => Future<Process>.value(createMockProcess()));
final File versionCheckFile = Cache.instance.getStampFileFor(
VersionCheckStamp.kFlutterVersionCheckStampFile,
VersionCheckStamp.flutterVersionCheckStampFile,
);
/// Create a bogus "leftover" version check file to make sure it gets
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment