diff --git a/lib/BackgroundJob/GenerateUserSettings.php b/lib/BackgroundJob/GenerateUserSettings.php index 3e5b859a2..48a4defd0 100644 --- a/lib/BackgroundJob/GenerateUserSettings.php +++ b/lib/BackgroundJob/GenerateUserSettings.php @@ -10,6 +10,7 @@ use OCA\Notifications\Model\Settings; use OCA\Notifications\Model\SettingsMapper; +use OCP\AppFramework\Services\IAppConfig; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\TimedJob; use OCP\IDBConnection; @@ -22,6 +23,7 @@ public function __construct( private readonly IDBConnection $connection, private readonly IUserManager $userManager, private readonly SettingsMapper $settingsMapper, + private readonly IAppConfig $appConfig, ) { parent::__construct($time); @@ -31,6 +33,18 @@ public function __construct( #[\Override] protected function run($argument): void { + $update = $this->connection->getQueryBuilder(); + $update->update('notifications_settings') + ->set('next_send_time', $update->createNamedParameter(1)) + ->where($update->expr()->eq('next_send_time', $update->createNamedParameter(0))) + ->andWhere($update->expr()->neq('batch_time', $update->createNamedParameter(Settings::EMAIL_SEND_OFF))); + + $batchTime = $this->appConfig->getAppValueInt('setting_batchtime'); + if ($batchTime === Settings::EMAIL_SEND_OFF) { + $update->andWhere($update->expr()->neq('batch_time', $update->createNamedParameter(Settings::EMAIL_SEND_DEFAULT))); + } + $update->executeStatement(); + $query = $this->connection->getQueryBuilder(); $query->select('notification_id') ->from('notifications') @@ -42,7 +56,7 @@ protected function run($argument): void { $result->closeCursor(); $this->userManager->callForSeenUsers(function (IUser $user) use ($maxId): void { - if ($user->isEnabled()) { + if (!$user->isEnabled()) { return; } diff --git a/lib/Model/SettingsMapper.php b/lib/Model/SettingsMapper.php index 359d23680..49e436703 100644 --- a/lib/Model/SettingsMapper.php +++ b/lib/Model/SettingsMapper.php @@ -10,6 +10,7 @@ use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\QBMapper; +use OCP\AppFramework\Services\IAppConfig; use OCP\DB\Exception as DBException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; @@ -22,7 +23,10 @@ * @method list findEntities(IQueryBuilder $query) */ class SettingsMapper extends QBMapper { - public function __construct(IDBConnection $db) { + public function __construct( + IDBConnection $db, + protected readonly IAppConfig $appConfig, + ) { parent::__construct($db, 'notifications_settings', Settings::class); } @@ -43,6 +47,10 @@ public function getSettingsByUser(string $userId): Settings { $settings = new Settings(); $settings->setUserId($userId); $settings->setBatchTime(Settings::EMAIL_SEND_DEFAULT); + $batchTime = $this->appConfig->getAppValueInt('setting_batchtime'); + if ($batchTime !== Settings::EMAIL_SEND_OFF) { + $settings->setNextSendTime(1); + } /** @var Settings $settings */ $settings = $this->insert($settings); diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index 0c08616bb..6e8f03ec8 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -48,13 +48,15 @@ public function getForm(): TemplateResponse { $settingBatchTime = $this->appConfig->getAppValueInt('setting_batchtime'); } } catch (DoesNotExistException) { + $settingBatchTime = $this->appConfig->getAppValueInt('setting_batchtime'); + $settings = new Settings(); $settings->setUserId($user->getUID()); $settings->setBatchTime(Settings::EMAIL_SEND_DEFAULT); - $settings->setNextSendTime(1); + if ($settingBatchTime !== Settings::EMAIL_SEND_OFF) { + $settings->setNextSendTime(1); + } $this->settingsMapper->insert($settings); - - $settingBatchTime = $this->appConfig->getAppValueInt('setting_batchtime'); } $defaultSoundNotification = $this->appConfig->getAppValueBool('sound_notification');