Skip to content

Commit dac1a73

Browse files
committed
Merge branch 'imap-idle-polling-mechanism' of github.com:Shadow243/cypht into imap-idle-polling-mechanism
2 parents 8a254a9 + 6eea27a commit dac1a73

File tree

11 files changed

+86
-38
lines changed

11 files changed

+86
-38
lines changed

.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ WIN_CACERT_DIR=
212212

213213
JS_EXCLUDE_DEPS=
214214

215-
QUEUE_CONNECTION=database
215+
QUEUE_DRIVER=database
216216

217217
AWS_ACCESS_KEY_ID='your-aws-access-key'
218218
AWS_SECRET_ACCESS_KEY='your-aws-secret-key'

config/queue.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
return [
3+
/*
4+
| -------------
5+
| Queue Support
6+
| -------------
7+
|
8+
| Configure Queue details below to use it for queueing.
9+
*/
10+
'queue_enabled' => env('QUEUE_ENABLED', false),
11+
12+
'queue_driver' => env('QUEUE_DRIVER', 'database'),
13+
];

services/Core/Commands/Hm_QueueWorkCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected function configure()
2929

3030
protected function execute(InputInterface $input, OutputInterface $output): int
3131
{
32-
$connection = $input->getArgument('connection') ?: env('QUEUE_CONNECTION', 'database');
32+
$connection = $input->getArgument('connection') ?: env('QUEUE_DRIVER', 'database');
3333
$queue = $input->getOption('queue') ?: 'default';
3434

3535
$output->writeln("Processing jobs from the [$queue] on connection [$connection]...");

services/Core/Hm_Container.php

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Hm_Redis;
77
use Hm_AmazonSQS;
88
use Symfony\Component\DependencyInjection\ContainerBuilder;
9-
use Services\Providers\{ Hm_CommandServiceProvider, Hm_EventServiceProvider, Hm_SchedulerServiceProvider, Hm_QueueServiceProvider };
9+
use Services\Providers\{Hm_CommandServiceProvider, Hm_EventServiceProvider, Hm_SchedulerServiceProvider, Hm_QueueServiceProvider};
1010

1111
class Hm_Container
1212
{
@@ -19,46 +19,50 @@ private function __clone() {}
1919
public static function setContainer(ContainerBuilder $containerBuilder): ContainerBuilder
2020
{
2121
if (self::$container === null) {
22-
self::$container = $containerBuilder;
22+
self::$container = $containerBuilder;
2323
}
2424

2525
return self::$container;
2626
}
2727

2828
public static function bind(): ContainerBuilder
2929
{
30-
// Register Hm_DB
31-
self::$container->set('db.connection', Hm_DB::connect(self::$container->get('config')));
32-
33-
self::$container->register('db', Hm_DB::class)
34-
->setShared(true);
35-
36-
// Register Hm_Redis
37-
$redis = new Hm_Redis(self::$container->get('config'));
38-
$redis->connect();
39-
self::$container->set('redis.connection', $redis->getInstance());
40-
self::$container->register('redis', Hm_Redis::class)->setArgument(0, self::$container->get('config'))
41-
42-
->setShared(true);
43-
44-
// Register Hm_AmazonSQS
45-
self::$container->set('amazon.sqs.connection', Hm_AmazonSQS::connect(self::$container->get('config')));
46-
self::$container->register('amazon.sqs',Hm_AmazonSQS::class)
47-
->setShared(true);
30+
$config = self::$container->get('config');
31+
32+
if ($config->get('queue_enabled')) {
33+
34+
if ($config->get('queue_driver') === 'database') {
35+
// Register Hm_DB
36+
self::$container->set('db.connection', Hm_DB::connect(self::$container->get('config')));
37+
38+
self::$container->register('db', Hm_DB::class)->setShared(true);
39+
} else if ($config->get('queue_driver') === 'redis') {
40+
// Register Hm_Redis
41+
$redis = new Hm_Redis($config);
42+
$redis->connect();
43+
self::$container->set('redis.connection', $redis->getInstance());
44+
self::$container->register('redis', Hm_Redis::class)->setArgument(0, self::$container->get('config'))->setShared(true);
45+
} else if ($config->get('queue_enabled') && $config->get('queue_driver') === 'sqs') {
46+
// Register Hm_AmazonSQS
47+
self::$container->set('amazon.sqs.connection', Hm_AmazonSQS::connect(self::$container->get('config')));
48+
self::$container->register('amazon.sqs', Hm_AmazonSQS::class)
49+
->setShared(true);
50+
}
51+
}
4852

4953
// Register Hm_CommandServiceProvider
5054
self::$container->register('command.serviceProvider', Hm_CommandServiceProvider::class)
51-
->setShared(true);
55+
->setShared(true);
5256

5357
// Register Hm_QueueServiceProvider
54-
self::$container->register('queue.ServiceProvider',Hm_QueueServiceProvider::class)
55-
->setShared(true);
58+
self::$container->register('queue.ServiceProvider', Hm_QueueServiceProvider::class)
59+
->setShared(true);
5660

5761
self::$container->register('scheduler.ServiceProvider', Hm_SchedulerServiceProvider::class)
58-
->setShared(true);
62+
->setShared(true);
5963

6064
self::$container->register('event.ServiceProvider', Hm_EventServiceProvider::class)
61-
->setShared(true);
65+
->setShared(true);
6266

6367
return self::$container;
6468
}

services/Core/Scheduling/Hm_CacheMutex.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function __construct(Hm_Cache $cache)
1818
/**
1919
* Create a lock for the task.
2020
*
21-
* @param Task $task The task instance
21+
* @param Hm_CommandTask $task The task instance
2222
* @param int $expiresAt Time in seconds for the lock expiration
2323
* @return bool Returns true if the lock was created, false otherwise
2424
*/

services/Core/Scheduling/Hm_ScheduledTask.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ public function __construct(callable $callback, $name = '', $description = '', $
3030
$this->expression = $expression;
3131
}
3232

33+
public function getName()
34+
{
35+
return $this->name;
36+
}
37+
3338
public function isDue()
34-
{
35-
39+
{
3640
if ($this->isEnabled) {
3741
$this->calculateNextRunTime();
38-
dd($this->isEnabled);
3942
return $this->nextRunTime <= new \DateTime('now', new \DateTimeZone($this->timezone));
4043
}
4144
return false;
@@ -114,6 +117,7 @@ private function calculateNextRunTime()
114117

115118
// Calculate next minute
116119
$nextMinute = $this->getNextFieldValue($next->format('i'), $minuteField, 0, 59);
120+
117121
if ($nextMinute !== null) {
118122

119123
$next->setTime($next->format('H'), $nextMinute);
@@ -153,7 +157,7 @@ private function calculateNextRunTime()
153157
$nextDayOfWeek = $this->getNextFieldValue($next->format('w'), $dayOfWeekField, 0, 6);
154158

155159
if ($nextDayOfWeek !== null) {
156-
while ($next->format('w') !== $nextDayOfWeek) {
160+
while (intval($next->format('w')) !== $nextDayOfWeek) {
157161
$next->modify('+1 day');
158162
}
159163
} else {

services/Core/Scheduling/Hm_Scheduler.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Hm_Debug;
77
use Hm_Msgs;
88
use Hm_Session_Setup;
9+
use Services\Core\Hm_Container;
910

1011
class Hm_Scheduler
1112
{
@@ -19,7 +20,7 @@ public function __construct($config)
1920

2021
public function command($command)
2122
{
22-
$cache = new Hm_Cache($this->config, new Hm_Session_Setup($this->config));
23+
$cache = new Hm_Cache($this->config, Hm_Container::getContainer()->get('session'));
2324
$commandTask = new Hm_CommandTask($command, new Hm_CacheMutex($cache));
2425
$this->tasks[] = $commandTask;
2526
return $commandTask;

services/Hm_ConsoleKernel.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Services;
4+
5+
use Services\Core\Scheduling\Hm_Scheduler;
6+
use Services\Core\Hm_Container;
7+
8+
class Hm_ConsoleKernel
9+
{
10+
protected $scheduler;
11+
12+
public function __construct(Hm_Scheduler $scheduler)
13+
{
14+
$this->scheduler = $scheduler;
15+
16+
}
17+
18+
/**
19+
* Define the application's command schedule.
20+
*/
21+
public function schedule()
22+
{
23+
// Register tasks with the scheduler
24+
$this->scheduler->command('check:mail')
25+
->everyMinute()
26+
->withoutOverlapping();
27+
}
28+
}

services/Hm_bootstrap.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

33
use Services\Core\Hm_Container;
4-
use Services\Hm_ConsoleKernal;
4+
use Services\Hm_ConsoleKernel;
55
use Symfony\Component\ErrorHandler\ErrorHandler;
66
use Symfony\Component\DependencyInjection\ContainerBuilder;
77

@@ -62,6 +62,6 @@
6262
$queueServiceProvider->register($config, $session);
6363

6464
// Create a new Kernel instance
65-
$kernel = (new Hm_ConsoleKernal($containerBuilder->get('scheduler')))->schedule();
65+
$kernel = (new Hm_ConsoleKernel($containerBuilder->get('scheduler')))->schedule();
6666

6767
return [$containerBuilder, $config];

services/Jobs/Hm_ProcessNewEmail.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ class Hm_ProcessNewEmail extends Hm_BaseJob implements Hm_ShouldQueue
1313
{
1414
use Hm_Dispatchable, Hm_InteractsWithQueue, Hm_Serializes;
1515

16-
public string $driver = 'sqs';
17-
1816
public string $email;
1917

2018
public function __construct(string $email)

0 commit comments

Comments
 (0)