From d0be867aa6731d60dae5b37d0e3253f22a32f4b0 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Thu, 6 Oct 2022 19:15:25 +0000 Subject: [PATCH] refactor(job): Make jobs execution polymorphic instead of relied on plain switch --- .../cubit/client_jobs/client_jobs_cubit.dart | 30 +++---------- lib/logic/models/job.dart | 44 +++++++++++++++++-- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/lib/logic/cubit/client_jobs/client_jobs_cubit.dart b/lib/logic/cubit/client_jobs/client_jobs_cubit.dart index ca3733fd..6f0c8d1a 100644 --- a/lib/logic/cubit/client_jobs/client_jobs_cubit.dart +++ b/lib/logic/cubit/client_jobs/client_jobs_cubit.dart @@ -23,6 +23,8 @@ class JobsCubit extends Cubit { final UsersCubit usersCubit; final ServicesCubit servicesCubit; + bool hasServiceJobs = false; + void addJob(final ClientJob job) { final List newJobsList = []; if (state is JobsStateWithJobs) { @@ -103,31 +105,9 @@ class JobsCubit extends Cubit { if (state is JobsStateWithJobs) { final List jobs = (state as JobsStateWithJobs).clientJobList; emit(JobsStateLoading()); - bool hasServiceJobs = false; + for (final ClientJob job in jobs) { - // TODO: Rewrite to polymorphism - if (job is CreateUserJob) { - await usersCubit.createUser(job.user); - } - if (job is DeleteUserJob) { - await usersCubit.deleteUser(job.user); - } - if (job is ServiceToggleJob) { - hasServiceJobs = true; - await api.switchService(job.service.id, job.needToTurnOn); - } - if (job is CreateSSHKeyJob) { - await usersCubit.addSshKey(job.user, job.publicKey); - } - if (job is DeleteSSHKeyJob) { - await usersCubit.deleteSshKey(job.user, job.publicKey); - } - if (job is ResetUserPasswordJob) { - await usersCubit.changeUserPassword(job.user, job.user.password!); - } - if (job is RebuildServerJob) { - await upgradeServer(); - } + job.execute(this); } await api.pullConfigurationUpdate(); @@ -137,6 +117,8 @@ class JobsCubit extends Cubit { await servicesCubit.load(); } + hasServiceJobs = false; + emit(JobsStateEmpty()); } } diff --git a/lib/logic/models/job.dart b/lib/logic/models/job.dart index 7938dae7..1470c483 100644 --- a/lib/logic/models/job.dart +++ b/lib/logic/models/job.dart @@ -1,14 +1,14 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; -import 'package:selfprivacy/logic/common_enum/common_enum.dart'; +import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/models/service.dart'; import 'package:selfprivacy/utils/password_generator.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; @immutable -class ClientJob extends Equatable { +abstract class ClientJob extends Equatable { ClientJob({ required this.title, final String? id, @@ -17,6 +17,8 @@ class ClientJob extends Equatable { final String title; final String id; + void execute(final JobsCubit cubit); + @override List get props => [id, title]; } @@ -26,6 +28,11 @@ class RebuildServerJob extends ClientJob { required final super.title, final super.id, }); + + @override + void execute(final JobsCubit cubit) async { + await cubit.upgradeServer(); + } } class CreateUserJob extends ClientJob { @@ -35,6 +42,11 @@ class CreateUserJob extends ClientJob { final User user; + @override + void execute(final JobsCubit cubit) async { + await cubit.usersCubit.createUser(user); + } + @override List get props => [id, title, user]; } @@ -46,6 +58,11 @@ class ResetUserPasswordJob extends ClientJob { final User user; + @override + void execute(final JobsCubit cubit) async { + await cubit.usersCubit.changeUserPassword(user, user.password!); + } + @override List get props => [id, title, user]; } @@ -57,11 +74,16 @@ class DeleteUserJob extends ClientJob { final User user; + @override + void execute(final JobsCubit cubit) async { + await cubit.usersCubit.deleteUser(user); + } + @override List get props => [id, title, user]; } -class ToggleJob extends ClientJob { +abstract class ToggleJob extends ClientJob { ToggleJob({ required final this.service, required final super.title, @@ -82,6 +104,12 @@ class ServiceToggleJob extends ToggleJob { '${needToTurnOn ? "jobs.service_turn_on".tr() : "jobs.service_turn_off".tr()} ${service.displayName}', ); + @override + void execute(final JobsCubit cubit) async { + cubit.hasServiceJobs = true; + await cubit.api.switchService(service.id, needToTurnOn); + } + final bool needToTurnOn; } @@ -94,6 +122,11 @@ class CreateSSHKeyJob extends ClientJob { final User user; final String publicKey; + @override + void execute(final JobsCubit cubit) async { + await cubit.usersCubit.addSshKey(user, publicKey); + } + @override List get props => [id, title, user, publicKey]; } @@ -107,6 +140,11 @@ class DeleteSSHKeyJob extends ClientJob { final User user; final String publicKey; + @override + void execute(final JobsCubit cubit) async { + await cubit.usersCubit.deleteSshKey(user, publicKey); + } + @override List get props => [id, title, user, publicKey]; }