Skip to content

Commit a7f18a7

Browse files
provokateurinnickvergessen
authored andcommitted
perf: Only apply default settings when user is created or settings are requested
Signed-off-by: provokateurin <kate@provokateurin.de>
1 parent 42c8130 commit a7f18a7

File tree

6 files changed

+48
-99
lines changed

6 files changed

+48
-99
lines changed

lib/AppInfo/Application.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use OCA\Notifications\Capabilities;
1414
use OCA\Notifications\Listener\AddMissingIndicesListener;
1515
use OCA\Notifications\Listener\BeforeTemplateRenderedListener;
16-
use OCA\Notifications\Listener\PostLoginListener;
1716
use OCA\Notifications\Listener\UserCreatedListener;
1817
use OCA\Notifications\Listener\UserDeletedListener;
1918
use OCA\Notifications\Notifier\AdminNotifications;
@@ -24,7 +23,6 @@
2423
use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent;
2524
use OCP\DB\Events\AddMissingIndicesEvent;
2625
use OCP\Notification\IManager;
27-
use OCP\User\Events\PostLoginEvent;
2826
use OCP\User\Events\UserCreatedEvent;
2927
use OCP\User\Events\UserDeletedEvent;
3028

@@ -47,7 +45,6 @@ public function register(IRegistrationContext $context): void {
4745
$context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class);
4846
$context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class);
4947
$context->registerEventListener(UserCreatedEvent::class, UserCreatedListener::class);
50-
$context->registerEventListener(PostLoginEvent::class, PostLoginListener::class);
5148
}
5249

5350
#[\Override]

lib/BackgroundJob/GenerateUserSettings.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
use OCA\Notifications\Model\Settings;
1212
use OCA\Notifications\Model\SettingsMapper;
13-
use OCP\AppFramework\Db\DoesNotExistException;
1413
use OCP\AppFramework\Utility\ITimeFactory;
1514
use OCP\BackgroundJob\TimedJob;
1615
use OCP\IDBConnection;
@@ -47,15 +46,11 @@ protected function run($argument): void {
4746
return;
4847
}
4948

50-
try {
51-
$this->settingsMapper->getSettingsByUser($user->getUID());
52-
} catch (DoesNotExistException) {
53-
$settings = new Settings();
54-
$settings->setUserId($user->getUID());
55-
$settings->setNextSendTime(1);
56-
$settings->setBatchTime(Settings::EMAIL_SEND_3HOURLY);
49+
// Initializes the default settings
50+
$settings = $this->settingsMapper->getSettingsByUser($user->getUID());
51+
if ($settings->getLastSendId() === 0) {
5752
$settings->setLastSendId($maxId);
58-
$this->settingsMapper->insert($settings);
53+
$this->settingsMapper->update($settings);
5954
}
6055
});
6156
}

lib/Listener/PostLoginListener.php

Lines changed: 0 additions & 60 deletions
This file was deleted.

lib/Listener/UserCreatedListener.php

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
namespace OCA\Notifications\Listener;
1010

11-
use OCA\Notifications\AppInfo\Application;
1211
use OCA\Notifications\Model\Settings;
1312
use OCA\Notifications\Model\SettingsMapper;
1413
use OCP\EventDispatcher\Event;
@@ -35,20 +34,7 @@ public function handle(Event $event): void {
3534

3635
$userId = $event->getUser()->getUID();
3736

38-
$defaultSoundNotification = $this->config->getAppValue(Application::APP_ID, 'sound_notification') === 'yes' ? 'yes' : 'no';
39-
$defaultSoundTalk = $this->config->getAppValue(Application::APP_ID, 'sound_talk') === 'yes' ? 'yes' : 'no';
40-
$defaultBatchtime = (int)$this->config->getAppValue(Application::APP_ID, 'setting_batchtime');
41-
42-
if ($defaultBatchtime !== Settings::EMAIL_SEND_WEEKLY
43-
&& $defaultBatchtime !== Settings::EMAIL_SEND_DAILY
44-
&& $defaultBatchtime !== Settings::EMAIL_SEND_3HOURLY
45-
&& $defaultBatchtime !== Settings::EMAIL_SEND_HOURLY
46-
&& $defaultBatchtime !== Settings::EMAIL_SEND_OFF) {
47-
$defaultBatchtime = Settings::EMAIL_SEND_3HOURLY;
48-
}
49-
50-
$this->config->setUserValue($userId, Application::APP_ID, 'sound_notification', $defaultSoundNotification);
51-
$this->config->setUserValue($userId, Application::APP_ID, 'sound_talk', $defaultSoundTalk);
52-
$this->settingsMapper->setBatchSettingForUser($userId, $defaultBatchtime);
37+
// Initializes the default settings
38+
$this->settingsMapper->getSettingsByUser($userId);
5339
}
5440
}

lib/Model/SettingsMapper.php

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88

99
namespace OCA\Notifications\Model;
1010

11+
use OCA\Notifications\AppInfo\Application;
1112
use OCP\AppFramework\Db\DoesNotExistException;
1213
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
1314
use OCP\AppFramework\Db\QBMapper;
1415
use OCP\DB\Exception as DBException;
1516
use OCP\DB\QueryBuilder\IQueryBuilder;
17+
use OCP\IAppConfig;
1618
use OCP\IDBConnection;
1719

1820
/**
@@ -23,7 +25,10 @@
2325
* @method list<Settings> findEntities(IQueryBuilder $query)
2426
*/
2527
class SettingsMapper extends QBMapper {
26-
public function __construct(IDBConnection $db) {
28+
public function __construct(
29+
IDBConnection $db,
30+
private IAppConfig $appConfig,
31+
) {
2732
parent::__construct($db, 'notifications_settings', Settings::class);
2833
}
2934

@@ -32,16 +37,29 @@ public function __construct(IDBConnection $db) {
3237
* @return Settings
3338
* @throws DBException
3439
* @throws MultipleObjectsReturnedException
35-
* @throws DoesNotExistException
3640
*/
3741
public function getSettingsByUser(string $userId): Settings {
38-
$query = $this->db->getQueryBuilder();
42+
try {
43+
$query = $this->db->getQueryBuilder();
3944

40-
$query->select('*')
41-
->from($this->getTableName())
42-
->where($query->expr()->eq('user_id', $query->createNamedParameter($userId)));
45+
$query->select('*')
46+
->from($this->getTableName())
47+
->where($query->expr()->eq('user_id', $query->createNamedParameter($userId)));
4348

44-
return $this->findEntity($query);
49+
return $this->findEntity($query);
50+
} catch (DoesNotExistException) {
51+
$defaultBatchtime = (int)$this->appConfig->getValueString(Application::APP_ID, 'setting_batchtime');
52+
53+
if ($defaultBatchtime !== Settings::EMAIL_SEND_WEEKLY
54+
&& $defaultBatchtime !== Settings::EMAIL_SEND_DAILY
55+
&& $defaultBatchtime !== Settings::EMAIL_SEND_3HOURLY
56+
&& $defaultBatchtime !== Settings::EMAIL_SEND_HOURLY
57+
&& $defaultBatchtime !== Settings::EMAIL_SEND_OFF) {
58+
$defaultBatchtime = Settings::EMAIL_SEND_3HOURLY;
59+
}
60+
61+
return $this->setBatchSettingForUser($userId, $defaultBatchtime);
62+
}
4563
}
4664

4765
/**
@@ -57,9 +75,16 @@ public function deleteSettingsByUser(string $userId): void {
5775
$query->executeStatement();
5876
}
5977

60-
public function setBatchSettingForUser(string $userId, int $batchSetting): void {
78+
public function setBatchSettingForUser(string $userId, int $batchSetting): Settings {
6179
try {
62-
$settings = $this->getSettingsByUser($userId);
80+
// Do not call getSettingsByUser here, it will cause an infinite loop
81+
$query = $this->db->getQueryBuilder();
82+
83+
$query->select('*')
84+
->from($this->getTableName())
85+
->where($query->expr()->eq('user_id', $query->createNamedParameter($userId)));
86+
87+
$settings = $this->findEntity($query);
6388
} catch (DoesNotExistException) {
6489
$settings = new Settings();
6590
$settings->setUserId($userId);
@@ -91,6 +116,7 @@ public function setBatchSettingForUser(string $userId, int $batchSetting): void
91116
$settings->setNextSendTime(1);
92117
}
93118
$this->update($settings);
119+
return $settings;
94120
}
95121

96122
/**

lib/Settings/Personal.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use OCA\Notifications\Model\SettingsMapper;
1515
use OCP\AppFramework\Db\DoesNotExistException;
1616
use OCP\AppFramework\Http\TemplateResponse;
17+
use OCP\AppFramework\Services\IAppConfig;
1718
use OCP\AppFramework\Services\IInitialState;
1819
use OCP\IConfig;
1920
use OCP\IL10N;
@@ -25,6 +26,7 @@
2526
class Personal implements ISettings {
2627
public function __construct(
2728
protected IConfig $config,
29+
protected IAppConfig $appConfig,
2830
protected IL10N $l10n,
2931
protected IUserSession $session,
3032
protected SettingsMapper $settingsMapper,
@@ -63,12 +65,15 @@ public function getForm(): TemplateResponse {
6365
$settingBatchTime = Settings::EMAIL_SEND_3HOURLY;
6466
}
6567

68+
$defaultSoundNotification = $this->appConfig->getAppValueString(Application::APP_ID, 'sound_notification') === 'yes' ? 'yes' : 'no';
69+
$defaultSoundTalk = $this->appConfig->getAppValueString(Application::APP_ID, 'sound_talk') === 'yes' ? 'yes' : 'no';
70+
6671
$this->initialState->provideInitialState('config', [
6772
'setting' => 'personal',
6873
'is_email_set' => (bool)$user->getEMailAddress(),
6974
'setting_batchtime' => $settingBatchTime,
70-
'sound_notification' => $this->config->getUserValue($user->getUID(), Application::APP_ID, 'sound_notification', 'yes') === 'yes',
71-
'sound_talk' => $this->config->getUserValue($user->getUID(), Application::APP_ID, 'sound_talk', 'yes') === 'yes',
75+
'sound_notification' => $this->config->getUserValue($user->getUID(), Application::APP_ID, 'sound_notification', $defaultSoundNotification) === 'yes',
76+
'sound_talk' => $this->config->getUserValue($user->getUID(), Application::APP_ID, 'sound_talk', $defaultSoundTalk) === 'yes',
7277
]);
7378

7479
return new TemplateResponse('notifications', 'settings/personal');

0 commit comments

Comments
 (0)