diff --git a/app/Commands/TraktWatch.php b/app/Commands/TraktWatch.php index 07333d6..24bb3b0 100644 --- a/app/Commands/TraktWatch.php +++ b/app/Commands/TraktWatch.php @@ -4,7 +4,7 @@ namespace App\Commands; use App\Data\WatchFile; use App\Data\WatchData; -use Illuminate\Support\Facades\Http; +use App\Services\Trakt; class TraktWatch extends Command { @@ -14,21 +14,9 @@ class TraktWatch extends Command public function handle(): int { $file = WatchFile::from($this->argument('file')); + $data = WatchData::from(['rawData' => [$file->toArray()]]); + $resp = $this->app->make(Trakt::class)->syncHistory($data, $this->output); - $watchData = WatchData::from(['rawData' => [$file->toArray()]]); - $data = $watchData->structuredData; - - $headers = [ - 'trakt-api-version' => 2, - 'trakt-api-key' => env('TRAKT_APP_ID'), - 'Authorization' => 'Bearer ' . env('TRAKT_OAUTH_TOKEN'), - ]; - - $this->info(sprintf('Submitting %s to trakt with headers %s', json_encode($data), json_encode($headers))); - $response = Http::withHeaders($headers)->post('https://api.trakt.tv/sync/history', $data); - - $this->line('Response: ' . PHP_EOL . json_encode($response->json(), JSON_PRETTY_PRINT)); - - return static::SUCCESS; + return $resp->ok() ? static::SUCCESS : static::FAILURE; } } diff --git a/app/Commands/TraktWatchImport.php b/app/Commands/TraktWatchImport.php index 2f8d982..4a6eeaf 100644 --- a/app/Commands/TraktWatchImport.php +++ b/app/Commands/TraktWatchImport.php @@ -3,7 +3,7 @@ namespace App\Commands; use App\Data\WatchData; -use Illuminate\Support\Facades\Http; +use App\Services\Trakt; class TraktWatchImport extends Command { @@ -13,19 +13,8 @@ class TraktWatchImport extends Command public function handle(): int { $watched = WatchData::from($this->arguments()); - $data = $watched->structuredData; + $resp = $this->app->make(Trakt::class)->syncHistory($watched, $this->output); - $headers = [ - 'trakt-api-version' => 2, - 'trakt-api-key' => env('TRAKT_APP_ID'), - 'Authorization' => 'Bearer ' . env('TRAKT_OAUTH_TOKEN'), - ]; - - $this->info(sprintf('Submitting %s to trakt with headers %s', json_encode($data), json_encode($headers))); - $response = Http::withHeaders($headers)->post('https://api.trakt.tv/sync/history', $data); - - $this->line('Response: ' . PHP_EOL . json_encode($response->json(), JSON_PRETTY_PRINT)); - - return static::SUCCESS; + return $resp->ok() ? static::SUCCESS : static::FAILURE; } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3fe44b1..8c37147 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -6,6 +6,7 @@ use App\Services\ProcessInput; use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Queue\Factory as QueueFactoryContract; use App\Queue\DatabaseConnector; +use App\Services\Trakt; class AppServiceProvider extends ServiceProvider { @@ -28,5 +29,6 @@ class AppServiceProvider extends ServiceProvider public function register() { $this->app->instance(ProcessInput::class, new ProcessInput()); + $this->app->instance(Trakt::class, new Trakt()); } } diff --git a/app/Services/Trakt.php b/app/Services/Trakt.php new file mode 100644 index 0000000..9958eda --- /dev/null +++ b/app/Services/Trakt.php @@ -0,0 +1,39 @@ +headers = [ + 'trakt-api-version' => 2, + 'trakt-api-key' => env('TRAKT_APP_ID'), + 'Authorization' => 'Bearer ' . env('TRAKT_OAUTH_TOKEN'), + ]; + } + + public function request(array $headers = []): PendingRequest + { + return Http::withHeaders($this->headers + $headers)->baseUrl('https://api.trakt.tv'); + } + + public function syncHistory(WatchData $data, OutputInterface $output = null): Response + { + $output?->writeln(sprintf('Submitting %s to trakt with headers %s', json_encode($data->structuredData), json_encode($this->headers))); + + $resp = $this->request()->post('/sync/history', $data->structuredData); + + $output?->writeln('Response (' . $resp->status() . '):' . PHP_EOL . json_encode($resp->json(), JSON_PRETTY_PRINT)); + + return $resp; + } +}