Skip to content

Commit

Permalink
refactor(nextcloud)!: Remove maximum version check
Browse files Browse the repository at this point in the history
Signed-off-by: provokateurin <kate@provokateurin.de>
  • Loading branch information
provokateurin committed Jul 27, 2024
1 parent 051241b commit 003a069
Show file tree
Hide file tree
Showing 12 changed files with 11 additions and 103 deletions.
2 changes: 1 addition & 1 deletion packages/neon_framework/lib/src/pages/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class _HomePageState extends State<HomePage> {
final versionCheck = entry.value;
final appName = l10n.appImplementationName(entry.key);

buffer.writeln('- $appName >=${versionCheck.minimumVersion} <${versionCheck.maximumMajor + 1}.0.0');
buffer.writeln('- $appName >=${versionCheck.minimumVersion}');
}

final message = l10n.errorUnsupportedAppVersions(buffer.toString());
Expand Down
3 changes: 0 additions & 3 deletions packages/neon_framework/test/apps_bloc_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -329,13 +329,11 @@ void main() {
final versionCheckCore = VersionCheck(
versions: BuiltList([Version(0, 0, 0)]),
minimumVersion: core.minVersion,
maximumMajor: core.maxMajor,
);

final versionCheck1 = VersionCheck(
versions: BuiltList([Version(2, 0, 0)]),
minimumVersion: Version(2, 0, 0),
maximumMajor: 2,
);

final appImplementation1 = MockAppImplementation();
Expand All @@ -346,7 +344,6 @@ void main() {
final versionCheck2 = VersionCheck(
versions: BuiltList([Version(1, 0, 0)]),
minimumVersion: Version(2, 0, 0),
maximumMajor: 2,
);

final appImplementation2 = MockAppImplementation();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ extension CookbookVersionCheck on cookbook.$Client {
return VersionCheck(
versions: versions,
minimumVersion: minAppVersion,
maximumMajor: null,
);
}
}
5 changes: 0 additions & 5 deletions packages/nextcloud/lib/src/api/core/core_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ import 'package:version/version.dart';
/// Minimum version of core/Server supported
final minVersion = Version(28, 0, 0);

/// Maximum major of core/Server supported
const maxMajor = 29;

/// Checks whether the server [version] is a dev, beta or RC version.
bool _isDevelopmentServerVersion(String version) {
return version.contains('dev') || version.contains('beta') || version.contains('RC');
Expand All @@ -29,7 +26,6 @@ extension CoreVersionCheck on core.$Client {
return VersionCheck(
versions: BuiltList([version]),
minimumVersion: minVersion,
maximumMajor: maxMajor,
isSupportedOverride: _isDevelopmentServerVersion(capabilities.version.string) ? true : null,
);
}
Expand All @@ -40,7 +36,6 @@ extension CoreStatusVersionCheck on core.Status {
VersionCheck get versionCheck => VersionCheck(
versions: BuiltList([Version.parse(version)]),
minimumVersion: minVersion,
maximumMajor: maxMajor,
isSupportedOverride: _isDevelopmentServerVersion(versionstring) ? true : null,
);
}
Expand Down
1 change: 0 additions & 1 deletion packages/nextcloud/lib/src/api/news/news_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ extension NewsVersionCheck on news.$Client {
return VersionCheck(
versions: versions?.map((version) => Version.parse(version.substring(1).replaceAll('-', '.'))).toBuiltList(),
minimumVersion: minVersion,
maximumMajor: null,
);
}
}
Expand Down
1 change: 0 additions & 1 deletion packages/nextcloud/lib/src/api/notes/notes_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ extension NotesVersionCheck on notes.$Client {
return VersionCheck(
versions: versions?.map(Version.parse).toBuiltList(),
minimumVersion: minVersion,
maximumMajor: null,
);
}
}
4 changes: 0 additions & 4 deletions packages/nextcloud/lib/src/api/spreed/spreed_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@ import 'package:version/version.dart';
/// The minimum version of the spreed app that is supported.
final minVersion = Version(18, 0, 0);

/// Maximum major of spreed supported
const maxMajor = 19;

/// Extension for checking whether spreed is supported.
extension SpreedVersionCheck on spreed.$Client {
/// Checks whether the spreed app installed on the server is supported by this client.
Expand All @@ -20,7 +17,6 @@ extension SpreedVersionCheck on spreed.$Client {
return VersionCheck(
versions: version != null ? BuiltList([Version.parse(version)]) : null,
minimumVersion: minVersion,
maximumMajor: maxMajor,
);
}
}
Expand Down
1 change: 0 additions & 1 deletion packages/nextcloud/lib/src/api/tables/tables_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ extension TablesVersionCheck on tables.$Client {
return VersionCheck(
versions: version != null ? BuiltList([Version.parse(version)]) : null,
minimumVersion: minAppVersion,
maximumMajor: null,
);
}
}
19 changes: 4 additions & 15 deletions packages/nextcloud/lib/src/models/version_check.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,26 @@ import 'package:built_collection/built_collection.dart';
import 'package:meta/meta.dart';
import 'package:version/version.dart';

/// Holds the [versions], [minimumVersion] and [maximumMajor] of an app.
/// Holds the [versions], [minimumVersion] of an app.
@immutable
class VersionCheck {
/// Creates a new [VersionCheck].
///
/// If the [maximumMajor] is `null` the compatibility of the major of the [minimumVersion] is checked.
const VersionCheck({
required this.versions,
required this.minimumVersion,
required int? maximumMajor,
bool? isSupportedOverride,
}) : _maximumMajor = maximumMajor,
_isSupportedOverride = isSupportedOverride;
}) : _isSupportedOverride = isSupportedOverride;

/// Current version of the app.
final BuiltList<Version>? versions;

/// Minimum version of the app.
final Version minimumVersion;

final int? _maximumMajor;

/// Maximum major version of the app.
int get maximumMajor => _maximumMajor ?? minimumVersion.major;

/// Overrides the check if the current version is supported.
final bool? _isSupportedOverride;

/// Whether the [versions] is allowed by the [minimumVersion] and [maximumMajor].
/// Whether the [versions] is allowed by the [minimumVersion].
///
/// If [versions] is `null` or empty it is assumed that the app is supported.
/// Only one of the [versions] has to be supported to return `true`.
Expand All @@ -44,7 +35,7 @@ class VersionCheck {
}

for (final version in versions!) {
if (version >= minimumVersion && version.major <= maximumMajor) {
if (version >= minimumVersion) {
return true;
}
}
Expand All @@ -57,14 +48,12 @@ class VersionCheck {
other is VersionCheck &&
other.versions == versions &&
other.minimumVersion == minimumVersion &&
other.maximumMajor == maximumMajor &&
other._isSupportedOverride == _isSupportedOverride;

@override
int get hashCode => Object.hashAll([
versions,
minimumVersion,
maximumMajor,
_isSupportedOverride,
]);
}
65 changes: 0 additions & 65 deletions packages/nextcloud/test/version_check_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,12 @@ void main() {
final check1 = VersionCheck(
versions: BuiltList([Version(1, 0, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
isSupportedOverride: false,
);

final check2 = VersionCheck(
versions: BuiltList([Version(1, 0, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
isSupportedOverride: false,
);

Expand All @@ -28,7 +26,6 @@ void main() {
versions: null,
// Invalid constraints to avoid accidental validation
minimumVersion: Version(2, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);
});
Expand All @@ -38,7 +35,6 @@ void main() {
versions: BuiltList(),
// Invalid constraints to avoid accidental validation
minimumVersion: Version(2, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);
});
Expand All @@ -51,69 +47,8 @@ void main() {
Version(2, 0, 0),
]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);
});

test('With maximumMajor', () {
var check = VersionCheck(
versions: BuiltList([Version(0, 9, 9)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isFalse);

check = VersionCheck(
versions: BuiltList([Version(1, 0, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);

check = VersionCheck(
versions: BuiltList([Version(1, 5, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);

check = VersionCheck(
versions: BuiltList([Version(1, 9, 9)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isTrue);

check = VersionCheck(
versions: BuiltList([Version(2, 0, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: 1,
);
expect(check.isSupported, isFalse);
});

test('Without maximumMajor', () {
var check = VersionCheck(
versions: BuiltList([Version(0, 9, 9)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: null,
);
expect(check.isSupported, isFalse);

check = VersionCheck(
versions: BuiltList([Version(1, 5, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: null,
);
expect(check.isSupported, isTrue);

check = VersionCheck(
versions: BuiltList([Version(2, 0, 0)]),
minimumVersion: Version(1, 0, 0),
maximumMajor: null,
);
expect(check.isSupported, isFalse);
});
});
}
8 changes: 4 additions & 4 deletions packages/nextcloud_test/bin/generate_presets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ Future<void> main() async {

for (final release in app.releases) {
final serverVersion = release.findLatestServerVersion(serverVersions);
if (serverVersion == null) {
continue;
}

final buffer = StringBuffer()..writeln('SERVER_VERSION=$serverVersion');

Expand Down Expand Up @@ -108,7 +111,7 @@ Future<List<Version>> _getServerVersions(http.Client httpClient) async {
final version = Version.parse(tag['name'] as String);
final normalizedVersion = Version(version.major, version.minor, 0);

if (version < core.minVersion || version.major > core.maxMajor) {
if (version < core.minVersion) {
continue;
}

Expand Down Expand Up @@ -163,9 +166,6 @@ Future<List<App>> _getApps(List<String> appIDs, http.Client httpClient) async {
if (maximumServerVersionRequirement < core.minVersion) {
continue;
}
if (minimumServerVersionRequirement.major > core.maxMajor) {
continue;
}

final download = release['download'] as String;

Expand Down
4 changes: 2 additions & 2 deletions packages/nextcloud_test/lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ extension AppFindLatestRelease on App {

@internal
extension AppReleaseFindLatestServerVersion on AppRelease {
Version findLatestServerVersion(List<Version> serverVersions) {
Version? findLatestServerVersion(List<Version> serverVersions) {
final compatibleReleases = serverVersions
.where(
(serverVersion) =>
serverVersion >= minimumServerVersion && serverVersion < maximumServerVersion.incrementMajor(),
)
.toList()
..sort((a, b) => b.compareTo(a));
return compatibleReleases.first;
return compatibleReleases.firstOrNull;
}
}

0 comments on commit 003a069

Please sign in to comment.