fix: Wrap renaming of notes through autotile in locking context
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
507420403a
commit
fdbf2b6064
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace OCA\Notes\Controller;
|
namespace OCA\Notes\Controller;
|
||||||
|
|
||||||
|
use OCA\Notes\Service\Note;
|
||||||
use OCA\Notes\Service\NotesService;
|
use OCA\Notes\Service\NotesService;
|
||||||
use OCA\Notes\Service\SettingsService;
|
use OCA\Notes\Service\SettingsService;
|
||||||
|
|
||||||
|
@ -12,6 +13,9 @@ use OCP\AppFramework\Http;
|
||||||
use OCP\AppFramework\Http\JSONResponse;
|
use OCP\AppFramework\Http\JSONResponse;
|
||||||
use OCP\AppFramework\Http\StreamResponse;
|
use OCP\AppFramework\Http\StreamResponse;
|
||||||
use OCP\Files\IMimeTypeDetector;
|
use OCP\Files\IMimeTypeDetector;
|
||||||
|
use OCP\Files\Lock\ILock;
|
||||||
|
use OCP\Files\Lock\ILockManager;
|
||||||
|
use OCP\Files\Lock\LockContext;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\IL10N;
|
use OCP\IL10N;
|
||||||
use OCP\IRequest;
|
use OCP\IRequest;
|
||||||
|
@ -19,28 +23,34 @@ use OCP\IRequest;
|
||||||
class NotesController extends Controller {
|
class NotesController extends Controller {
|
||||||
private NotesService $notesService;
|
private NotesService $notesService;
|
||||||
private SettingsService $settingsService;
|
private SettingsService $settingsService;
|
||||||
|
private ILockManager $lockManager;
|
||||||
private Helper $helper;
|
private Helper $helper;
|
||||||
private IConfig $settings;
|
private IConfig $settings;
|
||||||
private IL10N $l10n;
|
private IL10N $l10n;
|
||||||
private IMimeTypeDetector $mimeTypeDetector;
|
private IMimeTypeDetector $mimeTypeDetector;
|
||||||
|
private string $userId;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
string $AppName,
|
string $AppName,
|
||||||
IRequest $request,
|
IRequest $request,
|
||||||
NotesService $notesService,
|
NotesService $notesService,
|
||||||
|
ILockManager $lockManager,
|
||||||
SettingsService $settingsService,
|
SettingsService $settingsService,
|
||||||
Helper $helper,
|
Helper $helper,
|
||||||
IConfig $settings,
|
IConfig $settings,
|
||||||
IL10N $l10n,
|
IL10N $l10n,
|
||||||
IMimeTypeDetector $mimeTypeDetector
|
IMimeTypeDetector $mimeTypeDetector,
|
||||||
|
string $userId
|
||||||
) {
|
) {
|
||||||
parent::__construct($AppName, $request);
|
parent::__construct($AppName, $request);
|
||||||
$this->notesService = $notesService;
|
$this->notesService = $notesService;
|
||||||
$this->settingsService = $settingsService;
|
$this->settingsService = $settingsService;
|
||||||
|
$this->lockManager = $lockManager;
|
||||||
$this->helper = $helper;
|
$this->helper = $helper;
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->l10n = $l10n;
|
$this->l10n = $l10n;
|
||||||
$this->mimeTypeDetector = $mimeTypeDetector;
|
$this->mimeTypeDetector = $mimeTypeDetector;
|
||||||
|
$this->userId = $userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -208,7 +218,9 @@ class NotesController extends Controller {
|
||||||
$oldTitle = $note->getTitle();
|
$oldTitle = $note->getTitle();
|
||||||
$newTitle = $this->notesService->getTitleFromContent($note->getContent());
|
$newTitle = $this->notesService->getTitleFromContent($note->getContent());
|
||||||
if ($oldTitle !== $newTitle) {
|
if ($oldTitle !== $newTitle) {
|
||||||
$note->setTitle($newTitle);
|
$this->inLockScope($note, function () use ($note, $newTitle) {
|
||||||
|
$note->setTitle($newTitle);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return $note->getTitle();
|
return $note->getTitle();
|
||||||
});
|
});
|
||||||
|
@ -258,14 +270,18 @@ class NotesController extends Controller {
|
||||||
|
|
||||||
case 'title':
|
case 'title':
|
||||||
if ($title !== null) {
|
if ($title !== null) {
|
||||||
$note->setTitle($title);
|
$this->inLockScope($note, function () use ($note, $title) {
|
||||||
|
$note->setTitle($title);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
$result = $note->getTitle();
|
$result = $note->getTitle();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'category':
|
case 'category':
|
||||||
if ($category !== null) {
|
if ($category !== null) {
|
||||||
$note->setCategory($category);
|
$this->inLockScope($note, function () use ($note, $category) {
|
||||||
|
$note->setCategory($category);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
$result = $note->getCategory();
|
$result = $note->getCategory();
|
||||||
break;
|
break;
|
||||||
|
@ -332,4 +348,16 @@ class NotesController extends Controller {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function inLockScope(Note $note, callable $callback) {
|
||||||
|
$isRichText = $this->settingsService->get($this->userId, 'noteMode') === 'rich';
|
||||||
|
$lockContext = new LockContext(
|
||||||
|
$note->getFile(),
|
||||||
|
$isRichText ? ILock::TYPE_APP : ILock::TYPE_USER,
|
||||||
|
$isRichText ? 'text' : $this->userId
|
||||||
|
);
|
||||||
|
$this->lockManager->runInScope($lockContext, function () use ($callback) {
|
||||||
|
$callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -179,4 +179,8 @@ class Note {
|
||||||
$this->noteUtil->getTagService()->setFavorite($this->getId(), $favorite);
|
$this->noteUtil->getTagService()->setFavorite($this->getId(), $favorite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFile(): File {
|
||||||
|
return $this->file;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue