From 9db18df3297e8f1d70c4db1217507e2390e6fef4 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 17 Mar 2019 16:25:53 -0600 Subject: [PATCH 1/6] Update pixelfed config --- config/pixelfed.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/config/pixelfed.php b/config/pixelfed.php index 295ae058a..a5323a467 100644 --- a/config/pixelfed.php +++ b/config/pixelfed.php @@ -263,5 +263,15 @@ return [ 'ap_inbox' => env('ACTIVITYPUB_INBOX', false), 'ap_shared' => env('ACTIVITYPUB_SHAREDINBOX', false), 'ap_delivery_timeout' => env('ACTIVITYPUB_DELIVERY_TIMEOUT', 2.0), - 'ap_delivery_concurrency' => env('ACTIVITYPUB_DELIVERY_CONCURRENCY', 10) + 'ap_delivery_concurrency' => env('ACTIVITYPUB_DELIVERY_CONCURRENCY', 10), + + 'import' => [ + 'instagram' => [ + 'enabled' => env('IMPORT_INSTAGRAM_ENABLED', false), + 'limits' => [ + 'posts' => (int) env('IMPORT_INSTAGRAM_POST_LIMIT', 100), + 'size' => (int) env('IMPORT_INSTAGRAM_SIZE_LIMIT', 250) + ] + ] + ], ]; From 06fe1f0669c788cee56be75aca1ebf69e0f840a8 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 17 Mar 2019 17:00:46 -0600 Subject: [PATCH 2/6] Update ImportController --- app/Http/Controllers/ImportController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php index ba99900bc..6598a9e7c 100644 --- a/app/Http/Controllers/ImportController.php +++ b/app/Http/Controllers/ImportController.php @@ -11,6 +11,10 @@ class ImportController extends Controller public function __construct() { $this->middleware('auth'); + + if(config('pixelfed.import.instagram.enabled') != true) { + abort(404, 'Feature not enabled'); + } } } From a27418d4ef0d61da074143e1ce74738a60583e7e Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 17 Mar 2019 17:01:06 -0600 Subject: [PATCH 3/6] Update ImportPipeline --- app/Jobs/ImportPipeline/ImportInstagram.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Jobs/ImportPipeline/ImportInstagram.php b/app/Jobs/ImportPipeline/ImportInstagram.php index c6cbd9d93..f36988c13 100644 --- a/app/Jobs/ImportPipeline/ImportInstagram.php +++ b/app/Jobs/ImportPipeline/ImportInstagram.php @@ -50,6 +50,10 @@ class ImportInstagram implements ShouldQueue */ public function handle() { + if(config('pixelfed.import.instagram.enabled') != true) { + return; + } + $job = $this->job; $profile = $this->job->profile; $json = $job->mediaJson(); From 4e8a7e7b070360e950acb1c3780d6fe287a99b61 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 17 Mar 2019 17:01:54 -0600 Subject: [PATCH 4/6] Update Import controller --- app/Http/Controllers/Import/Instagram.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Import/Instagram.php b/app/Http/Controllers/Import/Instagram.php index 401a6be38..eef51f919 100644 --- a/app/Http/Controllers/Import/Instagram.php +++ b/app/Http/Controllers/Import/Instagram.php @@ -11,6 +11,7 @@ use App\{ Profile, User }; +use App\Jobs\ImportPipeline\ImportInstagram; trait Instagram { @@ -134,8 +135,6 @@ trait Instagram $job->stage = 3; $job->save(); return redirect($job->url()); - return $json; - } public function instagramStepThree(Request $request, $uuid) @@ -148,4 +147,19 @@ trait Instagram ->firstOrFail(); return view('settings.import.instagram.step-three', compact('profile', 'job')); } + + public function instagramStepThreeStore(Request $request, $uuid) + { + $profile = Auth::user()->profile; + + $job = ImportJob::whereProfileId($profile->id) + ->whereNull('completed_at') + ->whereUuid($uuid) + ->whereStage(3) + ->firstOrFail(); + + ImportInstagram::dispatchNow($job); + + return redirect($profile->url()); + } } From 77819a6dd062d2763b2073d841765ac807acb924 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 17 Mar 2019 19:12:18 -0600 Subject: [PATCH 5/6] Update IG Import Controller --- app/Http/Controllers/Import/Instagram.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Http/Controllers/Import/Instagram.php b/app/Http/Controllers/Import/Instagram.php index eef51f919..0b1486f31 100644 --- a/app/Http/Controllers/Import/Instagram.php +++ b/app/Http/Controllers/Import/Instagram.php @@ -22,6 +22,13 @@ trait Instagram public function instagramStart(Request $request) { + $completed = ImportJob::whereProfileId(Auth::user()->profile->id) + ->whereService('instagram') + ->whereNotNull('completed_at') + ->exists(); + if($completed == true) { + return redirect(route('settings'))->with(['errors' => ['You can only import from Instagram once.']]); + } $job = $this->instagramRedirectOrNew(); return redirect($job->url()); } From c7819514d9283b1eba4dc2f82279ca09fec41c13 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 18 Mar 2019 14:04:14 -0600 Subject: [PATCH 6/6] Update ImportPipeline --- app/Jobs/ImportPipeline/ImportInstagram.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/Jobs/ImportPipeline/ImportInstagram.php b/app/Jobs/ImportPipeline/ImportInstagram.php index f36988c13..1209ecd87 100644 --- a/app/Jobs/ImportPipeline/ImportInstagram.php +++ b/app/Jobs/ImportPipeline/ImportInstagram.php @@ -24,7 +24,7 @@ class ImportInstagram implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - protected $job; + protected $import; /** * Delete the job if its models no longer exist. @@ -38,9 +38,9 @@ class ImportInstagram implements ShouldQueue * * @return void */ - public function __construct(ImportJob $job) + public function __construct(ImportJob $import) { - $this->job = $job; + $this->import = $import; } /** @@ -53,9 +53,9 @@ class ImportInstagram implements ShouldQueue if(config('pixelfed.import.instagram.enabled') != true) { return; } - - $job = $this->job; - $profile = $this->job->profile; + + $job = ImportJob::findOrFail($this->import->id); + $profile = Profile::findOrFail($job->profile_id); $json = $job->mediaJson(); $collection = $json['photos']; $files = $job->files; @@ -78,9 +78,9 @@ class ImportInstagram implements ShouldQueue $filename = last( explode('/', $import['path']) ); $importData = ImportData::whereJobId($job->id) ->whereOriginalName($filename) - ->firstOrFail(); + ->first(); - if(is_file(storage_path("app/$importData->path")) == false) { + if(empty($importData) || is_file(storage_path("app/$importData->path")) == false) { continue; } @@ -92,6 +92,8 @@ class ImportInstagram implements ShouldQueue $status->profile_id = $profile->id; $status->caption = strip_tags($caption); $status->is_nsfw = false; + $status->type = 'photo'; + $status->scope = 'unlisted'; $status->visibility = 'unlisted'; $status->created_at = $taken_at; $status->save();