add Immich send
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Attributes\Description;
|
||||
use Illuminate\Console\Attributes\Signature;
|
||||
use Illuminate\Console\Command;
|
||||
use App\Jobs\SendToImmichJob;
|
||||
|
||||
#[Signature("immich:watch-folder")]
|
||||
#[Description("Dispatch photos folder")]
|
||||
class WatchFolder extends Command
|
||||
{
|
||||
private bool $continue = true;
|
||||
|
||||
private $instance;
|
||||
|
||||
private $resourceHandle;
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$watchDir = config("immich.folder_path");
|
||||
|
||||
// Gracefully exit when TERM signal received
|
||||
pcntl_async_signals(true);
|
||||
pcntl_signal(SIGTERM, function () {
|
||||
$this->continue = false;
|
||||
});
|
||||
|
||||
$this->instance = inotify_init();
|
||||
stream_set_blocking($this->instance, 0);
|
||||
$this->resourceHandle = inotify_add_watch(
|
||||
$this->instance,
|
||||
$watchDir,
|
||||
IN_CLOSE_WRITE | IN_ATTRIB | IN_MOVED_TO | IN_MOVE_SELF,
|
||||
);
|
||||
|
||||
while ($this->continue) {
|
||||
$events = inotify_read($this->instance);
|
||||
|
||||
if (!empty($events)) {
|
||||
// Get filenames only and remove duplicates
|
||||
$fileNames = array_unique(
|
||||
array_map(function ($event) {
|
||||
return $event["name"];
|
||||
}, $events),
|
||||
);
|
||||
|
||||
foreach ($fileNames as $fileName) {
|
||||
echo $fileName . PHP_EOL;
|
||||
SendToImmichJob::dispatch($fileName);
|
||||
}
|
||||
}
|
||||
sleep(1);
|
||||
}
|
||||
fclose($this->instance);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user