diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php
index ac32ae832..c48e82b0c 100644
--- a/airtime_mvc/application/controllers/ApiController.php
+++ b/airtime_mvc/application/controllers/ApiController.php
@@ -1042,12 +1042,15 @@ class ApiController extends Zend_Controller_Action
{
$request = $this->getRequest();
$data = $request->getParam("data");
- $media_id = $request->getParam("media_id");
+ $media_id = intval($request->getParam("media_id"));
$data_arr = json_decode($data);
+
+ //$media_id is -1 sometimes when a stream has stopped playing
+ if (!is_null($media_id) && $media_id > 0) {
- if (!is_null($media_id)) {
- if (isset($data_arr->title) &&
- strlen($data_arr->title) < 1024) {
+ if (isset($data_arr->title)) {
+
+ $data_title = substr($data_arr->title, 0, 1024);
$previous_metadata = CcWebstreamMetadataQuery::create()
->orderByDbStartTime('desc')
@@ -1056,23 +1059,27 @@ class ApiController extends Zend_Controller_Action
$do_insert = true;
if ($previous_metadata) {
- if ($previous_metadata->getDbLiquidsoapData() == $data_arr->title) {
- Logging::debug("Duplicate found: ".$data_arr->title);
+ if ($previous_metadata->getDbLiquidsoapData() == $data_title) {
+ Logging::debug("Duplicate found: ". $data_title);
$do_insert = false;
}
}
if ($do_insert) {
+
+ $startDT = new DateTime("now", new DateTimeZone("UTC"));
+
$webstream_metadata = new CcWebstreamMetadata();
$webstream_metadata->setDbInstanceId($media_id);
- $webstream_metadata->setDbStartTime(new DateTime("now", new DateTimeZone("UTC")));
- $webstream_metadata->setDbLiquidsoapData($data_arr->title);
+ $webstream_metadata->setDbStartTime($startDT);
+ $webstream_metadata->setDbLiquidsoapData($data_title);
$webstream_metadata->save();
+
+ $historyService = new Application_Service_HistoryService();
+ $historyService->insertWebstreamMetadata($media_id, $startDT, $data_arr);
}
}
- } else {
- throw new Exception("Null value of media_id");
- }
+ }
$this->view->response = $data;
$this->view->media_id = $media_id;
diff --git a/airtime_mvc/application/forms/EditHistoryItem.php b/airtime_mvc/application/forms/EditHistoryItem.php
index 16ba5ded5..2f6f38043 100644
--- a/airtime_mvc/application/forms/EditHistoryItem.php
+++ b/airtime_mvc/application/forms/EditHistoryItem.php
@@ -43,7 +43,7 @@ class Application_Form_EditHistoryItem extends Application_Form_EditHistory
$ends->addFilter('StringTrim');
$ends->setLabel(_('End Time'));
$ends->setDecorators(array('ViewHelper'));
- $ends->setRequired(true);
+ //$ends->setRequired(true);
$this->addElement($ends);
}
diff --git a/airtime_mvc/application/models/airtime/CcPlayoutHistoryMetaData.php b/airtime_mvc/application/models/airtime/CcPlayoutHistoryMetaData.php
index 890a4ca05..b55de6043 100644
--- a/airtime_mvc/application/models/airtime/CcPlayoutHistoryMetaData.php
+++ b/airtime_mvc/application/models/airtime/CcPlayoutHistoryMetaData.php
@@ -14,5 +14,21 @@
* @package propel.generator.airtime
*/
class CcPlayoutHistoryMetaData extends BaseCcPlayoutHistoryMetaData {
+
+ /**
+ * Set the value of [value] column.
+ *
+ * @param string $v new value
+ * @return CcPlayoutHistoryMetaData The current object (for fluent API support)
+ */
+ public function setDbValue($v)
+ {
+ //make sure the metadata isn't longer than the DB field.
+ $v = substr($v, 0, 128);
+
+ parent::setDbValue($v);
+
+ return $this;
+ } // setDbValue()
} // CcPlayoutHistoryMetaData
diff --git a/airtime_mvc/application/models/airtime/map/CcPlayoutHistoryTableMap.php b/airtime_mvc/application/models/airtime/map/CcPlayoutHistoryTableMap.php
index 6c365d7bb..23696f18d 100644
--- a/airtime_mvc/application/models/airtime/map/CcPlayoutHistoryTableMap.php
+++ b/airtime_mvc/application/models/airtime/map/CcPlayoutHistoryTableMap.php
@@ -41,7 +41,7 @@ class CcPlayoutHistoryTableMap extends TableMap {
$this->addPrimaryKey('ID', 'DbId', 'INTEGER', true, null, null);
$this->addForeignKey('FILE_ID', 'DbFileId', 'INTEGER', 'cc_files', 'ID', false, null, null);
$this->addColumn('STARTS', 'DbStarts', 'TIMESTAMP', true, null, null);
- $this->addColumn('ENDS', 'DbEnds', 'TIMESTAMP', true, null, null);
+ $this->addColumn('ENDS', 'DbEnds', 'TIMESTAMP', false, null, null);
$this->addForeignKey('INSTANCE_ID', 'DbInstanceId', 'INTEGER', 'cc_show_instances', 'ID', false, null, null);
// validators
} // initialize()
diff --git a/airtime_mvc/application/services/HistoryService.php b/airtime_mvc/application/services/HistoryService.php
index 4477e28ff..d273e1fb9 100644
--- a/airtime_mvc/application/services/HistoryService.php
+++ b/airtime_mvc/application/services/HistoryService.php
@@ -290,9 +290,12 @@ class Application_Service_HistoryService
$dateTime->setTimezone($timezoneLocal);
$result["starts"] = $dateTime->format("Y-m-d H:i:s");
- $dateTime = new DateTime($result["ends"], $timezoneUTC);
- $dateTime->setTimezone($timezoneLocal);
- $result["ends"] = $dateTime->format("Y-m-d H:i:s");
+ //if ends is null we don't want it to default to "now"
+ if (isset($result["ends"])) {
+ $dateTime = new DateTime($result["ends"], $timezoneUTC);
+ $dateTime->setTimezone($timezoneLocal);
+ $result["ends"] = $dateTime->format("Y-m-d H:i:s");
+ }
if (isset($result[MDATA_KEY_DURATION])) {
$formatter = new LengthFormatter($result[MDATA_KEY_DURATION]);
@@ -505,6 +508,48 @@ class Application_Service_HistoryService
return $filteredShows;
}
+
+ public function insertWebstreamMetadata($schedId, $startDT, $data) {
+
+ $this->con->beginTransaction();
+
+ try {
+
+ $item = CcScheduleQuery::create()->findPK($schedId, $this->con);
+
+ //TODO figure out how to combine these all into 1 query.
+ $showInstance = $item->getCcShowInstances($this->con);
+ $show = $showInstance->getCcShow($this->con);
+
+ $webstream = $item->getCcWebstream($this->con);
+
+ $metadata = array();
+ $metadata["showname"] = $show->getDbName();
+ $metadata[MDATA_KEY_TITLE] = $data->title;
+ $metadata[MDATA_KEY_CREATOR] = $webstream->getDbName();
+
+ $history = new CcPlayoutHistory();
+ $history->setDbStarts($startDT);
+ $history->setDbEnds(null);
+ $history->setDbInstanceId($item->getDbInstanceId());
+
+ foreach ($metadata as $key => $val) {
+ $meta = new CcPlayoutHistoryMetaData();
+ $meta->setDbKey($key);
+ $meta->setDbValue($val);
+
+ $history->addCcPlayoutHistoryMetaData($meta);
+ }
+
+ $history->save($this->con);
+
+ $this->con->commit();
+ }
+ catch (Exception $e) {
+ $this->con->rollback();
+ throw $e;
+ }
+ }
public function insertPlayedItem($schedId) {
@@ -611,7 +656,7 @@ class Application_Service_HistoryService
}
//need to convert to the station's local time first.
- if ($field["type"] == TEMPLATE_DATETIME) {
+ if ($field["type"] == TEMPLATE_DATETIME && !is_null($value)) {
$timezoneUTC = new DateTimeZone("UTC");
$timezoneLocal = new DateTimeZone($this->timezone);
diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml
index f2a393f1f..d5ba76516 100644
--- a/airtime_mvc/build/schema.xml
+++ b/airtime_mvc/build/schema.xml
@@ -483,7 +483,7 @@
-
+
diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql
index 8269fec2a..13d1654a5 100644
--- a/airtime_mvc/build/sql/schema.sql
+++ b/airtime_mvc/build/sql/schema.sql
@@ -765,7 +765,7 @@ CREATE TABLE "cc_playout_history"
"id" serial NOT NULL,
"file_id" INTEGER,
"starts" TIMESTAMP NOT NULL,
- "ends" TIMESTAMP NOT NULL,
+ "ends" TIMESTAMP,
"instance_id" INTEGER,
PRIMARY KEY ("id")
);