You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.0 KiB
131 lines
4.0 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use App\Models\AlbumQueue;
|
|
use App\Models\Artist;
|
|
use App\Models\WebDriver;
|
|
use App\Models\WebScraper;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\ArtistQueue;
|
|
|
|
class ApiController extends Controller
|
|
{
|
|
public function get_artists(Request $request)
|
|
{
|
|
|
|
$artists = Artist::all();
|
|
$data = array();
|
|
|
|
foreach ($artists as $artist) {
|
|
$data[] = [
|
|
'id' => $artist->id,
|
|
'name' => $artist->name,
|
|
'url_remote' => $artist->url_remote,
|
|
'state' => $artist->state,
|
|
'thumbnail' => $artist->thumbnail,
|
|
];
|
|
}
|
|
$response = json_encode(array('data' => $data));
|
|
return $response;
|
|
}
|
|
|
|
public function get_album_queue()
|
|
{
|
|
$album_queue = AlbumQueue::where('state', '!=', 'done')->get();
|
|
$response = array();
|
|
foreach ($album_queue as $queue) {
|
|
$album = $queue->album;
|
|
$artist = $album->artist;
|
|
$response[] = [
|
|
'name' => $album->name,
|
|
'artist_id' => $artist->toArray(),
|
|
'url_remote' => $album->url_remote,
|
|
'thumbnail' => $album->thumbnail,
|
|
'image' => $album->image,
|
|
'state' => $queue->state,
|
|
];
|
|
}
|
|
return json_encode($response);
|
|
}
|
|
|
|
public function queue_artist($id, ArtistQueue $artistQueue): bool
|
|
{
|
|
return $artistQueue->enqueue($id);
|
|
}
|
|
|
|
public function queue_artist_run()
|
|
{
|
|
\Log::info('===========================');
|
|
\Log::info('Queue running for Artists..');
|
|
Artisan::queue('app:process-artist-queue');
|
|
}
|
|
|
|
public function search_artist(string $artist)
|
|
{
|
|
$url = 'https://music.youtube.com/search?q=' . str_replace(' ', '+', $artist);
|
|
$driver = WebDriver::setUp();
|
|
$driver->get($url);
|
|
|
|
// Add handling for no artist button; Some artists searches don't have this option (Ex The Black Dahlia Murder)
|
|
try {
|
|
$response = WebScraper::scrapeArtists($driver);
|
|
} catch (\Exception) {
|
|
\Log::warning('Could not get list of artists, attempting to get single artist card..');
|
|
$response = WebScraper::scrapeArtist($driver);
|
|
} finally {
|
|
$driver->quit();
|
|
}
|
|
return response()->json($response);
|
|
}
|
|
|
|
public function queue_waiting()
|
|
{
|
|
\Log::info('===========================');
|
|
\Log::info('Queue running for Albums..');
|
|
$data = array('queue' => false);
|
|
$queue = AlbumQueue::where('state', 'pending')->first();
|
|
if (!is_null($queue)) {
|
|
$album = $queue->album;
|
|
$artist = $album->artist;
|
|
$queue->state = 'in_progress';
|
|
$queue->save();
|
|
$data = array('queue' => $queue->toArray(), 'album' => $album->toArray(), 'artist' => $artist->toArray());
|
|
|
|
}
|
|
return json_encode($data);
|
|
}
|
|
|
|
public function queue_update(Request $request, $id)
|
|
{
|
|
$queue = AlbumQueue::where('id', $id)->first();
|
|
$album = $queue->album;
|
|
$artist = $album->artist;
|
|
|
|
if ($queue->exists()) {
|
|
|
|
if (isset($request['album']) || isset($request['artist'])) {
|
|
$album_local_url = $request['album']['url_local'] ?? '';
|
|
$artist_local_url = $request['artist']['url_local'] ?? '';
|
|
|
|
if ($album_local_url || $artist_local_url) {
|
|
if ($artist_local_url && is_string($artist_local_url)) {
|
|
$artist->url_local = $artist_local_url;
|
|
$artist->save();
|
|
}
|
|
if ($album_local_url && is_string($album_local_url)) {
|
|
$album->url_local = $album_local_url;
|
|
$album->save();
|
|
}
|
|
$queue->state = 'done';
|
|
$queue->save();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|