Take a screenshot of the bookmark

This commit is contained in:
Jonny Barnes 2017-10-13 12:31:31 +01:00
parent a5d3ba7829
commit 33cf91f6d5
10 changed files with 1854 additions and 1456 deletions

View file

@ -7,6 +7,7 @@ use Monolog\Logger;
use Ramsey\Uuid\Uuid; use Ramsey\Uuid\Uuid;
use App\Jobs\ProcessImage; use App\Jobs\ProcessImage;
use App\Services\LikeService; use App\Services\LikeService;
use App\Services\BookmarkService;
use Monolog\Handler\StreamHandler; use Monolog\Handler\StreamHandler;
use App\{Like, Media, Note, Place}; use App\{Like, Media, Note, Place};
use Intervention\Image\ImageManager; use Intervention\Image\ImageManager;

View file

@ -0,0 +1,45 @@
<?php
namespace App\Jobs;
use App\Bookmark;
use Ramsey\Uuid\Uuid;
use Illuminate\Bus\Queueable;
use Spatie\Image\Manipulations;
use Spatie\Browsershot\Browsershot;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class ProcessBookmark implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $bookmark;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Bookmark $bookmark)
{
$this->bookmark = $bookmark;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Browsershot $browsershot)
{
$uuid = Uuid::uuid4();
$browsershot->url($this->bookmark->url)
->windowSize(960, 640)
->save(public_path() . '/assets/img/bookmarks/' . $uuid . '.png');
$this->bookmark->screenshot = $uuid;
$this->bookmark->save();
}
}

View file

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Services; namespace App\Services;
use App\Tag;
use App\Bookmark; use App\Bookmark;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Jobs\ProcessBookmark; use App\Jobs\ProcessBookmark;
@ -15,7 +16,7 @@ class BookmarkService
* *
* @param Request $request * @param Request $request
*/ */
public function createLike(Request $request): Bookmark public function createBookmark(Request $request): Bookmark
{ {
if ($request->header('Content-Type') == 'application/json') { if ($request->header('Content-Type') == 'application/json') {
//micropub request //micropub request
@ -25,14 +26,14 @@ class BookmarkService
$categories = $request->input('properties.category'); $categories = $request->input('properties.category');
} }
if ( if (
($request->header('Content-Type') == 'x-www-url-formencoded') ($request->header('Content-Type') == 'application/x-www-form-urlencoded')
|| ||
($request->header('Content-Type') == 'multipart/form-data') (str_contains($request->header('Content-Type'), 'multipart/form-data'))
) { ) {
$url = normalize_url($request->input('bookmark-of')); $url = normalize_url($request->input('bookmark-of'));
$name = $request->input('name'); $name = $request->input('name');
$content = $request->input('content'); $content = $request->input('content');
$categories = $request->input('category[]'); $categories = $request->input('category');
} }
$bookmark = Bookmark::create([ $bookmark = Bookmark::create([
@ -41,13 +42,13 @@ class BookmarkService
'content' => $content, 'content' => $content,
]); ]);
foreach($categories as $category) { foreach((array) $categories as $category) {
$tag = Tag::firstOrCreate(['tag' => $category]); $tag = Tag::firstOrCreate(['tag' => $category]);
$bookmark->tags()->save($tag); $bookmark->tags()->save($tag);
} }
ProcessBookmark::dispatch($bookmark); ProcessBookmark::dispatch($bookmark);
return $Bookmark; return $bookmark;
} }
} }

View file

@ -29,6 +29,7 @@
"predis/predis": "~1.0", "predis/predis": "~1.0",
"ramsey/uuid": "^3.5", "ramsey/uuid": "^3.5",
"sensiolabs/security-checker": "^4.0", "sensiolabs/security-checker": "^4.0",
"spatie/browsershot": "^2.4",
"thujohn/twitter": "~2.0" "thujohn/twitter": "~2.0"
}, },
"require-dev": { "require-dev": {

3211
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -18,6 +18,7 @@ class CreateBookmarksTable extends Migration
$table->string('url'); $table->string('url');
$table->string('name')->nullable(); $table->string('name')->nullable();
$table->text('content')->nullable(); $table->text('content')->nullable();
$table->uuid('screenshot')->nullable();
$table->timestamps(); $table->timestamps();
}); });
} }

View file

@ -0,0 +1 @@
*.png

View file

@ -20,6 +20,9 @@ Bookmarks «
@isset($bookmark->content) @isset($bookmark->content)
<p>{{ $bookmark->content }}</p> <p>{{ $bookmark->content }}</p>
@endisset @endisset
@isset($bookmark->screenshot)
<img src="/assets/img/bookmarks/{{ $bookmark->screenshot }}.png">
@endisset
@if($bookmark->tags_count > 0) @if($bookmark->tags_count > 0)
<ul> <ul>
@foreach($bookmark->tags as $tag) @foreach($bookmark->tags as $tag)

View file

@ -18,6 +18,9 @@ Bookmark «
@isset($bookmark->content) @isset($bookmark->content)
<p>{{ $bookmark->content }}</p> <p>{{ $bookmark->content }}</p>
@endisset @endisset
@isset($bookmark->screenshot)
<img src="/assets/img/bookmarks/{{ $bookmark->screenshot }}.png">
@endisset
@if(count($bookmark->tags) > 0) @if(count($bookmark->tags) > 0)
<ul> <ul>
@foreach($bookmark->tags as $tag) @foreach($bookmark->tags as $tag)

View file

@ -0,0 +1,31 @@
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Tests\TestToken;
use App\Jobs\ProcessBookmark;
use Illuminate\Support\Facades\Queue;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class BookmarksTest extends TestCase
{
use DatabaseTransactions, TestToken;
public function test_browsershot_job_dispatches_when_bookmark_added()
{
Queue::fake();
$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $this->getToken(),
])->post('/api/post', [
'h' => 'entry',
'bookmark-of' => 'https://example.org/blog-post',
]);
$response->assertJson(['response' => 'created']);
Queue::assertPushed(ProcessBookmark::class);
$this->assertDatabaseHas('bookmarks', ['url' => 'https://example.org/blog-post']);
}
}