[link scan] handle missing posts

This commit is contained in:
Shish 2024-01-16 12:47:32 +00:00
parent a59dddd98f
commit 04471a2875
2 changed files with 12 additions and 3 deletions

View file

@ -32,11 +32,17 @@ class LinkScan extends Extension
$matches = []; $matches = [];
preg_match_all("/post\/view\/(\d+)/", $text, $matches); preg_match_all("/post\/view\/(\d+)/", $text, $matches);
foreach($matches[1] as $match) { foreach($matches[1] as $match) {
$ids[] = $match; $img = Image::by_id((int)$match);
if ($img) {
$ids[] = $img->id;
}
} }
preg_match_all("/\b([0-9a-fA-F]{32})\b/", $text, $matches); preg_match_all("/\b([0-9a-fA-F]{32})\b/", $text, $matches);
foreach($matches[1] as $match) { foreach($matches[1] as $match) {
$ids[] = Image::by_hash($match)->id; $img = Image::by_hash($match);
if ($img) {
$ids[] = $img->id;
}
} }
return array_unique($ids); return array_unique($ids);
} }

View file

@ -16,6 +16,8 @@ class LinkScanTest extends ShimmiePHPUnitTestCase
Look at http://example.com/post/view/{$image_id_1} there is an image Look at http://example.com/post/view/{$image_id_1} there is an image
http://example.com/post/view/{$image_id_2} is another one http://example.com/post/view/{$image_id_2} is another one
But there is no http://example.com/post/view/65432
"; ";
$page = $this->get_page("post/list", ["search" => $text]); $page = $this->get_page("post/list", ["search" => $text]);
@ -31,7 +33,8 @@ class LinkScanTest extends ShimmiePHPUnitTestCase
$text = " $text = "
Look at http://example.com/_images/feb01bab5698a11dd87416724c7a89e3/foobar.jpg Look at http://example.com/_images/feb01bab5698a11dd87416724c7a89e3/foobar.jpg
there is an image or search for e106ea2983e1b77f11e00c0c54e53805"; there is an image or search for e106ea2983e1b77f11e00c0c54e53805 but one that
doesn't exist is e106ea2983e1b77f11e00c0c54e50000 o.o";
$page = $this->get_page("post/list", ["search" => $text]); $page = $this->get_page("post/list", ["search" => $text]);
$this->assertEquals(PageMode::REDIRECT, $page->mode); $this->assertEquals(PageMode::REDIRECT, $page->mode);