Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Naomi Aro 2011-06-21 18:06:05 +02:00
commit d642a48e8c
9 changed files with 68 additions and 88 deletions

View File

@ -1,4 +1,56 @@
1.8.2 - May 25, 2011
1.9.0 - ???, 2011
The cool stuff:
* New file storage system.
* Human-readable file structure. The directory structure and file names on disk are now
human-readable. This means you can easily find files using your file browser on your
server.
* Magic file synchronization. Edits to your files are automatically noticed by Airtime. If
you edit any files on disk, such as trimming the length of a track, Airtime will
automatically notice this and adjust the playlist lengths and shows for that audio file.
* Auto-import and multiple-directory support. You can set any number of directories to be
watched by Airtime. Any new files you add to watched directories will be automatically
imported into Airtime, and any deleted files will be automatically removed.
* Graceful recovery from reboot. If the playout engine starts up and detects that a show
should be playing at the current time, it will skip to the right point in the track and
start playing. Previously, Airtime would not play anything until the next show started.
This also fixes a problem where the metadata on the stream was lost when a file had
cue-in/out values set. Thanks to the Liquidsoap developers for implementing the ability
to do all of this!
* Output to Shoutcast. Now both Shoutcast and Icecast are supported.
* No more rebooting after install! Airtime now uses standard SystemV initd scripts instead of
non-standard daemontools. This also makes for a much faster install.
* Extensible daemon monitoring system. The tool "monit" is being used to monitor the
daemon processes(playout engine, media monitor, etc) and automatically restart them in the
unlikely event that a daemon crashes. It also allows you to easily add your own actions when
something happens with a daemon. For example, you could send yourself an email notification if
a daemon process dies.
Improvements:
* Cumulative time shown on playlists. The Playlist Builder now shows the total time since
the beginning of the playlist for each song.
* "End Time" instead of "Duration". In the Add/Edit Show dialog, we replaced the "Duration"
field with "End Time". Users reported that this was a much more intuitive way to schedule the
show. Duration is still shown as a read-only field.
* Feedback & promotion system. Airtime now includes a way to send feedback and promote your
site on the Sourcefabric web page. This will greatly enhance our ability to understand who is
using the software, which in turn will allow us to make appropriate features and receive grant
funding.
Bug fixes:
* Fixed bug where you couldnt import a file with a name longer than 255 characters.
* Fixed bug where searching an audio archive of 15K+ files was slow.
1.8.2 - June 8, 2011
Highlights:
* Improvements:
- You can now download audio files from the search screen and from the "Show Content" screen.
@ -23,7 +75,8 @@ Highlights:
- Fixed problem with Record Check box occasionally being greyed-out when creating new show
- Fixed a problem with default genre not being applied to recorded shows
- Fixed a problem where shows repeating bi-weekly or monthly did not update properly when edited.
- Fixed problem when a user changed the name of a recorded show right before it started playing would cause the recorded audio not to be linked to the show.
- and many more...
1.8.1 - May 2, 2011
* Fixed issue where an track's progress bar would keep updating, even if the track was no longer playing.

View File

@ -95,14 +95,14 @@ class Application_Form_RegisterAirtime extends Zend_Form
$upload = new Zend_Form_Element_File('Logo');
$upload->setLabel('Station Logo:')
->setRequired(false)
->setDecorators(array('File'))
->addValidator('Count', false, 1)
->setDecorators(array('File'));
/*->addValidator('Count', false, 1)
->addValidator('Extension', false, 'jpg,png,gif')
->addValidator('ImageSize', false, array(
'minwidth' => 200,
'minheight' => 200,
'maxwidth' => 600,
'maxheight' => 600));
'maxheight' => 600));*/
$this->addElement($upload);
//enable support feedback

View File

@ -63,7 +63,7 @@ class MusicDir {
public static function getDirByPK($pk)
{
$dir = CcMusicDirQuery::create()->findPK($pk);
$dir = CcMusicDirsQuery::create()->findPK($pk);
$mus_dir = new MusicDir();
$mus_dir->_dir = $dir;

View File

@ -149,7 +149,6 @@ class AirtimeInstall
$success = chmod($rp, 02777);
$CC_CONFIG['storageDir'] = $rp;
AirtimeInstall::DbConnect(true);
//add stor directory to MusiDirs
$sql = "INSERT INTO cc_music_dirs (directory, type) VALUES ('$rp', 'stor')";
$result = $CC_DBC->query($sql);

View File

@ -2,8 +2,8 @@
set_include_path(__DIR__.'/../airtime_mvc/library' . PATH_SEPARATOR . get_include_path());
require_once(dirname(__FILE__).'/include/AirtimeIni.php');
require_once(dirname(__FILE__).'/include/AirtimeInstall.php');
require_once(dirname(__FILE__).'/AirtimeIni.php');
require_once(dirname(__FILE__).'/AirtimeInstall.php');
require_once(AirtimeInstall::GetAirtimeSrcDir().'/application/configs/constants.php');
require_once(AirtimeInstall::GetAirtimeSrcDir().'/application/configs/conf.php');
@ -18,10 +18,9 @@ AirtimeInstall::DbConnect(true);
AirtimeInstall::InstallPostgresScriptingLanguage();
if(isset($argv[1]) && $argv[1] == 'y') {
if (isset($argv[1]) && $argv[1] == 'y') {
AirtimeInstall::CreateDatabaseTables();
}
else if ($databaseExisted){
} else if ($databaseExisted) {
//Database already exists. Ask the user how they want to
//proceed. Warn them that creating the database tables again
//will cause them to lose their old ones.
@ -34,8 +33,7 @@ else if ($databaseExisted){
if (in_array($userAnswer, array("y", "Y"))) {
AirtimeInstall::CreateDatabaseTables();
}
}
else {
} else {
//Database was just created, meaning the tables do not
//exist. Let's create them.
AirtimeInstall::CreateDatabaseTables();

View File

@ -122,9 +122,9 @@ echo "* Airtime Version: ".AIRTIME_VERSION.PHP_EOL;
if ($db_install) {
if($newInstall) {
system('php airtime-db-install.php y');
}
else {
system('php '.__DIR__.'/airtime-db-install.php y');
AirtimeInstall::DbConnect(true);
} else {
require_once('airtime-db-install.php');
}
}

View File

@ -90,6 +90,6 @@ AirtimeInstall::UninstallBinaries();
AirtimeInstall::RemoveLogDirectories();
AirtimeIni::RemoveMonitFile();
unlink('/etc/cron.d/airtime-crons');
@unlink('/etc/cron.d/airtime-crons');
/* FINISHED AIRTIME PHP UNINSTALLER */

View File

@ -1,39 +0,0 @@
<?php
// Do not allow remote execution
$arr = array_diff_assoc($_SERVER, $_ENV);
if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
header("HTTP/1.1 400");
header("Content-type: text/plain; charset=UTF-8");
echo "400 Not executable\r\n";
exit(1);
}
require_once(dirname(__FILE__).'/../../../storageServer/var/cron/Cron.php');
$m = '*';
$h ='*';
$dom = '*';
$mon = '*';
$dow = '*';
$command = '/usr/bin/php '.realpath(dirname(__FILE__).'/../ui_twitterCron.php').' >/dev/null 2>&1';
$old_regex = '/ui_twitterCron\.php/';
$cron = new Cron();
$access = $cron->openCrontab('write');
if ($access != 'write') {
do {
$r = $cron->forceWriteable();
} while ($r);
}
foreach ($cron->ct->getByType(CRON_CMD) as $id => $line) {
if (preg_match($old_regex, $line['command'])) {
echo " removing old entry\n";
$cron->ct->delEntry($id);
}
}
echo " adding new entry\n";
$cron->ct->addCron($m, $h, $dom, $mon, $dow, $command);
$cron->closeCrontab();
echo "Done.\n";

View File

@ -1,31 +0,0 @@
<?php
// Do not allow remote execution
$arr = array_diff_assoc($_SERVER, $_ENV);
if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
header("HTTP/1.1 400");
header("Content-type: text/plain; charset=UTF-8");
echo "400 Not executable\r\n";
exit(1);
}
require_once(dirname(__FILE__).'/../../../storageServer/var/cron/Cron.php');
$old_regex = '/ui_twitterCron\.php/';
$cron = new Cron();
$access = $cron->openCrontab('write');
if ($access != 'write') {
do {
$r = $cron->forceWriteable();
} while ($r);
}
foreach ($cron->ct->getByType(CRON_CMD) as $id => $line) {
if (preg_match($old_regex, $line['command'])) {
echo " removing cron entry\n";
$cron->ct->delEntry($id);
}
}
$cron->closeCrontab();
echo "Done.\n";