diff --git a/lib/logic/bloc/server_jobs/server_jobs_state.dart b/lib/logic/bloc/server_jobs/server_jobs_state.dart index 09f7e9ff..42370d51 100644 --- a/lib/logic/bloc/server_jobs/server_jobs_state.dart +++ b/lib/logic/bloc/server_jobs/server_jobs_state.dart @@ -36,6 +36,15 @@ sealed class ServerJobsState extends Equatable { job.status == JobStatusEnum.error, ); + bool get hasJobsBlockingRebuild => serverJobList.any( + (final job) => + (job.status == JobStatusEnum.running || + job.status == JobStatusEnum.created) && + (job.typeId.contains('system.nixos.rebuild') || + job.typeId.contains('system.nixos.upgrade') || + job.typeId.contains('move')), + ); + @override List get props => [_hashCode]; } diff --git a/lib/ui/components/jobs_content/jobs_content.dart b/lib/ui/components/jobs_content/jobs_content.dart index e3c1c9de..c4e8d43a 100644 --- a/lib/ui/components/jobs_content/jobs_content.dart +++ b/lib/ui/components/jobs_content/jobs_content.dart @@ -53,6 +53,9 @@ class JobsContent extends StatelessWidget { final bool hasRemovableJobs = context.watch().state.hasRemovableJobs; + final bool hasBlockingJobs = + context.watch().state.hasJobsBlockingRebuild; + return BlocBuilder( builder: (final context, final state) { late List widgets; @@ -422,7 +425,9 @@ class JobsContent extends StatelessWidget { ), const SizedBox(height: 16), BrandButton.rised( - onPressed: () => context.read().applyAll(), + onPressed: hasBlockingJobs + ? null + : () => context.read().applyAll(), text: 'jobs.start'.tr(), ), ];