mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-11 16:28:11 +00:00
97 lines
2.6 KiB
PHP
97 lines
2.6 KiB
PHP
<?php
|
||
|
||
namespace App\Observers;
|
||
|
||
use App\Models\File;
|
||
use App\Tasks\ManticoreSyncTask;
|
||
|
||
class FileObserver extends AbstractObserver
|
||
{
|
||
/**
|
||
* Handle the File "created" event.
|
||
*
|
||
* @param \App\Models\File $file
|
||
* @return void
|
||
*/
|
||
public function created(File $file)
|
||
{
|
||
// 文件夹不需要同步
|
||
if ($file->type === 'folder') {
|
||
return;
|
||
}
|
||
self::taskDeliver(new ManticoreSyncTask('file_sync', $file->toArray()));
|
||
}
|
||
|
||
/**
|
||
* Handle the File "updated" event.
|
||
*
|
||
* @param \App\Models\File $file
|
||
* @return void
|
||
*/
|
||
public function updated(File $file)
|
||
{
|
||
// 检查共享设置是否变化(影响子文件的 pshare)
|
||
if ($file->type === 'folder' && $file->isDirty('share')) {
|
||
// 共享文件夹的 share 字段变化,需要批量更新子文件的 pshare
|
||
// 注意:updataShare 方法会批量更新子文件,但不会触发 Observer
|
||
// 这里通过任务异步处理
|
||
$newPshare = $file->share ? $file->id : 0;
|
||
$childFileIds = File::where('pids', 'like', "%,{$file->id},%")
|
||
->where('type', '!=', 'folder')
|
||
->pluck('id')
|
||
->toArray();
|
||
if (!empty($childFileIds)) {
|
||
self::taskDeliver(new ManticoreSyncTask('file_pshare_update', [
|
||
'file_ids' => $childFileIds,
|
||
'pshare' => $newPshare,
|
||
]));
|
||
}
|
||
return;
|
||
}
|
||
|
||
// 文件夹不需要同步内容
|
||
if ($file->type === 'folder') {
|
||
return;
|
||
}
|
||
self::taskDeliver(new ManticoreSyncTask('file_sync', $file->toArray()));
|
||
}
|
||
|
||
/**
|
||
* Handle the File "deleted" event.
|
||
*
|
||
* @param \App\Models\File $file
|
||
* @return void
|
||
*/
|
||
public function deleted(File $file)
|
||
{
|
||
self::taskDeliver(new ManticoreSyncTask('file_delete', $file->toArray()));
|
||
}
|
||
|
||
/**
|
||
* Handle the File "restored" event.
|
||
*
|
||
* @param \App\Models\File $file
|
||
* @return void
|
||
*/
|
||
public function restored(File $file)
|
||
{
|
||
// 文件夹不需要同步
|
||
if ($file->type === 'folder') {
|
||
return;
|
||
}
|
||
self::taskDeliver(new ManticoreSyncTask('file_sync', $file->toArray()));
|
||
}
|
||
|
||
/**
|
||
* Handle the File "force deleted" event.
|
||
*
|
||
* @param \App\Models\File $file
|
||
* @return void
|
||
*/
|
||
public function forceDeleted(File $file)
|
||
{
|
||
self::taskDeliver(new ManticoreSyncTask('file_delete', $file->toArray()));
|
||
}
|
||
}
|
||
|