forked from are0h/tapes
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace brain\controllers;
 | 
						|
 | 
						|
use Kiwilan\Audio\Audio;
 | 
						|
 | 
						|
class TapesAPI
 | 
						|
{
 | 
						|
    private $tapesDir = "assets/audio/tapes";
 | 
						|
    protected $params;
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    public function handleRequest($params)
 | 
						|
    {
 | 
						|
        if (isset($params[2])) {
 | 
						|
            switch ($params[2]) {
 | 
						|
                case "list":
 | 
						|
                    return $this->getList();
 | 
						|
                    break;
 | 
						|
                case "tracklist":
 | 
						|
                    return $this->getTrackList($params[3]);
 | 
						|
                    break;
 | 
						|
                default:
 | 
						|
                    return json_encode([
 | 
						|
                      "message" => "This method does not exist",
 | 
						|
                      "type" => "ERROR",
 | 
						|
                    ]);
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            return json_encode([
 | 
						|
              "message" => "This method does not exist",
 | 
						|
              "type" => "ERROR",
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function getTrackList($id)
 | 
						|
    {
 | 
						|
        $folder = $this->tapesDir . "/" . urldecode($id);
 | 
						|
        $contents = scandir($folder);
 | 
						|
        $tracklist = [];
 | 
						|
        foreach ($contents as $key => $value) {
 | 
						|
            $path = realpath($folder . DIRECTORY_SEPARATOR . $value);
 | 
						|
            if (!is_dir($path) && $value != ".DS_Store") {
 | 
						|
                $item = explode("/", $path);
 | 
						|
                if ($item[9] != "cover.jpg") {
 | 
						|
                    $tags = Audio::read($path);
 | 
						|
                    //reading cover data is lil funky, so off for now
 | 
						|
                    //$cover = $tags->getCover();
 | 
						|
                    //$image = $cover->getContents();
 | 
						|
                    $album = "";
 | 
						|
                    if (empty($tags->getAlbum())) {
 | 
						|
                        $album = "None";
 | 
						|
                    } else {
 | 
						|
                        $album = $tags->getAlbum();
 | 
						|
                    }
 | 
						|
                    array_push($tracklist, [
 | 
						|
                      "title" => $tags->getTitle(),
 | 
						|
                      "album" => $album,
 | 
						|
                      "artist" => $tags->getArtist(),
 | 
						|
                      "time" => $tags->getDuration(),
 | 
						|
                      "file" => $item[9],
 | 
						|
                      "tape" => $item[8],
 | 
						|
                    ]);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        usort($tracklist, function ($a, $b) {
 | 
						|
            return strnatcasecmp($a["file"], $b["file"]);
 | 
						|
        });
 | 
						|
        return json_encode($tracklist);
 | 
						|
    }
 | 
						|
 | 
						|
    public function getList($obj = false)
 | 
						|
    {
 | 
						|
        $current = scandir($this->tapesDir);
 | 
						|
        $tapeList = [];
 | 
						|
        foreach ($current as $key => $value) {
 | 
						|
            $path = realpath($this->tapesDir . DIRECTORY_SEPARATOR . $value);
 | 
						|
            if (!is_dir($path) && $value != ".DS_Store") {
 | 
						|
                $results[] = $path;
 | 
						|
            } elseif ($value != "." && $value != ".." && $value != ".DS_Store") {
 | 
						|
                $titles = explode("/", $path);
 | 
						|
                array_push($tapeList, ["path" => $path, "title" => $titles[8]]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (!$obj) {
 | 
						|
            return json_encode($tapeList);
 | 
						|
        } else {
 | 
						|
            return $tapeList;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |