Browse Source

Merge pull request #344 from provokateurin/refactor/user-status-avatar

Refactor user statuses and avatars
pull/360/head
Kate 1 year ago committed by GitHub
parent
commit
0116f48b90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 38
      .github/workflows/dart.yml
  2. 5
      packages/neon/neon/lib/neon.dart
  3. 12
      packages/neon/neon/lib/src/blocs/accounts.dart
  4. 85
      packages/neon/neon/lib/src/blocs/timer.dart
  5. 61
      packages/neon/neon/lib/src/blocs/user_status.dart
  6. 85
      packages/neon/neon/lib/src/blocs/user_statuses.dart
  7. 4
      packages/neon/neon/lib/src/pages/home.dart
  8. 103
      packages/neon/neon/lib/src/widgets/account_avatar.dart
  9. 2
      packages/neon/neon/lib/src/widgets/account_tile.dart
  10. 2
      packages/neon/neon/lib/src/widgets/result_builder.dart
  11. 126
      packages/neon/neon/lib/src/widgets/user_avatar.dart
  12. 1
      packages/neon/neon/mono_pkg.yaml
  13. 1
      packages/neon/neon/pubspec.yaml
  14. 43
      packages/neon/neon/test/timer_bloc_test.dart
  15. 158
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  16. 452
      packages/nextcloud/lib/src/nextcloud.openapi.g.dart
  17. 42
      packages/nextcloud/lib/src/nextcloud.openapi.json
  18. 96
      packages/nextcloud/test/user_status.dart
  19. 42
      specs/user_status.json
  20. 6
      tool/ci.sh

38
.github/workflows/dart.yml

@ -869,6 +869,38 @@ jobs:
needs: needs:
- job_001 - job_001
job_028: job_028:
name: "all; PKG: packages/neon/neon; `flutter test`"
runs-on: ubuntu-latest
steps:
- name: Cache Pub hosted dependencies
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
with:
path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/neon/neon;commands:test_0"
restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/neon/neon
os:ubuntu-latest;pub-cache-hosted;sdk:stable
os:ubuntu-latest;pub-cache-hosted
os:ubuntu-latest
- name: Setup Flutter SDK
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa
with:
channel: stable
- id: checkout
name: Checkout repository
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
- id: packages_neon_neon_pub_upgrade
name: packages/neon/neon; flutter pub upgrade
run: flutter pub upgrade
if: "always() && steps.checkout.conclusion == 'success'"
working-directory: packages/neon/neon
- name: packages/neon/neon; flutter test
run: flutter test
if: "always() && steps.packages_neon_neon_pub_upgrade.conclusion == 'success'"
working-directory: packages/neon/neon
needs:
- job_001
job_029:
name: "all; PKG: packages/nextcloud; `dart test`" name: "all; PKG: packages/nextcloud; `dart test`"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -876,7 +908,7 @@ jobs:
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
with: with:
path: "~/.pub-cache/hosted" path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud;commands:test" key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud;commands:test_1"
restore-keys: | restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/nextcloud
os:ubuntu-latest;pub-cache-hosted;sdk:stable os:ubuntu-latest;pub-cache-hosted;sdk:stable
@ -900,7 +932,7 @@ jobs:
working-directory: packages/nextcloud working-directory: packages/nextcloud
needs: needs:
- job_001 - job_001
job_029: job_030:
name: "all; PKG: packages/sort_box; `dart test`" name: "all; PKG: packages/sort_box; `dart test`"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -908,7 +940,7 @@ jobs:
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
with: with:
path: "~/.pub-cache/hosted" path: "~/.pub-cache/hosted"
key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box;commands:test" key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box;commands:test_1"
restore-keys: | restore-keys: |
os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:packages/sort_box
os:ubuntu-latest;pub-cache-hosted;sdk:stable os:ubuntu-latest;pub-cache-hosted;sdk:stable

5
packages/neon/neon/lib/neon.dart

@ -56,8 +56,9 @@ part 'src/blocs/first_launch.dart';
part 'src/blocs/login.dart'; part 'src/blocs/login.dart';
part 'src/blocs/next_push.dart'; part 'src/blocs/next_push.dart';
part 'src/blocs/push_notifications.dart'; part 'src/blocs/push_notifications.dart';
part 'src/blocs/timer.dart';
part 'src/blocs/user_details.dart'; part 'src/blocs/user_details.dart';
part 'src/blocs/user_status.dart'; part 'src/blocs/user_statuses.dart';
part 'src/interfaces/notifications.dart'; part 'src/interfaces/notifications.dart';
part 'src/pages/account_settings.dart'; part 'src/pages/account_settings.dart';
part 'src/pages/home.dart'; part 'src/pages/home.dart';
@ -92,7 +93,6 @@ part 'src/utils/storage.dart';
part 'src/utils/stream_listenable.dart'; part 'src/utils/stream_listenable.dart';
part 'src/utils/theme.dart'; part 'src/utils/theme.dart';
part 'src/utils/validators.dart'; part 'src/utils/validators.dart';
part 'src/widgets/account_avatar.dart';
part 'src/widgets/account_settings_tile.dart'; part 'src/widgets/account_settings_tile.dart';
part 'src/widgets/account_tile.dart'; part 'src/widgets/account_tile.dart';
part 'src/widgets/app_implementation_icon.dart'; part 'src/widgets/app_implementation_icon.dart';
@ -108,6 +108,7 @@ part 'src/widgets/nextcloud_logo.dart';
part 'src/widgets/relative_time.dart'; part 'src/widgets/relative_time.dart';
part 'src/widgets/result_builder.dart'; part 'src/widgets/result_builder.dart';
part 'src/widgets/text_settings_tile.dart'; part 'src/widgets/text_settings_tile.dart';
part 'src/widgets/user_avatar.dart';
Future runNeon({ Future runNeon({
required final WidgetsBinding binding, required final WidgetsBinding binding,

12
packages/neon/neon/lib/src/blocs/accounts.dart

@ -74,7 +74,7 @@ class AccountsBloc extends Bloc implements AccountsBlocEvents, AccountsBlocState
final _appsBlocs = <String, AppsBloc>{}; final _appsBlocs = <String, AppsBloc>{};
final _capabilitiesBlocs = <String, CapabilitiesBloc>{}; final _capabilitiesBlocs = <String, CapabilitiesBloc>{};
final _userDetailsBlocs = <String, UserDetailsBloc>{}; final _userDetailsBlocs = <String, UserDetailsBloc>{};
final _userStatusBlocs = <String, UserStatusBloc>{}; final _userStatusesBlocs = <String, UserStatusesBloc>{};
@override @override
void dispose() { void dispose() {
@ -83,7 +83,7 @@ class AccountsBloc extends Bloc implements AccountsBlocEvents, AccountsBlocState
_appsBlocs.disposeAll(); _appsBlocs.disposeAll();
_capabilitiesBlocs.disposeAll(); _capabilitiesBlocs.disposeAll();
_userDetailsBlocs.disposeAll(); _userDetailsBlocs.disposeAll();
_userStatusBlocs.disposeAll(); _userStatusesBlocs.disposeAll();
for (final options in _accountsOptions.values) { for (final options in _accountsOptions.values) {
options.dispose(); options.dispose();
} }
@ -190,12 +190,12 @@ class AccountsBloc extends Bloc implements AccountsBlocEvents, AccountsBlocState
); );
} }
UserStatusBloc getUserStatusBloc(final Account account) { UserStatusesBloc getUserStatusesBloc(final Account account) {
if (_userStatusBlocs[account.id] != null) { if (_userStatusesBlocs[account.id] != null) {
return _userStatusBlocs[account.id]!; return _userStatusesBlocs[account.id]!;
} }
return _userStatusBlocs[account.id] = UserStatusBloc( return _userStatusesBlocs[account.id] = UserStatusesBloc(
_platform, _platform,
account, account,
); );

85
packages/neon/neon/lib/src/blocs/timer.dart

@ -0,0 +1,85 @@
part of '../../neon.dart';
abstract class TimerBlocEvents {
/// Register a [callback] that will be called periodically.
/// The time between the executions is defined by the [duration].
NeonTimer registerTimer(final Duration duration, final VoidCallback callback);
/// Unregister a timer that has been previously registered with the bloc.
/// You can also use [NeonTimer.cancel].
void unregisterTimer(final NeonTimer timer);
}
abstract class TimerBlocStates {}
/// Execute callbacks at defined periodic intervals.
/// Components can register their callbacks and everything with the same periodicity will be executed at the same time.
///
/// The [TimerBloc] is a singleton.
/// Sub-second timers are not supported.
class TimerBloc extends Bloc implements TimerBlocEvents, TimerBlocStates {
factory TimerBloc() => instance ??= TimerBloc._();
@visibleForTesting
factory TimerBloc.mocked(final TimerBloc mock) => instance ??= mock;
TimerBloc._();
@visibleForTesting
static TimerBloc? instance;
final Map<int, Timer> _timers = {};
final Map<int, Set<VoidCallback>> _callbacks = {};
@visibleForTesting
Map<int, Timer> get timers => _timers;
@visibleForTesting
Map<int, Set<VoidCallback>> get callbacks => _callbacks;
@override
void dispose() {
for (final timer in _timers.values) {
timer.cancel();
}
_timers.clear();
_callbacks.clear();
TimerBloc.instance = null;
}
@override
NeonTimer registerTimer(final Duration duration, final VoidCallback callback) {
if (_timers[duration.inSeconds] == null) {
_timers[duration.inSeconds] = Timer.periodic(duration, (final _) {
for (final callback in _callbacks[duration.inSeconds]!) {
callback();
}
});
_callbacks[duration.inSeconds] = {callback};
} else {
_callbacks[duration.inSeconds]!.add(callback);
}
return NeonTimer(duration, callback);
}
@override
void unregisterTimer(final NeonTimer timer) {
if (_timers[timer.duration.inSeconds] != null) {
_callbacks[timer.duration.inSeconds]!.remove(timer.callback);
}
}
}
class NeonTimer {
NeonTimer(
this.duration,
this.callback,
);
final Duration duration;
final VoidCallback callback;
void cancel() {
TimerBloc().unregisterTimer(this);
}
}

61
packages/neon/neon/lib/src/blocs/user_status.dart

@ -1,61 +0,0 @@
part of '../../neon.dart';
abstract class UserStatusBlocEvents {}
abstract class UserStatusBlocStates {
BehaviorSubject<Result<NextcloudUserStatusStatus?>> get userStatus;
}
class UserStatusBloc extends InteractiveBloc implements UserStatusBlocEvents, UserStatusBlocStates {
UserStatusBloc(
this._platform,
this._account,
) {
_timer = instantPeriodicTimer(
const Duration(minutes: 5),
(final _) async {
await refresh();
},
);
}
final NeonPlatform _platform;
final Account _account;
late Timer _timer;
@override
void dispose() {
_timer.cancel();
unawaited(userStatus.close());
}
@override
BehaviorSubject<Result<NextcloudUserStatusStatus?>> userStatus =
BehaviorSubject<Result<NextcloudUserStatusStatus?>>();
@override
Future refresh() async {
final isAway =
_platform.canUseWindowManager && (!(await windowManager.isFocused()) || !(await windowManager.isVisible()));
try {
final response = await _account.client.userStatus.heartbeat(
status: isAway ? NextcloudUserStatusType.away : NextcloudUserStatusType.online,
);
userStatus.add(Result.success(response.ocs.data));
} catch (e) {
if (e is NextcloudApiException && e.statusCode == 204) {
return;
}
userStatus.add(Result.error(e));
}
}
}
Timer instantPeriodicTimer(
final Duration duration,
final void Function(Timer timer) callback,
) {
final timer = Timer.periodic(duration, callback);
callback(timer);
return timer;
}

85
packages/neon/neon/lib/src/blocs/user_statuses.dart

@ -0,0 +1,85 @@
part of '../../neon.dart';
abstract class UserStatusesBlocEvents {
void load(final String username, {final bool force = false});
}
abstract class UserStatusesBlocStates {
BehaviorSubject<Map<String, Result<NextcloudUserStatusPublicStatus?>>> get statuses;
}
class UserStatusesBloc extends InteractiveBloc implements UserStatusesBlocEvents, UserStatusesBlocStates {
UserStatusesBloc(
this._platform,
this._account,
) {
unawaited(refresh());
_timer = TimerBloc().registerTimer(const Duration(minutes: 5), refresh);
}
final NeonPlatform _platform;
final Account _account;
late final NeonTimer _timer;
@override
void dispose() {
_timer.cancel();
unawaited(statuses.close());
super.dispose();
}
@override
BehaviorSubject<Map<String, Result<NextcloudUserStatusPublicStatus?>>> statuses =
BehaviorSubject<Map<String, Result<NextcloudUserStatusPublicStatus?>>>();
@override
Future refresh() async {
for (final username in _statuses.keys) {
await load(username, force: true);
}
}
@override
Future load(final String username, {final bool force = false}) async {
if (!force && _statuses.containsKey(username)) {
return;
}
try {
_updateStatus(username, Result.loading());
NextcloudUserStatusPublicStatus? data;
if (_account.username == username) {
final isAway =
_platform.canUseWindowManager && (!(await windowManager.isFocused()) || !(await windowManager.isVisible()));
final response = await _account.client.userStatus.heartbeat(
status: isAway ? NextcloudUserStatusType.away : NextcloudUserStatusType.online,
);
data = response.ocs.data.userStatusStatus?.userStatusPublicStatus;
} else {
final response = await _account.client.userStatus.getPublicStatus(userId: username);
data = response.ocs.data.userStatusPublicStatus;
}
_updateStatus(username, Result.success(data));
} catch (e, s) {
if (e is NextcloudApiException && (e.statusCode == 404 || e.statusCode == 204)) {
_updateStatus(username, Result.success(null));
return;
}
debugPrint(e.toString());
debugPrint(s.toString());
_updateStatus(username, Result.error(e));
}
}
Map<String, Result<NextcloudUserStatusPublicStatus?>> get _statuses =>
statuses.valueOrNull ?? <String, Result<NextcloudUserStatusPublicStatus?>>{};
void _updateStatus(final String username, final Result<NextcloudUserStatusPublicStatus?> result) {
statuses.add({
..._statuses,
username: result,
});
}
}

4
packages/neon/neon/lib/src/pages/home.dart

@ -225,7 +225,7 @@ class _HomePageState extends State<HomePage> {
}, },
tooltip: account.client.humanReadableID, tooltip: account.client.humanReadableID,
icon: IntrinsicHeight( icon: IntrinsicHeight(
child: NeonAccountAvatar( child: NeonUserAvatar(
account: account, account: account,
), ),
), ),
@ -496,7 +496,7 @@ class _HomePageState extends State<HomePage> {
}, },
tooltip: AppLocalizations.of(context).settingsAccount, tooltip: AppLocalizations.of(context).settingsAccount,
icon: IntrinsicWidth( icon: IntrinsicWidth(
child: NeonAccountAvatar( child: NeonUserAvatar(
account: account, account: account,
), ),
), ),

103
packages/neon/neon/lib/src/widgets/account_avatar.dart

@ -1,103 +0,0 @@
part of '../../neon.dart';
const kAvatarSize = 40.0;
class NeonAccountAvatar extends StatelessWidget {
const NeonAccountAvatar({
required this.account,
super.key,
});
final Account account;
@override
Widget build(final BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
final size = (kAvatarSize * MediaQuery.of(context).devicePixelRatio).toInt();
final userStatusBloc = Provider.of<AccountsBloc>(context, listen: false).getUserStatusBloc(account);
return SizedBox.square(
dimension: kAvatarSize,
child: Stack(
alignment: Alignment.center,
children: [
CircleAvatar(
child: ClipOval(
child: NeonCachedApiImage(
account: account,
cacheKey: 'avatar-${account.id}-${isDark ? 'dark' : 'light'}$size',
download: () async {
if (isDark) {
return account.client.core.getDarkAvatar(
userId: account.username,
size: size,
);
} else {
return account.client.core.getAvatar(
userId: account.username,
size: size,
);
}
},
),
),
),
ResultBuilder<NextcloudUserStatusStatus?>(
stream: userStatusBloc.userStatus,
builder: (final context, final userStatus) {
final hasEmoji = userStatus.data?.icon != null;
final factor = hasEmoji ? 2 : 3;
return Align(
alignment: Alignment.bottomRight,
child: Container(
height: kAvatarSize / factor,
width: kAvatarSize / factor,
decoration: userStatus.loading || userStatus.error != null || userStatus.data == null || hasEmoji
? null
: BoxDecoration(
shape: BoxShape.circle,
color: _userStatusToColor(userStatus.data!),
),
child: userStatus.loading
? CircularProgressIndicator(
strokeWidth: 1.5,
color: Theme.of(context).colorScheme.onPrimary,
)
: userStatus.error != null &&
(userStatus.error is! NextcloudApiException ||
(userStatus.error! as NextcloudApiException).statusCode != 404)
? NeonException(
userStatus.error,
onRetry: userStatusBloc.refresh,
onlyIcon: true,
iconSize: kAvatarSize / factor,
)
: hasEmoji
? Text(
userStatus.data!.icon!,
style: const TextStyle(
fontSize: 16,
),
)
: null,
),
);
},
),
],
),
);
}
Color _userStatusToColor(final NextcloudUserStatusStatus userStatus) {
switch (userStatus.status) {
case NextcloudUserStatusType.online:
return const Color(0xFF49B382);
case NextcloudUserStatusType.away:
return const Color(0xFFF4A331);
case NextcloudUserStatusType.dnd:
return const Color(0xFFED484C);
default:
return Colors.transparent;
}
}
}

2
packages/neon/neon/lib/src/widgets/account_tile.dart

@ -34,7 +34,7 @@ class NeonAccountTile extends StatelessWidget {
) )
: null, : null,
leading: IntrinsicWidth( leading: IntrinsicWidth(
child: NeonAccountAvatar( child: NeonUserAvatar(
account: account, account: account,
), ),
), ),

2
packages/neon/neon/lib/src/widgets/result_builder.dart

@ -7,7 +7,7 @@ class ResultBuilder<R> extends StatelessWidget {
super.key, super.key,
}); });
final BehaviorSubject<Result<R>>? stream; final Stream<Result<R>?>? stream;
final Widget Function(BuildContext, Result<R>) builder; final Widget Function(BuildContext, Result<R>) builder;

126
packages/neon/neon/lib/src/widgets/user_avatar.dart

@ -0,0 +1,126 @@
// ignore_for_file: use_late_for_private_fields_and_variables
// ^ This is a really strange false positive, it goes of at a very random place without any meaning. Hopefully fixed soon?
part of '../../neon.dart';
const kAvatarSize = 40.0;
class NeonUserAvatar extends StatefulWidget {
NeonUserAvatar({
required this.account,
final String? username,
this.showStatus = true,
this.size = kAvatarSize,
super.key,
}) : username = username ?? account.client.username!;
final Account account;
final String username;
final bool showStatus;
final double size;
@override
State<NeonUserAvatar> createState() => _UserAvatarState();
}
class _UserAvatarState extends State<NeonUserAvatar> {
late final _userStatusBloc = Provider.of<AccountsBloc>(context, listen: false).getUserStatusesBloc(widget.account);
@override
void initState() {
super.initState();
unawaited(_userStatusBloc.load(widget.username));
}
@override
Widget build(final BuildContext context) {
final isDark = Theme.of(context).brightness == Brightness.dark;
final size = (widget.size * MediaQuery.of(context).devicePixelRatio).toInt();
return Stack(
alignment: Alignment.center,
children: [
CircleAvatar(
radius: widget.size / 2,
child: ClipOval(
child: NeonCachedApiImage(
account: widget.account,
cacheKey: 'avatar-${widget.username}-${isDark ? 'dark' : 'light'}$size',
download: () async {
if (isDark) {
return widget.account.client.core.getDarkAvatar(
userId: widget.username,
size: size,
);
} else {
return widget.account.client.core.getAvatar(
userId: widget.username,
size: size,
);
}
},
),
),
),
if (widget.showStatus) ...[
ResultBuilder<NextcloudUserStatusPublicStatus?>(
stream: _userStatusBloc.statuses.map((final statuses) => statuses[widget.username]),
builder: _userStatusIconBuilder,
),
],
],
);
}
Widget _userStatusIconBuilder(final BuildContext context, final Result<NextcloudUserStatusPublicStatus?> result) {
final hasEmoji = result.data?.icon != null;
final scaledSize = widget.size / (hasEmoji ? 2 : 3);
Widget? child;
Decoration? decoration;
if (result.loading) {
child = CircularProgressIndicator(
strokeWidth: 1.5,
color: Theme.of(context).colorScheme.onPrimary,
);
} else if (result.error != null) {
child = Icon(
Icons.error_outline,
size: scaledSize,
color: Theme.of(context).colorScheme.error,
);
} else if (hasEmoji) {
child = Text(
result.data!.icon!,
style: const TextStyle(
fontSize: 16,
),
);
} else if (result.data != null) {
decoration = BoxDecoration(
shape: BoxShape.circle,
color: _userStatusToColor(result.data!.status),
);
}
return SizedBox.square(
dimension: widget.size,
child: Align(
alignment: Alignment.bottomRight,
child: Container(
width: scaledSize,
height: scaledSize,
decoration: decoration,
child: child,
),
),
);
}
Color? _userStatusToColor(final NextcloudUserStatusType userStatusType) => switch (userStatusType) {
NextcloudUserStatusType.online => const Color(0xFF49B382),
NextcloudUserStatusType.away => const Color(0xFFF4A331),
NextcloudUserStatusType.dnd => const Color(0xFFED484C),
_ => null,
};
}

1
packages/neon/neon/mono_pkg.yaml

@ -5,3 +5,4 @@ stages:
- all: - all:
- analyze: --fatal-infos . - analyze: --fatal-infos .
- format: --output=none --set-exit-if-changed --line-length 120 . - format: --output=none --set-exit-if-changed --line-length 120 .
- test

1
packages/neon/neon/pubspec.yaml

@ -64,6 +64,7 @@ dev_dependencies:
git: git:
url: https://github.com/stack11/dart_nit_picking url: https://github.com/stack11/dart_nit_picking
ref: 0b2ee0d ref: 0b2ee0d
test: ^1.24.3
dependency_overrides: dependency_overrides:
wakelock_windows: # TODO: https://github.com/creativecreatorormaybenot/wakelock/pull/195 wakelock_windows: # TODO: https://github.com/creativecreatorormaybenot/wakelock/pull/195

43
packages/neon/neon/test/timer_bloc_test.dart

@ -0,0 +1,43 @@
import 'package:neon/neon.dart';
import 'package:test/test.dart';
void main() {
group('TimerBloc', () {
tearDown(() {
TimerBloc().dispose();
});
test('Register timer', () async {
const duration = Duration(milliseconds: 100);
final stopwatch = Stopwatch()..start();
final callback = stopwatch.stop;
TimerBloc().registerTimer(duration, callback);
await Future.delayed(duration);
expect(stopwatch.elapsedMilliseconds, greaterThan(duration.inMilliseconds));
expect(stopwatch.elapsedMilliseconds, lessThan(duration.inMilliseconds * 1.1));
expect(TimerBloc().callbacks[duration.inSeconds], contains(callback));
expect(TimerBloc().timers[duration.inSeconds], isNot(isNull));
});
test('Unregister timer', () async {
const duration = Duration(milliseconds: 100);
final callback = neverCalled;
TimerBloc().registerTimer(duration, callback).cancel();
await Future.delayed(duration);
expect(TimerBloc().callbacks[duration.inSeconds], isNot(contains(callback)));
});
test('dispose', () {
TimerBloc().registerTimer(const Duration(minutes: 1), () {});
expect(TimerBloc().timers, hasLength(1));
expect(TimerBloc().callbacks, hasLength(1));
TimerBloc().dispose();
expect(TimerBloc().timers, isEmpty);
expect(TimerBloc().callbacks, isEmpty);
});
});
}

158
packages/nextcloud/lib/src/nextcloud.openapi.dart

@ -4664,85 +4664,74 @@ abstract class NextcloudUserStatusGetPublicStatus
_$nextcloudUserStatusGetPublicStatusSerializer; _$nextcloudUserStatusGetPublicStatusSerializer;
} }
abstract class NextcloudUserStatusStatus_ClearAt abstract class NextcloudUserStatusStatus1
implements Built<NextcloudUserStatusStatus_ClearAt, NextcloudUserStatusStatus_ClearAtBuilder> { implements Built<NextcloudUserStatusStatus1, NextcloudUserStatusStatus1Builder> {
factory NextcloudUserStatusStatus_ClearAt([final void Function(NextcloudUserStatusStatus_ClearAtBuilder)? b]) = factory NextcloudUserStatusStatus1([final void Function(NextcloudUserStatusStatus1Builder)? b]) =
_$NextcloudUserStatusStatus_ClearAt; _$NextcloudUserStatusStatus1;
const NextcloudUserStatusStatus_ClearAt._(); const NextcloudUserStatusStatus1._();
JsonObject get data; factory NextcloudUserStatusStatus1.fromJson(final Map<String, dynamic> json) =>
NextcloudUserStatusClearAt? get userStatusClearAt;
/// Time as unix timestamp
int? get $int;
static NextcloudUserStatusStatus_ClearAt fromJson(final Object json) =>
jsonSerializers.deserializeWith(serializer, json)!; jsonSerializers.deserializeWith(serializer, json)!;
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
String? get messageId;
bool get messageIsPredefined;
bool get statusIsUserDefined;
static Serializer<NextcloudUserStatusStatus1> get serializer => _$nextcloudUserStatusStatus1Serializer;
}
abstract class NextcloudUserStatusStatus implements Built<NextcloudUserStatusStatus, NextcloudUserStatusStatusBuilder> {
factory NextcloudUserStatusStatus([final void Function(NextcloudUserStatusStatusBuilder)? b]) =
_$NextcloudUserStatusStatus;
const NextcloudUserStatusStatus._();
JsonObject get data;
NextcloudUserStatusPublicStatus get userStatusPublicStatus;
NextcloudUserStatusStatus1 get userStatusStatus1;
static NextcloudUserStatusStatus fromJson(final Object json) => jsonSerializers.deserializeWith(serializer, json)!;
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>; Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
@BuiltValueSerializer(custom: true) @BuiltValueSerializer(custom: true)
static Serializer<NextcloudUserStatusStatus_ClearAt> get serializer => static Serializer<NextcloudUserStatusStatus> get serializer => _$NextcloudUserStatusStatusSerializer();
_$NextcloudUserStatusStatus_ClearAtSerializer();
} }
class _$NextcloudUserStatusStatus_ClearAtSerializer implements PrimitiveSerializer<NextcloudUserStatusStatus_ClearAt> { class _$NextcloudUserStatusStatusSerializer implements PrimitiveSerializer<NextcloudUserStatusStatus> {
@override @override
final Iterable<Type> types = const [NextcloudUserStatusStatus_ClearAt, _$NextcloudUserStatusStatus_ClearAt]; final Iterable<Type> types = const [NextcloudUserStatusStatus, _$NextcloudUserStatusStatus];
@override @override
final String wireName = 'NextcloudUserStatusStatus_ClearAt'; final String wireName = 'NextcloudUserStatusStatus';
@override @override
Object serialize( Object serialize(
final Serializers serializers, final Serializers serializers,
final NextcloudUserStatusStatus_ClearAt object, { final NextcloudUserStatusStatus object, {
final FullType specifiedType = FullType.unspecified, final FullType specifiedType = FullType.unspecified,
}) => }) =>
object.data.value; object.data.value;
@override @override
NextcloudUserStatusStatus_ClearAt deserialize( NextcloudUserStatusStatus deserialize(
final Serializers serializers, final Serializers serializers,
final Object data, { final Object data, {
final FullType specifiedType = FullType.unspecified, final FullType specifiedType = FullType.unspecified,
}) { }) {
final result = NextcloudUserStatusStatus_ClearAtBuilder()..data = JsonObject(data); final result = NextcloudUserStatusStatusBuilder()..data = JsonObject(data);
try { result.userStatusPublicStatus.replace(
result._userStatusClearAt = (jsonSerializers.deserialize( jsonSerializers.deserialize(
data, data,
specifiedType: const FullType(NextcloudUserStatusClearAt), specifiedType: const FullType(NextcloudUserStatusPublicStatus),
)! as NextcloudUserStatusClearAt) )! as NextcloudUserStatusPublicStatus,
.toBuilder(); );
} catch (_) {} result.userStatusStatus1.replace(
try { jsonSerializers.deserialize(
result._$int = data as int?; data,
} catch (_) {} specifiedType: const FullType(NextcloudUserStatusStatus1),
assert( )! as NextcloudUserStatusStatus1,
[result._userStatusClearAt, result._$int].where((final x) => x != null).isNotEmpty,
'Need oneOf for ${result._data}',
); );
return result.build(); return result.build();
} }
} }
abstract class NextcloudUserStatusStatus implements Built<NextcloudUserStatusStatus, NextcloudUserStatusStatusBuilder> {
factory NextcloudUserStatusStatus([final void Function(NextcloudUserStatusStatusBuilder)? b]) =
_$NextcloudUserStatusStatus;
const NextcloudUserStatusStatus._();
factory NextcloudUserStatusStatus.fromJson(final Map<String, dynamic> json) =>
jsonSerializers.deserializeWith(serializer, json)!;
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
String get userId;
String? get message;
String? get messageId;
bool get messageIsPredefined;
String? get icon;
NextcloudUserStatusStatus_ClearAt? get clearAt;
NextcloudUserStatusType get status;
bool get statusIsUserDefined;
static Serializer<NextcloudUserStatusStatus> get serializer => _$nextcloudUserStatusStatusSerializer;
}
abstract class NextcloudUserStatusGetStatus_Ocs_Data abstract class NextcloudUserStatusGetStatus_Ocs_Data
implements Built<NextcloudUserStatusGetStatus_Ocs_Data, NextcloudUserStatusGetStatus_Ocs_DataBuilder> { implements Built<NextcloudUserStatusGetStatus_Ocs_Data, NextcloudUserStatusGetStatus_Ocs_DataBuilder> {
factory NextcloudUserStatusGetStatus_Ocs_Data([ factory NextcloudUserStatusGetStatus_Ocs_Data([
@ -4950,6 +4939,69 @@ abstract class NextcloudUserStatusPredefinedStatuses
_$nextcloudUserStatusPredefinedStatusesSerializer; _$nextcloudUserStatusPredefinedStatusesSerializer;
} }
abstract class NextcloudUserStatusHeartbeat_Ocs_Data
implements Built<NextcloudUserStatusHeartbeat_Ocs_Data, NextcloudUserStatusHeartbeat_Ocs_DataBuilder> {
factory NextcloudUserStatusHeartbeat_Ocs_Data([
final void Function(NextcloudUserStatusHeartbeat_Ocs_DataBuilder)? b,
]) = _$NextcloudUserStatusHeartbeat_Ocs_Data;
const NextcloudUserStatusHeartbeat_Ocs_Data._();
JsonObject get data;
BuiltList<JsonObject>? get builtListJsonObject;
NextcloudUserStatusStatus? get userStatusStatus;
static NextcloudUserStatusHeartbeat_Ocs_Data fromJson(final Object json) =>
jsonSerializers.deserializeWith(serializer, json)!;
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
@BuiltValueSerializer(custom: true)
static Serializer<NextcloudUserStatusHeartbeat_Ocs_Data> get serializer =>
_$NextcloudUserStatusHeartbeat_Ocs_DataSerializer();
}
class _$NextcloudUserStatusHeartbeat_Ocs_DataSerializer
implements PrimitiveSerializer<NextcloudUserStatusHeartbeat_Ocs_Data> {
@override
final Iterable<Type> types = const [NextcloudUserStatusHeartbeat_Ocs_Data, _$NextcloudUserStatusHeartbeat_Ocs_Data];
@override
final String wireName = 'NextcloudUserStatusHeartbeat_Ocs_Data';
@override
Object serialize(
final Serializers serializers,
final NextcloudUserStatusHeartbeat_Ocs_Data object, {
final FullType specifiedType = FullType.unspecified,
}) =>
object.data.value;
@override
NextcloudUserStatusHeartbeat_Ocs_Data deserialize(
final Serializers serializers,
final Object data, {
final FullType specifiedType = FullType.unspecified,
}) {
final result = NextcloudUserStatusHeartbeat_Ocs_DataBuilder()..data = JsonObject(data);
try {
result._builtListJsonObject = (jsonSerializers.deserialize(
data,
specifiedType: const FullType(BuiltList, [FullType(JsonObject)]),
)! as BuiltList<JsonObject>)
.toBuilder();
} catch (_) {}
try {
result._userStatusStatus = (jsonSerializers.deserialize(
data,
specifiedType: const FullType(NextcloudUserStatusStatus),
)! as NextcloudUserStatusStatus)
.toBuilder();
} catch (_) {}
assert(
[result._builtListJsonObject, result._userStatusStatus].where((final x) => x != null).isNotEmpty,
'Need oneOf for ${result._data}',
);
return result.build();
}
}
abstract class NextcloudUserStatusHeartbeat_Ocs abstract class NextcloudUserStatusHeartbeat_Ocs
implements Built<NextcloudUserStatusHeartbeat_Ocs, NextcloudUserStatusHeartbeat_OcsBuilder> { implements Built<NextcloudUserStatusHeartbeat_Ocs, NextcloudUserStatusHeartbeat_OcsBuilder> {
factory NextcloudUserStatusHeartbeat_Ocs([final void Function(NextcloudUserStatusHeartbeat_OcsBuilder)? b]) = factory NextcloudUserStatusHeartbeat_Ocs([final void Function(NextcloudUserStatusHeartbeat_OcsBuilder)? b]) =
@ -4961,7 +5013,7 @@ abstract class NextcloudUserStatusHeartbeat_Ocs
Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>; Map<String, dynamic> toJson() => jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
NextcloudOCSMeta get meta; NextcloudOCSMeta get meta;
NextcloudUserStatusStatus get data; NextcloudUserStatusHeartbeat_Ocs_Data get data;
static Serializer<NextcloudUserStatusHeartbeat_Ocs> get serializer => _$nextcloudUserStatusHeartbeatOcsSerializer; static Serializer<NextcloudUserStatusHeartbeat_Ocs> get serializer => _$nextcloudUserStatusHeartbeatOcsSerializer;
} }
@ -5112,7 +5164,7 @@ abstract class NextcloudNotificationsNotificationDecryptedSubject
NextcloudUserStatusGetPublicStatus_Ocs, NextcloudUserStatusGetPublicStatus_Ocs,
NextcloudUserStatusGetStatus, NextcloudUserStatusGetStatus,
NextcloudUserStatusGetStatus_Ocs, NextcloudUserStatusGetStatus_Ocs,
NextcloudUserStatusStatus, NextcloudUserStatusStatus1,
NextcloudUserStatusPredefinedStatuses, NextcloudUserStatusPredefinedStatuses,
NextcloudUserStatusPredefinedStatuses_Ocs, NextcloudUserStatusPredefinedStatuses_Ocs,
NextcloudUserStatusPredefinedStatus, NextcloudUserStatusPredefinedStatus,

452
packages/nextcloud/lib/src/nextcloud.openapi.g.dart

@ -225,6 +225,7 @@ Serializers _$serializers = (Serializers().toBuilder()
..add(NextcloudUserStatusGetStatus_Ocs_Data.serializer) ..add(NextcloudUserStatusGetStatus_Ocs_Data.serializer)
..add(NextcloudUserStatusHeartbeat.serializer) ..add(NextcloudUserStatusHeartbeat.serializer)
..add(NextcloudUserStatusHeartbeat_Ocs.serializer) ..add(NextcloudUserStatusHeartbeat_Ocs.serializer)
..add(NextcloudUserStatusHeartbeat_Ocs_Data.serializer)
..add(NextcloudUserStatusPredefinedStatus.serializer) ..add(NextcloudUserStatusPredefinedStatus.serializer)
..add(NextcloudUserStatusPredefinedStatus_ClearAt.serializer) ..add(NextcloudUserStatusPredefinedStatus_ClearAt.serializer)
..add(NextcloudUserStatusPredefinedStatuses.serializer) ..add(NextcloudUserStatusPredefinedStatuses.serializer)
@ -232,12 +233,13 @@ Serializers _$serializers = (Serializers().toBuilder()
..add(NextcloudUserStatusPublicStatus.serializer) ..add(NextcloudUserStatusPublicStatus.serializer)
..add(NextcloudUserStatusPublicStatus_ClearAt.serializer) ..add(NextcloudUserStatusPublicStatus_ClearAt.serializer)
..add(NextcloudUserStatusStatus.serializer) ..add(NextcloudUserStatusStatus.serializer)
..add(NextcloudUserStatusStatus_ClearAt.serializer) ..add(NextcloudUserStatusStatus1.serializer)
..add(NextcloudUserStatusType.serializer) ..add(NextcloudUserStatusType.serializer)
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>()) ..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>())
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>()) ..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>())
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>()) ..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>())
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>()) ..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>())
..addBuilderFactory(const FullType(BuiltList, [FullType(JsonObject)]), () => ListBuilder<JsonObject>())
..addBuilderFactory(const FullType(BuiltList, [FullType(NextcloudCoreAutocompleteResult_Ocs_Data)]), ..addBuilderFactory(const FullType(BuiltList, [FullType(NextcloudCoreAutocompleteResult_Ocs_Data)]),
() => ListBuilder<NextcloudCoreAutocompleteResult_Ocs_Data>()) () => ListBuilder<NextcloudCoreAutocompleteResult_Ocs_Data>())
..addBuilderFactory(const FullType(BuiltList, [FullType(NextcloudCoreNavigationApps_Ocs_Data)]), ..addBuilderFactory(const FullType(BuiltList, [FullType(NextcloudCoreNavigationApps_Ocs_Data)]),
@ -548,7 +550,8 @@ Serializer<NextcloudUserStatusGetPublicStatus_Ocs> _$nextcloudUserStatusGetPubli
_$NextcloudUserStatusGetPublicStatus_OcsSerializer(); _$NextcloudUserStatusGetPublicStatus_OcsSerializer();
Serializer<NextcloudUserStatusGetPublicStatus> _$nextcloudUserStatusGetPublicStatusSerializer = Serializer<NextcloudUserStatusGetPublicStatus> _$nextcloudUserStatusGetPublicStatusSerializer =
_$NextcloudUserStatusGetPublicStatusSerializer(); _$NextcloudUserStatusGetPublicStatusSerializer();
Serializer<NextcloudUserStatusStatus> _$nextcloudUserStatusStatusSerializer = _$NextcloudUserStatusStatusSerializer(); Serializer<NextcloudUserStatusStatus1> _$nextcloudUserStatusStatus1Serializer =
_$NextcloudUserStatusStatus1Serializer();
Serializer<NextcloudUserStatusGetStatus_Ocs> _$nextcloudUserStatusGetStatusOcsSerializer = Serializer<NextcloudUserStatusGetStatus_Ocs> _$nextcloudUserStatusGetStatusOcsSerializer =
_$NextcloudUserStatusGetStatus_OcsSerializer(); _$NextcloudUserStatusGetStatus_OcsSerializer();
Serializer<NextcloudUserStatusGetStatus> _$nextcloudUserStatusGetStatusSerializer = Serializer<NextcloudUserStatusGetStatus> _$nextcloudUserStatusGetStatusSerializer =
@ -7380,57 +7383,35 @@ class _$NextcloudUserStatusGetPublicStatusSerializer
} }
} }
class _$NextcloudUserStatusStatusSerializer implements StructuredSerializer<NextcloudUserStatusStatus> { class _$NextcloudUserStatusStatus1Serializer implements StructuredSerializer<NextcloudUserStatusStatus1> {
@override @override
final Iterable<Type> types = const [NextcloudUserStatusStatus, _$NextcloudUserStatusStatus]; final Iterable<Type> types = const [NextcloudUserStatusStatus1, _$NextcloudUserStatusStatus1];
@override @override
final String wireName = 'NextcloudUserStatusStatus'; final String wireName = 'NextcloudUserStatusStatus1';
@override @override
Iterable<Object?> serialize(Serializers serializers, NextcloudUserStatusStatus object, Iterable<Object?> serialize(Serializers serializers, NextcloudUserStatusStatus1 object,
{FullType specifiedType = FullType.unspecified}) { {FullType specifiedType = FullType.unspecified}) {
final result = <Object?>[ final result = <Object?>[
'userId',
serializers.serialize(object.userId, specifiedType: const FullType(String)),
'messageIsPredefined', 'messageIsPredefined',
serializers.serialize(object.messageIsPredefined, specifiedType: const FullType(bool)), serializers.serialize(object.messageIsPredefined, specifiedType: const FullType(bool)),
'status',
serializers.serialize(object.status, specifiedType: const FullType(NextcloudUserStatusType)),
'statusIsUserDefined', 'statusIsUserDefined',
serializers.serialize(object.statusIsUserDefined, specifiedType: const FullType(bool)), serializers.serialize(object.statusIsUserDefined, specifiedType: const FullType(bool)),
]; ];
Object? value; Object? value;
value = object.message;
if (value != null) {
result
..add('message')
..add(serializers.serialize(value, specifiedType: const FullType(String)));
}
value = object.messageId; value = object.messageId;
if (value != null) { if (value != null) {
result result
..add('messageId') ..add('messageId')
..add(serializers.serialize(value, specifiedType: const FullType(String))); ..add(serializers.serialize(value, specifiedType: const FullType(String)));
} }
value = object.icon;
if (value != null) {
result
..add('icon')
..add(serializers.serialize(value, specifiedType: const FullType(String)));
}
value = object.clearAt;
if (value != null) {
result
..add('clearAt')
..add(serializers.serialize(value, specifiedType: const FullType(NextcloudUserStatusStatus_ClearAt)));
}
return result; return result;
} }
@override @override
NextcloudUserStatusStatus deserialize(Serializers serializers, Iterable<Object?> serialized, NextcloudUserStatusStatus1 deserialize(Serializers serializers, Iterable<Object?> serialized,
{FullType specifiedType = FullType.unspecified}) { {FullType specifiedType = FullType.unspecified}) {
final result = NextcloudUserStatusStatusBuilder(); final result = NextcloudUserStatusStatus1Builder();
final iterator = serialized.iterator; final iterator = serialized.iterator;
while (iterator.moveNext()) { while (iterator.moveNext()) {
@ -7438,29 +7419,12 @@ class _$NextcloudUserStatusStatusSerializer implements StructuredSerializer<Next
iterator.moveNext(); iterator.moveNext();
final Object? value = iterator.current; final Object? value = iterator.current;
switch (key) { switch (key) {
case 'userId':
result.userId = serializers.deserialize(value, specifiedType: const FullType(String))! as String;
break;
case 'message':
result.message = serializers.deserialize(value, specifiedType: const FullType(String)) as String?;
break;
case 'messageId': case 'messageId':
result.messageId = serializers.deserialize(value, specifiedType: const FullType(String)) as String?; result.messageId = serializers.deserialize(value, specifiedType: const FullType(String)) as String?;
break; break;
case 'messageIsPredefined': case 'messageIsPredefined':
result.messageIsPredefined = serializers.deserialize(value, specifiedType: const FullType(bool))! as bool; result.messageIsPredefined = serializers.deserialize(value, specifiedType: const FullType(bool))! as bool;
break; break;
case 'icon':
result.icon = serializers.deserialize(value, specifiedType: const FullType(String)) as String?;
break;
case 'clearAt':
result.clearAt.replace(serializers.deserialize(value,
specifiedType: const FullType(NextcloudUserStatusStatus_ClearAt))! as NextcloudUserStatusStatus_ClearAt);
break;
case 'status':
result.status = serializers.deserialize(value, specifiedType: const FullType(NextcloudUserStatusType))!
as NextcloudUserStatusType;
break;
case 'statusIsUserDefined': case 'statusIsUserDefined':
result.statusIsUserDefined = serializers.deserialize(value, specifiedType: const FullType(bool))! as bool; result.statusIsUserDefined = serializers.deserialize(value, specifiedType: const FullType(bool))! as bool;
break; break;
@ -7721,7 +7685,7 @@ class _$NextcloudUserStatusHeartbeat_OcsSerializer implements StructuredSerializ
'meta', 'meta',
serializers.serialize(object.meta, specifiedType: const FullType(NextcloudOCSMeta)), serializers.serialize(object.meta, specifiedType: const FullType(NextcloudOCSMeta)),
'data', 'data',
serializers.serialize(object.data, specifiedType: const FullType(NextcloudUserStatusStatus)), serializers.serialize(object.data, specifiedType: const FullType(NextcloudUserStatusHeartbeat_Ocs_Data)),
]; ];
return result; return result;
@ -7743,8 +7707,9 @@ class _$NextcloudUserStatusHeartbeat_OcsSerializer implements StructuredSerializ
serializers.deserialize(value, specifiedType: const FullType(NextcloudOCSMeta))! as NextcloudOCSMeta); serializers.deserialize(value, specifiedType: const FullType(NextcloudOCSMeta))! as NextcloudOCSMeta);
break; break;
case 'data': case 'data':
result.data.replace(serializers.deserialize(value, specifiedType: const FullType(NextcloudUserStatusStatus))! result.data.replace(
as NextcloudUserStatusStatus); serializers.deserialize(value, specifiedType: const FullType(NextcloudUserStatusHeartbeat_Ocs_Data))!
as NextcloudUserStatusHeartbeat_Ocs_Data);
break; break;
} }
} }
@ -21799,120 +21764,110 @@ class NextcloudUserStatusGetPublicStatusBuilder
} }
} }
class _$NextcloudUserStatusStatus_ClearAt extends NextcloudUserStatusStatus_ClearAt { class _$NextcloudUserStatusStatus1 extends NextcloudUserStatusStatus1 {
@override @override
final JsonObject data; final String? messageId;
@override @override
final NextcloudUserStatusClearAt? userStatusClearAt; final bool messageIsPredefined;
@override @override
final int? $int; final bool statusIsUserDefined;
factory _$NextcloudUserStatusStatus_ClearAt([void Function(NextcloudUserStatusStatus_ClearAtBuilder)? updates]) => factory _$NextcloudUserStatusStatus1([void Function(NextcloudUserStatusStatus1Builder)? updates]) =>
(NextcloudUserStatusStatus_ClearAtBuilder()..update(updates))._build(); (NextcloudUserStatusStatus1Builder()..update(updates))._build();
_$NextcloudUserStatusStatus_ClearAt._({required this.data, this.userStatusClearAt, this.$int}) : super._() { _$NextcloudUserStatusStatus1._({this.messageId, required this.messageIsPredefined, required this.statusIsUserDefined})
BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusStatus_ClearAt', 'data'); : super._() {
BuiltValueNullFieldError.checkNotNull(messageIsPredefined, r'NextcloudUserStatusStatus1', 'messageIsPredefined');
BuiltValueNullFieldError.checkNotNull(statusIsUserDefined, r'NextcloudUserStatusStatus1', 'statusIsUserDefined');
} }
@override @override
NextcloudUserStatusStatus_ClearAt rebuild(void Function(NextcloudUserStatusStatus_ClearAtBuilder) updates) => NextcloudUserStatusStatus1 rebuild(void Function(NextcloudUserStatusStatus1Builder) updates) =>
(toBuilder()..update(updates)).build(); (toBuilder()..update(updates)).build();
@override @override
NextcloudUserStatusStatus_ClearAtBuilder toBuilder() => NextcloudUserStatusStatus_ClearAtBuilder()..replace(this); NextcloudUserStatusStatus1Builder toBuilder() => NextcloudUserStatusStatus1Builder()..replace(this);
@override @override
bool operator ==(Object other) { bool operator ==(Object other) {
if (identical(other, this)) return true; if (identical(other, this)) return true;
return other is NextcloudUserStatusStatus_ClearAt && return other is NextcloudUserStatusStatus1 &&
data == other.data && messageId == other.messageId &&
userStatusClearAt == other.userStatusClearAt && messageIsPredefined == other.messageIsPredefined &&
$int == other.$int; statusIsUserDefined == other.statusIsUserDefined;
} }
@override @override
int get hashCode { int get hashCode {
var _$hash = 0; var _$hash = 0;
_$hash = $jc(_$hash, data.hashCode); _$hash = $jc(_$hash, messageId.hashCode);
_$hash = $jc(_$hash, userStatusClearAt.hashCode); _$hash = $jc(_$hash, messageIsPredefined.hashCode);
_$hash = $jc(_$hash, $int.hashCode); _$hash = $jc(_$hash, statusIsUserDefined.hashCode);
_$hash = $jf(_$hash); _$hash = $jf(_$hash);
return _$hash; return _$hash;
} }
@override @override
String toString() { String toString() {
return (newBuiltValueToStringHelper(r'NextcloudUserStatusStatus_ClearAt') return (newBuiltValueToStringHelper(r'NextcloudUserStatusStatus1')
..add('data', data) ..add('messageId', messageId)
..add('userStatusClearAt', userStatusClearAt) ..add('messageIsPredefined', messageIsPredefined)
..add('\$int', $int)) ..add('statusIsUserDefined', statusIsUserDefined))
.toString(); .toString();
} }
} }
class NextcloudUserStatusStatus_ClearAtBuilder class NextcloudUserStatusStatus1Builder
implements Builder<NextcloudUserStatusStatus_ClearAt, NextcloudUserStatusStatus_ClearAtBuilder> { implements Builder<NextcloudUserStatusStatus1, NextcloudUserStatusStatus1Builder> {
_$NextcloudUserStatusStatus_ClearAt? _$v; _$NextcloudUserStatusStatus1? _$v;
JsonObject? _data; String? _messageId;
JsonObject? get data => _$this._data; String? get messageId => _$this._messageId;
set data(JsonObject? data) => _$this._data = data; set messageId(String? messageId) => _$this._messageId = messageId;
NextcloudUserStatusClearAtBuilder? _userStatusClearAt; bool? _messageIsPredefined;
NextcloudUserStatusClearAtBuilder get userStatusClearAt => bool? get messageIsPredefined => _$this._messageIsPredefined;
_$this._userStatusClearAt ??= NextcloudUserStatusClearAtBuilder(); set messageIsPredefined(bool? messageIsPredefined) => _$this._messageIsPredefined = messageIsPredefined;
set userStatusClearAt(NextcloudUserStatusClearAtBuilder? userStatusClearAt) =>
_$this._userStatusClearAt = userStatusClearAt;
int? _$int; bool? _statusIsUserDefined;
int? get $int => _$this._$int; bool? get statusIsUserDefined => _$this._statusIsUserDefined;
set $int(int? $int) => _$this._$int = $int; set statusIsUserDefined(bool? statusIsUserDefined) => _$this._statusIsUserDefined = statusIsUserDefined;
NextcloudUserStatusStatus_ClearAtBuilder(); NextcloudUserStatusStatus1Builder();
NextcloudUserStatusStatus_ClearAtBuilder get _$this { NextcloudUserStatusStatus1Builder get _$this {
final $v = _$v; final $v = _$v;
if ($v != null) { if ($v != null) {
_data = $v.data; _messageId = $v.messageId;
_userStatusClearAt = $v.userStatusClearAt?.toBuilder(); _messageIsPredefined = $v.messageIsPredefined;
_$int = $v.$int; _statusIsUserDefined = $v.statusIsUserDefined;
_$v = null; _$v = null;
} }
return this; return this;
} }
@override @override
void replace(NextcloudUserStatusStatus_ClearAt other) { void replace(NextcloudUserStatusStatus1 other) {
ArgumentError.checkNotNull(other, 'other'); ArgumentError.checkNotNull(other, 'other');
_$v = other as _$NextcloudUserStatusStatus_ClearAt; _$v = other as _$NextcloudUserStatusStatus1;
} }
@override @override
void update(void Function(NextcloudUserStatusStatus_ClearAtBuilder)? updates) { void update(void Function(NextcloudUserStatusStatus1Builder)? updates) {
if (updates != null) updates(this); if (updates != null) updates(this);
} }
@override @override
NextcloudUserStatusStatus_ClearAt build() => _build(); NextcloudUserStatusStatus1 build() => _build();
_$NextcloudUserStatusStatus_ClearAt _build() { _$NextcloudUserStatusStatus1 _build() {
_$NextcloudUserStatusStatus_ClearAt _$result; final _$result = _$v ??
try { _$NextcloudUserStatusStatus1._(
_$result = _$v ?? messageId: messageId,
_$NextcloudUserStatusStatus_ClearAt._( messageIsPredefined: BuiltValueNullFieldError.checkNotNull(
data: BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusStatus_ClearAt', 'data'), messageIsPredefined, r'NextcloudUserStatusStatus1', 'messageIsPredefined'),
userStatusClearAt: _userStatusClearAt?.build(), statusIsUserDefined: BuiltValueNullFieldError.checkNotNull(
$int: $int); statusIsUserDefined, r'NextcloudUserStatusStatus1', 'statusIsUserDefined'));
} catch (_) {
late String _$failedField;
try {
_$failedField = 'userStatusClearAt';
_userStatusClearAt?.build();
} catch (e) {
throw BuiltValueNestedFieldError(r'NextcloudUserStatusStatus_ClearAt', _$failedField, e.toString());
}
rethrow;
}
replace(_$result); replace(_$result);
return _$result; return _$result;
} }
@ -21920,39 +21875,22 @@ class NextcloudUserStatusStatus_ClearAtBuilder
class _$NextcloudUserStatusStatus extends NextcloudUserStatusStatus { class _$NextcloudUserStatusStatus extends NextcloudUserStatusStatus {
@override @override
final String userId; final JsonObject data;
@override
final String? message;
@override
final String? messageId;
@override
final bool messageIsPredefined;
@override
final String? icon;
@override
final NextcloudUserStatusStatus_ClearAt? clearAt;
@override @override
final NextcloudUserStatusType status; final NextcloudUserStatusPublicStatus userStatusPublicStatus;
@override @override
final bool statusIsUserDefined; final NextcloudUserStatusStatus1 userStatusStatus1;
factory _$NextcloudUserStatusStatus([void Function(NextcloudUserStatusStatusBuilder)? updates]) => factory _$NextcloudUserStatusStatus([void Function(NextcloudUserStatusStatusBuilder)? updates]) =>
(NextcloudUserStatusStatusBuilder()..update(updates))._build(); (NextcloudUserStatusStatusBuilder()..update(updates))._build();
_$NextcloudUserStatusStatus._( _$NextcloudUserStatusStatus._(
{required this.userId, {required this.data, required this.userStatusPublicStatus, required this.userStatusStatus1})
this.message,
this.messageId,
required this.messageIsPredefined,
this.icon,
this.clearAt,
required this.status,
required this.statusIsUserDefined})
: super._() { : super._() {
BuiltValueNullFieldError.checkNotNull(userId, r'NextcloudUserStatusStatus', 'userId'); BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusStatus', 'data');
BuiltValueNullFieldError.checkNotNull(messageIsPredefined, r'NextcloudUserStatusStatus', 'messageIsPredefined'); BuiltValueNullFieldError.checkNotNull(
BuiltValueNullFieldError.checkNotNull(status, r'NextcloudUserStatusStatus', 'status'); userStatusPublicStatus, r'NextcloudUserStatusStatus', 'userStatusPublicStatus');
BuiltValueNullFieldError.checkNotNull(statusIsUserDefined, r'NextcloudUserStatusStatus', 'statusIsUserDefined'); BuiltValueNullFieldError.checkNotNull(userStatusStatus1, r'NextcloudUserStatusStatus', 'userStatusStatus1');
} }
@override @override
@ -21966,27 +21904,17 @@ class _$NextcloudUserStatusStatus extends NextcloudUserStatusStatus {
bool operator ==(Object other) { bool operator ==(Object other) {
if (identical(other, this)) return true; if (identical(other, this)) return true;
return other is NextcloudUserStatusStatus && return other is NextcloudUserStatusStatus &&
userId == other.userId && data == other.data &&
message == other.message && userStatusPublicStatus == other.userStatusPublicStatus &&
messageId == other.messageId && userStatusStatus1 == other.userStatusStatus1;
messageIsPredefined == other.messageIsPredefined &&
icon == other.icon &&
clearAt == other.clearAt &&
status == other.status &&
statusIsUserDefined == other.statusIsUserDefined;
} }
@override @override
int get hashCode { int get hashCode {
var _$hash = 0; var _$hash = 0;
_$hash = $jc(_$hash, userId.hashCode); _$hash = $jc(_$hash, data.hashCode);
_$hash = $jc(_$hash, message.hashCode); _$hash = $jc(_$hash, userStatusPublicStatus.hashCode);
_$hash = $jc(_$hash, messageId.hashCode); _$hash = $jc(_$hash, userStatusStatus1.hashCode);
_$hash = $jc(_$hash, messageIsPredefined.hashCode);
_$hash = $jc(_$hash, icon.hashCode);
_$hash = $jc(_$hash, clearAt.hashCode);
_$hash = $jc(_$hash, status.hashCode);
_$hash = $jc(_$hash, statusIsUserDefined.hashCode);
_$hash = $jf(_$hash); _$hash = $jf(_$hash);
return _$hash; return _$hash;
} }
@ -21994,14 +21922,9 @@ class _$NextcloudUserStatusStatus extends NextcloudUserStatusStatus {
@override @override
String toString() { String toString() {
return (newBuiltValueToStringHelper(r'NextcloudUserStatusStatus') return (newBuiltValueToStringHelper(r'NextcloudUserStatusStatus')
..add('userId', userId) ..add('data', data)
..add('message', message) ..add('userStatusPublicStatus', userStatusPublicStatus)
..add('messageId', messageId) ..add('userStatusStatus1', userStatusStatus1))
..add('messageIsPredefined', messageIsPredefined)
..add('icon', icon)
..add('clearAt', clearAt)
..add('status', status)
..add('statusIsUserDefined', statusIsUserDefined))
.toString(); .toString();
} }
} }
@ -22009,52 +21932,30 @@ class _$NextcloudUserStatusStatus extends NextcloudUserStatusStatus {
class NextcloudUserStatusStatusBuilder implements Builder<NextcloudUserStatusStatus, NextcloudUserStatusStatusBuilder> { class NextcloudUserStatusStatusBuilder implements Builder<NextcloudUserStatusStatus, NextcloudUserStatusStatusBuilder> {
_$NextcloudUserStatusStatus? _$v; _$NextcloudUserStatusStatus? _$v;
String? _userId; JsonObject? _data;
String? get userId => _$this._userId; JsonObject? get data => _$this._data;
set userId(String? userId) => _$this._userId = userId; set data(JsonObject? data) => _$this._data = data;
String? _message;
String? get message => _$this._message;
set message(String? message) => _$this._message = message;
String? _messageId;
String? get messageId => _$this._messageId;
set messageId(String? messageId) => _$this._messageId = messageId;
bool? _messageIsPredefined;
bool? get messageIsPredefined => _$this._messageIsPredefined;
set messageIsPredefined(bool? messageIsPredefined) => _$this._messageIsPredefined = messageIsPredefined;
String? _icon;
String? get icon => _$this._icon;
set icon(String? icon) => _$this._icon = icon;
NextcloudUserStatusStatus_ClearAtBuilder? _clearAt;
NextcloudUserStatusStatus_ClearAtBuilder get clearAt =>
_$this._clearAt ??= NextcloudUserStatusStatus_ClearAtBuilder();
set clearAt(NextcloudUserStatusStatus_ClearAtBuilder? clearAt) => _$this._clearAt = clearAt;
NextcloudUserStatusType? _status; NextcloudUserStatusPublicStatusBuilder? _userStatusPublicStatus;
NextcloudUserStatusType? get status => _$this._status; NextcloudUserStatusPublicStatusBuilder get userStatusPublicStatus =>
set status(NextcloudUserStatusType? status) => _$this._status = status; _$this._userStatusPublicStatus ??= NextcloudUserStatusPublicStatusBuilder();
set userStatusPublicStatus(NextcloudUserStatusPublicStatusBuilder? userStatusPublicStatus) =>
_$this._userStatusPublicStatus = userStatusPublicStatus;
bool? _statusIsUserDefined; NextcloudUserStatusStatus1Builder? _userStatusStatus1;
bool? get statusIsUserDefined => _$this._statusIsUserDefined; NextcloudUserStatusStatus1Builder get userStatusStatus1 =>
set statusIsUserDefined(bool? statusIsUserDefined) => _$this._statusIsUserDefined = statusIsUserDefined; _$this._userStatusStatus1 ??= NextcloudUserStatusStatus1Builder();
set userStatusStatus1(NextcloudUserStatusStatus1Builder? userStatusStatus1) =>
_$this._userStatusStatus1 = userStatusStatus1;
NextcloudUserStatusStatusBuilder(); NextcloudUserStatusStatusBuilder();
NextcloudUserStatusStatusBuilder get _$this { NextcloudUserStatusStatusBuilder get _$this {
final $v = _$v; final $v = _$v;
if ($v != null) { if ($v != null) {
_userId = $v.userId; _data = $v.data;
_message = $v.message; _userStatusPublicStatus = $v.userStatusPublicStatus.toBuilder();
_messageId = $v.messageId; _userStatusStatus1 = $v.userStatusStatus1.toBuilder();
_messageIsPredefined = $v.messageIsPredefined;
_icon = $v.icon;
_clearAt = $v.clearAt?.toBuilder();
_status = $v.status;
_statusIsUserDefined = $v.statusIsUserDefined;
_$v = null; _$v = null;
} }
return this; return this;
@ -22079,21 +21980,16 @@ class NextcloudUserStatusStatusBuilder implements Builder<NextcloudUserStatusSta
try { try {
_$result = _$v ?? _$result = _$v ??
_$NextcloudUserStatusStatus._( _$NextcloudUserStatusStatus._(
userId: BuiltValueNullFieldError.checkNotNull(userId, r'NextcloudUserStatusStatus', 'userId'), data: BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusStatus', 'data'),
message: message, userStatusPublicStatus: userStatusPublicStatus.build(),
messageId: messageId, userStatusStatus1: userStatusStatus1.build());
messageIsPredefined: BuiltValueNullFieldError.checkNotNull(
messageIsPredefined, r'NextcloudUserStatusStatus', 'messageIsPredefined'),
icon: icon,
clearAt: _clearAt?.build(),
status: BuiltValueNullFieldError.checkNotNull(status, r'NextcloudUserStatusStatus', 'status'),
statusIsUserDefined: BuiltValueNullFieldError.checkNotNull(
statusIsUserDefined, r'NextcloudUserStatusStatus', 'statusIsUserDefined'));
} catch (_) { } catch (_) {
late String _$failedField; late String _$failedField;
try { try {
_$failedField = 'clearAt'; _$failedField = 'userStatusPublicStatus';
_clearAt?.build(); userStatusPublicStatus.build();
_$failedField = 'userStatusStatus1';
userStatusStatus1.build();
} catch (e) { } catch (e) {
throw BuiltValueNestedFieldError(r'NextcloudUserStatusStatus', _$failedField, e.toString()); throw BuiltValueNestedFieldError(r'NextcloudUserStatusStatus', _$failedField, e.toString());
} }
@ -22881,11 +22777,136 @@ class NextcloudUserStatusPredefinedStatusesBuilder
} }
} }
class _$NextcloudUserStatusHeartbeat_Ocs_Data extends NextcloudUserStatusHeartbeat_Ocs_Data {
@override
final JsonObject data;
@override
final BuiltList<JsonObject>? builtListJsonObject;
@override
final NextcloudUserStatusStatus? userStatusStatus;
factory _$NextcloudUserStatusHeartbeat_Ocs_Data(
[void Function(NextcloudUserStatusHeartbeat_Ocs_DataBuilder)? updates]) =>
(NextcloudUserStatusHeartbeat_Ocs_DataBuilder()..update(updates))._build();
_$NextcloudUserStatusHeartbeat_Ocs_Data._({required this.data, this.builtListJsonObject, this.userStatusStatus})
: super._() {
BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusHeartbeat_Ocs_Data', 'data');
}
@override
NextcloudUserStatusHeartbeat_Ocs_Data rebuild(void Function(NextcloudUserStatusHeartbeat_Ocs_DataBuilder) updates) =>
(toBuilder()..update(updates)).build();
@override
NextcloudUserStatusHeartbeat_Ocs_DataBuilder toBuilder() =>
NextcloudUserStatusHeartbeat_Ocs_DataBuilder()..replace(this);
@override
bool operator ==(Object other) {
if (identical(other, this)) return true;
return other is NextcloudUserStatusHeartbeat_Ocs_Data &&
data == other.data &&
builtListJsonObject == other.builtListJsonObject &&
userStatusStatus == other.userStatusStatus;
}
@override
int get hashCode {
var _$hash = 0;
_$hash = $jc(_$hash, data.hashCode);
_$hash = $jc(_$hash, builtListJsonObject.hashCode);
_$hash = $jc(_$hash, userStatusStatus.hashCode);
_$hash = $jf(_$hash);
return _$hash;
}
@override
String toString() {
return (newBuiltValueToStringHelper(r'NextcloudUserStatusHeartbeat_Ocs_Data')
..add('data', data)
..add('builtListJsonObject', builtListJsonObject)
..add('userStatusStatus', userStatusStatus))
.toString();
}
}
class NextcloudUserStatusHeartbeat_Ocs_DataBuilder
implements Builder<NextcloudUserStatusHeartbeat_Ocs_Data, NextcloudUserStatusHeartbeat_Ocs_DataBuilder> {
_$NextcloudUserStatusHeartbeat_Ocs_Data? _$v;
JsonObject? _data;
JsonObject? get data => _$this._data;
set data(JsonObject? data) => _$this._data = data;
ListBuilder<JsonObject>? _builtListJsonObject;
ListBuilder<JsonObject> get builtListJsonObject => _$this._builtListJsonObject ??= ListBuilder<JsonObject>();
set builtListJsonObject(ListBuilder<JsonObject>? builtListJsonObject) =>
_$this._builtListJsonObject = builtListJsonObject;
NextcloudUserStatusStatusBuilder? _userStatusStatus;
NextcloudUserStatusStatusBuilder get userStatusStatus =>
_$this._userStatusStatus ??= NextcloudUserStatusStatusBuilder();
set userStatusStatus(NextcloudUserStatusStatusBuilder? userStatusStatus) =>
_$this._userStatusStatus = userStatusStatus;
NextcloudUserStatusHeartbeat_Ocs_DataBuilder();
NextcloudUserStatusHeartbeat_Ocs_DataBuilder get _$this {
final $v = _$v;
if ($v != null) {
_data = $v.data;
_builtListJsonObject = $v.builtListJsonObject?.toBuilder();
_userStatusStatus = $v.userStatusStatus?.toBuilder();
_$v = null;
}
return this;
}
@override
void replace(NextcloudUserStatusHeartbeat_Ocs_Data other) {
ArgumentError.checkNotNull(other, 'other');
_$v = other as _$NextcloudUserStatusHeartbeat_Ocs_Data;
}
@override
void update(void Function(NextcloudUserStatusHeartbeat_Ocs_DataBuilder)? updates) {
if (updates != null) updates(this);
}
@override
NextcloudUserStatusHeartbeat_Ocs_Data build() => _build();
_$NextcloudUserStatusHeartbeat_Ocs_Data _build() {
_$NextcloudUserStatusHeartbeat_Ocs_Data _$result;
try {
_$result = _$v ??
_$NextcloudUserStatusHeartbeat_Ocs_Data._(
data: BuiltValueNullFieldError.checkNotNull(data, r'NextcloudUserStatusHeartbeat_Ocs_Data', 'data'),
builtListJsonObject: _builtListJsonObject?.build(),
userStatusStatus: _userStatusStatus?.build());
} catch (_) {
late String _$failedField;
try {
_$failedField = 'builtListJsonObject';
_builtListJsonObject?.build();
_$failedField = 'userStatusStatus';
_userStatusStatus?.build();
} catch (e) {
throw BuiltValueNestedFieldError(r'NextcloudUserStatusHeartbeat_Ocs_Data', _$failedField, e.toString());
}
rethrow;
}
replace(_$result);
return _$result;
}
}
class _$NextcloudUserStatusHeartbeat_Ocs extends NextcloudUserStatusHeartbeat_Ocs { class _$NextcloudUserStatusHeartbeat_Ocs extends NextcloudUserStatusHeartbeat_Ocs {
@override @override
final NextcloudOCSMeta meta; final NextcloudOCSMeta meta;
@override @override
final NextcloudUserStatusStatus data; final NextcloudUserStatusHeartbeat_Ocs_Data data;
factory _$NextcloudUserStatusHeartbeat_Ocs([void Function(NextcloudUserStatusHeartbeat_OcsBuilder)? updates]) => factory _$NextcloudUserStatusHeartbeat_Ocs([void Function(NextcloudUserStatusHeartbeat_OcsBuilder)? updates]) =>
(NextcloudUserStatusHeartbeat_OcsBuilder()..update(updates))._build(); (NextcloudUserStatusHeartbeat_OcsBuilder()..update(updates))._build();
@ -22934,9 +22955,10 @@ class NextcloudUserStatusHeartbeat_OcsBuilder
NextcloudOCSMetaBuilder get meta => _$this._meta ??= NextcloudOCSMetaBuilder(); NextcloudOCSMetaBuilder get meta => _$this._meta ??= NextcloudOCSMetaBuilder();
set meta(NextcloudOCSMetaBuilder? meta) => _$this._meta = meta; set meta(NextcloudOCSMetaBuilder? meta) => _$this._meta = meta;
NextcloudUserStatusStatusBuilder? _data; NextcloudUserStatusHeartbeat_Ocs_DataBuilder? _data;
NextcloudUserStatusStatusBuilder get data => _$this._data ??= NextcloudUserStatusStatusBuilder(); NextcloudUserStatusHeartbeat_Ocs_DataBuilder get data =>
set data(NextcloudUserStatusStatusBuilder? data) => _$this._data = data; _$this._data ??= NextcloudUserStatusHeartbeat_Ocs_DataBuilder();
set data(NextcloudUserStatusHeartbeat_Ocs_DataBuilder? data) => _$this._data = data;
NextcloudUserStatusHeartbeat_OcsBuilder(); NextcloudUserStatusHeartbeat_OcsBuilder();

42
packages/nextcloud/lib/src/nextcloud.openapi.json

@ -1894,47 +1894,29 @@
} }
}, },
"UserStatusStatus": { "UserStatusStatus": {
"allOf": [
{
"$ref": "#/components/schemas/UserStatusPublicStatus"
},
{
"type": "object", "type": "object",
"required": [ "required": [
"userId",
"messageIsPredefined", "messageIsPredefined",
"status",
"statusIsUserDefined" "statusIsUserDefined"
], ],
"properties": { "properties": {
"userId": {
"type": "string"
},
"message": {
"type": "string"
},
"messageId": { "messageId": {
"type": "string" "type": "string"
}, },
"messageIsPredefined": { "messageIsPredefined": {
"type": "boolean" "type": "boolean"
}, },
"icon": {
"type": "string"
},
"clearAt": {
"oneOf": [
{
"$ref": "#/components/schemas/UserStatusClearAt"
},
{
"type": "integer",
"description": "Time as unix timestamp"
}
]
},
"status": {
"$ref": "#/components/schemas/UserStatusType"
},
"statusIsUserDefined": { "statusIsUserDefined": {
"type": "boolean" "type": "boolean"
} }
} }
}
]
}, },
"UserStatusPublicStatus": { "UserStatusPublicStatus": {
"type": "object", "type": "object",
@ -1985,8 +1967,18 @@
"$ref": "#/components/schemas/OCSMeta" "$ref": "#/components/schemas/OCSMeta"
}, },
"data": { "data": {
"oneOf": [
{
"type": "array",
"items": {
"type": "object"
}
},
{
"$ref": "#/components/schemas/UserStatusStatus" "$ref": "#/components/schemas/UserStatusStatus"
} }
]
}
} }
} }
} }

96
packages/nextcloud/test/user_status.dart

@ -51,14 +51,14 @@ Future run(final DockerImage image) async {
test('Set status', () async { test('Set status', () async {
final response = await client.userStatus.setStatus(statusType: NextcloudUserStatusType.online); final response = await client.userStatus.setStatus(statusType: NextcloudUserStatusType.online);
expect(response.ocs.data.userStatusStatus!.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.userStatusStatus!.message, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, null);
expect(response.ocs.data.userStatusStatus!.messageId, null); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, null);
expect(response.ocs.data.userStatusStatus!.messageIsPredefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, false);
expect(response.ocs.data.userStatusStatus!.icon, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, null);
expect(response.ocs.data.userStatusStatus!.clearAt, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt, null);
expect(response.ocs.data.userStatusStatus!.status, NextcloudUserStatusType.online); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.online);
expect(response.ocs.data.userStatusStatus!.statusIsUserDefined, true); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, true);
}); });
test('Get status', () async { test('Get status', () async {
@ -67,14 +67,14 @@ Future run(final DockerImage image) async {
await client.userStatus.setStatus(statusType: NextcloudUserStatusType.online); await client.userStatus.setStatus(statusType: NextcloudUserStatusType.online);
final response = await client.userStatus.getStatus(); final response = await client.userStatus.getStatus();
expect(response.ocs.data.userStatusStatus!.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.userStatusStatus!.message, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, null);
expect(response.ocs.data.userStatusStatus!.messageId, null); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, null);
expect(response.ocs.data.userStatusStatus!.messageIsPredefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, false);
expect(response.ocs.data.userStatusStatus!.icon, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, null);
expect(response.ocs.data.userStatusStatus!.clearAt, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt, null);
expect(response.ocs.data.userStatusStatus!.status, NextcloudUserStatusType.online); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.online);
expect(response.ocs.data.userStatusStatus!.statusIsUserDefined, true); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, true);
}); });
test('Find all statuses', () async { test('Find all statuses', () async {
@ -110,14 +110,14 @@ Future run(final DockerImage image) async {
messageId: 'meeting', messageId: 'meeting',
clearAt: clearAt, clearAt: clearAt,
); );
expect(response.ocs.data.userStatusStatus!.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.userStatusStatus!.message, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, null);
expect(response.ocs.data.userStatusStatus!.messageId, 'meeting'); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, 'meeting');
expect(response.ocs.data.userStatusStatus!.messageIsPredefined, true); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, true);
expect(response.ocs.data.userStatusStatus!.icon, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, null);
expect(response.ocs.data.userStatusStatus!.clearAt!.$int, clearAt); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt!.$int, clearAt);
expect(response.ocs.data.userStatusStatus!.status, NextcloudUserStatusType.offline); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.offline);
expect(response.ocs.data.userStatusStatus!.statusIsUserDefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, false);
}); });
test('Set custom message', () async { test('Set custom message', () async {
@ -127,14 +127,14 @@ Future run(final DockerImage image) async {
message: 'bla', message: 'bla',
clearAt: clearAt, clearAt: clearAt,
); );
expect(response.ocs.data.userStatusStatus!.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.userStatusStatus!.message, 'bla'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, 'bla');
expect(response.ocs.data.userStatusStatus!.messageId, null); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, null);
expect(response.ocs.data.userStatusStatus!.messageIsPredefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, false);
expect(response.ocs.data.userStatusStatus!.icon, '😀'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, '😀');
expect(response.ocs.data.userStatusStatus!.clearAt!.$int, clearAt); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt!.$int, clearAt);
expect(response.ocs.data.userStatusStatus!.status, NextcloudUserStatusType.offline); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.offline);
expect(response.ocs.data.userStatusStatus!.statusIsUserDefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, false);
}); });
test('Clear message', () async { test('Clear message', () async {
@ -147,26 +147,26 @@ Future run(final DockerImage image) async {
await client.userStatus.clearMessage(); await client.userStatus.clearMessage();
final response = await client.userStatus.getStatus(); final response = await client.userStatus.getStatus();
expect(response.ocs.data.userStatusStatus!.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.userStatusStatus!.message, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, null);
expect(response.ocs.data.userStatusStatus!.messageId, null); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, null);
expect(response.ocs.data.userStatusStatus!.messageIsPredefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, false);
expect(response.ocs.data.userStatusStatus!.icon, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, null);
expect(response.ocs.data.userStatusStatus!.clearAt, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt, null);
expect(response.ocs.data.userStatusStatus!.status, NextcloudUserStatusType.offline); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.offline);
expect(response.ocs.data.userStatusStatus!.statusIsUserDefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, false);
}); });
test('Heartbeat', () async { test('Heartbeat', () async {
final response = await client.userStatus.heartbeat(status: NextcloudUserStatusType.online); final response = await client.userStatus.heartbeat(status: NextcloudUserStatusType.online);
expect(response.ocs.data.userId, 'user1'); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.userId, 'user1');
expect(response.ocs.data.message, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.message, null);
expect(response.ocs.data.messageId, null); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageId, null);
expect(response.ocs.data.messageIsPredefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.messageIsPredefined, false);
expect(response.ocs.data.icon, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.icon, null);
expect(response.ocs.data.clearAt, null); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.clearAt, null);
expect(response.ocs.data.status, NextcloudUserStatusType.online); expect(response.ocs.data.userStatusStatus!.userStatusPublicStatus.status, NextcloudUserStatusType.online);
expect(response.ocs.data.statusIsUserDefined, false); expect(response.ocs.data.userStatusStatus!.userStatusStatus1.statusIsUserDefined, false);
}); });
}); });
} }

42
specs/user_status.json

@ -267,47 +267,29 @@
} }
}, },
"Status": { "Status": {
"allOf": [
{
"$ref": "#/components/schemas/PublicStatus"
},
{
"type": "object", "type": "object",
"required": [ "required": [
"userId",
"messageIsPredefined", "messageIsPredefined",
"status",
"statusIsUserDefined" "statusIsUserDefined"
], ],
"properties": { "properties": {
"userId": {
"type": "string"
},
"message": {
"type": "string"
},
"messageId": { "messageId": {
"type": "string" "type": "string"
}, },
"messageIsPredefined": { "messageIsPredefined": {
"type": "boolean" "type": "boolean"
}, },
"icon": {
"type": "string"
},
"clearAt": {
"oneOf": [
{
"$ref": "#/components/schemas/ClearAt"
},
{
"type": "integer",
"description": "Time as unix timestamp"
}
]
},
"status": {
"$ref": "#/components/schemas/Type"
},
"statusIsUserDefined": { "statusIsUserDefined": {
"type": "boolean" "type": "boolean"
} }
} }
}
]
}, },
"PublicStatus": { "PublicStatus": {
"type": "object", "type": "object",
@ -358,8 +340,18 @@
"$ref": "#/components/schemas/OCSMeta" "$ref": "#/components/schemas/OCSMeta"
}, },
"data": { "data": {
"oneOf": [
{
"type": "array",
"items": {
"type": "object"
}
},
{
"$ref": "#/components/schemas/Status" "$ref": "#/components/schemas/Status"
} }
]
}
} }
} }
} }

6
tool/ci.sh

@ -79,7 +79,11 @@ for PKG in ${PKGS}; do
echo 'dart format --output=none --set-exit-if-changed --line-length 120 .' echo 'dart format --output=none --set-exit-if-changed --line-length 120 .'
dart format --output=none --set-exit-if-changed --line-length 120 . || EXIT_CODE=$? dart format --output=none --set-exit-if-changed --line-length 120 . || EXIT_CODE=$?
;; ;;
test) test_0)
echo 'flutter test'
flutter test || EXIT_CODE=$?
;;
test_1)
echo 'dart test' echo 'dart test'
dart test || EXIT_CODE=$? dart test || EXIT_CODE=$?
;; ;;

Loading…
Cancel
Save