commit
d6fa24cc84
20
.travis.yml
20
.travis.yml
|
@ -1,4 +1,5 @@
|
|||
dist: trusty
|
||||
version: ~> 1.0
|
||||
language: php
|
||||
php:
|
||||
# the latest and greatest, has some issues that are excluded below in matrix.allow_failures
|
||||
|
@ -18,10 +19,10 @@ env:
|
|||
global:
|
||||
- ENVIRONMENT=testing
|
||||
- LIBRETIME_LOG_DIR=/tmp/log/libretime
|
||||
matrix:
|
||||
jobs:
|
||||
- PYTHON=false
|
||||
- PYTHON=true
|
||||
matrix:
|
||||
jobs:
|
||||
allow_failures:
|
||||
# there are currently some testing issues with DateTime precision on 7.1
|
||||
- env: PYTHON=false
|
||||
|
@ -33,12 +34,17 @@ matrix:
|
|||
- env: PYTHON=false
|
||||
php: 7.3
|
||||
exclude:
|
||||
# by excluding all of python we make way to just run python tests in one seperate instance
|
||||
# we need to explicitly exclude python for every version of php other than 7.3 to make way to just run python tests in one seperate instance
|
||||
- env: PYTHON=true
|
||||
include:
|
||||
# using latest to run python on since it will last the longest
|
||||
- php: 7.3
|
||||
env: PYTHON=true
|
||||
php: 7.2
|
||||
- env: PYTHON=true
|
||||
php: 7.1
|
||||
- env: PYTHON=true
|
||||
php: 7.0
|
||||
- env: PYTHON=true
|
||||
php: 5.6
|
||||
- env: PYTHON=true
|
||||
php: 5.4
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
|
|
|
@ -57,12 +57,6 @@ $pages[] = array(
|
|||
'module' => 'default',
|
||||
'controller' => 'embeddablewidgets',
|
||||
'action' => 'schedule',
|
||||
),
|
||||
array(
|
||||
'label' => _('Facebook'),
|
||||
'module' => 'default',
|
||||
'controller' => 'embeddablewidgets',
|
||||
'action' => 'facebook',
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@ -185,7 +179,7 @@ $pages[] = array(
|
|||
'target' => "_blank"
|
||||
),
|
||||
array(
|
||||
'label' => _(sprintf("Help Translate %s", PRODUCT_NAME)),
|
||||
'label' => _('Help Translate Libretime'),
|
||||
'uri' => AIRTIME_TRANSIFEX_URL,
|
||||
'target' => "_blank"
|
||||
),
|
||||
|
|
|
@ -43,6 +43,7 @@ class EmbeddableWidgetsController extends Zend_Controller_Action
|
|||
}
|
||||
}
|
||||
|
||||
// The Facebook widget is untested & unsupported, the widget has been removed from the navigation in navigation.php
|
||||
public function facebookAction()
|
||||
{
|
||||
Zend_Layout::getMvcInstance()->assign('parent_page', 'Widgets');
|
||||
|
|
|
@ -161,8 +161,8 @@ final class LocaleController extends Zend_Controller_Action
|
|||
=> _("A static smart block will save the criteria and generate the block content immediately. This allows you to edit and view it in the Library before adding it to a show."),
|
||||
"A dynamic smart block will only save the criteria. The block content will get generated upon adding it to a show. You will not be able to view and edit the content in the Library."
|
||||
=> _("A dynamic smart block will only save the criteria. The block content will get generated upon adding it to a show. You will not be able to view and edit the content in the Library."),
|
||||
"The desired block length will not be reached if Airtime cannot find enough unique tracks to match your criteria. Enable this option if you wish to allow tracks to be added multiple times to the smart block."
|
||||
=> _("The desired block length will not be reached if Airtime cannot find enough unique tracks to match your criteria. Enable this option if you wish to allow tracks to be added multiple times to the smart block."),
|
||||
"The desired block length will not be reached if %s cannot find enough unique tracks to match your criteria. Enable this option if you wish to allow tracks to be added multiple times to the smart block."
|
||||
=> _("The desired block length will not be reached if %s cannot find enough unique tracks to match your criteria. Enable this option if you wish to allow tracks to be added multiple times to the smart block."),
|
||||
"Smart block shuffled" => _("Smart block shuffled"),
|
||||
"Smart block generated and criteria saved" => _("Smart block generated and criteria saved"),
|
||||
"Smart block saved" => _("Smart block saved"),
|
||||
|
@ -193,9 +193,9 @@ final class LocaleController extends Zend_Controller_Action
|
|||
"The stream is disabled" => _("The stream is disabled"),
|
||||
"Getting information from the server..." => _("Getting information from the server..."),
|
||||
"Can not connect to the streaming server" => _("Can not connect to the streaming server"),
|
||||
"If Airtime is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."
|
||||
=> _("If Airtime is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."),
|
||||
"For more details, please read the %sAirtime Manual%s" => _("For more details, please read the %sAirtime Manual%s"),
|
||||
"If %s is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."
|
||||
=> _("If %s is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."),
|
||||
"For more details, please read the %s%s Manual%s" => _("For more details, please read the %s%s Manual%s"),
|
||||
"Check this option to enable metadata for OGG streams (stream metadata is the track title, artist, and show name that is displayed in an audio player). VLC and mplayer have a serious bug when playing an OGG/VORBIS stream that has metadata information enabled: they will disconnect from the stream after every song. If you are using an OGG stream and your listeners do not require support for these audio players, then feel free to enable this option."
|
||||
=> _("Check this option to enable metadata for OGG streams (stream metadata is the track title, artist, and show name that is displayed in an audio player). VLC and mplayer have a serious bug when playing an OGG/VORBIS stream that has metadata information enabled: they will disconnect from the stream after every song. If you are using an OGG stream and your listeners do not require support for these audio players, then feel free to enable this option."),
|
||||
"Check this box to automatically switch off Master/Show source upon source disconnection." => _("Check this box to automatically switch off Master/Show source upon source disconnection."),
|
||||
|
@ -356,7 +356,7 @@ final class LocaleController extends Zend_Controller_Action
|
|||
"Import media files" => _("Import media files"),
|
||||
"Create playlists, smart blocks, and webstreams" => _("Create playlists, smart blocks, and webstreams"),
|
||||
"Manage their own library content" => _("Manage their own library content"),
|
||||
"Progam Managers can do the following:" => _("Progam Managers can do the following:"),
|
||||
"Program Managers can do the following:" => _("Program Managers can do the following:"),
|
||||
"View and manage show content" => _("View and manage show content"),
|
||||
"Schedule shows" => _("Schedule shows"),
|
||||
"Manage all library content" => _("Manage all library content"),
|
||||
|
@ -431,24 +431,76 @@ final class LocaleController extends Zend_Controller_Action
|
|||
"New Show" => _("New Show"),
|
||||
"New Log Entry" => _("New Log Entry"),
|
||||
//Datatables:
|
||||
"No data available in table",
|
||||
"Showing _START_ to _END_ of _TOTAL_ entries",
|
||||
"Showing 0 to 0 of 0 entries",
|
||||
"(filtered from _MAX_ total entries)",
|
||||
"",
|
||||
",",
|
||||
"Show _MENU_",
|
||||
"Loading...",
|
||||
"Processing...",
|
||||
"No matching records found",
|
||||
"First",
|
||||
"Last",
|
||||
"Next",
|
||||
"Previous",
|
||||
"No data available in table" => _("No data available in table"),
|
||||
"(filtered from _MAX_ total entries)" => _("(filtered from _MAX_ total entries)"),
|
||||
": activate to sort column ascending",
|
||||
": activate to sort column descending",
|
||||
//End of datatables
|
||||
"Welcome to the new Airtime Pro!" => _("Welcome to the new Airtime Pro!"),
|
||||
|
||||
//New entries from .js "" => _(""),
|
||||
"First" => _("First"),
|
||||
"Last" => _("Last"),
|
||||
"Next" => _("Next"),
|
||||
"Previous" => _("Previous"),
|
||||
"Search:" => _("Search:"),
|
||||
"No matching records found" => _("No matching records found"),
|
||||
"Drag tracks here from the library" => _("Drag tracks here from the library"),
|
||||
"No tracks were played during the selected time period." => _("No tracks were played during the selected time period."),
|
||||
"Unpublish" => _("Unpublish"),
|
||||
"No matching results found." => _("No matching results found."),
|
||||
"Author" => _("Author"),
|
||||
"Description" => _("Description"),
|
||||
"Link" => _("Link"),
|
||||
"Publication Date" => _("Publication Date"),
|
||||
"Import Status" => _("Import Status"),
|
||||
"Actions" => _("Actions"),
|
||||
"Delete from Library" => _("Delete from Library"),
|
||||
"Successfully imported" => _("Successfully imported"),
|
||||
"No matching records found" => _("No matching records found"),
|
||||
"Show _MENU_" => _("Show _MENU_"),
|
||||
"Show _MENU_ entries" => _("Show _MENU_ entries"),
|
||||
"Showing _START_ to _END_ of _TOTAL_ entries" => _("Showing _START_ to _END_ of _TOTAL_ entries"),
|
||||
"Showing _START_ to _END_ of _TOTAL_ tracks" => _("Showing _START_ to _END_ of _TOTAL_ tracks"),
|
||||
"Showing _START_ to _END_ of _TOTAL_ track types" => _("Showing _START_ to _END_ of _TOTAL_ track types"),
|
||||
"Showing _START_ to _END_ of _TOTAL_ users" => _("Showing _START_ to _END_ of _TOTAL_ users"),
|
||||
"Showing 0 to 0 of 0 entries" => _("Showing 0 to 0 of 0 entries"),
|
||||
"Showing 0 to 0 of 0 tracks" => _("Showing 0 to 0 of 0 tracks"),
|
||||
"Showing 0 to 0 of 0 track types" => _("Showing 0 to 0 of 0 track types"),
|
||||
"(filtered from _MAX_ total track types)" => _("(filtered from _MAX_ total track types)"),
|
||||
//"This is used for tracks containing music." => _("This is used for tracks containing music."),
|
||||
"Are you sure you want to delete this tracktype?" => _("Are you sure you want to delete this tracktype?"),
|
||||
"No track types were found." => _("No track types were found."),
|
||||
"No track types found" => _("No track types found"),
|
||||
"No matching track types found" => _("No matching track types found"),
|
||||
"Enabled" => _("Enabled"),
|
||||
"Disabled" => _("Disabled"),
|
||||
"Cancel upload" => _("Cancel upload"),
|
||||
"Type" => _("Type"),
|
||||
"Autoloading playlists' contents are added to shows one hour before the show airs. <a target='_blank' href='http://libretime.org/manual/calendar/#autoloading-playlist'>More information</a>" => _("Autoloading playlists' contents are added to shows one hour before the show airs. <a target='_blank' href='http://libretime.org/manual/calendar/#autoloading-playlist'>More information</a>"),
|
||||
"Podcast settings saved" => _("Podcast settings saved"),
|
||||
"Are you sure you want to delete this user?" => _("Are you sure you want to delete this user?"),
|
||||
"Can't delete yourself!" => _("Can't delete yourself!"),
|
||||
"You haven't published any episodes!" => _("You haven't published any episodes!"),
|
||||
"You can publish your uploaded content from the 'Tracks' view." => _("You can publish your uploaded content from the 'Tracks' view."),
|
||||
"Try it now" => _("Try it now"),
|
||||
"<p>If this option is unchecked, the smartblock will schedule as many tracks as can be played out <strong>in their entirety</strong> within the specified duration. This will usually result in audio playback that is slightly less than the specified duration.</p><p>If this option is checked, the smartblock will also schedule one final track which will overflow the specified duration. This final track may be cut off mid-way if the show into which the smartblock is added finishes.</p>" => _("<p>If this option is unchecked, the smartblock will schedule as many tracks as can be played out <strong>in their entirety</strong> within the specified duration. This will usually result in audio playback that is slightly less than the specified duration.</p><p>If this option is checked, the smartblock will also schedule one final track which will overflow the specified duration. This final track may be cut off mid-way if the show into which the smartblock is added finishes.</p>"),
|
||||
"Playlist preview" => _("Playlist preview"),
|
||||
"Smart Block" => _("Smart Block"),
|
||||
"Webstream preview" => _("Webstream preview"),
|
||||
"You don't have permission to view the library." => _("You don't have permission to view the library."),
|
||||
"Now" => _("Now"),
|
||||
"Click 'New' to create one now." => _("Click 'New' to create one now."),
|
||||
"Click 'Upload' to add some now." => _("Click 'Upload' to add some now."),
|
||||
"Feed URL" => _("Feed URL"),
|
||||
"Import Date" => _("Import Date"),
|
||||
"Add New Podcast" => _("Add New Podcast"),
|
||||
"Cannot schedule outside a show.\nTry creating a show first." => _("Cannot schedule outside a show.\nTry creating a show first."),
|
||||
"No files have been uploaded yet." => _("No files have been uploaded yet."),
|
||||
//"Value is required and can't be empty" => _("Value is required and can't be empty"),
|
||||
//"mute" => _("mute"),
|
||||
//"max volume" => _("max volume"),
|
||||
|
||||
//embed player
|
||||
"On Air" => _("On Air"),
|
||||
"Off Air" => _("Off Air"),
|
||||
|
|
|
@ -2,7 +2,7 @@ ALTER TABLE cc_files ADD COLUMN track_type VARCHAR(16);
|
|||
|
||||
CREATE TABLE IF NOT EXISTS "cc_track_types"
|
||||
(
|
||||
"id" integer DEFAULT nextval('cc_track_types_id_seq'::regclass) NOT NULL,
|
||||
"id" serial NOT NULL,
|
||||
"code" VARCHAR(16) NOT NULL,
|
||||
"type_name" VARCHAR(64),
|
||||
"description" VARCHAR(255),
|
||||
|
@ -24,4 +24,3 @@ INSERT INTO cc_track_types VALUES (10, 'COM', 'Commercial', 'This is used for co
|
|||
INSERT INTO cc_track_types VALUES (11, 'ITV', 'Interview', 'This is used for radio interviews', true);
|
||||
INSERT INTO cc_track_types VALUES (12, 'VTR', 'Voice Tracking', 'Also referred as robojock or taped. Make announcements without actually being in the station.', true);
|
||||
|
||||
ALTER SEQUENCE cc_track_types_id_seq RESTART WITH 13;
|
|
@ -94,6 +94,7 @@ class Application_Form_EditAudioMD extends Zend_Form
|
|||
// Add track type dropdown
|
||||
$track_type_options = array();
|
||||
$track_types = Application_Model_Tracktype::getTracktypes();
|
||||
$track_type_options[""] = _('Select a Type');
|
||||
foreach ($track_types as $key => $tt) {
|
||||
$track_type_options[$tt['code']] = $tt['type_name'];
|
||||
}
|
||||
|
|
|
@ -75,6 +75,12 @@ class Application_Form_Player extends Zend_Form_SubForm
|
|||
|
||||
$previewLabel = new Zend_Form_Element_Text('player_preview_label');
|
||||
$previewLabel->setLabel(_("Preview:"));
|
||||
$previewLabel->setDecorators(array(
|
||||
'ViewHelper',
|
||||
'Errors',
|
||||
'Label'
|
||||
));
|
||||
$previewLabel->addDecorator('Label', array('class' => 'preview-label'));
|
||||
$this->addElement($previewLabel);
|
||||
|
||||
}
|
||||
|
|
|
@ -179,18 +179,10 @@
|
|||
<div id="whatsnew_video">
|
||||
<iframe width="560" height="315" src="<?php echo UI_REVAMP_EMBED_URL ?>" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
<h2><?php echo _("Airtime Pro has a new look!"); ?></h2>
|
||||
<p><?php echo _("Your favorite features are now even easier to use - and we've even
|
||||
added a few new ones! Check out the video above or read on to find out more."); ?></p>
|
||||
<ul>
|
||||
<li><?php echo _("Our new Dashboard view now has a powerful tabbed editing interface, so updating your tracks and playlists
|
||||
is easier than ever."); ?></li>
|
||||
<li><?php echo _("We've streamlined the Airtime interface to make navigation easier. With the most important tools
|
||||
just a click away, you'll be on air and hands-free in no time."); ?></li>
|
||||
<li><?php echo _("Got a huge music library? No problem! With the new Upload page, you can drag and drop whole folders to our private cloud."); ?></li>
|
||||
<li><?php echo _("The new Airtime is smoother, sleeker, and faster - on even more devices! We're committed to improving the Airtime
|
||||
experience, no matter how you're connected."); ?></li>
|
||||
</ul>
|
||||
<h2><?php echo _("Welcome to LibreTime"); ?></h2>
|
||||
<p><?php echo _("LibreTime is free software for radio stations built by a community.
|
||||
You can find out more information at LibreTime.org. We are built as a fork of Airtime.
|
||||
If you have any questions you can also go to https://discourse.libretime.org and ask them."); ?></p>
|
||||
</div>
|
||||
<button id="whatsnew_close" class="btn btn-new">OK, got it!</button>
|
||||
</div>
|
||||
|
|
|
@ -158,7 +158,7 @@ class Application_Service_PodcastService
|
|||
$newBl = new Application_Model_Block();
|
||||
$newBl->setCreator(Application_Model_User::getCurrentUser()->getId());
|
||||
$newBl->setName($title);
|
||||
$newBl->setDescription('Auto-generated smartblock for podcast');
|
||||
$newBl->setDescription(_("Auto-generated smartblock for podcast"));
|
||||
$newBl->saveType('dynamic');
|
||||
// limit the smartblock to 1 item
|
||||
$row = new CcBlockcriteria();
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
<?php $baseUrl = Application_Common_OsPath::getBaseDir(); ?>
|
||||
|
||||
<h2 style="float:left"><?php echo _("Facebook Radio Player") ?></h2>
|
||||
<h2 style="text-align:center"><?php echo _("Facebook Radio Player") ?></h2>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
<p><button class="btn btn-new" id="facebook-login" style="margin-left: 300px;">Add to My Facebook Page</button></p>
|
||||
<p><button class="btn btn-new" id="facebook-login" style="margin-left: 320px;"><?php echo _("Add to My Facebook Page") ?></button></p>
|
||||
|
||||
<div id="weekly-schedule-widget-error">
|
||||
<?php echo $this->facebook_error_msg; ?>
|
||||
|
@ -13,7 +13,7 @@
|
|||
|
||||
|
||||
<div>
|
||||
<h3 style="padding-left: 0px">Preview:</h3>
|
||||
<h3 style="padding-left: 0px"><?php echo _("Preview:") ?></h3>
|
||||
|
||||
<div>
|
||||
<iframe width=800 height=800 src="<?php echo Application_Common_HTTPHelper::getStationUrl(); ?>/?facebook=1"></iframe>
|
||||
|
@ -24,14 +24,14 @@
|
|||
|
||||
|
||||
<div>
|
||||
<h3 style="padding-left: 0px">Tips:</h3>
|
||||
<h3 style="padding-left: 0px"><?php echo _("Tips:") ?></h3>
|
||||
<p>
|
||||
To make the tab more visible on your Facebook page, click "More", and "Manage Tabs":<br>
|
||||
<?php echo _("To make the tab more visible on your Facebook page, click 'More', and 'Manage Tabs':") ?><br><br>
|
||||
<img src="<?php echo($baseUrl) . "images/doc/facebook_widget1.png"?>"><br><br>
|
||||
|
||||
Then, drag the Radio Player item higher in the list, and click Save. It will now appear as one of the default tabs instead of being buried under "More":<br>
|
||||
<?php echo _("Then, drag the Radio Player item higher in the list, and click Save. It will now appear as one of the default tabs instead of being buried under 'More':") ?><br><br>
|
||||
<img src="<?php echo($baseUrl) . "images/doc/facebook_widget2.png"?>">
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<?php $baseUrl = Application_Common_OsPath::getBaseDir(); ?>
|
||||
|
||||
<form method="post" id="player_form" enctype="multipart/form-data">
|
||||
<h2 style="float:left"><?php echo _("Player") ?></h2>
|
||||
<h2 style="text-align:center"><?php echo _("Player") ?></h2>
|
||||
<div style="clear:both"></div>
|
||||
<?php echo $this->player_error_msg; ?>
|
||||
<?php echo $this->player_form; ?>
|
||||
|
|
|
@ -2,27 +2,26 @@
|
|||
|
||||
<?php $baseUrl = Application_Common_OsPath::getBaseDir(); ?>
|
||||
|
||||
<h2 style="float:left"><?php echo _("Weekly Schedule") ?></h2>
|
||||
<h2 style="text-align:center"><?php echo _("Weekly Schedule") ?></h2>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
<div id="weekly-schedule-widget-error">
|
||||
<?php echo $this->weekly_schedule_error_msg; ?>
|
||||
</div>
|
||||
|
||||
<h3 style="float:left"><?php echo _("Preview:") ?></h3>
|
||||
<fieldset class="padded">
|
||||
<div id="weekly-schedule-widget-preview" <?php if (isset($this->weekly_schedule_error_msg)) echo "style=display:none"; ?>>
|
||||
<label><?php echo _("Preview:") ?></label>
|
||||
<!-- <label><?php echo _("Preview:") ?></label> -->
|
||||
<div class="schedule_iframe_wrapper">
|
||||
<iframe id="schedule_iframe" height="400px" width="550px" scrolling="no" frameborder="0" src="<?php echo Application_Common_HTTPHelper::getStationUrl()."embed/weekly-program"?>"></iframe>
|
||||
</div>
|
||||
|
||||
<div style="clear:both"></div>
|
||||
<label>Embeddable Code:</label>
|
||||
<label><?php echo _("Embeddable code:") ?><br><br></label>
|
||||
<textarea style="width:98%" rows="3" readonly="readonly"><iframe height="400px" width="550px" scrolling="no" frameborder="0" src="<?php echo Application_Common_HTTPHelper::getStationUrl()."embed/weekly-program"?>"></iframe>
|
||||
</textarea>
|
||||
<div><p>
|
||||
Copy this code and paste it into your website's HTML to embed the weekly schedule in your site.
|
||||
Adjust the height and width attributes to your desired size.
|
||||
<?php echo _("Copy this code and paste it into your website's HTML to embed the weekly schedule in your site. Adjust the height and width attributes to your desired size.") ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<form enctype="application/x-www-form-urlencoded" method="post" action="">
|
||||
<dl class="zend_form">
|
||||
|
||||
<p>Please enter both your username and email address.</p>
|
||||
<p><?php echo(_("Please enter both your username and email address.")); ?></p>
|
||||
<dt id="username-label">
|
||||
<label for="username" class="required">
|
||||
<?php echo $this->element->getElement('username')->getLabel() ?>
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
<style type="text/css">
|
||||
|
||||
.player-title {
|
||||
width: 70px;
|
||||
border-style: none
|
||||
float: left;
|
||||
}
|
||||
|
||||
.preview-label {
|
||||
line-height: 60px;
|
||||
border-style: none
|
||||
float: left;
|
||||
font-size: 20px;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
</style>
|
||||
<fieldset class="padded">
|
||||
<dl class="zend_form">
|
||||
|
||||
|
@ -23,11 +40,11 @@
|
|||
|
||||
<?php //echo $this->element->getElement('player_display_track_metadata'); ?>
|
||||
|
||||
<table id="player_compatibility_chart">
|
||||
<th colspan="5">Stream Compatibility</th>
|
||||
<table id="player_compatibility_chart" style="text-align:center; position:relative; top:40px;">
|
||||
<th colspan="5" style="text-align:center"><?php echo _("Stream Compatibility") ?></th>
|
||||
<tr>
|
||||
<td colspan="3">Desktop</td>
|
||||
<td colspan="2">Mobile</td>
|
||||
<td colspan="3"><?php echo _("Desktop") ?></td>
|
||||
<td colspan="2"><?php echo _("Mobile") ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Firefox</td>
|
||||
|
@ -37,17 +54,17 @@
|
|||
<td>iOS 7 - Safari</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yes (Flash)</td>
|
||||
<td>Yes (Flash)</td>
|
||||
<td>Yes (Flash)</td>
|
||||
<td>MP3/OGG* only</td>
|
||||
<td>MP3/AAC only</td>
|
||||
<td><?php echo _("Yes (Flash)") ?></td>
|
||||
<td><?php echo _("Yes (Flash)") ?></td>
|
||||
<td><?php echo _("Yes (Flash)") ?></td>
|
||||
<td><?php echo _("MP3/OGG* only") ?></td>
|
||||
<td><?php echo _("MP3/AAC only") ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="5">* Chrome on Android is known to take about 4 seconds to buffer a 128 kbps MP3 stream. Lower bitrates take longer to buffer.</td>
|
||||
<td colspan="5" style="text-align:left"><?php echo _("* Chrome on Android is known to take about 4 seconds to buffer a 128 kbps MP3 stream. Lower bitrates take longer to buffer.") ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</dl>
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
|
||||
<div class="warning" style="margin-bottom: 10px;">
|
||||
<p class="warning-label">
|
||||
<strong>Warning:</strong> These functions will have <strong>permanent and lasting effects</strong>
|
||||
on your Airtime station. Think carefully before using them!
|
||||
<?php echo _("<strong>Warning:</strong> These functions will have <strong>permanent and lasting effects</strong> on your Airtime station. Think carefully before using them!") ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
<span id="stream_url"><?php echo $this->element->getElement("master_source_host")->render() ?>
|
||||
<a href=# id="connection_url_override" style="font-size: 12px;"><?php echo _("Override") ?></a>
|
||||
<span class="override_help_icon"></span></br>
|
||||
<div id="master_dj_connection_url_actions" style="display:none">
|
||||
<a href=# id="ok" style="font-size: 12px;"><?php echo _("OK") ?></a> <a href=# id="reset" style="font-size: 12px;"><?php echo _("RESET"); ?></a>
|
||||
<div id="master_dj_connection_url_actions" style="display:none">
|
||||
<a href=# id="ok" style="font-size: 12px;"><?php echo _("OK") ?></a> <a href=# id="reset" style="font-size: 12px;"><?php echo _("RESET"); ?></a>
|
||||
</div>
|
||||
</span>
|
||||
<?php echo $this->element->getElement("master_source_port")->render() ?>
|
||||
|
@ -36,8 +36,8 @@
|
|||
<a href=# id="connection_url_override" style="font-size: 12px;"><?php echo _("Override") ?></a>
|
||||
<span class="override_help_icon"></span>
|
||||
</br>
|
||||
<div id="live_dj_connection_url_actions" style="display:none">
|
||||
<a href=# id="ok" style="font-size: 12px;"><?php echo _("OK") ?></a> <a href=# id="reset" style="font-size: 12px;"><?php echo _("RESET"); ?></a>
|
||||
<div id="live_dj_connection_url_actions" style="display:none; float:left">
|
||||
<a href=# id="ok" style="font-size: 12px;"><?php echo _("OK") ?></a> <a href=# id="reset" style="font-size: 12px;"><?php echo _("RESET"); ?></a>
|
||||
</div>
|
||||
</span>
|
||||
<?php echo $this->element->getElement("show_source_port")->render() ?>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<div id="tab-4" class="podcast tab_content">
|
||||
<div class="rss-title-wrapper">
|
||||
<div id="rss-subscribe">
|
||||
<a target="_blank" href="<?php echo $this->stationPodcastRssUrl ?>" class="rss_icon"><span>Subscribe </span><img src="css/radio-page/img/rss.png"></a>
|
||||
<a target="_blank" href="<?php echo $this->stationPodcastRssUrl ?>" class="rss_icon"><span><?php echo _("Subscribe") ?></span><img src="css/radio-page/img/rss.png"></a>
|
||||
</div>
|
||||
<div id="rss-title">
|
||||
<?php echo $this->podcastTitle ?>
|
||||
|
@ -70,7 +70,7 @@
|
|||
<div id="jp_container_1" class="jp-audio">
|
||||
<div class="jp-type-playlist">
|
||||
|
||||
<div class="current-track track-overflow">Now Playing: <span class="track-overflow"></span></div>
|
||||
<div class="current-track track-overflow"><?php echo _("Now Playing:") ?><span class="track-overflow"></span></div>
|
||||
<div class="jp-gui jp-interface">
|
||||
<div class="playbar playbar-buttons">
|
||||
<ul class="jp-controls rss-buttons">
|
||||
|
@ -355,4 +355,4 @@
|
|||
|
||||
});
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<div id="flot_placeholder" style="height:300px;margin:0px 50px 0px 50px"></div>
|
||||
<div id="legend" style="width:600px;height:70px;margin:0px 50px 0px 50px"></div>
|
||||
<div id="date_form" style="float:left; margin:0px 0px">
|
||||
<h3 style="padding-left: 0px">Date Range</h3>
|
||||
<h3 style="padding-left: 0px"><?php echo _("Date Range") ?></h3>
|
||||
<?php echo $this->date_form; ?>
|
||||
</div>
|
||||
<div id="errorStatus" style="float:right; width: 400px">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<H2><?php echo _("Listeners")?></H2>
|
||||
<div class="error_window"></div>
|
||||
<div id="date_form" style="float:left; margin:0px 0px">
|
||||
<h3 style="padding-left: 0px">Date Range</h3>
|
||||
<h3 style="padding-left: 0px"><?php echo _("Date Range") ?></h3>
|
||||
<?php echo $this->date_form; ?>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -83,12 +83,12 @@
|
|||
</div>
|
||||
-->
|
||||
<div id="uploads_disk_usage">
|
||||
<div style="padding-bottom: 2px;">Storage</div>
|
||||
<div style="padding-bottom: 2px;"><?php echo _("Storage")?></div>
|
||||
<div class="disk_usage_progress_bar"></div>
|
||||
<div class="disk_usage_percent_in_use"><?php echo sprintf("%01.1f%% ", $used/$total*100) . _("in use") ?></div>
|
||||
<div class="disk_usage_used" style="width:<?php echo sprintf("%01.1f%%", min(100, $used/$total*100)) ?>;"></div>
|
||||
|
||||
<div style="margin-top: 17px; font-size: 12px;"><?php echo sprintf("%01.1fGB of %01.1fGB", $used/pow(2, 30), $total/pow(2, 30)); ?></div>
|
||||
<div style="margin-top: 17px; font-size: 12px;"><?php echo sprintf(_("%01.1fGB of %01.1fGB"), $used/pow(2, 30), $total/pow(2, 30)); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
<div style="clear:both"></div>
|
||||
<div class="podcast-metadata-row">
|
||||
<dt>
|
||||
<label for="stationPodcastFeedUrl" class="optional">Feed URL</label>
|
||||
<label for="stationPodcastFeedUrl" class="optional"><?php echo _("Feed URL"); ?></label>
|
||||
</dt>
|
||||
<dd>
|
||||
<input type="url" ng-model="podcast.url" disabled="disabled" class="input_text" />
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
<?php foreach ($this->form->getElement('streamFormat')->getMultiOptions() as $radio) : ?>
|
||||
<label for="streamFormat-<?php echo $i ?>">
|
||||
<input type="radio" value="<?php echo $i ?>" id="streamFormat-<?php echo $i ?>" name="streamFormat" <?php if($i == $value){echo 'checked="checked"';}?> >
|
||||
<?php echo $radio ?>
|
||||
<?php echo $radio ?> <br><br>
|
||||
</input>
|
||||
</label>
|
||||
<?php $i = $i + 1; ?>
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
Postgres
|
||||
</td>
|
||||
<td class="description">
|
||||
PDO and PostgreSQL libraries
|
||||
<?php echo _("PDO and PostgreSQL libraries") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($postgres) {echo 'check';?>">
|
||||
<?php
|
||||
|
@ -55,7 +55,7 @@
|
|||
Database
|
||||
</td>
|
||||
<td class="description">
|
||||
Database configuration for LibreTime
|
||||
<?php echo _("Database configuration for LibreTime") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($database) {echo 'check';?>">
|
||||
<?php
|
||||
|
@ -74,7 +74,7 @@
|
|||
RabbitMQ
|
||||
</td>
|
||||
<td class="description">
|
||||
RabbitMQ configuration for LibreTime
|
||||
<?php echo _("RabbitMQ configuration for LibreTime") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($rabbitmq) {echo 'check';?>">
|
||||
<?php
|
||||
|
@ -92,19 +92,19 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="component">
|
||||
Media Analzyer
|
||||
Media Analyzer
|
||||
</td>
|
||||
<td class="description">
|
||||
LibreTime media analyzer service
|
||||
<?php echo _("LibreTime media analyzer service") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($analyzer) {echo 'check';?>">
|
||||
<?php
|
||||
} else {
|
||||
?>">
|
||||
Check that the airtime_analyzer service is installed correctly in <code>/etc/init</code>,
|
||||
and ensure that it's running with
|
||||
<?php echo _("Check that the airtime_analyzer service is installed correctly in ") ?><code>/etc/init</code>,
|
||||
<?php echo _(" and ensure that it's running with ") ?>
|
||||
<br/><code>initctl list | grep airtime_analyzer</code><br/>
|
||||
If not, try <br/><code>sudo service airtime_analyzer start</code>
|
||||
<?php echo _("If not, try ") ?><br/><code>sudo service airtime_analyzer start</code>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
@ -115,16 +115,16 @@
|
|||
Pypo
|
||||
</td>
|
||||
<td class="description">
|
||||
LibreTime playout service
|
||||
<?php echo _("LibreTime playout service") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($pypo) {echo 'check';?>">
|
||||
<?php
|
||||
} else {
|
||||
?>">
|
||||
Check that the airtime-playout service is installed correctly in <code>/etc/init</code>,
|
||||
and ensure that it's running with
|
||||
<?php echo _("Check that the airtime-playout service is installed correctly in ") ?><code>/etc/init</code>,
|
||||
<?php echo _(" and ensure that it's running with ") ?>
|
||||
<br/><code>initctl list | grep airtime-playout</code><br/>
|
||||
If not, try <br/><code>sudo service airtime-playout restart</code>
|
||||
<?php echo _("If not, try ") ?><br/><code>sudo service airtime-playout restart</code>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
@ -135,36 +135,36 @@
|
|||
Liquidsoap
|
||||
</td>
|
||||
<td class="description">
|
||||
LibreTime liquidsoap service
|
||||
<?php echo _("LibreTime liquidsoap service") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($liquidsoap) {echo 'check';?>" >
|
||||
<?php
|
||||
} else {
|
||||
?>">
|
||||
Check that the airtime-liquidsoap service is installed correctly in <code>/etc/init</code>,
|
||||
and ensure that it's running with
|
||||
<?php echo _("Check that the airtime-liquidsoap service is installed correctly in ") ?><code>/etc/init</code>,
|
||||
<?php echo _(" and ensure that it's running with ") ?>
|
||||
<br/><code>initctl list | grep airtime-liquidsoap</code><br/>
|
||||
If not, try <br/><code>sudo service airtime-liquidsoap restart</code>
|
||||
<?php echo _("If not, try ") ?><br/><code>sudo service airtime-liquidsoap restart</code>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="component">
|
||||
<td class="component" align="center">
|
||||
Celery
|
||||
</td>
|
||||
<td class="description">
|
||||
LibreTime Celery Task service
|
||||
<?php echo _("LibreTime Celery Task service") ?>
|
||||
</td>
|
||||
<td class="solution <?php if ($celery) {echo 'check';?>" >
|
||||
<?php
|
||||
} else {
|
||||
?>">
|
||||
Check that the airtime-celery service is installed correctly in <code>/etc/init</code>,
|
||||
and ensure that it's running with
|
||||
<?php echo _("Check that the airtime-celery service is installed correctly in ") ?><code>/etc/init</code>,
|
||||
<?php echo _(" and ensure that it's running with ") ?>
|
||||
<br/><code>initctl list | grep airtime-celery</code><br/>
|
||||
If not, try <br/><code>sudo service airtime-celery restart</code>
|
||||
<?php echo _("If not, try ") ?><br/><code>sudo service airtime-celery restart</code>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -113,8 +113,8 @@ function checkRMQConnection() {
|
|||
* @return boolean true if airtime-analyzer is running
|
||||
*/
|
||||
function checkAnalyzerService() {
|
||||
exec("pgrep -f -u www-data airtime_analyzer", $out, $status);
|
||||
if (array_key_exists(0, $out) && $status == 0) {
|
||||
exec("pgrep -f airtime_analyzer", $out, $status);
|
||||
if (($out > 0) && $status == 0) {
|
||||
return posix_kill(rtrim($out[0]), 0);
|
||||
}
|
||||
return $status == 0;
|
||||
|
@ -126,8 +126,8 @@ function checkAnalyzerService() {
|
|||
* @return boolean true if airtime-playout is running
|
||||
*/
|
||||
function checkPlayoutService() {
|
||||
exec("pgrep -f -u www-data airtime-playout", $out, $status);
|
||||
if (array_key_exists(0, $out) && $status == 0) {
|
||||
exec("pgrep -f airtime-playout", $out, $status);
|
||||
if ($out > 0) {
|
||||
return posix_kill(rtrim($out[0]), 0);
|
||||
}
|
||||
return $status == 0;
|
||||
|
@ -139,8 +139,8 @@ function checkPlayoutService() {
|
|||
* @return boolean true if airtime-liquidsoap is running
|
||||
*/
|
||||
function checkLiquidsoapService() {
|
||||
exec("pgrep -f -u www-data airtime-liquidsoap", $out, $status);
|
||||
if (array_key_exists(0, $out) && $status == 0) {
|
||||
exec("pgrep -f airtime-liquidsoap", $out, $status);
|
||||
if ($out > 0) {
|
||||
return posix_kill(rtrim($out[0]), 0);
|
||||
}
|
||||
return $status == 0;
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -767,6 +767,14 @@ var AIRTIME = (function(AIRTIME) {
|
|||
$(this).contextMenu({x: $(e.target).offset().left, y: $(e.target).offset().top})
|
||||
}).html("<div class='library_actions_btn'>...</div>");
|
||||
|
||||
if (aData.track_type == null || aData.track_type == undefined || aData.track_type == 0) {
|
||||
var has_type = false;
|
||||
var type_button = "";
|
||||
} else {
|
||||
var has_type = true;
|
||||
var type_button = "<div class='library_track_type_btn'>"+aData.track_type+"</div>";
|
||||
}
|
||||
|
||||
$(nRow).find('td.library_track_type')
|
||||
.on('click', function (e) {
|
||||
|
||||
|
@ -814,12 +822,12 @@ var AIRTIME = (function(AIRTIME) {
|
|||
}
|
||||
});
|
||||
|
||||
if(type_enabled == false){
|
||||
if(type_enabled == false && has_type == true){
|
||||
alert("This type is disabled.");
|
||||
}
|
||||
});
|
||||
|
||||
}).html("<div class='library_track_type_btn'>"+aData.track_type+"</div>");
|
||||
}).html(type_button);
|
||||
}
|
||||
|
||||
// add audio preview image/button
|
||||
|
|
|
@ -451,12 +451,12 @@ function reindexElements() {
|
|||
*/
|
||||
if ($(div).find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) {
|
||||
if ($(div).is(':visible')) {
|
||||
$(div).prev().find('.db-logic-label').text('or').show();
|
||||
$(div).prev().find('.db-logic-label').text($.i18n._("or")).show();
|
||||
}
|
||||
modIndex++;
|
||||
} else {
|
||||
if ($(div).is(':visible')) {
|
||||
$(div).prev().find('.db-logic-label').text('and').show();
|
||||
$(div).prev().find('.db-logic-label').text($.i18n._("and")).show();
|
||||
}
|
||||
index++;
|
||||
modIndex = 0;
|
||||
|
@ -981,4 +981,4 @@ var stringIsNotOptions = {
|
|||
};
|
||||
|
||||
let tracktypes = TRACKTYPES;
|
||||
var stringTracktypeOptions = Object.assign({"": "Select Track Type"}, tracktypes);
|
||||
var stringTracktypeOptions = Object.assign({"": "Select Track Type"}, tracktypes);
|
||||
|
|
|
@ -60,7 +60,7 @@ function rowCallback( nRow, aData, iDisplayIndex ){
|
|||
if( aData['delete'] != "self"){
|
||||
$('td:eq(4)', nRow).append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); removeUserCallback(aData['id'], nRow)});
|
||||
}else{
|
||||
$('td:eq(4)', nRow).empty().append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); alert("Can't delete yourself!")});
|
||||
$('td:eq(4)', nRow).empty().append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); alert($.i18n._("Can't delete yourself!"))});
|
||||
}
|
||||
|
||||
if ( aData['type'] == "A" )
|
||||
|
|
|
@ -131,7 +131,27 @@ fnRender:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:nu
|
|||
bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollAutoCss:!0,bScrollCollapse:!1,bScrollInfinite:!1,bServerSide:!1,bSort:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){if(1E3>e)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k<h;k++)0===k%3&&0!==k&&(j=this.oLanguage.sInfoThousands+j),j=e[h-k-1]+j;return j},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,
|
||||
fnRowCallback:null,fnServerData:function(e,j,m,k){k.jqXHR=h.ajax({url:e,data:j,success:function(e){e.sError&&k.oApi._fnLog(k,0,e.sError);h(k.oInstance).trigger("xhr",[k,e]);m(e)},dataType:"json",cache:!1,type:k.sServerMethod,error:function(e,h){"parsererror"==h&&k.oApi._fnLog(k,0,"DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(e){var e=this.oApi._fnReadCookie(e.sCookiePrefix+e.sInstance),j;try{j=
|
||||
"function"===typeof h.parseJSON?h.parseJSON(e):eval("("+e+")")}catch(m){j=null}return j},fnStateLoadParams:null,fnStateLoaded:null,fnStateSave:function(e,h){this.oApi._fnCreateCookie(e.sCookiePrefix+e.sInstance,this.oApi._fnJsonString(h),e.iCookieDuration,e.sCookiePrefix,e.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},
|
||||
oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},j.models.oSearch),sAjaxDataProp:"aaData",
|
||||
|
||||
oPaginate:{
|
||||
sFirst: $.i18n._("First"),
|
||||
sLast: $.i18n._("Last"),
|
||||
sNext: $.i18n._("Next"),
|
||||
sPrevious: $.i18n._("Previous")},
|
||||
|
||||
sEmptyTable: $.i18n._("No data available in table"),
|
||||
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ entries"),
|
||||
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 entries"),
|
||||
sInfoFiltered: $.i18n._("(filtered from _MAX_ total entries)"),
|
||||
sInfoPostFix:"",
|
||||
sInfoThousands:",",
|
||||
sLengthMenu: $.i18n._("Show _MENU_ entries"),
|
||||
sLoadingRecords:$.i18n._("Loading..."),
|
||||
sProcessing: $.i18n._("Processing..."),
|
||||
sSearch: $.i18n._("Search:"),
|
||||
sUrl:"",
|
||||
sZeroRecords: $.i18n._("No matching records found")},
|
||||
|
||||
oSearch:h.extend({},j.models.oSearch),sAjaxDataProp:"aaData",
|
||||
sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};j.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bUseRendered:!0,bVisible:!0,fnCreatedCell:null,fnRender:null,iDataSort:-1,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};j.models.oSettings={oFeatures:{bAutoWidth:null,
|
||||
bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBarWidth:0,iLoadGap:null,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:null,
|
||||
asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null,aoStateSave:[],aoStateLoad:[],
|
||||
|
|
|
@ -21,14 +21,15 @@ Here are some brief instructions for how to get starting using it as a developer
|
|||
1. Download and install release from their [github page](https://github.com/workflowproducts/postage/releases/) - Additional instructions [here](https://github.com/workflowproducts/postage/)
|
||||
2. Setup port-forwarding for the vagrant VM - check the VirtualBox Settings for the VM -> Network -> Advanced -> Port Forwarding -> Forward HostPort 5550 to GuestPort 5432
|
||||
3. Modify PostgreSQL to accept connections from outside localhost -> edit /etc/postgresql/VERSION#/main/postgresql.conf - uncomment and modify the listen_address to be `listen_addresses = '*' `you may also need to edit pg_hba.conf in the same directory and allow Ipv4 connections from your localhost. I modified it to all as security wasn't a concern.
|
||||
4. Setup a Postgres username/password for super user in Ubuntu etc use ```
|
||||
4. Setup a Postgres username/password for super user in Ubuntu etc use
|
||||
|
||||
```
|
||||
sudo -u postgres psql postgres
|
||||
|
||||
# \password postgres
|
||||
|
||||
```
|
||||
Enter new password:
|
||||
```
|
||||
|
||||
5. Startup Postage by running `postage` and edit the postage-connections.conf and set the port to 5550 and save it. Then type in the username postgres and password you set above.
|
||||
6. Launch and select the airtime database to view the copy running on your vagrant box. To see the data/schema in a particular table click Schemas->Tables->table_name and then DesignTable or EditData
|
||||
|
||||
|
|
|
@ -13,13 +13,15 @@ Recommendations:
|
|||
- Please review the release notes of the version you are planning on installing.
|
||||
|
||||
Once you have downloaded and extracted LibreTime, run the installation script by navigating into the
|
||||
folder containing the LibreTime codebase, and run it's install script from the command line:
|
||||
folder containing the LibreTime codebase, and run its install script from the command line:
|
||||
|
||||
```
|
||||
sudo ./install
|
||||
sudo ./install -fiap
|
||||
```
|
||||
|
||||
By default, the installer will install and configure all dependencies.
|
||||
The installer will install and configure all dependencies only if the `-fiap` flag is added. If you would prefer to configure dependencies manually, omit the flag.
|
||||
|
||||
A great tutorial video on how to install LibreTime is [here](https://www.youtube.com/watch?v=Djo_55LgjXE).
|
||||
|
||||
## Ubuntu Package
|
||||
LibreTime maintains amd64 .deb packages for Ubuntu 16.04 (Xenial) and 18.04
|
||||
|
@ -41,7 +43,7 @@ Installation in Debian 9 and other Linux distributions is possible, but these
|
|||
are less tested. Installation on Ubuntu 14.04.5 LTS (Trusty Tahr) is also working, but deprecated due to the
|
||||
fact that this version will reach its official end of life in April 2019.
|
||||
|
||||
Plans are in the works for `.rpm` packages, as well as Docker and AWS images.
|
||||
Plans are in the works for `.rpm` packages, as well as Docker and AWS images. If you would like to try LibreTime in a Docker image, [odclive's (unofficial) image](https://hub.docker.com/r/odclive/libretime-docker) is a great place to start.
|
||||
|
||||
Please note that the install script does not take care to ensure that any
|
||||
packages installed are set up in a secure manner. Please see the chapter on
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# Dashboard
|
||||
The Dashboard is divided into two sections a Library section divided between
|
||||
[Tracks](../tracks),[Playlists](../playlists), [Smart Blocks](../smartblocks),
|
||||
[Tracks](../tracks), [Playlists](../playlists), [Smart Blocks](../smartblocks),
|
||||
[Webstreams](../webstreams), and [Podcasts](../podcasts), with the **Scheduled
|
||||
Shows** dialog on the right. This page provides an overview of the right-hand
|
||||
interface. Check the links to see information about the other sections which
|
||||
provide the content that can be scheduled.
|
||||
|
||||
The **Scheduled Shows** page provides a view of the content your station is will
|
||||
playout, or has already played out, which defaults to showing the 24 hours
|
||||
playout, or has already played out, which defaults to showing the 3 hours
|
||||
ahead. This page also enables you to make last-minute changes to running shows.
|
||||
|
||||
If you've only just installed LibreTime, there might not be any content shown
|
||||
|
|
|
@ -68,14 +68,6 @@ password, contact details, language and time zone preferences. Click the
|
|||
|
||||

|
||||
|
||||
On the right of the Logout link, clicking the green check mark opens a pop-up
|
||||
window with information about the version of LibreTime installed. If your
|
||||
LibreTime installation is not the latest version available, the green check
|
||||
mark changes to a green upgrade arrow. Should your LibreTime installation get
|
||||
too far out of date, this arrow will change to a red exclamation mark.
|
||||
|
||||

|
||||
|
||||
Checking an Icecast server
|
||||
--------------------------
|
||||
|
||||
|
|
|
@ -62,6 +62,21 @@ If you have changed the *base\_url*, *base\_port* or *base\_dir* setting in */et
|
|||
base_port = 80
|
||||
base_dir = /
|
||||
|
||||
Apache max file size configuration
|
||||
----------------------------------
|
||||
|
||||
By default, the maximum upload file size is 500 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in */etc/apache2/sites-available/airtime.config*. Search for and update the following in megabytes:
|
||||
|
||||
```
|
||||
; Maximum allowed size for uploaded files.
|
||||
upload_max_filesize = 40M
|
||||
|
||||
; Must be greater than or equal to upload_max_filesize
|
||||
post_max_size = 40M
|
||||
```
|
||||
|
||||
For quick reference, 1024 MB = 1 GB and 2048 MB = 2 GB, but most will be okay with rounding to the nearest thousand. After updating the config file, restart Apache by `sudo systemctl apache restart`.
|
||||
|
||||
|
||||
Playout and recorder settings
|
||||
-----------------------------
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
Modifying the LibreTime interface
|
||||
----------------------------------
|
||||
|
||||
The LibreTime administration interface, as a web application, is fully customizable using the same methods that you might use to modify a website. For instance, you may wish to increase certain font sizes or change the colours in the LibreTime interface to better suit staff users with impaired vision. To do this, open one of the CSS files in the */public/css/* directory under the LibreTime *DocumentRoot* directory in an editor such as **nano**:
|
||||
|
||||
sudo nano /usr/share/airtime/public/css/styles.css
|
||||
|
@ -16,6 +19,24 @@ Save the file with **Ctrl+O**, then refresh your browser to see the change to th
|
|||
|
||||
Any custom changes that you make to the administration interface should be backed up before upgrading LibreTime to a newer version, otherwise they could be overwritten. If you have made improvements that you think might be useful to other LibreTime users, please contact LibreTime and tell us about them.
|
||||
|
||||
Modifying the LibreTime Radio Page
|
||||
-----------------------------------
|
||||
|
||||
The background of the mini-site that appears when you visit the server's domain in your web browser can be changed by modifying the page's CSS file, located at */usr/share/airtime/php/airtime_mvc/public/css/radio-page/radio-page.css*.
|
||||
|
||||
```
|
||||
html {
|
||||
background: url("img/background-testing-3.jpg") no-repeat center center fixed;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
overflow-y: auto;
|
||||
}
|
||||
```
|
||||
|
||||
Place the new background image in the */usr/share/airtime/public/css/radio-page/img/* folder and change the `background:` entry's URL to point to the new image. The new image should be at least 1280 x 720 in pixel size to avoid being blurry.
|
||||
|
||||
Modifying the Icecast interface
|
||||
-------------------------------
|
||||
|
||||
|
|
|
@ -1,13 +1,7 @@
|
|||
Creating a new playlist
|
||||
-----------------------
|
||||
|
||||
Once you have found the media that you require using the search tools, you can create a new playlist on the right hand side of the **Library** page. If it is not already open, click the **Open Media Builder** button to begin.
|
||||
|
||||

|
||||
|
||||
Then click the **New** button and select **New Playlist** from the pop-up menu.
|
||||
|
||||

|
||||
You can create a new playlist on the toolbar of the **Playlists** page.
|
||||
|
||||
At first, the new playlist will be shown as *Untitled Playlist*. Click the pencil icon on the right to give the playlist a name.
|
||||
|
||||
|
@ -34,7 +28,7 @@ You can also select or deselect a whole page of search results using the **Selec
|
|||
|
||||
After adding files to the playlist, the total playlist time is displayed in the top right corner. The duration of an individual file is shown in each row of the playlist in a white font, and beneath this figure the time since the beginning of the playlist is displayed in a smaller light grey font. This elapsed time figure can be used as a time check for voice tracks, although this option may limit the re-usability of the voice track.
|
||||
|
||||
To audition a playlist file in your web browser, click the white triangle**** button on the left side of its row. (If the format of the file is not supported by your browser, the triangle in this button will be greyed out). If audition of the file format is supported, a pop-up window will open, with the playlist starting at the file you clicked.
|
||||
To audition a playlist file in your web browser, click the white triangle button on the left side of its row. (If the format of the file is not supported by your browser, the triangle in this button will be greyed out). If audition of the file format is supported, a pop-up window will open, with the playlist starting at the file you clicked.
|
||||
|
||||
Click the small white **x** icon on the right hand side of each row to remove a file from the playlist. You can also drag and drop files to re-order them, or click the **Shuffle** button to re-order files automatically. Click the **Clear** button to remove all content from the playlist, or click the **Delete** button to remove the playlist from the LibreTime library altogether.
|
||||
|
||||
|
@ -44,24 +38,6 @@ To adjust start and end fades, click the playlist **Fade** button (two horizonta
|
|||
|
||||

|
||||
|
||||
Click any one of the smaller **Fade** buttons between file rows to open another beige bar, which enables you to set **Fade out** and **Fade in** durations between two adjacent files in the playlist. The fade buttons for adjacent files change to an orange background when you click them.
|
||||
|
||||

|
||||
|
||||
If your web browser supports the Web Audio API, you will see a **Show Waveform** button which enables you to view the waveforms of the adjacent items, adjust the fades and audition them. Click the **Fade Out** or **Fade In** button to change the fade curves by clicking in the waveforms, then click the **Play** button to audition the effect of any adjustment you have made. To audition just one part of the item, use the **Cursor** button to move the play cursor, which appears as a thin red line, on the waveform. The playback progress is shown by an orange colour on the waveform.
|
||||
|
||||

|
||||
|
||||
Each file in the playlist also has a button with two square brackets, which enables you to adjust **Cue In** and **Cue Out** times for that particular file. Like the fade button, the cue button changes to an orange background when you click it.
|
||||
|
||||
**Cue In** and **Cue Out** points are set in hours, minutes, seconds and tenths of a second, relative to the start of the item. If a file has leading or trailing silence, corresponding cue points will be set automatically. The duration of the file in the playlist is updated automatically when you adjust a cue point, but the **Original Length** of the file is also displayed for your reference.
|
||||
|
||||

|
||||
|
||||
If a **Fade In** and **Cue In** are set on the same item in the playlist, the fade in begins at the **Cue In** point. If a **Fade Out** and **Cue Out** are set on the same item, the fade out ends at the **Cue Out** point. If your web browser supports the Web Audio API, you can click the **Show Waveform** button to adjust and audition cue points.
|
||||
|
||||

|
||||
|
||||
When your playlist is complete, click the **New** button in the top left corner to create another playlist, click the close icon (a white cross in a black circle) in the top right corner, or browse to another page of the LibreTime interface.
|
||||
|
||||
If you want to edit the playlist content or metadata later, you can find it by **Title**, **Creator**, **Last Modified** date, **Length**, **Owner** or **Year** using one of the search tools on the Library page. Click the playlist in the search results list, and then click **Edit** from the pop-up menu. You can also **Preview** the entire playlist in a pop-up audition window, **Duplicate** or **Delete** one of your playlists from this menu.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
The Podcasts page allows you add subscriptions to podcasts which are often used to syndicated audio files using a URL called a RSS feed. This allows your LibreTime instance to automatically download new shows from the web.
|
||||
|
||||
In order to add a podcast you need to get the RSS feed. All podcasts available on iTunes have a RSS feed but it is sometimes hidden. See this issue on our github page[#510](https://github.com/LibreTime/libretime/issues/510)for more information.
|
||||
In order to add a podcast you need to get the RSS feed. All podcasts available on iTunes have a RSS feed but it is sometimes hidden. See this issue on our github page [#510](https://github.com/LibreTime/libretime/issues/510) for more information. RSS feeds that do not end in *.xml* may be accepted by LibreTime but might fail to download episodes; in that case, download the episode using a podcast client such as [gpodder](https://gpodder.github.io/) and then manually upload and schedule the episode. Podcast feeds coming from Anchor.fm have been known to have this issue.
|
||||
|
||||
The podcast interfaces provides you with the ability generate [Smartblocks](../smartblocks) that can be used in conjunction with [Autoloading Playlists](../calendar/#autoloading-playlist) to schedule the newest episode of a podcast without human intervention.
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@ The recommended LibreTime server platform is Ubuntu 16.04 LTS (Xenial Xerus).
|
|||
|
||||
The server should have at least a 1GHz processor and 1GB of RAM, preferably 2GB
|
||||
RAM or more. If you are using a desktop environment and web browser directly on
|
||||
the server you should install at least 2GB RAM, to avoid swapping to disk.
|
||||
the server you should install at least 2GB RAM to avoid swapping to disk.
|
||||
|
||||
The LibreTime installation does not use much disk space, but you should allow
|
||||
plenty of storage capacity for the LibreTime library. A hot-swap RAID array is
|
||||
recommended for media storage, in case of disk failure. You should also consider
|
||||
recommended for media storage to mitigate the effects of disk failure. You should also consider
|
||||
a UPS or other battery-powered system to offer some protection against
|
||||
short-term power failures.
|
||||
|
||||
|
@ -34,7 +34,7 @@ Setting up a local firewall is done differently on all the supported distros.
|
|||
* [Ubuntu](https://help.ubuntu.com/lts/serverguide/firewall.html)
|
||||
* [FirewallD](http://www.firewalld.org/) (CentOS)
|
||||
|
||||
There is a vast amount of ways to configure your network, firewall included.
|
||||
There are a vast amount of ways to configure your network, firewall included.
|
||||
Choose the way that best fits your deploy and dont internal expose parts of your
|
||||
LibreTime install on the network.
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
Creating a smart block
|
||||
----------------------
|
||||
|
||||
Smart blocks are automatically filled with media files from the LibreTime library, according to the criteria that you specify. This feature is intended to save staff time, compared to selecting items for a playlist manually.
|
||||
Smart blocks are automatically filled with media files from the LibreTime library, according to the criteria that you specify. This feature is intended to save staff time, compared to selecting items for a playlist manually, and can be used to schedule shows that operate in a consistent format.
|
||||
|
||||
To create a smart block, click the **New** button on the right side of the Library page, and select **New Smart Block** from the pop-up menu. Like a playlist, smart blocks can have a title and **Description**, which you can edit. This helps you find relevant smart blocks in searches.
|
||||
To create a smart block, click the **Smartblocks** button on the left sidebar, and select **New** from the toolbar. Like a playlist, smart blocks can have a title and description, which you can edit. This helps you find relevant smart blocks in searches.
|
||||
|
||||

|
||||
|
||||
|
@ -30,7 +30,7 @@ By default, a smart block will not contain repeated items, which will limit the
|
|||
|
||||
In addition Smart Blocks by default will never overflow the Time Limit. For instance if you set a time limit of 1 hour. It will add tracks to the schedule until it can't add any more tracks without exceeding the hour. This is to prevent tracks from being cut-off because they exceed the time limit of a show.
|
||||
|
||||
If you want a smartblock to schedule tracks until it is longer than the Time Limit you can check "Allow last track to exceed time limit". This will make LibreTime add tracks that meet the criteria until it equals or is longer than the time limit. The was the default behaviour with the LibreTime software.
|
||||
If you want a smartblock to schedule tracks until it is longer than the Time Limit you can check "Allow last track to exceed time limit". This will make LibreTime add tracks that meet the criteria until it equals or is longer than the time limit. This is helpful for avoiding dead air on shows that are being autoscheduled.
|
||||
|
||||
If you have a large number of files which meet the criteria that you specify, you may wish to limit the duration of the smart block using the **Limit to** field, so that it fits within the show you have in mind. Select **hours**, **minutes** or **items** from the drop-down menu, and click the **Generate** button again, if it is a static smart block. Then click the **Save** button.
|
||||
|
||||
|
@ -38,5 +38,4 @@ Smart blocks can be added to shows in the same way as a manually created playlis
|
|||
|
||||

|
||||
|
||||
Once created, smart blocks can be found in Library searches and refined at any time. They can be re-opened by clicking on the smart block and selecting **Edit** from the pop-up menu.
|
||||
|
||||
Once created, smart blocks can be found under the Smartblocks tab and refined at any time. They can be re-opened by right-clicking on the smart block and selecting **Edit** from the pop-up menu.
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
*Note* LibreTime installed via the install script does not currently change the default Icecast password and is insecure without intervention by the system admin. There is a [tutorial](https://github.com/LibreTime/libretime/wiki/Securing-icecast-and-customizing-stream-settings) on our wiki that walks you through the steps of how to fix this and an open issue [#86](https://github.com/LibreTime/libretime/issues/86) to track resolution of this.
|
||||
|
||||
|
||||
Global settings
|
||||
------------------------
|
||||
|
||||
You can configure direct Icecast and SHOUTcast streams and sound card output by clicking **Streams** on the **System** menu.
|
||||
|
||||
At the top left of the **Stream Settings** page are global settings including **Hardware Audio Output**, which enables playout from the default sound card on the server, if one is fitted. The default **Output Type** of *ALSA* on the drop-down menu will be suitable for most servers with a sound card. If not, you have the option to choose from other Liquidsoap interfaces available, such as *OSS* or *PortAudio*.
|
||||
|
|
|
@ -9,8 +9,9 @@ Some web browsers may set an upload limit for a single file, between 200MB and
|
|||
2GB. In addition the default LibreTime webserver configuration limits file size
|
||||
to 500M. If you need to upload files larger than 500MB to the LibreTime server
|
||||
on a regular basis, you will need to have your admin update the configuration at
|
||||
`/etc/apache2/sites-available/airtime.conf `. Airtime previously supported
|
||||
import via SFTP but this functionality is still under development for LibreTime.
|
||||
`/etc/apache2/sites-available/airtime.conf` (see [here](../host-configuration/index.md)).
|
||||
Airtime previously supported import via SFTP but this functionality is still under
|
||||
development for LibreTime.
|
||||
|
||||

|
||||
|
||||
|
|
|
@ -8,3 +8,5 @@ To add a web stream, click the **New** button on the right side of the Library p
|
|||

|
||||
|
||||
The **Stream URL** setting must include the *port number* (such as 8000) and *mount point* (such as remote\_stream) of the remote stream, in addition to the streaming server name. A **Default Length** for the remote stream can also be set. If the stream is added at the end of a show which becomes overbooked as a result, it will be faded out when the show ends.
|
||||
|
||||
Note: LibreTime checks the remote webstream's status upon editing stream settings, so an offline stream will result in an error. There are many tools such as [BUTT](https://danielnoethen.de/butt/) and [MIXXX](https://www.mixxx.org) that can be used to send a test stream to LibreTime can save it; read more [here](../live-shows-with-mixxx/index.md).
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
notifempty
|
||||
sharedscripts
|
||||
postrotate
|
||||
start-stop-daemon --stop --signal USR1 --quiet --pidfile /var/run/airtime/airtime-liquidsoap.pid
|
||||
systemctl kill --signal=SIGUSR1 airtime-liquidsoap >/dev/null 2>&1 || true
|
||||
endscript
|
||||
}
|
||||
|
|
|
@ -234,9 +234,9 @@ class TelnetLiquidsoap:
|
|||
self.logger.debug('Disconnecting source: %s', sourcename)
|
||||
command = ""
|
||||
if(sourcename == "master_dj"):
|
||||
command += "master_harbor.kick\n"
|
||||
command += "master_harbor.stop\n"
|
||||
elif(sourcename == "live_dj"):
|
||||
command += "live_dj_harbor.kick\n"
|
||||
command += "live_dj_harbor.stop\n"
|
||||
|
||||
try:
|
||||
self.telnet_lock.acquire()
|
||||
|
|
Loading…
Reference in New Issue