Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
d642a48e8c
57
Changelog
57
Changelog
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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";
|
||||
|
|
@ -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";
|
Loading…
Reference in New Issue