diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 43103edf9..678a17195 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -127,7 +127,7 @@ class PlaylistController extends Zend_Controller_Action private function blockDynamic($obj) { - $this->view->error = "You cannot add tracks to dynamic block."; + $this->view->error = "You cannot add tracks to dynamic blocks."; $this->createFullResponse($obj); } @@ -152,6 +152,11 @@ class PlaylistController extends Zend_Controller_Action Logging::log("{$e->getLine()}"); Logging::log("{$e->getMessage()}"); } + + private function playlistDenied($obj) { + $this->view->error = "You cannot add playlists to smart playlists."; + $this->createFullResponse($obj); + } public function indexAction() { @@ -307,9 +312,15 @@ class PlaylistController extends Zend_Controller_Action $obj->addAudioClips($ids, $afterItem, $addType); } else if ($obj->isStatic()) { // if the dest is a block object + //check if any items are playlists + foreach($ids as $id) { + if (is_array($id) && isset($id[1]) && $id[1] == 'playlist') { + throw new Exception('playlist to block'); + } + } $obj->addAudioClips($ids, $afterItem, $addType); } else { - throw new BlockDynamicException; + throw new Exception('track to dynamic'); } $this->createUpdateResponse($obj); } @@ -319,11 +330,14 @@ class PlaylistController extends Zend_Controller_Action catch (PlaylistNotFoundException $e) { $this->playlistNotFound($obj_type); } - catch (BlockDynamicException $e) { - $this->blockDynamic($obj); - } catch (Exception $e) { - $this->playlistUnknownError($e); + if ($e->getMessage() == 'playlist to block') { + $this->playlistDenied($obj); + } else if ($e->getMessage() == 'track to dynamic') { + $this->blockDynamic($obj); + } else { + $this->playlistUnknownError($e); + } } } diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index 7b1aa64b2..0cb16205d 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -33,7 +33,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm "rating" => "Rating", "sample_rate" => "Sample Rate", "track_title" => "Title", - "track_num" => "Track Number", + "track_number" => "Track Number", "utime" => "Uploaded", "year" => "Year" ); @@ -64,7 +64,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm "rating" => "n", "sample_rate" => "n", "track_title" => "s", - "track_num" => "n", + "track_number" => "n", "year" => "n" ); diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index e0cfecef5..65fc55c80 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -76,11 +76,11 @@ class Application_Model_Block "mood" => "DbMood", "name" => "DbName", "orchestra" => "DbOrchestra", - "radio_station_name" => "DbRadioStation", + "radio_station_name" => "DbRadioStationName", "rating" => "DbRating", "sample_rate" => "DbSampleRate", "track_title" => "DbTrackTitle", - "track_num" => "DbTrackNum", + "track_number" => "DbTrackNumber", "year" => "DbYear" ); @@ -245,11 +245,35 @@ EOT; // function return "N/A" if dynamic public function getLength() { - $length = $this->block->getDbLength(); + if ($this->isStatic()){ + $length = $this->block->getDbLength(); + } else { + $length = $this->getDynamicBlockLength(); + } $length = $length == null ? "N/A" : $length; return $length; } + public function getDynamicBlockLength() + { + $result = CcBlockcriteriaQuery::create()->filterByDbBlockId($this->id) + ->filterByDbCriteria('limit')->findOne(); + $modifier = $result->getDbModifier(); + $value = $result->getDbValue(); + if ($modifier == "items") { + $length = $value." ".$modifier; + } else { + if ($modifier == "minutes") { + $timestamp = "00:".$value.":00"; + } else if ($modifier == "hours") { + $timestamp = $value.":00:00.0"; + } + $formatter = new LengthFormatter($timestamp); + $length = "~".$formatter->format(); + } + return $length; + } + // public function getStaticLength(){ $sql = "SELECT SUM(cliplength) as length FROM cc_blockcontents WHERE block_id={$this->id}"; @@ -364,9 +388,14 @@ EOT; foreach ($p_items as $ac) { Logging::log("Adding audio file {$ac}"); - - $res = $this->insertBlockElement($this->buildEntry($ac, $pos)); - $pos = $pos + 1; + + if (is_array($ac) && $ac[1] == 'audioclip') { + $res = $this->insertBlockElement($this->buildEntry($ac[0], $pos)); + $pos = $pos + 1; + } elseif (!is_array($ac)) { + $res = $this->insertBlockElement($this->buildEntry($ac, $pos)); + $pos = $pos + 1; + } } //reset the positions of the remaining items. @@ -1033,7 +1062,7 @@ EOT; // as it cannot be calculated if ($blockType == 'dynamic') { $this->setLength(null); - $output['blockLength'] = "N/A"; + $output['blockLength'] = $this->getDynamicBlockLength(); } else { $length = $this->getStaticLength(); $this->setLength($length); @@ -1169,7 +1198,7 @@ EOT; "rating" => "Rating", "sample_rate" => "Sample Rate", "track_title" => "Title", - "track_num" => "Track Number", + "track_number" => "Track Number", "utime" => "Uploaded", "year" => "Year" ); diff --git a/airtime_mvc/application/models/Datatables.php b/airtime_mvc/application/models/Datatables.php index 545b08cbb..f54631cb7 100644 --- a/airtime_mvc/application/models/Datatables.php +++ b/airtime_mvc/application/models/Datatables.php @@ -93,6 +93,9 @@ class Application_Model_Datatables if ($r['ftype'] == 'playlist') { $pl = new Application_Model_Playlist($r['id']); $r['length'] = $pl->getLength(); + } else if ($r['ftype'] == "block") { + $bl = new Application_Model_Block($r['id']); + $r['length'] = $bl->getLength(); } } } catch (Exception $e) { diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index faf3d838d..f560c4f37 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -196,7 +196,12 @@ EOT; $offset_cliplength = Application_Common_DateHelper::secondsToPlaylistTime($offset); //format the length for UI. - $formatter = new LengthFormatter($row['length']); + if ($row['type'] == 2){ + $bl = new Application_Model_Block($row['item_id']); + $formatter = new LengthFormatter($bl->getLength()); + } else { + $formatter = new LengthFormatter($row['length']); + } $row['length'] = $formatter->format(); $formatter = new LengthFormatter($offset_cliplength); @@ -268,7 +273,6 @@ EOT; //aggregate column on playlistcontents cliplength column. public function getLength() { - Logging::log($this->hasDynamicBlockOrWebStream()); if ($this->hasDynamicBlockOrWebStream()){ return "N/A"; } else { diff --git a/airtime_mvc/application/models/airtime/map/CcBlockcriteriaTableMap.php b/airtime_mvc/application/models/airtime/map/CcBlockcriteriaTableMap.php index 6968366fc..6565bf259 100644 --- a/airtime_mvc/application/models/airtime/map/CcBlockcriteriaTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcBlockcriteriaTableMap.php @@ -39,7 +39,7 @@ class CcBlockcriteriaTableMap extends TableMap { $this->setPrimaryKeyMethodInfo('cc_blockcriteria_id_seq'); // columns $this->addPrimaryKey('ID', 'DbId', 'INTEGER', true, null, null); - $this->addColumn('CRITERIA', 'DbCriteria', 'VARCHAR', true, 16, null); + $this->addColumn('CRITERIA', 'DbCriteria', 'VARCHAR', true, 32, null); $this->addColumn('MODIFIER', 'DbModifier', 'VARCHAR', true, 16, null); $this->addColumn('VALUE', 'DbValue', 'VARCHAR', true, 512, null); $this->addColumn('EXTRA', 'DbExtra', 'VARCHAR', false, 512, null); diff --git a/airtime_mvc/application/models/formatters/LengthFormatter.php b/airtime_mvc/application/models/formatters/LengthFormatter.php index d41ffc563..5278b1a82 100644 --- a/airtime_mvc/application/models/formatters/LengthFormatter.php +++ b/airtime_mvc/application/models/formatters/LengthFormatter.php @@ -16,8 +16,8 @@ class LengthFormatter { } public function format() { - if ($this->_length == "N/A" || $this->_length == "") { - return "N/A"; + if (!preg_match("/^[0-9]{2}:[0-9]{2}:[0-9]{2}/", $this->_length)) { + return $this->_length; } $pieces = explode(":", $this->_length); diff --git a/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml b/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml index 4f747c74b..3579b1d7c 100644 --- a/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml +++ b/airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml @@ -1,24 +1,25 @@ type == "audioclip") : ?> -
Title:md["MDATA_KEY_TITLE"]);?>
-
Creator:md["MDATA_KEY_CREATOR"]);?>
-
Album:md["MDATA_KEY_SOURCE"]);?>
-
Track:md["MDATA_KEY_TRACKNUMBER"]);?>
-
Length:md["MDATA_KEY_DURATION"]);?>
-
Sample Rate:md["MDATA_KEY_SAMPLERATE"]);?>
-
Bit Rate:md["MDATA_KEY_BITRATE"]);?>
-
Mood:md["MDATA_KEY_MOOD"]);?>
-
Genre:md["MDATA_KEY_GENRE"]);?>
-
Year:md["MDATA_KEY_YEAR"]);?>
-
Label:md["MDATA_KEY_LABEL"]);?>
-
BPM:md["MDATA_KEY_BPM"]);?>
-
Composer:md["MDATA_KEY_COMPOSER"]);?>
-
Conductor:md["MDATA_KEY_CONDUCTOR"]);?>
-
Copyright:md["MDATA_KEY_COPYRIGHT"]);?>
-
Isrc Number:md["MDATA_KEY_ISRC"]);?>
-
Website:md["MDATA_KEY_URL"]);?>
-
Language:md["MDATA_KEY_LANGUAGE"]);?>
-
File Path:md["MDATA_KEY_FILEPATH"]);?>
- + + + + + + + + + + + + + + + + + + + + +
Title:md["MDATA_KEY_TITLE"]);?>
Creator:md["MDATA_KEY_CREATOR"]);?>
Album:md["MDATA_KEY_SOURCE"]);?>
Track:md["MDATA_KEY_TRACKNUMBER"]);?>
Length:md["MDATA_KEY_DURATION"]);?>
Sample Rate:md["MDATA_KEY_SAMPLERATE"]);?>
Bit Rate:md["MDATA_KEY_BITRATE"]);?>
Mood:md["MDATA_KEY_MOOD"]);?>
Genre:md["MDATA_KEY_GENRE"]);?>
Year:md["MDATA_KEY_YEAR"]);?>
Label:md["MDATA_KEY_LABEL"]);?>
BPM:md["MDATA_KEY_BPM"]);?>
Composer:md["MDATA_KEY_COMPOSER"]);?>
Conductor:md["MDATA_KEY_CONDUCTOR"]);?>
Copyright:md["MDATA_KEY_COPYRIGHT"]);?>
Isrc Number:md["MDATA_KEY_ISRC"]);?>
Website:md["MDATA_KEY_URL"]);?>
Language:md["MDATA_KEY_LANGUAGE"]);?>
File Path:md["MDATA_KEY_FILEPATH"]);?>
type == "playlist" || $this->type == "block") : ?> @@ -93,18 +94,22 @@ blType == "Dynamic") { ?>
Dynamic Playlist Criteria:
- +
contents["crit"] as $criterias) : ?> $maxStrLen) { + $valMaxStrLen = 25; + if (strlen($crit["value"]) > $valMaxStrLen) { $crit["value"] = substr($crit["value"], 0, 24)."..."; } + $critMaxStrLen = 13; + if (strlen($crit["display_name"]) > $critMaxStrLen) { + $crit["display_name"] = substr($crit["display_name"], 0, 12)."..."; + } ?> - - + + diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index 5e2045d0f..95f8329ae 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -273,7 +273,7 @@
to
- + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index a346ecdae..493f805e0 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -363,7 +363,7 @@ DROP TABLE "cc_blockcriteria" CASCADE; CREATE TABLE "cc_blockcriteria" ( "id" serial NOT NULL, - "criteria" VARCHAR(16) NOT NULL, + "criteria" VARCHAR(32) NOT NULL, "modifier" VARCHAR(16) NOT NULL, "value" VARCHAR(512) NOT NULL, "extra" VARCHAR(512), diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index cbbc0ce28..55c8ad23c 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -418,11 +418,15 @@ input[type="text"]:focus, input[type="password"]:focus, textarea:focus, .input_t } /***** LIBRARY QTIP METADATA SPECIFIC STYLES BEGIN *****/ +table.library-track-md{ + width: 280px; +} + .ui-tooltip-dark.file-md-long{ max-width: 415px !important; } -.library-get-file-md tr td{ +.library-get-file-md tr td, .library-track-md tr td{ font-size:10px; padding: 0px; vertical-align:top; @@ -434,12 +438,20 @@ table.library-get-file-md{ width:350px; } -.file-md-qtip-criteria-width-small{ - width:80px; +table.library-get-file-md.table-small{ + width: 290px !important; +} + +.file-md-qtip-criteria-width-crit{ + width:70px; +} + +.file-md-qtip-criteria-width-mod{ + width:60px; } .file-md-qtip-criteria-width{ - width:120px; + width:110px; } .file-md-qtip-row-width-title{ @@ -468,8 +480,6 @@ table.library-get-file-md{ .file-md-qtip-playlist.static td{ color: #f09839; } - - /***** LIBRARY QTIP METADATA SPECIFIC STYLES END *****/ diff --git a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js index c5845ce4c..dcb63f8af 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js @@ -128,11 +128,14 @@ var AIRTIME = (function(AIRTIME){ for (i = 0, length = aData.length; i < length; i++) { temp = aData[i]; if (temp.ftype === "audioclip" || temp.ftype === "block") { - aMediaIds.push(temp.id); + aMediaIds.push(new Array (temp.id, temp.ftype)); } } - - AIRTIME.playlist.fnAddItems(aMediaIds, undefined, 'after'); + if (aMediaIds.length > 0) { + AIRTIME.playlist.fnAddItems(aMediaIds, undefined, 'after'); + } else { + alert('You cannot add playlists to smart playlists'); + } }); //delete from library. diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 1b262c709..cfd1be807 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -639,7 +639,7 @@ var AIRTIME = (function(AIRTIME) { //delete through the playlist controller, will reset //playlist screen if this is the currently edited playlist. - if (data.ftype === "playlist" && screen === "playlist") { + if ((data.ftype === "playlist" || data.ftype === "block") && screen === "playlist") { callback = function() { if (confirm('Are you sure you want to delete the selected item?')) { diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 000000000..1459c3a63 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,288 @@ +airtime (2.2.0-1) unstable; urgency=low + + * Nightly development snapshot of Airtime 2.2.x + + -- Daniel James Thu, 02 Aug 2012 11:19:03 +0100 + +airtime (2.1.3-2) unstable; urgency=low + + * Use a debconf question to set storage directory (CC-3576) + + -- Daniel James Tue, 24 Jul 2012 14:55:13 +0100 + +airtime (2.1.3-1) unstable; urgency=low + + * Upstream 2.1.3 release + * Prompt user to answer No to set Icecast passwords manually (CC-4013) + + -- Daniel James Thu, 05 Jul 2012 17:01:20 +0100 + +airtime (2.1.2-1) unstable; urgency=low + + * Upstream 2.1.2 release + + -- Daniel James Mon, 18 Jun 2012 10:01:43 +0100 + +airtime (2.1.1-1) unstable; urgency=low + + * Upstream 2.1.1 release + + -- Daniel James Thu, 14 Jun 2012 09:56:38 +0100 + +airtime (2.1.0-1) unstable; urgency=low + + * Upstream 2.1.0 release + * Test the symlink to the Liquidsoap binary + + -- Daniel James Mon, 04 June 2012 18:25:11 +0100 + +airtime (2.0.3-1) unstable; urgency=low + + * Upstream 2.0.3 release + * Added Apache license to copyright file + + -- Daniel James Wed, 04 Apr 2012 11:11:15 +0100 + +airtime (2.0.2-1) unstable; urgency=low + + * Upstream 2.0.2 release + * Strip install_full scripts from tarball + + -- Daniel James Wed, 29 Feb 2012 10:34:35 +0000 + +airtime (2.0.1-1) unstable; urgency=low + + * Upstream 2.0.1 release + * Strip ZFDebug library from tarball + * Depend on distro's package of Zend + + -- Daniel James Wed, 15 Feb 2012 12:57:23 +0000 + +airtime (2.0.0-5) unstable; urgency=low + + * Strip phing library from tarball + + -- Daniel James Wed, 01 Feb 2012 15:50:18 +0000 + +airtime (2.0.0-4) unstable; urgency=low + + * Fix for overbooked shows longer than 24 hours + + -- Daniel James Wed, 25 Jan 2012 10:11:33 +0000 + +airtime (2.0.0-3) unstable; urgency=low + + * Upstream 2.0.0 final release + + -- Daniel James Fri, 20 Jan 2012 12:03:55 +0000 + +airtime (2.0.0-2) unstable; urgency=low + + * Upstream 2.0.0-RC1 release + + -- Daniel James Mon, 16 Jan 2012 15:41:15 +0000 + +airtime (2.0.0-1) unstable; urgency=low + + * Upstream 2.0.0-beta2 release + + -- Daniel James Thu, 05 Jan 2012 17:15:07 +0000 + +airtime (1.9.5-3) unstable; urgency=low + + * Upstream 1.9.5-RC5 release + + -- Daniel James Mon, 14 Nov 2011 10:34:51 +0000 + +airtime (1.9.5-2) unstable; urgency=low + + * Upstream 1.9.5-RC2 release + + -- Daniel James Wed, 09 Nov 2011 17:09:07 +0000 + +airtime (1.9.5-1) unstable; urgency=low + + * Upstream 1.9.5-RC1 release + + -- Daniel James Mon, 07 Nov 2011 16:16:57 +0000 + +airtime (1.9.4-13) unstable; urgency=low + + * Increase PHP memory limit to more than post_max_size + + -- Daniel James Mon, 03 Oct 2011 17:29:05 +0100 + +airtime (1.9.4-12) unstable; urgency=low + + * Use invoke-rc.d rather than wwwconfig-common + + -- Daniel James Fri, 30 Sep 2011 16:52:28 +0100 + +airtime (1.9.4-11) unstable; urgency=low + + * Insist on python-virtualenv 1.4.9 or later + + -- Daniel James Wed, 28 Sep 2011 14:45:19 +0100 + +airtime (1.9.4-10) unstable; urgency=low + + * Install python-virtualenv as a Pre-Depends + + -- Daniel James Tue, 27 Sep 2011 11:04:29 +0100 + +airtime (1.9.4-9) unstable; urgency=low + + * Add dependency on ed, configure monit without asking + + -- Daniel James Mon, 26 Sep 2011 10:55:09 +0100 + +airtime (1.9.4-8) unstable; urgency=low + + * Upstream 1.9.4-RC9 release + + -- Daniel James Fri, 23 Sep 2011 14:37:15 +0100 + +airtime (1.9.4-7) unstable; urgency=low + + * Don't depend on Ruby packages + + -- Daniel James Thu, 22 Sep 2011 15:51:42 +0100 + +airtime (1.9.4-6) unstable; urgency=low + + * Upstream 1.9.4-RC8 release + + -- Daniel James Wed, 21 Sep 2011 16:22:57 +0100 + +airtime (1.9.4-5) unstable; urgency=low + + * Upstream 1.9.4-RC7 release + + -- Daniel James Tue, 20 Sep 2011 20:12:24 +0100 + +airtime (1.9.4-4) unstable; urgency=low + + * Upstream 1.9.4-RC6 release + + -- Daniel James Tue, 20 Sep 2011 11:48:38 +0100 + +airtime (1.9.4-3) unstable; urgency=low + + * Upstream 1.9.4-RC3 release + + -- Daniel James Thu, 15 Sep 2011 10:28:22 +0100 + +airtime (1.9.4-2) unstable; urgency=low + + * Upstream 1.9.4-RC2 release + + -- Daniel James Wed, 14 Sep 2011 15:18:20 +0100 + +airtime (1.9.4-1) unstable; urgency=low + + * Upstream 1.9.4-RC1 release + + -- Daniel James Tue, 13 Sep 2011 14:50:02 +0100 + +airtime (1.9.3-4) unstable; urgency=low + + * Improvements to package error logging + + -- Daniel James Mon, 05 Sep 2011 16:02:21 +0100 + +airtime (1.9.3-3) unstable; urgency=low + + * Updated dependency list + + -- Daniel James Sat, 03 Sep 2011 11:29:26 +0100 + +airtime (1.9.3-2) unstable; urgency=low + + * Fixed reconfigure action so that airtime-install does not run again + + -- Daniel James Tue, 30 Aug 2011 17:48:49 +0100 + +airtime (1.9.3-1) unstable; urgency=low + + * upstream 1.9.3 + + -- Daniel James Sat, 27 Aug 2011 12:58:46 +0100 + +airtime (1.9.2-2) unstable; urgency=low + + * upstream 1.9.2 + + -- Daniel James Wed, 24 Aug 2011 12:26:57 +0100 + +airtime (1.9.2-1) unstable; urgency=low + + * upstream 1.9.2-RC1 + + -- Daniel James Tue, 23 Aug 2011 15:49:31 +0100 + +airtime (1.9.1-1) unstable; urgency=low + + * upstream 1.9.1 + + -- Daniel James Mon, 22 Aug 2011 11:04:33 +0100 + +airtime (1.9.0-1) unstable; urgency=low + + * upstream 1.9.0 + + -- Daniel James Fri, 12 Aug 2011 14:11:21 +0100 + +airtime (1.8.2-4) unstable; urgency=low + + * upstream 1.8.2-RC4 + + -- Robin Gareus Tue, 07 Jun 2011 21:45:55 +0200 + +airtime (1.8.2-3) unstable; urgency=low + + * upstream 1.8.2-RC3 + + -- Robin Gareus Tue, 07 Jun 2011 02:56:12 +0200 + +airtime (1.8.2-2) unstable; urgency=low + + * fixed postinst + + -- Robin Gareus Wed, 01 Jun 2011 20:48:29 +0200 + +airtime (1.8.2-1) unstable; urgency=low + + * upstream 1.8.2-RC2 release + + -- Robin Gareus Wed, 01 Jun 2011 16:21:40 +0200 + +airtime (1.8.1-1) unstable; urgency=low + + * upstream 1.8.1 release + + -- Robin Gareus Wed, 11 May 2011 22:50:03 +0200 + +airtime (1.8.0-1) unstable; urgency=low + + * upstream 1.8.0 release + + -- Robin Gareus Tue, 19 Apr 2011 15:44:40 +0200 + +airtime (1.7.0-2) unstable; urgency=low + + * fixed few lintian warnings + * allow to de-install apache 000default + + -- Robin Gareus Tue, 05 Apr 2011 20:45:52 +0200 + +airtime (1.7.0-1) unstable; urgency=low + + * upstream 1.7.0-GA release + + -- Robin Gareus Mon, 04 Apr 2011 21:19:56 +0200 + +airtime (1.6.1-1) unstable; urgency=low + + * initial package + + -- Robin Gareus Sat, 02 Apr 2011 22:48:35 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 000000000..7f8f011eb --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/config b/debian/config new file mode 100644 index 000000000..553a85fd1 --- /dev/null +++ b/debian/config @@ -0,0 +1,46 @@ +#!/bin/bash +# Debconf config script for airtime + +set -e + +. /usr/share/debconf/confmodule + +db_input high airtime/apache-setup || true +db_go ||true + +db_get airtime/apache-setup +if [ "$RET" = "dedicated v-host" ]; then + db_input high airtime/apache-servername || true + db_go ||true + db_input high airtime/apache-serveradmin || true + db_go ||true + db_input high airtime/apache-deldefault || true + db_go ||true +fi + +db_input high airtime/icecast-setup || true +db_go ||true + +db_get airtime/icecast-setup +if [ "$RET" = "true" ]; then + db_input high airtime/icecast-hostname || true + db_go ||true + db_input high airtime/icecast-sourcepw || true + db_go ||true + db_input high airtime/icecast-relaypw || true + db_go ||true + db_input high airtime/icecast-adminpw || true + db_go ||true +fi + +# Only ask for storage directory and admin password on clean installs +if [ ! -e /var/log/airtime/pypo/pypo.log ]; then + db_input high airtime/storage-directory || true + db_go ||true + db_input high airtime/admin-password || true + db_go ||true +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/control b/debian/control new file mode 100644 index 000000000..a0a14ce19 --- /dev/null +++ b/debian/control @@ -0,0 +1,69 @@ +Source: airtime +Section: web +Priority: optional +Maintainer: Daniel James +Build-Depends: debhelper (>= 7.0.50~), po-debconf +Standards-Version: 3.8.4 +Homepage: http://www.sourcefabric.org/en/products/airtime_overview/ + +Package: airtime +Architecture: all +Pre-Depends: postgresql, python-virtualenv (>= 1.4.9) +Depends: apache2, + curl, + ecasound, + gzip (>= 1.3.12), + libao-ocaml, + libapache2-mod-php5, + libcamomile-ocaml-data, + libesd0, + libmad-ocaml, + libmp3lame0, + libportaudio2, + libpulse0, + libsamplerate0, + libsoundtouch-ocaml, + libtaglib-ocaml, + liquidsoap (>= 1.0.0~), + lsof, + monit, + multitail, + odbc-postgresql, + patch, + php-db, + php5-cli, + php5-curl, + php5-gd, + php-pear, + php5-pgsql, + rabbitmq-server, + sudo, + sysv-rc, + tar (>= 1.22), + unzip, + vorbis-tools, + zendframework | libzend-framework-php, + ${misc:Depends}, + ${python:Depends} +Recommends: icecast2 +Suggests: airtime-audio-samples, + alsa-utils +Description: The open radio software for scheduling and remote station management. + Airtime is an open source application that provides remote automation + of a radio station. + . + Major features: + . + Web-based remote station management. Authorized personnel can add + program material, create playlists, and schedule programming all via + a web interface. + . + Automation. Airtime has a scheduler function that enables users to + set shows with playlists for playback at a date and time of their choosing. + Playlists can be played back multiple times. + . + Solid, fast playback. Airtime uses the open source Liquidsoap + multimedia framework for clean, reliable, fast playback. + . + Open, extensible architecture. Stations are free to extend and alter + all parts of the program code. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..0f11be953 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,152 @@ +Format: http://anonscm.debian.org/viewvc/dep/web/deps/dep5.mdwn?revision=200 +Upstream-Name: airtime +Upstream-Contact: Sourcefabric +Source: http://sourceforge.net/projects/airtime/files/ + +Files: * +Copyright: + 2010-2012 Sourcefabric o.p.s + 2004-2009 Media Development Loan Fund +License: GPL-3 + +Files: airtime/python_apps/pypo/* +Copyright: + Jonas Ohrstrom + Paul Baranowski + Martin Konecny +License: GPL-3+ + +Files: airtime_mvc/library/doctrine/migrations/* +Copyright: No copyright holders +License: LGPL-2.1 +Comment: + This software consists of voluntary contributions made by many individuals + and is licensed under the LGPL. For more information, see + + +Files: airtime_mvc/library/soundcloud-api/* +Copyright: 2010-2011 Anton Lindqvist +License: Expat + +Files: airtime_mvc/library/php-amqplib/* +Copyright: + Barry Pederson + Vadim Zaliva + taavi013@gmail.com + Sean Murphy + spiderbill +License: LGPL-2.1 + +Files: airtime_mvc/library/propel/* +Copyright: 2005-2011 Hans Lellelid, David Zuelke, Francois Zaninotto, William Durand +License: Expat + +Files: airtime_mvc/library/propel/test/etc/xsl/* +Copyright: 2001-2004 The Apache Software Foundation +License: Apache-2.0 + +Files: debian/* +Copyright: + 2012 Alessio Treglia + 2011 Robin Gareus +License: GPL-2+ + +License: Expat + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the “Software”), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +License: GPL-3 + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License version 3 as + published by the Free Software Foundation. + . + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +Comment: + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/GPL-3'. + +License: GPL-3+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +Comment: + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/GPL-3'. + +License: LGPL-2.1 + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. +Comment: + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/LGPL-2.1'. + +License: GPL-2+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +Comment: + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/GPL-2'. + +License: Apache-2.0 + Copyright 2001-2004 The Apache Software Foundation + . + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/debian/docs b/debian/docs new file mode 100644 index 000000000..ccedcc212 --- /dev/null +++ b/debian/docs @@ -0,0 +1,4 @@ +airtime/README +airtime/CREDITS +airtime/LICENSE_3RD_PARTY +airtime/changelog diff --git a/debian/etc/airtime.ini b/debian/etc/airtime.ini new file mode 100644 index 000000000..e35f600b0 --- /dev/null +++ b/debian/etc/airtime.ini @@ -0,0 +1,5 @@ +[PHP] +memory_limit = 512M +magic_quotes_gpc = Off +file_uploads = On +upload_tmp_dir = /tmp diff --git a/debian/etc/apache.conf b/debian/etc/apache.conf new file mode 100644 index 000000000..d3d84e92c --- /dev/null +++ b/debian/etc/apache.conf @@ -0,0 +1,11 @@ +Alias /airtime /usr/share/airtime/public + +SetEnv APPLICATION_ENV "development" + + + DirectoryIndex index.php + Options -Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + diff --git a/debian/etc/apache.vhost.tpl b/debian/etc/apache.vhost.tpl new file mode 100644 index 000000000..3d7334107 --- /dev/null +++ b/debian/etc/apache.vhost.tpl @@ -0,0 +1,18 @@ + + ServerName __SERVER_NAME__ + #ServerAlias www.example.com + + ServerAdmin __SERVER_ADMIN__ + + DocumentRoot /usr/share/airtime/public + DirectoryIndex index.php + + SetEnv APPLICATION_ENV "production" + + + Options -Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + Allow from all + + diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 000000000..5474c6080 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,3 @@ +[DEFAULT] +pristine-tar = True +sign-tags = True diff --git a/debian/install b/debian/install new file mode 100644 index 000000000..763300c99 --- /dev/null +++ b/debian/install @@ -0,0 +1,17 @@ +airtime/airtime_mvc var/lib/airtime/tmp/ +airtime/install_minimal var/lib/airtime/tmp/ +airtime/python_apps var/lib/airtime/tmp/ +airtime/utils var/lib/airtime/tmp/ + +airtime/widgets usr/share/doc/airtime/examples/ + +debian/etc/apache.conf /etc/airtime/ +debian/etc/airtime.ini /etc/airtime/ +debian/etc/apache.vhost.tpl /etc/airtime/ + +debian/usr/bin/airtime-launch-browser /usr/bin/ +debian/usr/share/applications/airtime.desktop /usr/share/applications/ +debian/usr/share/man/man1 /usr/share/man/ +debian/usr/share/menu/airtime /usr/share/menu +debian/usr/share/pixmaps/airtime.xpm /usr/share/pixmaps/ + diff --git a/debian/po/POTFILES.in b/debian/po/POTFILES.in new file mode 100644 index 000000000..cef83a340 --- /dev/null +++ b/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] templates diff --git a/debian/po/templates.pot b/debian/po/templates.pot new file mode 100644 index 000000000..6458b85ac --- /dev/null +++ b/debian/po/templates.pot @@ -0,0 +1,249 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: airtime@packages.debian.org\n" +"POT-Creation-Date: 2012-07-05 16:49+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: select +#. Choices +#: ../templates:1001 +msgid "dedicated v-host" +msgstr "" + +#. Type: select +#. Choices +#: ../templates:1001 +msgid "no thanks" +msgstr "" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "Create apache2 config:" +msgstr "" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"This setup script can perform Apache web server configuration so that you " +"can connect to Airtime directly after this installation." +msgstr "" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"Production systems should choose \"dedicated v-host\". This option will ask " +"for a server hostname (FQDN) and will create a minimal Apache virtual host " +"configuration that you can adapt." +msgstr "" + +#. Type: select +#. Description +#: ../templates:1002 +msgid "" +"\"no, thanks\": no problem. You're welcome to set it up however you like. " +"Note that the files in /etc/airtime/ may come in handy doing so." +msgstr "" + +#. Type: select +#. Choices +#: ../templates:2001 +msgid "remove default" +msgstr "" + +#. Type: select +#. Choices +#: ../templates:2001 +msgid "no change" +msgstr "" + +#. Type: select +#. Description +#: ../templates:2002 +msgid "Remove 000-default apache config:" +msgstr "" + +#. Type: select +#. Description +#: ../templates:2002 +msgid "" +"By default the Apache webserver is configured to send all virtual hosts to " +"the /var/www/ directory." +msgstr "" + +#. Type: select +#. Description +#: ../templates:2002 +msgid "" +"This option will invoke `sudo a2dissite default` and is recommended when " +"using a virtual host for Airtime." +msgstr "" + +#. Type: string +#. Description +#: ../templates:3001 +msgid "FQDN - Apache virtual host ServerName:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:3001 +msgid "" +"Enter the main hostname of the web server. The DNS of this name must resolve " +"to the Apache server running on this machine." +msgstr "" + +#. Type: string +#. Description +#: ../templates:3001 +msgid "e.g. \"example.com\" or \"www.example.com\" (without the quotes)" +msgstr "" + +#. Type: string +#. Description +#: ../templates:3001 +msgid "" +"You can customize /etc/apache2/sites-enabled/airtime.vhost afterward and add " +"ServerAliases and further custom configuration." +msgstr "" + +#. Type: string +#. Description +#: ../templates:4001 +msgid "Email of the ServerAdmin:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:4001 +msgid "An email address is required for the virtual host configuration." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "Enable Icecast2 and set passwords automatically?" +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"This option enables a local Icecast streaming media server to start on boot, " +"and configures passwords for both the Icecast server and Airtime." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"Note: these settings are here for convenience only. Strictly speaking they " +"should be done during Icecast installation - not Airtime installation." +msgstr "" + +#. Type: boolean +#. Description +#: ../templates:5001 +msgid "" +"If you wish to set Icecast server passwords manually, you should answer No " +"here." +msgstr "" + +#. Type: string +#. Description +#: ../templates:6001 +msgid "Icecast2 hostname:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:6001 +msgid "" +"Specify the hostname of the Icecast server. Depending on your setup, this " +"might be the same as the Airtime ServerName. For testing purposes, you can " +"use the default of 'localhost'." +msgstr "" + +#. Type: string +#. Description +#: ../templates:7001 +msgid "Icecast2 Source Password:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:7001 +msgid "Specify a password to send A/V sources to Icecast" +msgstr "" + +#. Type: string +#. Description +#: ../templates:8001 +msgid "Icecast2 Relay Password:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:8001 +msgid "" +"Specify a password for stream relay access. This is not needed by Airtime, " +"however you should change it from the default to lock down your system." +msgstr "" + +#. Type: string +#. Description +#: ../templates:9001 +msgid "Icecast2 Admin Password:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:9001 +msgid "" +"Specify the admin password for Icecast. You can access icecast2's admin " +"interface via http://localhost:8000/ - and both monitor connection as well " +"as block users." +msgstr "" + +#. Type: string +#. Description +#: ../templates:10001 +msgid "Airtime Admin Password:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:10001 +msgid "" +"Specify a secure admin password for Airtime. You can access the Airtime " +"administration interface at http://localhost/ to set up other user accounts, " +"upload media, create playlists and schedule shows." +msgstr "" + +#. Type: string +#. Description +#: ../templates:11001 +msgid "Airtime Storage Directory:" +msgstr "" + +#. Type: string +#. Description +#: ../templates:11001 +msgid "" +"Specify the main storage path which Airtime will use, ending with a slash. " +"You can also specify watched folders in the Airtime administration interface." +msgstr "" diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 000000000..637d9bf52 --- /dev/null +++ b/debian/postinst @@ -0,0 +1,248 @@ +#!/bin/bash +#postinst script for airtime + +set -x + +. /usr/share/debconf/confmodule + +wwwdir="/usr/share/airtime" +tmpdir="/var/lib/airtime/tmp" +configdir="/etc/airtime" +includefile="${configdir}/apache.conf" +a2tplfile="${configdir}/apache.vhost.tpl" +phpinifile="${configdir}/airtime.ini" +OLDVERSION="$2" +NEWVERSION="2.1.4" + +case "$1" in + configure|reconfigure) + + webserver="apache2" + php="php5" + + # clean up previous configurations + if [ -L /etc/$webserver/conf.d/airtime.conf ]; then + rm -f /etc/$webserver/conf.d/airtime.conf + fi + + if [ -f /etc/$webserver/sites-available/airtime-vhost ]; then + a2dissite airtime-vhost + fi + + # this file in 1.8.2 is a directory path in 1.9.3 + if [ -f /var/www/airtime/utils/airtime-import ]; then + rm -f /var/www/airtime/utils/airtime-import + fi + + # APACHE config + echo "Setting up apache2..." + + # create the document root if it doesn't exist + if [ ! -d $wwwdir/public/ ]; then + install -d -m755 $wwwdir/public/ + fi + + # set up the virtual host + db_get airtime/apache-setup + if [ "$RET" == "system-wide (all vhosts)" ]; then + if [ ! -d /etc/$webserver/conf.d/ ]; then + install -d -m755 /etc/$webserver/conf.d/ + fi + if [ ! -e /etc/$webserver/conf.d/airtime.conf ]; then + ln -s ${includefile} /etc/$webserver/conf.d/airtime.conf + fi + + elif [ "$RET" == "dedicated v-host" ]; then + db_get airtime/apache-servername + SN=$RET + db_get airtime/apache-serveradmin + SA=$RET + + if [ ! -d /etc/$webserver/sites-available/ ]; then + install -d -m755 /etc/$webserver/sites-available/ + fi + sed -e "s/__SERVER_ADMIN__/${SA}/;s/__SERVER_NAME__/${SN}/" \ + ${a2tplfile} > /etc/$webserver/sites-available/airtime-vhost + + command -v a2ensite > /dev/null + RETVAL=$? + if [ $RETVAL -eq 0 ]; then + a2ensite airtime-vhost + fi + fi + + # enable the rewrite module + command -v a2enmod > /dev/null + RETVAL=$? + if [ $RETVAL -eq 0 ]; then + a2enmod rewrite + fi + + # remove the default site, if requested to + db_get airtime/apache-deldefault + if [ "$RET" == "remove default" ]; then + if [ -f /etc/apache2/sites-available/default ]; then + a2dissite default + fi + fi + + # PHP config + echo "Configuring php5..." + if [ ! -d /etc/$php/conf.d/ ]; then + install -d -m755 /etc/$php/conf.d/ + fi + if [ ! -e /etc/$php/conf.d/airtime.ini ]; then + ln -s ${phpinifile} /etc/$php/conf.d/airtime.ini + fi + + # XXX ICECAST XXX + db_get airtime/icecast-setup + if [ "$RET" == "true" ]; then + if [ -f /etc/default/icecast2 -a -f /etc/icecast2/icecast.xml ]; then + echo "Setting up icecast2..." + sed -i "s:ENABLE=.*:ENABLE=true:g" /etc/default/icecast2 + db_get airtime/icecast-sourcepw + ICESOURCE=$RET + sed -i "s:.*<\/source-password>:$ICESOURCE<\/source-password>:g" /etc/icecast2/icecast.xml + db_get airtime/icecast-relaypw + ICERELAY=$RET + sed -i "s:.*<\/relay-password>:$ICERELAY<\/relay-password>:g" /etc/icecast2/icecast.xml + db_get airtime/icecast-adminpw + ICEADMIN=$RET + sed -i "s:.*<\/admin-password>:$ICEADMIN<\/admin-password>:g" /etc/icecast2/icecast.xml + db_get airtime/icecast-hostname + ICEHOST=$RET + sed -i "s:.*<\/hostname>:$ICEHOST<\/hostname>:g" /etc/icecast2/icecast.xml + + # restart icecast server + invoke-rc.d icecast2 restart || true + + # save icecast hostname and source-password in airtime + db_get airtime/icecast-hostname + ICEHOST=$RET + sed -i "s:'s1_host', '127.0.0.1', 'string':'s1_host', '$ICEHOST', 'string':g" ${tmpdir}/airtime_mvc/build/sql/defaultdata.sql + + db_get airtime/icecast-sourcepw + ICESOURCE=$RET + sed -i "s:'s1_pass', 'hackme', 'string':'s1_pass', '$ICESOURCE', 'string':g" ${tmpdir}/airtime_mvc/build/sql/defaultdata.sql + + else + echo "The icecast2 package does not appear to be installed on this server." + fi + fi + + # Monit setup + if [ -f /etc/default/monit ]; then + echo "Setting up monit configuration..." + sed -i 's:startup=.*:startup=1:g' /etc/default/monit + + MONITCONFIGURED=$(grep "include /etc/monit/conf.d" /etc/monit/monitrc || true) + if [ -z "$MONITCONFIGURED" ]; then + echo "include /etc/monit/conf.d/*" >> /etc/monit/monitrc + fi + + invoke-rc.d monit restart + else + echo "The monit package does not appear to be installed on this server." + fi + + # get airtime admin password on new installs + if [ ! -e /var/log/airtime/pypo/pypo.log ]; then + db_get airtime/admin-password + AIRTIMEADMIN=$RET + sed -i "1s:md5('admin'):md5('$AIRTIMEADMIN'):g" ${tmpdir}/airtime_mvc/build/sql/defaultdata.sql + fi + + # get the main storage directory specified by the user + db_get airtime/storage-directory + AIRTIMESTORAGE=$RET + if [ "$AIRTIMESTORAGE" != "/srv/airtime/stor/" ]; then + sed -i "1s:/srv/airtime/stor/:$AIRTIMESTORAGE:g" ${tmpdir}/install_minimal/include/airtime-install.ini + fi + + # stop debconf so daemons started by the install script cannot hold open the pipe + db_stop + + # start rabbitmq if it isn't running + if [ -f /etc/init.d/rabbitmq-server ]; then + RABBITMQSTOPPED=$(invoke-rc.d rabbitmq-server status | grep no_nodes_running || true) + if [ -n "$RABBITMQSTOPPED" ]; then + invoke-rc.d rabbitmq-server start + fi + + # Warn if rabbitmq is installed but not set to start on boot + RABBITMQSTARTONBOOT=$(ls /etc/rc2.d/ | grep rabbitmq || true) + if [ -z "$RABBITMQSTARTONBOOT" ]; then + echo "Warning: rabbitmq-server is not configured to start after a reboot!" + echo "Fix Default-Start and Default-Stop lines in /etc/init.d/rabbitmq-server" + echo "then run this command as root: update-rc.d rabbitmq-server defaults" + fi + else + echo "The rabbitmq-server package does not appear to be installed on this server." + fi + + # restart apache + invoke-rc.d apache2 restart + + # fix the Liquidsoap symlink if it doesn't point to standard location + if [ -h /usr/bin/airtime-liquidsoap ]; then + SYMLINK_TARGET=`readlink /usr/bin/airtime-liquidsoap` + if [ "$SYMLINK_TARGET" != "/usr/bin/liquidsoap" ]; then + echo "Liquidsoap symlink points to the wrong place, fixing it!" + rm /usr/bin/airtime-liquidsoap + ln -s /usr/bin/liquidsoap /usr/bin/airtime-liquidsoap + fi + + if [ "$SYMLINK_TARGET" == "/usr/bin/liquidsoap" ]; then + echo "Liquidsoap symlink points to the right place!" + fi + fi + + # symlink the Liquidsoap path to standard location, if symlink doesn't exist + if [ ! -h /usr/bin/airtime-liquidsoap ]; then + echo "Creating symlink for Liquidsoap..." + ln -s /usr/bin/liquidsoap /usr/bin/airtime-liquidsoap + fi + + # don't run airtime-install if the user is doing a dpkg-reconfigure + if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ] ; then + echo "Reconfiguration complete." + else + + if [ -n "$OLDVERSION" ] && [[ "${OLDVERSION:0:3}" < "1.9" ]]; then + echo "Upgrades from Airtime versions before 1.9.0 are not supported. Please back up your files and perform a clean install." + else + + mkdir -p /var/log/airtime + cd $tmpdir/install_minimal/ + + if [ "${OLDVERSION:0:5}" == "${NEWVERSION}" ] ; then + echo "Reinstallation detected..." + echo | ./airtime-install -rp 2> /var/log/airtime/reinstallation-errors.log + else + + ./airtime-install 2> /var/log/airtime/installation-errors.log + + fi + + # Update the desktop menu to show Airtime + if test -x /usr/bin/update-menus; then + update-menus; + fi + fi + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/postrm b/debian/postrm new file mode 100755 index 000000000..c455121ed --- /dev/null +++ b/debian/postrm @@ -0,0 +1,128 @@ +#!/bin/bash +#postrm script for airtime + +set -e + +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +if [ "$DPKG_DEBUG" = "developer" ]; then + set -x +fi + +package_name="airtime" +datadir="/srv/airtime" +wwwdir="/usr/share/airtime" +tmpdir="/var/lib/airtime/tmp" +configdir="/etc/airtime" + +webserver="apache2" +php="php5" + +case "$1" in + purge|remove) + + # airtime uninstaller does not remove these + + if [ -L /var/lib/airtime/airtime_mvc ]; then + rm -rf /var/lib/airtime/ || true + fi + + if [ -f /var/lib/airtime/.htaccess ]; then + rm -f /var/lib/airtime/.htaccess || true + fi + + if [ -f ${tmpdir}/install_minimal/distribute-0.6.10.tar.gz ]; then + rm -f ${tmpdir}/install_minimal/distribute-0.6.10.tar.gz || true + fi + + if [ -f /usr/share/python-virtualenv/distribute-0.6.10.tar.gz ]; then + rm -f /usr/share/python-virtualenv/distribute-0.6.10.tar.gz || true + fi + + if [ -d ${tmpdir}/python_apps/pypo/liquidsoap_bin ]; then + rm -f ${tmpdir}/python_apps/pypo/liquidsoap_bin/* || true + rm -rf ${tmpdir}/python_apps/pypo/liquidsoap_bin || true + fi + + if [ -d /var/lib/airtime/python_apps/pypo/liquidsoap ]; then + rm -rf /var/lib/airtime/python_apps/pypo/liquidsoap || true + fi + + if [ -d ${tmpdir}/install_minimal/upgrades/airtime-1.9.0/airtimefilemonitor ]; then + rm -rf ${tmpdir}/install_minimal/upgrades/airtime-1.9.0/airtimefilemonitor || true + fi + + if [ -f ${tmpdir}/install_minimal/upgrades/airtime-1.9.0/storDump.txt ]; then + rm -f ${tmpdir}/install_minimal/upgrades/airtime-1.9.0/storDump.txt || true + fi + + if [ -L /usr/bin/airtime-clean-storage ]; then + rm -f /usr/bin/airtime-clean-storage || true + fi + + if [ -L /usr/bin/airtime-user ]; then + rm -f /usr/bin/airtime-user || true + fi + + if [ -L /usr/bin/airtime-log ]; then + rm -f /usr/bin/airtime-log || true + fi + + # Un-configure webservers + if [ -L /etc/$webserver/conf.d/airtime.conf ]; then + rm -f /etc/$webserver/conf.d/airtime.conf || true + restart="$webserver $restart" + fi + + if [ -L /etc/$php/conf.d/airtime.ini ]; then + rm -f /etc/$php/conf.d/airtime.ini || true + restart="$webserver $restart" + fi + + if [ -f /etc/$webserver/sites-available/airtime-vhost ]; then + a2dissite airtime-vhost &>/dev/null || true + # TODO: if airtime-vhost is not modified -> delete it + restart="$webserver $restart" + fi + + servers="apache2" + # may not exist if package was manually installed + if [ -r /usr/share/wwwconfig-common/restart.sh ]; then + . /usr/share/wwwconfig-common/restart.sh || true + echo $error + fi + + # Remove Airtime menu entry and icon + if test -x /usr/bin/update-menus; then + update-menus; + fi + + # Remove legacy permission overrides + dpkg-statoverride --list $datadir &>/dev/null && \ + dpkg-statoverride --remove $datadir || true + + # Only remove settings if purge is called as an argument + if [ "$1" = "purge" ]; then + echo "Removing configuration files from /etc/airtime/" >&2 + rm -rf /etc/airtime || true + echo "Purging Airtime settings from debconf database" >&2 + db_purge || true + fi + + ;; + + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/preinst b/debian/preinst new file mode 100755 index 000000000..02b762856 --- /dev/null +++ b/debian/preinst @@ -0,0 +1,33 @@ +#!/bin/bash +#preinst script for airtime + +set -e + +if [ "$DPKG_DEBUG" = "developer" ]; then + set -x +fi + +case "$1" in + install|upgrade) + + # Remove liquidsoap binary from old installs + if [ -f /var/lib/airtime/python_apps/pypo/liquidsoap/liquidsoap ]; then + echo "Removing old Liquidsoap binary..." >&2 + rm -f /var/lib/airtime/python_apps/pypo/liquidsoap/liquidsoap + fi + + ;; + + abort-upgrade) + echo "Upgrade aborting..." >&2 + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/prerm b/debian/prerm new file mode 100755 index 000000000..b8796400d --- /dev/null +++ b/debian/prerm @@ -0,0 +1,29 @@ +#!/bin/bash +#prerm script for airtime + +set -e + +package_name="airtime" +datadir="/var/lib/${package_name}/tmp" + +case "$1" in + remove) + cd $datadir/install_minimal/ && ./airtime-uninstall || true + ;; + + purge) + cd $datadir/install_minimal/ && ./airtime-uninstall --purge || true + ;; + + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/rules b/debian/rules new file mode 100755 index 000000000..d91c2d9f2 --- /dev/null +++ b/debian/rules @@ -0,0 +1,9 @@ +#!/usr/bin/make -f + +#override_dh_shlibdeps: +# dh_makeshlibs +# -dh_shlibdeps -- --ignore-missing-info + +%: + dh $@ + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 000000000..163aaf8d8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 000000000..cc43edcc4 --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1,5 @@ +debian/usr/share/man/man1/airtime-import.1.gz +debian/usr/share/man/man1/airtime-launch-browser.1.gz +debian/usr/share/man/man1/airtime-log.1.gz +debian/usr/share/man/man1/airtime-test-soundcard.1.gz +debian/usr/share/man/man1/airtime-test-stream.1.gz diff --git a/debian/templates b/debian/templates new file mode 100644 index 000000000..4cd301493 --- /dev/null +++ b/debian/templates @@ -0,0 +1,109 @@ +Template: airtime/apache-setup +Type: select +__Choices: dedicated v-host, no thanks +Choices-de.UTF-8: v-host einrichten, nein danke +Default: dedicated v-host +_Description: Create apache2 config: + This setup script can perform Apache web server configuration + so that you can connect to Airtime directly after this installation. + . + Production systems should choose "dedicated v-host". This option + will ask for a server hostname (FQDN) and will create a minimal Apache + virtual host configuration that you can adapt. + . + "no, thanks": no problem. You're welcome to set it up however you like. + Note that the files in /etc/airtime/ may come in handy doing so. +Description-de.UTF-8: Erzeugen einer apache2 konfiuration: + . + +Template: airtime/apache-deldefault +Type: select +__Choices: remove default, no change +Default: no change +_Description: Remove 000-default apache config: + By default the Apache webserver is configured to send all virtual hosts + to the /var/www/ directory. + . + This option will invoke `sudo a2dissite default` and is recommended + when using a virtual host for Airtime. + +Template: airtime/apache-servername +Type: string +Default: localhost +_Description: FQDN - Apache virtual host ServerName: + Enter the main hostname of the web server. + The DNS of this name must resolve to the Apache server running on this + machine. + . + e.g. "example.com" or "www.example.com" (without the quotes) + . + You can customize /etc/apache2/sites-enabled/airtime.vhost afterward + and add ServerAliases and further custom configuration. + +Template: airtime/apache-serveradmin +Type: string +Default: root@localhost +_Description: Email of the ServerAdmin: + An email address is required for the virtual host configuration. + +Template: airtime/icecast-setup +Type: boolean +Default: false +_Description: Enable Icecast2 and set passwords automatically? + This option enables a local Icecast streaming media server to start + on boot, and configures passwords for both the Icecast server and Airtime. + . + Note: these settings are here for convenience only. Strictly speaking + they should be done during Icecast installation - not Airtime installation. + . + If you wish to set Icecast server passwords manually, + you should answer No here. + +Template: airtime/icecast-hostname +Type: string +Default: localhost +_Description: Icecast2 hostname: + Specify the hostname of the Icecast server. Depending on your + setup, this might be the same as the Airtime ServerName. For + testing purposes, you can use the default of 'localhost'. + +Template: airtime/icecast-sourcepw +Type: string +Default: hackme +_Description: Icecast2 Source Password: + Specify a password to send A/V sources to Icecast + +Template: airtime/icecast-relaypw +Type: string +Default: hackme +_Description: Icecast2 Relay Password: + Specify a password for stream relay access. + This is not needed by Airtime, however you should + change it from the default to lock down your system. + +Template: airtime/icecast-adminpw +Type: string +Default: hackme +_Description: Icecast2 Admin Password: + Specify the admin password for Icecast. + You can access icecast2's admin interface via + http://localhost:8000/ - and both monitor connection as + well as block users. + +Template: airtime/admin-password +Type: string +Default: admin +_Description: Airtime Admin Password: + Specify a secure admin password for Airtime. + You can access the Airtime administration interface + at http://localhost/ to set up other user accounts, + upload media, create playlists and schedule shows. + +Template: airtime/storage-directory +Type: string +Default: /srv/airtime/stor/ +_Description: Airtime Storage Directory: + Specify the main storage path which Airtime will use, + ending with a slash. + You can also specify watched folders in the Airtime + administration interface. diff --git a/debian/usr/bin/airtime-launch-browser b/debian/usr/bin/airtime-launch-browser new file mode 100755 index 000000000..c0bf585c0 --- /dev/null +++ b/debian/usr/bin/airtime-launch-browser @@ -0,0 +1,26 @@ +#!/bin/bash +#------------------------------------------------------------------------------- +# Copyright (c) 2012 Sourcefabric O.P.S. +# +# This file is part of the Airtime project. +# http://airtime.sourcefabric.org/ +# +# Airtime is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# Airtime is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Airtime; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +#------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- +# This script opens the default graphical web browser on the Airtime login page. + +/usr/bin/x-www-browser http://localhost/ || exit 1 diff --git a/debian/usr/share/applications/airtime.desktop b/debian/usr/share/applications/airtime.desktop new file mode 100644 index 000000000..e712670ee --- /dev/null +++ b/debian/usr/share/applications/airtime.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=Airtime +GenericName=Broadcast automation system +Icon=/usr/share/pixmaps/airtime.xpm +Exec=/usr/bin/airtime-launch-browser +Categories=AudioVideo;Audio; diff --git a/debian/usr/share/man/man1/airtime-import.1.gz b/debian/usr/share/man/man1/airtime-import.1.gz new file mode 100644 index 000000000..828d8cf66 Binary files /dev/null and b/debian/usr/share/man/man1/airtime-import.1.gz differ diff --git a/debian/usr/share/man/man1/airtime-launch-browser.1.gz b/debian/usr/share/man/man1/airtime-launch-browser.1.gz new file mode 100644 index 000000000..e9e211c0d Binary files /dev/null and b/debian/usr/share/man/man1/airtime-launch-browser.1.gz differ diff --git a/debian/usr/share/man/man1/airtime-log.1.gz b/debian/usr/share/man/man1/airtime-log.1.gz new file mode 100644 index 000000000..c6e47d873 Binary files /dev/null and b/debian/usr/share/man/man1/airtime-log.1.gz differ diff --git a/debian/usr/share/man/man1/airtime-test-soundcard.1.gz b/debian/usr/share/man/man1/airtime-test-soundcard.1.gz new file mode 100644 index 000000000..6d915473d Binary files /dev/null and b/debian/usr/share/man/man1/airtime-test-soundcard.1.gz differ diff --git a/debian/usr/share/man/man1/airtime-test-stream.1.gz b/debian/usr/share/man/man1/airtime-test-stream.1.gz new file mode 100644 index 000000000..c6660fd4d Binary files /dev/null and b/debian/usr/share/man/man1/airtime-test-stream.1.gz differ diff --git a/debian/usr/share/menu/airtime b/debian/usr/share/menu/airtime new file mode 100644 index 000000000..d9db710dc --- /dev/null +++ b/debian/usr/share/menu/airtime @@ -0,0 +1,6 @@ +?package(airtime):\ + needs="X11"\ + section="Applications/Sound"\ + title="Airtime"\ + command="/usr/bin/airtime-launch-browser"\ + icon="/usr/share/pixmaps/airtime.xpm" diff --git a/debian/usr/share/pixmaps/airtime.xpm b/debian/usr/share/pixmaps/airtime.xpm new file mode 100644 index 000000000..95c8ab39c --- /dev/null +++ b/debian/usr/share/pixmaps/airtime.xpm @@ -0,0 +1,50 @@ +/* XPM */ +static char * airtime_xpm[] = { +"32 32 15 1", +" c None", +". c #FFE1D5", +"+ c #FFA47F", +"@ c #FF7137", +"# c #FF5D1A", +"$ c #FF7B45", +"% c #FFB89B", +"& c #FF9062", +"* c #FFCDB8", +"= c #FF6728", +"- c #FFC3AA", +"; c #FF9A70", +"> c #FFD7C6", +", c #FF8653", +"' c #FFAE8D", +" .+@+. ", +" .+@#####$% ", +" .+@###########&* ", +" %$################=+ ", +" $######################$- ", +" %$#######################;.", +" .+=#####################>", +" *&##################, ", +" %@###############> ", +" .;=###########, ", +" -@#########> ", +" =########, ", +" -#########> ", +" ,########$ ", +" #########- ", +" %########@ ", +" @########- ", +" .########@ ", +" ;########- ", +" =#######@ ", +" -#######,. ", +" &#####@* ", +" ####=' ", +" %###; ", +" $#,. ", +" .@- ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/debian/watch b/debian/watch new file mode 100644 index 000000000..c4bb6aaec --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://sf.net/airtime/airtime-([\d\.]+)\.tar\.gz diff --git a/gen-snapshot.sh b/gen-snapshot.sh new file mode 100755 index 000000000..f7daf9536 --- /dev/null +++ b/gen-snapshot.sh @@ -0,0 +1,81 @@ +#/bin/sh +# Script for generating nightly Airtime snapshot packages +# Run from the directory containg the files checked out from git + +VERSION=2.2.0~$(date "+%Y%m%d") +BUILDDEST=/tmp/airtime-${VERSION}/ +DEBDIR=`pwd`/debian + +git checkout devel +git pull + +echo "cleaning up previous build..." + +rm -rf /tmp/airtime-* +mkdir -p ${BUILDDEST}airtime + +echo "copying files to temporary directory..." + +cp -a * ${BUILDDEST}airtime || exit +cp -a $DEBDIR ${BUILDDEST}debian || exit + +cd ${BUILDDEST} || exit + +# Set the version of the snapshot package + +sed -i "1s:(2.2.0-1):(${VERSION}):g" debian/changelog + +# FIXES for 2.2.0 ############# + +# these are all moved to debian/copyright +rm airtime/python_apps/pypo/LICENSE +rm airtime/airtime_mvc/library/php-amqplib/LICENSE +rm airtime/airtime_mvc/library/phing/LICENSE +rm airtime/airtime_mvc/library/propel/LICENSE +rm airtime/airtime_mvc/library/soundcloud-api/README.md + +# Disable install script check for Debian package, it breaks the .deb install +sed -i '11s:DEB=$(dpkg:# DEB=$(dpkg:g' airtime/install_minimal/airtime-install +sed -i '13s\"$DEB" = "Status: install ok installed"\-f /var/lib/dpkg/info/airtime.config\g' airtime/install_minimal/airtime-install +sed -i '14s: Please use the debian package to upgrade.:..:g' airtime/install_minimal/airtime-install +sed -i '15s:exit 1:# We do not exit here:g' airtime/install_minimal/airtime-install + +# Remove Liquidsoap binaries +rm -r airtime/python_apps/pypo/liquidsoap_bin/ + +# Disable installation of Liquidsoap binaries +sed -i '84s:print:#print:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '86s:binary_path:#binary_path:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '88s:try:#try:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '89s:open:#open:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '91s:try:#try:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '92s:os.remove:#os.remove:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '93s:except:#except:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '95s:pass:#pass:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '97s:os.symlink:#os.symlink:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '98s:except:#except:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '99s: """:""":g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '107s: """:""":g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '108s:print:#print:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '109s:print:#print:g' airtime/python_apps/pypo/install/pypo-initialize.py +sed -i '110s:sys.exit(1):#sys.exit(1):g' airtime/python_apps/pypo/install/pypo-initialize.py + +#Remove phing library +rm -r airtime/airtime_mvc/library/phing/ + +#Remove ZFDebug +rm -r airtime/airtime_mvc/library/ZFDebug/ + +#Strip un-needed install scripts +rm -r airtime/install_full/ + +############################# + +echo "running the build..." + +debuild --no-lintian -b -uc -us $@ || exit + +exit + +# optionally, copy the new package to the public server +scp /tmp/airtime_${VERSION}_all.deb apt.sourcefabric.org:/var/www/apt/snapshots/