[ATTACHMENTS][Embed][UI] Allow plugins to provide a title for an attachment, if a note has none, implement such a mechanism in Embed and cache the result, since it is potentially costly
This commit is contained in:
parent
15a2a69274
commit
f344ed376c
|
@ -485,6 +485,17 @@ class Embed extends Plugin
|
|||
return HTTPClient::get($url)->getContent();
|
||||
}
|
||||
|
||||
public function onAttachmentGetBestTitle(Attachment $attachment, Note $note, ?string &$title)
|
||||
{
|
||||
try {
|
||||
$embed = DB::findOneBy('attachment_embed', ['attachment_id' => $attachment->getId()]);
|
||||
$title = $embed->getTitle();
|
||||
return Event::stop;
|
||||
} catch (NotFoundException) {
|
||||
}
|
||||
return Event::next;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event raised when GNU social polls the plugin for information about it.
|
||||
* Adds this plugin's version information to $versions array
|
||||
|
|
|
@ -21,8 +21,10 @@
|
|||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Core\Cache;
|
||||
use App\Core\DB\DB;
|
||||
use App\Core\Entity;
|
||||
use App\Core\Event;
|
||||
use App\Core\GSFile;
|
||||
use function App\Core\I18n\_m;
|
||||
use App\Core\Log;
|
||||
|
@ -294,12 +296,24 @@ class Attachment extends Entity
|
|||
{
|
||||
// If we have a note, then the best title is the title itself
|
||||
if (!is_null(($note))) {
|
||||
$attachment_to_note = DB::findOneBy('attachment_to_note', [
|
||||
'attachment_id' => $this->getId(),
|
||||
'note_id' => $note->getId(),
|
||||
]);
|
||||
if (!is_null($attachment_to_note->getTitle())) {
|
||||
return $attachment_to_note->getTitle();
|
||||
$title = Cache::get('attachment-title-' . $this->getId() . '-' . $note->getId(), function () use ($note) {
|
||||
try {
|
||||
$attachment_to_note = DB::findOneBy('attachment_to_note', [
|
||||
'attachment_id' => $this->getId(),
|
||||
'note_id' => $note->getId(),
|
||||
]);
|
||||
if (!is_null($attachment_to_note->getTitle())) {
|
||||
return $attachment_to_note->getTitle();
|
||||
}
|
||||
} catch (NotFoundException) {
|
||||
$title = null;
|
||||
Event::handle('AttachmentGetBestTitle', [$this, $note, &$title]);
|
||||
return $title;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
if ($title != null) {
|
||||
return $title;
|
||||
}
|
||||
}
|
||||
// Else
|
||||
|
|
Loading…
Reference in New Issue
Block a user