Generate artwork images for audio using ID3.
This commit is contained in:
parent
24dd71ad33
commit
45dbf84750
30 changed files with 939 additions and 199 deletions
|
@ -26,6 +26,7 @@ class ApiController extends Zend_Controller_Action
|
|||
"show-tracks",
|
||||
"show-schedules",
|
||||
"show-logo",
|
||||
"track",
|
||||
"stream-m3u"
|
||||
);
|
||||
|
||||
|
@ -294,6 +295,20 @@ class ApiController extends Zend_Controller_Action
|
|||
$result = Application_Model_Schedule::GetPlayOrderRangeOld($limit);
|
||||
}
|
||||
|
||||
$stationUrl = Application_Common_HTTPHelper::getStationUrl();
|
||||
|
||||
$previousID = $result["previous"]["metadata"]["id"];
|
||||
$get_prev_artwork_url = $stationUrl . 'api/track?id='. $previousID .'&return=artwork';
|
||||
$result["previous"]["metadata"]["artwork_url"] = $get_prev_artwork_url;
|
||||
|
||||
$currID = $result["current"]["metadata"]["id"];
|
||||
$get_curr_artwork_url = $stationUrl . 'api/track?id='. $currID .'&return=artwork';
|
||||
$result["current"]["metadata"]["artwork_url"] = $get_curr_artwork_url;
|
||||
|
||||
$nextID = $result["previous"]["metadata"]["id"];
|
||||
$get_next_artwork_url = $stationUrl . 'api/track?id='. $nextID .'&return=artwork';
|
||||
$result["previous"]["metadata"]["artwork_url"] = $get_next_artwork_url;
|
||||
|
||||
// apply user-defined timezone, or default to station
|
||||
Application_Common_DateHelper::convertTimestampsToTimezone(
|
||||
$result['currentShow'],
|
||||
|
@ -523,6 +538,103 @@ class ApiController extends Zend_Controller_Action
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* New API endpoint to display metadata from any single track
|
||||
*
|
||||
* Find metadata to any track imported (eg. id=1&return=json)
|
||||
*
|
||||
* @param int $id track ID
|
||||
* @param string $return json, artwork_data, or artwork
|
||||
*
|
||||
*/
|
||||
public function trackAction()
|
||||
{
|
||||
// Disable the view and the layout
|
||||
$this->view->layout()->disableLayout();
|
||||
$this->_helper->viewRenderer->setNoRender(true);
|
||||
|
||||
if (Application_Model_Preference::GetAllow3rdPartyApi() || $this->checkAuth()) {
|
||||
|
||||
$request = $this->getRequest();
|
||||
$trackid = $request->getParam('id');
|
||||
$return = $request->getParam('return');
|
||||
|
||||
if (empty($return)) {
|
||||
throw new ZendActionHttpException($this, 400, "ERROR: No return was given.");
|
||||
}
|
||||
|
||||
if (empty($trackid)) {
|
||||
throw new ZendActionHttpException($this, 400, "ERROR: No ID was given.");
|
||||
}
|
||||
|
||||
$storDir = Application_Model_MusicDir::getStorDir();
|
||||
$fp = $storDir->getDirectory();
|
||||
|
||||
//$this->view->type = $type;
|
||||
$file = Application_Model_StoredFile::RecallById($trackid);
|
||||
$md = $file->getMetadata();
|
||||
|
||||
if ($return === "artwork-data") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderDataURI($fp . $md['MDATA_KEY_ARTWORK']);
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-data-32") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderDataURI($fp . $md['MDATA_KEY_ARTWORK']. '-32');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork") {
|
||||
//default
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-1024.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-32") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-32.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-64") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-64.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-128") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-128.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-512") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-512.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "artwork-1024") {
|
||||
foreach ($md as $key => $value) {
|
||||
if ($key == 'MDATA_KEY_ARTWORK' && !is_null($value)) {
|
||||
FileDataHelper::renderImage($fp . $md['MDATA_KEY_ARTWORK'].'-1024.jpg');
|
||||
}
|
||||
}
|
||||
} elseif ($return === "json") {
|
||||
$data =json_encode($md);
|
||||
echo $data;
|
||||
}
|
||||
|
||||
} else {
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
print _('You are not allowed to access this resource. ');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API endpoint to provide station metadata
|
||||
*/
|
||||
|
|
|
@ -392,7 +392,14 @@ class LibraryController extends Zend_Controller_Action
|
|||
$serialized = array();
|
||||
//need to convert from serialized jQuery array.
|
||||
foreach ($js as $j) {
|
||||
$serialized[$j["name"]] = $j["value"];
|
||||
//on edit, if no artwork is set and audiofile has image, automatically add it
|
||||
if ($j["name"] == "artwork") {
|
||||
if ($j["value"] == null || $j["value"] == ''){
|
||||
$serialized["artwork"] = FileDataHelper::resetArtwork($file_id);
|
||||
}
|
||||
} else {
|
||||
$serialized[$j["name"]] = $j["value"];
|
||||
}
|
||||
}
|
||||
|
||||
// Sanitize any wildly incorrect metadata before it goes to be validated.
|
||||
|
@ -409,6 +416,9 @@ class LibraryController extends Zend_Controller_Action
|
|||
$this->view->form = $form;
|
||||
$this->view->id = $file_id;
|
||||
$this->view->title = $file->getPropelOrm()->getDbTrackTitle();
|
||||
$this->view->artist_name = $file->getPropelOrm()->getDbArtistName();
|
||||
$this->view->filePath = $file->getPropelOrm()->getDbFilepath();
|
||||
$this->view->artwork = $file->getPropelOrm()->getDbArtwork();
|
||||
$this->view->html = $this->view->render('library/edit-file-md.phtml');
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$currentUser = $service_user->getCurrentUser();
|
||||
|
||||
$userTimezone = new DateTimeZone(Application_Model_Preference::GetUserTimezone());
|
||||
|
||||
|
||||
$start = new DateTime($this->_getParam('start', null), $userTimezone);
|
||||
$start->setTimezone(new DateTimeZone("UTC"));
|
||||
$end = new DateTime($this->_getParam('end', null), $userTimezone);
|
||||
|
@ -187,7 +187,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$this->view->show_error = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$error = $service_calendar->moveShow($deltaDay, $deltaMin);
|
||||
if (isset($error)) {
|
||||
$this->view->error = $error;
|
||||
|
@ -209,7 +209,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$log_vars["params"]["delta day"] = $deltaDay;
|
||||
$log_vars["params"]["delta minute"] = $deltaMin;
|
||||
Logging::info($log_vars);
|
||||
|
||||
|
||||
$userInfo = Zend_Auth::getInstance()->getStorage()->read();
|
||||
$user = new Application_Model_User($userInfo->id);
|
||||
|
||||
|
@ -239,7 +239,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$log_vars["params"] = array();
|
||||
$log_vars["params"]["instance id"] = $instanceId;
|
||||
Logging::info($log_vars);
|
||||
|
||||
|
||||
$service_show = new Application_Service_ShowService();
|
||||
$showId = $service_show->deleteShow($instanceId, true);
|
||||
|
||||
|
@ -261,7 +261,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
public function clearShowAction()
|
||||
{
|
||||
$instanceId = $this->_getParam('id');
|
||||
|
||||
|
||||
$log_vars = array();
|
||||
$log_vars["url"] = $_SERVER['HTTP_HOST'];
|
||||
$log_vars["action"] = "schedule/clear-show";
|
||||
|
@ -296,12 +296,14 @@ class ScheduleController extends Zend_Controller_Action
|
|||
|
||||
/* Convert all UTC times to localtime before sending back to user. */
|
||||
$range["schedulerTime"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["schedulerTime"]);
|
||||
|
||||
|
||||
if (isset($range["previous"])) {
|
||||
$range["previous"]["starts"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["previous"]["starts"]);
|
||||
$range["previous"]["ends"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["previous"]["ends"]);
|
||||
}
|
||||
if (isset($range["current"])) {
|
||||
$get_artwork = FileDataHelper::getArtworkData($range["current"]["metadata"]["artwork"], 256);
|
||||
$range["current"]["metadata"]["artwork_data"] = $get_artwork;
|
||||
$range["current"]["starts"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["current"]["starts"]);
|
||||
$range["current"]["ends"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["current"]["ends"]);
|
||||
}
|
||||
|
@ -309,14 +311,14 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$range["next"]["starts"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["next"]["starts"]);
|
||||
$range["next"]["ends"] = Application_Common_DateHelper::UTCStringToUserTimezoneString($range["next"]["ends"]);
|
||||
}
|
||||
|
||||
|
||||
Application_Common_DateHelper::convertTimestamps(
|
||||
$range["currentShow"],
|
||||
$range["currentShow"],
|
||||
array("starts", "ends", "start_timestamp", "end_timestamp"),
|
||||
"user"
|
||||
);
|
||||
Application_Common_DateHelper::convertTimestamps(
|
||||
$range["nextShow"],
|
||||
$range["nextShow"],
|
||||
array("starts", "ends", "start_timestamp", "end_timestamp"),
|
||||
"user"
|
||||
);
|
||||
|
@ -324,7 +326,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
//TODO: Add timezone and timezoneOffset back into the ApiController's results.
|
||||
$range["timezone"] = Application_Common_DateHelper::getUserTimezoneAbbreviation();
|
||||
$range["timezoneOffset"] = Application_Common_DateHelper::getUserTimezoneOffset();
|
||||
|
||||
|
||||
$source_status = array();
|
||||
$switch_status = array();
|
||||
$live_dj = Application_Model_Preference::GetSourceStatus("live_dj");
|
||||
|
@ -358,7 +360,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$originalShowId = $show->isRebroadcast();
|
||||
if (!is_null($originalShowId)) {
|
||||
try {
|
||||
|
@ -375,7 +377,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$displayTimeZone = new DateTimeZone(Application_Model_Preference::GetTimezone());
|
||||
$originalDateTime = new DateTime($originalShowStart, new DateTimeZone("UTC"));
|
||||
$originalDateTime->setTimezone($displayTimeZone);
|
||||
|
||||
|
||||
$this->view->additionalShowInfo =
|
||||
sprintf(_("Rebroadcast of show %s from %s at %s"),
|
||||
$originalShowName,
|
||||
|
@ -461,7 +463,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$log_vars["params"] = array();
|
||||
$log_vars["params"]["form_data"] = $data;
|
||||
Logging::info($log_vars);
|
||||
|
||||
|
||||
$service_showForm = new Application_Service_ShowFormService(
|
||||
$data["add_show_id"], $data["add_show_instance_id"]);
|
||||
$service_show = new Application_Service_ShowService(null, $data);
|
||||
|
@ -513,7 +515,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
if ($data['add_show_day_check'] == "") {
|
||||
$data['add_show_day_check'] = null;
|
||||
}
|
||||
|
||||
|
||||
$log_vars = array();
|
||||
$log_vars["url"] = $_SERVER['HTTP_HOST'];
|
||||
$log_vars["action"] = "schedule/edit-show";
|
||||
|
@ -525,12 +527,12 @@ class ScheduleController extends Zend_Controller_Action
|
|||
|
||||
list($data, $validateStartDate, $validateStartTime, $originalShowStartDateTime) =
|
||||
$service_showForm->preEditShowValidationCheck($data);
|
||||
|
||||
|
||||
if ($service_showForm->validateShowForms($forms, $data, $validateStartDate,
|
||||
$originalShowStartDateTime, true, $data["add_show_instance_id"])) {
|
||||
// Get the show ID from the show service to pass as a parameter to the RESTful ShowImageController
|
||||
$this->view->showId = $service_show->addUpdateShow($data);
|
||||
|
||||
|
||||
$this->view->addNewShow = true;
|
||||
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
|
||||
} else {
|
||||
|
@ -541,7 +543,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$this->view->when->getElement('add_show_start_time')->setOptions(array('disabled' => true));
|
||||
}
|
||||
//$this->view->rr->getElement('add_show_record')->setOptions(array('disabled' => true));
|
||||
|
||||
|
||||
$this->view->addNewShow = false;
|
||||
$this->view->action = "edit-show";
|
||||
$this->view->form = $this->view->render('schedule/add-show-form.phtml');
|
||||
|
@ -551,7 +553,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
public function addShowAction()
|
||||
{
|
||||
$service_showForm = new Application_Service_ShowFormService(null);
|
||||
|
||||
|
||||
$js = $this->_getParam('data');
|
||||
$data = array();
|
||||
|
||||
|
@ -565,20 +567,20 @@ class ScheduleController extends Zend_Controller_Action
|
|||
// TODO: move this to js
|
||||
$data['add_show_hosts'] = $this->_getParam('hosts');
|
||||
$data['add_show_day_check'] = $this->_getParam('days');
|
||||
|
||||
|
||||
if ($data['add_show_day_check'] == "") {
|
||||
$data['add_show_day_check'] = null;
|
||||
}
|
||||
|
||||
|
||||
$log_vars = array();
|
||||
$log_vars["url"] = $_SERVER['HTTP_HOST'];
|
||||
$log_vars["action"] = "schedule/add-show";
|
||||
$log_vars["params"] = array();
|
||||
$log_vars["params"]["form_data"] = $data;
|
||||
Logging::info($log_vars);
|
||||
|
||||
|
||||
$forms = $this->createShowFormAction();
|
||||
|
||||
|
||||
$this->view->addNewShow = true;
|
||||
|
||||
if ($data['add_show_start_now'] == "now") {
|
||||
|
@ -597,18 +599,18 @@ class ScheduleController extends Zend_Controller_Action
|
|||
if ($service_showForm->validateShowForms($forms, $data)) {
|
||||
// Get the show ID from the show service to pass as a parameter to the RESTful ShowImageController
|
||||
$this->view->showId = $service_show->addUpdateShow($data);
|
||||
|
||||
|
||||
//send new show forms to the user
|
||||
$this->createShowFormAction(true);
|
||||
$this->view->newForm = $this->view->render('schedule/add-show-form.phtml');
|
||||
|
||||
|
||||
Logging::debug("Show creation succeeded");
|
||||
} else {
|
||||
$this->view->form = $this->view->render('schedule/add-show-form.phtml');
|
||||
Logging::debug("Show creation failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function createShowFormAction($populateDefaults=false)
|
||||
{
|
||||
$service_showForm = new Application_Service_ShowFormService();
|
||||
|
@ -638,7 +640,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
public function deleteShowAction()
|
||||
{
|
||||
$instanceId = $this->_getParam('id');
|
||||
|
||||
|
||||
$log_vars = array();
|
||||
$log_vars["url"] = $_SERVER['HTTP_HOST'];
|
||||
$log_vars["action"] = "schedule/delete-show";
|
||||
|
@ -648,7 +650,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
|
||||
$service_show = new Application_Service_ShowService();
|
||||
$showId = $service_show->deleteShow($instanceId);
|
||||
|
||||
|
||||
if (!$showId) {
|
||||
$this->view->show_error = true;
|
||||
}
|
||||
|
@ -663,7 +665,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$log_vars["params"] = array();
|
||||
$log_vars["params"]["instance id"] = $this->_getParam('id');
|
||||
Logging::info($log_vars);
|
||||
|
||||
|
||||
$user = Application_Model_User::getCurrentUser();
|
||||
|
||||
if ($user->isUserType(array(UTYPE_SUPERADMIN, UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) {
|
||||
|
@ -730,7 +732,7 @@ class ScheduleController extends Zend_Controller_Action
|
|||
$start = $this->_getParam('startTime');
|
||||
$end = $this->_getParam('endTime');
|
||||
$timezone = $this->_getParam('timezone');
|
||||
|
||||
|
||||
$service_showForm = new Application_Service_ShowFormService();
|
||||
$result = $service_showForm->calculateDuration($start, $end, $timezone);
|
||||
|
||||
|
@ -741,10 +743,10 @@ class ScheduleController extends Zend_Controller_Action
|
|||
public function updateFutureIsScheduledAction()
|
||||
{
|
||||
$schedId = $this->_getParam('schedId');
|
||||
|
||||
|
||||
$scheduleService = new Application_Service_SchedulerService();
|
||||
$redrawLibTable = $scheduleService->updateFutureIsScheduled($schedId, false);
|
||||
|
||||
|
||||
$this->_helper->json->sendJson(array("redrawLibTable" => $redrawLibTable));
|
||||
}
|
||||
|
||||
|
@ -762,5 +764,5 @@ class ScheduleController extends Zend_Controller_Action
|
|||
|
||||
$this->_helper->json->sendJson($localTime);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ class PageLayoutInitPlugin extends Zend_Controller_Plugin_Abstract
|
|||
$userType = "";
|
||||
}
|
||||
$view->headScript()->appendScript("var userType = '$userType';");
|
||||
|
||||
|
||||
// Dropzone also accept file extensions and doesn't correctly extract certain mimetypes (eg. FLAC - try it),
|
||||
// so we append the file extensions to the list of mimetypes and that makes it work.
|
||||
$mimeTypes = FileDataHelper::getAudioMimeTypeArray();
|
||||
|
@ -139,6 +139,8 @@ class PageLayoutInitPlugin extends Zend_Controller_Plugin_Abstract
|
|||
$view->headScript()->appendScript("var PRODUCT_NAME = '" . PRODUCT_NAME . "';");
|
||||
$view->headScript()->appendScript("var USER_MANUAL_URL = '" . USER_MANUAL_URL . "';");
|
||||
$view->headScript()->appendScript("var COMPANY_NAME = '" . COMPANY_NAME . "';");
|
||||
//Each page refresh or tab open has uniqID, not to be used for security
|
||||
$view->headScript()->appendScript("var UNIQID = '" . uniqid() . "';");
|
||||
}
|
||||
|
||||
protected function _initHeadLink()
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE cc_files ADD COLUMN artwork TYPE character varying(255);
|
Loading…
Add table
Add a link
Reference in a new issue