From 17087fc035c74d2e65b4a1ac1d37d8588c192c2f Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 5 Nov 2012 18:08:47 -0500 Subject: [PATCH 001/208] Added better error message. not much else can be done --- utils/airtime-import/airtime-import.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/airtime-import/airtime-import.py b/utils/airtime-import/airtime-import.py index c77a0f21e..221f644f9 100644 --- a/utils/airtime-import/airtime-import.py +++ b/utils/airtime-import/airtime-import.py @@ -168,6 +168,8 @@ def WatchAddAction(option, opt, value, parser): print "%s added to watched folder list successfully" % path else: print "Adding a watched folder failed: %s" % res['msg']['error'] + print "This error most likely caused by wrong permissions" + print "Try fixing this error by chmodding the parent directory(ies)" else: print "Given path is not a directory: %s" % path From 9fd3b43bb212d34f226b307df6ed381aca5b5ca9 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 23 Jan 2013 16:12:16 -0500 Subject: [PATCH 002/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db Made improvement by accessing db just once to determine if each show instance is full or not --- airtime_mvc/application/models/Show.php | 12 +++----- .../application/models/ShowInstance.php | 28 +++++++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 9db5e5f0b..a675fc637 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1753,7 +1753,9 @@ SQL; $nowEpoch = time(); $content_count = Application_Model_ShowInstance::getContentCount( $p_start, $p_end); + $isFull = Application_Model_ShowInstance::getIsFull($p_start, $p_end); $timezone = date_default_timezone_get(); + $utc = new DateTimeZone("UTC"); foreach ($shows as $show) { $options = array(); @@ -1763,8 +1765,6 @@ SQL; $options["percent"] = Application_Model_Show::getPercentScheduled($show["starts"], $show["ends"], $show["time_filled"]); } - $utc = new DateTimeZone("UTC"); - if (isset($show["parent_starts"])) { $parentStartsDT = new DateTime($show["parent_starts"], $utc); $parentStartsEpoch = intval($parentStartsDT->format("U")); @@ -1795,14 +1795,10 @@ SQL; } } - - $showInstance = new Application_Model_ShowInstance( - $show["instance_id"]); - $options["show_empty"] = (array_key_exists($show['instance_id'], $content_count)) ? 0 : 1; - - $options["show_partial_filled"] = $showInstance->showPartialFilled(); + + $options["show_partial_filled"] = $isFull[$show['instance_id']]; $events[] = &self::makeFullCalendarEvent($show, $options, $startsDT, $endsDT, $startsEpochStr, $endsEpochStr); diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index 14def6321..f1d9d8173 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -661,10 +661,8 @@ SQL; return $returnStr; } - - public static function getContentCount($p_start, $p_end) - { + { $sql = << '00:00:00' -AND time_filled < ends - starts -AND file_id IS null AS partial_filled -FROM cc_show_instances -WHERE id = :instance_id +SELECT id, ends-starts < time_filled as filled +from cc_show_instances +WHERE ends > :p_start::TIMESTAMP +AND starts < :p_end::TIMESTAMP SQL; - $res = Application_Common_Database::prepareAndExecute($sql, - array(':instance_id' => $this->_instanceId), 'all'); + $res = Application_Common_Database::prepareAndExecute($sql, array( + ':p_start' => $p_start->format("Y-m-d G:i:s"), + ':p_end' => $p_end->format("Y-m-d G:i:s")) + , 'all'); - return $res[0]["partial_filled"]; + $isFilled = array(); + foreach ($res as $r) { + $isFilled[$r['id']] = $r['filled']; + } + + return $isFilled; } public function showEmpty() From 9714b44d7f7135b3e28f6fd069b55ccf78658504 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 23 Jan 2013 16:27:26 -0500 Subject: [PATCH 003/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db --- airtime_mvc/application/models/Show.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index a675fc637..20e6e3e23 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1798,7 +1798,7 @@ SQL; $options["show_empty"] = (array_key_exists($show['instance_id'], $content_count)) ? 0 : 1; - $options["show_partial_filled"] = $isFull[$show['instance_id']]; + $options["show_partial_filled"] = !$isFull[$show['instance_id']]; $events[] = &self::makeFullCalendarEvent($show, $options, $startsDT, $endsDT, $startsEpochStr, $endsEpochStr); From adaab6ba9628b2f30329c0a06982477b6f6c182e Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 23 Jan 2013 16:31:20 -0500 Subject: [PATCH 004/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -added a 5 second grace period for checking if shows are partially filled --- airtime_mvc/application/models/ShowInstance.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/ShowInstance.php b/airtime_mvc/application/models/ShowInstance.php index f1d9d8173..e1892d4c2 100644 --- a/airtime_mvc/application/models/ShowInstance.php +++ b/airtime_mvc/application/models/ShowInstance.php @@ -688,7 +688,7 @@ SQL; public static function getIsFull($p_start, $p_end) { $sql = << :p_start::TIMESTAMP AND starts < :p_end::TIMESTAMP From 78f617cacb226da44840b54a674aed18b68f675a Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 23 Jan 2013 17:33:34 -0500 Subject: [PATCH 005/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db - put makeFullCalendarEvent inline with loop - removed unnecessary epoch time conversion --- airtime_mvc/application/models/Show.php | 56 ++++++++++++++++--------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 20e6e3e23..6c0e5a0c8 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1750,12 +1750,13 @@ SQL; $interval = $p_start->diff($p_end); $days = $interval->format('%a'); $shows = Application_Model_Show::getShows($p_start, $p_end); - $nowEpoch = time(); $content_count = Application_Model_ShowInstance::getContentCount( $p_start, $p_end); $isFull = Application_Model_ShowInstance::getIsFull($p_start, $p_end); $timezone = date_default_timezone_get(); + $current_timezone = new DateTimeZone($timezone); $utc = new DateTimeZone("UTC"); + $now = new DateTime("now", $utc); foreach ($shows as $show) { $options = array(); @@ -1767,7 +1768,6 @@ SQL; if (isset($show["parent_starts"])) { $parentStartsDT = new DateTime($show["parent_starts"], $utc); - $parentStartsEpoch = intval($parentStartsDT->format("U")); } $startsDT = DateTime::createFromFormat("Y-m-d G:i:s", @@ -1775,35 +1775,53 @@ SQL; $endsDT = DateTime::createFromFormat("Y-m-d G:i:s", $show["ends"], $utc); - $startsEpochStr = $startsDT->format("U"); - $endsEpochStr = $endsDT->format("U"); - - $startsEpoch = intval($startsEpochStr); - $endsEpoch = intval($endsEpochStr); - - $startsDT->setTimezone(new DateTimeZone($timezone)); - $endsDT->setTimezone(new DateTimeZone($timezone)); - if( $p_editable ) { - if ($show["record"] && $nowEpoch > $startsEpoch) { + if ($show["record"] && $now > $startsDT) { $options["editable"] = false; } elseif ($show["rebroadcast"] && - $nowEpoch > $parentStartsEpoch) { + $now > $parentStartsDT) { $options["editable"] = false; - } elseif ($nowEpoch < $endsEpoch) { + } elseif ($now < $endsDT) { $options["editable"] = true; } } + $startsDT->setTimezone($current_timezone); + $endsDT->setTimezone($current_timezone); + $options["show_empty"] = (array_key_exists($show['instance_id'], $content_count)) ? 0 : 1; $options["show_partial_filled"] = !$isFull[$show['instance_id']]; - $events[] = &self::makeFullCalendarEvent($show, $options, - $startsDT, $endsDT, $startsEpochStr, $endsEpochStr); - } + $event = array(); + $event["id"] = intval($show["instance_id"]); + $event["title"] = $show["name"]; + $event["start"] = $startsDT->format("Y-m-d H:i:s"); + $event["end"] = $endsDT->format("Y-m-d H:i:s"); + $event["allDay"] = false; + $event["showId"] = intval($show["show_id"]); + $event["record"] = intval($show["record"]); + $event["rebroadcast"] = intval($show["rebroadcast"]); + $event["soundcloud_id"] = is_null($show["soundcloud_id"]) + ? -1 : $show["soundcloud_id"]; + + //event colouring + if ($show["color"] != "") { + $event["textColor"] = "#".$show["color"]; + } + + if ($show["background_color"] != "") { + $event["color"] = "#".$show["background_color"]; + } + + foreach ($options as $key => $value) { + $event[$key] = $value; + } + + $events[] = $event; + } return $events; } @@ -1820,7 +1838,7 @@ SQL; return $percent; } - private static function &makeFullCalendarEvent(&$show, $options=array(), $startDateTime, $endDateTime, $startsEpoch, $endsEpoch) +/* private static function &makeFullCalendarEvent(&$show, $options=array(), $startDateTime, $endDateTime, $startsEpoch, $endsEpoch) { $event = array(); @@ -1851,7 +1869,7 @@ SQL; } return $event; - } + }*/ /* Takes in a UTC DateTime object. * Converts this to local time, since cc_show days From 548b73db429109d8a25dfb49de274ecc0585d8a8 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 23 Jan 2013 18:31:45 -0500 Subject: [PATCH 006/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -remove an unnecessary roundtrip to server --- .../application/controllers/ScheduleController.php | 10 +++++++++- airtime_mvc/public/js/airtime/schedule/add-show.js | 4 ++-- airtime_mvc/public/js/airtime/schedule/schedule.js | 5 +++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 15dca0621..3348cbbe5 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -96,7 +96,15 @@ class ScheduleController extends Zend_Controller_Action $this->view->preloadShowForm = true; } - $this->view->headScript()->appendScript("var weekStart = ".Application_Model_Preference::GetWeekStartDay().";"); + $this->view->headScript()->appendScript( + "var calendarPref = {};\n". + "calendarPref.weekStart = ".Application_Model_Preference::GetWeekStartDay().";\n". + "calendarPref.timestamp = ".time().";\n". + "calendarPref.timezoneOffset = ".date("Z").";\n". + "calendarPref.timeScale = '".Application_Model_Preference::GetCalendarTimeScale()."';\n". + "calendarPref.timeInterval = ".Application_Model_Preference::GetCalendarTimeInterval().";\n". + "calendarPref.weekStartDay = ".Application_Model_Preference::GetWeekStartDay().";\n" + ); } public function eventFeedAction() diff --git a/airtime_mvc/public/js/airtime/schedule/add-show.js b/airtime_mvc/public/js/airtime/schedule/add-show.js index 2242f3c66..4f33ccdc7 100644 --- a/airtime_mvc/public/js/airtime/schedule/add-show.js +++ b/airtime_mvc/public/js/airtime/schedule/add-show.js @@ -37,7 +37,7 @@ function createDateInput(el, onSelect) { dayNamesMin: i18n_days_short, closeText: $.i18n._('Close'), //showButtonPanel: true, - firstDay: weekStart + firstDay: calendarPref.weekStart }); } @@ -324,7 +324,7 @@ function setAddShowEvents() { dayNamesMin: i18n_days_short, closeText: 'Close', showButtonPanel: true, - firstDay: weekStart + firstDay: calendarPref.weekStart }); form.find('input[name^="add_show_rebroadcast_time"]').timepicker({ amPmText: ['', ''], diff --git a/airtime_mvc/public/js/airtime/schedule/schedule.js b/airtime_mvc/public/js/airtime/schedule/schedule.js index 2de53cdb5..beb1381cd 100644 --- a/airtime_mvc/public/js/airtime/schedule/schedule.js +++ b/airtime_mvc/public/js/airtime/schedule/schedule.js @@ -328,8 +328,9 @@ function alertShowErrorAndReload(){ } $(document).ready(function() { - $.ajax({ url: baseUrl+"Api/calendar-init/format/json", dataType:"json", success:createFullCalendar - , error:function(jqXHR, textStatus, errorThrown){}}); + var data = {}; + data.calendarInit = calendarPref; + createFullCalendar(data); setInterval(checkCalendarSCUploadStatus, 5000); From 1e336fa2d708ee95603d14ab6418e4ebea4744c0 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 24 Jan 2013 12:00:31 -0500 Subject: [PATCH 007/208] CC-4875: use a reference when iterating over show events --- airtime_mvc/application/models/Show.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 6c0e5a0c8..c30ba717e 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -1758,7 +1758,7 @@ SQL; $utc = new DateTimeZone("UTC"); $now = new DateTime("now", $utc); - foreach ($shows as $show) { + foreach ($shows as &$show) { $options = array(); //only bother calculating percent for week or day view. From 091f5ff49f680b58ba204b1e5ea1a50014ea6128 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 24 Jan 2013 12:13:55 -0500 Subject: [PATCH 008/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -we know what month will be the initial view for the user. -Provide this data ahead of time. --- .../controllers/ScheduleController.php | 19 +++++++++++- airtime_mvc/application/models/Show.php | 14 +++++++++ .../schedule/full-calendar-functions.js | 29 ++++++++++++------- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 3348cbbe5..49f4ff723 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -96,6 +96,22 @@ class ScheduleController extends Zend_Controller_Action $this->view->preloadShowForm = true; } + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { + $editable = true; + } else { + $editable = false; + } + + $calendar_interval = Application_Model_Preference::GetCalendarTimeInterval(); + if ($calendar_interval == "agendaDay") { + } else if ($calendar_interval == "agendaWeek") { + } else if ($calendar_interval == "month") { + } + list($start, $end) = Application_Model_Show::getStartEndCurrentMonthView(); + $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); + $this->view->headScript()->appendScript( "var calendarPref = {};\n". "calendarPref.weekStart = ".Application_Model_Preference::GetWeekStartDay().";\n". @@ -103,7 +119,8 @@ class ScheduleController extends Zend_Controller_Action "calendarPref.timezoneOffset = ".date("Z").";\n". "calendarPref.timeScale = '".Application_Model_Preference::GetCalendarTimeScale()."';\n". "calendarPref.timeInterval = ".Application_Model_Preference::GetCalendarTimeInterval().";\n". - "calendarPref.weekStartDay = ".Application_Model_Preference::GetWeekStartDay().";\n" + "calendarPref.weekStartDay = ".Application_Model_Preference::GetWeekStartDay().";\n". + "var calendarEvents = ".json_encode($events).";" ); } diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 6c0e5a0c8..7422cc1ae 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -2176,4 +2176,18 @@ SQL; } return $assocArray; } + + public static function getStartEndCurrentMonthView() { + $first_day_of_calendar_month_view = mktime(0, 0, 0, date("n"), 1); + $weekStart = Application_Model_Preference::GetWeekStartDay(); + while (date('w', $first_day_of_calendar_month_view) != $weekStart) { + $first_day_of_calendar_month_view -= 60*60*24; + } + $last_day_of_calendar_view = $first_day_of_calendar_month_view + 3600*24*41; + + $start = new DateTime("@".$first_day_of_calendar_month_view); + $end = new DateTime("@".$last_day_of_calendar_view); + + return array($start, $end); + } } diff --git a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js index 08dd31116..51cc4106a 100644 --- a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js +++ b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js @@ -326,19 +326,26 @@ function eventResize( event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, vie }); } +var initialLoad = true; function getFullCalendarEvents(start, end, callback) { - var url, start_date, end_date; - - start_date = makeTimeStamp(start); - end_date = makeTimeStamp(end); - - url = baseUrl+'Schedule/event-feed'; - - var d = new Date(); - $.post(url, {format: "json", start: start_date, end: end_date, cachep: d.getTime()}, function(json){ - callback(json.events); - }); + if (initialLoad) { + initialLoad = false; + callback(calendarEvents); + } else { + var url, start_date, end_date; + + start_date = makeTimeStamp(start); + end_date = makeTimeStamp(end); + url = baseUrl+'Schedule/event-feed'; + + var d = new Date(); + $.post(url, {format: "json", start: start_date, end: end_date, cachep: d.getTime()}, function(json){ + callback(json.events); + }); + } + //TODO: Look at the type of calendar view...we may be returning too much information + } function checkSCUploadStatus(){ From 2f3a30b580620c12a47bbcbc57adb541caf07352 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 24 Jan 2013 12:52:24 -0500 Subject: [PATCH 009/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -we know what month will be the initial view for the user. -Provide this data ahead of time via ajax request --- .../controllers/ScheduleController.php | 45 +++++++++---------- .../schedule/full-calendar-functions.js | 11 +++++ .../public/js/airtime/schedule/schedule.js | 4 -- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 49f4ff723..cd48ccb13 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -9,6 +9,7 @@ class ScheduleController extends Zend_Controller_Action { $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->addActionContext('event-feed', 'json') + ->addActionContext('event-feed-preload', 'json') ->addActionContext('make-context-menu', 'json') ->addActionContext('add-show-dialog', 'json') ->addActionContext('add-show', 'json') @@ -88,30 +89,13 @@ class ScheduleController extends Zend_Controller_Action $this->view->headLink()->appendStylesheet($baseUrl.'css/showbuilder.css?'.$CC_CONFIG['airtime_version']); //End Show builder JS/CSS requirements + Application_Model_Schedule::createNewFormSections($this->view); - $user = Application_Model_User::getCurrentUser(); - if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { $this->view->preloadShowForm = true; } - $userInfo = Zend_Auth::getInstance()->getStorage()->read(); - $user = new Application_Model_User($userInfo->id); - if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { - $editable = true; - } else { - $editable = false; - } - - $calendar_interval = Application_Model_Preference::GetCalendarTimeInterval(); - if ($calendar_interval == "agendaDay") { - } else if ($calendar_interval == "agendaWeek") { - } else if ($calendar_interval == "month") { - } - list($start, $end) = Application_Model_Show::getStartEndCurrentMonthView(); - $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); - $this->view->headScript()->appendScript( "var calendarPref = {};\n". "calendarPref.weekStart = ".Application_Model_Preference::GetWeekStartDay().";\n". @@ -120,7 +104,7 @@ class ScheduleController extends Zend_Controller_Action "calendarPref.timeScale = '".Application_Model_Preference::GetCalendarTimeScale()."';\n". "calendarPref.timeInterval = ".Application_Model_Preference::GetCalendarTimeInterval().";\n". "calendarPref.weekStartDay = ".Application_Model_Preference::GetWeekStartDay().";\n". - "var calendarEvents = ".json_encode($events).";" + "var calendarEvents = null;" ); } @@ -133,16 +117,29 @@ class ScheduleController extends Zend_Controller_Action $userInfo = Zend_Auth::getInstance()->getStorage()->read(); $user = new Application_Model_User($userInfo->id); - if ($user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER))) { - $editable = true; - } else { - $editable = false; - } + $editable = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); $this->view->events = $events; } + public function eventFeedPreloadAction() + { + $userInfo = Zend_Auth::getInstance()->getStorage()->read(); + $user = new Application_Model_User($userInfo->id); + $editable = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + + $calendar_interval = Application_Model_Preference::GetCalendarTimeInterval(); + if ($calendar_interval == "agendaDay") { + } else if ($calendar_interval == "agendaWeek") { + } else if ($calendar_interval == "month") { + } + list($start, $end) = Application_Model_Show::getStartEndCurrentMonthView(); + $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); + + $this->view->events = $events; + } + public function getCurrentShowAction() { $currentShow = Application_Model_Show::getCurrentShow(); diff --git a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js index 51cc4106a..2590bf29d 100644 --- a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js +++ b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js @@ -326,6 +326,17 @@ function eventResize( event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, vie }); } +function preload () { + var url = baseUrl+'Schedule/event-feed-preload'; + var d = new Date(); + + $.post(url, {format: "json", cachep: d.getTime()}, function(json){ + calendarEvents = json.events; + createFullCalendar({calendarInit: calendarPref}); + }); +} +preload(); + var initialLoad = true; function getFullCalendarEvents(start, end, callback) { diff --git a/airtime_mvc/public/js/airtime/schedule/schedule.js b/airtime_mvc/public/js/airtime/schedule/schedule.js index beb1381cd..3c4f9fd3b 100644 --- a/airtime_mvc/public/js/airtime/schedule/schedule.js +++ b/airtime_mvc/public/js/airtime/schedule/schedule.js @@ -328,10 +328,6 @@ function alertShowErrorAndReload(){ } $(document).ready(function() { - var data = {}; - data.calendarInit = calendarPref; - createFullCalendar(data); - setInterval(checkCalendarSCUploadStatus, 5000); $.contextMenu({ From c3f2bf57dee93c2480b4c2f6a5aed72fff3fc463 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 24 Jan 2013 14:02:50 -0500 Subject: [PATCH 010/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -further optimization by looking at the preferred time scale --- .../controllers/ScheduleController.php | 11 +++++--- airtime_mvc/application/models/Show.php | 26 ++++++++++++++++++- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index cd48ccb13..0b384911e 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -129,14 +129,19 @@ class ScheduleController extends Zend_Controller_Action $user = new Application_Model_User($userInfo->id); $editable = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); - $calendar_interval = Application_Model_Preference::GetCalendarTimeInterval(); + $calendar_interval = Application_Model_Preference::GetCalendarTimeScale(); + Logging::info($calendar_interval); if ($calendar_interval == "agendaDay") { + list($start, $end) = Application_Model_Show::getStartEndCurrentDayView(); } else if ($calendar_interval == "agendaWeek") { + list($start, $end) = Application_Model_Show::getStartEndCurrentWeekView(); } else if ($calendar_interval == "month") { + list($start, $end) = Application_Model_Show::getStartEndCurrentMonthView(); + } else { + Logging::error("Invalid Calendar Interval '$calendar_interval'"); } - list($start, $end) = Application_Model_Show::getStartEndCurrentMonthView(); - $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); + $events = &Application_Model_Show::getFullCalendarEvents($start, $end, $editable); $this->view->events = $events; } diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 2d66d5443..933c2c841 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -2183,11 +2183,35 @@ SQL; while (date('w', $first_day_of_calendar_month_view) != $weekStart) { $first_day_of_calendar_month_view -= 60*60*24; } - $last_day_of_calendar_view = $first_day_of_calendar_month_view + 3600*24*41; + $last_day_of_calendar_view = $first_day_of_calendar_month_view + 3600*24*42; $start = new DateTime("@".$first_day_of_calendar_month_view); $end = new DateTime("@".$last_day_of_calendar_view); return array($start, $end); } + + public static function getStartEndCurrentWeekView() { + $first_day_of_calendar_week_view = mktime(0, 0, 0, date("n"), date("j")); + $weekStart = Application_Model_Preference::GetWeekStartDay(); + while (date('w', $first_day_of_calendar_week_view) != $weekStart) { + $first_day_of_calendar_week_view -= 60*60*24; + } + $last_day_of_calendar_view = $first_day_of_calendar_week_view + 3600*24*7; + + $start = new DateTime("@".$first_day_of_calendar_week_view); + $end = new DateTime("@".$last_day_of_calendar_view); + + return array($start, $end); + } + + public static function getStartEndCurrentDayView() { + $today = mktime(0, 0, 0, date("n"), date("j")); + $tomorrow = $today + 3600*24; + + $start = new DateTime("@".$today); + $end = new DateTime("@".$tomorrow); + + return array($start, $end); + } } From 56c61d4ab70286b6d96068659973ce6168bfc9f1 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 24 Jan 2013 14:09:14 -0500 Subject: [PATCH 011/208] CC-4873: Airtime takes 7 seconds to load 32K (very small) from db -minor cleanup of function init --- .../public/js/airtime/schedule/full-calendar-functions.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js index 2590bf29d..810ce0d88 100644 --- a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js +++ b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js @@ -326,7 +326,7 @@ function eventResize( event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, vie }); } -function preload () { +function preloadEventFeed () { var url = baseUrl+'Schedule/event-feed-preload'; var d = new Date(); @@ -335,7 +335,6 @@ function preload () { createFullCalendar({calendarInit: calendarPref}); }); } -preload(); var initialLoad = true; function getFullCalendarEvents(start, end, callback) { @@ -355,8 +354,6 @@ function getFullCalendarEvents(start, end, callback) { callback(json.events); }); } - //TODO: Look at the type of calendar view...we may be returning too much information - } function checkSCUploadStatus(){ @@ -559,6 +556,7 @@ function alertShowErrorAndReload(){ window.location.reload(); } +preloadEventFeed(); $(document).ready(function(){ setInterval( "checkSCUploadStatus()", 5000 ); setInterval( "getCurrentShow()", 5000 ); From 1873022a132fd66c8cee530ea3a17fb02f91dd6d Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 25 Jan 2013 11:21:34 -0500 Subject: [PATCH 012/208] CC-4876: Default interface language setting does not appear to affect text or drop-down menu on login page? -fixed --- airtime_mvc/application/controllers/LocaleController.php | 6 +----- airtime_mvc/application/controllers/plugins/Acl_plugin.php | 2 +- airtime_mvc/public/js/airtime/login/login.js | 2 +- airtime_mvc/public/js/airtime/preferences/preferences.js | 1 + 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/application/controllers/LocaleController.php b/airtime_mvc/application/controllers/LocaleController.php index d689417be..efdecff80 100644 --- a/airtime_mvc/application/controllers/LocaleController.php +++ b/airtime_mvc/application/controllers/LocaleController.php @@ -4,10 +4,6 @@ class LocaleController extends Zend_Controller_Action { public function init() { - $ajaxContext = $this->_helper->getHelper("AjaxContext"); - $ajaxContext->addActionContext("general-translation-table", "json") - ->addActionContext("datatables-translation-table", "json") - ->initContext(); } public function datatablesTranslationTableAction() @@ -26,7 +22,7 @@ class LocaleController extends Zend_Controller_Action $locale.".txt") ); } - + public function generalTranslationTableAction() { $translations = array ( diff --git a/airtime_mvc/application/controllers/plugins/Acl_plugin.php b/airtime_mvc/application/controllers/plugins/Acl_plugin.php index 4cadba9db..44555e533 100644 --- a/airtime_mvc/application/controllers/plugins/Acl_plugin.php +++ b/airtime_mvc/application/controllers/plugins/Acl_plugin.php @@ -110,7 +110,7 @@ class Zend_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract { $controller = strtolower($request->getControllerName()); - if (in_array($controller, array("api", "auth"))) { + if (in_array($controller, array("api", "auth", "locale"))) { $this->setRoleName("G"); } elseif (!Zend_Auth::getInstance()->hasIdentity()) { diff --git a/airtime_mvc/public/js/airtime/login/login.js b/airtime_mvc/public/js/airtime/login/login.js index a37210b35..f21043c31 100644 --- a/airtime_mvc/public/js/airtime/login/login.js +++ b/airtime_mvc/public/js/airtime/login/login.js @@ -1,6 +1,6 @@ $(window).load(function(){ $("#username").focus(); - $("#locale").val($.cookie("airtime_locale")!== null?$.cookie("airtime_locale"):'en_CA'); + $("#locale").val($.cookie("airtime_locale")!== null?$.cookie("airtime_locale"):$.cookie("default_airtime_locale")); }); $(document).ready(function() { diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index 1d529617d..eec5e1c7e 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -111,6 +111,7 @@ $(document).ready(function() { $.post(url, {format: "json", data: data}, function(data){ var json = $.parseJSON(data); $('#content').empty().append(json.html); + $.cookie("default_airtime_locale", $('#locale').val(), {path: '/'}); setTimeout(removeSuccessMsg, 5000); showErrorSections(); }); From 7b3850fac6c6322b8b9b40efa63199ac76b6f257 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 11:30:36 -0500 Subject: [PATCH 013/208] false not being returned on connection error --- python_apps/api_clients/api_client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 048da729c..517870e45 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -168,9 +168,9 @@ class AirtimeApiClient(object): def get_schedule(self): # TODO : properly refactor this routine - # For now thre return type is a little fucked for compatibility reasons + # For now the return type is a little fucked for compatibility reasons try: return (True, self.services.export_url()) - except: (False, "") + except: return (False, None) def notify_liquidsoap_started(self): return self.services.notify_liquidsoap_started() @@ -356,7 +356,7 @@ class AirtimeApiClient(object): """ #http://localhost/api/get-files-without-replay-gain/dir_id/1 return self.services.get_files_without_replay_gain(dir_id=dir_id) - + def get_files_without_silan_value(self): """ Download a list of files that need to have their cue in/out value @@ -372,7 +372,7 @@ class AirtimeApiClient(object): """ self.logger.debug(self.services.update_replay_gain_value( _post_data={'data': json.dumps(pairs)})) - + def update_cue_values_by_silan(self, pairs): """ 'pairs' is a list of pairs in (x, y), where x is the file's database From 0cf8526f87df1d9b3d2dc0b98d559ae233cee1b9 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 25 Jan 2013 11:51:56 -0500 Subject: [PATCH 014/208] CC-4878"Send support feedback" button at initial login tries to load "http://showbuilder" and was missing the local host IP. -fixed --- airtime_mvc/application/forms/RegisterAirtime.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/forms/RegisterAirtime.php b/airtime_mvc/application/forms/RegisterAirtime.php index d1557612a..2da7083c8 100644 --- a/airtime_mvc/application/forms/RegisterAirtime.php +++ b/airtime_mvc/application/forms/RegisterAirtime.php @@ -7,7 +7,7 @@ class Application_Form_RegisterAirtime extends Zend_Form public function init() { - $this->setAction(Application_Common_OsPath::getBaseDir().'/Showbuilder'); + $this->setAction(Application_Common_OsPath::getBaseDir().'Showbuilder'); $this->setMethod('post'); $country_list = Application_Model_Preference::GetCountryList(); From 21a04803e576fa5dc746dc635c239636a911aff5 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 12:11:50 -0500 Subject: [PATCH 015/208] Fix Pypo giving up too early on attempting to receive schedule --- python_apps/pypo/pypofetch.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index ec3ef11ce..b690ace04 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -217,7 +217,7 @@ class PypoFetch(Thread): self.set_bootstrap_variables() #get the most up to date schedule, which will #initiate the process #of making sure Liquidsoap is playing the schedule - self.manual_schedule_fetch() + self.persistent_manual_schedule_fetch(max_attempts=5) except Exception, e: self.logger.error(str(e)) @@ -488,10 +488,20 @@ class PypoFetch(Thread): self.process_schedule(self.schedule_data) return success + def persistent_manual_schedule_fetch(self, max_attempts=1): + success = False + num_attempts = 0 + while not success and num_attempts < max_attempts: + success = self.manual_schedule_fetch() + num_attempts += 1 + + return success + + def main(self): # Bootstrap: since we are just starting up, we need to grab the # most recent schedule. After that we can just wait for updates. - success = self.manual_schedule_fetch() + success = self.persistent_manual_schedule_fetch(max_attempts=5) if success: self.logger.info("Bootstrap schedule received: %s", self.schedule_data) self.set_bootstrap_variables() @@ -519,7 +529,7 @@ class PypoFetch(Thread): self.handle_message(message) except Empty, e: self.logger.info("Queue timeout. Fetching schedule manually") - self.manual_schedule_fetch() + self.persistent_manual_schedule_fetch(max_attempts=5) except Exception, e: import traceback top = traceback.format_exc() From a16e8d05aac5dc1d1b6890e0c74622d621f10692 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 12:33:27 -0500 Subject: [PATCH 016/208] -don't push new schedule until end of request --- airtime_mvc/application/controllers/PreferenceController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 269215783..00b0fa6ca 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -273,7 +273,7 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetEnableReplayGain($values["enableReplayGain"]); Application_Model_Preference::setReplayGainModifier($values["replayGainModifier"]); $md = array('schedule' => Application_Model_Schedule::getSchedule()); - Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md); + Application_Model_RabbitMq::PushSchedule(); } if (!Application_Model_Preference::GetMasterDjConnectionUrlOverride()) { From a6f4805e1a3f9378a780baac67b79a6cb1ae36a9 Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 25 Jan 2013 12:44:20 -0500 Subject: [PATCH 017/208] CC-4879: Pop-up HTML Audio Player still seems to be changing spaces to %20 and so on... -fixed --- .../application/controllers/AudiopreviewController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index e094a7450..302e8c545 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -60,8 +60,10 @@ class AudiopreviewController extends Zend_Controller_Action $this->view->uri = $uri; $this->view->mime = $mime; $this->view->audioFileID = $audioFileID; - $this->view->audioFileArtist = $audioFileArtist; - $this->view->audioFileTitle = $audioFileTitle; + // We need to decode artist and title because it gets + // encoded twice in js + $this->view->audioFileArtist = urldecode($audioFileArtist); + $this->view->audioFileTitle = urldecode($audioFileTitle); $this->view->type = $type; $this->_helper->viewRenderer->setRender('audio-preview'); From 8dd7ffee8c93474b6fbd89b53e18d89fb99c4cb9 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 14:16:53 -0500 Subject: [PATCH 018/208] locks should occur inside try/catch --- python_apps/pypo/pypofetch.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index b690ace04..1448c65da 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -132,8 +132,8 @@ class PypoFetch(Thread): elif(sourcename == "live_dj"): command += "live_dj_harbor.kick\n" - lock.acquire() try: + lock.acquire() tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn.write(command) tn.write('exit\n') @@ -159,8 +159,9 @@ class PypoFetch(Thread): else: command += "stop\n" - lock.acquire() try: + lock.acquire() + tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn.write(command) tn.write('exit\n') @@ -179,7 +180,6 @@ class PypoFetch(Thread): info = self.api_client.get_bootstrap_info() if info is None: self.logger.error('Unable to get bootstrap info.. Exiting pypo...') - sys.exit(1) else: self.logger.debug('info:%s', info) for k, v in info['switch_status'].iteritems(): @@ -190,8 +190,8 @@ class PypoFetch(Thread): def restart_liquidsoap(self): - self.telnet_lock.acquire() try: + self.telnet_lock.acquire() self.logger.info("Restarting Liquidsoap") subprocess.call('/etc/init.d/airtime-liquidsoap restart', shell=True) @@ -322,8 +322,8 @@ class PypoFetch(Thread): This function updates the bootup time variable in Liquidsoap script """ - self.telnet_lock.acquire() try: + self.telnet_lock.acquire() tn = telnetlib.Telnet(LS_HOST, LS_PORT) # update the boot up time of Liquidsoap. Since Liquidsoap is not restarting, # we are manually adjusting the bootup time variable so the status msg will get @@ -395,8 +395,8 @@ class PypoFetch(Thread): self.logger.info(LS_HOST) self.logger.info(LS_PORT) - self.telnet_lock.acquire() try: + self.telnet_lock.acquire() tn = telnetlib.Telnet(LS_HOST, LS_PORT) command = ('vars.station_name %s\n' % station_name).encode('utf-8') self.logger.info(command) From 807aa6b4a683a2ba9c55a645d4460c1214e7aecc Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 15:14:40 -0500 Subject: [PATCH 019/208] fix restart liquidsoap being sent as default no arguments for pypo-notify --- python_apps/pypo/pyponotify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/pypo/pyponotify.py b/python_apps/pypo/pyponotify.py index 9c2f1688c..797d1ce9b 100644 --- a/python_apps/pypo/pyponotify.py +++ b/python_apps/pypo/pyponotify.py @@ -43,7 +43,7 @@ parser.add_option("-t", "--time", help="Liquidsoap boot up time", action="store" parser.add_option("-x", "--source-name", help="source connection name", metavar="source_name") parser.add_option("-y", "--source-status", help="source connection status", metavar="source_status") parser.add_option("-w", "--webstream", help="JSON metadata associated with webstream", metavar="json_data") -parser.add_option("-n", "--liquidsoap-started", help="notify liquidsoap started", metavar="json_data", action="store_true", default=True) +parser.add_option("-n", "--liquidsoap-started", help="notify liquidsoap started", metavar="json_data", action="store_true", default=False) # parse options From 2ef8604c31d149bc609e63b85d263ea0df6a09fe Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 25 Jan 2013 16:23:12 -0500 Subject: [PATCH 020/208] remove unnecessary code --- .../application/models/Systemstatus.php | 37 ++++++------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/airtime_mvc/application/models/Systemstatus.php b/airtime_mvc/application/models/Systemstatus.php index ef694ccf2..6f6a05fff 100644 --- a/airtime_mvc/application/models/Systemstatus.php +++ b/airtime_mvc/application/models/Systemstatus.php @@ -214,35 +214,22 @@ class Application_Model_Systemstatus { $partions = array(); - if (isset($_SERVER['AIRTIME_SRV'])) { - //connect to DB and find how much total space user has allocated. - $totalSpace = Application_Model_Preference::GetDiskQuota(); + /* First lets get all the watched directories. Then we can group them + * into the same partitions by comparing the partition sizes. */ + $musicDirs = Application_Model_MusicDir::getWatchedDirs(); + $musicDirs[] = Application_Model_MusicDir::getStorDir(); - $storPath = Application_Model_MusicDir::getStorDir()->getDirectory(); + foreach ($musicDirs as $md) { + $totalSpace = disk_total_space($md->getDirectory()); - list($usedSpace,) = preg_split("/[\s]+/", exec("du -bs $storPath")); + if (!isset($partitions[$totalSpace])) { + $partitions[$totalSpace] = new StdClass; + $partitions[$totalSpace]->totalSpace = $totalSpace; + $partitions[$totalSpace]->totalFreeSpace = disk_free_space($md->getDirectory()); - $partitions[$totalSpace]->totalSpace = $totalSpace; - $partitions[$totalSpace]->totalFreeSpace = $totalSpace - $usedSpace; - Logging::info($partitions[$totalSpace]->totalFreeSpace); - } else { - /* First lets get all the watched directories. Then we can group them - * into the same partitions by comparing the partition sizes. */ - $musicDirs = Application_Model_MusicDir::getWatchedDirs(); - $musicDirs[] = Application_Model_MusicDir::getStorDir(); - - foreach ($musicDirs as $md) { - $totalSpace = disk_total_space($md->getDirectory()); - - if (!isset($partitions[$totalSpace])) { - $partitions[$totalSpace] = new StdClass; - $partitions[$totalSpace]->totalSpace = $totalSpace; - $partitions[$totalSpace]->totalFreeSpace = disk_free_space($md->getDirectory()); - - } - - $partitions[$totalSpace]->dirs[] = $md->getDirectory(); } + + $partitions[$totalSpace]->dirs[] = $md->getDirectory(); } return array_values($partitions); From c93b90cc54cc44975ba04971c73fc7ec159d88b1 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Sat, 26 Jan 2013 20:05:31 -0500 Subject: [PATCH 021/208] prepare for improvements to way pypo communicates with LS --- python_apps/pypo/pypofetch.py | 47 ++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index 1448c65da..03c79cfc6 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -143,6 +143,24 @@ class PypoFetch(Thread): finally: lock.release() + @staticmethod + def telnet_send(logger, lock, commands): + try: + lock.acquire() + + tn = telnetlib.Telnet(LS_HOST, LS_PORT) + for i in commands: + logger.info(i) + tn.write(i) + + tn.write('exit\n') + tn.read_all() + except Exception, e: + logger.error(str(e)) + finally: + lock.release() + + @staticmethod def switch_source(logger, lock, sourcename, status): logger.debug('Switching source: %s to "%s" status', sourcename, status) @@ -159,17 +177,7 @@ class PypoFetch(Thread): else: command += "stop\n" - try: - lock.acquire() - - tn = telnetlib.Telnet(LS_HOST, LS_PORT) - tn.write(command) - tn.write('exit\n') - tn.read_all() - except Exception, e: - logger.error(str(e)) - finally: - lock.release() + PypoFetch.telnet_send(logger, lock, [command]) """ grabs some information that are needed to be set on bootstrap time @@ -184,9 +192,19 @@ class PypoFetch(Thread): self.logger.debug('info:%s', info) for k, v in info['switch_status'].iteritems(): self.switch_source(self.logger, self.telnet_lock, k, v) - self.update_liquidsoap_stream_format(info['stream_label']) - self.update_liquidsoap_station_name(info['station_name']) - self.update_liquidsoap_transition_fade(info['transition_fade']) + #self.update_liquidsoap_stream_format(info['stream_label']) + #self.update_liquidsoap_station_name(info['station_name']) + #self.update_liquidsoap_transition_fade(info['transition_fade']) + + stream_format = info['stream_label'] + station_name = info['station_name'] + fade = info['transition_fade'] + + commands = [] + commands.append(('vars.stream_metadata_type %s\n' % stream_format).encode('utf-8')) + commands.append(('vars.station_name %s\n' % station_name).encode('utf-8')) + commands.append(('vars.default_dj_fade %s\n' % fade).encode('utf-8')) + PypoFetch.telnet_send(self.logger, self.telnet_lock, commands) def restart_liquidsoap(self): @@ -356,6 +374,7 @@ class PypoFetch(Thread): if(status == "true"): self.api_client.notify_liquidsoap_status("OK", stream_id, str(fake_time)) + def update_liquidsoap_stream_format(self, stream_format): # Push stream metadata to liquidsoap # TODO: THIS LIQUIDSOAP STUFF NEEDS TO BE MOVED TO PYPO-PUSH!!! From b389e440019426f5cce94910ca4e5cfb2f578442 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Sun, 27 Jan 2013 15:00:56 -0500 Subject: [PATCH 022/208] take liquidsoap by the horns if it misbehaves. --- python_apps/pypo/airtime-liquidsoap-init-d | 6 +++--- .../pypo/liquidsoap_scripts/liquidsoap_prepare_terminate.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/python_apps/pypo/airtime-liquidsoap-init-d b/python_apps/pypo/airtime-liquidsoap-init-d index 4180d5c67..7096bc59c 100755 --- a/python_apps/pypo/airtime-liquidsoap-init-d +++ b/python_apps/pypo/airtime-liquidsoap-init-d @@ -28,10 +28,10 @@ start () { stop () { monit unmonitor airtime-liquidsoap >/dev/null 2>&1 - /usr/lib/airtime/airtime_virtualenv/bin/python /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py - + #send term signal after 10 seconds + timeout 10 /usr/lib/airtime/airtime_virtualenv/bin/python /usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_prepare_terminate.py # Send TERM after 5 seconds, wait at most 30 seconds. - start-stop-daemon --stop --oknodo --retry 5 --quiet --pidfile $PIDFILE + start-stop-daemon --stop --oknodo --retry=TERM/10/KILL/5 --quiet --pidfile $PIDFILE rm -f $PIDFILE } diff --git a/python_apps/pypo/liquidsoap_scripts/liquidsoap_prepare_terminate.py b/python_apps/pypo/liquidsoap_scripts/liquidsoap_prepare_terminate.py index e1dac82b6..2f632d9c7 100644 --- a/python_apps/pypo/liquidsoap_scripts/liquidsoap_prepare_terminate.py +++ b/python_apps/pypo/liquidsoap_scripts/liquidsoap_prepare_terminate.py @@ -6,14 +6,14 @@ try: config = ConfigObj('/etc/airtime/pypo.cfg') LS_HOST = config['ls_host'] LS_PORT = config['ls_port'] - + tn = telnetlib.Telnet(LS_HOST, LS_PORT) tn.write("master_harbor.stop\n") tn.write("live_dj_harbor.stop\n") tn.write('exit\n') tn.read_all() - + except Exception, e: print('Error loading config file: %s', e) sys.exit() - \ No newline at end of file + From f1215c10fdd7fcbbb3534473caee67e0848589d3 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 28 Jan 2013 14:21:11 -0500 Subject: [PATCH 023/208] CC-4882: Scheduled item does not take into account cue_out - cue_in time -fixed --- airtime_mvc/application/models/Scheduler.php | 7 +++++-- airtime_mvc/application/models/StoredFile.php | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index 2530eb7bf..be9930402 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -136,13 +136,17 @@ class Application_Model_Scheduler if ($type === "audioclip") { $file = CcFilesQuery::create()->findPK($id, $this->con); + $storedFile = new Application_Model_StoredFile($file->getDbId()); if (is_null($file) || !$file->visible()) { throw new Exception(_("A selected File does not exist!")); } else { $data = $this->fileInfo; $data["id"] = $id; - $data["cliplength"] = $file->getDbLength(); + $data["cliplength"] = $storedFile->getRealClipLength( + $file->getDbCuein(), + $file->getDbCueout()); + $data["cuein"] = $file->getDbCuein(); $data["cueout"] = $file->getDbCueout(); @@ -438,7 +442,6 @@ class Application_Model_Scheduler } foreach ($schedFiles as $file) { - $endTimeDT = $this->findEndTime($nextStartDT, $file['cliplength']); //item existed previously and is being moved. diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index bd50f2826..9ca6ff32c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -1285,6 +1285,14 @@ SQL; } } } + + public function getRealClipLength($p_cuein, $p_cueout) { + $sql = "SELECT :cueout::INTERVAL - :cuein::INTERVAL"; + + return Application_Common_Database::prepareAndExecute($sql, array( + ':cueout' => $p_cueout, + ':cuein' => $p_cuein), 'column'); + } } class DeleteScheduledFileException extends Exception {} From 5f3f2cd97ccfb8da8d706dc66018ce2e5b63a35f Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 28 Jan 2013 16:46:11 -0500 Subject: [PATCH 024/208] CC-4881: Cue in time can be greater than Cue out time in some situations -fixed --- airtime_mvc/application/models/Schedule.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 481f22b2d..81a3c55e7 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -696,6 +696,10 @@ SQL; 'replay_gain' => $replay_gain, 'independent_event' => $independent_event, ); + + if ($schedule_item['cue_in'] > $schedule_item['cue_out']) { + $schedule_item['cue_in'] = $schedule_item['cue_out']; + } self::appendScheduleItem($data, $start, $schedule_item); } @@ -906,7 +910,6 @@ SQL; self::createScheduledEvents($data, $range_start, $range_end); self::foldData($data["media"]); - return $data; } From d7358338f0355cda0ba44e8bbf5d2f5258865cd8 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 28 Jan 2013 17:00:16 -0500 Subject: [PATCH 025/208] improved logging in pypo fetch --- python_apps/pypo/pypofetch.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index 1448c65da..9a94a4103 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -135,6 +135,7 @@ class PypoFetch(Thread): try: lock.acquire() tn = telnetlib.Telnet(LS_HOST, LS_PORT) + self.logger.info(command) tn.write(command) tn.write('exit\n') tn.read_all() @@ -330,8 +331,13 @@ class PypoFetch(Thread): # updated. current_time = time.time() boot_up_time_command = "vars.bootup_time " + str(current_time) + "\n" + self.logger.info(boot_up_time_command) tn.write(boot_up_time_command) - tn.write("streams.connection_status\n") + + connection_status = "streams.connection_status\n" + self.logger.info(connection_status) + tn.write(connection_status) + tn.write('exit\n') output = tn.read_all() From 9d8a9faca872b7697437da0811b7664694840c7e Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 28 Jan 2013 17:00:35 -0500 Subject: [PATCH 026/208] make code formatting easier on eyes --- .../pypo/liquidsoap_scripts/ls_script.liq | 79 ++++++++++++++++--- 1 file changed, 66 insertions(+), 13 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index cd01ad453..489d494a3 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -195,28 +195,81 @@ def check_dj_client(user,password) = hd == "True" end -def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, dj_harbor_input_port, dj_harbor_input_mount_point, s) = - if master_harbor_input_port != 0 and master_harbor_input_mount_point != "" and dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then - master_dj = mksafe(audio_to_stereo(input.harbor(id="master_harbor", master_harbor_input_mount_point, port=master_harbor_input_port, auth=check_master_dj_client, - max=40., on_connect=master_dj_connect, on_disconnect=master_dj_disconnect))) - dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client, - max=40., on_connect=live_dj_connect, on_disconnect=live_dj_disconnect))) +def append_dj_inputs(master_harbor_input_port, + master_harbor_input_mount_point, + dj_harbor_input_port, + dj_harbor_input_mount_point, + s) = + if master_harbor_input_port != 0 + and master_harbor_input_mount_point != "" + and dj_harbor_input_port != 0 + and dj_harbor_input_mount_point != "" then + + master_dj = mksafe( + audio_to_stereo( + input.harbor(id="master_harbor", + master_harbor_input_mount_point, + port=master_harbor_input_port, + auth=check_master_dj_client, + max=40., + on_connect=master_dj_connect, + on_disconnect=master_dj_disconnect))) + + dj_live = mksafe( + audio_to_stereo( + input.harbor(id="live_dj_harbor", + dj_harbor_input_mount_point, + port=dj_harbor_input_port, + auth=check_dj_client, + max=40., + on_connect=live_dj_connect, + on_disconnect=live_dj_disconnect))) ignore(output.dummy(master_dj, fallible=true)) ignore(output.dummy(dj_live, fallible=true)) - switch(id="master_dj_switch", track_sensitive=false, transitions=[transition, transition, transition], [({!master_dj_enabled},master_dj), ({!live_dj_enabled},dj_live), ({true}, s)]) + + switch(id="master_dj_switch", + track_sensitive=false, + transitions=[transition, transition, transition], + [({!master_dj_enabled},master_dj), + ({!live_dj_enabled},dj_live), + ({true}, s)]) + elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != "" then - master_dj = mksafe(audio_to_stereo(input.harbor(id="master_harbor", master_harbor_input_mount_point, port=master_harbor_input_port, auth=check_master_dj_client, - max=40., on_connect=master_dj_connect, on_disconnect=master_dj_disconnect))) + master_dj = mksafe( + audio_to_stereo( + input.harbor(id="master_harbor", + master_harbor_input_mount_point, + port=master_harbor_input_port, + auth=check_master_dj_client, + max=40., + on_connect=master_dj_connect, + on_disconnect=master_dj_disconnect))) + ignore(output.dummy(master_dj, fallible=true)) - switch(id="master_dj_switch", track_sensitive=false, transitions=[transition, transition], [({!master_dj_enabled},master_dj), ({true}, s)]) + switch(id="master_dj_switch", + track_sensitive=false, + transitions=[transition, transition], + [({!master_dj_enabled},master_dj), ({true}, s)]) + elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then - dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client, - max=40., on_connect=live_dj_connect, on_disconnect=live_dj_disconnect))) + dj_live = mksafe( + audio_to_stereo( + input.harbor(id="live_dj_harbor", + dj_harbor_input_mount_point, + port=dj_harbor_input_port, + auth=check_dj_client, + max=40., + on_connect=live_dj_connect, + on_disconnect=live_dj_disconnect))) ignore(output.dummy(dj_live, fallible=true)) - switch(id="live_dj_switch", track_sensitive=false, transitions=[transition, transition], [({!live_dj_enabled},dj_live), ({true}, s)]) + + switch(id="live_dj_switch", + track_sensitive=false, + transitions=[transition, transition], + [({!live_dj_enabled},dj_live), ({true}, s)]) else s end From db4e6bb94afd6d362254ba570014f085c7ec3589 Mon Sep 17 00:00:00 2001 From: drigato Date: Tue, 29 Jan 2013 10:29:29 -0500 Subject: [PATCH 027/208] CC-4889: API client URL request is not wrapping in try/catch -fixed --- python_apps/api_clients/api_client.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index 517870e45..b28a4ca5a 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -73,17 +73,26 @@ class ApcUrl(object): else: return self.base_url class ApiRequest(object): - def __init__(self, name, url): + def __init__(self, name, url, logger=None): self.name = name self.url = url self.__req = None + if logger is None: self.logger = logging + else: self.logger = logger def __call__(self,_post_data=None, **kwargs): # TODO : get rid of god damn urllib and replace everything with # grequests or requests at least final_url = self.url.params(**kwargs).url() if _post_data is not None: _post_data = urllib.urlencode(_post_data) - req = urllib2.Request(final_url, _post_data) - response = urllib2.urlopen(req).read() + try: + req = urllib2.Request(final_url, _post_data) + response = urllib2.urlopen(req).read() + except Exception, e: + self.logger.error('Exception: %s', e) + import traceback + top = traceback.format_exc() + self.logger.error("traceback: %s", top) + response = "" # Ghetto hack for now because we don't the content type we are getting # (Pointless to look at mime since it's not being set correctly always) try: return json.loads(response) From 28c01760dde01dabd84d079d6675fd46f3fd8dcf Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 29 Jan 2013 12:17:05 -0500 Subject: [PATCH 028/208] be more gentle to Liquidsoap when sending lots of commands --- python_apps/pypo/pypofetch.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index 03c79cfc6..ea602581c 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -179,6 +179,25 @@ class PypoFetch(Thread): PypoFetch.telnet_send(logger, lock, [command]) + + #TODO: Merge this with switch_source + def switch_source_temp(self, sourcename, status): + self.logger.debug('Switching source: %s to "%s" status', sourcename, status) + command = "streams." + if sourcename == "master_dj": + command += "master_dj_" + elif sourcename == "live_dj": + command += "live_dj_" + elif sourcename == "scheduled_play": + command += "scheduled_play_" + + if status == "on": + command += "start\n" + else: + command += "stop\n" + + return command + """ grabs some information that are needed to be set on bootstrap time and configures them @@ -190,17 +209,14 @@ class PypoFetch(Thread): self.logger.error('Unable to get bootstrap info.. Exiting pypo...') else: self.logger.debug('info:%s', info) + commands = [] for k, v in info['switch_status'].iteritems(): - self.switch_source(self.logger, self.telnet_lock, k, v) - #self.update_liquidsoap_stream_format(info['stream_label']) - #self.update_liquidsoap_station_name(info['station_name']) - #self.update_liquidsoap_transition_fade(info['transition_fade']) + commands.append(self.switch_source_temp(k, v)) stream_format = info['stream_label'] station_name = info['station_name'] fade = info['transition_fade'] - commands = [] commands.append(('vars.stream_metadata_type %s\n' % stream_format).encode('utf-8')) commands.append(('vars.station_name %s\n' % station_name).encode('utf-8')) commands.append(('vars.default_dj_fade %s\n' % fade).encode('utf-8')) From b15c4569ebe90949fd55da5e1a7db5eea5ce1b41 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 29 Jan 2013 15:17:29 -0500 Subject: [PATCH 029/208] CC-4894: Need to filter output for potential XSS exploits -fixed few areas --- .../application/controllers/LibraryController.php | 9 +++++++++ airtime_mvc/application/controllers/UserController.php | 2 +- airtime_mvc/application/layouts/scripts/layout.phtml | 2 +- airtime_mvc/application/models/ShowBuilder.php | 2 +- airtime_mvc/application/models/User.php | 2 ++ .../application/views/scripts/form/edit-user.phtml | 4 ++-- .../views/scripts/form/preferences_watched_dirs.phtml | 4 ++-- .../application/views/scripts/playlist/playlist.phtml | 2 +- .../public/js/airtime/preferences/streamsetting.js | 2 +- 9 files changed, 20 insertions(+), 9 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 2b38349dd..1e3ac996a 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -385,6 +385,15 @@ class LibraryController extends Zend_Controller_Action //TODO move this to the datatables row callback. foreach ($r["aaData"] as &$data) { + foreach ($data as $k => &$v) { + if ($k != "image" && $k != "checkbox") { + $v = htmlspecialchars($v); + } + } + //TODO: Replace the above foreach loop with the line below when ticket + //CC-4896 is completed. + //$data = array_map('htmlspecialchars', $data); + if ($data['ftype'] == 'audioclip') { $file = Application_Model_StoredFile::Recall($data['id']); $scid = $file->getSoundCloudId(); diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index 395156f97..3faa1477f 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -115,7 +115,7 @@ class UserController extends Zend_Controller_Action $post = $this->getRequest()->getPost(); $users = Application_Model_User::getUsersDataTablesInfo($post); - die(json_encode($users)); + $this->_helper->json->sendJson($users); } public function getUserDataAction() diff --git a/airtime_mvc/application/layouts/scripts/layout.phtml b/airtime_mvc/application/layouts/scripts/layout.phtml index 29d04c0d6..dedda7c88 100644 --- a/airtime_mvc/application/layouts/scripts/layout.phtml +++ b/airtime_mvc/application/layouts/scripts/layout.phtml @@ -24,7 +24,7 @@ diff --git a/airtime_mvc/application/models/ShowBuilder.php b/airtime_mvc/application/models/ShowBuilder.php index a1ef7c588..72a5f6ab0 100644 --- a/airtime_mvc/application/models/ShowBuilder.php +++ b/airtime_mvc/application/models/ShowBuilder.php @@ -227,7 +227,7 @@ class Application_Model_ShowBuilder $row["endDate"] = $showEndDT->format("Y-m-d"); $row["endTime"] = $showEndDT->format("H:i"); $row["duration"] = floatval($showEndDT->format("U.u")) - floatval($showStartDT->format("U.u")); - $row["title"] = $p_item["show_name"]; + $row["title"] = htmlspecialchars($p_item["show_name"]); $row["instance"] = intval($p_item["si_id"]); $row["image"] = ''; diff --git a/airtime_mvc/application/models/User.php b/airtime_mvc/application/models/User.php index 63b82820a..97c9ca3ad 100644 --- a/airtime_mvc/application/models/User.php +++ b/airtime_mvc/application/models/User.php @@ -335,6 +335,8 @@ class Application_Model_User } else { $record['delete'] = ""; } + + $record = array_map('htmlspecialchars', $record); } return $res; diff --git a/airtime_mvc/application/views/scripts/form/edit-user.phtml b/airtime_mvc/application/views/scripts/form/edit-user.phtml index cd4b70bd9..79a0081fc 100644 --- a/airtime_mvc/application/views/scripts/form/edit-user.phtml +++ b/airtime_mvc/application/views/scripts/form/edit-user.phtml @@ -1,4 +1,4 @@ -

currentUser) ?>

+

escape($this->currentUser)) ?>

@@ -160,4 +160,4 @@
-
\ No newline at end of file + diff --git a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml index 4889892dd..ad8e77797 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml @@ -11,7 +11,7 @@ element->getElement('storageFolder')->hasErrors()) : ?>
    element->getElement('storageFolder')->getMessages() as $error): ?> -
  • +
  • escape($error); ?>
@@ -29,7 +29,7 @@ element->getElement('watchedFolder')->hasErrors()) : ?>
    element->getElement('watchedFolder')->getMessages() as $error): ?> -
  • +
  • escape($error); ?>
diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index f8496d926..a516f2746 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -39,7 +39,7 @@ if (isset($this->obj)) { diff --git a/airtime_mvc/public/js/airtime/preferences/streamsetting.js b/airtime_mvc/public/js/airtime/preferences/streamsetting.js index 54bb986ca..6e76b693c 100644 --- a/airtime_mvc/public/js/airtime/preferences/streamsetting.js +++ b/airtime_mvc/public/js/airtime/preferences/streamsetting.js @@ -28,7 +28,7 @@ function rebuildStreamURL(ele){ }else{ streamurl = "http://"+host+":"+port+"/" } - div.find("#stream_url").html(streamurl) + div.find("#stream_url").text(streamurl) } function restrictOggBitrate(ele, on){ var div = ele.closest("div") From c45440482a6a5f8522237468034d216147e27afb Mon Sep 17 00:00:00 2001 From: drigato Date: Wed, 30 Jan 2013 08:57:59 -0500 Subject: [PATCH 030/208] CC-4887: Show whether track is scheduled in the future on Library page --- airtime_mvc/application/models/Schedule.php | 15 +++++++++++++++ airtime_mvc/application/models/StoredFile.php | 5 +++++ .../public/js/airtime/library/library.js | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index 481f22b2d..c0fd53f4b 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -20,6 +20,21 @@ SQL; return (is_numeric($count) && ($count != '0')); } + public static function getAllFutureScheduledFiles() + { + $con = Propel::getConnection(); + $sql = << now() AT TIME ZONE 'UTC' +SQL; + $files = $con->query($sql)->fetchAll(); + $real_files = array(); + foreach ($files as $f) { + $real_files[] = $f['file_id']; + } + return $real_files; + } /** * Returns data related to the scheduled items. * diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index bd50f2826..fd9c3708a 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -771,6 +771,8 @@ SQL; } $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); + + $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); //Used by the audio preview functionality in the library. foreach ($results['aaData'] as &$row) { @@ -812,6 +814,9 @@ SQL; if ($type == "au") { $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); $row['image'] = ''; + if (in_array($row['id'], $futureScheduledFiles)) { + $row['checkbox'] .= ''; + } } elseif ($type == "pl") { $row['image'] = ''; } elseif ($type == "st") { diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index ed28d0c53..c6c5f589b 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -605,6 +605,25 @@ var AIRTIME = (function(AIRTIME) { } return false; }); + + $(nRow).find(".track-future").qtip({ + content: { + text: $.i18n._("Track is scheduled in the future") + }, + position:{ + adjust: { + resize: true, + method: "flip flip" + }, + at: "right center", + my: "left top", + viewport: $(window) + }, + style: { + classes: "ui-tooltip-dark" + }, + show: 'mousedown' + }); // add a tool tip to appear when the user clicks on the type // icon. From 9d99b8ae90831d4a5eef7012dfd4b5748f7afc40 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 30 Jan 2013 10:33:26 -0500 Subject: [PATCH 031/208] CC-4887: Show whether track is scheduled in the future on Library page --- .../public/js/airtime/library/library.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index c6c5f589b..4280b3b4c 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -608,21 +608,23 @@ var AIRTIME = (function(AIRTIME) { $(nRow).find(".track-future").qtip({ content: { - text: $.i18n._("Track is scheduled in the future") + text: $.i18n._("This track is scheduled in the future") }, - position:{ - adjust: { - resize: true, - method: "flip flip" - }, - at: "right center", - my: "left top", - viewport: $(window) + hide: { + delay: 500, + fixed: true }, style: { - classes: "ui-tooltip-dark" + border: { + width: 0, + radius: 4 + }, + classes: "ui-tooltip-dark ui-tooltip-rounded" + }, + position: { + my: "left bottom", + at: "right center" }, - show: 'mousedown' }); // add a tool tip to appear when the user clicks on the type From 043fbd1dfb2145e87fb0a62a2585be5355fb8ef1 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 30 Jan 2013 10:55:24 -0500 Subject: [PATCH 032/208] CC-4886: Warn if track is part of a playlist when deleting from library. -done --- airtime_mvc/application/models/Block.php | 14 +++++++ airtime_mvc/application/models/Playlist.php | 15 +++++++ airtime_mvc/application/models/StoredFile.php | 11 +++-- .../public/js/airtime/library/library.js | 42 ++++++++++++++++++- 4 files changed, 78 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 7053e658d..cda10c1a3 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1434,6 +1434,20 @@ SQL; return $output; } + public static function getAllBlockContent() + { + $con = Propel::getConnection(); + $sql = <<query($sql)->fetchAll(); + $real_files = array(); + foreach ($files as $f) { + $real_files[] = $f['file_id']; + } + return $real_files; + } // smart block functions end } diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 1c446f182..ea3bf5b53 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -955,6 +955,21 @@ SQL; return $result; } + public static function getAllPlaylistContent() + { + $con = Propel::getConnection(); + $sql = <<query($sql)->fetchAll(); + $real_files = array(); + foreach ($files as $f) { + $real_files[] = $f['file_id']; + } + return $real_files; + } + } // class Playlist class PlaylistNotFoundException extends Exception {} diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index fd9c3708a..db7454d6c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -773,7 +773,8 @@ SQL; $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); - + $playlistBlockFiles = array_merge(Application_Model_Playlist::getAllPlaylistContent(), + Application_Model_Block::getAllBlockContent()); //Used by the audio preview functionality in the library. foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); @@ -814,8 +815,12 @@ SQL; if ($type == "au") { $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); $row['image'] = ''; - if (in_array($row['id'], $futureScheduledFiles)) { - $row['checkbox'] .= ''; + if (in_array($row['id'], $futureScheduledFiles) && in_array($row['id'], $playlistBlockFiles)) { + $row['checkbox'] .= ''; + } elseif (in_array($row['id'], $futureScheduledFiles)) { + $row['checkbox'] .= ''; + } elseif (in_array($row['id'], $playlistBlockFiles)) { + $row['checkbox'] .= ''; } } elseif ($type == "pl") { $row['image'] = ''; diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 4280b3b4c..b73185292 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -606,7 +606,7 @@ var AIRTIME = (function(AIRTIME) { return false; }); - $(nRow).find(".track-future").qtip({ + $(nRow).find(".track-scheduled").qtip({ content: { text: $.i18n._("This track is scheduled in the future") }, @@ -626,6 +626,46 @@ var AIRTIME = (function(AIRTIME) { at: "right center" }, }); + $(nRow).find(".track-sched-pl-bl").qtip({ + content: { + text: $.i18n._("This track is scheduled in the future and belongs to a playlist or smart block") + }, + hide: { + delay: 500, + fixed: true + }, + style: { + border: { + width: 0, + radius: 4 + }, + classes: "ui-tooltip-dark ui-tooltip-rounded" + }, + position: { + my: "left bottom", + at: "right center" + }, + }); + $(nRow).find(".track-pl-bl").qtip({ + content: { + text: $.i18n._("This track belongs to a playlist or smart block") + }, + hide: { + delay: 500, + fixed: true + }, + style: { + border: { + width: 0, + radius: 4 + }, + classes: "ui-tooltip-dark ui-tooltip-rounded" + }, + position: { + my: "left bottom", + at: "right center" + }, + }); // add a tool tip to appear when the user clicks on the type // icon. From 2a0cc9e45fafc44f28319f222873b546497a2942 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 11:23:20 -0500 Subject: [PATCH 033/208] fix indentation --- python_apps/pypo/pypofetch.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index 0d9884881..b026f3a22 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -146,20 +146,20 @@ class PypoFetch(Thread): @staticmethod def telnet_send(logger, lock, commands): - try: - lock.acquire() + try: + lock.acquire() - tn = telnetlib.Telnet(LS_HOST, LS_PORT) - for i in commands: - logger.info(i) - tn.write(i) + tn = telnetlib.Telnet(LS_HOST, LS_PORT) + for i in commands: + logger.info(i) + tn.write(i) - tn.write('exit\n') - tn.read_all() - except Exception, e: - logger.error(str(e)) - finally: - lock.release() + tn.write('exit\n') + tn.read_all() + except Exception, e: + logger.error(str(e)) + finally: + lock.release() @staticmethod From e459f739f2b189d8c08a2b6a9dc7faf3b8fb21db Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 11:29:28 -0500 Subject: [PATCH 034/208] indentation error fix --- python_apps/pypo/pypofetch.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index b026f3a22..b0cbdc69a 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -147,19 +147,19 @@ class PypoFetch(Thread): @staticmethod def telnet_send(logger, lock, commands): try: - lock.acquire() + lock.acquire() - tn = telnetlib.Telnet(LS_HOST, LS_PORT) - for i in commands: - logger.info(i) - tn.write(i) + tn = telnetlib.Telnet(LS_HOST, LS_PORT) + for i in commands: + logger.info(i) + tn.write(i) - tn.write('exit\n') - tn.read_all() - except Exception, e: - logger.error(str(e)) - finally: - lock.release() + tn.write('exit\n') + tn.read_all() + except Exception, e: + logger.error(str(e)) + finally: + lock.release() @staticmethod From 595429e6e514aab20ac75a714cf2891bd3c1264c Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 30 Jan 2013 11:51:27 -0500 Subject: [PATCH 035/208] CC-4897: XSS exploit on library page -fixed --- airtime_mvc/application/controllers/LibraryController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 1e3ac996a..15ae12944 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -438,7 +438,7 @@ class LibraryController extends Zend_Controller_Action $formValues = $this->_getParam('data', null); $formdata = array(); foreach ($formValues as $val) { - $formdata[$val["name"]] = $val["value"]; + $formdata[$val["name"]] = htmlspecialchars($val["value"]); } $file->setDbColMetadata($formdata); From cc5acf3c9e7786fc8fab1197c180942440d62124 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 14:34:06 -0500 Subject: [PATCH 036/208] improved logging for boolean vars --- airtime_mvc/application/logging/Logging.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airtime_mvc/application/logging/Logging.php b/airtime_mvc/application/logging/Logging.php index dfe7e1fbe..65a8f6dc2 100644 --- a/airtime_mvc/application/logging/Logging.php +++ b/airtime_mvc/application/logging/Logging.php @@ -32,6 +32,8 @@ class Logging { { if (is_array($p_msg) || is_object($p_msg)) { return print_r($p_msg, true); + } else if (is_bool($p_msg)) { + return $p_msg ? "true" : "false"; } else { return $p_msg; } From 52d96241daedaa98e2833686cae9f6b01046811f Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 14:40:29 -0500 Subject: [PATCH 037/208] CC-4754: Replay gain modifier -fix regression --- airtime_mvc/application/controllers/PreferenceController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 00b0fa6ca..e68e6c603 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -273,7 +273,8 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetEnableReplayGain($values["enableReplayGain"]); Application_Model_Preference::setReplayGainModifier($values["replayGainModifier"]); $md = array('schedule' => Application_Model_Schedule::getSchedule()); - Application_Model_RabbitMq::PushSchedule(); + Application_Model_RabbitMq::SendMessageToPypo("update_schedule", $md); + //Application_Model_RabbitMq::PushSchedule(); } if (!Application_Model_Preference::GetMasterDjConnectionUrlOverride()) { From 4f5d7869d8958e4c44cba20a64172f639b193b54 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 30 Jan 2013 15:38:25 -0500 Subject: [PATCH 038/208] Removed html from Library/contents-feed and StoredFile model Added new Library column to indicate if a file is scheduled in the future or belongs to a playlist/smart block --- .../controllers/LibraryController.php | 17 ------ airtime_mvc/application/models/Preference.php | 4 +- airtime_mvc/application/models/StoredFile.php | 55 ++++++++----------- .../public/js/airtime/library/library.js | 45 +++++++++++++-- 4 files changed, 66 insertions(+), 55 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 2b38349dd..a180be814 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -382,23 +382,6 @@ class LibraryController extends Zend_Controller_Action # terrible name for the method below. it does not only search files. $r = Application_Model_StoredFile::searchLibraryFiles($params); - //TODO move this to the datatables row callback. - foreach ($r["aaData"] as &$data) { - - if ($data['ftype'] == 'audioclip') { - $file = Application_Model_StoredFile::Recall($data['id']); - $scid = $file->getSoundCloudId(); - - if ($scid == "-2") { - $data['track_title'] .= ''; - } elseif ($scid == "-3") { - $data['track_title'] .= ''; - } elseif (!is_null($scid)) { - $data['track_title'] .= ''; - } - } - } - $this->view->sEcho = $r["sEcho"]; $this->view->iTotalDisplayRecords = $r["iTotalDisplayRecords"]; $this->view->iTotalRecords = $r["iTotalRecords"]; diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 08bd14137..1d56313f7 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -1223,9 +1223,9 @@ class Application_Model_Preference $num_columns = count(Application_Model_StoredFile::getLibraryColumns()); $new_columns_num = count($settings['abVisCols']); - if ($num_columns != $new_columns_num) { + /*if ($num_columns != $new_columns_num) { throw new Exception("Trying to write a user column preference with incorrect number of columns!"); - } + }*/ $data = serialize($settings); $v = self::setValue("library_datatable", $data, true); diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index db7454d6c..a9bc15955 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -775,7 +775,7 @@ SQL; $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); $playlistBlockFiles = array_merge(Application_Model_Playlist::getAllPlaylistContent(), Application_Model_Block::getAllBlockContent()); - //Used by the audio preview functionality in the library. + foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); @@ -788,6 +788,24 @@ SQL; $formatter = new BitrateFormatter($row['bit_rate']); $row['bit_rate'] = $formatter->format(); + + //soundcloud status + $file = Application_Model_StoredFile::Recall($row['id']); + $row['soundcloud_status'] = $file->getSoundCloudId(); + + //file 'in use' status + if (in_array($row['id'], $futureScheduledFiles) && in_array($row['id'], $playlistBlockFiles)) { + $row['status_scheduled_pl_bl'] = true; + } elseif (in_array($row['id'], $futureScheduledFiles)) { + $row['status_scheduled'] = true; + } elseif (in_array($row['id'], $playlistBlockFiles)) { + $row['status_pl_bl'] = true; + } + + // for audio preview + $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); + } else { + $row['audioFile'] = $row['id']; } //convert mtime and utime to localtime @@ -798,38 +816,13 @@ SQL; $row['utime']->setTimeZone(new DateTimeZone(date_default_timezone_get())); $row['utime'] = $row['utime']->format('Y-m-d H:i:s'); - // add checkbox row - $row['checkbox'] = ""; - - $type = substr($row['ftype'], 0, 2); + // we need to initalize the checkbox and image row because we do not retrieve + // any data from the db for these and datatables will complain + $row['checkbox'] = ""; + $row['image'] = ""; + $row['status'] = ""; $row['tr_id'] = "{$type}_{$row['id']}"; - - //TODO url like this to work on both playlist/showbuilder - //screens. datatable stuff really needs to be pulled out and - //generalized within the project access to zend view methods - //to access url helpers is needed. - - // TODO : why is there inline html here? breaks abstraction and is - // ugly - if ($type == "au") { - $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); - $row['image'] = ''; - if (in_array($row['id'], $futureScheduledFiles) && in_array($row['id'], $playlistBlockFiles)) { - $row['checkbox'] .= ''; - } elseif (in_array($row['id'], $futureScheduledFiles)) { - $row['checkbox'] .= ''; - } elseif (in_array($row['id'], $playlistBlockFiles)) { - $row['checkbox'] .= ''; - } - } elseif ($type == "pl") { - $row['image'] = ''; - } elseif ($type == "st") { - $row['audioFile'] = $row['id']; - $row['image'] = ''; - } elseif ($type == "bl") { - $row['image'] = ''; - } } return $results; diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index b73185292..4f64b6f70 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -439,6 +439,7 @@ var AIRTIME = (function(AIRTIME) { /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_type" , "iDataSort" : 0 } , + /* Status */ { "sTitle" : "" , "mDataProp" : "status" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_status" , "iDataSort" : 0 } , /* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" } , /* Creator */ { "sTitle" : $.i18n._("Creator") , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" } , /* Album */ { "sTitle" : $.i18n._("Album") , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" } , @@ -554,12 +555,47 @@ var AIRTIME = (function(AIRTIME) { }, "fnRowCallback": AIRTIME.library.fnRowCallback, "fnCreatedRow": function( nRow, aData, iDataIndex ) { - + //add soundcloud icon + if (aData.soundcloud_status !== undefined) { + if (aData.soundcloud_status === "-2") { + $(nRow).find("td.library_title").append(''); + } else if (aData.soundcloud_status === "-3") { + $(nRow).find("td.library_title").append(''); + } else if (aData.soundcloud_status !== null) { + $(nRow).find("td.library_title").append(''); + } + } + + // add checkbox + $(nRow).find('td.library_checkbox').html(""); + + // add audio preview image/button + if (aData.ftype === "audioclip") { + $(nRow).find('td.library_type').html(''); + } else if (aData.ftype === "playlist") { + $(nRow).find('td.library_type').html(''); + } else if (aData.ftype === "block") { + $(nRow).find('td.library_type').html(''); + } else if (aData.ftype === "stream") { + $(nRow).find('td.library_type').html(''); + } + + // add status icon + $status = $(nRow).find("td.library_status"); + if (aData.status_scheduled_pl_bl !== null && aData.status_scheduled_pl_bl) { + $status.html(''); + } + if (aData.status_scheduled !== null && aData.status_scheduled) { + $status.html(''); + } + if (aData.status_pl_bl !== null && aData.status_pl_bl) { + $status.html(''); + } + // add the play function to the library_type td $(nRow).find('td.library_type').click(function(){ if (aData.ftype === 'playlist' && aData.length !== '0.0'){ - playlistIndex = $(this).parent().attr('id').substring(3); - open_playlist_preview(playlistIndex, 0); + open_playlist_preview(aData.audioFile, 0); } else if (aData.ftype === 'audioclip') { if (isAudioSupported(aData.mime)) { open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); @@ -569,8 +605,7 @@ var AIRTIME = (function(AIRTIME) { open_audio_preview(aData.ftype, aData.audioFile, aData.track_title, aData.artist_name); } } else if (aData.ftype == 'block' && aData.bl_type == 'static') { - blockIndex = $(this).parent().attr('id').substring(3); - open_block_preview(blockIndex, 0); + open_block_preview(aData.audioFile, 0); } return false; }); From cf2ed25bfb5ac4dcc1c604d811a3f78765016405 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 30 Jan 2013 16:53:59 -0500 Subject: [PATCH 039/208] CC-4900: Indicate in the library if a webstream is scheduled in the future or belongs to a playlist -done --- airtime_mvc/application/models/Playlist.php | 19 +++++- airtime_mvc/application/models/Schedule.php | 20 +++++++ airtime_mvc/application/models/StoredFile.php | 33 +++++++++-- airtime_mvc/public/css/styles.css | 2 +- .../public/js/airtime/library/library.js | 58 ++----------------- 5 files changed, 71 insertions(+), 61 deletions(-) diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index ea3bf5b53..7aaea5243 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -955,12 +955,13 @@ SQL; return $result; } - public static function getAllPlaylistContent() + public static function getAllPlaylistFiles() { $con = Propel::getConnection(); $sql = <<query($sql)->fetchAll(); $real_files = array(); @@ -970,6 +971,22 @@ SQL; return $real_files; } + public static function getAllPlaylistStreams() + { + $con = Propel::getConnection(); + $sql = <<query($sql)->fetchAll(); + $real_streams = array(); + foreach ($streams as $s) { + $real_streams[] = $s['stream_id']; + } + return $real_streams; + } + } // class Playlist class PlaylistNotFoundException extends Exception {} diff --git a/airtime_mvc/application/models/Schedule.php b/airtime_mvc/application/models/Schedule.php index c0fd53f4b..ca31a4378 100644 --- a/airtime_mvc/application/models/Schedule.php +++ b/airtime_mvc/application/models/Schedule.php @@ -27,14 +27,34 @@ SQL; SELECT distinct(file_id) FROM cc_schedule WHERE ends > now() AT TIME ZONE 'UTC' +AND file_id is not null SQL; $files = $con->query($sql)->fetchAll(); $real_files = array(); foreach ($files as $f) { $real_files[] = $f['file_id']; } + return $real_files; } + + public static function getAllFutureScheduledWebstreams() + { + $con = Propel::getConnection(); + $sql = << now() AT TIME ZONE 'UTC' +AND stream_id is not null +SQL; + $streams = $con->query($sql)->fetchAll(); + $real_streams = array(); + foreach ($streams as $s) { + $real_streams[] = $s['stream_id']; + } + + return $real_streams; + } /** * Returns data related to the scheduled items. * diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index a9bc15955..92a46f9c0 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -773,9 +773,14 @@ SQL; $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); - $playlistBlockFiles = array_merge(Application_Model_Playlist::getAllPlaylistContent(), + // we are only interested in which files belong to playlists and blocks + $playlistBlockFiles = array_merge(Application_Model_Playlist::getAllPlaylistFiles(), Application_Model_Block::getAllBlockContent()); + $futureScheduledStreams = Application_Model_Schedule::getAllFutureScheduledWebstreams(); + // here we are only interested in which streams belong to a playlist + $playlistStreams = Application_Model_Playlist::getAllPlaylistStreams(); + foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); @@ -792,18 +797,34 @@ SQL; //soundcloud status $file = Application_Model_StoredFile::Recall($row['id']); $row['soundcloud_status'] = $file->getSoundCloudId(); - + //file 'in use' status if (in_array($row['id'], $futureScheduledFiles) && in_array($row['id'], $playlistBlockFiles)) { - $row['status_scheduled_pl_bl'] = true; + $row['status_in_use'] = true; + $row['status_msg'] = _("This track is scheduled in the future and belongs to a playlist or smart block"); } elseif (in_array($row['id'], $futureScheduledFiles)) { - $row['status_scheduled'] = true; + $row['status_in_use'] = true; + $row['status_msg'] = _("This track is scheduled in the future"); } elseif (in_array($row['id'], $playlistBlockFiles)) { - $row['status_pl_bl'] = true; + $row['status_in_use'] = true; + $row['status_msg'] = _("This track belongs to a playlist or smart block"); } - + // for audio preview $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); + } else if ($row['ftype'] === "stream") { + $row['audioFile'] = $row['id']; + + if (in_array($row['id'], $futureScheduledStreams) && in_array($row['id'], $playlistStreams)) { + $row['status_in_use'] = true; + $row['status_msg'] = _("This webstream is scheduled in the future and belongs to a playlist"); + } elseif (in_array($row['id'], $futureScheduledStreams)) { + $row['status_in_use'] = true; + $row['status_msg'] = _("This webstream is scheduled in the future"); + } elseif (in_array($row['id'], $playlistStreams)) { + $row['status_in_use'] = true; + $row['status_msg'] = _("This webstream belongs to a playlist"); + } } else { $row['audioFile'] = $row['id']; } diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css index bd42e4da6..31b85797d 100644 --- a/airtime_mvc/public/css/styles.css +++ b/airtime_mvc/public/css/styles.css @@ -1999,7 +1999,7 @@ span.errors.sp-errors{ .small-icon.show-empty { background:url(images/icon_alert_cal_alt.png) no-repeat 0 0; } -.small-icon.show-partial-filled { +.small-icon.show-partial-filled, .small-icon.media-item-in-use { background:url(images/icon_alert_cal_alt2.png) no-repeat 0 0; } .medium-icon { diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 4f64b6f70..042a7d1cf 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -580,16 +580,8 @@ var AIRTIME = (function(AIRTIME) { $(nRow).find('td.library_type').html(''); } - // add status icon - $status = $(nRow).find("td.library_status"); - if (aData.status_scheduled_pl_bl !== null && aData.status_scheduled_pl_bl) { - $status.html(''); - } - if (aData.status_scheduled !== null && aData.status_scheduled) { - $status.html(''); - } - if (aData.status_pl_bl !== null && aData.status_pl_bl) { - $status.html(''); + if (aData.status_in_use !== null && aData.status_in_use) { + $(nRow).find("td.library_status").html(''); } // add the play function to the library_type td @@ -641,9 +633,9 @@ var AIRTIME = (function(AIRTIME) { return false; }); - $(nRow).find(".track-scheduled").qtip({ + $(nRow).find(".media-item-in-use").qtip({ content: { - text: $.i18n._("This track is scheduled in the future") + text: aData.status_msg }, hide: { delay: 500, @@ -661,47 +653,7 @@ var AIRTIME = (function(AIRTIME) { at: "right center" }, }); - $(nRow).find(".track-sched-pl-bl").qtip({ - content: { - text: $.i18n._("This track is scheduled in the future and belongs to a playlist or smart block") - }, - hide: { - delay: 500, - fixed: true - }, - style: { - border: { - width: 0, - radius: 4 - }, - classes: "ui-tooltip-dark ui-tooltip-rounded" - }, - position: { - my: "left bottom", - at: "right center" - }, - }); - $(nRow).find(".track-pl-bl").qtip({ - content: { - text: $.i18n._("This track belongs to a playlist or smart block") - }, - hide: { - delay: 500, - fixed: true - }, - style: { - border: { - width: 0, - radius: 4 - }, - classes: "ui-tooltip-dark ui-tooltip-rounded" - }, - position: { - my: "left bottom", - at: "right center" - }, - }); - + // add a tool tip to appear when the user clicks on the type // icon. $(nRow).find("td:not(.library_checkbox, .library_type)").qtip({ From 3553ebc2ee3bde9cd7c8352f322b7848d31e65c0 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 18:21:46 -0500 Subject: [PATCH 040/208] fix upgrade script so that cue out of files is not 00:00:00 by default --- install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index c2d176b23..cd34a28bb 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -15,6 +15,8 @@ INSERT INTO cc_stream_setting ("keyname", "value", "type") VALUES ('s3_admin_pas UPDATE cc_music_dirs SET directory = directory || '/' where id in (select id from cc_music_dirs where substr(directory, length(directory)) != '/'); UPDATE cc_files SET filepath = substring(filepath from 2) where id in (select id from cc_files where substring(filepath from 1 for 1) = '/'); +UPDATE cc_files SET cueout = length where cueout = '00:00:00'; + INSERT INTO cc_pref("keystr", "valstr") VALUES('locale', 'en_CA'); INSERT INTO cc_pref("subjid", "keystr", "valstr") VALUES(1, 'user_locale', 'en_CA'); From 617e1049aab8a763fbbfda4355bc05353015f164 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 30 Jan 2013 23:31:24 -0500 Subject: [PATCH 041/208] fix changelog mistakes --- changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 9aa22c634..aff42ec52 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ 2.3.0 - Jan 21st, 2013 * New features - * Localization (Brazilian, Chinese, Czech, English, French, German, Italian, Korean, Portugese, Russian, Spanish) + * Localization (Chinese, Czech, English, French, German, Italian, Korean, + Portuguese, Russian, Spanish) * User management page for non-admin users * Listener statistics (Icecast/Shoutcast) * Airtime no longer requires Apache document root From e1c69ebca20ed87fd2cc18083b3de7c3654dbc97 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 31 Jan 2013 11:28:54 -0500 Subject: [PATCH 042/208] CC-4902: Library -> Status column does not update when you add a file to a show -fixed --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index b7d4bda7f..a20661bcb 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -251,10 +251,11 @@ var AIRTIME = (function(AIRTIME){ mod.fnItemCallback = function(json) { checkError(json); - mod.getSelectedCursors(); + mod.getSelectedCursors(); oSchedTable.fnDraw(); - + mod.enableUI(); + $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); }; mod.getSelectedCursors = function() { From 3bc2876f2725a1ce21632c56a0f1a57b49556e2b Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 31 Jan 2013 11:41:00 -0500 Subject: [PATCH 043/208] CC-4903: Library -> Show/hide columns -> Status Column needs label -fixed --- airtime_mvc/public/js/airtime/library/library.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 042a7d1cf..f56cf7d7a 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -439,7 +439,7 @@ var AIRTIME = (function(AIRTIME) { /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_type" , "iDataSort" : 0 } , - /* Status */ { "sTitle" : "" , "mDataProp" : "status" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_status" , "iDataSort" : 0 } , + /* Status */ { "sTitle" : $.i18n._("Status") , "mDataProp" : "status" , "bSearchable" : false , "sWidth" : "60px" , "sClass" : "library_status" , "iDataSort" : 0 } , /* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" } , /* Creator */ { "sTitle" : $.i18n._("Creator") , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" } , /* Album */ { "sTitle" : $.i18n._("Album") , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" } , From 8adb4b259c031ff7107a8b30ec20e8dec185fe2c Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 31 Jan 2013 12:33:14 -0500 Subject: [PATCH 044/208] CC-4905: Unit tests for Pypo --- python_apps/pypo/pypocli.py | 2 +- python_apps/pypo/pypofetch.py | 3 +- python_apps/pypo/pypopush.py | 20 ++++++++++++-- python_apps/pypo/tests/run_tests.sh | 18 ++++++++++++ python_apps/pypo/tests/test_modify_cue_in.py | 29 ++++++++++++++++++++ 5 files changed, 67 insertions(+), 5 deletions(-) create mode 100755 python_apps/pypo/tests/run_tests.sh create mode 100644 python_apps/pypo/tests/test_modify_cue_in.py diff --git a/python_apps/pypo/pypocli.py b/python_apps/pypo/pypocli.py index ea8950d41..93a1718aa 100644 --- a/python_apps/pypo/pypocli.py +++ b/python_apps/pypo/pypocli.py @@ -176,7 +176,7 @@ if __name__ == '__main__': sys.exit() api_client = api_client.AirtimeApiClient() - + ReplayGainUpdater.start_reply_gain(api_client) api_client.register_component("pypo") diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index b0cbdc69a..e073efda9 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -18,7 +18,8 @@ from std_err_override import LogWriter from configobj import ConfigObj # configure logging -logging.config.fileConfig("logging.cfg") +logging_cfg = os.path.join(os.path.dirname(__file__), "logging.cfg") +logging.config.fileConfig(logging_cfg) logger = logging.getLogger() LogWriter.override_std_err(logger) diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index 6fedfab1b..f438b3bb1 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -9,6 +9,7 @@ import logging.config import telnetlib import calendar import math +import os from pypofetch import PypoFetch from Queue import Empty @@ -21,7 +22,8 @@ from configobj import ConfigObj # configure logging -logging.config.fileConfig("logging.cfg") +logging_cfg = os.path.join(os.path.dirname(__file__), "logging.cfg") +logging.config.fileConfig(logging_cfg) logger = logging.getLogger() LogWriter.override_std_err(logger) @@ -249,7 +251,7 @@ class PypoPush(Thread): self.start_web_stream_buffer(current_item) self.start_web_stream(current_item) if is_file(current_item): - self.modify_cue_point(file_chain[0]) + file_chain = self.modify_first_link_cue_point(file_chain) self.push_to_liquidsoap(file_chain) #we've changed the queue, so let's refetch it liquidsoap_queue_approx = self.get_queue_items_from_liquidsoap() @@ -279,7 +281,7 @@ class PypoPush(Thread): chain_to_push = file_chain[problem_at_iteration:] if len(chain_to_push) > 0: - self.modify_cue_point(chain_to_push[0]) + chain_to_push = self.modify_first_link_cue_point(chain_to_push) self.push_to_liquidsoap(chain_to_push) @@ -363,6 +365,18 @@ class PypoPush(Thread): original_cue_in_td = timedelta(seconds=float(link['cue_in'])) link['cue_in'] = self.date_interval_to_seconds(original_cue_in_td) + diff_sec + def modify_first_link_cue_point(self, chain): + if not len(chain): + return [] + + first_link = chain[0] + + self.modify_cue_point(first_link) + if float(first_link['cue_in']) >= float(first_link['cue_out']): + chain = chain [1:] + + return chain + """ Returns two chains, original chain and current_chain. current_chain is a subset of original_chain but can also be equal to original chain. diff --git a/python_apps/pypo/tests/run_tests.sh b/python_apps/pypo/tests/run_tests.sh new file mode 100755 index 000000000..830a9bb85 --- /dev/null +++ b/python_apps/pypo/tests/run_tests.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +which py.test +pytest_exist=$? + +if [ "$pytest_exist" != "0" ]; then + echo "Need to have py.test installed. Exiting..." + exit 1 +fi + +SCRIPT=`readlink -f $0` +# Absolute directory this script is in +SCRIPTPATH=`dirname $SCRIPT` + +export PYTHONPATH=$PYTHONPATH:$SCRIPTPATH/..:$SCRIPTPATH/../.. + +py.test + diff --git a/python_apps/pypo/tests/test_modify_cue_in.py b/python_apps/pypo/tests/test_modify_cue_in.py new file mode 100644 index 000000000..d5049bde5 --- /dev/null +++ b/python_apps/pypo/tests/test_modify_cue_in.py @@ -0,0 +1,29 @@ +from pypopush import PypoPush +from threading import Lock +from Queue import Queue + +import datetime + +pypoPush_q = Queue() +telnet_lock = Lock() + +pp = PypoPush(pypoPush_q, telnet_lock) + +def test_modify_cue_in(): + + link = pp.modify_first_link_cue_point([]) + assert len(link) == 0 + + min_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes = 1) + link = [{"start":min_ago.strftime("%Y-%m-%d-%H-%M-%S"), + "cue_in":"0", "cue_out":"30"}] + link = pp.modify_first_link_cue_point(link) + assert len(link) == 0 + + link = [{"start":min_ago.strftime("%Y-%m-%d-%H-%M-%S"), + "cue_in":"0", "cue_out":"70"}] + link = pp.modify_first_link_cue_point(link) + assert len(link) == 1 + + + From d4e89df94e6e66a6f6cb61631713c710d3a3a0b1 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 31 Jan 2013 14:06:45 -0500 Subject: [PATCH 045/208] CC-4895: Remove all json die() statements from code --- .../application/controllers/ApiController.php | 4 ++-- .../controllers/LibraryController.php | 2 +- .../controllers/ListenerstatController.php | 2 +- .../controllers/PlaylistController.php | 18 ++++++++--------- .../controllers/PluploadController.php | 6 +++--- .../controllers/PreferenceController.php | 20 +++++++++---------- .../controllers/ScheduleController.php | 4 ++-- .../controllers/UserController.php | 12 +++++------ 8 files changed, 34 insertions(+), 34 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 6bbe480da..ffbae08aa 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -411,7 +411,7 @@ class ApiController extends Zend_Controller_Action $result = Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName, $tempFileName); if (!is_null($result)) { - die('{"jsonrpc" : "2.0", "error" : {"code": '.$result['code'].', "message" : "'.$result['message'].'"}}'); + $this->_helper->json->sendJson('{"jsonrpc" : "2.0", "error" : {"code": '.$result['code'].', "message" : "'.$result['message'].'"}}'); } } @@ -600,7 +600,7 @@ class ApiController extends Zend_Controller_Action $response['key'] = $k; array_push($responses, $response); } - die( json_encode($responses) ); + $this->_helper->json->sendJson( json_encode($responses) ); } public function listAllFilesAction() diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index a180be814..2974d85a1 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -507,7 +507,7 @@ class LibraryController extends Zend_Controller_Action $id = $this->_getParam('id'); Application_Model_Soundcloud::uploadSoundcloud($id); // we should die with ui info - die(); + $this->_helper->json->sendJson(null); } public function getUploadToSoundcloudStatusAction() diff --git a/airtime_mvc/application/controllers/ListenerstatController.php b/airtime_mvc/application/controllers/ListenerstatController.php index 817f6ca11..f64ea8bfb 100644 --- a/airtime_mvc/application/controllers/ListenerstatController.php +++ b/airtime_mvc/application/controllers/ListenerstatController.php @@ -76,6 +76,6 @@ class ListenerstatController extends Zend_Controller_Action $endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC")); $data = Application_Model_ListenerStat::getDataPointsWithinRange($startsDT->format("Y-m-d H:i:s"), $endsDT->format("Y-m-d H:i:s"), $mountName); - die(json_encode($data)); + $this->_helper->json->sendJson(json_encode($data)); } } diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 19c2756e7..789d4a904 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -132,7 +132,7 @@ class PlaylistController extends Zend_Controller_Action if (!$p_isJson) { $this->createFullResponse(null); } else { - die(json_encode(array("error"=>$this->view->error, "result"=>1, "html"=>$this->createFullResponse(null, $p_isJson)))); + $this->_helper->json->sendJson(json_encode(array("error"=>$this->view->error, "result"=>1, "html"=>$this->createFullResponse(null, $p_isJson)))); } } @@ -488,7 +488,7 @@ class PlaylistController extends Zend_Controller_Action } $result["modified"] = $this->view->modified; - die(json_encode($result)); + $this->_helper->json->sendJson(json_encode($result)); } public function smartBlockGenerateAction() @@ -504,7 +504,7 @@ class PlaylistController extends Zend_Controller_Action $form->startForm($params['obj_id']); if ($form->isValid($params)) { $result = $bl->generateSmartBlock($params['data']); - die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true, true)))); + $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true, true)))); } else { $this->view->obj = $bl; $this->view->id = $bl->getId(); @@ -512,7 +512,7 @@ class PlaylistController extends Zend_Controller_Action $viewPath = 'playlist/smart-block.phtml'; $result['html'] = $this->view->render($viewPath); $result['result'] = 1; - die(json_encode($result)); + $this->_helper->json->sendJson(json_encode($result)); } } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); @@ -531,9 +531,9 @@ class PlaylistController extends Zend_Controller_Action $result = $bl->shuffleSmartBlock(); if ($result['result'] == 0) { - die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); + $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); } else { - die(json_encode($result)); + $this->_helper->json->sendJson(json_encode($result)); } } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); @@ -551,9 +551,9 @@ class PlaylistController extends Zend_Controller_Action $result = $pl->shuffle(); if ($result['result'] == 0) { - die(json_encode(array("result"=>0, "html"=>$this->createFullResponse($pl, true)))); + $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($pl, true)))); } else { - die(json_encode($result)); + $this->_helper->json->sendJson(json_encode($result)); } } catch (PlaylistNotFoundException $e) { $this->playlistNotFound('block', true); @@ -574,7 +574,7 @@ class PlaylistController extends Zend_Controller_Action $out = $bl->getCriteria(); $out['isStatic'] = false; } - die(json_encode($out)); + $this->_helper->json->sendJson(json_encode($out)); } } class WrongTypeToBlockException extends Exception {} diff --git a/airtime_mvc/application/controllers/PluploadController.php b/airtime_mvc/application/controllers/PluploadController.php index ed7403693..49b706644 100644 --- a/airtime_mvc/application/controllers/PluploadController.php +++ b/airtime_mvc/application/controllers/PluploadController.php @@ -32,7 +32,7 @@ class PluploadController extends Zend_Controller_Action $tempFilePath = Application_Model_StoredFile::uploadFile($upload_dir); $tempFileName = basename($tempFilePath); - die('{"jsonrpc" : "2.0", "tempfilepath" : "'.$tempFileName.'" }'); + $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "tempfilepath" => $tempFileName)); } public function copyfileAction() @@ -43,8 +43,8 @@ class PluploadController extends Zend_Controller_Action $result = Application_Model_StoredFile::copyFileToStor($upload_dir, $filename, $tempname); if (!is_null($result)) - die('{"jsonrpc" : "2.0", "error" : '.json_encode($result).'}'); + $this->_helper->json->sendJson('{"jsonrpc" : "2.0", "error" : '.json_encode($result).'}'); - die('{"jsonrpc" : "2.0"}'); + $this->_helper->json->sendJson('{"jsonrpc" : "2.0"}'); } } diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 269215783..af78f996a 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -70,10 +70,10 @@ class PreferenceController extends Zend_Controller_Action $this->view->statusMsg = "
". _("Preferences updated.")."
"; $this->view->form = $form; - die(json_encode(array("valid"=>"true", "html"=>$this->view->render('preference/index.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"true", "html"=>$this->view->render('preference/index.phtml')))); } else { $this->view->form = $form; - die(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/index.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/index.phtml')))); } } $this->view->form = $form; @@ -322,7 +322,7 @@ class PreferenceController extends Zend_Controller_Action $this->view->form = $form; $this->view->num_stream = $num_of_stream; $this->view->statusMsg = "
"._("Stream Setting Updated.")."
"; - die(json_encode(array( + $this->_helper->json->sendJson(json_encode(array( "valid"=>"true", "html"=>$this->view->render('preference/stream-setting.phtml'), "s1_set_admin_pass"=>$s1_set_admin_pass, @@ -334,7 +334,7 @@ class PreferenceController extends Zend_Controller_Action $this->view->enable_stream_conf = Application_Model_Preference::GetEnableStreamConf(); $this->view->form = $form; $this->view->num_stream = $num_of_stream; - die(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/stream-setting.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/stream-setting.phtml')))); } } @@ -378,7 +378,7 @@ class PreferenceController extends Zend_Controller_Action } ksort($result); //returns format serverBrowse is looking for. - die(json_encode($result)); + $this->_helper->json->sendJson($result); } public function changeStorDirectoryAction() @@ -420,7 +420,7 @@ class PreferenceController extends Zend_Controller_Action Application_Model_RabbitMq::SendMessageToMediaMonitor('rescan_watch', $data); Logging::info("Unhiding all files belonging to:: $dir_path"); $dir->unhideFiles(); - die(); # Get rid of this ugliness later + $this->_helper->json->sendJson(null); } public function removeWatchDirectoryAction() @@ -440,7 +440,7 @@ class PreferenceController extends Zend_Controller_Action if (Application_Model_Preference::GetImportTimestamp()+10 > $now) { $res = true; } - die(json_encode($res)); + $this->_helper->json->sendJson(json_encode($res)); } public function getLiquidsoapStatusAction() @@ -455,7 +455,7 @@ class PreferenceController extends Zend_Controller_Action } $out[] = array("id"=>$i, "status"=>$status); } - die(json_encode($out)); + $this->_helper->json->sendJson(json_encode($out)); } public function setSourceConnectionUrlAction() @@ -473,7 +473,7 @@ class PreferenceController extends Zend_Controller_Action Application_Model_Preference::SetLiveDjConnectionUrlOverride($override); } - die(); + $this->_helper->json->sendJson(null); } public function getAdminPasswordStatusAction() @@ -486,6 +486,6 @@ class PreferenceController extends Zend_Controller_Action $out["s".$i] = true; } } - die(json_encode($out)); + $this->_helper->json->sendJson(json_encode($out)); } } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 15dca0621..22257025d 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -218,7 +218,7 @@ class ScheduleController extends Zend_Controller_Action $id = $file->getId(); Application_Model_Soundcloud::uploadSoundcloud($id); // we should die with ui info - die(); + $this->_helper->json->sendJson(null); } public function makeContextMenuAction() @@ -897,7 +897,7 @@ class ScheduleController extends Zend_Controller_Action 'title' => _('Download')); //returns format jjmenu is looking for. - die(json_encode($menu)); + $this->_helper->json->sendJson(json_encode($menu)); } /** diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index 395156f97..14728512a 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -53,7 +53,7 @@ class UserController extends Zend_Controller_Action && $formData['user_id'] != 0) { $this->view->form = $form; $this->view->successMessage = "
"._("Specific action is not allowed in demo version!")."
"; - die(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); } elseif ($form->validateLogin($formData)) { $user = new Application_Model_User($formData['user_id']); if (empty($formData['user_id'])) { @@ -89,14 +89,14 @@ class UserController extends Zend_Controller_Action $this->view->successMessage = "
"._("User updated successfully!")."
"; } - die(json_encode(array("valid"=>"true", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"true", "html"=>$this->view->render('user/add-user.phtml')))); } else { $this->view->form = $form; - die(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); } } else { $this->view->form = $form; - die(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); } } @@ -115,7 +115,7 @@ class UserController extends Zend_Controller_Action $post = $this->getRequest()->getPost(); $users = Application_Model_User::getUsersDataTablesInfo($post); - die(json_encode($users)); + $this->_helper->json->sendJson($users); } public function getUserDataAction() @@ -135,7 +135,7 @@ class UserController extends Zend_Controller_Action && $formData['cu_login'] == 'admin') { $this->view->form = $form; $this->view->successMessage = "
"._("Specific action is not allowed in demo version!")."
"; - die(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); + $this->_helper->json->sendJson(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); } else if ($form->isValid($formData) && $form->validateLogin($formData['cu_login'], $formData['cu_user_id'])) { $user = new Application_Model_User($formData['cu_user_id']); From f145ede01b99823a96554cad3b5e58bd186315c5 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 31 Jan 2013 17:45:57 -0500 Subject: [PATCH 046/208] CC-4905: Unit tests for Pypo -whitespace removal --- python_apps/pypo/tests/test_modify_cue_in.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/python_apps/pypo/tests/test_modify_cue_in.py b/python_apps/pypo/tests/test_modify_cue_in.py index d5049bde5..da17fd53f 100644 --- a/python_apps/pypo/tests/test_modify_cue_in.py +++ b/python_apps/pypo/tests/test_modify_cue_in.py @@ -10,7 +10,6 @@ telnet_lock = Lock() pp = PypoPush(pypoPush_q, telnet_lock) def test_modify_cue_in(): - link = pp.modify_first_link_cue_point([]) assert len(link) == 0 @@ -25,5 +24,3 @@ def test_modify_cue_in(): link = pp.modify_first_link_cue_point(link) assert len(link) == 1 - - From 0eb6b596adc76e9bad7abc8eeae6ab94d5ea8330 Mon Sep 17 00:00:00 2001 From: Sebastian Matuszewski Date: Fri, 1 Feb 2013 00:02:01 +0100 Subject: [PATCH 047/208] Polish locale update (not full - 75%) --- .../locale/pl_PL/LC_MESSAGES/airtime.mo | Bin 0 -> 39790 bytes .../locale/pl_PL/LC_MESSAGES/airtime.po | 3658 +++++++++++++++++ 2 files changed, 3658 insertions(+) create mode 100644 airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo create mode 100644 airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.po diff --git a/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo new file mode 100644 index 0000000000000000000000000000000000000000..996a1063afe7f1a6885d9c73004c526086949234 GIT binary patch literal 39790 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 Xdgc, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Airtime 2.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-01-15 10:36-0500\n" +"PO-Revision-Date: 2013-01-31 11:58+0100\n" +"Last-Translator: Sebastian Matuszewski \n" +"Language-Team: SEMATpl & PallottiFM \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: Polski\n" + +#: airtime_mvc/application/configs/navigation.php:12 +msgid "Now Playing" +msgstr "Aktualnie odtwarzne" + +#: airtime_mvc/application/configs/navigation.php:19 +msgid "Add Media" +msgstr "Dodaj media" + +#: airtime_mvc/application/configs/navigation.php:26 +msgid "Library" +msgstr "Biblioteka" + +#: airtime_mvc/application/configs/navigation.php:33 +msgid "Calendar" +msgstr "Kalendarz" + +#: airtime_mvc/application/configs/navigation.php:40 +msgid "System" +msgstr "System" + +#: airtime_mvc/application/configs/navigation.php:45 +#: airtime_mvc/application/views/scripts/preference/index.phtml:2 +msgid "Preferences" +msgstr "Preferencje" + +#: airtime_mvc/application/configs/navigation.php:50 +msgid "Users" +msgstr "Użytkownicy" + +#: airtime_mvc/application/configs/navigation.php:57 +msgid "Media Folders" +msgstr "Folder z mediami" + +#: airtime_mvc/application/configs/navigation.php:64 +msgid "Streams" +msgstr "Strumienie" + +#: airtime_mvc/application/configs/navigation.php:70 +#: airtime_mvc/application/controllers/PreferenceController.php:133 +msgid "Support Feedback" +msgstr "Wsparcie Feedback" + +#: airtime_mvc/application/configs/navigation.php:76 +#: airtime_mvc/application/controllers/LocaleController.php:364 +#: airtime_mvc/application/controllers/LocaleController.php:365 +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:5 +msgid "Status" +msgstr "Status" + +#: airtime_mvc/application/configs/navigation.php:83 +msgid "Playout History" +msgstr "Historia odtwarzania" + +#: airtime_mvc/application/configs/navigation.php:90 +msgid "Listener Stats" +msgstr "Statystyki słuchaczy" + +#: airtime_mvc/application/configs/navigation.php:99 +#: airtime_mvc/application/views/scripts/error/error.phtml:13 +msgid "Help" +msgstr "Pomoc" + +#: airtime_mvc/application/configs/navigation.php:104 +msgid "Getting Started" +msgstr "Jak zacząć" + +#: airtime_mvc/application/configs/navigation.php:111 +msgid "User Manual" +msgstr "Instrukcja użytkownika" + +#: airtime_mvc/application/configs/navigation.php:116 +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:2 +msgid "About" +msgstr "About" + +#: airtime_mvc/application/layouts/scripts/bare.phtml:5 +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 +msgid "Live stream" +msgstr "Transmisja na żywo" + +#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5 +#: airtime_mvc/application/controllers/LocaleController.php:34 +msgid "Audio Player" +msgstr "Odtwrzacz" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:27 +msgid "Logout" +msgstr "Wyloguj" + +#: airtime_mvc/application/layouts/scripts/login.phtml:16 +#, php-format +msgid "" +"Airtime Copyright ©Sourcefabric o.p.s. All rights reserved.%sMaintained " +"and distributed under GNU GPL v.3 by %sSourcefabric o.p.s%s" +msgstr "" +"Airtime Copyright ©Sourcefabric o.p.s. Wszelkie prawa zastrzeżone." +"%sUtrzymywany i rozpowszechniany na zasadach licencji GNU GPL v.3 by " +"%sSourcefabric o.p.s%s" + +#: airtime_mvc/application/models/StoredFile.php:810 +#: airtime_mvc/application/controllers/LocaleController.php:284 +msgid "Track preview" +msgstr "Podgląd utworu" + +#: airtime_mvc/application/models/StoredFile.php:812 +msgid "Playlist preview" +msgstr "Podgląd listy odtwarzania" + +#: airtime_mvc/application/models/StoredFile.php:815 +msgid "Webstream preview" +msgstr "Podgląd webstrumienia" + +#: airtime_mvc/application/models/StoredFile.php:817 +msgid "Smart Block" +msgstr "Smart Block" + +#: airtime_mvc/application/models/StoredFile.php:950 +msgid "Failed to create 'organize' directory." +msgstr "Katalog 'organize' nie może zostać utworzony." + +#: airtime_mvc/application/models/StoredFile.php:963 +#, php-format +msgid "" +"The file was not uploaded, there is %s MB of disk space left and the file " +"you are uploading has a size of %s MB." +msgstr "" +"Plik nie został przesłany, na dysku pozostało %s MB wolnego miejsca, a plik " +"który próbujesz przesłać ma %s MB." + +#: airtime_mvc/application/models/StoredFile.php:972 +msgid "" +"This file appears to be corrupted and will not be added to media library." +msgstr "" +"Ten plik jest prawdopodobnie uszkodzony i nie może zostać dodany do " +"biblioteki mediów." + +#: airtime_mvc/application/models/StoredFile.php:1008 +msgid "" +"The file was not uploaded, this error can occur if the computer hard drive " +"does not have enough disk space or the stor directory does not have correct " +"write permissions." +msgstr "" +"Plik nie został dodany, błąd ten może występować w przypadku kiedy nie ma " +"wystarczającej ilości wolnego miejsca na dysku lub katalog stor nie posiada " +"poprawnych uprawnień do zapisu." + +#: airtime_mvc/application/models/Preference.php:538 +msgid "Select Country" +msgstr "Wybierz kraj" + +#: airtime_mvc/application/models/MusicDir.php:160 +#, php-format +msgid "%s is already watched." +msgstr "%s jest teraz przeszukiwany." + +#: airtime_mvc/application/models/MusicDir.php:164 +#, php-format +msgid "%s contains nested watched directory: %s" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:168 +#, php-format +msgid "%s is nested within existing watched directory: %s" +msgstr "" + +#: airtime_mvc/application/models/MusicDir.php:189 +#: airtime_mvc/application/models/MusicDir.php:363 +#, php-format +msgid "%s is not a valid directory." +msgstr "%s nie jest poprawnym katalogiem." + +#: airtime_mvc/application/models/MusicDir.php:231 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list" +msgstr "" +"%s jest już ustawiony jako główny katalog, bądź znajduje się na liście " +"przeszukiwanych katalogów" + +#: airtime_mvc/application/models/MusicDir.php:381 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list." +msgstr "" +"%s jest już ustawiony jako główny katalog, bądź znajduje się na liście " +"przeszukiwanych katalogów." + +#: airtime_mvc/application/models/MusicDir.php:424 +#, php-format +msgid "%s doesn't exist in the watched list." +msgstr "%s nie występuje na liście przekądanych katalogów." + +#: airtime_mvc/application/models/Playlist.php:723 +#: airtime_mvc/application/models/Block.php:760 +msgid "Cue in and cue out are null." +msgstr "Cue-in i cue-out mają wartość null." + +#: airtime_mvc/application/models/Playlist.php:753 +#: airtime_mvc/application/models/Playlist.php:776 +#: airtime_mvc/application/models/Block.php:806 +#: airtime_mvc/application/models/Block.php:827 +msgid "Can't set cue in to be larger than cue out." +msgstr "Wartość cue-in nie może być większa niż cue-out." + +#: airtime_mvc/application/models/Playlist.php:760 +#: airtime_mvc/application/models/Playlist.php:801 +#: airtime_mvc/application/models/Block.php:795 +#: airtime_mvc/application/models/Block.php:851 +msgid "Can't set cue out to be greater than file length." +msgstr "Wartośc cue-out nie może być większa niż długość pliku." + +#: airtime_mvc/application/models/Playlist.php:794 +#: airtime_mvc/application/models/Block.php:862 +msgid "Can't set cue out to be smaller than cue in." +msgstr "Wartość cue-out nie może być mniejsza od cue-in." + +#: airtime_mvc/application/models/Show.php:180 +msgid "Shows can have a max length of 24 hours." +msgstr "Programy mogą mieć maksymalnie 24 godziny." + +#: airtime_mvc/application/models/Show.php:211 +#: airtime_mvc/application/forms/AddShowWhen.php:120 +msgid "End date/time cannot be in the past" +msgstr "Data lub czas zakończenia nie może być przeszły. " + +#: airtime_mvc/application/models/Show.php:222 +msgid "" +"Cannot schedule overlapping shows.\n" +"Note: Resizing a repeating show affects all of its repeats." +msgstr "" +"Nie można planować programów nakłądających się na siebie.\n" +"\vUwaga: zmiana programuu powoduje automatyczną zmianę wszystkich jego " +"powtórzeń." + +#: airtime_mvc/application/models/Webstream.php:157 +msgid "Length needs to be greater than 0 minutes" +msgstr "Długość musi być większa niż 0 minut." + +#: airtime_mvc/application/models/Webstream.php:162 +msgid "Length should be of form \"00h 00m\"" +msgstr "Długość powinna mieć postać \"00h 00m\"" + +#: airtime_mvc/application/models/Webstream.php:175 +msgid "URL should be of form \"http://domain\"" +msgstr "URL powinien mieć postać \"http://domain\"" + +#: airtime_mvc/application/models/Webstream.php:178 +msgid "URL should be 512 characters or less" +msgstr "URL powinien mieć 512 znaków lub mniej." + +#: airtime_mvc/application/models/Webstream.php:184 +msgid "No MIME type found for webstream." +msgstr "Nie znaleziono typu MIME dla webstreamu" + +#: airtime_mvc/application/models/Webstream.php:200 +msgid "Webstream name cannot be empty" +msgstr "Naw webstreamu nie może być pusta." + +#: airtime_mvc/application/models/Webstream.php:269 +msgid "Could not parse XSPF playlist" +msgstr "Nie można przeanalizować playlisty XSPF" + +#: airtime_mvc/application/models/Webstream.php:281 +msgid "Could not parse PLS playlist" +msgstr "Nie można przeanalizować playlisty PLS" + +#: airtime_mvc/application/models/Webstream.php:300 +msgid "Could not parse M3U playlist" +msgstr "Nie można przeanalizować playlisty M3U" + +#: airtime_mvc/application/models/Webstream.php:314 +#, fuzzy +msgid "Invalid webstream - This appears to be a file download." +msgstr "Nieprawidłowy webstream - wydaje się, że jest pobieraniem plików." + +#: airtime_mvc/application/models/Webstream.php:318 +#, php-format +msgid "Unrecognized stream type: %s" +msgstr "Nierozpoznany typu streamu: %s" + +#: airtime_mvc/application/models/ShowInstance.php:245 +msgid "Can't drag and drop repeating shows" +msgstr "Nie można przeciągać powtarzających się programów." + +#: airtime_mvc/application/models/ShowInstance.php:253 +msgid "Can't move a past show" +msgstr "Nie można przenieść przeszłego programu." + +#: airtime_mvc/application/models/ShowInstance.php:270 +msgid "Can't move show into past" +msgstr "Nie można przenieść programu w przeszłość." + +#: airtime_mvc/application/models/ShowInstance.php:276 +#: airtime_mvc/application/forms/AddShowWhen.php:254 +#: airtime_mvc/application/forms/AddShowWhen.php:268 +#: airtime_mvc/application/forms/AddShowWhen.php:291 +#: airtime_mvc/application/forms/AddShowWhen.php:297 +#: airtime_mvc/application/forms/AddShowWhen.php:302 +msgid "Cannot schedule overlapping shows" +msgstr "Nie można planować nakładających się programów." + +#: airtime_mvc/application/models/ShowInstance.php:290 +msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." +msgstr "" +"Nagrany materiał nie może zostać przeniesiony mniej niż 1 godzinę przed " +"powtórzeniem." + +#: airtime_mvc/application/models/ShowInstance.php:303 +msgid "Show was deleted because recorded show does not exist!" +msgstr "Program został usunięty, ponieważ nagranie nie istnieje!" + +#: airtime_mvc/application/models/ShowInstance.php:310 +msgid "Must wait 1 hour to rebroadcast." +msgstr "Musisz odczekać 1 godzinę, aby retransmitować." + +#: airtime_mvc/application/models/ShowInstance.php:342 +msgid "can't resize a past show" +msgstr "nie można zmienić rozmiaru przeszłego programu." + +#: airtime_mvc/application/models/ShowInstance.php:364 +msgid "Should not overlap shows" +msgstr "Programy nie powinny nakładać się." + +#: airtime_mvc/application/models/Auth.php:33 +#, php-format +msgid "" +"Hi %s, \n" +"\n" +"Click this link to reset your password: " +msgstr "" +"Cześć %s. \n" +"\n" +"Kliknij w ten link aby zresetować Twoje hasło:" + +#: airtime_mvc/application/models/Auth.php:36 +msgid "Airtime Password Reset" +msgstr "Resetowanie hasła Airtime" + +#: airtime_mvc/application/models/Scheduler.php:82 +msgid "The schedule you're viewing is out of date! (sched mismatch)" +msgstr "" +"Harmonogram, który przeglądasz jest nieaktualny! (harmonogram niedopasowany)" + +#: airtime_mvc/application/models/Scheduler.php:87 +msgid "The schedule you're viewing is out of date! (instance mismatch)" +msgstr "" +"Harmonogram, który przeglądasz jest nieaktualny! (instancje błędnie " +"dopasowane)" + +#: airtime_mvc/application/models/Scheduler.php:95 +#: airtime_mvc/application/models/Scheduler.php:347 +msgid "The schedule you're viewing is out of date!" +msgstr "Harmonogram, który przeglądasz jest nieaktualny!" + +#: airtime_mvc/application/models/Scheduler.php:105 +#, php-format +msgid "You are not allowed to schedule show %s." +msgstr "Nie posiadasz uprawnień, aby zaplanować program %s." + +#: airtime_mvc/application/models/Scheduler.php:109 +msgid "You cannot add files to recording shows." +msgstr "Nie możesz dodawać plików do nagranych programów." + +#: airtime_mvc/application/models/Scheduler.php:115 +#, php-format +msgid "The show %s is over and cannot be scheduled." +msgstr "" +"Program %s przekracza dopuszczalną długość i nie może zostać zaplanowany." + +#: airtime_mvc/application/models/Scheduler.php:122 +#, php-format +msgid "The show %s has been previously updated!" +msgstr "Program %s został zaktualizowany wcześniej!" + +#: airtime_mvc/application/models/Scheduler.php:141 +#: airtime_mvc/application/models/Scheduler.php:223 +msgid "A selected File does not exist!" +msgstr "Wybrany plik nie istnieje!" + +#: airtime_mvc/application/models/ShowBuilder.php:198 +#, php-format +msgid "Rebroadcast of %s from %s" +msgstr "Retransmisja z %s do %s" + +#: airtime_mvc/application/models/Block.php:1209 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:41 +msgid "Select criteria" +msgstr "Wybierz kryteria" + +#: airtime_mvc/application/models/Block.php:1210 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:42 +#: airtime_mvc/application/controllers/LocaleController.php:70 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:8 +msgid "Album" +msgstr "Album" + +#: airtime_mvc/application/models/Block.php:1211 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:43 +msgid "Bit Rate (Kbps)" +msgstr "Bit Rate (Kbps)" + +#: airtime_mvc/application/models/Block.php:1212 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:44 +#: airtime_mvc/application/controllers/LocaleController.php:72 +msgid "BPM" +msgstr "BMP" + +#: airtime_mvc/application/models/Block.php:1213 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:45 +#: airtime_mvc/application/controllers/LocaleController.php:73 +#: airtime_mvc/application/controllers/LocaleController.php:157 +msgid "Composer" +msgstr "Kompozytor" + +#: airtime_mvc/application/models/Block.php:1214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:46 +#: airtime_mvc/application/controllers/LocaleController.php:74 +msgid "Conductor" +msgstr "Dyrygent" + +#: airtime_mvc/application/models/Block.php:1215 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:47 +#: airtime_mvc/application/controllers/LocaleController.php:75 +#: airtime_mvc/application/controllers/LocaleController.php:158 +msgid "Copyright" +msgstr "Prawa autorskie" + +#: airtime_mvc/application/models/Block.php:1216 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:48 +#: airtime_mvc/application/controllers/LocaleController.php:69 +#: airtime_mvc/application/controllers/LocaleController.php:154 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:7 +msgid "Creator" +msgstr "Twórca" + +#: airtime_mvc/application/models/Block.php:1217 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:49 +#: airtime_mvc/application/controllers/LocaleController.php:76 +msgid "Encoded By" +msgstr "Kodowane przez" + +#: airtime_mvc/application/models/Block.php:1218 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:132 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:50 +#: airtime_mvc/application/controllers/LocaleController.php:77 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10 +msgid "Genre" +msgstr "Rodzaj" + +#: airtime_mvc/application/models/Block.php:1219 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:51 +#: airtime_mvc/application/controllers/LocaleController.php:78 +msgid "ISRC" +msgstr "ISRC" + +#: airtime_mvc/application/models/Block.php:1220 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:52 +#: airtime_mvc/application/controllers/LocaleController.php:79 +msgid "Label" +msgstr "Etykieta" + +#: airtime_mvc/application/models/Block.php:1221 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:53 +#: airtime_mvc/application/controllers/LocaleController.php:80 +msgid "Language" +msgstr "Język" + +#: airtime_mvc/application/models/Block.php:1222 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:54 +#: airtime_mvc/application/controllers/LocaleController.php:81 +msgid "Last Modified" +msgstr "Ostatnio modyfikowany" + +#: airtime_mvc/application/models/Block.php:1223 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:55 +#: airtime_mvc/application/controllers/LocaleController.php:82 +msgid "Last Played" +msgstr "Ostatnio odtwarzany" + +#: airtime_mvc/application/models/Block.php:1224 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:56 +#: airtime_mvc/application/controllers/LocaleController.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:156 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:9 +msgid "Length" +msgstr "Długość" + +#: airtime_mvc/application/models/Block.php:1225 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:57 +#: airtime_mvc/application/controllers/LocaleController.php:84 +msgid "Mime" +msgstr "Mime" + +#: airtime_mvc/application/models/Block.php:1226 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:58 +#: airtime_mvc/application/controllers/LocaleController.php:85 +msgid "Mood" +msgstr "Nastrój" + +#: airtime_mvc/application/models/Block.php:1227 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:59 +#: airtime_mvc/application/controllers/LocaleController.php:86 +msgid "Owner" +msgstr "Właściciel" + +#: airtime_mvc/application/models/Block.php:1228 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:60 +#: airtime_mvc/application/controllers/LocaleController.php:87 +msgid "Replay Gain" +msgstr "Normalizacja głośności (Replay Gain)" + +#: airtime_mvc/application/models/Block.php:1229 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:61 +msgid "Sample Rate (kHz)" +msgstr "Częstotliwość próbkowania (kHz)" + +#: airtime_mvc/application/models/Block.php:1230 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:62 +#: airtime_mvc/application/controllers/LocaleController.php:68 +#: airtime_mvc/application/controllers/LocaleController.php:153 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:6 +msgid "Title" +msgstr "Tytuł" + +#: airtime_mvc/application/models/Block.php:1231 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:63 +#: airtime_mvc/application/controllers/LocaleController.php:89 +msgid "Track Number" +msgstr "Numer utworu" + +#: airtime_mvc/application/models/Block.php:1232 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:64 +#: airtime_mvc/application/controllers/LocaleController.php:90 +msgid "Uploaded" +msgstr "Przesłano" + +#: airtime_mvc/application/models/Block.php:1233 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:65 +#: airtime_mvc/application/controllers/LocaleController.php:91 +msgid "Website" +msgstr "Strona internetowa" + +#: airtime_mvc/application/models/Block.php:1234 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:66 +#: airtime_mvc/application/controllers/LocaleController.php:92 +msgid "Year" +msgstr "Rok" + +#: airtime_mvc/application/common/DateHelper.php:335 +#, php-format +msgid "The year %s must be within the range of 1753 - 9999" +msgstr "Rok %s musi być w przedziale od 1753 do 9999" + +#: airtime_mvc/application/common/DateHelper.php:338 +#, php-format +msgid "%s-%s-%s is not a valid date" +msgstr "Data %s-%s-%s nie jest prawidłowa" + +#: airtime_mvc/application/common/DateHelper.php:362 +#, php-format +msgid "%s:%s:%s is not a valid time" +msgstr "Czas %s:%s:%s nie jest prawidłowy." + +#: airtime_mvc/application/forms/EmailServerPreferences.php:17 +msgid "Enable System Emails (Password Reset)" +msgstr "Włącz systemowe Emaile (Resetowanie hasła)" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:27 +msgid "Reset Password 'From' Email" +msgstr "Resetowanie hasła 'z' Emaila" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:34 +msgid "Configure Mail Server" +msgstr "Skonfiguruj serwer pocztowy" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:43 +msgid "Requires Authentication" +msgstr "Wymagana autoryzacja" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:53 +msgid "Mail Server" +msgstr "Serwer Email" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:67 +msgid "Email Address" +msgstr "Adres Email" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:82 +#: airtime_mvc/application/forms/PasswordChange.php:17 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:120 +msgid "Password" +msgstr "Hasło" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:109 +msgid "Port" +msgstr "Port" + +#: airtime_mvc/application/forms/RegisterAirtime.php:30 +#: airtime_mvc/application/forms/SupportSettings.php:21 +#: airtime_mvc/application/forms/GeneralPreferences.php:22 +msgid "Station Name" +msgstr "Nazwa stacji" + +#: airtime_mvc/application/forms/RegisterAirtime.php:39 +#: airtime_mvc/application/forms/SupportSettings.php:34 +msgid "Phone:" +msgstr "Telefon:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:51 +#: airtime_mvc/application/forms/AddUser.php:60 +#: airtime_mvc/application/forms/SupportSettings.php:46 +#: airtime_mvc/application/forms/EditUser.php:75 +msgid "Email:" +msgstr "Email:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:62 +#: airtime_mvc/application/forms/SupportSettings.php:57 +msgid "Station Web Site:" +msgstr "Strona internetowa stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:73 +#: airtime_mvc/application/forms/SupportSettings.php:68 +msgid "Country:" +msgstr "Kraj:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:84 +#: airtime_mvc/application/forms/SupportSettings.php:79 +msgid "City:" +msgstr "Miasto:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:96 +#: airtime_mvc/application/forms/SupportSettings.php:91 +msgid "Station Description:" +msgstr "Opis stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:106 +#: airtime_mvc/application/forms/SupportSettings.php:101 +msgid "Station Logo:" +msgstr "Logo stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:116 +#: airtime_mvc/application/forms/SupportSettings.php:112 +#: airtime_mvc/application/controllers/LocaleController.php:333 +msgid "Send support feedback" +msgstr "Wyślij feedback do supportu" + +#: airtime_mvc/application/forms/RegisterAirtime.php:126 +#: airtime_mvc/application/forms/SupportSettings.php:122 +msgid "Promote my station on Sourcefabric.org" +msgstr "Promuj moją stację na Sourcefabric.org" + +#: airtime_mvc/application/forms/RegisterAirtime.php:149 +#: airtime_mvc/application/forms/SupportSettings.php:148 +#, php-format +msgid "By checking this box, I agree to Sourcefabric's %sprivacy policy%s." +msgstr "" +"Zanaczając to pole, zgadzasz się z %spolityką prywatności%s Sourcefabric's." + +#: airtime_mvc/application/forms/RegisterAirtime.php:166 +#: airtime_mvc/application/forms/SupportSettings.php:171 +msgid "You have to agree to privacy policy." +msgstr "Musisz zgodzić się z polityką prywatności." + +#: airtime_mvc/application/forms/PasswordChange.php:28 +msgid "Confirm new password" +msgstr "Potwierdź nowe hasło" + +#: airtime_mvc/application/forms/PasswordChange.php:36 +msgid "Password confirmation does not match your password." +msgstr "Potwierdzenie hasła nie jest takie samo jak hasło." + +#: airtime_mvc/application/forms/PasswordChange.php:43 +msgid "Get new password" +msgstr "Pobierz nowe hasło" + +#: airtime_mvc/application/forms/DateRange.php:16 +#: airtime_mvc/application/forms/ShowBuilder.php:18 +msgid "Date Start:" +msgstr "Data rozpoczęcia:" + +#: airtime_mvc/application/forms/DateRange.php:35 +#: airtime_mvc/application/forms/DateRange.php:63 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:99 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:118 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:123 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:144 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:174 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:186 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:198 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:210 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26 +#: airtime_mvc/application/forms/ShowBuilder.php:37 +#: airtime_mvc/application/forms/ShowBuilder.php:65 +msgid "Invalid character entered" +msgstr "Wprowadzony znak jest nieprawidłowy" + +#: airtime_mvc/application/forms/DateRange.php:44 +#: airtime_mvc/application/forms/AddShowRepeats.php:40 +#: airtime_mvc/application/forms/ShowBuilder.php:46 +msgid "Date End:" +msgstr "Data zakończenia:" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 +#: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 +msgid "Value is required and can't be empty" +msgstr "Pole jest wymagane i nie może być puste" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 +msgid "" +"'%value%' is no valid email address in the basic format local-part@hostname" +msgstr "" +"'%value%' nie jest poprawnym adresem email w podstawowym formacie local-" +"part@hostname" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:33 +msgid "'%value%' does not fit the date format '%format%'" +msgstr "'%value%' nie pasuje do formatu daty '%format%'" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:59 +msgid "'%value%' is less than %min% characters long" +msgstr "'%value%' ma mniej niż %min% znaków" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:64 +msgid "'%value%' is more than %max% characters long" +msgstr "'%value%' ma więcej niż %max% znaków" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:76 +msgid "'%value%' is not between '%min%' and '%max%', inclusively" +msgstr "'%value%' nie jest pomiędzy '%min%' and '%max%'. " + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 +msgid "Passwords do not match" +msgstr "Hasła nie są identyczne" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 +msgid "days" +msgstr "dni" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:63 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:58 +msgid "Day must be specified" +msgstr "Dzień musi być określony" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:68 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:63 +msgid "Time must be specified" +msgstr "Czas musi być określony" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:95 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:86 +msgid "Must wait at least 1 hour to rebroadcast" +msgstr "Musisz odczekać przynajmniej 1 godzinę, aby retransmitować" + +#: airtime_mvc/application/forms/AddShowRR.php:10 +msgid "Record from Line In?" +msgstr "Nagrywać z wejścia liniowego?" + +#: airtime_mvc/application/forms/AddShowRR.php:16 +msgid "Rebroadcast?" +msgstr "Retransmitować?" + +#: airtime_mvc/application/forms/AddShowStyle.php:10 +msgid "Background Colour:" +msgstr "Kolor tła:" + +#: airtime_mvc/application/forms/AddShowStyle.php:29 +msgid "Text Colour:" +msgstr "Kolor tekstu:" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:19 +msgid "Auto Switch Off" +msgstr "Automatyczne przejście wyłączone" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:26 +msgid "Auto Switch On" +msgstr "Automatyczne przejście włączone" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:33 +msgid "Switch Transition Fade (s)" +msgstr "Efekt zanikania między przejściami (s)" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:36 +msgid "enter a time in seconds 00{.000000}" +msgstr "wpisz czas w sekundach 00{.000000}" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:45 +msgid "Master Username" +msgstr "Nazwa użytkownika Master" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:62 +msgid "Master Password" +msgstr "Hasło Master" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:70 +msgid "Master Source Connection URL" +msgstr "Adres URL źródła Master" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:78 +msgid "Show Source Connection URL" +msgstr "Adres URL źródła Program" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:87 +msgid "Master Source Port" +msgstr "Port źródła Master" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:90 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:109 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:112 +msgid "Only numbers are allowed." +msgstr "Dozwolone tylko cyfry." + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:96 +msgid "Master Source Mount Point" +msgstr "Punkt montowania źródła Master" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:106 +msgid "Show Source Port" +msgstr "Port źródła Program" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:115 +msgid "Show Source Mount Point" +msgstr "Punkt montowania źródła Program" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:153 +msgid "You cannot use same port as Master DJ port." +msgstr "Nie możesz użyć tego samego portu jako Master DJ." + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:164 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:182 +#, php-format +msgid "Port %s is not available" +msgstr "Port %s nie jest dostępny" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:14 +#, fuzzy +msgid "Import Folder:" +msgstr "Katalog importu:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:25 +msgid "Watched Folders:" +msgstr "Przeszukiwane katalogi:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:40 +msgid "Not a valid Directory" +msgstr "Nieprawidłowy katalog" + +#: airtime_mvc/application/forms/AddUser.php:23 +#: airtime_mvc/application/forms/Login.php:19 +#: airtime_mvc/application/forms/EditUser.php:30 +msgid "Username:" +msgstr "Nazwa użytkownika:" + +#: airtime_mvc/application/forms/AddUser.php:32 +#: airtime_mvc/application/forms/Login.php:34 +#: airtime_mvc/application/forms/EditUser.php:41 +msgid "Password:" +msgstr "Hasło:" + +#: airtime_mvc/application/forms/AddUser.php:40 +#: airtime_mvc/application/forms/EditUser.php:50 +msgid "Verify Password:" +msgstr "Powtórz hasło:" + +#: airtime_mvc/application/forms/AddUser.php:48 +#: airtime_mvc/application/forms/EditUser.php:59 +msgid "Firstname:" +msgstr "Imię:" + +#: airtime_mvc/application/forms/AddUser.php:54 +#: airtime_mvc/application/forms/EditUser.php:67 +msgid "Lastname:" +msgstr "Nazwisko:" + +#: airtime_mvc/application/forms/AddUser.php:69 +#: airtime_mvc/application/forms/EditUser.php:86 +msgid "Mobile Phone:" +msgstr "Telefon:" + +#: airtime_mvc/application/forms/AddUser.php:75 +#: airtime_mvc/application/forms/EditUser.php:94 +msgid "Skype:" +msgstr "Skype:" + +#: airtime_mvc/application/forms/AddUser.php:81 +#: airtime_mvc/application/forms/EditUser.php:102 +msgid "Jabber:" +msgstr "Jabber:" + +#: airtime_mvc/application/forms/AddUser.php:88 +msgid "User Type:" +msgstr "Typ użytkownika:" + +#: airtime_mvc/application/forms/AddUser.php:92 +#: airtime_mvc/application/controllers/LocaleController.php:316 +msgid "Guest" +msgstr "Gość" + +#: airtime_mvc/application/forms/AddUser.php:93 +#: airtime_mvc/application/controllers/LocaleController.php:314 +msgid "DJ" +msgstr "DJ" + +#: airtime_mvc/application/forms/AddUser.php:94 +#: airtime_mvc/application/controllers/LocaleController.php:315 +msgid "Program Manager" +msgstr "Menadżer programowy" + +#: airtime_mvc/application/forms/AddUser.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:313 +msgid "Admin" +msgstr "Administrator" + +#: airtime_mvc/application/forms/AddUser.php:103 +#: airtime_mvc/application/forms/SupportSettings.php:158 +#: airtime_mvc/application/forms/EditAudioMD.php:134 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:20 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:15 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:6 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:116 +#: airtime_mvc/application/views/scripts/preference/index.phtml:6 +#: airtime_mvc/application/views/scripts/preference/index.phtml:14 +msgid "Save" +msgstr "Zpisz" + +#: airtime_mvc/application/forms/AddUser.php:113 +#: airtime_mvc/application/forms/EditUser.php:132 +msgid "Login name is not unique." +msgstr "Nazwa użytkownika nie jest unikalna." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:48 +msgid "Enabled:" +msgstr "Włączone:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:57 +msgid "Stream Type:" +msgstr "Typ strumienia:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:67 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9 +msgid "Bit Rate:" +msgstr "Bit Rate:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:77 +msgid "Service Type:" +msgstr "Typ usługi:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:87 +msgid "Channels:" +msgstr "Kanały:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "1 - Mono" +msgstr "1 - Mono" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "2 - Stereo" +msgstr "2 - Stereo" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:97 +msgid "Server" +msgstr "Serwer" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:141 +msgid "URL" +msgstr "URL" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:153 +msgid "Name" +msgstr "Nazwa" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:162 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:51 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:53 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:40 +msgid "Description" +msgstr "Opis" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:171 +msgid "Mount Point" +msgstr "Punkt montowania" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:183 +#: airtime_mvc/application/forms/PasswordRestore.php:25 +#: airtime_mvc/application/views/scripts/user/add-user.phtml:18 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:195 +msgid "Admin User" +msgstr "Login Administratora" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:207 +msgid "Admin Password" +msgstr "Hasło Administratora" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:218 +#: airtime_mvc/application/controllers/LocaleController.php:173 +msgid "Getting information from the server..." +msgstr "Pobieranie informacji z serwera..." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:232 +msgid "Server cannot be empty." +msgstr "Serwer nie może być pusty." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:237 +msgid "Port cannot be empty." +msgstr "Port nie może być pusty." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:243 +msgid "Mount cannot be empty with Icecast server." +msgstr "Punkt montowania nie może być pusty dla serwera Icecast." + +#: airtime_mvc/application/forms/AddShowRepeats.php:11 +msgid "Repeat Type:" +msgstr "Typ powtarzania:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:14 +msgid "weekly" +msgstr "tygodniowy" + +#: airtime_mvc/application/forms/AddShowRepeats.php:15 +msgid "bi-weekly" +msgstr "dwutygodniowy" + +#: airtime_mvc/application/forms/AddShowRepeats.php:16 +msgid "monthly" +msgstr "miesięczny" + +#: airtime_mvc/application/forms/AddShowRepeats.php:25 +msgid "Select Days:" +msgstr "Wybrane dni:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:28 +#: airtime_mvc/application/controllers/LocaleController.php:253 +msgid "Sun" +msgstr "Nie" + +#: airtime_mvc/application/forms/AddShowRepeats.php:29 +#: airtime_mvc/application/controllers/LocaleController.php:254 +msgid "Mon" +msgstr "Pon" + +#: airtime_mvc/application/forms/AddShowRepeats.php:30 +#: airtime_mvc/application/controllers/LocaleController.php:255 +msgid "Tue" +msgstr "Wt" + +#: airtime_mvc/application/forms/AddShowRepeats.php:31 +#: airtime_mvc/application/controllers/LocaleController.php:256 +msgid "Wed" +msgstr "Śr" + +#: airtime_mvc/application/forms/AddShowRepeats.php:32 +#: airtime_mvc/application/controllers/LocaleController.php:257 +msgid "Thu" +msgstr "Czw" + +#: airtime_mvc/application/forms/AddShowRepeats.php:33 +#: airtime_mvc/application/controllers/LocaleController.php:258 +msgid "Fri" +msgstr "Pt" + +#: airtime_mvc/application/forms/AddShowRepeats.php:34 +#: airtime_mvc/application/controllers/LocaleController.php:259 +msgid "Sat" +msgstr "Sob" + +#: airtime_mvc/application/forms/AddShowRepeats.php:53 +msgid "No End?" +msgstr "Bez końca?" + +#: airtime_mvc/application/forms/AddShowRepeats.php:79 +msgid "End date must be after start date" +msgstr "Data końcowa musi być po dacie początkowej" + +#: airtime_mvc/application/forms/AddShowWhat.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:127 +msgid "Name:" +msgstr "Nazwa:" + +#: airtime_mvc/application/forms/AddShowWhat.php:30 +msgid "Untitled Show" +msgstr "Program bez nazwy" + +#: airtime_mvc/application/forms/AddShowWhat.php:36 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:131 +msgid "URL:" +msgstr "URL:" + +#: airtime_mvc/application/forms/AddShowWhat.php:45 +#: airtime_mvc/application/forms/EditAudioMD.php:47 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11 +msgid "Genre:" +msgstr "Rodziaj:" + +#: airtime_mvc/application/forms/AddShowWhat.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:130 +msgid "Description:" +msgstr "Opis:" + +#: airtime_mvc/application/forms/AddShowWho.php:10 +msgid "Search Users:" +msgstr "Wyszukiwanie Użytkowników:" + +#: airtime_mvc/application/forms/AddShowWho.php:24 +msgid "DJs:" +msgstr "DJs" + +#: airtime_mvc/application/forms/StreamSetting.php:22 +msgid "Hardware Audio Output" +msgstr "Sprzętowe wyjście Audio" + +#: airtime_mvc/application/forms/StreamSetting.php:33 +msgid "Output Type" +msgstr "Typ wyjścia" + +#: airtime_mvc/application/forms/StreamSetting.php:44 +msgid "Icecast Vorbis Metadata" +msgstr "Metadane Icecast Vorbis" + +#: airtime_mvc/application/forms/StreamSetting.php:54 +msgid "Stream Label:" +msgstr "Etykieta strumienia:" + +#: airtime_mvc/application/forms/StreamSetting.php:55 +msgid "Artist - Title" +msgstr "Artysta - Tytuł" + +#: airtime_mvc/application/forms/StreamSetting.php:56 +msgid "Show - Artist - Title" +msgstr "Program - Artysta -Tytuł" + +#: airtime_mvc/application/forms/StreamSetting.php:57 +msgid "Station name - Show name" +msgstr "Nazwa stacji - nazwa Ptogramu" + +#: airtime_mvc/application/forms/StreamSetting.php:63 +msgid "Off Air Metadata" +msgstr "Metadane Off Air" + +#: airtime_mvc/application/forms/StreamSetting.php:69 +msgid "Enable Replay Gain" +msgstr "Włącz normalizację głośności (Replay Gain)" + +#: airtime_mvc/application/forms/StreamSetting.php:75 +msgid "Replay Gain Modifier" +msgstr "Modyfikator normalizacji głośności" + +#: airtime_mvc/application/forms/PasswordRestore.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: airtime_mvc/application/forms/PasswordRestore.php:36 +msgid "Restore password" +msgstr "Przywracanie hasła" + +#: airtime_mvc/application/forms/PasswordRestore.php:46 +#: airtime_mvc/application/forms/EditAudioMD.php:144 +#: airtime_mvc/application/controllers/LocaleController.php:310 +msgid "Cancel" +msgstr "Zamknij" + +#: airtime_mvc/application/forms/AddShowWhen.php:16 +msgid "'%value%' does not fit the time format 'HH:mm'" +msgstr "" + +#: airtime_mvc/application/forms/AddShowWhen.php:22 +msgid "Date/Time Start:" +msgstr "Data/Czas rozpoczęcia:" + +#: airtime_mvc/application/forms/AddShowWhen.php:49 +msgid "Date/Time End:" +msgstr "Data/Czas zakończenia:" + +#: airtime_mvc/application/forms/AddShowWhen.php:74 +msgid "Duration:" +msgstr "Czas trwania:" + +#: airtime_mvc/application/forms/AddShowWhen.php:83 +msgid "Repeats?" +msgstr "Powtarzanie?" + +#: airtime_mvc/application/forms/AddShowWhen.php:103 +msgid "Cannot create show in the past" +msgstr "Nie można utworzyć programu w przeszłości" + +#: airtime_mvc/application/forms/AddShowWhen.php:111 +msgid "Cannot modify start date/time of the show that is already started" +msgstr "Nie mozna zmienić daty/czasu programu, który się już rozpoczął" + +#: airtime_mvc/application/forms/AddShowWhen.php:130 +msgid "Cannot have duration 00h 00m" +msgstr "Czas trwania nie może mieć 00h 00m" + +#: airtime_mvc/application/forms/AddShowWhen.php:134 +msgid "Cannot have duration greater than 24h" +msgstr "Czas trwania nie może być dłuższy niż 24h" + +#: airtime_mvc/application/forms/AddShowWhen.php:138 +msgid "Cannot have duration < 0m" +msgstr "Czas trwania nie może być <0m" + +#: airtime_mvc/application/forms/EditAudioMD.php:19 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:3 +msgid "Title:" +msgstr "Tytuł:" + +#: airtime_mvc/application/forms/EditAudioMD.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:4 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:28 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:129 +msgid "Creator:" +msgstr "Twórca:" + +#: airtime_mvc/application/forms/EditAudioMD.php:33 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:5 +msgid "Album:" +msgstr "Album:" + +#: airtime_mvc/application/forms/EditAudioMD.php:40 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:6 +msgid "Track:" +msgstr "Utwór:" + +#: airtime_mvc/application/forms/EditAudioMD.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12 +msgid "Year:" +msgstr "Rok:" + +#: airtime_mvc/application/forms/EditAudioMD.php:66 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13 +msgid "Label:" +msgstr "Etykieta:" + +#: airtime_mvc/application/forms/EditAudioMD.php:73 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15 +msgid "Composer:" +msgstr "Kompozytor:" + +#: airtime_mvc/application/forms/EditAudioMD.php:80 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16 +msgid "Conductor:" +msgstr "dyrygent:" + +#: airtime_mvc/application/forms/EditAudioMD.php:87 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10 +msgid "Mood:" +msgstr "Nastrój:" + +#: airtime_mvc/application/forms/EditAudioMD.php:95 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:14 +msgid "BPM:" +msgstr "BPM:" + +#: airtime_mvc/application/forms/EditAudioMD.php:104 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17 +msgid "Copyright:" +msgstr "Prawa autorskie:" + +#: airtime_mvc/application/forms/EditAudioMD.php:111 +msgid "ISRC Number:" +msgstr "Numer ISRC:" + +#: airtime_mvc/application/forms/EditAudioMD.php:118 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19 +msgid "Website:" +msgstr "Strona internetowa:" + +#: airtime_mvc/application/forms/EditAudioMD.php:125 +#: airtime_mvc/application/forms/Login.php:48 +#: airtime_mvc/application/forms/EditUser.php:111 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20 +msgid "Language:" +msgstr "Język:" + +#: airtime_mvc/application/forms/Login.php:65 +#: airtime_mvc/application/views/scripts/login/index.phtml:3 +msgid "Login" +msgstr "Zaloguj" + +#: airtime_mvc/application/forms/Login.php:83 +msgid "Type the characters you see in the picture below." +msgstr "Wpisz znaki, które widzisz na obrazku poniżej." + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:78 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:94 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:329 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:367 +#: airtime_mvc/application/controllers/LocaleController.php:142 +msgid "Select modifier" +msgstr "Wybierz modyfikator" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:79 +#: airtime_mvc/application/controllers/LocaleController.php:143 +msgid "contains" +msgstr "zawiera" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:80 +#: airtime_mvc/application/controllers/LocaleController.php:144 +msgid "does not contain" +msgstr "nie zawiera" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:81 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:145 +msgid "is" +msgstr "jest" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:82 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:96 +#: airtime_mvc/application/controllers/LocaleController.php:146 +msgid "is not" +msgstr "nie jest" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:147 +msgid "starts with" +msgstr "zaczyna" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:84 +#: airtime_mvc/application/controllers/LocaleController.php:148 +msgid "ends with" +msgstr "kończy" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:97 +#: airtime_mvc/application/controllers/LocaleController.php:149 +msgid "is greater than" +msgstr "jest większa niż" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:98 +#: airtime_mvc/application/controllers/LocaleController.php:150 +msgid "is less than" +msgstr "jest mniejsza niż" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:99 +#: airtime_mvc/application/controllers/LocaleController.php:151 +msgid "is in the range" +msgstr "mieści się w zakresie" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:109 +msgid "hours" +msgstr "godziny" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:110 +msgid "minutes" +msgstr "minuty" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:111 +msgid "items" +msgstr "elementy" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:133 +msgid "Set smart block type:" +msgstr "Ustaw typ smart block:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:136 +#: airtime_mvc/application/controllers/LibraryController.php:501 +msgid "Static" +msgstr "Statyczne" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:137 +#: airtime_mvc/application/controllers/LibraryController.php:504 +msgid "Dynamic" +msgstr "Dynamiczne" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:248 +msgid "Allow Repeat Tracks:" +msgstr "Pozwól na powtarzanie utworów:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:265 +msgid "Limit to" +msgstr "Ogranicz do" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:287 +msgid "Generate playlist content and save criteria" +msgstr "Generuj zawartość listy odtwarzania i zapisz kryteria" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:289 +msgid "Generate" +msgstr "Generuj" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:295 +msgid "Shuffle playlist content" +msgstr "Losowa zawartość listy odtwarzania" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:297 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle" +msgstr "Losowa" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:461 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:473 +msgid "Limit cannot be empty or smaller than 0" +msgstr "Limit nie może być pusty oraz mniejszy od 0" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:466 +msgid "Limit cannot be more than 24 hrs" +msgstr "Limit nie może być większy niż 24 godziny" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:476 +msgid "The value should be an integer" +msgstr "Wartość ta powinna być liczbą całkowitą" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:479 +msgid "500 is the max item limit value you can set" +msgstr "" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:490 +msgid "You must select Criteria and Modifier" +msgstr "Musisz wybrać kryteria i modyfikaroe" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:497 +msgid "'Length' should be in '00:00:00' format" +msgstr "'Długość' powinna być w formacie '00:00:00'" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:502 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:515 +msgid "" +"The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00)" +msgstr "" +"Wartość powinna być w formacie timestamp (np. 0000-00-00 or 00-00-00 " +"00:00:00)" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:529 +msgid "The value has to be numeric" +msgstr "Wartość musi być liczbą" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:534 +msgid "The value should be less then 2147483648" +msgstr "Wartość powinna być mniejsza niż 2147483648" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:539 +#, php-format +msgid "The value should be less than %s characters" +msgstr "Wartość powinna posiadać mniej niż %s znaków" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:546 +msgid "Value cannot be empty" +msgstr "Wartość nie może być pusta" + +#: airtime_mvc/application/forms/ShowBuilder.php:72 +msgid "Show:" +msgstr "Program." + +#: airtime_mvc/application/forms/ShowBuilder.php:80 +msgid "All My Shows:" +msgstr "Wszystkie moje programy:" + +#: airtime_mvc/application/forms/EditUser.php:118 +msgid "Timezone:" +msgstr "Strefa czasowa:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:10 +msgid "Use Airtime Authentication:" +msgstr "Użyj uwieżytelnienia Airtime:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:16 +msgid "Use Custom Authentication:" +msgstr "Użyj własnegu uwieżytelnienia:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:26 +msgid "Custom Username" +msgstr "Niestandardowa nazwa użytkownika" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:39 +msgid "Custom Password" +msgstr "Niestandardowe hasło" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:63 +msgid "Username field cannot be empty." +msgstr "Pole nazwy użytkownika nie może być puste." + +#: airtime_mvc/application/forms/AddShowLiveStream.php:68 +msgid "Password field cannot be empty." +msgstr "Pole hasła nie może być puste." + +#: airtime_mvc/application/forms/GeneralPreferences.php:34 +msgid "Default Fade (s):" +msgstr "Domyślne przejście (Fade) (s):" + +#: airtime_mvc/application/forms/GeneralPreferences.php:39 +msgid "enter a time in seconds 0{.0}" +msgstr "wpisz czas w sekundach 0{.0}" + +#: airtime_mvc/application/forms/GeneralPreferences.php:48 +#, php-format +msgid "" +"Allow Remote Websites To Access \"Schedule\" Info?%s (Enable this to make " +"front-end widgets work.)" +msgstr "" +"Umożliw dostęp zdalnym stronom \"Plan\" Info?%s (Włącz, aby zewnętrzne " +"widgety działały.)" + +#: airtime_mvc/application/forms/GeneralPreferences.php:49 +msgid "Disabled" +msgstr "Wyłączone" + +#: airtime_mvc/application/forms/GeneralPreferences.php:50 +msgid "Enabled" +msgstr "Włączone" + +#: airtime_mvc/application/forms/GeneralPreferences.php:56 +msgid "Default Interface Language" +msgstr "Domyślny język" + +#: airtime_mvc/application/forms/GeneralPreferences.php:64 +msgid "Default Interface Timezone" +msgstr "Domyślna strefa czasowa" + +#: airtime_mvc/application/forms/GeneralPreferences.php:72 +msgid "Week Starts On" +msgstr "Tydzień zaczynaj od" + +#: airtime_mvc/application/forms/GeneralPreferences.php:82 +#: airtime_mvc/application/controllers/LocaleController.php:246 +msgid "Sunday" +msgstr "Niedziela" + +#: airtime_mvc/application/forms/GeneralPreferences.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:247 +msgid "Monday" +msgstr "Poniedziałek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:84 +#: airtime_mvc/application/controllers/LocaleController.php:248 +msgid "Tuesday" +msgstr "Wtorek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:85 +#: airtime_mvc/application/controllers/LocaleController.php:249 +msgid "Wednesday" +msgstr "Środa" + +#: airtime_mvc/application/forms/GeneralPreferences.php:86 +#: airtime_mvc/application/controllers/LocaleController.php:250 +msgid "Thursday" +msgstr "Czwartek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:87 +#: airtime_mvc/application/controllers/LocaleController.php:251 +msgid "Friday" +msgstr "Piątek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:88 +#: airtime_mvc/application/controllers/LocaleController.php:252 +msgid "Saturday" +msgstr "Sobota" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:16 +msgid "Automatically Upload Recorded Shows" +msgstr "Automatycznie wysyłaj nagrane programy" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:26 +msgid "Enable SoundCloud Upload" +msgstr "Włącz wysyłanie do SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:36 +msgid "Automatically Mark Files \"Downloadable\" on SoundCloud" +msgstr "Automatycznie oznaczaj pliki \"Do pobrania\" na SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:47 +msgid "SoundCloud Email" +msgstr "Email SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:67 +msgid "SoundCloud Password" +msgstr "Hasło SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:87 +msgid "SoundCloud Tags: (separate tags with spaces)" +msgstr "Tagi SoundCloud: (oddzielaj tagi spacją)" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:99 +msgid "Default Genre:" +msgstr "Domyślny gatunek:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:109 +msgid "Default Track Type:" +msgstr "Domyślny typ utworu:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:113 +msgid "Original" +msgstr "Oryfinalny" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:114 +msgid "Remix" +msgstr "Remix" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:115 +msgid "Live" +msgstr "Na żywo" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:116 +msgid "Recording" +msgstr "Nagranie" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:117 +msgid "Spoken" +msgstr "Mówiony" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:118 +msgid "Podcast" +msgstr "Podcast" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:119 +msgid "Demo" +msgstr "Demo" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:120 +msgid "Work in progress" +msgstr "Praca w toku" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:121 +msgid "Stem" +msgstr "Rdzeń" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:122 +msgid "Loop" +msgstr "Pętla" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:123 +msgid "Sound Effect" +msgstr "Efekt dźwiękowy" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:124 +msgid "One Shot Sample" +msgstr "Jeden strzał próbki" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:125 +msgid "Other" +msgstr "Pozostałe" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:133 +msgid "Default License:" +msgstr "Domyślna licencja:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:137 +msgid "The work is in the public domain" +msgstr "Praca w domenie publicznej" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:138 +msgid "All rights are reserved" +msgstr "Wszelkie prawa zastrzeżone" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:139 +msgid "Creative Commons Attribution" +msgstr "Creative Commons Attribution" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:140 +msgid "Creative Commons Attribution Noncommercial" +msgstr "Creative Commons Attribution Noncommercial" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:141 +msgid "Creative Commons Attribution No Derivative Works" +msgstr "Creative Commons Attribution No Derivative Works" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:142 +msgid "Creative Commons Attribution Share Alike" +msgstr "Creative Commons Attribution Share Alike" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:143 +msgid "Creative Commons Attribution Noncommercial Non Derivate Works" +msgstr "Creative Commons Attribution Noncommercial Non Derivate Works" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:144 +msgid "Creative Commons Attribution Noncommercial Share Alike" +msgstr "Creative Commons Attribution Noncommercial Share Alike" + +#: airtime_mvc/application/controllers/DashboardController.php:36 +#: airtime_mvc/application/controllers/DashboardController.php:85 +msgid "You don't have permission to disconnect source." +msgstr "Nie masz uprawnień aby rozłączyć to źródło." + +#: airtime_mvc/application/controllers/DashboardController.php:38 +#: airtime_mvc/application/controllers/DashboardController.php:87 +msgid "There is no source connected to this input." +msgstr "Źródło nie jest podłączone do tego wyjścia." + +#: airtime_mvc/application/controllers/DashboardController.php:82 +msgid "You don't have permission to switch source." +msgstr "Nie masz uprawnień do przełączenia źródła." + +#: airtime_mvc/application/controllers/LoginController.php:34 +msgid "Please enter your user name and password" +msgstr "Proszę wpisz swoją nazwę użytkownika i hasło" + +#: airtime_mvc/application/controllers/LoginController.php:77 +msgid "Wrong username or password provided. Please try again." +msgstr "Błędna nazwa użytkownia lub hasło. Proszę spróbuj ponownie." + +#: airtime_mvc/application/controllers/LoginController.php:139 +msgid "" +"Email could not be sent. Check your mail server settings and ensure it has " +"been configured properly." +msgstr "" +"Email nie został wysłany. Sprawdź Twoje ustawienia serwera pocztowego i " +"upewnij się, że został skonfigurowany poprawnie." + +#: airtime_mvc/application/controllers/LoginController.php:142 +msgid "Given email not found." +msgstr "Podany email nie został odnaleziony." + +#: airtime_mvc/application/controllers/PreferenceController.php:70 +msgid "Preferences updated." +msgstr "Preferencje aktualizacji." + +#: airtime_mvc/application/controllers/PreferenceController.php:121 +msgid "Support setting updated." +msgstr "Ustawienia wsparcia aktualizacji." + +#: airtime_mvc/application/controllers/PreferenceController.php:315 +msgid "Stream Setting Updated." +msgstr "Ustawienia strumienia aktualizacji." + +#: airtime_mvc/application/controllers/PreferenceController.php:342 +msgid "path should be specified" +msgstr "ścieżka powinna być określona" + +#: airtime_mvc/application/controllers/PreferenceController.php:437 +msgid "Problem with Liquidsoap..." +msgstr "Pronlem z Liquidsoap..." + +#: airtime_mvc/application/controllers/ErrorController.php:17 +msgid "Page not found" +msgstr "Strona nie istnieje" + +#: airtime_mvc/application/controllers/ErrorController.php:22 +msgid "Application error" +msgstr "Błąd aplikacji" + +#: airtime_mvc/application/controllers/UserController.php:55 +#: airtime_mvc/application/controllers/UserController.php:137 +msgid "Specific action is not allowed in demo version!" +msgstr "Szczególne opcje nie są dostępne w wersji demonstracyjnej!" + +#: airtime_mvc/application/controllers/UserController.php:87 +msgid "User added successfully!" +msgstr "Użytkownik został dodany poprawnie!" + +#: airtime_mvc/application/controllers/UserController.php:89 +msgid "User updated successfully!" +msgstr "Użytkownik został poprawnie zaktualizowany!" + +#: airtime_mvc/application/controllers/UserController.php:164 +msgid "Settings updated successfully!" +msgstr "Ustawienia zostały poprawnie zaktualizowane!" + +#: airtime_mvc/application/controllers/LocaleController.php:36 +msgid "Recording:" +msgstr "Nagrywanie:" + +#: airtime_mvc/application/controllers/LocaleController.php:37 +msgid "Master Stream" +msgstr "Strumień Master" + +#: airtime_mvc/application/controllers/LocaleController.php:38 +msgid "Live Stream" +msgstr "Strumień Lice" + +#: airtime_mvc/application/controllers/LocaleController.php:39 +msgid "Nothing Scheduled" +msgstr "Nic nie zaplanowano" + +#: airtime_mvc/application/controllers/LocaleController.php:40 +msgid "Current Show:" +msgstr "Aktualny program:" + +#: airtime_mvc/application/controllers/LocaleController.php:41 +msgid "Current" +msgstr "Aktualny" + +#: airtime_mvc/application/controllers/LocaleController.php:43 +msgid "You are running the latest version" +msgstr "Używasz najnowszej wersji" + +#: airtime_mvc/application/controllers/LocaleController.php:44 +msgid "New version available: " +msgstr "Nowa wersja dostępna:" + +#: airtime_mvc/application/controllers/LocaleController.php:45 +msgid "This version will soon be obsolete." +msgstr "ta wersja będzie wkrótce przestarzała." + +#: airtime_mvc/application/controllers/LocaleController.php:46 +msgid "This version is no longer supported." +msgstr "Ta wersja nie jest już wspierana." + +#: airtime_mvc/application/controllers/LocaleController.php:47 +msgid "Please upgrade to " +msgstr "Proszę uaktualnij do" + +#: airtime_mvc/application/controllers/LocaleController.php:49 +msgid "Add to current playlist" +msgstr "Dodaj do bieżącej listy odtwarzania" + +#: airtime_mvc/application/controllers/LocaleController.php:50 +msgid "Add to current smart block" +msgstr "Dodaj do bieżącego smart block" + +#: airtime_mvc/application/controllers/LocaleController.php:51 +msgid "Adding 1 Item" +msgstr "Dodano 1 element" + +#: airtime_mvc/application/controllers/LocaleController.php:52 +#, php-format +msgid "Adding %s Items" +msgstr "Dodano %s elementów(y)" + +#: airtime_mvc/application/controllers/LocaleController.php:53 +msgid "You can only add tracks to smart blocks." +msgstr "Można dodawać tylko utwory do smart blocks." + +#: airtime_mvc/application/controllers/LocaleController.php:54 +#: airtime_mvc/application/controllers/PlaylistController.php:160 +msgid "You can only add tracks, smart blocks, and webstreams to playlists." +msgstr "" +"Można dodawać tylko utwory do smart blocks i webstream do listy odtwarznia." + +#: airtime_mvc/application/controllers/LocaleController.php:57 +msgid "Please select a cursor position on timeline." +msgstr "Proszę wybrać kursorem pozycję na osi czasu." + +#: airtime_mvc/application/controllers/LocaleController.php:61 +#: airtime_mvc/application/controllers/LibraryController.php:190 +msgid "Edit Metadata" +msgstr "Edytuj Metadane." + +#: airtime_mvc/application/controllers/LocaleController.php:62 +msgid "Add to selected show" +msgstr "Dodaj do wybranego programu" + +#: airtime_mvc/application/controllers/LocaleController.php:63 +msgid "Select" +msgstr "Zaznacz" + +#: airtime_mvc/application/controllers/LocaleController.php:64 +msgid "Select this page" +msgstr "Zaznacz tę stronę" + +#: airtime_mvc/application/controllers/LocaleController.php:65 +msgid "Deselect this page" +msgstr "Odznacz tę stronę" + +#: airtime_mvc/application/controllers/LocaleController.php:66 +msgid "Deselect all" +msgstr "Odznacz wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:67 +msgid "Are you sure you want to delete the selected item(s)?" +msgstr "Czy na pewno chcesz usunąć wybrane elementy?" + +#: airtime_mvc/application/controllers/LocaleController.php:71 +msgid "Bit Rate" +msgstr "Bit Rate" + +#: airtime_mvc/application/controllers/LocaleController.php:88 +msgid "Sample Rate" +msgstr "Wartość próbkowania" + +#: airtime_mvc/application/controllers/LocaleController.php:93 +msgid "Loading..." +msgstr "Ładowanie" + +#: airtime_mvc/application/controllers/LocaleController.php:94 +#: airtime_mvc/application/controllers/LocaleController.php:159 +msgid "All" +msgstr "Wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:95 +msgid "Files" +msgstr "Pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:96 +msgid "Playlists" +msgstr "Listy odtwarzania" + +#: airtime_mvc/application/controllers/LocaleController.php:97 +msgid "Smart Blocks" +msgstr "Smart Blocks" + +#: airtime_mvc/application/controllers/LocaleController.php:98 +msgid "Web Streams" +msgstr "Web Stream" + +#: airtime_mvc/application/controllers/LocaleController.php:99 +msgid "Unknown type: " +msgstr "Nieznany typ:" + +#: airtime_mvc/application/controllers/LocaleController.php:100 +msgid "Are you sure you want to delete the selected item?" +msgstr "Czy na pewno chcesz usunąć wybrany element?" + +#: airtime_mvc/application/controllers/LocaleController.php:101 +#: airtime_mvc/application/controllers/LocaleController.php:206 +msgid "Uploading in progress..." +msgstr "Wysyłanie w toku..." + +#: airtime_mvc/application/controllers/LocaleController.php:102 +msgid "Retrieving data from the server..." +msgstr "Pobieranie danych z serwera..." + +#: airtime_mvc/application/controllers/LocaleController.php:103 +msgid "The soundcloud id for this file is: " +msgstr "Id SoundCloud dla tego pliku to:" + +#: airtime_mvc/application/controllers/LocaleController.php:104 +msgid "There was an error while uploading to soundcloud." +msgstr "Wystąpił błąd podczas wysyłania na SoundCloud" + +#: airtime_mvc/application/controllers/LocaleController.php:105 +msgid "Error code: " +msgstr "Kod błędu:" + +#: airtime_mvc/application/controllers/LocaleController.php:106 +msgid "Error msg: " +msgstr "Wiadomość błędu:" + +#: airtime_mvc/application/controllers/LocaleController.php:107 +msgid "Input must be a positive number" +msgstr "Wyjście musi być liczbą dodatnią" + +#: airtime_mvc/application/controllers/LocaleController.php:108 +msgid "Input must be a number" +msgstr "Wyjście musi być liczbą" + +#: airtime_mvc/application/controllers/LocaleController.php:109 +msgid "Input must be in the format: yyyy-mm-dd" +msgstr "Wyjście musi mieć format yyyy-mm-dd" + +#: airtime_mvc/application/controllers/LocaleController.php:110 +msgid "Input must be in the format: hh:mm:ss.t" +msgstr "Wyjście musi mieć format hh:mm:ss.t" + +#: airtime_mvc/application/controllers/LocaleController.php:113 +#, php-format +msgid "" +"You are currently uploading files. %sGoing to another screen will cancel the " +"upload process. %sAre you sure you want to leave the page?" +msgstr "" +"Aktualnie wysyłasz pliki. %sPrzejście do innej strony przerwie ten proces. " +"%sCzy na pewno chcesz przejść do innej strony?" + +#: airtime_mvc/application/controllers/LocaleController.php:115 +msgid "please put in a time '00:00:00 (.0)'" +msgstr "proszę umieścić w czasie '00:00:00 (.0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:116 +msgid "please put in a time in seconds '00 (.0)'" +msgstr "proszę umieścić w czasie w sekundach '00 (.0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:117 +msgid "Your browser does not support playing this file type: " +msgstr "Twoja przeglądarka nie obsługuje odtwarzania plików tego typu:" + +#: airtime_mvc/application/controllers/LocaleController.php:118 +#, fuzzy +msgid "Dynamic block is not previewable" +msgstr "Dynamic block nie jest do podglądu" + +#: airtime_mvc/application/controllers/LocaleController.php:119 +msgid "Limit to: " +msgstr "Ograniczenie do:" + +#: airtime_mvc/application/controllers/LocaleController.php:120 +msgid "Playlist saved" +msgstr "Lista odtwarzania zapisana" + +#: airtime_mvc/application/controllers/LocaleController.php:121 +msgid "Playlist shuffled" +msgstr "Losowa playlista" + +#: airtime_mvc/application/controllers/LocaleController.php:123 +msgid "" +"Airtime is unsure about the status of this file. This can happen when the " +"file is on a remote drive that is unaccessible or the file is in a directory " +"that isn't 'watched' anymore." +msgstr "" +"Airtime nie może odczytać statusu pliku. Może się tak zdarzyć gdy plik " +"znajduje się na zdalnym dysku, do którego aktualnie nie ma dostępu lub " +"znajduje się w zablokowanym przed dostępem katalogu." + +#: airtime_mvc/application/controllers/LocaleController.php:125 +#, php-format +msgid "Listener Count on %s: %s" +msgstr "Licznik słuchaczy na %s: %s" + +#: airtime_mvc/application/controllers/LocaleController.php:127 +msgid "Remind me in 1 week" +msgstr "Przypomnij mi za 1 tydzień" + +#: airtime_mvc/application/controllers/LocaleController.php:128 +msgid "Remind me never" +msgstr "Nie przypominaj mi" + +#: airtime_mvc/application/controllers/LocaleController.php:129 +msgid "Yes, help Airtime" +msgstr "Tak, pomóż Airtime" + +#: airtime_mvc/application/controllers/LocaleController.php:130 +#: airtime_mvc/application/controllers/LocaleController.php:188 +msgid "Image must be one of jpg, jpeg, png, or gif" +msgstr "Obrazek musi być w formacjie jpg, jpeg, png lub gif" + +#: airtime_mvc/application/controllers/LocaleController.php:133 +msgid "" +"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." +msgstr "" +"Static smart block będzie zapisywał kryteria i zawartość natychmiast. To " +"pozwala na edycję i wyświetlanie go w bibliotece, przed dodaniem go do " +"programu." + +#: airtime_mvc/application/controllers/LocaleController.php:135 +msgid "" +"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." +msgstr "" +"Dynamic smart blok zapisuje tylko kryteria. Zawartość będzie generowana " +"automatycznie po dodaniu go do programu. Nie będziesz mógł wyświetlać i " +"edytować go w zawartości biblioteki." + +#: airtime_mvc/application/controllers/LocaleController.php:137 +msgid "" +"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." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:138 +msgid "Smart block shuffled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:139 +msgid "Smart block generated and criteria saved" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:140 +msgid "Smart block saved" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:141 +msgid "Processing..." +msgstr "Przetwarzanie..." + +#: airtime_mvc/application/controllers/LocaleController.php:155 +msgid "Played" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:160 +#, php-format +msgid "Copied %s row%s to the clipboard" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:161 +#, php-format +msgid "" +"%sPrint view%sPlease use your browser's print function to print this table. " +"Press escape when finished." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:163 +msgid "Choose Storage Folder" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:164 +msgid "Choose Folder to Watch" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:166 +msgid "" +"Are you sure you want to change the storage folder?\n" +"This will remove the files from your Airtime library!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:167 +#: airtime_mvc/application/views/scripts/preference/directory-config.phtml:2 +msgid "Manage Media Folders" +msgstr "Zarządzaj folderami mediów" + +#: airtime_mvc/application/controllers/LocaleController.php:168 +msgid "Are you sure you want to remove the watched folder?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:169 +msgid "This path is currently not accessible." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:171 +msgid "Connected to the streaming server" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:172 +msgid "The stream is disabled" +msgstr "Strumień jest wyłączony" + +#: airtime_mvc/application/controllers/LocaleController.php:174 +msgid "Can not connect to the streaming server" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:176 +msgid "" +"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." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:177 +#, php-format +msgid "For more details, please read the %sAirtime Manual%s" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:179 +msgid "" +"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." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:180 +msgid "" +"Check this box to automatically switch off Master/Show source upon source " +"disconnection." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:181 +msgid "" +"Check this box to automatically switch on Master/Show source upon source " +"connection." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:182 +msgid "" +"If your Icecast server expects a username of 'source', this field can be " +"left blank." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:183 +#: airtime_mvc/application/controllers/LocaleController.php:193 +msgid "" +"If your live streaming client does not ask for a username, this field should " +"be 'source'." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:185 +msgid "" +"If you change the username or password values for an enabled stream the " +"playout engine will be rebooted and your listeners will hear silence for " +"5-10 seconds. Changing the following fields will NOT cause a reboot: Stream " +"Label (Global Settings), and Switch Transition Fade(s), Master Username, and " +"Master Password (Input Stream Settings). If Airtime is recording, and if the " +"change causes a playout engine restart, the recording will be interrupted." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:186 +msgid "" +"This is the admin username and password for Icecast/SHOUTcast to get " +"listener statistics." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:190 +msgid "No result found" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:191 +msgid "" +"This follows the same security pattern for the shows: only users assigned to " +"the show can connect." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:192 +msgid "Specify custom authentication which will work only for this show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:194 +msgid "The show instance doesn't exist anymore!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:198 +msgid "Show" +msgstr "Program" + +#: airtime_mvc/application/controllers/LocaleController.php:199 +msgid "Show is empty" +msgstr "Program jest pusty" + +#: airtime_mvc/application/controllers/LocaleController.php:200 +msgid "1m" +msgstr "1 min" + +#: airtime_mvc/application/controllers/LocaleController.php:201 +msgid "5m" +msgstr "5 min" + +#: airtime_mvc/application/controllers/LocaleController.php:202 +msgid "10m" +msgstr "10 min" + +#: airtime_mvc/application/controllers/LocaleController.php:203 +msgid "15m" +msgstr "15 min" + +#: airtime_mvc/application/controllers/LocaleController.php:204 +msgid "30m" +msgstr "30 min" + +#: airtime_mvc/application/controllers/LocaleController.php:205 +msgid "60m" +msgstr "60 min" + +#: airtime_mvc/application/controllers/LocaleController.php:207 +msgid "Retreiving data from the server..." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:213 +msgid "This show has no scheduled content." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:214 +msgid "This show is not completely filled with content." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:218 +msgid "January" +msgstr "Styczeń" + +#: airtime_mvc/application/controllers/LocaleController.php:219 +msgid "February" +msgstr "Luty" + +#: airtime_mvc/application/controllers/LocaleController.php:220 +msgid "March" +msgstr "Marzec" + +#: airtime_mvc/application/controllers/LocaleController.php:221 +msgid "April" +msgstr "Kwiecień" + +#: airtime_mvc/application/controllers/LocaleController.php:222 +#: airtime_mvc/application/controllers/LocaleController.php:234 +msgid "May" +msgstr "Maj" + +#: airtime_mvc/application/controllers/LocaleController.php:223 +msgid "June" +msgstr "Czerwiec" + +#: airtime_mvc/application/controllers/LocaleController.php:224 +msgid "July" +msgstr "Lipiec" + +#: airtime_mvc/application/controllers/LocaleController.php:225 +msgid "August" +msgstr "Sierpień" + +#: airtime_mvc/application/controllers/LocaleController.php:226 +msgid "September" +msgstr "Wrzesień" + +#: airtime_mvc/application/controllers/LocaleController.php:227 +msgid "October" +msgstr "Październik" + +#: airtime_mvc/application/controllers/LocaleController.php:228 +msgid "November" +msgstr "Listopad" + +#: airtime_mvc/application/controllers/LocaleController.php:229 +msgid "December" +msgstr "Grudzień" + +#: airtime_mvc/application/controllers/LocaleController.php:230 +msgid "Jan" +msgstr "Sty" + +#: airtime_mvc/application/controllers/LocaleController.php:231 +msgid "Feb" +msgstr "Lut" + +#: airtime_mvc/application/controllers/LocaleController.php:232 +msgid "Mar" +msgstr "Mar" + +#: airtime_mvc/application/controllers/LocaleController.php:233 +msgid "Apr" +msgstr "Kwi" + +#: airtime_mvc/application/controllers/LocaleController.php:235 +msgid "Jun" +msgstr "Cze" + +#: airtime_mvc/application/controllers/LocaleController.php:236 +msgid "Jul" +msgstr "Lip" + +#: airtime_mvc/application/controllers/LocaleController.php:237 +msgid "Aug" +msgstr "Sie" + +#: airtime_mvc/application/controllers/LocaleController.php:238 +msgid "Sep" +msgstr "Wrz" + +#: airtime_mvc/application/controllers/LocaleController.php:239 +msgid "Oct" +msgstr "Paź" + +#: airtime_mvc/application/controllers/LocaleController.php:240 +msgid "Nov" +msgstr "Lis" + +#: airtime_mvc/application/controllers/LocaleController.php:241 +msgid "Dec" +msgstr "Gru" + +#: airtime_mvc/application/controllers/LocaleController.php:242 +msgid "today" +msgstr "dzisiaj" + +#: airtime_mvc/application/controllers/LocaleController.php:243 +msgid "day" +msgstr "dzień" + +#: airtime_mvc/application/controllers/LocaleController.php:244 +msgid "week" +msgstr "tydzień" + +#: airtime_mvc/application/controllers/LocaleController.php:245 +msgid "month" +msgstr "miesiąć" + +#: airtime_mvc/application/controllers/LocaleController.php:260 +msgid "" +"Shows longer than their scheduled time will be cut off by a following show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:261 +msgid "Cancel Current Show?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:262 +#: airtime_mvc/application/controllers/LocaleController.php:301 +msgid "Stop recording current show?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:263 +msgid "Ok" +msgstr "Ok" + +#: airtime_mvc/application/controllers/LocaleController.php:264 +msgid "Contents of Show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:267 +msgid "Remove all content?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:269 +msgid "Delete selected item(s)?" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:270 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5 +msgid "Start" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:271 +msgid "End" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:272 +msgid "Duration" +msgstr "Czas trwania" + +#: airtime_mvc/application/controllers/LocaleController.php:278 +msgid "Cue In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:279 +msgid "Cue Out" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:280 +msgid "Fade In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:281 +msgid "Fade Out" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:282 +msgid "Show Empty" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:283 +msgid "Recording From Line In" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:288 +msgid "Cannot schedule outside a show." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:289 +msgid "Moving 1 Item" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:290 +#, php-format +msgid "Moving %s Items" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:293 +msgid "Select all" +msgstr "Wybierz wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:294 +msgid "Select none" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:295 +msgid "Remove overbooked tracks" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:296 +msgid "Remove selected scheduled items" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:297 +msgid "Jump to the current playing track" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:298 +msgid "Cancel current show" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:303 +msgid "Open library to add or remove content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:304 +#: airtime_mvc/application/controllers/ScheduleController.php:261 +#: airtime_mvc/application/views/scripts/showbuilder/index.phtml:15 +msgid "Add / Remove Content" +msgstr "Dodaj/usuń zawartość" + +#: airtime_mvc/application/controllers/LocaleController.php:306 +msgid "in use" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:307 +msgid "Disk" +msgstr "Dysk" + +#: airtime_mvc/application/controllers/LocaleController.php:309 +msgid "Look in" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:311 +msgid "Open" +msgstr "Otwórz" + +#: airtime_mvc/application/controllers/LocaleController.php:317 +msgid "Guests can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:318 +msgid "View schedule" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:319 +msgid "View show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:320 +msgid "DJs can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:321 +msgid "Manage assigned show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:322 +msgid "Import media files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:323 +msgid "Create playlists, smart blocks, and webstreams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:324 +msgid "Manage their own library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:325 +msgid "Progam Managers can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:326 +msgid "View and manage show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:327 +msgid "Schedule shows" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:328 +msgid "Manage all library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:329 +msgid "Admins can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:330 +msgid "Manage preferences" +msgstr "Zarządzaj preferencjami" + +#: airtime_mvc/application/controllers/LocaleController.php:331 +msgid "Manage users" +msgstr "Zarządzaj użytkownikami" + +#: airtime_mvc/application/controllers/LocaleController.php:332 +msgid "Manage watched folders" +msgstr "Zarządzaj przeszukiwanymi katalogami" + +#: airtime_mvc/application/controllers/LocaleController.php:334 +msgid "View system status" +msgstr "Zobacz status systemu" + +#: airtime_mvc/application/controllers/LocaleController.php:335 +msgid "Access playout history" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:336 +msgid "View listener stats" +msgstr "Zobacz statystyki słuchacza" + +#: airtime_mvc/application/controllers/LocaleController.php:338 +msgid "Show / hide columns" +msgstr "Pokaż/ukryj kolumny" + +#: airtime_mvc/application/controllers/LocaleController.php:340 +msgid "From {from} to {to}" +msgstr "Z {from} do {to}" + +#: airtime_mvc/application/controllers/LocaleController.php:341 +msgid "kbps" +msgstr "kbps" + +#: airtime_mvc/application/controllers/LocaleController.php:342 +msgid "yyyy-mm-dd" +msgstr "yyyy-mm-dd" + +#: airtime_mvc/application/controllers/LocaleController.php:343 +msgid "hh:mm:ss.t" +msgstr "hh:mm:ss.t" + +#: airtime_mvc/application/controllers/LocaleController.php:344 +msgid "kHz" +msgstr "kHz" + +#: airtime_mvc/application/controllers/LocaleController.php:347 +msgid "Su" +msgstr "Nd" + +#: airtime_mvc/application/controllers/LocaleController.php:348 +msgid "Mo" +msgstr "Pn" + +#: airtime_mvc/application/controllers/LocaleController.php:349 +msgid "Tu" +msgstr "Wt" + +#: airtime_mvc/application/controllers/LocaleController.php:350 +msgid "We" +msgstr "Śr" + +#: airtime_mvc/application/controllers/LocaleController.php:351 +msgid "Th" +msgstr "Cz" + +#: airtime_mvc/application/controllers/LocaleController.php:352 +msgid "Fr" +msgstr "Pt" + +#: airtime_mvc/application/controllers/LocaleController.php:353 +msgid "Sa" +msgstr "So" + +#: airtime_mvc/application/controllers/LocaleController.php:354 +#: airtime_mvc/application/controllers/LocaleController.php:382 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3 +msgid "Close" +msgstr "Zamknij" + +#: airtime_mvc/application/controllers/LocaleController.php:356 +msgid "Hour" +msgstr "Godzina" + +#: airtime_mvc/application/controllers/LocaleController.php:357 +msgid "Minute" +msgstr "Minuta" + +#: airtime_mvc/application/controllers/LocaleController.php:358 +msgid "Done" +msgstr "Gotowe" + +#: airtime_mvc/application/controllers/LocaleController.php:361 +msgid "Select files" +msgstr "Wybierz pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:362 +#: airtime_mvc/application/controllers/LocaleController.php:363 +msgid "Add files to the upload queue and click the start button." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:366 +msgid "Add Files" +msgstr "Dodaj pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:367 +msgid "Stop Upload" +msgstr "Zatrzymaj przesyłanie" + +#: airtime_mvc/application/controllers/LocaleController.php:368 +msgid "Start upload" +msgstr "Rozpocznij przesyłanie" + +#: airtime_mvc/application/controllers/LocaleController.php:369 +msgid "Add files" +msgstr "Dodaj pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:370 +#, php-format +msgid "Uploaded %d/%d files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:371 +msgid "N/A" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:372 +msgid "Drag files here." +msgstr "Przeciągnij tutaj pliki." + +#: airtime_mvc/application/controllers/LocaleController.php:373 +msgid "File extension error." +msgstr "Błąd rozszerzenia pliku." + +#: airtime_mvc/application/controllers/LocaleController.php:374 +msgid "File size error." +msgstr "Błąd rozmiaru pliku." + +#: airtime_mvc/application/controllers/LocaleController.php:375 +msgid "File count error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:376 +msgid "Init error." +msgstr "Błąd inicjalizacji" + +#: airtime_mvc/application/controllers/LocaleController.php:377 +msgid "HTTP Error." +msgstr "Błąd HTTP." + +#: airtime_mvc/application/controllers/LocaleController.php:378 +msgid "Security error." +msgstr "Błąd zabezpieczeń." + +#: airtime_mvc/application/controllers/LocaleController.php:379 +msgid "Generic error." +msgstr "Błąd ogólny." + +#: airtime_mvc/application/controllers/LocaleController.php:380 +msgid "IO error." +msgstr "Błąd I/O" + +#: airtime_mvc/application/controllers/LocaleController.php:381 +#, php-format +msgid "File: %s" +msgstr "Plik: %s" + +#: airtime_mvc/application/controllers/LocaleController.php:383 +#, php-format +msgid "%d files queued" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:384 +msgid "File: %f, size: %s, max file size: %m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:385 +msgid "Upload URL might be wrong or doesn't exist" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:386 +msgid "Error: File too large: " +msgstr "Błąd: plik jest za duży:" + +#: airtime_mvc/application/controllers/LocaleController.php:387 +msgid "Error: Invalid file extension: " +msgstr "Błąd: nieprawidłowe rozszerzenie pliku:" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:190 +#: airtime_mvc/application/controllers/LibraryController.php:161 +msgid "Preview" +msgstr "Podgląd" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:192 +msgid "Select cursor" +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:193 +msgid "Remove cursor" +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:198 +#: airtime_mvc/application/controllers/LibraryController.php:189 +#: airtime_mvc/application/controllers/LibraryController.php:218 +#: airtime_mvc/application/controllers/LibraryController.php:237 +#: airtime_mvc/application/controllers/ScheduleController.php:315 +#: airtime_mvc/application/controllers/ScheduleController.php:322 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:26 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:23 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:18 +msgid "Delete" +msgstr "Usuń" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:212 +msgid "show does not exist" +msgstr "program nie istnieje" + +#: airtime_mvc/application/controllers/ListenerstatController.php:56 +msgid "" +"Please make sure admin user/password is correct on System->Streams page." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:57 +#: airtime_mvc/application/controllers/ApiController.php:84 +msgid "You are not allowed to access this resource." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:286 +#: airtime_mvc/application/controllers/ApiController.php:325 +msgid "You are not allowed to access this resource. " +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:507 +msgid "File does not exist in Airtime." +msgstr "Plik nie istnieje w Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:520 +msgid "File does not exist in Airtime" +msgstr "Plik nie istnieje w Airtime" + +#: airtime_mvc/application/controllers/ApiController.php:532 +msgid "File doesn't exist in Airtime." +msgstr "Plik nie istnieje w Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:578 +msgid "Bad request. no 'mode' parameter passed." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:588 +msgid "Bad request. 'mode' parameter is invalid" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:95 +#: airtime_mvc/application/controllers/PlaylistController.php:127 +#, php-format +msgid "%s not found" +msgstr "nie znaleziono %s" + +#: airtime_mvc/application/controllers/LibraryController.php:104 +#: airtime_mvc/application/controllers/PlaylistController.php:148 +msgid "Something went wrong." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:182 +#: airtime_mvc/application/controllers/LibraryController.php:206 +#: airtime_mvc/application/controllers/LibraryController.php:229 +msgid "Add to Playlist" +msgstr "Dodaj do listy odtwarzania" + +#: airtime_mvc/application/controllers/LibraryController.php:184 +msgid "Add to Smart Block" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:194 +#: airtime_mvc/application/controllers/ScheduleController.php:897 +msgid "Download" +msgstr "Pobierz" + +#: airtime_mvc/application/controllers/LibraryController.php:198 +msgid "Duplicate Playlist" +msgstr "Duplikuj listę odtwarzania" + +#: airtime_mvc/application/controllers/LibraryController.php:213 +#: airtime_mvc/application/controllers/LibraryController.php:235 +msgid "Edit" +msgstr "Edytuj" + +#: airtime_mvc/application/controllers/LibraryController.php:248 +msgid "Soundcloud" +msgstr "Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:254 +#: airtime_mvc/application/controllers/ScheduleController.php:284 +msgid "View on Soundcloud" +msgstr "Zobacz na Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:258 +#: airtime_mvc/application/controllers/ScheduleController.php:287 +msgid "Re-upload to SoundCloud" +msgstr "Prześlij ponownie do SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:260 +#: airtime_mvc/application/controllers/ScheduleController.php:287 +msgid "Upload to SoundCloud" +msgstr "Prześlij do SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:267 +msgid "No action available" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:287 +msgid "You don't have permission to delete selected items." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:336 +msgid "Could not delete some scheduled files." +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:375 +#, php-format +msgid "Copy of %s" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:45 +#, php-format +msgid "You are viewing an older version of %s" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:120 +msgid "You cannot add tracks to dynamic blocks." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:141 +#, php-format +msgid "You don't have permission to delete selected %s(s)." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:154 +msgid "You can only add tracks to smart block." +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:172 +msgid "Untitled Playlist" +msgstr "Lista odtwarzania bez nazwy" + +#: airtime_mvc/application/controllers/PlaylistController.php:174 +msgid "Untitled Smart Block" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:437 +msgid "Unknown Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:252 +msgid "View Recorded File Metadata" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:264 +msgid "Remove All Content" +msgstr "Usuń całą zawartość" + +#: airtime_mvc/application/controllers/ScheduleController.php:271 +msgid "Show Content" +msgstr "Pokaż zawartość" + +#: airtime_mvc/application/controllers/ScheduleController.php:295 +#: airtime_mvc/application/controllers/ScheduleController.php:302 +msgid "Cancel Current Show" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:299 +#: airtime_mvc/application/controllers/ScheduleController.php:309 +msgid "Edit Show" +msgstr "Edytuj program" + +#: airtime_mvc/application/controllers/ScheduleController.php:317 +msgid "Delete This Instance" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:319 +msgid "Delete This Instance and All Following" +msgstr "" + +#: airtime_mvc/application/controllers/ScheduleController.php:445 +#, php-format +msgid "Rebroadcast of show %s from %s at %s" +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:29 +#: airtime_mvc/application/controllers/WebstreamController.php:33 +msgid "Untitled Webstream" +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:138 +msgid "Webstream saved." +msgstr "" + +#: airtime_mvc/application/controllers/WebstreamController.php:146 +msgid "Invalid form values." +msgstr "" + +#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 +msgid "Listener Count Over Time" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 +msgid "Previous:" +msgstr "Poprzedni:" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:10 +msgid "Next:" +msgstr "Następny:" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:24 +msgid "Source Streams" +msgstr "Strumienie źródłowe" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:29 +msgid "Master Source" +msgstr "Źródło Master" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 +msgid "Show Source" +msgstr "Źródło Programu" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 +msgid "Scheduled Play" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:54 +msgid "ON AIR" +msgstr "Na antenie" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:55 +msgid "Listen" +msgstr "Słuchaj" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:59 +msgid "Station time" +msgstr "Czas stacji" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 +msgid "Your trial expires in" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "Purchase your copy of Airtime" +msgstr "" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "My Account" +msgstr "Moje konto" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:3 +msgid "Manage Users" +msgstr "Zarządzaj Użytkownikami" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:10 +msgid "New User" +msgstr "Nowy Użytkownik" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:17 +msgid "id" +msgstr "id" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:19 +msgid "First Name" +msgstr "Imię" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:20 +msgid "Last Name" +msgstr "Nazwisko" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:21 +msgid "User Type" +msgstr "Typ użytkownika" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 +#, php-format +msgid "" +"%sAirtime%s %s, the open radio software for scheduling and remote station " +"management. %s" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 +#, php-format +msgid "" +"%sSourcefabric%s o.p.s. Airtime is distributed under the %sGNU GPL v.3%s" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 +msgid "Share" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 +msgid "Select stream:" +msgstr "Wybierz strumień:" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:50 +msgid "mute" +msgstr "wyciszyć" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:53 +msgid "unmute" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 +msgid "Welcome to Airtime!" +msgstr "Witamy w Airtime!" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 +msgid "" +"Here's how you can get started using Airtime to automate your broadcasts: " +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 +msgid "" +"Begin by adding your files to the library using the 'Add Media' menu button. " +"You can drag and drop your files to this window too." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 +msgid "" +"Create a show by going to 'Calendar' in the menu bar, and then clicking the " +"'+ Show' icon. This can be either a one-time or repeating show. Only admins " +"and program managers can add shows." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 +msgid "" +"Add media to the show by going to your show in the Schedule calendar, left-" +"clicking on it and selecting 'Add / Remove Content'" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 +msgid "" +"Select your media from the left pane and drag them to your show in the right " +"pane." +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 +msgid "Then you're good to go!" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:13 +#, php-format +msgid "For more detailed help, read the %suser manual%s." +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:40 +msgid "Expand Static Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:45 +msgid "Expand Dynamic Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:98 +msgid "Empty smart block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:100 +msgid "Empty playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:66 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "Fade out: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "(ss.t)" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:63 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +msgid "Fade in: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:10 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:4 +msgid "New" +msgstr "Nowy" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:13 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:13 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:7 +msgid "New Playlist" +msgstr "Nowa lista odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 +msgid "New Smart Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9 +msgid "New Webstream" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +msgid "Save playlist" +msgstr "Zapisz listę odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:30 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:27 +msgid "Playlist crossfade" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:49 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:51 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:38 +msgid "View / edit description" +msgstr "Zobacz/edytuj opis" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:81 +msgid "No open playlist" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:86 +msgid "No open smart block" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +msgid "Cue In: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "(hh:mm:ss.t)" +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "Cue Out: " +msgstr "" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 +msgid "Original Length:" +msgstr "Oryginalna długość:" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Add this show" +msgstr "Dodaj tn program" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Update show" +msgstr "Aktualizuj program" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 +msgid "What" +msgstr "Co" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14 +msgid "When" +msgstr "Kiedy" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:19 +msgid "Live Stream Input" +msgstr "Wejście strumienia na żywo" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:23 +msgid "Record & Rebroadcast" +msgstr "Nagrywaj i retransmituj" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:29 +msgid "Who" +msgstr "Kto" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33 +msgid "Style" +msgstr "Styl" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 +msgid "Email sent" +msgstr "Email wyslany" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:6 +msgid "An email has been sent" +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:7 +msgid "Back to login screen" +msgstr "Wróć do ekranu logowania" + +#: airtime_mvc/application/views/scripts/login/index.phtml:7 +msgid "" +"Welcome to the online Airtime demo! You can log in using the username " +"'admin' and the password 'admin'." +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 +#: airtime_mvc/application/views/scripts/form/login.phtml:34 +msgid "Reset password" +msgstr "Resetuj hasło" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:7 +msgid "" +"Please enter your account e-mail address. You will receive a link to create " +"a new password via e-mail." +msgstr "" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:3 +msgid "New password" +msgstr "Nowe hasło" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:6 +msgid "Please enter and confirm your new password in the fields below." +msgstr "" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:4 +msgid "Service" +msgstr "" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:6 +msgid "Uptime" +msgstr "Czas pracy" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:7 +msgid "CPU" +msgstr "CPU" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:8 +msgid "Memory" +msgstr "Pamięć" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14 +msgid "Airtime Version" +msgstr "Wersja Airtime" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30 +msgid "Disk Space" +msgstr "Miejsce na dysku twardym" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:22 +msgid "previous" +msgstr "poprzedni" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:25 +msgid "play" +msgstr "play" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:28 +msgid "pause" +msgstr "pause" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:31 +msgid "next" +msgstr "następny" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:34 +msgid "stop" +msgstr "stop" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:59 +msgid "max volume" +msgstr "maksymalna głośność" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:69 +msgid "Update Required" +msgstr "Wymagana aktualizacja" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:70 +#, php-format +msgid "" +"To play the media you will need to either update your browser to a recent " +"version or update your %sFlash plugin%s." +msgstr "" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:51 +msgid "Stream URL:" +msgstr "URL strumienia:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:56 +msgid "Default Length:" +msgstr "Domyślna długość:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:63 +msgid "No webstream" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error.phtml:6 +msgid "Zend Framework Default Application" +msgstr "" + +#: airtime_mvc/application/views/scripts/error/error.phtml:10 +msgid "Page not found!" +msgstr "Nie znaleziono strony!" + +#: airtime_mvc/application/views/scripts/error/error.phtml:11 +msgid "Looks like the page you were looking for doesn't exist!" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:4 +msgid "Stream " +msgstr "Strumień" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:33 +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:74 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:90 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:59 +#: airtime_mvc/application/views/scripts/form/preferences_general.phtml:71 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 +msgid "(Required)" +msgstr "(Wymagane)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:76 +msgid "Additional Options" +msgstr "Opcje dodatkowe" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:136 +msgid "" +"The following info will be displayed to listeners in their media player:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:169 +msgid "(Your radio station website)" +msgstr "(Strona internetowa Twojej stacji)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:207 +msgid "Stream URL: " +msgstr "URL strumienia:" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:9 +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:27 +msgid "Choose folder" +msgstr "Wybierz folder" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:10 +msgid "Set" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 +msgid "Current Import Folder:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:41 +msgid "Add" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:43 +msgid "" +"Rescan watched directory (This is useful if it is network mount and may be " +"out of sync with Airtime)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 +msgid "Remove watched directory" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:50 +msgid "You are not watching any media folders." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 +msgid "Choose Days:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:18 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:18 +msgid "Remove" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:1 +msgid "Register Airtime" +msgstr "Zarejestruj Airtime" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:6 +#, php-format +msgid "" +"Help Airtime improve by letting us know how you are using it. This info will " +"be collected regularly in order to enhance your user experience.%sClick " +"'Yes, help Airtime' and we'll make sure the features you use are constantly " +"improving." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:25 +#, php-format +msgid "" +"Click the box below to advertise your station on %sSourcefabric.org%s. In " +"order to promote your station, 'Send support feedback' must be enabled. This " +"data will be collected in addition to the support feedback." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:65 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:79 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:61 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:76 +msgid "(for verification purposes only, will not be published)" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:150 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:151 +msgid "Note: Anything larger than 600x600 will be resized." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:164 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:164 +msgid "Show me what I am sending " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:178 +msgid "Terms and Conditions" +msgstr "Zasady i warunki" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:7 +msgid "Find Shows" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:12 +msgid "Filter By Show:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:2 +msgid "Input Stream Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:109 +msgid "Master Source Connection URL:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:115 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:159 +msgid "Override" +msgstr "Zastąp" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "OK" +msgstr "OK" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "RESET" +msgstr "RESETUJ" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:153 +msgid "Show Source Connection URL:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 +#, php-format +msgid "%s's Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 +msgid "Repeat Days:" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/daterange.phtml:6 +msgid "Filter History" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:5 +msgid "Email / Mail Server Settings" +msgstr "Ustawienia Email/Serwera pocztowego" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:10 +msgid "SoundCloud Settings" +msgstr "Ustawienia SoundCloud" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:5 +#, php-format +msgid "" +"Help Airtime improve by letting Sourcefabric know how you are using it. This " +"information will be collected regularly in order to enhance your user " +"experience.%sClick the 'Send support feedback' box and we'll make sure the " +"features you use are constantly improving." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:23 +#, php-format +msgid "Click the box below to promote your station on %sSourcefabric.org%s." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:41 +msgid "" +"(In order to promote your station, 'Send support feedback' must be enabled)." +msgstr "" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:186 +msgid "Sourcefabric Privacy Policy" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:53 +msgid "Connection URL: " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:3 +msgid "Smart Block Options" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 +msgid " to " +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:120 +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:133 +msgid "files meet the criteria" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:127 +msgid "file meet the criteria" +msgstr "" + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:3 +#: airtime_mvc/application/views/scripts/library/library.phtml:2 +msgid "File import in progress..." +msgstr "Importowanie plików w toku..." + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:5 +#: airtime_mvc/application/views/scripts/library/library.phtml:5 +msgid "Advanced Search Options" +msgstr "Zaawansowane opcje wyszukiwania" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2 +msgid "Stream Settings" +msgstr "Ustawienia strumienia" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:12 +msgid "Global Settings" +msgstr "Ustawienia globalne" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 +msgid "dB" +msgstr "dB" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 +msgid "Output Stream Settings" +msgstr "Ustawienia strumienia wyjściowego" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:7 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:30 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:32 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:128 +msgid "Length:" +msgstr "Długość: " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:8 +msgid "Sample Rate:" +msgstr "Częstotliwość próbkowania:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 +msgid "Isrc Number:" +msgstr "Numer Isrc:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 +msgid "File Path:" +msgstr "Ścieżka pliku:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:39 +msgid "Web Stream" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 +msgid "Dynamic Smart Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:41 +msgid "Static Smart Block" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:42 +msgid "Audio Track" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:48 +msgid "Playlist Contents: " +msgstr "Zawartość listy odtwarzania:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:50 +msgid "Static Smart Block Contents: " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:89 +msgid "Dynamic Smart Block Criteria: " +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:118 +msgid "Limit to " +msgstr "" + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 +msgid "Please selection an option" +msgstr "" + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 +msgid "No Records" +msgstr "" From 149b744ba7d775b447f0d4bbf6bea84d422792cc Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 1 Feb 2013 01:40:48 -0500 Subject: [PATCH 048/208] remove using self in a static method --- python_apps/pypo/pypofetch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index e073efda9..2d6ad0fb5 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -136,7 +136,7 @@ class PypoFetch(Thread): try: lock.acquire() tn = telnetlib.Telnet(LS_HOST, LS_PORT) - self.logger.info(command) + logger.info(command) tn.write(command) tn.write('exit\n') tn.read_all() From 384298f6804e10ebd6e00e5eb74cd7b08432d57f Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 23 Jan 2013 12:09:21 -0500 Subject: [PATCH 049/208] CC-4109: Playlist Builder: Add a button to remove all the items in the current editing playlist --- .../controllers/PlaylistController.php | 21 +++++++++++++++++++ airtime_mvc/application/models/Block.php | 5 ++++- airtime_mvc/application/models/Playlist.php | 4 ++++ .../views/scripts/playlist/playlist.phtml | 3 +++ .../views/scripts/playlist/smart-block.phtml | 3 +++ airtime_mvc/public/js/airtime/library/spl.js | 6 ++++++ .../js/airtime/playlist/smart_blockbuilder.js | 2 +- 7 files changed, 42 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 789d4a904..11d397bc3 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -26,6 +26,7 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('smart-block-shuffle', 'json') ->addActionContext('get-block-info', 'json') ->addActionContext('shuffle', 'json') + ->addActionContext('empty-content', 'json') ->initContext(); } @@ -336,6 +337,26 @@ class PlaylistController extends Zend_Controller_Action $this->playlistUnknownError($e); } } + + public function emptyContentAction() + { + $type = $this->_getParam('obj_type'); + try { + $obj = $this->getPlaylist($type); + if ($type == 'playlist') { + $obj->deleteAllFilesFromPlaylist(); + } else { + $obj->deleteAllFilesFromBlock(); + } + $this->createUpdateResponse($obj); + } catch (PlaylistOutDatedException $e) { + $this->playlistOutdated($e); + } catch (PlaylistNotFoundException $e) { + $this->playlistNotFound($type); + } catch (Exception $e) { + $this->playlistUnknownError($e); + } + } public function setCueAction() { diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index cda10c1a3..cb57f0715 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -1001,7 +1001,10 @@ SQL; public function deleteAllFilesFromBlock() { CcBlockcontentsQuery::create()->findByDbBlockId($this->id)->delete(); - $this->block->reload(); + //$this->block->reload(); + $this->block->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); + $this->block->save($this->con); + $this->con->commit(); } // smart block functions start diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 7aaea5243..9eec7ee4f 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -930,6 +930,10 @@ SQL; public function deleteAllFilesFromPlaylist() { CcPlaylistcontentsQuery::create()->findByDbPlaylistId($this->id)->delete(); + + $this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); + $this->pl->save($this->con); + $this->con->commit(); } public function shuffle() diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index f8496d926..3d388bf36 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -16,6 +16,9 @@ if (isset($this->obj)) { obj)) : ?> +
+ +
diff --git a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml index b1ca48da5..1b5b648c3 100644 --- a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml +++ b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml @@ -16,6 +16,9 @@ if (isset($this->obj)) { obj)) : ?> +
+ +
diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 2839ab45d..6c49443ff 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -749,6 +749,12 @@ var AIRTIME = (function(AIRTIME){ } ); }); + + $("#pl-bl-clear-content").live("click", function(event) { + var sUrl = baseUrl+"playlist/empty-content", + oData = {}; + playlistRequest(sUrl, oData); + }); } function setUpPlaylist() { diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index 68bb71fd5..a06ee081e 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -351,7 +351,7 @@ function setupUI() { * It is only active if playlist is not empty */ var plContents = $('#spl_sortable').children(); - var shuffleButton = $('button[id="shuffle_button"], button[id="playlist_shuffle_button"]'); + var shuffleButton = $('button[id="shuffle_button"], button[id="playlist_shuffle_button"], button[id="pl-bl-clear-content"]'); if (!plContents.hasClass('spl_empty')) { if (shuffleButton.hasClass('ui-state-disabled')) { From 8309593a0f10f1e2264966caa709c60898eac4ad Mon Sep 17 00:00:00 2001 From: denise Date: Fri, 1 Feb 2013 17:47:07 -0500 Subject: [PATCH 050/208] CC-4904: Library -> Sort by status doesn't work - added 2 columns to cc_files (is_scheduled, is_playlist) - split library status column into two columns (scheduled, playlist) - is_scheduled gets updated when a track plays out, or when a file gets added/removed from/to a show - is_playlist gets updated when a file gets added/removed from/to a playlist/block, when a playlist/block gets deleted, or when a playlist/block's contents is cleared --- .../controllers/ScheduleController.php | 8 ++ airtime_mvc/application/models/Block.php | 57 ++++++++- airtime_mvc/application/models/Playlist.php | 52 +++++++++ airtime_mvc/application/models/Scheduler.php | 17 +++ airtime_mvc/application/models/StoredFile.php | 73 ++++++------ .../models/airtime/map/CcFilesTableMap.php | 2 + .../models/airtime/om/BaseCcFiles.php | 110 +++++++++++++++++- .../models/airtime/om/BaseCcFilesPeer.php | 36 +++--- .../models/airtime/om/BaseCcFilesQuery.php | 42 +++++++ airtime_mvc/build/build.properties | 2 +- airtime_mvc/build/schema.xml | 2 + airtime_mvc/build/sql/schema.sql | 2 + .../public/js/airtime/library/library.js | 18 ++- .../public/js/airtime/showbuilder/builder.js | 14 ++- 14 files changed, 376 insertions(+), 59 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 22257025d..1a22506b4 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -33,6 +33,7 @@ class ScheduleController extends Zend_Controller_Action ->addActionContext('dj-edit-show', 'json') ->addActionContext('calculate-duration', 'json') ->addActionContext('get-current-show', 'json') + ->addActionContext('update-future-is-scheduled', 'json') ->initContext(); $this->sched_sess = new Zend_Session_Namespace("schedule"); @@ -950,4 +951,11 @@ class ScheduleController extends Zend_Controller_Action echo Zend_Json::encode($result); exit(); } + + public function updateFutureIsScheduledAction() + { + $schedId = $this->_getParam('schedId'); + $redrawLibTable = Application_Model_StoredFile::setIsScheduled($schedId, false); + $this->_helper->json->sendJson(json_encode(array("redrawLibTable" => $redrawLibTable))); + } } diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index cb57f0715..de30522d6 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -476,10 +476,19 @@ SQL; try { if (is_array($ac) && $ac[1] == 'audioclip') { $res = $this->insertBlockElement($this->buildEntry($ac[0], $pos)); + + // update is_playlist flag in cc_files to indicate the + // file belongs to a playlist or block (in this case a block) + $db_file = CcFilesQuery::create()->findPk($ac[0], $this->con); + $db_file->setDbIsPlaylist(true)->save($this->con); + $pos = $pos + 1; } elseif (!is_array($ac)) { $res = $this->insertBlockElement($this->buildEntry($ac, $pos)); $pos = $pos + 1; + + $db_file = CcFilesQuery::create()->findPk($ac, $this->con); + $db_file->setDbIsPlaylist(true)->save($this->con); } } catch (Exception $e) { Logging::info($e->getMessage()); @@ -592,10 +601,21 @@ SQL; try { + // we need to get the file id of the item we are deleting + // before the item gets deleted from the block + $itemsToDelete = CcBlockcontentsQuery::create() + ->filterByPrimaryKeys($p_items) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find($this->con); + CcBlockcontentsQuery::create() ->findPKs($p_items) ->delete($this->con); + // now that the items have been deleted we can update the + // is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist($itemsToDelete, 'block', false); + $contents = CcBlockcontentsQuery::create() ->filterByDbBlockId($this->id) ->orderByDbPosition() @@ -965,16 +985,36 @@ SQL; $user = new Application_Model_User($userInfo->id); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + // get only the files from the blocks + // we are about to delete + $itemsToDelete = CcBlockcontentsQuery::create() + ->filterByDbBlockId($p_ids) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find(); + + $updateIsPlaylistFlag = false; + if (!$isAdminOrPM) { $leftOver = self::blocksNotOwnedByUser($p_ids, $p_userId); if (count($leftOver) == 0) { CcBlockQuery::create()->findPKs($p_ids)->delete(); + $updateIsPlaylistFlag = true; } else { throw new BlockNoPermissionException; } } else { CcBlockQuery::create()->findPKs($p_ids)->delete(); + $updateIsPlaylistFlag = true; + } + + if ($updateIsPlaylistFlag) { + // update is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist( + $itemsToDelete, + 'block', + false + ); } } @@ -1000,7 +1040,22 @@ SQL; */ public function deleteAllFilesFromBlock() { + // get only the files from the playlist + // we are about to clear out + $itemsToDelete = CcBlockcontentsQuery::create() + ->filterByDbBlockId($this->id) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find(); + CcBlockcontentsQuery::create()->findByDbBlockId($this->id)->delete(); + + // update is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist( + $itemsToDelete, + 'block', + false + ); + //$this->block->reload(); $this->block->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); $this->block->save($this->con); @@ -1437,7 +1492,7 @@ SQL; return $output; } - public static function getAllBlockContent() + public static function getAllBlockFiles() { $con = Propel::getConnection(); $sql = <<insertPlaylistElement($this->buildEntry($ac, $pos)); + + // update is_playlist flag in cc_files to indicate the + // file belongs to a playlist or block (in this case a playlist) + $db_file = CcFilesQuery::create()->findPk($ac[0], $this->con); + $db_file->setDbIsPlaylist(true)->save($this->con); + $pos = $pos + 1; Logging::info("Adding $ac[1] $ac[0]"); @@ -574,10 +580,21 @@ SQL; try { + // we need to get the file id of the item we are deleting + // before the item gets deleted from the playlist + $itemsToDelete = CcPlaylistcontentsQuery::create() + ->filterByPrimaryKeys($p_items) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find($this->con); + CcPlaylistcontentsQuery::create() ->findPKs($p_items) ->delete($this->con); + // now that the items have been deleted we can update the + // is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist($itemsToDelete, 'playlist', false); + $contents = CcPlaylistcontentsQuery::create() ->filterByDbPlaylistId($this->id) ->orderByDbPosition() @@ -894,15 +911,36 @@ SQL; $user = new Application_Model_User($userInfo->id); $isAdminOrPM = $user->isUserType(array(UTYPE_ADMIN, UTYPE_PROGRAM_MANAGER)); + // get only the files from the playlists + // we are about to delete + $itemsToDelete = CcPlaylistcontentsQuery::create() + ->filterByDbPlaylistId($p_ids) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find(); + + $updateIsPlaylistFlag = false; + if (!$isAdminOrPM) { $leftOver = self::playlistsNotOwnedByUser($p_ids, $p_userId); if (count($leftOver) == 0) { CcPlaylistQuery::create()->findPKs($p_ids)->delete(); + $updateIsPlaylistFlag = true; + } else { throw new PlaylistNoPermissionException; } } else { CcPlaylistQuery::create()->findPKs($p_ids)->delete(); + $updateIsPlaylistFlag = true; + } + + if ($updateIsPlaylistFlag) { + // update is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist( + $itemsToDelete, + 'playlist', + false + ); } } @@ -929,8 +967,22 @@ SQL; */ public function deleteAllFilesFromPlaylist() { + // get only the files from the playlist + // we are about to clear out + $itemsToDelete = CcPlaylistcontentsQuery::create() + ->filterByDbPlaylistId($this->id) + ->filterByDbFileId(null, Criteria::NOT_EQUAL) + ->find(); + CcPlaylistcontentsQuery::create()->findByDbPlaylistId($this->id)->delete(); + // update is_playlist flag in cc_files + Application_Model_StoredFile::setIsPlaylist( + $itemsToDelete, + 'playlist', + false + ); + $this->pl->setDbMtime(new DateTime("now", new DateTimeZone("UTC"))); $this->pl->save($this->con); $this->con->commit(); diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index 2530eb7bf..4aa14bfff 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -514,6 +514,13 @@ class Application_Model_Scheduler $instance->updateScheduleStatus($this->con); } + // update is_scheduled flag for each cc_file + foreach ($schedFiles as $file) { + $db_file = CcFilesQuery::create()->findPk($file['id'], $this->con); + $db_file->setDbIsScheduled(true); + $db_file->save($this->con); + } + $endProfile = microtime(true); Logging::debug("updating show instances status."); Logging::debug(floatval($endProfile) - floatval($startProfile)); @@ -718,6 +725,16 @@ class Application_Model_Scheduler } else { $removedItem->delete($this->con); } + + // update is_scheduled in cc_files but only if + // the file is not scheduled somewhere else + $fileId = $removedItem->getDbFileId(); + // check if the removed item is scheduled somewhere else + $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); + if (!is_null($fileId) && !in_array($fileId, $futureScheduledFiles)) { + $db_file = CcFilesQuery::create()->findPk($fileId, $this->con); + $db_file->setDbIsScheduled(false)->save($this->con); + } } if ($adjustSched === true) { diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 92a46f9c0..98b1bfe6c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -645,7 +645,7 @@ SQL; "track_number", "mood", "bpm", "composer", "info_url", "bit_rate", "sample_rate", "isrc_number", "encoded_by", "label", "copyright", "mime", "language", "filepath", "owner_id", - "conductor", "replay_gain", "lptime" ); + "conductor", "replay_gain", "lptime", "is_playlist", "is_scheduled" ); } public static function searchLibraryFiles($datatables) @@ -697,6 +697,11 @@ SQL; $blSelect[] = "NULL::TIMESTAMP AS ".$key; $fileSelect[] = $key; $streamSelect[] = $key; + } elseif ($key === "is_scheduled" || $key === "is_playlist") { + $plSelect[] = "NULL::boolean AS ".$key; + $blSelect[] = "NULL::boolean AS ".$key; + $fileSelect[] = $key; + $streamSelect[] = "NULL::boolean AS ".$key; } //same columns in each table. else if (in_array($key, array("length", "utime", "mtime"))) { @@ -771,15 +776,6 @@ SQL; } $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); - - $futureScheduledFiles = Application_Model_Schedule::getAllFutureScheduledFiles(); - // we are only interested in which files belong to playlists and blocks - $playlistBlockFiles = array_merge(Application_Model_Playlist::getAllPlaylistFiles(), - Application_Model_Block::getAllBlockContent()); - - $futureScheduledStreams = Application_Model_Schedule::getAllFutureScheduledWebstreams(); - // here we are only interested in which streams belong to a playlist - $playlistStreams = Application_Model_Playlist::getAllPlaylistStreams(); foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); @@ -798,33 +794,8 @@ SQL; $file = Application_Model_StoredFile::Recall($row['id']); $row['soundcloud_status'] = $file->getSoundCloudId(); - //file 'in use' status - if (in_array($row['id'], $futureScheduledFiles) && in_array($row['id'], $playlistBlockFiles)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This track is scheduled in the future and belongs to a playlist or smart block"); - } elseif (in_array($row['id'], $futureScheduledFiles)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This track is scheduled in the future"); - } elseif (in_array($row['id'], $playlistBlockFiles)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This track belongs to a playlist or smart block"); - } - // for audio preview $row['audioFile'] = $row['id'].".".pathinfo($row['filepath'], PATHINFO_EXTENSION); - } else if ($row['ftype'] === "stream") { - $row['audioFile'] = $row['id']; - - if (in_array($row['id'], $futureScheduledStreams) && in_array($row['id'], $playlistStreams)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This webstream is scheduled in the future and belongs to a playlist"); - } elseif (in_array($row['id'], $futureScheduledStreams)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This webstream is scheduled in the future"); - } elseif (in_array($row['id'], $playlistStreams)) { - $row['status_in_use'] = true; - $row['status_msg'] = _("This webstream belongs to a playlist"); - } } else { $row['audioFile'] = $row['id']; } @@ -841,7 +812,6 @@ SQL; // any data from the db for these and datatables will complain $row['checkbox'] = ""; $row['image'] = ""; - $row['status'] = ""; $row['tr_id'] = "{$type}_{$row['id']}"; } @@ -1309,6 +1279,37 @@ SQL; } } } + + public static function setIsPlaylist($p_playlistItems, $p_type, $p_status) { + foreach ($p_playlistItems as $item) { + $file = self::Recall($item->getDbFileId()); + $fileId = $file->_file->getDbId(); + if ($p_type == 'playlist') { + // we have to check if the file is in another playlist before + // we can update + if (!is_null($fileId) && !in_array($fileId, Application_Model_Playlist::getAllPlaylistFiles())) { + $file->_file->setDbIsPlaylist($p_status)->save(); + } + } elseif ($p_type == 'block') { + if (!is_null($fileId) && !in_array($fileId, Application_Model_Block::getAllBlockFiles())) { + $file->_file->setDbIsPlaylist($p_status)->save(); + } + } + } + } + + public static function setIsScheduled($p_scheduleItem, $p_status) { + $fileId = Application_Model_Schedule::GetFileId($p_scheduleItem); + $file = self::Recall($fileId); + $updateIsScheduled = false; + + if (!is_null($fileId) && !in_array($fileId, Application_Model_Schedule::getAllFutureScheduledFiles())) { + $file->_file->setDbIsScheduled($p_status)->save(); + $updateIsScheduled = true; + } + + return $updateIsScheduled; + } } class DeleteScheduledFileException extends Exception {} diff --git a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php index 46f79b71e..56e7a5fff 100644 --- a/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcFilesTableMap.php @@ -106,6 +106,8 @@ class CcFilesTableMap extends TableMap { $this->addColumn('CUEOUT', 'DbCueout', 'VARCHAR', false, null, '00:00:00'); $this->addColumn('SILAN_CHECK', 'DbSilanCheck', 'BOOLEAN', false, null, false); $this->addColumn('HIDDEN', 'DbHidden', 'BOOLEAN', false, null, false); + $this->addColumn('IS_SCHEDULED', 'DbIsScheduled', 'BOOLEAN', false, null, false); + $this->addColumn('IS_PLAYLIST', 'DbIsPlaylist', 'BOOLEAN', false, null, false); // validators } // initialize() diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php index da3b2cc20..55f868769 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFiles.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFiles.php @@ -444,6 +444,20 @@ abstract class BaseCcFiles extends BaseObject implements Persistent */ protected $hidden; + /** + * The value for the is_scheduled field. + * Note: this column has a database default value of: false + * @var boolean + */ + protected $is_scheduled; + + /** + * The value for the is_playlist field. + * Note: this column has a database default value of: false + * @var boolean + */ + protected $is_playlist; + /** * @var CcSubjs */ @@ -513,6 +527,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->cueout = '00:00:00'; $this->silan_check = false; $this->hidden = false; + $this->is_scheduled = false; + $this->is_playlist = false; } /** @@ -1297,6 +1313,26 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return $this->hidden; } + /** + * Get the [is_scheduled] column value. + * + * @return boolean + */ + public function getDbIsScheduled() + { + return $this->is_scheduled; + } + + /** + * Get the [is_playlist] column value. + * + * @return boolean + */ + public function getDbIsPlaylist() + { + return $this->is_playlist; + } + /** * Set the value of [id] column. * @@ -2785,6 +2821,46 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return $this; } // setDbHidden() + /** + * Set the value of [is_scheduled] column. + * + * @param boolean $v new value + * @return CcFiles The current object (for fluent API support) + */ + public function setDbIsScheduled($v) + { + if ($v !== null) { + $v = (boolean) $v; + } + + if ($this->is_scheduled !== $v || $this->isNew()) { + $this->is_scheduled = $v; + $this->modifiedColumns[] = CcFilesPeer::IS_SCHEDULED; + } + + return $this; + } // setDbIsScheduled() + + /** + * Set the value of [is_playlist] column. + * + * @param boolean $v new value + * @return CcFiles The current object (for fluent API support) + */ + public function setDbIsPlaylist($v) + { + if ($v !== null) { + $v = (boolean) $v; + } + + if ($this->is_playlist !== $v || $this->isNew()) { + $this->is_playlist = $v; + $this->modifiedColumns[] = CcFilesPeer::IS_PLAYLIST; + } + + return $this; + } // setDbIsPlaylist() + /** * Indicates whether the columns in this object are only set to default values. * @@ -2843,6 +2919,14 @@ abstract class BaseCcFiles extends BaseObject implements Persistent return false; } + if ($this->is_scheduled !== false) { + return false; + } + + if ($this->is_playlist !== false) { + return false; + } + // otherwise, everything was equal, so return TRUE return true; } // hasOnlyDefaultValues() @@ -2933,6 +3017,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->cueout = ($row[$startcol + 65] !== null) ? (string) $row[$startcol + 65] : null; $this->silan_check = ($row[$startcol + 66] !== null) ? (boolean) $row[$startcol + 66] : null; $this->hidden = ($row[$startcol + 67] !== null) ? (boolean) $row[$startcol + 67] : null; + $this->is_scheduled = ($row[$startcol + 68] !== null) ? (boolean) $row[$startcol + 68] : null; + $this->is_playlist = ($row[$startcol + 69] !== null) ? (boolean) $row[$startcol + 69] : null; $this->resetModified(); $this->setNew(false); @@ -2941,7 +3027,7 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->ensureConsistency(); } - return $startcol + 68; // 68 = CcFilesPeer::NUM_COLUMNS - CcFilesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 70; // 70 = CcFilesPeer::NUM_COLUMNS - CcFilesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating CcFiles object", $e); @@ -3578,6 +3664,12 @@ abstract class BaseCcFiles extends BaseObject implements Persistent case 67: return $this->getDbHidden(); break; + case 68: + return $this->getDbIsScheduled(); + break; + case 69: + return $this->getDbIsPlaylist(); + break; default: return null; break; @@ -3670,6 +3762,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $keys[65] => $this->getDbCueout(), $keys[66] => $this->getDbSilanCheck(), $keys[67] => $this->getDbHidden(), + $keys[68] => $this->getDbIsScheduled(), + $keys[69] => $this->getDbIsPlaylist(), ); if ($includeForeignObjects) { if (null !== $this->aFkOwner) { @@ -3916,6 +4010,12 @@ abstract class BaseCcFiles extends BaseObject implements Persistent case 67: $this->setDbHidden($value); break; + case 68: + $this->setDbIsScheduled($value); + break; + case 69: + $this->setDbIsPlaylist($value); + break; } // switch() } @@ -4008,6 +4108,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent if (array_key_exists($keys[65], $arr)) $this->setDbCueout($arr[$keys[65]]); if (array_key_exists($keys[66], $arr)) $this->setDbSilanCheck($arr[$keys[66]]); if (array_key_exists($keys[67], $arr)) $this->setDbHidden($arr[$keys[67]]); + if (array_key_exists($keys[68], $arr)) $this->setDbIsScheduled($arr[$keys[68]]); + if (array_key_exists($keys[69], $arr)) $this->setDbIsPlaylist($arr[$keys[69]]); } /** @@ -4087,6 +4189,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent if ($this->isColumnModified(CcFilesPeer::CUEOUT)) $criteria->add(CcFilesPeer::CUEOUT, $this->cueout); if ($this->isColumnModified(CcFilesPeer::SILAN_CHECK)) $criteria->add(CcFilesPeer::SILAN_CHECK, $this->silan_check); if ($this->isColumnModified(CcFilesPeer::HIDDEN)) $criteria->add(CcFilesPeer::HIDDEN, $this->hidden); + if ($this->isColumnModified(CcFilesPeer::IS_SCHEDULED)) $criteria->add(CcFilesPeer::IS_SCHEDULED, $this->is_scheduled); + if ($this->isColumnModified(CcFilesPeer::IS_PLAYLIST)) $criteria->add(CcFilesPeer::IS_PLAYLIST, $this->is_playlist); return $criteria; } @@ -4215,6 +4319,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $copyObj->setDbCueout($this->cueout); $copyObj->setDbSilanCheck($this->silan_check); $copyObj->setDbHidden($this->hidden); + $copyObj->setDbIsScheduled($this->is_scheduled); + $copyObj->setDbIsPlaylist($this->is_playlist); if ($deepCopy) { // important: temporarily setNew(false) because this affects the behavior of @@ -5121,6 +5227,8 @@ abstract class BaseCcFiles extends BaseObject implements Persistent $this->cueout = null; $this->silan_check = null; $this->hidden = null; + $this->is_scheduled = null; + $this->is_playlist = null; $this->alreadyInSave = false; $this->alreadyInValidation = false; $this->clearAllReferences(); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php index 714cec847..82ebc7851 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesPeer.php @@ -26,7 +26,7 @@ abstract class BaseCcFilesPeer { const TM_CLASS = 'CcFilesTableMap'; /** The total number of columns. */ - const NUM_COLUMNS = 68; + const NUM_COLUMNS = 70; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -235,6 +235,12 @@ abstract class BaseCcFilesPeer { /** the column name for the HIDDEN field */ const HIDDEN = 'cc_files.HIDDEN'; + /** the column name for the IS_SCHEDULED field */ + const IS_SCHEDULED = 'cc_files.IS_SCHEDULED'; + + /** the column name for the IS_PLAYLIST field */ + const IS_PLAYLIST = 'cc_files.IS_PLAYLIST'; + /** * An identiy map to hold any loaded instances of CcFiles objects. * This must be public so that other peer classes can access this when hydrating from JOIN @@ -251,12 +257,12 @@ abstract class BaseCcFilesPeer { * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('DbId', 'DbName', 'DbMime', 'DbFtype', 'DbDirectory', 'DbFilepath', 'DbState', 'DbCurrentlyaccessing', 'DbEditedby', 'DbMtime', 'DbUtime', 'DbLPtime', 'DbMd5', 'DbTrackTitle', 'DbArtistName', 'DbBitRate', 'DbSampleRate', 'DbFormat', 'DbLength', 'DbAlbumTitle', 'DbGenre', 'DbComments', 'DbYear', 'DbTrackNumber', 'DbChannels', 'DbUrl', 'DbBpm', 'DbRating', 'DbEncodedBy', 'DbDiscNumber', 'DbMood', 'DbLabel', 'DbComposer', 'DbEncoder', 'DbChecksum', 'DbLyrics', 'DbOrchestra', 'DbConductor', 'DbLyricist', 'DbOriginalLyricist', 'DbRadioStationName', 'DbInfoUrl', 'DbArtistUrl', 'DbAudioSourceUrl', 'DbRadioStationUrl', 'DbBuyThisUrl', 'DbIsrcNumber', 'DbCatalogNumber', 'DbOriginalArtist', 'DbCopyright', 'DbReportDatetime', 'DbReportLocation', 'DbReportOrganization', 'DbSubject', 'DbContributor', 'DbLanguage', 'DbFileExists', 'DbSoundcloudId', 'DbSoundcloudErrorCode', 'DbSoundcloudErrorMsg', 'DbSoundcloudLinkToFile', 'DbSoundCloundUploadTime', 'DbReplayGain', 'DbOwnerId', 'DbCuein', 'DbCueout', 'DbSilanCheck', 'DbHidden', ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbName', 'dbMime', 'dbFtype', 'dbDirectory', 'dbFilepath', 'dbState', 'dbCurrentlyaccessing', 'dbEditedby', 'dbMtime', 'dbUtime', 'dbLPtime', 'dbMd5', 'dbTrackTitle', 'dbArtistName', 'dbBitRate', 'dbSampleRate', 'dbFormat', 'dbLength', 'dbAlbumTitle', 'dbGenre', 'dbComments', 'dbYear', 'dbTrackNumber', 'dbChannels', 'dbUrl', 'dbBpm', 'dbRating', 'dbEncodedBy', 'dbDiscNumber', 'dbMood', 'dbLabel', 'dbComposer', 'dbEncoder', 'dbChecksum', 'dbLyrics', 'dbOrchestra', 'dbConductor', 'dbLyricist', 'dbOriginalLyricist', 'dbRadioStationName', 'dbInfoUrl', 'dbArtistUrl', 'dbAudioSourceUrl', 'dbRadioStationUrl', 'dbBuyThisUrl', 'dbIsrcNumber', 'dbCatalogNumber', 'dbOriginalArtist', 'dbCopyright', 'dbReportDatetime', 'dbReportLocation', 'dbReportOrganization', 'dbSubject', 'dbContributor', 'dbLanguage', 'dbFileExists', 'dbSoundcloudId', 'dbSoundcloudErrorCode', 'dbSoundcloudErrorMsg', 'dbSoundcloudLinkToFile', 'dbSoundCloundUploadTime', 'dbReplayGain', 'dbOwnerId', 'dbCuein', 'dbCueout', 'dbSilanCheck', 'dbHidden', ), - BasePeer::TYPE_COLNAME => array (self::ID, self::NAME, self::MIME, self::FTYPE, self::DIRECTORY, self::FILEPATH, self::STATE, self::CURRENTLYACCESSING, self::EDITEDBY, self::MTIME, self::UTIME, self::LPTIME, self::MD5, self::TRACK_TITLE, self::ARTIST_NAME, self::BIT_RATE, self::SAMPLE_RATE, self::FORMAT, self::LENGTH, self::ALBUM_TITLE, self::GENRE, self::COMMENTS, self::YEAR, self::TRACK_NUMBER, self::CHANNELS, self::URL, self::BPM, self::RATING, self::ENCODED_BY, self::DISC_NUMBER, self::MOOD, self::LABEL, self::COMPOSER, self::ENCODER, self::CHECKSUM, self::LYRICS, self::ORCHESTRA, self::CONDUCTOR, self::LYRICIST, self::ORIGINAL_LYRICIST, self::RADIO_STATION_NAME, self::INFO_URL, self::ARTIST_URL, self::AUDIO_SOURCE_URL, self::RADIO_STATION_URL, self::BUY_THIS_URL, self::ISRC_NUMBER, self::CATALOG_NUMBER, self::ORIGINAL_ARTIST, self::COPYRIGHT, self::REPORT_DATETIME, self::REPORT_LOCATION, self::REPORT_ORGANIZATION, self::SUBJECT, self::CONTRIBUTOR, self::LANGUAGE, self::FILE_EXISTS, self::SOUNDCLOUD_ID, self::SOUNDCLOUD_ERROR_CODE, self::SOUNDCLOUD_ERROR_MSG, self::SOUNDCLOUD_LINK_TO_FILE, self::SOUNDCLOUD_UPLOAD_TIME, self::REPLAY_GAIN, self::OWNER_ID, self::CUEIN, self::CUEOUT, self::SILAN_CHECK, self::HIDDEN, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID', 'NAME', 'MIME', 'FTYPE', 'DIRECTORY', 'FILEPATH', 'STATE', 'CURRENTLYACCESSING', 'EDITEDBY', 'MTIME', 'UTIME', 'LPTIME', 'MD5', 'TRACK_TITLE', 'ARTIST_NAME', 'BIT_RATE', 'SAMPLE_RATE', 'FORMAT', 'LENGTH', 'ALBUM_TITLE', 'GENRE', 'COMMENTS', 'YEAR', 'TRACK_NUMBER', 'CHANNELS', 'URL', 'BPM', 'RATING', 'ENCODED_BY', 'DISC_NUMBER', 'MOOD', 'LABEL', 'COMPOSER', 'ENCODER', 'CHECKSUM', 'LYRICS', 'ORCHESTRA', 'CONDUCTOR', 'LYRICIST', 'ORIGINAL_LYRICIST', 'RADIO_STATION_NAME', 'INFO_URL', 'ARTIST_URL', 'AUDIO_SOURCE_URL', 'RADIO_STATION_URL', 'BUY_THIS_URL', 'ISRC_NUMBER', 'CATALOG_NUMBER', 'ORIGINAL_ARTIST', 'COPYRIGHT', 'REPORT_DATETIME', 'REPORT_LOCATION', 'REPORT_ORGANIZATION', 'SUBJECT', 'CONTRIBUTOR', 'LANGUAGE', 'FILE_EXISTS', 'SOUNDCLOUD_ID', 'SOUNDCLOUD_ERROR_CODE', 'SOUNDCLOUD_ERROR_MSG', 'SOUNDCLOUD_LINK_TO_FILE', 'SOUNDCLOUD_UPLOAD_TIME', 'REPLAY_GAIN', 'OWNER_ID', 'CUEIN', 'CUEOUT', 'SILAN_CHECK', 'HIDDEN', ), - BasePeer::TYPE_FIELDNAME => array ('id', 'name', 'mime', 'ftype', 'directory', 'filepath', 'state', 'currentlyaccessing', 'editedby', 'mtime', 'utime', 'lptime', 'md5', 'track_title', 'artist_name', 'bit_rate', 'sample_rate', 'format', 'length', 'album_title', 'genre', 'comments', 'year', 'track_number', 'channels', 'url', 'bpm', 'rating', 'encoded_by', 'disc_number', 'mood', 'label', 'composer', 'encoder', 'checksum', 'lyrics', 'orchestra', 'conductor', 'lyricist', 'original_lyricist', 'radio_station_name', 'info_url', 'artist_url', 'audio_source_url', 'radio_station_url', 'buy_this_url', 'isrc_number', 'catalog_number', 'original_artist', 'copyright', 'report_datetime', 'report_location', 'report_organization', 'subject', 'contributor', 'language', 'file_exists', 'soundcloud_id', 'soundcloud_error_code', 'soundcloud_error_msg', 'soundcloud_link_to_file', 'soundcloud_upload_time', 'replay_gain', 'owner_id', 'cuein', 'cueout', 'silan_check', 'hidden', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, ) + BasePeer::TYPE_PHPNAME => array ('DbId', 'DbName', 'DbMime', 'DbFtype', 'DbDirectory', 'DbFilepath', 'DbState', 'DbCurrentlyaccessing', 'DbEditedby', 'DbMtime', 'DbUtime', 'DbLPtime', 'DbMd5', 'DbTrackTitle', 'DbArtistName', 'DbBitRate', 'DbSampleRate', 'DbFormat', 'DbLength', 'DbAlbumTitle', 'DbGenre', 'DbComments', 'DbYear', 'DbTrackNumber', 'DbChannels', 'DbUrl', 'DbBpm', 'DbRating', 'DbEncodedBy', 'DbDiscNumber', 'DbMood', 'DbLabel', 'DbComposer', 'DbEncoder', 'DbChecksum', 'DbLyrics', 'DbOrchestra', 'DbConductor', 'DbLyricist', 'DbOriginalLyricist', 'DbRadioStationName', 'DbInfoUrl', 'DbArtistUrl', 'DbAudioSourceUrl', 'DbRadioStationUrl', 'DbBuyThisUrl', 'DbIsrcNumber', 'DbCatalogNumber', 'DbOriginalArtist', 'DbCopyright', 'DbReportDatetime', 'DbReportLocation', 'DbReportOrganization', 'DbSubject', 'DbContributor', 'DbLanguage', 'DbFileExists', 'DbSoundcloudId', 'DbSoundcloudErrorCode', 'DbSoundcloudErrorMsg', 'DbSoundcloudLinkToFile', 'DbSoundCloundUploadTime', 'DbReplayGain', 'DbOwnerId', 'DbCuein', 'DbCueout', 'DbSilanCheck', 'DbHidden', 'DbIsScheduled', 'DbIsPlaylist', ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbName', 'dbMime', 'dbFtype', 'dbDirectory', 'dbFilepath', 'dbState', 'dbCurrentlyaccessing', 'dbEditedby', 'dbMtime', 'dbUtime', 'dbLPtime', 'dbMd5', 'dbTrackTitle', 'dbArtistName', 'dbBitRate', 'dbSampleRate', 'dbFormat', 'dbLength', 'dbAlbumTitle', 'dbGenre', 'dbComments', 'dbYear', 'dbTrackNumber', 'dbChannels', 'dbUrl', 'dbBpm', 'dbRating', 'dbEncodedBy', 'dbDiscNumber', 'dbMood', 'dbLabel', 'dbComposer', 'dbEncoder', 'dbChecksum', 'dbLyrics', 'dbOrchestra', 'dbConductor', 'dbLyricist', 'dbOriginalLyricist', 'dbRadioStationName', 'dbInfoUrl', 'dbArtistUrl', 'dbAudioSourceUrl', 'dbRadioStationUrl', 'dbBuyThisUrl', 'dbIsrcNumber', 'dbCatalogNumber', 'dbOriginalArtist', 'dbCopyright', 'dbReportDatetime', 'dbReportLocation', 'dbReportOrganization', 'dbSubject', 'dbContributor', 'dbLanguage', 'dbFileExists', 'dbSoundcloudId', 'dbSoundcloudErrorCode', 'dbSoundcloudErrorMsg', 'dbSoundcloudLinkToFile', 'dbSoundCloundUploadTime', 'dbReplayGain', 'dbOwnerId', 'dbCuein', 'dbCueout', 'dbSilanCheck', 'dbHidden', 'dbIsScheduled', 'dbIsPlaylist', ), + BasePeer::TYPE_COLNAME => array (self::ID, self::NAME, self::MIME, self::FTYPE, self::DIRECTORY, self::FILEPATH, self::STATE, self::CURRENTLYACCESSING, self::EDITEDBY, self::MTIME, self::UTIME, self::LPTIME, self::MD5, self::TRACK_TITLE, self::ARTIST_NAME, self::BIT_RATE, self::SAMPLE_RATE, self::FORMAT, self::LENGTH, self::ALBUM_TITLE, self::GENRE, self::COMMENTS, self::YEAR, self::TRACK_NUMBER, self::CHANNELS, self::URL, self::BPM, self::RATING, self::ENCODED_BY, self::DISC_NUMBER, self::MOOD, self::LABEL, self::COMPOSER, self::ENCODER, self::CHECKSUM, self::LYRICS, self::ORCHESTRA, self::CONDUCTOR, self::LYRICIST, self::ORIGINAL_LYRICIST, self::RADIO_STATION_NAME, self::INFO_URL, self::ARTIST_URL, self::AUDIO_SOURCE_URL, self::RADIO_STATION_URL, self::BUY_THIS_URL, self::ISRC_NUMBER, self::CATALOG_NUMBER, self::ORIGINAL_ARTIST, self::COPYRIGHT, self::REPORT_DATETIME, self::REPORT_LOCATION, self::REPORT_ORGANIZATION, self::SUBJECT, self::CONTRIBUTOR, self::LANGUAGE, self::FILE_EXISTS, self::SOUNDCLOUD_ID, self::SOUNDCLOUD_ERROR_CODE, self::SOUNDCLOUD_ERROR_MSG, self::SOUNDCLOUD_LINK_TO_FILE, self::SOUNDCLOUD_UPLOAD_TIME, self::REPLAY_GAIN, self::OWNER_ID, self::CUEIN, self::CUEOUT, self::SILAN_CHECK, self::HIDDEN, self::IS_SCHEDULED, self::IS_PLAYLIST, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID', 'NAME', 'MIME', 'FTYPE', 'DIRECTORY', 'FILEPATH', 'STATE', 'CURRENTLYACCESSING', 'EDITEDBY', 'MTIME', 'UTIME', 'LPTIME', 'MD5', 'TRACK_TITLE', 'ARTIST_NAME', 'BIT_RATE', 'SAMPLE_RATE', 'FORMAT', 'LENGTH', 'ALBUM_TITLE', 'GENRE', 'COMMENTS', 'YEAR', 'TRACK_NUMBER', 'CHANNELS', 'URL', 'BPM', 'RATING', 'ENCODED_BY', 'DISC_NUMBER', 'MOOD', 'LABEL', 'COMPOSER', 'ENCODER', 'CHECKSUM', 'LYRICS', 'ORCHESTRA', 'CONDUCTOR', 'LYRICIST', 'ORIGINAL_LYRICIST', 'RADIO_STATION_NAME', 'INFO_URL', 'ARTIST_URL', 'AUDIO_SOURCE_URL', 'RADIO_STATION_URL', 'BUY_THIS_URL', 'ISRC_NUMBER', 'CATALOG_NUMBER', 'ORIGINAL_ARTIST', 'COPYRIGHT', 'REPORT_DATETIME', 'REPORT_LOCATION', 'REPORT_ORGANIZATION', 'SUBJECT', 'CONTRIBUTOR', 'LANGUAGE', 'FILE_EXISTS', 'SOUNDCLOUD_ID', 'SOUNDCLOUD_ERROR_CODE', 'SOUNDCLOUD_ERROR_MSG', 'SOUNDCLOUD_LINK_TO_FILE', 'SOUNDCLOUD_UPLOAD_TIME', 'REPLAY_GAIN', 'OWNER_ID', 'CUEIN', 'CUEOUT', 'SILAN_CHECK', 'HIDDEN', 'IS_SCHEDULED', 'IS_PLAYLIST', ), + BasePeer::TYPE_FIELDNAME => array ('id', 'name', 'mime', 'ftype', 'directory', 'filepath', 'state', 'currentlyaccessing', 'editedby', 'mtime', 'utime', 'lptime', 'md5', 'track_title', 'artist_name', 'bit_rate', 'sample_rate', 'format', 'length', 'album_title', 'genre', 'comments', 'year', 'track_number', 'channels', 'url', 'bpm', 'rating', 'encoded_by', 'disc_number', 'mood', 'label', 'composer', 'encoder', 'checksum', 'lyrics', 'orchestra', 'conductor', 'lyricist', 'original_lyricist', 'radio_station_name', 'info_url', 'artist_url', 'audio_source_url', 'radio_station_url', 'buy_this_url', 'isrc_number', 'catalog_number', 'original_artist', 'copyright', 'report_datetime', 'report_location', 'report_organization', 'subject', 'contributor', 'language', 'file_exists', 'soundcloud_id', 'soundcloud_error_code', 'soundcloud_error_msg', 'soundcloud_link_to_file', 'soundcloud_upload_time', 'replay_gain', 'owner_id', 'cuein', 'cueout', 'silan_check', 'hidden', 'is_scheduled', 'is_playlist', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ) ); /** @@ -266,12 +272,12 @@ abstract class BaseCcFilesPeer { * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbName' => 1, 'DbMime' => 2, 'DbFtype' => 3, 'DbDirectory' => 4, 'DbFilepath' => 5, 'DbState' => 6, 'DbCurrentlyaccessing' => 7, 'DbEditedby' => 8, 'DbMtime' => 9, 'DbUtime' => 10, 'DbLPtime' => 11, 'DbMd5' => 12, 'DbTrackTitle' => 13, 'DbArtistName' => 14, 'DbBitRate' => 15, 'DbSampleRate' => 16, 'DbFormat' => 17, 'DbLength' => 18, 'DbAlbumTitle' => 19, 'DbGenre' => 20, 'DbComments' => 21, 'DbYear' => 22, 'DbTrackNumber' => 23, 'DbChannels' => 24, 'DbUrl' => 25, 'DbBpm' => 26, 'DbRating' => 27, 'DbEncodedBy' => 28, 'DbDiscNumber' => 29, 'DbMood' => 30, 'DbLabel' => 31, 'DbComposer' => 32, 'DbEncoder' => 33, 'DbChecksum' => 34, 'DbLyrics' => 35, 'DbOrchestra' => 36, 'DbConductor' => 37, 'DbLyricist' => 38, 'DbOriginalLyricist' => 39, 'DbRadioStationName' => 40, 'DbInfoUrl' => 41, 'DbArtistUrl' => 42, 'DbAudioSourceUrl' => 43, 'DbRadioStationUrl' => 44, 'DbBuyThisUrl' => 45, 'DbIsrcNumber' => 46, 'DbCatalogNumber' => 47, 'DbOriginalArtist' => 48, 'DbCopyright' => 49, 'DbReportDatetime' => 50, 'DbReportLocation' => 51, 'DbReportOrganization' => 52, 'DbSubject' => 53, 'DbContributor' => 54, 'DbLanguage' => 55, 'DbFileExists' => 56, 'DbSoundcloudId' => 57, 'DbSoundcloudErrorCode' => 58, 'DbSoundcloudErrorMsg' => 59, 'DbSoundcloudLinkToFile' => 60, 'DbSoundCloundUploadTime' => 61, 'DbReplayGain' => 62, 'DbOwnerId' => 63, 'DbCuein' => 64, 'DbCueout' => 65, 'DbSilanCheck' => 66, 'DbHidden' => 67, ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbName' => 1, 'dbMime' => 2, 'dbFtype' => 3, 'dbDirectory' => 4, 'dbFilepath' => 5, 'dbState' => 6, 'dbCurrentlyaccessing' => 7, 'dbEditedby' => 8, 'dbMtime' => 9, 'dbUtime' => 10, 'dbLPtime' => 11, 'dbMd5' => 12, 'dbTrackTitle' => 13, 'dbArtistName' => 14, 'dbBitRate' => 15, 'dbSampleRate' => 16, 'dbFormat' => 17, 'dbLength' => 18, 'dbAlbumTitle' => 19, 'dbGenre' => 20, 'dbComments' => 21, 'dbYear' => 22, 'dbTrackNumber' => 23, 'dbChannels' => 24, 'dbUrl' => 25, 'dbBpm' => 26, 'dbRating' => 27, 'dbEncodedBy' => 28, 'dbDiscNumber' => 29, 'dbMood' => 30, 'dbLabel' => 31, 'dbComposer' => 32, 'dbEncoder' => 33, 'dbChecksum' => 34, 'dbLyrics' => 35, 'dbOrchestra' => 36, 'dbConductor' => 37, 'dbLyricist' => 38, 'dbOriginalLyricist' => 39, 'dbRadioStationName' => 40, 'dbInfoUrl' => 41, 'dbArtistUrl' => 42, 'dbAudioSourceUrl' => 43, 'dbRadioStationUrl' => 44, 'dbBuyThisUrl' => 45, 'dbIsrcNumber' => 46, 'dbCatalogNumber' => 47, 'dbOriginalArtist' => 48, 'dbCopyright' => 49, 'dbReportDatetime' => 50, 'dbReportLocation' => 51, 'dbReportOrganization' => 52, 'dbSubject' => 53, 'dbContributor' => 54, 'dbLanguage' => 55, 'dbFileExists' => 56, 'dbSoundcloudId' => 57, 'dbSoundcloudErrorCode' => 58, 'dbSoundcloudErrorMsg' => 59, 'dbSoundcloudLinkToFile' => 60, 'dbSoundCloundUploadTime' => 61, 'dbReplayGain' => 62, 'dbOwnerId' => 63, 'dbCuein' => 64, 'dbCueout' => 65, 'dbSilanCheck' => 66, 'dbHidden' => 67, ), - BasePeer::TYPE_COLNAME => array (self::ID => 0, self::NAME => 1, self::MIME => 2, self::FTYPE => 3, self::DIRECTORY => 4, self::FILEPATH => 5, self::STATE => 6, self::CURRENTLYACCESSING => 7, self::EDITEDBY => 8, self::MTIME => 9, self::UTIME => 10, self::LPTIME => 11, self::MD5 => 12, self::TRACK_TITLE => 13, self::ARTIST_NAME => 14, self::BIT_RATE => 15, self::SAMPLE_RATE => 16, self::FORMAT => 17, self::LENGTH => 18, self::ALBUM_TITLE => 19, self::GENRE => 20, self::COMMENTS => 21, self::YEAR => 22, self::TRACK_NUMBER => 23, self::CHANNELS => 24, self::URL => 25, self::BPM => 26, self::RATING => 27, self::ENCODED_BY => 28, self::DISC_NUMBER => 29, self::MOOD => 30, self::LABEL => 31, self::COMPOSER => 32, self::ENCODER => 33, self::CHECKSUM => 34, self::LYRICS => 35, self::ORCHESTRA => 36, self::CONDUCTOR => 37, self::LYRICIST => 38, self::ORIGINAL_LYRICIST => 39, self::RADIO_STATION_NAME => 40, self::INFO_URL => 41, self::ARTIST_URL => 42, self::AUDIO_SOURCE_URL => 43, self::RADIO_STATION_URL => 44, self::BUY_THIS_URL => 45, self::ISRC_NUMBER => 46, self::CATALOG_NUMBER => 47, self::ORIGINAL_ARTIST => 48, self::COPYRIGHT => 49, self::REPORT_DATETIME => 50, self::REPORT_LOCATION => 51, self::REPORT_ORGANIZATION => 52, self::SUBJECT => 53, self::CONTRIBUTOR => 54, self::LANGUAGE => 55, self::FILE_EXISTS => 56, self::SOUNDCLOUD_ID => 57, self::SOUNDCLOUD_ERROR_CODE => 58, self::SOUNDCLOUD_ERROR_MSG => 59, self::SOUNDCLOUD_LINK_TO_FILE => 60, self::SOUNDCLOUD_UPLOAD_TIME => 61, self::REPLAY_GAIN => 62, self::OWNER_ID => 63, self::CUEIN => 64, self::CUEOUT => 65, self::SILAN_CHECK => 66, self::HIDDEN => 67, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'NAME' => 1, 'MIME' => 2, 'FTYPE' => 3, 'DIRECTORY' => 4, 'FILEPATH' => 5, 'STATE' => 6, 'CURRENTLYACCESSING' => 7, 'EDITEDBY' => 8, 'MTIME' => 9, 'UTIME' => 10, 'LPTIME' => 11, 'MD5' => 12, 'TRACK_TITLE' => 13, 'ARTIST_NAME' => 14, 'BIT_RATE' => 15, 'SAMPLE_RATE' => 16, 'FORMAT' => 17, 'LENGTH' => 18, 'ALBUM_TITLE' => 19, 'GENRE' => 20, 'COMMENTS' => 21, 'YEAR' => 22, 'TRACK_NUMBER' => 23, 'CHANNELS' => 24, 'URL' => 25, 'BPM' => 26, 'RATING' => 27, 'ENCODED_BY' => 28, 'DISC_NUMBER' => 29, 'MOOD' => 30, 'LABEL' => 31, 'COMPOSER' => 32, 'ENCODER' => 33, 'CHECKSUM' => 34, 'LYRICS' => 35, 'ORCHESTRA' => 36, 'CONDUCTOR' => 37, 'LYRICIST' => 38, 'ORIGINAL_LYRICIST' => 39, 'RADIO_STATION_NAME' => 40, 'INFO_URL' => 41, 'ARTIST_URL' => 42, 'AUDIO_SOURCE_URL' => 43, 'RADIO_STATION_URL' => 44, 'BUY_THIS_URL' => 45, 'ISRC_NUMBER' => 46, 'CATALOG_NUMBER' => 47, 'ORIGINAL_ARTIST' => 48, 'COPYRIGHT' => 49, 'REPORT_DATETIME' => 50, 'REPORT_LOCATION' => 51, 'REPORT_ORGANIZATION' => 52, 'SUBJECT' => 53, 'CONTRIBUTOR' => 54, 'LANGUAGE' => 55, 'FILE_EXISTS' => 56, 'SOUNDCLOUD_ID' => 57, 'SOUNDCLOUD_ERROR_CODE' => 58, 'SOUNDCLOUD_ERROR_MSG' => 59, 'SOUNDCLOUD_LINK_TO_FILE' => 60, 'SOUNDCLOUD_UPLOAD_TIME' => 61, 'REPLAY_GAIN' => 62, 'OWNER_ID' => 63, 'CUEIN' => 64, 'CUEOUT' => 65, 'SILAN_CHECK' => 66, 'HIDDEN' => 67, ), - BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'name' => 1, 'mime' => 2, 'ftype' => 3, 'directory' => 4, 'filepath' => 5, 'state' => 6, 'currentlyaccessing' => 7, 'editedby' => 8, 'mtime' => 9, 'utime' => 10, 'lptime' => 11, 'md5' => 12, 'track_title' => 13, 'artist_name' => 14, 'bit_rate' => 15, 'sample_rate' => 16, 'format' => 17, 'length' => 18, 'album_title' => 19, 'genre' => 20, 'comments' => 21, 'year' => 22, 'track_number' => 23, 'channels' => 24, 'url' => 25, 'bpm' => 26, 'rating' => 27, 'encoded_by' => 28, 'disc_number' => 29, 'mood' => 30, 'label' => 31, 'composer' => 32, 'encoder' => 33, 'checksum' => 34, 'lyrics' => 35, 'orchestra' => 36, 'conductor' => 37, 'lyricist' => 38, 'original_lyricist' => 39, 'radio_station_name' => 40, 'info_url' => 41, 'artist_url' => 42, 'audio_source_url' => 43, 'radio_station_url' => 44, 'buy_this_url' => 45, 'isrc_number' => 46, 'catalog_number' => 47, 'original_artist' => 48, 'copyright' => 49, 'report_datetime' => 50, 'report_location' => 51, 'report_organization' => 52, 'subject' => 53, 'contributor' => 54, 'language' => 55, 'file_exists' => 56, 'soundcloud_id' => 57, 'soundcloud_error_code' => 58, 'soundcloud_error_msg' => 59, 'soundcloud_link_to_file' => 60, 'soundcloud_upload_time' => 61, 'replay_gain' => 62, 'owner_id' => 63, 'cuein' => 64, 'cueout' => 65, 'silan_check' => 66, 'hidden' => 67, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, ) + BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbName' => 1, 'DbMime' => 2, 'DbFtype' => 3, 'DbDirectory' => 4, 'DbFilepath' => 5, 'DbState' => 6, 'DbCurrentlyaccessing' => 7, 'DbEditedby' => 8, 'DbMtime' => 9, 'DbUtime' => 10, 'DbLPtime' => 11, 'DbMd5' => 12, 'DbTrackTitle' => 13, 'DbArtistName' => 14, 'DbBitRate' => 15, 'DbSampleRate' => 16, 'DbFormat' => 17, 'DbLength' => 18, 'DbAlbumTitle' => 19, 'DbGenre' => 20, 'DbComments' => 21, 'DbYear' => 22, 'DbTrackNumber' => 23, 'DbChannels' => 24, 'DbUrl' => 25, 'DbBpm' => 26, 'DbRating' => 27, 'DbEncodedBy' => 28, 'DbDiscNumber' => 29, 'DbMood' => 30, 'DbLabel' => 31, 'DbComposer' => 32, 'DbEncoder' => 33, 'DbChecksum' => 34, 'DbLyrics' => 35, 'DbOrchestra' => 36, 'DbConductor' => 37, 'DbLyricist' => 38, 'DbOriginalLyricist' => 39, 'DbRadioStationName' => 40, 'DbInfoUrl' => 41, 'DbArtistUrl' => 42, 'DbAudioSourceUrl' => 43, 'DbRadioStationUrl' => 44, 'DbBuyThisUrl' => 45, 'DbIsrcNumber' => 46, 'DbCatalogNumber' => 47, 'DbOriginalArtist' => 48, 'DbCopyright' => 49, 'DbReportDatetime' => 50, 'DbReportLocation' => 51, 'DbReportOrganization' => 52, 'DbSubject' => 53, 'DbContributor' => 54, 'DbLanguage' => 55, 'DbFileExists' => 56, 'DbSoundcloudId' => 57, 'DbSoundcloudErrorCode' => 58, 'DbSoundcloudErrorMsg' => 59, 'DbSoundcloudLinkToFile' => 60, 'DbSoundCloundUploadTime' => 61, 'DbReplayGain' => 62, 'DbOwnerId' => 63, 'DbCuein' => 64, 'DbCueout' => 65, 'DbSilanCheck' => 66, 'DbHidden' => 67, 'DbIsScheduled' => 68, 'DbIsPlaylist' => 69, ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbName' => 1, 'dbMime' => 2, 'dbFtype' => 3, 'dbDirectory' => 4, 'dbFilepath' => 5, 'dbState' => 6, 'dbCurrentlyaccessing' => 7, 'dbEditedby' => 8, 'dbMtime' => 9, 'dbUtime' => 10, 'dbLPtime' => 11, 'dbMd5' => 12, 'dbTrackTitle' => 13, 'dbArtistName' => 14, 'dbBitRate' => 15, 'dbSampleRate' => 16, 'dbFormat' => 17, 'dbLength' => 18, 'dbAlbumTitle' => 19, 'dbGenre' => 20, 'dbComments' => 21, 'dbYear' => 22, 'dbTrackNumber' => 23, 'dbChannels' => 24, 'dbUrl' => 25, 'dbBpm' => 26, 'dbRating' => 27, 'dbEncodedBy' => 28, 'dbDiscNumber' => 29, 'dbMood' => 30, 'dbLabel' => 31, 'dbComposer' => 32, 'dbEncoder' => 33, 'dbChecksum' => 34, 'dbLyrics' => 35, 'dbOrchestra' => 36, 'dbConductor' => 37, 'dbLyricist' => 38, 'dbOriginalLyricist' => 39, 'dbRadioStationName' => 40, 'dbInfoUrl' => 41, 'dbArtistUrl' => 42, 'dbAudioSourceUrl' => 43, 'dbRadioStationUrl' => 44, 'dbBuyThisUrl' => 45, 'dbIsrcNumber' => 46, 'dbCatalogNumber' => 47, 'dbOriginalArtist' => 48, 'dbCopyright' => 49, 'dbReportDatetime' => 50, 'dbReportLocation' => 51, 'dbReportOrganization' => 52, 'dbSubject' => 53, 'dbContributor' => 54, 'dbLanguage' => 55, 'dbFileExists' => 56, 'dbSoundcloudId' => 57, 'dbSoundcloudErrorCode' => 58, 'dbSoundcloudErrorMsg' => 59, 'dbSoundcloudLinkToFile' => 60, 'dbSoundCloundUploadTime' => 61, 'dbReplayGain' => 62, 'dbOwnerId' => 63, 'dbCuein' => 64, 'dbCueout' => 65, 'dbSilanCheck' => 66, 'dbHidden' => 67, 'dbIsScheduled' => 68, 'dbIsPlaylist' => 69, ), + BasePeer::TYPE_COLNAME => array (self::ID => 0, self::NAME => 1, self::MIME => 2, self::FTYPE => 3, self::DIRECTORY => 4, self::FILEPATH => 5, self::STATE => 6, self::CURRENTLYACCESSING => 7, self::EDITEDBY => 8, self::MTIME => 9, self::UTIME => 10, self::LPTIME => 11, self::MD5 => 12, self::TRACK_TITLE => 13, self::ARTIST_NAME => 14, self::BIT_RATE => 15, self::SAMPLE_RATE => 16, self::FORMAT => 17, self::LENGTH => 18, self::ALBUM_TITLE => 19, self::GENRE => 20, self::COMMENTS => 21, self::YEAR => 22, self::TRACK_NUMBER => 23, self::CHANNELS => 24, self::URL => 25, self::BPM => 26, self::RATING => 27, self::ENCODED_BY => 28, self::DISC_NUMBER => 29, self::MOOD => 30, self::LABEL => 31, self::COMPOSER => 32, self::ENCODER => 33, self::CHECKSUM => 34, self::LYRICS => 35, self::ORCHESTRA => 36, self::CONDUCTOR => 37, self::LYRICIST => 38, self::ORIGINAL_LYRICIST => 39, self::RADIO_STATION_NAME => 40, self::INFO_URL => 41, self::ARTIST_URL => 42, self::AUDIO_SOURCE_URL => 43, self::RADIO_STATION_URL => 44, self::BUY_THIS_URL => 45, self::ISRC_NUMBER => 46, self::CATALOG_NUMBER => 47, self::ORIGINAL_ARTIST => 48, self::COPYRIGHT => 49, self::REPORT_DATETIME => 50, self::REPORT_LOCATION => 51, self::REPORT_ORGANIZATION => 52, self::SUBJECT => 53, self::CONTRIBUTOR => 54, self::LANGUAGE => 55, self::FILE_EXISTS => 56, self::SOUNDCLOUD_ID => 57, self::SOUNDCLOUD_ERROR_CODE => 58, self::SOUNDCLOUD_ERROR_MSG => 59, self::SOUNDCLOUD_LINK_TO_FILE => 60, self::SOUNDCLOUD_UPLOAD_TIME => 61, self::REPLAY_GAIN => 62, self::OWNER_ID => 63, self::CUEIN => 64, self::CUEOUT => 65, self::SILAN_CHECK => 66, self::HIDDEN => 67, self::IS_SCHEDULED => 68, self::IS_PLAYLIST => 69, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'NAME' => 1, 'MIME' => 2, 'FTYPE' => 3, 'DIRECTORY' => 4, 'FILEPATH' => 5, 'STATE' => 6, 'CURRENTLYACCESSING' => 7, 'EDITEDBY' => 8, 'MTIME' => 9, 'UTIME' => 10, 'LPTIME' => 11, 'MD5' => 12, 'TRACK_TITLE' => 13, 'ARTIST_NAME' => 14, 'BIT_RATE' => 15, 'SAMPLE_RATE' => 16, 'FORMAT' => 17, 'LENGTH' => 18, 'ALBUM_TITLE' => 19, 'GENRE' => 20, 'COMMENTS' => 21, 'YEAR' => 22, 'TRACK_NUMBER' => 23, 'CHANNELS' => 24, 'URL' => 25, 'BPM' => 26, 'RATING' => 27, 'ENCODED_BY' => 28, 'DISC_NUMBER' => 29, 'MOOD' => 30, 'LABEL' => 31, 'COMPOSER' => 32, 'ENCODER' => 33, 'CHECKSUM' => 34, 'LYRICS' => 35, 'ORCHESTRA' => 36, 'CONDUCTOR' => 37, 'LYRICIST' => 38, 'ORIGINAL_LYRICIST' => 39, 'RADIO_STATION_NAME' => 40, 'INFO_URL' => 41, 'ARTIST_URL' => 42, 'AUDIO_SOURCE_URL' => 43, 'RADIO_STATION_URL' => 44, 'BUY_THIS_URL' => 45, 'ISRC_NUMBER' => 46, 'CATALOG_NUMBER' => 47, 'ORIGINAL_ARTIST' => 48, 'COPYRIGHT' => 49, 'REPORT_DATETIME' => 50, 'REPORT_LOCATION' => 51, 'REPORT_ORGANIZATION' => 52, 'SUBJECT' => 53, 'CONTRIBUTOR' => 54, 'LANGUAGE' => 55, 'FILE_EXISTS' => 56, 'SOUNDCLOUD_ID' => 57, 'SOUNDCLOUD_ERROR_CODE' => 58, 'SOUNDCLOUD_ERROR_MSG' => 59, 'SOUNDCLOUD_LINK_TO_FILE' => 60, 'SOUNDCLOUD_UPLOAD_TIME' => 61, 'REPLAY_GAIN' => 62, 'OWNER_ID' => 63, 'CUEIN' => 64, 'CUEOUT' => 65, 'SILAN_CHECK' => 66, 'HIDDEN' => 67, 'IS_SCHEDULED' => 68, 'IS_PLAYLIST' => 69, ), + BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'name' => 1, 'mime' => 2, 'ftype' => 3, 'directory' => 4, 'filepath' => 5, 'state' => 6, 'currentlyaccessing' => 7, 'editedby' => 8, 'mtime' => 9, 'utime' => 10, 'lptime' => 11, 'md5' => 12, 'track_title' => 13, 'artist_name' => 14, 'bit_rate' => 15, 'sample_rate' => 16, 'format' => 17, 'length' => 18, 'album_title' => 19, 'genre' => 20, 'comments' => 21, 'year' => 22, 'track_number' => 23, 'channels' => 24, 'url' => 25, 'bpm' => 26, 'rating' => 27, 'encoded_by' => 28, 'disc_number' => 29, 'mood' => 30, 'label' => 31, 'composer' => 32, 'encoder' => 33, 'checksum' => 34, 'lyrics' => 35, 'orchestra' => 36, 'conductor' => 37, 'lyricist' => 38, 'original_lyricist' => 39, 'radio_station_name' => 40, 'info_url' => 41, 'artist_url' => 42, 'audio_source_url' => 43, 'radio_station_url' => 44, 'buy_this_url' => 45, 'isrc_number' => 46, 'catalog_number' => 47, 'original_artist' => 48, 'copyright' => 49, 'report_datetime' => 50, 'report_location' => 51, 'report_organization' => 52, 'subject' => 53, 'contributor' => 54, 'language' => 55, 'file_exists' => 56, 'soundcloud_id' => 57, 'soundcloud_error_code' => 58, 'soundcloud_error_msg' => 59, 'soundcloud_link_to_file' => 60, 'soundcloud_upload_time' => 61, 'replay_gain' => 62, 'owner_id' => 63, 'cuein' => 64, 'cueout' => 65, 'silan_check' => 66, 'hidden' => 67, 'is_scheduled' => 68, 'is_playlist' => 69, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ) ); /** @@ -411,6 +417,8 @@ abstract class BaseCcFilesPeer { $criteria->addSelectColumn(CcFilesPeer::CUEOUT); $criteria->addSelectColumn(CcFilesPeer::SILAN_CHECK); $criteria->addSelectColumn(CcFilesPeer::HIDDEN); + $criteria->addSelectColumn(CcFilesPeer::IS_SCHEDULED); + $criteria->addSelectColumn(CcFilesPeer::IS_PLAYLIST); } else { $criteria->addSelectColumn($alias . '.ID'); $criteria->addSelectColumn($alias . '.NAME'); @@ -480,6 +488,8 @@ abstract class BaseCcFilesPeer { $criteria->addSelectColumn($alias . '.CUEOUT'); $criteria->addSelectColumn($alias . '.SILAN_CHECK'); $criteria->addSelectColumn($alias . '.HIDDEN'); + $criteria->addSelectColumn($alias . '.IS_SCHEDULED'); + $criteria->addSelectColumn($alias . '.IS_PLAYLIST'); } } diff --git a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php index 775895eb8..fe42ad88c 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcFilesQuery.php @@ -74,6 +74,8 @@ * @method CcFilesQuery orderByDbCueout($order = Criteria::ASC) Order by the cueout column * @method CcFilesQuery orderByDbSilanCheck($order = Criteria::ASC) Order by the silan_check column * @method CcFilesQuery orderByDbHidden($order = Criteria::ASC) Order by the hidden column + * @method CcFilesQuery orderByDbIsScheduled($order = Criteria::ASC) Order by the is_scheduled column + * @method CcFilesQuery orderByDbIsPlaylist($order = Criteria::ASC) Order by the is_playlist column * * @method CcFilesQuery groupByDbId() Group by the id column * @method CcFilesQuery groupByDbName() Group by the name column @@ -143,6 +145,8 @@ * @method CcFilesQuery groupByDbCueout() Group by the cueout column * @method CcFilesQuery groupByDbSilanCheck() Group by the silan_check column * @method CcFilesQuery groupByDbHidden() Group by the hidden column + * @method CcFilesQuery groupByDbIsScheduled() Group by the is_scheduled column + * @method CcFilesQuery groupByDbIsPlaylist() Group by the is_playlist column * * @method CcFilesQuery leftJoin($relation) Adds a LEFT JOIN clause to the query * @method CcFilesQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query @@ -247,6 +251,8 @@ * @method CcFiles findOneByDbCueout(string $cueout) Return the first CcFiles filtered by the cueout column * @method CcFiles findOneByDbSilanCheck(boolean $silan_check) Return the first CcFiles filtered by the silan_check column * @method CcFiles findOneByDbHidden(boolean $hidden) Return the first CcFiles filtered by the hidden column + * @method CcFiles findOneByDbIsScheduled(boolean $is_scheduled) Return the first CcFiles filtered by the is_scheduled column + * @method CcFiles findOneByDbIsPlaylist(boolean $is_playlist) Return the first CcFiles filtered by the is_playlist column * * @method array findByDbId(int $id) Return CcFiles objects filtered by the id column * @method array findByDbName(string $name) Return CcFiles objects filtered by the name column @@ -316,6 +322,8 @@ * @method array findByDbCueout(string $cueout) Return CcFiles objects filtered by the cueout column * @method array findByDbSilanCheck(boolean $silan_check) Return CcFiles objects filtered by the silan_check column * @method array findByDbHidden(boolean $hidden) Return CcFiles objects filtered by the hidden column + * @method array findByDbIsScheduled(boolean $is_scheduled) Return CcFiles objects filtered by the is_scheduled column + * @method array findByDbIsPlaylist(boolean $is_playlist) Return CcFiles objects filtered by the is_playlist column * * @package propel.generator.airtime.om */ @@ -2045,6 +2053,40 @@ abstract class BaseCcFilesQuery extends ModelCriteria return $this->addUsingAlias(CcFilesPeer::HIDDEN, $dbHidden, $comparison); } + /** + * Filter the query on the is_scheduled column + * + * @param boolean|string $dbIsScheduled The value to use as filter. + * Accepts strings ('false', 'off', '-', 'no', 'n', and '0' are false, the rest is true) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcFilesQuery The current query, for fluid interface + */ + public function filterByDbIsScheduled($dbIsScheduled = null, $comparison = null) + { + if (is_string($dbIsScheduled)) { + $is_scheduled = in_array(strtolower($dbIsScheduled), array('false', 'off', '-', 'no', 'n', '0')) ? false : true; + } + return $this->addUsingAlias(CcFilesPeer::IS_SCHEDULED, $dbIsScheduled, $comparison); + } + + /** + * Filter the query on the is_playlist column + * + * @param boolean|string $dbIsPlaylist The value to use as filter. + * Accepts strings ('false', 'off', '-', 'no', 'n', and '0' are false, the rest is true) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcFilesQuery The current query, for fluid interface + */ + public function filterByDbIsPlaylist($dbIsPlaylist = null, $comparison = null) + { + if (is_string($dbIsPlaylist)) { + $is_playlist = in_array(strtolower($dbIsPlaylist), array('false', 'off', '-', 'no', 'n', '0')) ? false : true; + } + return $this->addUsingAlias(CcFilesPeer::IS_PLAYLIST, $dbIsPlaylist, $comparison); + } + /** * Filter the query by a related CcSubjs object * diff --git a/airtime_mvc/build/build.properties b/airtime_mvc/build/build.properties index 9c8ff5de0..1a83f8732 100644 --- a/airtime_mvc/build/build.properties +++ b/airtime_mvc/build/build.properties @@ -1,6 +1,6 @@ #Note: project.home is automatically generated by the propel-install script. #Any manual changes to this value will be overwritten. -project.home = /home/rudi/reps/Airtime/airtime_mvc +project.home = /home/denise/airtime/airtime_mvc project.build = ${project.home}/build #Database driver diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index a67043b3a..e83958017 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -80,6 +80,8 @@ + + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index ebd0d6c5b..468b830fc 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -98,6 +98,8 @@ CREATE TABLE "cc_files" "cueout" interval default '00:00:00', "silan_check" BOOLEAN default 'f', "hidden" BOOLEAN default 'f', + "is_scheduled" BOOLEAN default 'f', + "is_playlist" BOOLEAN default 'f', PRIMARY KEY ("id") ); diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index f56cf7d7a..6ec4a1540 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -439,7 +439,8 @@ var AIRTIME = (function(AIRTIME) { /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_type" , "iDataSort" : 0 } , - /* Status */ { "sTitle" : $.i18n._("Status") , "mDataProp" : "status" , "bSearchable" : false , "sWidth" : "60px" , "sClass" : "library_status" , "iDataSort" : 0 } , + /* Is Scheduled */ { "sTitle" : $.i18n._("Scheduled") , "mDataProp" : "is_scheduled" , "bSearchable" : false , "sWidth" : "90px" , "sClass" : "library_is_scheduled"} , + /* Is Playlist */ { "sTitle" : $.i18n._("Playlist") , "mDataProp" : "is_playlist" , "bSearchable" : false , "sWidth" : "70px" , "sClass" : "library_is_playlist"} , /* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" } , /* Creator */ { "sTitle" : $.i18n._("Creator") , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" } , /* Album */ { "sTitle" : $.i18n._("Album") , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" } , @@ -580,8 +581,15 @@ var AIRTIME = (function(AIRTIME) { $(nRow).find('td.library_type').html(''); } - if (aData.status_in_use !== null && aData.status_in_use) { - $(nRow).find("td.library_status").html(''); + if (aData.is_scheduled) { + $(nRow).find("td.library_is_scheduled").html(''); + } else if (!aData.is_scheduled) { + $(nRow).find("td.library_is_scheduled").html(''); + } + if (aData.is_playlist) { + $(nRow).find("td.library_is_playlist").html(''); + } else if (!aData.is_playlist) { + $(nRow).find("td.library_is_playlist").html(''); } // add the play function to the library_type td @@ -633,7 +641,7 @@ var AIRTIME = (function(AIRTIME) { return false; }); - $(nRow).find(".media-item-in-use").qtip({ + /*$(nRow).find(".media-item-in-use").qtip({ content: { text: aData.status_msg }, @@ -652,7 +660,7 @@ var AIRTIME = (function(AIRTIME) { my: "left bottom", at: "right center" }, - }); + });*/ // add a tool tip to appear when the user clicks on the type // icon. diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index a20661bcb..2b2e0f358 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -81,8 +81,18 @@ var AIRTIME = (function(AIRTIME){ return mod.showInstances; }; - mod.refresh = function() { + mod.refresh = function(schedId) { mod.resetTimestamp(); + + // once a track plays out we need to check if we can update + // the is_scheduled flag in cc_files + $.post(baseUrl+"schedule/update-future-is-scheduled", + {"format": "json", "schedId": schedId}, function(json) { + var data = $.parseJSON(json); + if (data.redrawLibTable) { + $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); + } + }); oSchedTable.fnDraw(); }; @@ -797,7 +807,7 @@ var AIRTIME = (function(AIRTIME){ if(refreshInterval > maxRefreshInterval){ refreshInterval = maxRefreshInterval; } - mod.timeout = setTimeout(mod.refresh, refreshInterval); //need refresh in milliseconds + mod.timeout = setTimeout(function() {mod.refresh(aData.id)}, refreshInterval); //need refresh in milliseconds break; } } From 1f4cfa8f65c2a0651a555eae31028d80bc8da162 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Sat, 2 Feb 2013 08:50:44 -0500 Subject: [PATCH 051/208] fix pypo not auto restarting --- python_apps/pypo/monit-airtime-playout.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/pypo/monit-airtime-playout.cfg b/python_apps/pypo/monit-airtime-playout.cfg index 5b096c72a..453f4efec 100644 --- a/python_apps/pypo/monit-airtime-playout.cfg +++ b/python_apps/pypo/monit-airtime-playout.cfg @@ -5,5 +5,5 @@ check process airtime-playout with pidfile "/var/run/airtime-playout.pid" - start program = "/etc/init.d/airtime-playout monit-restart" with timeout 5 seconds + start program = "/etc/init.d/airtime-playout start" with timeout 5 seconds stop program = "/etc/init.d/airtime-playout stop" From 34eee60bee638e5600785f423179ca68ef1521ad Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Sun, 3 Feb 2013 00:40:41 -0500 Subject: [PATCH 052/208] CC-4910: Need to properly handle non-200 http status codes in api client -wrap all service calls in exception --- python_apps/api_clients/api_client.py | 138 +++++++++++++----- .../liquidsoap_scripts/liquidsoap_auth.py | 5 +- 2 files changed, 108 insertions(+), 35 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index b28a4ca5a..a3dc3f41a 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -80,23 +80,19 @@ class ApiRequest(object): if logger is None: self.logger = logging else: self.logger = logger def __call__(self,_post_data=None, **kwargs): - # TODO : get rid of god damn urllib and replace everything with - # grequests or requests at least final_url = self.url.params(**kwargs).url() if _post_data is not None: _post_data = urllib.urlencode(_post_data) try: req = urllib2.Request(final_url, _post_data) response = urllib2.urlopen(req).read() except Exception, e: - self.logger.error('Exception: %s', e) import traceback - top = traceback.format_exc() - self.logger.error("traceback: %s", top) - response = "" + self.logger.error('Exception: %s', e) + self.logger.error("traceback: %s", traceback.format_exc()) + raise # Ghetto hack for now because we don't the content type we are getting # (Pointless to look at mime since it's not being set correctly always) - try: return json.loads(response) - except ValueError: return response + return json.loads(response) def req(self, *args, **kwargs): self.__req = lambda : self(*args, **kwargs) @@ -182,13 +178,20 @@ class AirtimeApiClient(object): except: return (False, None) def notify_liquidsoap_started(self): - return self.services.notify_liquidsoap_started() + try: + self.services.notify_liquidsoap_started() + except Exception, e: + self.logger.error(str(e)) def notify_media_item_start_playing(self, media_id): """ This is a callback from liquidsoap, we use this to notify about the currently playing *song*. We get passed a JSON string which we handed to liquidsoap in get_liquidsoap_data(). """ - return self.services.update_start_playing_url(media_id=media_id) + try: + return self.services.update_start_playing_url(media_id=media_id) + except Exception, e: + self.logger.error(str(e)) + return None # TODO : get this routine out of here it doesn't belong at all here def get_liquidsoap_data(self, pkey, schedule): @@ -199,7 +202,11 @@ class AirtimeApiClient(object): return data def get_shows_to_record(self): - return self.services.show_schedule_url() + try: + return self.services.show_schedule_url() + except Exception, e: + self.logger.error(str(e)) + return None def upload_recorded_show(self, data, headers): logger = self.logger @@ -235,8 +242,12 @@ class AirtimeApiClient(object): return response def check_live_stream_auth(self, username, password, dj_type): - return self.services.check_live_stream_auth( - username=username, password=password, djtype=dj_type) + try: + return self.services.check_live_stream_auth( + username=username, password=password, djtype=dj_type) + except Exception, e: + self.logger.error(str(e)) + return {} def construct_url(self,config_action_key): """Constructs the base url for every request""" @@ -249,7 +260,11 @@ class AirtimeApiClient(object): return url def setup_media_monitor(self): - return self.services.media_setup_url() + try: + return self.services.media_setup_url() + except Exception, e: + #TODO + self.logger.info(str(e)) def send_media_monitor_requests(self, action_list, dry=False): """ @@ -310,13 +325,25 @@ class AirtimeApiClient(object): return [] def list_all_watched_dirs(self): - return self.services.list_all_watched_dirs() + try: + return self.services.list_all_watched_dirs() + except Exception, e: + #TODO + self.logger.error(str(e)) def add_watched_dir(self, path): - return self.services.add_watched_dir(path=base64.b64encode(path)) + try: + return self.services.add_watched_dir(path=base64.b64encode(path)) + except Exception, e: + #TODO + self.logger.error(str(e)) def remove_watched_dir(self, path): - return self.services.remove_watched_dir(path=base64.b64encode(path)) + try: + return self.services.remove_watched_dir(path=base64.b64encode(path)) + except Exception, e: + #TODO + self.logger.error(str(e)) def set_storage_dir(self, path): return self.services.set_storage_dir(path=base64.b64encode(path)) @@ -334,7 +361,11 @@ class AirtimeApiClient(object): (component = media-monitor, pypo etc.) ip address, and later use it to query monit via monit's http service, or download log files via a http server. """ - return self.services.register_component(component=component) + try: + return self.services.register_component(component=component) + except Exception, e: + #TODO + self.logger.error(str(e)) def notify_liquidsoap_status(self, msg, stream_id, time): logger = self.logger @@ -343,6 +374,7 @@ class AirtimeApiClient(object): self.services.update_liquidsoap_status.req(msg=encoded_msg, stream_id=stream_id, boot_time=time).retry(5) except Exception, e: + #TODO logger.error("Exception: %s", e) def notify_source_status(self, sourcename, status): @@ -351,11 +383,16 @@ class AirtimeApiClient(object): return self.services.update_source_status.req(sourcename=sourcename, status=status).retry(5) except Exception, e: + #TODO logger.error("Exception: %s", e) def get_bootstrap_info(self): - """ Retrive infomations needed on bootstrap time """ - return self.services.get_bootstrap_info() + """ Retrieve infomations needed on bootstrap time """ + try: + return self.services.get_bootstrap_info() + except Exception, e: + #TODO + self.logger.error(str(e)) def get_files_without_replay_gain_value(self, dir_id): """ @@ -364,7 +401,11 @@ class AirtimeApiClient(object): to this file is the return value. """ #http://localhost/api/get-files-without-replay-gain/dir_id/1 - return self.services.get_files_without_replay_gain(dir_id=dir_id) + try: + return self.services.get_files_without_replay_gain(dir_id=dir_id) + except Exception, e: + #TODO + self.logger.error(str(e)) def get_files_without_silan_value(self): """ @@ -372,22 +413,35 @@ class AirtimeApiClient(object): calculated. This list of files is downloaded into a file and the path to this file is the return value. """ - return self.services.get_files_without_silan_value() + try: + return self.services.get_files_without_silan_value() + except Exception, e: + #TODO + self.logger.error(str(e)) def update_replay_gain_values(self, pairs): """ 'pairs' is a list of pairs in (x, y), where x is the file's database row id and y is the file's replay_gain value in dB """ - self.logger.debug(self.services.update_replay_gain_value( - _post_data={'data': json.dumps(pairs)})) + try: + self.logger.debug(self.services.update_replay_gain_value( + _post_data={'data': json.dumps(pairs)})) + except Exception, e: + #TODO + self.logger.error(str(e)) + def update_cue_values_by_silan(self, pairs): """ 'pairs' is a list of pairs in (x, y), where x is the file's database row id and y is the file's cue values in dB """ - print self.services.update_cue_values_by_silan(_post_data={'data': json.dumps(pairs)}) + try: + print self.services.update_cue_values_by_silan(_post_data={'data': json.dumps(pairs)}) + except Exception, e: + #TODO + self.logger.error(str(e)) def notify_webstream_data(self, data, media_id): @@ -395,19 +449,35 @@ class AirtimeApiClient(object): Update the server with the latest metadata we've received from the external webstream """ - self.logger.info( self.services.notify_webstream_data.req( - _post_data={'data':data}, media_id=str(media_id)).retry(5)) + try: + self.logger.info( self.services.notify_webstream_data.req( + _post_data={'data':data}, media_id=str(media_id)).retry(5)) + except Exception, e: + #TODO + self.logger.error(str(e)) def get_stream_parameters(self): - response = self.services.get_stream_parameters() - self.logger.debug(response) - return response + try: + response = self.services.get_stream_parameters() + self.logger.debug(response) + return response + except Exception, e: + #TODO + self.logger.error(str(e)) def push_stream_stats(self, data): # TODO : users of this method should do their own error handling - response = self.services.push_stream_stats(_post_data={'data': json.dumps(data)}) - return response + try: + response = self.services.push_stream_stats(_post_data={'data': json.dumps(data)}) + return response + except Exception, e: + #TODO + self.logger.error(str(e)) def update_stream_setting_table(self, data): - response = self.services.update_stream_setting_table(_post_data={'data': json.dumps(data)}) - return response + try: + response = self.services.update_stream_setting_table(_post_data={'data': json.dumps(data)}) + return response + except Exception, e: + #TODO + self.logger.error(str(e)) diff --git a/python_apps/pypo/liquidsoap_scripts/liquidsoap_auth.py b/python_apps/pypo/liquidsoap_scripts/liquidsoap_auth.py index 862231cc2..838898afb 100644 --- a/python_apps/pypo/liquidsoap_scripts/liquidsoap_auth.py +++ b/python_apps/pypo/liquidsoap_scripts/liquidsoap_auth.py @@ -15,4 +15,7 @@ elif dj_type == '--dj': response = api_clients.check_live_stream_auth(username, password, source_type) -print response['msg'] +if 'msg' in response: + print response['msg'] +else: + print False From 2ac66e81b0d498f43be35ccb50706c838b2fe1e6 Mon Sep 17 00:00:00 2001 From: Marcin Tym-Czarnocki Date: Sun, 3 Feb 2013 20:44:20 +0100 Subject: [PATCH 053/208] Polish locale update (full - 100%) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contribution of radioaktywne.pl (Lucy Pałys & Marcin Tym-Czarnocki) --- .../locale/pl_PL/LC_MESSAGES/airtime.mo | Bin 39790 -> 62462 bytes .../locale/pl_PL/LC_MESSAGES/airtime.po | 7396 +++++++++-------- 2 files changed, 3738 insertions(+), 3658 deletions(-) diff --git a/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo index 996a1063afe7f1a6885d9c73004c526086949234..a702db3a7765ecf7ce4b5172952628fde65a38f0 100644 GIT binary patch literal 62462 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

9_-WDu8R)do3Ds?{zAjBL8uf#%C( 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 literal 39790 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 Xdgc, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: Airtime 2.3\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-01-15 10:36-0500\n" -"PO-Revision-Date: 2013-01-31 11:58+0100\n" -"Last-Translator: Sebastian Matuszewski \n" -"Language-Team: SEMATpl & PallottiFM \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" -"Language: Polski\n" - -#: airtime_mvc/application/configs/navigation.php:12 -msgid "Now Playing" -msgstr "Aktualnie odtwarzne" - -#: airtime_mvc/application/configs/navigation.php:19 -msgid "Add Media" -msgstr "Dodaj media" - -#: airtime_mvc/application/configs/navigation.php:26 -msgid "Library" -msgstr "Biblioteka" - -#: airtime_mvc/application/configs/navigation.php:33 -msgid "Calendar" -msgstr "Kalendarz" - -#: airtime_mvc/application/configs/navigation.php:40 -msgid "System" -msgstr "System" - -#: airtime_mvc/application/configs/navigation.php:45 -#: airtime_mvc/application/views/scripts/preference/index.phtml:2 -msgid "Preferences" -msgstr "Preferencje" - -#: airtime_mvc/application/configs/navigation.php:50 -msgid "Users" -msgstr "Użytkownicy" - -#: airtime_mvc/application/configs/navigation.php:57 -msgid "Media Folders" -msgstr "Folder z mediami" - -#: airtime_mvc/application/configs/navigation.php:64 -msgid "Streams" -msgstr "Strumienie" - -#: airtime_mvc/application/configs/navigation.php:70 -#: airtime_mvc/application/controllers/PreferenceController.php:133 -msgid "Support Feedback" -msgstr "Wsparcie Feedback" - -#: airtime_mvc/application/configs/navigation.php:76 -#: airtime_mvc/application/controllers/LocaleController.php:364 -#: airtime_mvc/application/controllers/LocaleController.php:365 -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:5 -msgid "Status" -msgstr "Status" - -#: airtime_mvc/application/configs/navigation.php:83 -msgid "Playout History" -msgstr "Historia odtwarzania" - -#: airtime_mvc/application/configs/navigation.php:90 -msgid "Listener Stats" -msgstr "Statystyki słuchaczy" - -#: airtime_mvc/application/configs/navigation.php:99 -#: airtime_mvc/application/views/scripts/error/error.phtml:13 -msgid "Help" -msgstr "Pomoc" - -#: airtime_mvc/application/configs/navigation.php:104 -msgid "Getting Started" -msgstr "Jak zacząć" - -#: airtime_mvc/application/configs/navigation.php:111 -msgid "User Manual" -msgstr "Instrukcja użytkownika" - -#: airtime_mvc/application/configs/navigation.php:116 -#: airtime_mvc/application/views/scripts/dashboard/about.phtml:2 -msgid "About" -msgstr "About" - -#: airtime_mvc/application/layouts/scripts/bare.phtml:5 -#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 -msgid "Live stream" -msgstr "Transmisja na żywo" - -#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5 -#: airtime_mvc/application/controllers/LocaleController.php:34 -msgid "Audio Player" -msgstr "Odtwrzacz" - -#: airtime_mvc/application/layouts/scripts/layout.phtml:27 -msgid "Logout" -msgstr "Wyloguj" - -#: airtime_mvc/application/layouts/scripts/login.phtml:16 -#, php-format -msgid "" -"Airtime Copyright ©Sourcefabric o.p.s. All rights reserved.%sMaintained " -"and distributed under GNU GPL v.3 by %sSourcefabric o.p.s%s" -msgstr "" -"Airtime Copyright ©Sourcefabric o.p.s. Wszelkie prawa zastrzeżone." -"%sUtrzymywany i rozpowszechniany na zasadach licencji GNU GPL v.3 by " -"%sSourcefabric o.p.s%s" - -#: airtime_mvc/application/models/StoredFile.php:810 -#: airtime_mvc/application/controllers/LocaleController.php:284 -msgid "Track preview" -msgstr "Podgląd utworu" - -#: airtime_mvc/application/models/StoredFile.php:812 -msgid "Playlist preview" -msgstr "Podgląd listy odtwarzania" - -#: airtime_mvc/application/models/StoredFile.php:815 -msgid "Webstream preview" -msgstr "Podgląd webstrumienia" - -#: airtime_mvc/application/models/StoredFile.php:817 -msgid "Smart Block" -msgstr "Smart Block" - -#: airtime_mvc/application/models/StoredFile.php:950 -msgid "Failed to create 'organize' directory." -msgstr "Katalog 'organize' nie może zostać utworzony." - -#: airtime_mvc/application/models/StoredFile.php:963 -#, php-format -msgid "" -"The file was not uploaded, there is %s MB of disk space left and the file " -"you are uploading has a size of %s MB." -msgstr "" -"Plik nie został przesłany, na dysku pozostało %s MB wolnego miejsca, a plik " -"który próbujesz przesłać ma %s MB." - -#: airtime_mvc/application/models/StoredFile.php:972 -msgid "" -"This file appears to be corrupted and will not be added to media library." -msgstr "" -"Ten plik jest prawdopodobnie uszkodzony i nie może zostać dodany do " -"biblioteki mediów." - -#: airtime_mvc/application/models/StoredFile.php:1008 -msgid "" -"The file was not uploaded, this error can occur if the computer hard drive " -"does not have enough disk space or the stor directory does not have correct " -"write permissions." -msgstr "" -"Plik nie został dodany, błąd ten może występować w przypadku kiedy nie ma " -"wystarczającej ilości wolnego miejsca na dysku lub katalog stor nie posiada " -"poprawnych uprawnień do zapisu." - -#: airtime_mvc/application/models/Preference.php:538 -msgid "Select Country" -msgstr "Wybierz kraj" - -#: airtime_mvc/application/models/MusicDir.php:160 -#, php-format -msgid "%s is already watched." -msgstr "%s jest teraz przeszukiwany." - -#: airtime_mvc/application/models/MusicDir.php:164 -#, php-format -msgid "%s contains nested watched directory: %s" -msgstr "" - -#: airtime_mvc/application/models/MusicDir.php:168 -#, php-format -msgid "%s is nested within existing watched directory: %s" -msgstr "" - -#: airtime_mvc/application/models/MusicDir.php:189 -#: airtime_mvc/application/models/MusicDir.php:363 -#, php-format -msgid "%s is not a valid directory." -msgstr "%s nie jest poprawnym katalogiem." - -#: airtime_mvc/application/models/MusicDir.php:231 -#, php-format -msgid "" -"%s is already set as the current storage dir or in the watched folders list" -msgstr "" -"%s jest już ustawiony jako główny katalog, bądź znajduje się na liście " -"przeszukiwanych katalogów" - -#: airtime_mvc/application/models/MusicDir.php:381 -#, php-format -msgid "" -"%s is already set as the current storage dir or in the watched folders list." -msgstr "" -"%s jest już ustawiony jako główny katalog, bądź znajduje się na liście " -"przeszukiwanych katalogów." - -#: airtime_mvc/application/models/MusicDir.php:424 -#, php-format -msgid "%s doesn't exist in the watched list." -msgstr "%s nie występuje na liście przekądanych katalogów." - -#: airtime_mvc/application/models/Playlist.php:723 -#: airtime_mvc/application/models/Block.php:760 -msgid "Cue in and cue out are null." -msgstr "Cue-in i cue-out mają wartość null." - -#: airtime_mvc/application/models/Playlist.php:753 -#: airtime_mvc/application/models/Playlist.php:776 -#: airtime_mvc/application/models/Block.php:806 -#: airtime_mvc/application/models/Block.php:827 -msgid "Can't set cue in to be larger than cue out." -msgstr "Wartość cue-in nie może być większa niż cue-out." - -#: airtime_mvc/application/models/Playlist.php:760 -#: airtime_mvc/application/models/Playlist.php:801 -#: airtime_mvc/application/models/Block.php:795 -#: airtime_mvc/application/models/Block.php:851 -msgid "Can't set cue out to be greater than file length." -msgstr "Wartośc cue-out nie może być większa niż długość pliku." - -#: airtime_mvc/application/models/Playlist.php:794 -#: airtime_mvc/application/models/Block.php:862 -msgid "Can't set cue out to be smaller than cue in." -msgstr "Wartość cue-out nie może być mniejsza od cue-in." - -#: airtime_mvc/application/models/Show.php:180 -msgid "Shows can have a max length of 24 hours." -msgstr "Programy mogą mieć maksymalnie 24 godziny." - -#: airtime_mvc/application/models/Show.php:211 -#: airtime_mvc/application/forms/AddShowWhen.php:120 -msgid "End date/time cannot be in the past" -msgstr "Data lub czas zakończenia nie może być przeszły. " - -#: airtime_mvc/application/models/Show.php:222 -msgid "" -"Cannot schedule overlapping shows.\n" -"Note: Resizing a repeating show affects all of its repeats." -msgstr "" -"Nie można planować programów nakłądających się na siebie.\n" -"\vUwaga: zmiana programuu powoduje automatyczną zmianę wszystkich jego " -"powtórzeń." - -#: airtime_mvc/application/models/Webstream.php:157 -msgid "Length needs to be greater than 0 minutes" -msgstr "Długość musi być większa niż 0 minut." - -#: airtime_mvc/application/models/Webstream.php:162 -msgid "Length should be of form \"00h 00m\"" -msgstr "Długość powinna mieć postać \"00h 00m\"" - -#: airtime_mvc/application/models/Webstream.php:175 -msgid "URL should be of form \"http://domain\"" -msgstr "URL powinien mieć postać \"http://domain\"" - -#: airtime_mvc/application/models/Webstream.php:178 -msgid "URL should be 512 characters or less" -msgstr "URL powinien mieć 512 znaków lub mniej." - -#: airtime_mvc/application/models/Webstream.php:184 -msgid "No MIME type found for webstream." -msgstr "Nie znaleziono typu MIME dla webstreamu" - -#: airtime_mvc/application/models/Webstream.php:200 -msgid "Webstream name cannot be empty" -msgstr "Naw webstreamu nie może być pusta." - -#: airtime_mvc/application/models/Webstream.php:269 -msgid "Could not parse XSPF playlist" -msgstr "Nie można przeanalizować playlisty XSPF" - -#: airtime_mvc/application/models/Webstream.php:281 -msgid "Could not parse PLS playlist" -msgstr "Nie można przeanalizować playlisty PLS" - -#: airtime_mvc/application/models/Webstream.php:300 -msgid "Could not parse M3U playlist" -msgstr "Nie można przeanalizować playlisty M3U" - -#: airtime_mvc/application/models/Webstream.php:314 -#, fuzzy -msgid "Invalid webstream - This appears to be a file download." -msgstr "Nieprawidłowy webstream - wydaje się, że jest pobieraniem plików." - -#: airtime_mvc/application/models/Webstream.php:318 -#, php-format -msgid "Unrecognized stream type: %s" -msgstr "Nierozpoznany typu streamu: %s" - -#: airtime_mvc/application/models/ShowInstance.php:245 -msgid "Can't drag and drop repeating shows" -msgstr "Nie można przeciągać powtarzających się programów." - -#: airtime_mvc/application/models/ShowInstance.php:253 -msgid "Can't move a past show" -msgstr "Nie można przenieść przeszłego programu." - -#: airtime_mvc/application/models/ShowInstance.php:270 -msgid "Can't move show into past" -msgstr "Nie można przenieść programu w przeszłość." - -#: airtime_mvc/application/models/ShowInstance.php:276 -#: airtime_mvc/application/forms/AddShowWhen.php:254 -#: airtime_mvc/application/forms/AddShowWhen.php:268 -#: airtime_mvc/application/forms/AddShowWhen.php:291 -#: airtime_mvc/application/forms/AddShowWhen.php:297 -#: airtime_mvc/application/forms/AddShowWhen.php:302 -msgid "Cannot schedule overlapping shows" -msgstr "Nie można planować nakładających się programów." - -#: airtime_mvc/application/models/ShowInstance.php:290 -msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." -msgstr "" -"Nagrany materiał nie może zostać przeniesiony mniej niż 1 godzinę przed " -"powtórzeniem." - -#: airtime_mvc/application/models/ShowInstance.php:303 -msgid "Show was deleted because recorded show does not exist!" -msgstr "Program został usunięty, ponieważ nagranie nie istnieje!" - -#: airtime_mvc/application/models/ShowInstance.php:310 -msgid "Must wait 1 hour to rebroadcast." -msgstr "Musisz odczekać 1 godzinę, aby retransmitować." - -#: airtime_mvc/application/models/ShowInstance.php:342 -msgid "can't resize a past show" -msgstr "nie można zmienić rozmiaru przeszłego programu." - -#: airtime_mvc/application/models/ShowInstance.php:364 -msgid "Should not overlap shows" -msgstr "Programy nie powinny nakładać się." - -#: airtime_mvc/application/models/Auth.php:33 -#, php-format -msgid "" -"Hi %s, \n" -"\n" -"Click this link to reset your password: " -msgstr "" -"Cześć %s. \n" -"\n" -"Kliknij w ten link aby zresetować Twoje hasło:" - -#: airtime_mvc/application/models/Auth.php:36 -msgid "Airtime Password Reset" -msgstr "Resetowanie hasła Airtime" - -#: airtime_mvc/application/models/Scheduler.php:82 -msgid "The schedule you're viewing is out of date! (sched mismatch)" -msgstr "" -"Harmonogram, który przeglądasz jest nieaktualny! (harmonogram niedopasowany)" - -#: airtime_mvc/application/models/Scheduler.php:87 -msgid "The schedule you're viewing is out of date! (instance mismatch)" -msgstr "" -"Harmonogram, który przeglądasz jest nieaktualny! (instancje błędnie " -"dopasowane)" - -#: airtime_mvc/application/models/Scheduler.php:95 -#: airtime_mvc/application/models/Scheduler.php:347 -msgid "The schedule you're viewing is out of date!" -msgstr "Harmonogram, który przeglądasz jest nieaktualny!" - -#: airtime_mvc/application/models/Scheduler.php:105 -#, php-format -msgid "You are not allowed to schedule show %s." -msgstr "Nie posiadasz uprawnień, aby zaplanować program %s." - -#: airtime_mvc/application/models/Scheduler.php:109 -msgid "You cannot add files to recording shows." -msgstr "Nie możesz dodawać plików do nagranych programów." - -#: airtime_mvc/application/models/Scheduler.php:115 -#, php-format -msgid "The show %s is over and cannot be scheduled." -msgstr "" -"Program %s przekracza dopuszczalną długość i nie może zostać zaplanowany." - -#: airtime_mvc/application/models/Scheduler.php:122 -#, php-format -msgid "The show %s has been previously updated!" -msgstr "Program %s został zaktualizowany wcześniej!" - -#: airtime_mvc/application/models/Scheduler.php:141 -#: airtime_mvc/application/models/Scheduler.php:223 -msgid "A selected File does not exist!" -msgstr "Wybrany plik nie istnieje!" - -#: airtime_mvc/application/models/ShowBuilder.php:198 -#, php-format -msgid "Rebroadcast of %s from %s" -msgstr "Retransmisja z %s do %s" - -#: airtime_mvc/application/models/Block.php:1209 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:41 -msgid "Select criteria" -msgstr "Wybierz kryteria" - -#: airtime_mvc/application/models/Block.php:1210 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:42 -#: airtime_mvc/application/controllers/LocaleController.php:70 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:8 -msgid "Album" -msgstr "Album" - -#: airtime_mvc/application/models/Block.php:1211 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:43 -msgid "Bit Rate (Kbps)" -msgstr "Bit Rate (Kbps)" - -#: airtime_mvc/application/models/Block.php:1212 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:44 -#: airtime_mvc/application/controllers/LocaleController.php:72 -msgid "BPM" -msgstr "BMP" - -#: airtime_mvc/application/models/Block.php:1213 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:45 -#: airtime_mvc/application/controllers/LocaleController.php:73 -#: airtime_mvc/application/controllers/LocaleController.php:157 -msgid "Composer" -msgstr "Kompozytor" - -#: airtime_mvc/application/models/Block.php:1214 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:46 -#: airtime_mvc/application/controllers/LocaleController.php:74 -msgid "Conductor" -msgstr "Dyrygent" - -#: airtime_mvc/application/models/Block.php:1215 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:47 -#: airtime_mvc/application/controllers/LocaleController.php:75 -#: airtime_mvc/application/controllers/LocaleController.php:158 -msgid "Copyright" -msgstr "Prawa autorskie" - -#: airtime_mvc/application/models/Block.php:1216 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:48 -#: airtime_mvc/application/controllers/LocaleController.php:69 -#: airtime_mvc/application/controllers/LocaleController.php:154 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:7 -msgid "Creator" -msgstr "Twórca" - -#: airtime_mvc/application/models/Block.php:1217 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:49 -#: airtime_mvc/application/controllers/LocaleController.php:76 -msgid "Encoded By" -msgstr "Kodowane przez" - -#: airtime_mvc/application/models/Block.php:1218 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:132 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:50 -#: airtime_mvc/application/controllers/LocaleController.php:77 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10 -msgid "Genre" -msgstr "Rodzaj" - -#: airtime_mvc/application/models/Block.php:1219 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:51 -#: airtime_mvc/application/controllers/LocaleController.php:78 -msgid "ISRC" -msgstr "ISRC" - -#: airtime_mvc/application/models/Block.php:1220 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:52 -#: airtime_mvc/application/controllers/LocaleController.php:79 -msgid "Label" -msgstr "Etykieta" - -#: airtime_mvc/application/models/Block.php:1221 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:53 -#: airtime_mvc/application/controllers/LocaleController.php:80 -msgid "Language" -msgstr "Język" - -#: airtime_mvc/application/models/Block.php:1222 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:54 -#: airtime_mvc/application/controllers/LocaleController.php:81 -msgid "Last Modified" -msgstr "Ostatnio modyfikowany" - -#: airtime_mvc/application/models/Block.php:1223 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:55 -#: airtime_mvc/application/controllers/LocaleController.php:82 -msgid "Last Played" -msgstr "Ostatnio odtwarzany" - -#: airtime_mvc/application/models/Block.php:1224 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:56 -#: airtime_mvc/application/controllers/LocaleController.php:83 -#: airtime_mvc/application/controllers/LocaleController.php:156 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:9 -msgid "Length" -msgstr "Długość" - -#: airtime_mvc/application/models/Block.php:1225 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:57 -#: airtime_mvc/application/controllers/LocaleController.php:84 -msgid "Mime" -msgstr "Mime" - -#: airtime_mvc/application/models/Block.php:1226 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:58 -#: airtime_mvc/application/controllers/LocaleController.php:85 -msgid "Mood" -msgstr "Nastrój" - -#: airtime_mvc/application/models/Block.php:1227 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:59 -#: airtime_mvc/application/controllers/LocaleController.php:86 -msgid "Owner" -msgstr "Właściciel" - -#: airtime_mvc/application/models/Block.php:1228 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:60 -#: airtime_mvc/application/controllers/LocaleController.php:87 -msgid "Replay Gain" -msgstr "Normalizacja głośności (Replay Gain)" - -#: airtime_mvc/application/models/Block.php:1229 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:61 -msgid "Sample Rate (kHz)" -msgstr "Częstotliwość próbkowania (kHz)" - -#: airtime_mvc/application/models/Block.php:1230 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:62 -#: airtime_mvc/application/controllers/LocaleController.php:68 -#: airtime_mvc/application/controllers/LocaleController.php:153 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:6 -msgid "Title" -msgstr "Tytuł" - -#: airtime_mvc/application/models/Block.php:1231 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:63 -#: airtime_mvc/application/controllers/LocaleController.php:89 -msgid "Track Number" -msgstr "Numer utworu" - -#: airtime_mvc/application/models/Block.php:1232 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:64 -#: airtime_mvc/application/controllers/LocaleController.php:90 -msgid "Uploaded" -msgstr "Przesłano" - -#: airtime_mvc/application/models/Block.php:1233 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:65 -#: airtime_mvc/application/controllers/LocaleController.php:91 -msgid "Website" -msgstr "Strona internetowa" - -#: airtime_mvc/application/models/Block.php:1234 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:66 -#: airtime_mvc/application/controllers/LocaleController.php:92 -msgid "Year" -msgstr "Rok" - -#: airtime_mvc/application/common/DateHelper.php:335 -#, php-format -msgid "The year %s must be within the range of 1753 - 9999" -msgstr "Rok %s musi być w przedziale od 1753 do 9999" - -#: airtime_mvc/application/common/DateHelper.php:338 -#, php-format -msgid "%s-%s-%s is not a valid date" -msgstr "Data %s-%s-%s nie jest prawidłowa" - -#: airtime_mvc/application/common/DateHelper.php:362 -#, php-format -msgid "%s:%s:%s is not a valid time" -msgstr "Czas %s:%s:%s nie jest prawidłowy." - -#: airtime_mvc/application/forms/EmailServerPreferences.php:17 -msgid "Enable System Emails (Password Reset)" -msgstr "Włącz systemowe Emaile (Resetowanie hasła)" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:27 -msgid "Reset Password 'From' Email" -msgstr "Resetowanie hasła 'z' Emaila" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:34 -msgid "Configure Mail Server" -msgstr "Skonfiguruj serwer pocztowy" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:43 -msgid "Requires Authentication" -msgstr "Wymagana autoryzacja" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:53 -msgid "Mail Server" -msgstr "Serwer Email" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:67 -msgid "Email Address" -msgstr "Adres Email" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:82 -#: airtime_mvc/application/forms/PasswordChange.php:17 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:120 -msgid "Password" -msgstr "Hasło" - -#: airtime_mvc/application/forms/EmailServerPreferences.php:100 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:109 -msgid "Port" -msgstr "Port" - -#: airtime_mvc/application/forms/RegisterAirtime.php:30 -#: airtime_mvc/application/forms/SupportSettings.php:21 -#: airtime_mvc/application/forms/GeneralPreferences.php:22 -msgid "Station Name" -msgstr "Nazwa stacji" - -#: airtime_mvc/application/forms/RegisterAirtime.php:39 -#: airtime_mvc/application/forms/SupportSettings.php:34 -msgid "Phone:" -msgstr "Telefon:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:51 -#: airtime_mvc/application/forms/AddUser.php:60 -#: airtime_mvc/application/forms/SupportSettings.php:46 -#: airtime_mvc/application/forms/EditUser.php:75 -msgid "Email:" -msgstr "Email:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:62 -#: airtime_mvc/application/forms/SupportSettings.php:57 -msgid "Station Web Site:" -msgstr "Strona internetowa stacji:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:73 -#: airtime_mvc/application/forms/SupportSettings.php:68 -msgid "Country:" -msgstr "Kraj:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:84 -#: airtime_mvc/application/forms/SupportSettings.php:79 -msgid "City:" -msgstr "Miasto:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:96 -#: airtime_mvc/application/forms/SupportSettings.php:91 -msgid "Station Description:" -msgstr "Opis stacji:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:106 -#: airtime_mvc/application/forms/SupportSettings.php:101 -msgid "Station Logo:" -msgstr "Logo stacji:" - -#: airtime_mvc/application/forms/RegisterAirtime.php:116 -#: airtime_mvc/application/forms/SupportSettings.php:112 -#: airtime_mvc/application/controllers/LocaleController.php:333 -msgid "Send support feedback" -msgstr "Wyślij feedback do supportu" - -#: airtime_mvc/application/forms/RegisterAirtime.php:126 -#: airtime_mvc/application/forms/SupportSettings.php:122 -msgid "Promote my station on Sourcefabric.org" -msgstr "Promuj moją stację na Sourcefabric.org" - -#: airtime_mvc/application/forms/RegisterAirtime.php:149 -#: airtime_mvc/application/forms/SupportSettings.php:148 -#, php-format -msgid "By checking this box, I agree to Sourcefabric's %sprivacy policy%s." -msgstr "" -"Zanaczając to pole, zgadzasz się z %spolityką prywatności%s Sourcefabric's." - -#: airtime_mvc/application/forms/RegisterAirtime.php:166 -#: airtime_mvc/application/forms/SupportSettings.php:171 -msgid "You have to agree to privacy policy." -msgstr "Musisz zgodzić się z polityką prywatności." - -#: airtime_mvc/application/forms/PasswordChange.php:28 -msgid "Confirm new password" -msgstr "Potwierdź nowe hasło" - -#: airtime_mvc/application/forms/PasswordChange.php:36 -msgid "Password confirmation does not match your password." -msgstr "Potwierdzenie hasła nie jest takie samo jak hasło." - -#: airtime_mvc/application/forms/PasswordChange.php:43 -msgid "Get new password" -msgstr "Pobierz nowe hasło" - -#: airtime_mvc/application/forms/DateRange.php:16 -#: airtime_mvc/application/forms/ShowBuilder.php:18 -msgid "Date Start:" -msgstr "Data rozpoczęcia:" - -#: airtime_mvc/application/forms/DateRange.php:35 -#: airtime_mvc/application/forms/DateRange.php:63 -#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31 -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:99 -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:118 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:100 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:123 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:144 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:174 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:186 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:198 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:210 -#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26 -#: airtime_mvc/application/forms/ShowBuilder.php:37 -#: airtime_mvc/application/forms/ShowBuilder.php:65 -msgid "Invalid character entered" -msgstr "Wprowadzony znak jest nieprawidłowy" - -#: airtime_mvc/application/forms/DateRange.php:44 -#: airtime_mvc/application/forms/AddShowRepeats.php:40 -#: airtime_mvc/application/forms/ShowBuilder.php:46 -msgid "Date End:" -msgstr "Data zakończenia:" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 -#: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 -msgid "Value is required and can't be empty" -msgstr "Pole jest wymagane i nie może być puste" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 -msgid "" -"'%value%' is no valid email address in the basic format local-part@hostname" -msgstr "" -"'%value%' nie jest poprawnym adresem email w podstawowym formacie local-" -"part@hostname" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:33 -msgid "'%value%' does not fit the date format '%format%'" -msgstr "'%value%' nie pasuje do formatu daty '%format%'" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:59 -msgid "'%value%' is less than %min% characters long" -msgstr "'%value%' ma mniej niż %min% znaków" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:64 -msgid "'%value%' is more than %max% characters long" -msgstr "'%value%' ma więcej niż %max% znaków" - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:76 -msgid "'%value%' is not between '%min%' and '%max%', inclusively" -msgstr "'%value%' nie jest pomiędzy '%min%' and '%max%'. " - -#: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 -msgid "Passwords do not match" -msgstr "Hasła nie są identyczne" - -#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 -#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 -msgid "days" -msgstr "dni" - -#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:63 -#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:58 -msgid "Day must be specified" -msgstr "Dzień musi być określony" - -#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:68 -#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:63 -msgid "Time must be specified" -msgstr "Czas musi być określony" - -#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:95 -#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:86 -msgid "Must wait at least 1 hour to rebroadcast" -msgstr "Musisz odczekać przynajmniej 1 godzinę, aby retransmitować" - -#: airtime_mvc/application/forms/AddShowRR.php:10 -msgid "Record from Line In?" -msgstr "Nagrywać z wejścia liniowego?" - -#: airtime_mvc/application/forms/AddShowRR.php:16 -msgid "Rebroadcast?" -msgstr "Retransmitować?" - -#: airtime_mvc/application/forms/AddShowStyle.php:10 -msgid "Background Colour:" -msgstr "Kolor tła:" - -#: airtime_mvc/application/forms/AddShowStyle.php:29 -msgid "Text Colour:" -msgstr "Kolor tekstu:" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:19 -msgid "Auto Switch Off" -msgstr "Automatyczne przejście wyłączone" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:26 -msgid "Auto Switch On" -msgstr "Automatyczne przejście włączone" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:33 -msgid "Switch Transition Fade (s)" -msgstr "Efekt zanikania między przejściami (s)" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:36 -msgid "enter a time in seconds 00{.000000}" -msgstr "wpisz czas w sekundach 00{.000000}" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:45 -msgid "Master Username" -msgstr "Nazwa użytkownika Master" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:62 -msgid "Master Password" -msgstr "Hasło Master" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:70 -msgid "Master Source Connection URL" -msgstr "Adres URL źródła Master" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:78 -msgid "Show Source Connection URL" -msgstr "Adres URL źródła Program" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:87 -msgid "Master Source Port" -msgstr "Port źródła Master" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:90 -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:109 -#: airtime_mvc/application/forms/StreamSettingSubForm.php:112 -msgid "Only numbers are allowed." -msgstr "Dozwolone tylko cyfry." - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:96 -msgid "Master Source Mount Point" -msgstr "Punkt montowania źródła Master" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:106 -msgid "Show Source Port" -msgstr "Port źródła Program" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:115 -msgid "Show Source Mount Point" -msgstr "Punkt montowania źródła Program" - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:153 -msgid "You cannot use same port as Master DJ port." -msgstr "Nie możesz użyć tego samego portu jako Master DJ." - -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:164 -#: airtime_mvc/application/forms/LiveStreamingPreferences.php:182 -#, php-format -msgid "Port %s is not available" -msgstr "Port %s nie jest dostępny" - -#: airtime_mvc/application/forms/WatchedDirPreferences.php:14 -#, fuzzy -msgid "Import Folder:" -msgstr "Katalog importu:" - -#: airtime_mvc/application/forms/WatchedDirPreferences.php:25 -msgid "Watched Folders:" -msgstr "Przeszukiwane katalogi:" - -#: airtime_mvc/application/forms/WatchedDirPreferences.php:40 -msgid "Not a valid Directory" -msgstr "Nieprawidłowy katalog" - -#: airtime_mvc/application/forms/AddUser.php:23 -#: airtime_mvc/application/forms/Login.php:19 -#: airtime_mvc/application/forms/EditUser.php:30 -msgid "Username:" -msgstr "Nazwa użytkownika:" - -#: airtime_mvc/application/forms/AddUser.php:32 -#: airtime_mvc/application/forms/Login.php:34 -#: airtime_mvc/application/forms/EditUser.php:41 -msgid "Password:" -msgstr "Hasło:" - -#: airtime_mvc/application/forms/AddUser.php:40 -#: airtime_mvc/application/forms/EditUser.php:50 -msgid "Verify Password:" -msgstr "Powtórz hasło:" - -#: airtime_mvc/application/forms/AddUser.php:48 -#: airtime_mvc/application/forms/EditUser.php:59 -msgid "Firstname:" -msgstr "Imię:" - -#: airtime_mvc/application/forms/AddUser.php:54 -#: airtime_mvc/application/forms/EditUser.php:67 -msgid "Lastname:" -msgstr "Nazwisko:" - -#: airtime_mvc/application/forms/AddUser.php:69 -#: airtime_mvc/application/forms/EditUser.php:86 -msgid "Mobile Phone:" -msgstr "Telefon:" - -#: airtime_mvc/application/forms/AddUser.php:75 -#: airtime_mvc/application/forms/EditUser.php:94 -msgid "Skype:" -msgstr "Skype:" - -#: airtime_mvc/application/forms/AddUser.php:81 -#: airtime_mvc/application/forms/EditUser.php:102 -msgid "Jabber:" -msgstr "Jabber:" - -#: airtime_mvc/application/forms/AddUser.php:88 -msgid "User Type:" -msgstr "Typ użytkownika:" - -#: airtime_mvc/application/forms/AddUser.php:92 -#: airtime_mvc/application/controllers/LocaleController.php:316 -msgid "Guest" -msgstr "Gość" - -#: airtime_mvc/application/forms/AddUser.php:93 -#: airtime_mvc/application/controllers/LocaleController.php:314 -msgid "DJ" -msgstr "DJ" - -#: airtime_mvc/application/forms/AddUser.php:94 -#: airtime_mvc/application/controllers/LocaleController.php:315 -msgid "Program Manager" -msgstr "Menadżer programowy" - -#: airtime_mvc/application/forms/AddUser.php:95 -#: airtime_mvc/application/controllers/LocaleController.php:313 -msgid "Admin" -msgstr "Administrator" - -#: airtime_mvc/application/forms/AddUser.php:103 -#: airtime_mvc/application/forms/SupportSettings.php:158 -#: airtime_mvc/application/forms/EditAudioMD.php:134 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:20 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:15 -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:6 -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:116 -#: airtime_mvc/application/views/scripts/preference/index.phtml:6 -#: airtime_mvc/application/views/scripts/preference/index.phtml:14 -msgid "Save" -msgstr "Zpisz" - -#: airtime_mvc/application/forms/AddUser.php:113 -#: airtime_mvc/application/forms/EditUser.php:132 -msgid "Login name is not unique." -msgstr "Nazwa użytkownika nie jest unikalna." - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:48 -msgid "Enabled:" -msgstr "Włączone:" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:57 -msgid "Stream Type:" -msgstr "Typ strumienia:" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:67 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9 -msgid "Bit Rate:" -msgstr "Bit Rate:" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:77 -msgid "Service Type:" -msgstr "Typ usługi:" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:87 -msgid "Channels:" -msgstr "Kanały:" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 -msgid "1 - Mono" -msgstr "1 - Mono" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 -msgid "2 - Stereo" -msgstr "2 - Stereo" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:97 -msgid "Server" -msgstr "Serwer" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:141 -msgid "URL" -msgstr "URL" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:153 -msgid "Name" -msgstr "Nazwa" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:162 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:51 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:53 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:40 -msgid "Description" -msgstr "Opis" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:171 -msgid "Mount Point" -msgstr "Punkt montowania" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:183 -#: airtime_mvc/application/forms/PasswordRestore.php:25 -#: airtime_mvc/application/views/scripts/user/add-user.phtml:18 -msgid "Username" -msgstr "Nazwa użytkownika" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:195 -msgid "Admin User" -msgstr "Login Administratora" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:207 -msgid "Admin Password" -msgstr "Hasło Administratora" - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:218 -#: airtime_mvc/application/controllers/LocaleController.php:173 -msgid "Getting information from the server..." -msgstr "Pobieranie informacji z serwera..." - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:232 -msgid "Server cannot be empty." -msgstr "Serwer nie może być pusty." - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:237 -msgid "Port cannot be empty." -msgstr "Port nie może być pusty." - -#: airtime_mvc/application/forms/StreamSettingSubForm.php:243 -msgid "Mount cannot be empty with Icecast server." -msgstr "Punkt montowania nie może być pusty dla serwera Icecast." - -#: airtime_mvc/application/forms/AddShowRepeats.php:11 -msgid "Repeat Type:" -msgstr "Typ powtarzania:" - -#: airtime_mvc/application/forms/AddShowRepeats.php:14 -msgid "weekly" -msgstr "tygodniowy" - -#: airtime_mvc/application/forms/AddShowRepeats.php:15 -msgid "bi-weekly" -msgstr "dwutygodniowy" - -#: airtime_mvc/application/forms/AddShowRepeats.php:16 -msgid "monthly" -msgstr "miesięczny" - -#: airtime_mvc/application/forms/AddShowRepeats.php:25 -msgid "Select Days:" -msgstr "Wybrane dni:" - -#: airtime_mvc/application/forms/AddShowRepeats.php:28 -#: airtime_mvc/application/controllers/LocaleController.php:253 -msgid "Sun" -msgstr "Nie" - -#: airtime_mvc/application/forms/AddShowRepeats.php:29 -#: airtime_mvc/application/controllers/LocaleController.php:254 -msgid "Mon" -msgstr "Pon" - -#: airtime_mvc/application/forms/AddShowRepeats.php:30 -#: airtime_mvc/application/controllers/LocaleController.php:255 -msgid "Tue" -msgstr "Wt" - -#: airtime_mvc/application/forms/AddShowRepeats.php:31 -#: airtime_mvc/application/controllers/LocaleController.php:256 -msgid "Wed" -msgstr "Śr" - -#: airtime_mvc/application/forms/AddShowRepeats.php:32 -#: airtime_mvc/application/controllers/LocaleController.php:257 -msgid "Thu" -msgstr "Czw" - -#: airtime_mvc/application/forms/AddShowRepeats.php:33 -#: airtime_mvc/application/controllers/LocaleController.php:258 -msgid "Fri" -msgstr "Pt" - -#: airtime_mvc/application/forms/AddShowRepeats.php:34 -#: airtime_mvc/application/controllers/LocaleController.php:259 -msgid "Sat" -msgstr "Sob" - -#: airtime_mvc/application/forms/AddShowRepeats.php:53 -msgid "No End?" -msgstr "Bez końca?" - -#: airtime_mvc/application/forms/AddShowRepeats.php:79 -msgid "End date must be after start date" -msgstr "Data końcowa musi być po dacie początkowej" - -#: airtime_mvc/application/forms/AddShowWhat.php:26 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:127 -msgid "Name:" -msgstr "Nazwa:" - -#: airtime_mvc/application/forms/AddShowWhat.php:30 -msgid "Untitled Show" -msgstr "Program bez nazwy" - -#: airtime_mvc/application/forms/AddShowWhat.php:36 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:131 -msgid "URL:" -msgstr "URL:" - -#: airtime_mvc/application/forms/AddShowWhat.php:45 -#: airtime_mvc/application/forms/EditAudioMD.php:47 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11 -msgid "Genre:" -msgstr "Rodziaj:" - -#: airtime_mvc/application/forms/AddShowWhat.php:54 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:130 -msgid "Description:" -msgstr "Opis:" - -#: airtime_mvc/application/forms/AddShowWho.php:10 -msgid "Search Users:" -msgstr "Wyszukiwanie Użytkowników:" - -#: airtime_mvc/application/forms/AddShowWho.php:24 -msgid "DJs:" -msgstr "DJs" - -#: airtime_mvc/application/forms/StreamSetting.php:22 -msgid "Hardware Audio Output" -msgstr "Sprzętowe wyjście Audio" - -#: airtime_mvc/application/forms/StreamSetting.php:33 -msgid "Output Type" -msgstr "Typ wyjścia" - -#: airtime_mvc/application/forms/StreamSetting.php:44 -msgid "Icecast Vorbis Metadata" -msgstr "Metadane Icecast Vorbis" - -#: airtime_mvc/application/forms/StreamSetting.php:54 -msgid "Stream Label:" -msgstr "Etykieta strumienia:" - -#: airtime_mvc/application/forms/StreamSetting.php:55 -msgid "Artist - Title" -msgstr "Artysta - Tytuł" - -#: airtime_mvc/application/forms/StreamSetting.php:56 -msgid "Show - Artist - Title" -msgstr "Program - Artysta -Tytuł" - -#: airtime_mvc/application/forms/StreamSetting.php:57 -msgid "Station name - Show name" -msgstr "Nazwa stacji - nazwa Ptogramu" - -#: airtime_mvc/application/forms/StreamSetting.php:63 -msgid "Off Air Metadata" -msgstr "Metadane Off Air" - -#: airtime_mvc/application/forms/StreamSetting.php:69 -msgid "Enable Replay Gain" -msgstr "Włącz normalizację głośności (Replay Gain)" - -#: airtime_mvc/application/forms/StreamSetting.php:75 -msgid "Replay Gain Modifier" -msgstr "Modyfikator normalizacji głośności" - -#: airtime_mvc/application/forms/PasswordRestore.php:14 -msgid "E-mail" -msgstr "E-mail" - -#: airtime_mvc/application/forms/PasswordRestore.php:36 -msgid "Restore password" -msgstr "Przywracanie hasła" - -#: airtime_mvc/application/forms/PasswordRestore.php:46 -#: airtime_mvc/application/forms/EditAudioMD.php:144 -#: airtime_mvc/application/controllers/LocaleController.php:310 -msgid "Cancel" -msgstr "Zamknij" - -#: airtime_mvc/application/forms/AddShowWhen.php:16 -msgid "'%value%' does not fit the time format 'HH:mm'" -msgstr "" - -#: airtime_mvc/application/forms/AddShowWhen.php:22 -msgid "Date/Time Start:" -msgstr "Data/Czas rozpoczęcia:" - -#: airtime_mvc/application/forms/AddShowWhen.php:49 -msgid "Date/Time End:" -msgstr "Data/Czas zakończenia:" - -#: airtime_mvc/application/forms/AddShowWhen.php:74 -msgid "Duration:" -msgstr "Czas trwania:" - -#: airtime_mvc/application/forms/AddShowWhen.php:83 -msgid "Repeats?" -msgstr "Powtarzanie?" - -#: airtime_mvc/application/forms/AddShowWhen.php:103 -msgid "Cannot create show in the past" -msgstr "Nie można utworzyć programu w przeszłości" - -#: airtime_mvc/application/forms/AddShowWhen.php:111 -msgid "Cannot modify start date/time of the show that is already started" -msgstr "Nie mozna zmienić daty/czasu programu, który się już rozpoczął" - -#: airtime_mvc/application/forms/AddShowWhen.php:130 -msgid "Cannot have duration 00h 00m" -msgstr "Czas trwania nie może mieć 00h 00m" - -#: airtime_mvc/application/forms/AddShowWhen.php:134 -msgid "Cannot have duration greater than 24h" -msgstr "Czas trwania nie może być dłuższy niż 24h" - -#: airtime_mvc/application/forms/AddShowWhen.php:138 -msgid "Cannot have duration < 0m" -msgstr "Czas trwania nie może być <0m" - -#: airtime_mvc/application/forms/EditAudioMD.php:19 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:3 -msgid "Title:" -msgstr "Tytuł:" - -#: airtime_mvc/application/forms/EditAudioMD.php:26 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:4 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:28 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:129 -msgid "Creator:" -msgstr "Twórca:" - -#: airtime_mvc/application/forms/EditAudioMD.php:33 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:5 -msgid "Album:" -msgstr "Album:" - -#: airtime_mvc/application/forms/EditAudioMD.php:40 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:6 -msgid "Track:" -msgstr "Utwór:" - -#: airtime_mvc/application/forms/EditAudioMD.php:54 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12 -msgid "Year:" -msgstr "Rok:" - -#: airtime_mvc/application/forms/EditAudioMD.php:66 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13 -msgid "Label:" -msgstr "Etykieta:" - -#: airtime_mvc/application/forms/EditAudioMD.php:73 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15 -msgid "Composer:" -msgstr "Kompozytor:" - -#: airtime_mvc/application/forms/EditAudioMD.php:80 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16 -msgid "Conductor:" -msgstr "dyrygent:" - -#: airtime_mvc/application/forms/EditAudioMD.php:87 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10 -msgid "Mood:" -msgstr "Nastrój:" - -#: airtime_mvc/application/forms/EditAudioMD.php:95 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:14 -msgid "BPM:" -msgstr "BPM:" - -#: airtime_mvc/application/forms/EditAudioMD.php:104 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17 -msgid "Copyright:" -msgstr "Prawa autorskie:" - -#: airtime_mvc/application/forms/EditAudioMD.php:111 -msgid "ISRC Number:" -msgstr "Numer ISRC:" - -#: airtime_mvc/application/forms/EditAudioMD.php:118 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19 -msgid "Website:" -msgstr "Strona internetowa:" - -#: airtime_mvc/application/forms/EditAudioMD.php:125 -#: airtime_mvc/application/forms/Login.php:48 -#: airtime_mvc/application/forms/EditUser.php:111 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20 -msgid "Language:" -msgstr "Język:" - -#: airtime_mvc/application/forms/Login.php:65 -#: airtime_mvc/application/views/scripts/login/index.phtml:3 -msgid "Login" -msgstr "Zaloguj" - -#: airtime_mvc/application/forms/Login.php:83 -msgid "Type the characters you see in the picture below." -msgstr "Wpisz znaki, które widzisz na obrazku poniżej." - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:78 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:94 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:214 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:329 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:367 -#: airtime_mvc/application/controllers/LocaleController.php:142 -msgid "Select modifier" -msgstr "Wybierz modyfikator" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:79 -#: airtime_mvc/application/controllers/LocaleController.php:143 -msgid "contains" -msgstr "zawiera" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:80 -#: airtime_mvc/application/controllers/LocaleController.php:144 -msgid "does not contain" -msgstr "nie zawiera" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:81 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:95 -#: airtime_mvc/application/controllers/LocaleController.php:145 -msgid "is" -msgstr "jest" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:82 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:96 -#: airtime_mvc/application/controllers/LocaleController.php:146 -msgid "is not" -msgstr "nie jest" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:83 -#: airtime_mvc/application/controllers/LocaleController.php:147 -msgid "starts with" -msgstr "zaczyna" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:84 -#: airtime_mvc/application/controllers/LocaleController.php:148 -msgid "ends with" -msgstr "kończy" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:97 -#: airtime_mvc/application/controllers/LocaleController.php:149 -msgid "is greater than" -msgstr "jest większa niż" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:98 -#: airtime_mvc/application/controllers/LocaleController.php:150 -msgid "is less than" -msgstr "jest mniejsza niż" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:99 -#: airtime_mvc/application/controllers/LocaleController.php:151 -msgid "is in the range" -msgstr "mieści się w zakresie" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:109 -msgid "hours" -msgstr "godziny" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:110 -msgid "minutes" -msgstr "minuty" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:111 -msgid "items" -msgstr "elementy" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:133 -msgid "Set smart block type:" -msgstr "Ustaw typ smart block:" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:136 -#: airtime_mvc/application/controllers/LibraryController.php:501 -msgid "Static" -msgstr "Statyczne" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:137 -#: airtime_mvc/application/controllers/LibraryController.php:504 -msgid "Dynamic" -msgstr "Dynamiczne" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:248 -msgid "Allow Repeat Tracks:" -msgstr "Pozwól na powtarzanie utworów:" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:265 -msgid "Limit to" -msgstr "Ogranicz do" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:287 -msgid "Generate playlist content and save criteria" -msgstr "Generuj zawartość listy odtwarzania i zapisz kryteria" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:289 -msgid "Generate" -msgstr "Generuj" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:295 -msgid "Shuffle playlist content" -msgstr "Losowa zawartość listy odtwarzania" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:297 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 -msgid "Shuffle" -msgstr "Losowa" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:461 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:473 -msgid "Limit cannot be empty or smaller than 0" -msgstr "Limit nie może być pusty oraz mniejszy od 0" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:466 -msgid "Limit cannot be more than 24 hrs" -msgstr "Limit nie może być większy niż 24 godziny" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:476 -msgid "The value should be an integer" -msgstr "Wartość ta powinna być liczbą całkowitą" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:479 -msgid "500 is the max item limit value you can set" -msgstr "" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:490 -msgid "You must select Criteria and Modifier" -msgstr "Musisz wybrać kryteria i modyfikaroe" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:497 -msgid "'Length' should be in '00:00:00' format" -msgstr "'Długość' powinna być w formacie '00:00:00'" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:502 -#: airtime_mvc/application/forms/SmartBlockCriteria.php:515 -msgid "" -"The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00)" -msgstr "" -"Wartość powinna być w formacie timestamp (np. 0000-00-00 or 00-00-00 " -"00:00:00)" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:529 -msgid "The value has to be numeric" -msgstr "Wartość musi być liczbą" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:534 -msgid "The value should be less then 2147483648" -msgstr "Wartość powinna być mniejsza niż 2147483648" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:539 -#, php-format -msgid "The value should be less than %s characters" -msgstr "Wartość powinna posiadać mniej niż %s znaków" - -#: airtime_mvc/application/forms/SmartBlockCriteria.php:546 -msgid "Value cannot be empty" -msgstr "Wartość nie może być pusta" - -#: airtime_mvc/application/forms/ShowBuilder.php:72 -msgid "Show:" -msgstr "Program." - -#: airtime_mvc/application/forms/ShowBuilder.php:80 -msgid "All My Shows:" -msgstr "Wszystkie moje programy:" - -#: airtime_mvc/application/forms/EditUser.php:118 -msgid "Timezone:" -msgstr "Strefa czasowa:" - -#: airtime_mvc/application/forms/AddShowLiveStream.php:10 -msgid "Use Airtime Authentication:" -msgstr "Użyj uwieżytelnienia Airtime:" - -#: airtime_mvc/application/forms/AddShowLiveStream.php:16 -msgid "Use Custom Authentication:" -msgstr "Użyj własnegu uwieżytelnienia:" - -#: airtime_mvc/application/forms/AddShowLiveStream.php:26 -msgid "Custom Username" -msgstr "Niestandardowa nazwa użytkownika" - -#: airtime_mvc/application/forms/AddShowLiveStream.php:39 -msgid "Custom Password" -msgstr "Niestandardowe hasło" - -#: airtime_mvc/application/forms/AddShowLiveStream.php:63 -msgid "Username field cannot be empty." -msgstr "Pole nazwy użytkownika nie może być puste." - -#: airtime_mvc/application/forms/AddShowLiveStream.php:68 -msgid "Password field cannot be empty." -msgstr "Pole hasła nie może być puste." - -#: airtime_mvc/application/forms/GeneralPreferences.php:34 -msgid "Default Fade (s):" -msgstr "Domyślne przejście (Fade) (s):" - -#: airtime_mvc/application/forms/GeneralPreferences.php:39 -msgid "enter a time in seconds 0{.0}" -msgstr "wpisz czas w sekundach 0{.0}" - -#: airtime_mvc/application/forms/GeneralPreferences.php:48 -#, php-format -msgid "" -"Allow Remote Websites To Access \"Schedule\" Info?%s (Enable this to make " -"front-end widgets work.)" -msgstr "" -"Umożliw dostęp zdalnym stronom \"Plan\" Info?%s (Włącz, aby zewnętrzne " -"widgety działały.)" - -#: airtime_mvc/application/forms/GeneralPreferences.php:49 -msgid "Disabled" -msgstr "Wyłączone" - -#: airtime_mvc/application/forms/GeneralPreferences.php:50 -msgid "Enabled" -msgstr "Włączone" - -#: airtime_mvc/application/forms/GeneralPreferences.php:56 -msgid "Default Interface Language" -msgstr "Domyślny język" - -#: airtime_mvc/application/forms/GeneralPreferences.php:64 -msgid "Default Interface Timezone" -msgstr "Domyślna strefa czasowa" - -#: airtime_mvc/application/forms/GeneralPreferences.php:72 -msgid "Week Starts On" -msgstr "Tydzień zaczynaj od" - -#: airtime_mvc/application/forms/GeneralPreferences.php:82 -#: airtime_mvc/application/controllers/LocaleController.php:246 -msgid "Sunday" -msgstr "Niedziela" - -#: airtime_mvc/application/forms/GeneralPreferences.php:83 -#: airtime_mvc/application/controllers/LocaleController.php:247 -msgid "Monday" -msgstr "Poniedziałek" - -#: airtime_mvc/application/forms/GeneralPreferences.php:84 -#: airtime_mvc/application/controllers/LocaleController.php:248 -msgid "Tuesday" -msgstr "Wtorek" - -#: airtime_mvc/application/forms/GeneralPreferences.php:85 -#: airtime_mvc/application/controllers/LocaleController.php:249 -msgid "Wednesday" -msgstr "Środa" - -#: airtime_mvc/application/forms/GeneralPreferences.php:86 -#: airtime_mvc/application/controllers/LocaleController.php:250 -msgid "Thursday" -msgstr "Czwartek" - -#: airtime_mvc/application/forms/GeneralPreferences.php:87 -#: airtime_mvc/application/controllers/LocaleController.php:251 -msgid "Friday" -msgstr "Piątek" - -#: airtime_mvc/application/forms/GeneralPreferences.php:88 -#: airtime_mvc/application/controllers/LocaleController.php:252 -msgid "Saturday" -msgstr "Sobota" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:16 -msgid "Automatically Upload Recorded Shows" -msgstr "Automatycznie wysyłaj nagrane programy" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:26 -msgid "Enable SoundCloud Upload" -msgstr "Włącz wysyłanie do SoundCloud" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:36 -msgid "Automatically Mark Files \"Downloadable\" on SoundCloud" -msgstr "Automatycznie oznaczaj pliki \"Do pobrania\" na SoundCloud" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:47 -msgid "SoundCloud Email" -msgstr "Email SoundCloud" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:67 -msgid "SoundCloud Password" -msgstr "Hasło SoundCloud" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:87 -msgid "SoundCloud Tags: (separate tags with spaces)" -msgstr "Tagi SoundCloud: (oddzielaj tagi spacją)" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:99 -msgid "Default Genre:" -msgstr "Domyślny gatunek:" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:109 -msgid "Default Track Type:" -msgstr "Domyślny typ utworu:" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:113 -msgid "Original" -msgstr "Oryfinalny" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:114 -msgid "Remix" -msgstr "Remix" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:115 -msgid "Live" -msgstr "Na żywo" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:116 -msgid "Recording" -msgstr "Nagranie" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:117 -msgid "Spoken" -msgstr "Mówiony" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:118 -msgid "Podcast" -msgstr "Podcast" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:119 -msgid "Demo" -msgstr "Demo" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:120 -msgid "Work in progress" -msgstr "Praca w toku" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:121 -msgid "Stem" -msgstr "Rdzeń" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:122 -msgid "Loop" -msgstr "Pętla" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:123 -msgid "Sound Effect" -msgstr "Efekt dźwiękowy" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:124 -msgid "One Shot Sample" -msgstr "Jeden strzał próbki" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:125 -msgid "Other" -msgstr "Pozostałe" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:133 -msgid "Default License:" -msgstr "Domyślna licencja:" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:137 -msgid "The work is in the public domain" -msgstr "Praca w domenie publicznej" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:138 -msgid "All rights are reserved" -msgstr "Wszelkie prawa zastrzeżone" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:139 -msgid "Creative Commons Attribution" -msgstr "Creative Commons Attribution" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:140 -msgid "Creative Commons Attribution Noncommercial" -msgstr "Creative Commons Attribution Noncommercial" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:141 -msgid "Creative Commons Attribution No Derivative Works" -msgstr "Creative Commons Attribution No Derivative Works" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:142 -msgid "Creative Commons Attribution Share Alike" -msgstr "Creative Commons Attribution Share Alike" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:143 -msgid "Creative Commons Attribution Noncommercial Non Derivate Works" -msgstr "Creative Commons Attribution Noncommercial Non Derivate Works" - -#: airtime_mvc/application/forms/SoundcloudPreferences.php:144 -msgid "Creative Commons Attribution Noncommercial Share Alike" -msgstr "Creative Commons Attribution Noncommercial Share Alike" - -#: airtime_mvc/application/controllers/DashboardController.php:36 -#: airtime_mvc/application/controllers/DashboardController.php:85 -msgid "You don't have permission to disconnect source." -msgstr "Nie masz uprawnień aby rozłączyć to źródło." - -#: airtime_mvc/application/controllers/DashboardController.php:38 -#: airtime_mvc/application/controllers/DashboardController.php:87 -msgid "There is no source connected to this input." -msgstr "Źródło nie jest podłączone do tego wyjścia." - -#: airtime_mvc/application/controllers/DashboardController.php:82 -msgid "You don't have permission to switch source." -msgstr "Nie masz uprawnień do przełączenia źródła." - -#: airtime_mvc/application/controllers/LoginController.php:34 -msgid "Please enter your user name and password" -msgstr "Proszę wpisz swoją nazwę użytkownika i hasło" - -#: airtime_mvc/application/controllers/LoginController.php:77 -msgid "Wrong username or password provided. Please try again." -msgstr "Błędna nazwa użytkownia lub hasło. Proszę spróbuj ponownie." - -#: airtime_mvc/application/controllers/LoginController.php:139 -msgid "" -"Email could not be sent. Check your mail server settings and ensure it has " -"been configured properly." -msgstr "" -"Email nie został wysłany. Sprawdź Twoje ustawienia serwera pocztowego i " -"upewnij się, że został skonfigurowany poprawnie." - -#: airtime_mvc/application/controllers/LoginController.php:142 -msgid "Given email not found." -msgstr "Podany email nie został odnaleziony." - -#: airtime_mvc/application/controllers/PreferenceController.php:70 -msgid "Preferences updated." -msgstr "Preferencje aktualizacji." - -#: airtime_mvc/application/controllers/PreferenceController.php:121 -msgid "Support setting updated." -msgstr "Ustawienia wsparcia aktualizacji." - -#: airtime_mvc/application/controllers/PreferenceController.php:315 -msgid "Stream Setting Updated." -msgstr "Ustawienia strumienia aktualizacji." - -#: airtime_mvc/application/controllers/PreferenceController.php:342 -msgid "path should be specified" -msgstr "ścieżka powinna być określona" - -#: airtime_mvc/application/controllers/PreferenceController.php:437 -msgid "Problem with Liquidsoap..." -msgstr "Pronlem z Liquidsoap..." - -#: airtime_mvc/application/controllers/ErrorController.php:17 -msgid "Page not found" -msgstr "Strona nie istnieje" - -#: airtime_mvc/application/controllers/ErrorController.php:22 -msgid "Application error" -msgstr "Błąd aplikacji" - -#: airtime_mvc/application/controllers/UserController.php:55 -#: airtime_mvc/application/controllers/UserController.php:137 -msgid "Specific action is not allowed in demo version!" -msgstr "Szczególne opcje nie są dostępne w wersji demonstracyjnej!" - -#: airtime_mvc/application/controllers/UserController.php:87 -msgid "User added successfully!" -msgstr "Użytkownik został dodany poprawnie!" - -#: airtime_mvc/application/controllers/UserController.php:89 -msgid "User updated successfully!" -msgstr "Użytkownik został poprawnie zaktualizowany!" - -#: airtime_mvc/application/controllers/UserController.php:164 -msgid "Settings updated successfully!" -msgstr "Ustawienia zostały poprawnie zaktualizowane!" - -#: airtime_mvc/application/controllers/LocaleController.php:36 -msgid "Recording:" -msgstr "Nagrywanie:" - -#: airtime_mvc/application/controllers/LocaleController.php:37 -msgid "Master Stream" -msgstr "Strumień Master" - -#: airtime_mvc/application/controllers/LocaleController.php:38 -msgid "Live Stream" -msgstr "Strumień Lice" - -#: airtime_mvc/application/controllers/LocaleController.php:39 -msgid "Nothing Scheduled" -msgstr "Nic nie zaplanowano" - -#: airtime_mvc/application/controllers/LocaleController.php:40 -msgid "Current Show:" -msgstr "Aktualny program:" - -#: airtime_mvc/application/controllers/LocaleController.php:41 -msgid "Current" -msgstr "Aktualny" - -#: airtime_mvc/application/controllers/LocaleController.php:43 -msgid "You are running the latest version" -msgstr "Używasz najnowszej wersji" - -#: airtime_mvc/application/controllers/LocaleController.php:44 -msgid "New version available: " -msgstr "Nowa wersja dostępna:" - -#: airtime_mvc/application/controllers/LocaleController.php:45 -msgid "This version will soon be obsolete." -msgstr "ta wersja będzie wkrótce przestarzała." - -#: airtime_mvc/application/controllers/LocaleController.php:46 -msgid "This version is no longer supported." -msgstr "Ta wersja nie jest już wspierana." - -#: airtime_mvc/application/controllers/LocaleController.php:47 -msgid "Please upgrade to " -msgstr "Proszę uaktualnij do" - -#: airtime_mvc/application/controllers/LocaleController.php:49 -msgid "Add to current playlist" -msgstr "Dodaj do bieżącej listy odtwarzania" - -#: airtime_mvc/application/controllers/LocaleController.php:50 -msgid "Add to current smart block" -msgstr "Dodaj do bieżącego smart block" - -#: airtime_mvc/application/controllers/LocaleController.php:51 -msgid "Adding 1 Item" -msgstr "Dodano 1 element" - -#: airtime_mvc/application/controllers/LocaleController.php:52 -#, php-format -msgid "Adding %s Items" -msgstr "Dodano %s elementów(y)" - -#: airtime_mvc/application/controllers/LocaleController.php:53 -msgid "You can only add tracks to smart blocks." -msgstr "Można dodawać tylko utwory do smart blocks." - -#: airtime_mvc/application/controllers/LocaleController.php:54 -#: airtime_mvc/application/controllers/PlaylistController.php:160 -msgid "You can only add tracks, smart blocks, and webstreams to playlists." -msgstr "" -"Można dodawać tylko utwory do smart blocks i webstream do listy odtwarznia." - -#: airtime_mvc/application/controllers/LocaleController.php:57 -msgid "Please select a cursor position on timeline." -msgstr "Proszę wybrać kursorem pozycję na osi czasu." - -#: airtime_mvc/application/controllers/LocaleController.php:61 -#: airtime_mvc/application/controllers/LibraryController.php:190 -msgid "Edit Metadata" -msgstr "Edytuj Metadane." - -#: airtime_mvc/application/controllers/LocaleController.php:62 -msgid "Add to selected show" -msgstr "Dodaj do wybranego programu" - -#: airtime_mvc/application/controllers/LocaleController.php:63 -msgid "Select" -msgstr "Zaznacz" - -#: airtime_mvc/application/controllers/LocaleController.php:64 -msgid "Select this page" -msgstr "Zaznacz tę stronę" - -#: airtime_mvc/application/controllers/LocaleController.php:65 -msgid "Deselect this page" -msgstr "Odznacz tę stronę" - -#: airtime_mvc/application/controllers/LocaleController.php:66 -msgid "Deselect all" -msgstr "Odznacz wszystko" - -#: airtime_mvc/application/controllers/LocaleController.php:67 -msgid "Are you sure you want to delete the selected item(s)?" -msgstr "Czy na pewno chcesz usunąć wybrane elementy?" - -#: airtime_mvc/application/controllers/LocaleController.php:71 -msgid "Bit Rate" -msgstr "Bit Rate" - -#: airtime_mvc/application/controllers/LocaleController.php:88 -msgid "Sample Rate" -msgstr "Wartość próbkowania" - -#: airtime_mvc/application/controllers/LocaleController.php:93 -msgid "Loading..." -msgstr "Ładowanie" - -#: airtime_mvc/application/controllers/LocaleController.php:94 -#: airtime_mvc/application/controllers/LocaleController.php:159 -msgid "All" -msgstr "Wszystko" - -#: airtime_mvc/application/controllers/LocaleController.php:95 -msgid "Files" -msgstr "Pliki" - -#: airtime_mvc/application/controllers/LocaleController.php:96 -msgid "Playlists" -msgstr "Listy odtwarzania" - -#: airtime_mvc/application/controllers/LocaleController.php:97 -msgid "Smart Blocks" -msgstr "Smart Blocks" - -#: airtime_mvc/application/controllers/LocaleController.php:98 -msgid "Web Streams" -msgstr "Web Stream" - -#: airtime_mvc/application/controllers/LocaleController.php:99 -msgid "Unknown type: " -msgstr "Nieznany typ:" - -#: airtime_mvc/application/controllers/LocaleController.php:100 -msgid "Are you sure you want to delete the selected item?" -msgstr "Czy na pewno chcesz usunąć wybrany element?" - -#: airtime_mvc/application/controllers/LocaleController.php:101 -#: airtime_mvc/application/controllers/LocaleController.php:206 -msgid "Uploading in progress..." -msgstr "Wysyłanie w toku..." - -#: airtime_mvc/application/controllers/LocaleController.php:102 -msgid "Retrieving data from the server..." -msgstr "Pobieranie danych z serwera..." - -#: airtime_mvc/application/controllers/LocaleController.php:103 -msgid "The soundcloud id for this file is: " -msgstr "Id SoundCloud dla tego pliku to:" - -#: airtime_mvc/application/controllers/LocaleController.php:104 -msgid "There was an error while uploading to soundcloud." -msgstr "Wystąpił błąd podczas wysyłania na SoundCloud" - -#: airtime_mvc/application/controllers/LocaleController.php:105 -msgid "Error code: " -msgstr "Kod błędu:" - -#: airtime_mvc/application/controllers/LocaleController.php:106 -msgid "Error msg: " -msgstr "Wiadomość błędu:" - -#: airtime_mvc/application/controllers/LocaleController.php:107 -msgid "Input must be a positive number" -msgstr "Wyjście musi być liczbą dodatnią" - -#: airtime_mvc/application/controllers/LocaleController.php:108 -msgid "Input must be a number" -msgstr "Wyjście musi być liczbą" - -#: airtime_mvc/application/controllers/LocaleController.php:109 -msgid "Input must be in the format: yyyy-mm-dd" -msgstr "Wyjście musi mieć format yyyy-mm-dd" - -#: airtime_mvc/application/controllers/LocaleController.php:110 -msgid "Input must be in the format: hh:mm:ss.t" -msgstr "Wyjście musi mieć format hh:mm:ss.t" - -#: airtime_mvc/application/controllers/LocaleController.php:113 -#, php-format -msgid "" -"You are currently uploading files. %sGoing to another screen will cancel the " -"upload process. %sAre you sure you want to leave the page?" -msgstr "" -"Aktualnie wysyłasz pliki. %sPrzejście do innej strony przerwie ten proces. " -"%sCzy na pewno chcesz przejść do innej strony?" - -#: airtime_mvc/application/controllers/LocaleController.php:115 -msgid "please put in a time '00:00:00 (.0)'" -msgstr "proszę umieścić w czasie '00:00:00 (.0)'" - -#: airtime_mvc/application/controllers/LocaleController.php:116 -msgid "please put in a time in seconds '00 (.0)'" -msgstr "proszę umieścić w czasie w sekundach '00 (.0)'" - -#: airtime_mvc/application/controllers/LocaleController.php:117 -msgid "Your browser does not support playing this file type: " -msgstr "Twoja przeglądarka nie obsługuje odtwarzania plików tego typu:" - -#: airtime_mvc/application/controllers/LocaleController.php:118 -#, fuzzy -msgid "Dynamic block is not previewable" -msgstr "Dynamic block nie jest do podglądu" - -#: airtime_mvc/application/controllers/LocaleController.php:119 -msgid "Limit to: " -msgstr "Ograniczenie do:" - -#: airtime_mvc/application/controllers/LocaleController.php:120 -msgid "Playlist saved" -msgstr "Lista odtwarzania zapisana" - -#: airtime_mvc/application/controllers/LocaleController.php:121 -msgid "Playlist shuffled" -msgstr "Losowa playlista" - -#: airtime_mvc/application/controllers/LocaleController.php:123 -msgid "" -"Airtime is unsure about the status of this file. This can happen when the " -"file is on a remote drive that is unaccessible or the file is in a directory " -"that isn't 'watched' anymore." -msgstr "" -"Airtime nie może odczytać statusu pliku. Może się tak zdarzyć gdy plik " -"znajduje się na zdalnym dysku, do którego aktualnie nie ma dostępu lub " -"znajduje się w zablokowanym przed dostępem katalogu." - -#: airtime_mvc/application/controllers/LocaleController.php:125 -#, php-format -msgid "Listener Count on %s: %s" -msgstr "Licznik słuchaczy na %s: %s" - -#: airtime_mvc/application/controllers/LocaleController.php:127 -msgid "Remind me in 1 week" -msgstr "Przypomnij mi za 1 tydzień" - -#: airtime_mvc/application/controllers/LocaleController.php:128 -msgid "Remind me never" -msgstr "Nie przypominaj mi" - -#: airtime_mvc/application/controllers/LocaleController.php:129 -msgid "Yes, help Airtime" -msgstr "Tak, pomóż Airtime" - -#: airtime_mvc/application/controllers/LocaleController.php:130 -#: airtime_mvc/application/controllers/LocaleController.php:188 -msgid "Image must be one of jpg, jpeg, png, or gif" -msgstr "Obrazek musi być w formacjie jpg, jpeg, png lub gif" - -#: airtime_mvc/application/controllers/LocaleController.php:133 -msgid "" -"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." -msgstr "" -"Static smart block będzie zapisywał kryteria i zawartość natychmiast. To " -"pozwala na edycję i wyświetlanie go w bibliotece, przed dodaniem go do " -"programu." - -#: airtime_mvc/application/controllers/LocaleController.php:135 -msgid "" -"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." -msgstr "" -"Dynamic smart blok zapisuje tylko kryteria. Zawartość będzie generowana " -"automatycznie po dodaniu go do programu. Nie będziesz mógł wyświetlać i " -"edytować go w zawartości biblioteki." - -#: airtime_mvc/application/controllers/LocaleController.php:137 -msgid "" -"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." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:138 -msgid "Smart block shuffled" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:139 -msgid "Smart block generated and criteria saved" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:140 -msgid "Smart block saved" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:141 -msgid "Processing..." -msgstr "Przetwarzanie..." - -#: airtime_mvc/application/controllers/LocaleController.php:155 -msgid "Played" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:160 -#, php-format -msgid "Copied %s row%s to the clipboard" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:161 -#, php-format -msgid "" -"%sPrint view%sPlease use your browser's print function to print this table. " -"Press escape when finished." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:163 -msgid "Choose Storage Folder" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:164 -msgid "Choose Folder to Watch" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:166 -msgid "" -"Are you sure you want to change the storage folder?\n" -"This will remove the files from your Airtime library!" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:167 -#: airtime_mvc/application/views/scripts/preference/directory-config.phtml:2 -msgid "Manage Media Folders" -msgstr "Zarządzaj folderami mediów" - -#: airtime_mvc/application/controllers/LocaleController.php:168 -msgid "Are you sure you want to remove the watched folder?" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:169 -msgid "This path is currently not accessible." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:171 -msgid "Connected to the streaming server" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:172 -msgid "The stream is disabled" -msgstr "Strumień jest wyłączony" - -#: airtime_mvc/application/controllers/LocaleController.php:174 -msgid "Can not connect to the streaming server" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:176 -msgid "" -"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." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:177 -#, php-format -msgid "For more details, please read the %sAirtime Manual%s" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:179 -msgid "" -"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." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:180 -msgid "" -"Check this box to automatically switch off Master/Show source upon source " -"disconnection." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:181 -msgid "" -"Check this box to automatically switch on Master/Show source upon source " -"connection." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:182 -msgid "" -"If your Icecast server expects a username of 'source', this field can be " -"left blank." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:183 -#: airtime_mvc/application/controllers/LocaleController.php:193 -msgid "" -"If your live streaming client does not ask for a username, this field should " -"be 'source'." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:185 -msgid "" -"If you change the username or password values for an enabled stream the " -"playout engine will be rebooted and your listeners will hear silence for " -"5-10 seconds. Changing the following fields will NOT cause a reboot: Stream " -"Label (Global Settings), and Switch Transition Fade(s), Master Username, and " -"Master Password (Input Stream Settings). If Airtime is recording, and if the " -"change causes a playout engine restart, the recording will be interrupted." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:186 -msgid "" -"This is the admin username and password for Icecast/SHOUTcast to get " -"listener statistics." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:190 -msgid "No result found" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:191 -msgid "" -"This follows the same security pattern for the shows: only users assigned to " -"the show can connect." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:192 -msgid "Specify custom authentication which will work only for this show." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:194 -msgid "The show instance doesn't exist anymore!" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:198 -msgid "Show" -msgstr "Program" - -#: airtime_mvc/application/controllers/LocaleController.php:199 -msgid "Show is empty" -msgstr "Program jest pusty" - -#: airtime_mvc/application/controllers/LocaleController.php:200 -msgid "1m" -msgstr "1 min" - -#: airtime_mvc/application/controllers/LocaleController.php:201 -msgid "5m" -msgstr "5 min" - -#: airtime_mvc/application/controllers/LocaleController.php:202 -msgid "10m" -msgstr "10 min" - -#: airtime_mvc/application/controllers/LocaleController.php:203 -msgid "15m" -msgstr "15 min" - -#: airtime_mvc/application/controllers/LocaleController.php:204 -msgid "30m" -msgstr "30 min" - -#: airtime_mvc/application/controllers/LocaleController.php:205 -msgid "60m" -msgstr "60 min" - -#: airtime_mvc/application/controllers/LocaleController.php:207 -msgid "Retreiving data from the server..." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:213 -msgid "This show has no scheduled content." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:214 -msgid "This show is not completely filled with content." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:218 -msgid "January" -msgstr "Styczeń" - -#: airtime_mvc/application/controllers/LocaleController.php:219 -msgid "February" -msgstr "Luty" - -#: airtime_mvc/application/controllers/LocaleController.php:220 -msgid "March" -msgstr "Marzec" - -#: airtime_mvc/application/controllers/LocaleController.php:221 -msgid "April" -msgstr "Kwiecień" - -#: airtime_mvc/application/controllers/LocaleController.php:222 -#: airtime_mvc/application/controllers/LocaleController.php:234 -msgid "May" -msgstr "Maj" - -#: airtime_mvc/application/controllers/LocaleController.php:223 -msgid "June" -msgstr "Czerwiec" - -#: airtime_mvc/application/controllers/LocaleController.php:224 -msgid "July" -msgstr "Lipiec" - -#: airtime_mvc/application/controllers/LocaleController.php:225 -msgid "August" -msgstr "Sierpień" - -#: airtime_mvc/application/controllers/LocaleController.php:226 -msgid "September" -msgstr "Wrzesień" - -#: airtime_mvc/application/controllers/LocaleController.php:227 -msgid "October" -msgstr "Październik" - -#: airtime_mvc/application/controllers/LocaleController.php:228 -msgid "November" -msgstr "Listopad" - -#: airtime_mvc/application/controllers/LocaleController.php:229 -msgid "December" -msgstr "Grudzień" - -#: airtime_mvc/application/controllers/LocaleController.php:230 -msgid "Jan" -msgstr "Sty" - -#: airtime_mvc/application/controllers/LocaleController.php:231 -msgid "Feb" -msgstr "Lut" - -#: airtime_mvc/application/controllers/LocaleController.php:232 -msgid "Mar" -msgstr "Mar" - -#: airtime_mvc/application/controllers/LocaleController.php:233 -msgid "Apr" -msgstr "Kwi" - -#: airtime_mvc/application/controllers/LocaleController.php:235 -msgid "Jun" -msgstr "Cze" - -#: airtime_mvc/application/controllers/LocaleController.php:236 -msgid "Jul" -msgstr "Lip" - -#: airtime_mvc/application/controllers/LocaleController.php:237 -msgid "Aug" -msgstr "Sie" - -#: airtime_mvc/application/controllers/LocaleController.php:238 -msgid "Sep" -msgstr "Wrz" - -#: airtime_mvc/application/controllers/LocaleController.php:239 -msgid "Oct" -msgstr "Paź" - -#: airtime_mvc/application/controllers/LocaleController.php:240 -msgid "Nov" -msgstr "Lis" - -#: airtime_mvc/application/controllers/LocaleController.php:241 -msgid "Dec" -msgstr "Gru" - -#: airtime_mvc/application/controllers/LocaleController.php:242 -msgid "today" -msgstr "dzisiaj" - -#: airtime_mvc/application/controllers/LocaleController.php:243 -msgid "day" -msgstr "dzień" - -#: airtime_mvc/application/controllers/LocaleController.php:244 -msgid "week" -msgstr "tydzień" - -#: airtime_mvc/application/controllers/LocaleController.php:245 -msgid "month" -msgstr "miesiąć" - -#: airtime_mvc/application/controllers/LocaleController.php:260 -msgid "" -"Shows longer than their scheduled time will be cut off by a following show." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:261 -msgid "Cancel Current Show?" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:262 -#: airtime_mvc/application/controllers/LocaleController.php:301 -msgid "Stop recording current show?" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:263 -msgid "Ok" -msgstr "Ok" - -#: airtime_mvc/application/controllers/LocaleController.php:264 -msgid "Contents of Show" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:267 -msgid "Remove all content?" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:269 -msgid "Delete selected item(s)?" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:270 -#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5 -msgid "Start" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:271 -msgid "End" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:272 -msgid "Duration" -msgstr "Czas trwania" - -#: airtime_mvc/application/controllers/LocaleController.php:278 -msgid "Cue In" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:279 -msgid "Cue Out" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:280 -msgid "Fade In" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:281 -msgid "Fade Out" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:282 -msgid "Show Empty" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:283 -msgid "Recording From Line In" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:288 -msgid "Cannot schedule outside a show." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:289 -msgid "Moving 1 Item" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:290 -#, php-format -msgid "Moving %s Items" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:293 -msgid "Select all" -msgstr "Wybierz wszystko" - -#: airtime_mvc/application/controllers/LocaleController.php:294 -msgid "Select none" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:295 -msgid "Remove overbooked tracks" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:296 -msgid "Remove selected scheduled items" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:297 -msgid "Jump to the current playing track" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:298 -msgid "Cancel current show" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:303 -msgid "Open library to add or remove content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:304 -#: airtime_mvc/application/controllers/ScheduleController.php:261 -#: airtime_mvc/application/views/scripts/showbuilder/index.phtml:15 -msgid "Add / Remove Content" -msgstr "Dodaj/usuń zawartość" - -#: airtime_mvc/application/controllers/LocaleController.php:306 -msgid "in use" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:307 -msgid "Disk" -msgstr "Dysk" - -#: airtime_mvc/application/controllers/LocaleController.php:309 -msgid "Look in" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:311 -msgid "Open" -msgstr "Otwórz" - -#: airtime_mvc/application/controllers/LocaleController.php:317 -msgid "Guests can do the following:" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:318 -msgid "View schedule" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:319 -msgid "View show content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:320 -msgid "DJs can do the following:" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:321 -msgid "Manage assigned show content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:322 -msgid "Import media files" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:323 -msgid "Create playlists, smart blocks, and webstreams" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:324 -msgid "Manage their own library content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:325 -msgid "Progam Managers can do the following:" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:326 -msgid "View and manage show content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:327 -msgid "Schedule shows" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:328 -msgid "Manage all library content" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:329 -msgid "Admins can do the following:" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:330 -msgid "Manage preferences" -msgstr "Zarządzaj preferencjami" - -#: airtime_mvc/application/controllers/LocaleController.php:331 -msgid "Manage users" -msgstr "Zarządzaj użytkownikami" - -#: airtime_mvc/application/controllers/LocaleController.php:332 -msgid "Manage watched folders" -msgstr "Zarządzaj przeszukiwanymi katalogami" - -#: airtime_mvc/application/controllers/LocaleController.php:334 -msgid "View system status" -msgstr "Zobacz status systemu" - -#: airtime_mvc/application/controllers/LocaleController.php:335 -msgid "Access playout history" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:336 -msgid "View listener stats" -msgstr "Zobacz statystyki słuchacza" - -#: airtime_mvc/application/controllers/LocaleController.php:338 -msgid "Show / hide columns" -msgstr "Pokaż/ukryj kolumny" - -#: airtime_mvc/application/controllers/LocaleController.php:340 -msgid "From {from} to {to}" -msgstr "Z {from} do {to}" - -#: airtime_mvc/application/controllers/LocaleController.php:341 -msgid "kbps" -msgstr "kbps" - -#: airtime_mvc/application/controllers/LocaleController.php:342 -msgid "yyyy-mm-dd" -msgstr "yyyy-mm-dd" - -#: airtime_mvc/application/controllers/LocaleController.php:343 -msgid "hh:mm:ss.t" -msgstr "hh:mm:ss.t" - -#: airtime_mvc/application/controllers/LocaleController.php:344 -msgid "kHz" -msgstr "kHz" - -#: airtime_mvc/application/controllers/LocaleController.php:347 -msgid "Su" -msgstr "Nd" - -#: airtime_mvc/application/controllers/LocaleController.php:348 -msgid "Mo" -msgstr "Pn" - -#: airtime_mvc/application/controllers/LocaleController.php:349 -msgid "Tu" -msgstr "Wt" - -#: airtime_mvc/application/controllers/LocaleController.php:350 -msgid "We" -msgstr "Śr" - -#: airtime_mvc/application/controllers/LocaleController.php:351 -msgid "Th" -msgstr "Cz" - -#: airtime_mvc/application/controllers/LocaleController.php:352 -msgid "Fr" -msgstr "Pt" - -#: airtime_mvc/application/controllers/LocaleController.php:353 -msgid "Sa" -msgstr "So" - -#: airtime_mvc/application/controllers/LocaleController.php:354 -#: airtime_mvc/application/controllers/LocaleController.php:382 -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3 -msgid "Close" -msgstr "Zamknij" - -#: airtime_mvc/application/controllers/LocaleController.php:356 -msgid "Hour" -msgstr "Godzina" - -#: airtime_mvc/application/controllers/LocaleController.php:357 -msgid "Minute" -msgstr "Minuta" - -#: airtime_mvc/application/controllers/LocaleController.php:358 -msgid "Done" -msgstr "Gotowe" - -#: airtime_mvc/application/controllers/LocaleController.php:361 -msgid "Select files" -msgstr "Wybierz pliki" - -#: airtime_mvc/application/controllers/LocaleController.php:362 -#: airtime_mvc/application/controllers/LocaleController.php:363 -msgid "Add files to the upload queue and click the start button." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:366 -msgid "Add Files" -msgstr "Dodaj pliki" - -#: airtime_mvc/application/controllers/LocaleController.php:367 -msgid "Stop Upload" -msgstr "Zatrzymaj przesyłanie" - -#: airtime_mvc/application/controllers/LocaleController.php:368 -msgid "Start upload" -msgstr "Rozpocznij przesyłanie" - -#: airtime_mvc/application/controllers/LocaleController.php:369 -msgid "Add files" -msgstr "Dodaj pliki" - -#: airtime_mvc/application/controllers/LocaleController.php:370 -#, php-format -msgid "Uploaded %d/%d files" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:371 -msgid "N/A" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:372 -msgid "Drag files here." -msgstr "Przeciągnij tutaj pliki." - -#: airtime_mvc/application/controllers/LocaleController.php:373 -msgid "File extension error." -msgstr "Błąd rozszerzenia pliku." - -#: airtime_mvc/application/controllers/LocaleController.php:374 -msgid "File size error." -msgstr "Błąd rozmiaru pliku." - -#: airtime_mvc/application/controllers/LocaleController.php:375 -msgid "File count error." -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:376 -msgid "Init error." -msgstr "Błąd inicjalizacji" - -#: airtime_mvc/application/controllers/LocaleController.php:377 -msgid "HTTP Error." -msgstr "Błąd HTTP." - -#: airtime_mvc/application/controllers/LocaleController.php:378 -msgid "Security error." -msgstr "Błąd zabezpieczeń." - -#: airtime_mvc/application/controllers/LocaleController.php:379 -msgid "Generic error." -msgstr "Błąd ogólny." - -#: airtime_mvc/application/controllers/LocaleController.php:380 -msgid "IO error." -msgstr "Błąd I/O" - -#: airtime_mvc/application/controllers/LocaleController.php:381 -#, php-format -msgid "File: %s" -msgstr "Plik: %s" - -#: airtime_mvc/application/controllers/LocaleController.php:383 -#, php-format -msgid "%d files queued" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:384 -msgid "File: %f, size: %s, max file size: %m" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:385 -msgid "Upload URL might be wrong or doesn't exist" -msgstr "" - -#: airtime_mvc/application/controllers/LocaleController.php:386 -msgid "Error: File too large: " -msgstr "Błąd: plik jest za duży:" - -#: airtime_mvc/application/controllers/LocaleController.php:387 -msgid "Error: Invalid file extension: " -msgstr "Błąd: nieprawidłowe rozszerzenie pliku:" - -#: airtime_mvc/application/controllers/ShowbuilderController.php:190 -#: airtime_mvc/application/controllers/LibraryController.php:161 -msgid "Preview" -msgstr "Podgląd" - -#: airtime_mvc/application/controllers/ShowbuilderController.php:192 -msgid "Select cursor" -msgstr "" - -#: airtime_mvc/application/controllers/ShowbuilderController.php:193 -msgid "Remove cursor" -msgstr "" - -#: airtime_mvc/application/controllers/ShowbuilderController.php:198 -#: airtime_mvc/application/controllers/LibraryController.php:189 -#: airtime_mvc/application/controllers/LibraryController.php:218 -#: airtime_mvc/application/controllers/LibraryController.php:237 -#: airtime_mvc/application/controllers/ScheduleController.php:315 -#: airtime_mvc/application/controllers/ScheduleController.php:322 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:26 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:23 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:18 -msgid "Delete" -msgstr "Usuń" - -#: airtime_mvc/application/controllers/ShowbuilderController.php:212 -msgid "show does not exist" -msgstr "program nie istnieje" - -#: airtime_mvc/application/controllers/ListenerstatController.php:56 -msgid "" -"Please make sure admin user/password is correct on System->Streams page." -msgstr "" - -#: airtime_mvc/application/controllers/ApiController.php:57 -#: airtime_mvc/application/controllers/ApiController.php:84 -msgid "You are not allowed to access this resource." -msgstr "" - -#: airtime_mvc/application/controllers/ApiController.php:286 -#: airtime_mvc/application/controllers/ApiController.php:325 -msgid "You are not allowed to access this resource. " -msgstr "" - -#: airtime_mvc/application/controllers/ApiController.php:507 -msgid "File does not exist in Airtime." -msgstr "Plik nie istnieje w Airtime." - -#: airtime_mvc/application/controllers/ApiController.php:520 -msgid "File does not exist in Airtime" -msgstr "Plik nie istnieje w Airtime" - -#: airtime_mvc/application/controllers/ApiController.php:532 -msgid "File doesn't exist in Airtime." -msgstr "Plik nie istnieje w Airtime." - -#: airtime_mvc/application/controllers/ApiController.php:578 -msgid "Bad request. no 'mode' parameter passed." -msgstr "" - -#: airtime_mvc/application/controllers/ApiController.php:588 -msgid "Bad request. 'mode' parameter is invalid" -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:95 -#: airtime_mvc/application/controllers/PlaylistController.php:127 -#, php-format -msgid "%s not found" -msgstr "nie znaleziono %s" - -#: airtime_mvc/application/controllers/LibraryController.php:104 -#: airtime_mvc/application/controllers/PlaylistController.php:148 -msgid "Something went wrong." -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:182 -#: airtime_mvc/application/controllers/LibraryController.php:206 -#: airtime_mvc/application/controllers/LibraryController.php:229 -msgid "Add to Playlist" -msgstr "Dodaj do listy odtwarzania" - -#: airtime_mvc/application/controllers/LibraryController.php:184 -msgid "Add to Smart Block" -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:194 -#: airtime_mvc/application/controllers/ScheduleController.php:897 -msgid "Download" -msgstr "Pobierz" - -#: airtime_mvc/application/controllers/LibraryController.php:198 -msgid "Duplicate Playlist" -msgstr "Duplikuj listę odtwarzania" - -#: airtime_mvc/application/controllers/LibraryController.php:213 -#: airtime_mvc/application/controllers/LibraryController.php:235 -msgid "Edit" -msgstr "Edytuj" - -#: airtime_mvc/application/controllers/LibraryController.php:248 -msgid "Soundcloud" -msgstr "Soundcloud" - -#: airtime_mvc/application/controllers/LibraryController.php:254 -#: airtime_mvc/application/controllers/ScheduleController.php:284 -msgid "View on Soundcloud" -msgstr "Zobacz na Soundcloud" - -#: airtime_mvc/application/controllers/LibraryController.php:258 -#: airtime_mvc/application/controllers/ScheduleController.php:287 -msgid "Re-upload to SoundCloud" -msgstr "Prześlij ponownie do SoundCloud" - -#: airtime_mvc/application/controllers/LibraryController.php:260 -#: airtime_mvc/application/controllers/ScheduleController.php:287 -msgid "Upload to SoundCloud" -msgstr "Prześlij do SoundCloud" - -#: airtime_mvc/application/controllers/LibraryController.php:267 -msgid "No action available" -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:287 -msgid "You don't have permission to delete selected items." -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:336 -msgid "Could not delete some scheduled files." -msgstr "" - -#: airtime_mvc/application/controllers/LibraryController.php:375 -#, php-format -msgid "Copy of %s" -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:45 -#, php-format -msgid "You are viewing an older version of %s" -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:120 -msgid "You cannot add tracks to dynamic blocks." -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:141 -#, php-format -msgid "You don't have permission to delete selected %s(s)." -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:154 -msgid "You can only add tracks to smart block." -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:172 -msgid "Untitled Playlist" -msgstr "Lista odtwarzania bez nazwy" - -#: airtime_mvc/application/controllers/PlaylistController.php:174 -msgid "Untitled Smart Block" -msgstr "" - -#: airtime_mvc/application/controllers/PlaylistController.php:437 -msgid "Unknown Playlist" -msgstr "" - -#: airtime_mvc/application/controllers/ScheduleController.php:252 -msgid "View Recorded File Metadata" -msgstr "" - -#: airtime_mvc/application/controllers/ScheduleController.php:264 -msgid "Remove All Content" -msgstr "Usuń całą zawartość" - -#: airtime_mvc/application/controllers/ScheduleController.php:271 -msgid "Show Content" -msgstr "Pokaż zawartość" - -#: airtime_mvc/application/controllers/ScheduleController.php:295 -#: airtime_mvc/application/controllers/ScheduleController.php:302 -msgid "Cancel Current Show" -msgstr "" - -#: airtime_mvc/application/controllers/ScheduleController.php:299 -#: airtime_mvc/application/controllers/ScheduleController.php:309 -msgid "Edit Show" -msgstr "Edytuj program" - -#: airtime_mvc/application/controllers/ScheduleController.php:317 -msgid "Delete This Instance" -msgstr "" - -#: airtime_mvc/application/controllers/ScheduleController.php:319 -msgid "Delete This Instance and All Following" -msgstr "" - -#: airtime_mvc/application/controllers/ScheduleController.php:445 -#, php-format -msgid "Rebroadcast of show %s from %s at %s" -msgstr "" - -#: airtime_mvc/application/controllers/WebstreamController.php:29 -#: airtime_mvc/application/controllers/WebstreamController.php:33 -msgid "Untitled Webstream" -msgstr "" - -#: airtime_mvc/application/controllers/WebstreamController.php:138 -msgid "Webstream saved." -msgstr "" - -#: airtime_mvc/application/controllers/WebstreamController.php:146 -msgid "Invalid form values." -msgstr "" - -#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 -msgid "Listener Count Over Time" -msgstr "" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 -msgid "Previous:" -msgstr "Poprzedni:" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:10 -msgid "Next:" -msgstr "Następny:" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:24 -msgid "Source Streams" -msgstr "Strumienie źródłowe" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:29 -msgid "Master Source" -msgstr "Źródło Master" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 -msgid "Show Source" -msgstr "Źródło Programu" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 -msgid "Scheduled Play" -msgstr "" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:54 -msgid "ON AIR" -msgstr "Na antenie" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:55 -msgid "Listen" -msgstr "Słuchaj" - -#: airtime_mvc/application/views/scripts/partialviews/header.phtml:59 -msgid "Station time" -msgstr "Czas stacji" - -#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 -msgid "Your trial expires in" -msgstr "" - -#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 -msgid "Purchase your copy of Airtime" -msgstr "" - -#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 -msgid "My Account" -msgstr "Moje konto" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:3 -msgid "Manage Users" -msgstr "Zarządzaj Użytkownikami" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:10 -msgid "New User" -msgstr "Nowy Użytkownik" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:17 -msgid "id" -msgstr "id" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:19 -msgid "First Name" -msgstr "Imię" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:20 -msgid "Last Name" -msgstr "Nazwisko" - -#: airtime_mvc/application/views/scripts/user/add-user.phtml:21 -msgid "User Type" -msgstr "Typ użytkownika" - -#: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 -#, php-format -msgid "" -"%sAirtime%s %s, the open radio software for scheduling and remote station " -"management. %s" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 -#, php-format -msgid "" -"%sSourcefabric%s o.p.s. Airtime is distributed under the %sGNU GPL v.3%s" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 -msgid "Share" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 -msgid "Select stream:" -msgstr "Wybierz strumień:" - -#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:50 -msgid "mute" -msgstr "wyciszyć" - -#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91 -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:53 -msgid "unmute" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 -msgid "Welcome to Airtime!" -msgstr "Witamy w Airtime!" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 -msgid "" -"Here's how you can get started using Airtime to automate your broadcasts: " -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 -msgid "" -"Begin by adding your files to the library using the 'Add Media' menu button. " -"You can drag and drop your files to this window too." -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 -msgid "" -"Create a show by going to 'Calendar' in the menu bar, and then clicking the " -"'+ Show' icon. This can be either a one-time or repeating show. Only admins " -"and program managers can add shows." -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 -msgid "" -"Add media to the show by going to your show in the Schedule calendar, left-" -"clicking on it and selecting 'Add / Remove Content'" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 -msgid "" -"Select your media from the left pane and drag them to your show in the right " -"pane." -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 -msgid "Then you're good to go!" -msgstr "" - -#: airtime_mvc/application/views/scripts/dashboard/help.phtml:13 -#, php-format -msgid "For more detailed help, read the %suser manual%s." -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/update.phtml:40 -msgid "Expand Static Block" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/update.phtml:45 -msgid "Expand Dynamic Block" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/update.phtml:98 -msgid "Empty smart block" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/update.phtml:100 -msgid "Empty playlist" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:66 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 -msgid "Fade out: " -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 -#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 -msgid "(ss.t)" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:63 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 -msgid "Fade in: " -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:10 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:10 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:4 -msgid "New" -msgstr "Nowy" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:13 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:13 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:7 -msgid "New Playlist" -msgstr "Nowa lista odtwarzania" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 -msgid "New Smart Block" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9 -msgid "New Webstream" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 -msgid "Shuffle playlist" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 -msgid "Save playlist" -msgstr "Zapisz listę odtwarzania" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:30 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:27 -msgid "Playlist crossfade" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:49 -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:51 -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:38 -msgid "View / edit description" -msgstr "Zobacz/edytuj opis" - -#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:81 -msgid "No open playlist" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:86 -msgid "No open smart block" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 -msgid "Cue In: " -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 -#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 -msgid "(hh:mm:ss.t)" -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 -msgid "Cue Out: " -msgstr "" - -#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 -msgid "Original Length:" -msgstr "Oryginalna długość:" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 -msgid "Add this show" -msgstr "Dodaj tn program" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 -msgid "Update show" -msgstr "Aktualizuj program" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 -msgid "What" -msgstr "Co" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14 -msgid "When" -msgstr "Kiedy" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:19 -msgid "Live Stream Input" -msgstr "Wejście strumienia na żywo" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:23 -msgid "Record & Rebroadcast" -msgstr "Nagrywaj i retransmituj" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:29 -msgid "Who" -msgstr "Kto" - -#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33 -msgid "Style" -msgstr "Styl" - -#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 -msgid "Email sent" -msgstr "Email wyslany" - -#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:6 -msgid "An email has been sent" -msgstr "" - -#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:7 -msgid "Back to login screen" -msgstr "Wróć do ekranu logowania" - -#: airtime_mvc/application/views/scripts/login/index.phtml:7 -msgid "" -"Welcome to the online Airtime demo! You can log in using the username " -"'admin' and the password 'admin'." -msgstr "" - -#: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 -#: airtime_mvc/application/views/scripts/form/login.phtml:34 -msgid "Reset password" -msgstr "Resetuj hasło" - -#: airtime_mvc/application/views/scripts/login/password-restore.phtml:7 -msgid "" -"Please enter your account e-mail address. You will receive a link to create " -"a new password via e-mail." -msgstr "" - -#: airtime_mvc/application/views/scripts/login/password-change.phtml:3 -msgid "New password" -msgstr "Nowe hasło" - -#: airtime_mvc/application/views/scripts/login/password-change.phtml:6 -msgid "Please enter and confirm your new password in the fields below." -msgstr "" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:4 -msgid "Service" -msgstr "" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:6 -msgid "Uptime" -msgstr "Czas pracy" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:7 -msgid "CPU" -msgstr "CPU" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:8 -msgid "Memory" -msgstr "Pamięć" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14 -msgid "Airtime Version" -msgstr "Wersja Airtime" - -#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30 -msgid "Disk Space" -msgstr "Miejsce na dysku twardym" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:22 -msgid "previous" -msgstr "poprzedni" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:25 -msgid "play" -msgstr "play" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:28 -msgid "pause" -msgstr "pause" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:31 -msgid "next" -msgstr "następny" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:34 -msgid "stop" -msgstr "stop" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:59 -msgid "max volume" -msgstr "maksymalna głośność" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:69 -msgid "Update Required" -msgstr "Wymagana aktualizacja" - -#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:70 -#, php-format -msgid "" -"To play the media you will need to either update your browser to a recent " -"version or update your %sFlash plugin%s." -msgstr "" - -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:51 -msgid "Stream URL:" -msgstr "URL strumienia:" - -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:56 -msgid "Default Length:" -msgstr "Domyślna długość:" - -#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:63 -msgid "No webstream" -msgstr "" - -#: airtime_mvc/application/views/scripts/error/error.phtml:6 -msgid "Zend Framework Default Application" -msgstr "" - -#: airtime_mvc/application/views/scripts/error/error.phtml:10 -msgid "Page not found!" -msgstr "Nie znaleziono strony!" - -#: airtime_mvc/application/views/scripts/error/error.phtml:11 -msgid "Looks like the page you were looking for doesn't exist!" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:4 -msgid "Stream " -msgstr "Strumień" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:33 -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:47 -#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:44 -#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:74 -#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:90 -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:47 -#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:44 -#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:59 -#: airtime_mvc/application/views/scripts/form/preferences_general.phtml:71 -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 -msgid "(Required)" -msgstr "(Wymagane)" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:76 -msgid "Additional Options" -msgstr "Opcje dodatkowe" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:136 -msgid "" -"The following info will be displayed to listeners in their media player:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:169 -msgid "(Your radio station website)" -msgstr "(Strona internetowa Twojej stacji)" - -#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:207 -msgid "Stream URL: " -msgstr "URL strumienia:" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:9 -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:27 -msgid "Choose folder" -msgstr "Wybierz folder" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:10 -msgid "Set" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 -msgid "Current Import Folder:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:41 -msgid "Add" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:43 -msgid "" -"Rescan watched directory (This is useful if it is network mount and may be " -"out of sync with Airtime)" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 -msgid "Remove watched directory" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:50 -msgid "You are not watching any media folders." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 -msgid "Choose Days:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:18 -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:18 -msgid "Remove" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:1 -msgid "Register Airtime" -msgstr "Zarejestruj Airtime" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:6 -#, php-format -msgid "" -"Help Airtime improve by letting us know how you are using it. This info will " -"be collected regularly in order to enhance your user experience.%sClick " -"'Yes, help Airtime' and we'll make sure the features you use are constantly " -"improving." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:25 -#, php-format -msgid "" -"Click the box below to advertise your station on %sSourcefabric.org%s. In " -"order to promote your station, 'Send support feedback' must be enabled. This " -"data will be collected in addition to the support feedback." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:65 -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:79 -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:61 -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:76 -msgid "(for verification purposes only, will not be published)" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:150 -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:151 -msgid "Note: Anything larger than 600x600 will be resized." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:164 -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:164 -msgid "Show me what I am sending " -msgstr "" - -#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:178 -msgid "Terms and Conditions" -msgstr "Zasady i warunki" - -#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:7 -msgid "Find Shows" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:12 -msgid "Filter By Show:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:2 -msgid "Input Stream Settings" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:109 -msgid "Master Source Connection URL:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:115 -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:159 -msgid "Override" -msgstr "Zastąp" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 -msgid "OK" -msgstr "OK" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 -msgid "RESET" -msgstr "RESETUJ" - -#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:153 -msgid "Show Source Connection URL:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 -#, php-format -msgid "%s's Settings" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 -msgid "Repeat Days:" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/daterange.phtml:6 -msgid "Filter History" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/preferences.phtml:5 -msgid "Email / Mail Server Settings" -msgstr "Ustawienia Email/Serwera pocztowego" - -#: airtime_mvc/application/views/scripts/form/preferences.phtml:10 -msgid "SoundCloud Settings" -msgstr "Ustawienia SoundCloud" - -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:5 -#, php-format -msgid "" -"Help Airtime improve by letting Sourcefabric know how you are using it. This " -"information will be collected regularly in order to enhance your user " -"experience.%sClick the 'Send support feedback' box and we'll make sure the " -"features you use are constantly improving." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:23 -#, php-format -msgid "Click the box below to promote your station on %sSourcefabric.org%s." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:41 -msgid "" -"(In order to promote your station, 'Send support feedback' must be enabled)." -msgstr "" - -#: airtime_mvc/application/views/scripts/form/support-setting.phtml:186 -msgid "Sourcefabric Privacy Policy" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:53 -msgid "Connection URL: " -msgstr "" - -#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:3 -msgid "Smart Block Options" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 -msgid " to " -msgstr "" - -#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:120 -#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:133 -msgid "files meet the criteria" -msgstr "" - -#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:127 -msgid "file meet the criteria" -msgstr "" - -#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:3 -#: airtime_mvc/application/views/scripts/library/library.phtml:2 -msgid "File import in progress..." -msgstr "Importowanie plików w toku..." - -#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:5 -#: airtime_mvc/application/views/scripts/library/library.phtml:5 -msgid "Advanced Search Options" -msgstr "Zaawansowane opcje wyszukiwania" - -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2 -msgid "Stream Settings" -msgstr "Ustawienia strumienia" - -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:12 -msgid "Global Settings" -msgstr "Ustawienia globalne" - -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 -msgid "dB" -msgstr "dB" - -#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 -msgid "Output Stream Settings" -msgstr "Ustawienia strumienia wyjściowego" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:7 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:30 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:32 -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:128 -msgid "Length:" -msgstr "Długość: " - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:8 -msgid "Sample Rate:" -msgstr "Częstotliwość próbkowania:" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 -msgid "Isrc Number:" -msgstr "Numer Isrc:" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 -msgid "File Path:" -msgstr "Ścieżka pliku:" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:39 -msgid "Web Stream" -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 -msgid "Dynamic Smart Block" -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:41 -msgid "Static Smart Block" -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:42 -msgid "Audio Track" -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:48 -msgid "Playlist Contents: " -msgstr "Zawartość listy odtwarzania:" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:50 -msgid "Static Smart Block Contents: " -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:89 -msgid "Dynamic Smart Block Criteria: " -msgstr "" - -#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:118 -msgid "Limit to " -msgstr "" - -#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 -msgid "Please selection an option" -msgstr "" - -#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 -msgid "No Records" -msgstr "" +# LANGUAGE (xx_XX) translation for Airtime. +# Copyright (C) 2012 Sourcefabric +# This file is distributed under the same license as the Airtime package. +# Sourcefabric , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Airtime 2.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-01-15 10:36-0500\n" +"PO-Revision-Date: 2013-02-03 20:34+0100\n" +"Last-Translator: \n" +"Language-Team: SEMATpl & PallottiFM + radioaktywne.pl \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: Polski\n" + +#: airtime_mvc/application/configs/navigation.php:12 +msgid "Now Playing" +msgstr "Aktualnie odtwarzane" + +#: airtime_mvc/application/configs/navigation.php:19 +msgid "Add Media" +msgstr "Dodaj media" + +#: airtime_mvc/application/configs/navigation.php:26 +msgid "Library" +msgstr "Biblioteka" + +#: airtime_mvc/application/configs/navigation.php:33 +msgid "Calendar" +msgstr "Kalendarz" + +#: airtime_mvc/application/configs/navigation.php:40 +msgid "System" +msgstr "System" + +#: airtime_mvc/application/configs/navigation.php:45 +#: airtime_mvc/application/views/scripts/preference/index.phtml:2 +msgid "Preferences" +msgstr "Preferencje" + +#: airtime_mvc/application/configs/navigation.php:50 +msgid "Users" +msgstr "Użytkownicy" + +#: airtime_mvc/application/configs/navigation.php:57 +msgid "Media Folders" +msgstr "Foldery mediów" + +#: airtime_mvc/application/configs/navigation.php:64 +msgid "Streams" +msgstr "Strumienie" + +#: airtime_mvc/application/configs/navigation.php:70 +#: airtime_mvc/application/controllers/PreferenceController.php:133 +msgid "Support Feedback" +msgstr "Informacja zwrotna" + +#: airtime_mvc/application/configs/navigation.php:76 +#: airtime_mvc/application/controllers/LocaleController.php:364 +#: airtime_mvc/application/controllers/LocaleController.php:365 +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:5 +msgid "Status" +msgstr "Status" + +#: airtime_mvc/application/configs/navigation.php:83 +msgid "Playout History" +msgstr "Historia odtwarzania" + +#: airtime_mvc/application/configs/navigation.php:90 +msgid "Listener Stats" +msgstr "Statystyki słuchaczy" + +#: airtime_mvc/application/configs/navigation.php:99 +#: airtime_mvc/application/views/scripts/error/error.phtml:13 +msgid "Help" +msgstr "Pomoc" + +#: airtime_mvc/application/configs/navigation.php:104 +msgid "Getting Started" +msgstr "Jak zacząć" + +#: airtime_mvc/application/configs/navigation.php:111 +msgid "User Manual" +msgstr "Instrukcja użytkowania" + +#: airtime_mvc/application/configs/navigation.php:116 +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:2 +msgid "About" +msgstr "Informacje" + +#: airtime_mvc/application/layouts/scripts/bare.phtml:5 +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 +#, fuzzy +msgid "Live stream" +msgstr "Transmisja na żywo" + +#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5 +#: airtime_mvc/application/controllers/LocaleController.php:34 +msgid "Audio Player" +msgstr "Odtwrzacz " + +#: airtime_mvc/application/layouts/scripts/layout.phtml:27 +msgid "Logout" +msgstr "Wyloguj" + +#: airtime_mvc/application/layouts/scripts/login.phtml:16 +#, php-format +msgid "" +"Airtime Copyright ©Sourcefabric o.p.s. All rights reserved.%sMaintained " +"and distributed under GNU GPL v.3 by %sSourcefabric o.p.s%s" +msgstr "" +"Airtime Copyright ©Sourcefabric o.p.s. Wszelkie prawa zastrzeżone." +"%sUżytkowany i udostępniany na podstawie licencji GNU GPL v.3 by " +"%sSourcefabric o.p.s%s" + +#: airtime_mvc/application/models/StoredFile.php:810 +#: airtime_mvc/application/controllers/LocaleController.php:284 +msgid "Track preview" +msgstr "Podgląd utworu" + +#: airtime_mvc/application/models/StoredFile.php:812 +msgid "Playlist preview" +msgstr "Podgląd listy odtwarzania" + +#: airtime_mvc/application/models/StoredFile.php:815 +msgid "Webstream preview" +msgstr "Podgląd webstreamu" + +#: airtime_mvc/application/models/StoredFile.php:817 +msgid "Smart Block" +msgstr "Smart Block" + +#: airtime_mvc/application/models/StoredFile.php:950 +msgid "Failed to create 'organize' directory." +msgstr "Katalog 'organize' nie może zostać utworzony." + +#: airtime_mvc/application/models/StoredFile.php:963 +#, php-format +msgid "" +"The file was not uploaded, there is %s MB of disk space left and the file " +"you are uploading has a size of %s MB." +msgstr "" +"Plik nie został przesłany, na dysku pozostało %s MB wolnego miejsca, a plik " +"który próbujesz przesłać ma %s MB." + +#: airtime_mvc/application/models/StoredFile.php:972 +msgid "" +"This file appears to be corrupted and will not be added to media library." +msgstr "" +"Ten plik jest prawdopodobnie uszkodzony i nie można go dodać do biblioteki " +"mediów." + +#: airtime_mvc/application/models/StoredFile.php:1008 +msgid "" +"The file was not uploaded, this error can occur if the computer hard drive " +"does not have enough disk space or the stor directory does not have correct " +"write permissions." +msgstr "" +"Plik nie został dodany, błąd ten może występować w przypadku, kiedy nie ma " +"wystarczającej ilości wolnego miejsca na dysku lub katalog przechowywania " +"nie posiada odpowiednich uprawnień do zapisu." + +#: airtime_mvc/application/models/Preference.php:538 +msgid "Select Country" +msgstr "Wybierz kraj" + +#: airtime_mvc/application/models/MusicDir.php:160 +#, php-format +msgid "%s is already watched." +msgstr "%s jest już obserwowny." + +#: airtime_mvc/application/models/MusicDir.php:164 +#, php-format +msgid "%s contains nested watched directory: %s" +msgstr "%s zawiera obserwowany katalog zagnieżdzony: %s" + +#: airtime_mvc/application/models/MusicDir.php:168 +#, php-format +msgid "%s is nested within existing watched directory: %s" +msgstr "" +"%s jest zagnieżdzony w istniejącym, aktualnie obserwowanym katalogu: %s" + +#: airtime_mvc/application/models/MusicDir.php:189 +#: airtime_mvc/application/models/MusicDir.php:363 +#, php-format +msgid "%s is not a valid directory." +msgstr "%s nie jest poprawnym katalogiem." + +#: airtime_mvc/application/models/MusicDir.php:231 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list" +msgstr "" +"%s jest już ustawiony jako katalog główny bądź znajduje się na liście " +"katalogów obserwowanych" + +#: airtime_mvc/application/models/MusicDir.php:381 +#, php-format +msgid "" +"%s is already set as the current storage dir or in the watched folders list." +msgstr "" +"%s jest już ustawiony jako katalog główny bądź znajduje się na liście " +"katalogów obserwowanych." + +#: airtime_mvc/application/models/MusicDir.php:424 +#, php-format +msgid "%s doesn't exist in the watched list." +msgstr "%s nie występuje na liście katalogów obserwowanych." + +#: airtime_mvc/application/models/Playlist.php:723 +#: airtime_mvc/application/models/Block.php:760 +msgid "Cue in and cue out are null." +msgstr "Cue-in i cue-out mają wartość zerową." + +#: airtime_mvc/application/models/Playlist.php:753 +#: airtime_mvc/application/models/Playlist.php:776 +#: airtime_mvc/application/models/Block.php:806 +#: airtime_mvc/application/models/Block.php:827 +msgid "Can't set cue in to be larger than cue out." +msgstr "Wartość cue-in nie może być większa niż cue-out." + +#: airtime_mvc/application/models/Playlist.php:760 +#: airtime_mvc/application/models/Playlist.php:801 +#: airtime_mvc/application/models/Block.php:795 +#: airtime_mvc/application/models/Block.php:851 +msgid "Can't set cue out to be greater than file length." +msgstr "Wartość cue-out nie może być większa niż długość pliku." + +#: airtime_mvc/application/models/Playlist.php:794 +#: airtime_mvc/application/models/Block.php:862 +msgid "Can't set cue out to be smaller than cue in." +msgstr "Wartość cue-out nie może być mniejsza od cue-in." + +#: airtime_mvc/application/models/Show.php:180 +msgid "Shows can have a max length of 24 hours." +msgstr "Programy mogą mieć maksymalną długość 24 godzin." + +#: airtime_mvc/application/models/Show.php:211 +#: airtime_mvc/application/forms/AddShowWhen.php:120 +msgid "End date/time cannot be in the past" +msgstr "Data lub czas zakończenia nie może być z przeszłości." + +#: airtime_mvc/application/models/Show.php:222 +msgid "" +"Cannot schedule overlapping shows.\n" +"Note: Resizing a repeating show affects all of its repeats." +msgstr "" +"Nie można planować programów nakładających się na siebie.\n" +"Uwaga: zmiana programu powoduje automatyczną zmianę wszystkich jego " +"powtórzeń." + +#: airtime_mvc/application/models/Webstream.php:157 +msgid "Length needs to be greater than 0 minutes" +msgstr "Długość musi być większa niż 0 minut" + +#: airtime_mvc/application/models/Webstream.php:162 +msgid "Length should be of form \"00h 00m\"" +msgstr "Długość powinna mieć postać \"00h 00m\"" + +#: airtime_mvc/application/models/Webstream.php:175 +msgid "URL should be of form \"http://domain\"" +msgstr "URL powinien mieć postać \"http://domain\"" + +#: airtime_mvc/application/models/Webstream.php:178 +msgid "URL should be 512 characters or less" +msgstr "URL powinien mieć 512 znaków lub mniej" + +#: airtime_mvc/application/models/Webstream.php:184 +msgid "No MIME type found for webstream." +msgstr "Nie znaleziono typu MIME dla webstreamu" + +#: airtime_mvc/application/models/Webstream.php:200 +msgid "Webstream name cannot be empty" +msgstr "Nazwa webstreamu nie może być pusta" + +#: airtime_mvc/application/models/Webstream.php:269 +msgid "Could not parse XSPF playlist" +msgstr "Nie można przeanalizować playlisty XSPF" + +#: airtime_mvc/application/models/Webstream.php:281 +msgid "Could not parse PLS playlist" +msgstr "Nie można przeanalizować playlisty PLS" + +#: airtime_mvc/application/models/Webstream.php:300 +msgid "Could not parse M3U playlist" +msgstr "Nie można przeanalizować playlisty M3U" + +#: airtime_mvc/application/models/Webstream.php:314 +msgid "Invalid webstream - This appears to be a file download." +msgstr "Nieprawidłowy webstream, prawdopodobnie trwa pobieranie pliku." + +#: airtime_mvc/application/models/Webstream.php:318 +#, php-format +msgid "Unrecognized stream type: %s" +msgstr "Nie rozpoznano typu strumienia: %s" + +#: airtime_mvc/application/models/ShowInstance.php:245 +msgid "Can't drag and drop repeating shows" +msgstr "Nie można użyć metody 'przeciągnij i upuść' dla powtórek programów." + +#: airtime_mvc/application/models/ShowInstance.php:253 +msgid "Can't move a past show" +msgstr "Nie można przenieść programu archiwalnego" + +#: airtime_mvc/application/models/ShowInstance.php:270 +msgid "Can't move show into past" +msgstr "Nie można przenieść programu w przeszłość" + +#: airtime_mvc/application/models/ShowInstance.php:276 +#: airtime_mvc/application/forms/AddShowWhen.php:254 +#: airtime_mvc/application/forms/AddShowWhen.php:268 +#: airtime_mvc/application/forms/AddShowWhen.php:291 +#: airtime_mvc/application/forms/AddShowWhen.php:297 +#: airtime_mvc/application/forms/AddShowWhen.php:302 +msgid "Cannot schedule overlapping shows" +msgstr "Nie można planować nakładających się programów" + +#: airtime_mvc/application/models/ShowInstance.php:290 +msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." +msgstr "" +"Nagrywany program nie może zostać przeniesiony na mniej niż 1h przed jego " +"powtórką." + +#: airtime_mvc/application/models/ShowInstance.php:303 +msgid "Show was deleted because recorded show does not exist!" +msgstr "Program został usunięty, ponieważ nagranie nie istnieje!" + +#: airtime_mvc/application/models/ShowInstance.php:310 +msgid "Must wait 1 hour to rebroadcast." +msgstr "Należy odczekać 1 godzinę przed ponownym odtworzeniem." + +#: airtime_mvc/application/models/ShowInstance.php:342 +msgid "can't resize a past show" +msgstr "nie można zmienić rozmiaru przeszłego programu" + +#: airtime_mvc/application/models/ShowInstance.php:364 +msgid "Should not overlap shows" +msgstr "Programy nie powinny nakładać się." + +#: airtime_mvc/application/models/Auth.php:33 +#, php-format +msgid "" +"Hi %s, \n" +"\n" +"Click this link to reset your password: " +msgstr "" +"Witaj %s, \n" +"\n" +"Kliknij w ten link aby zresetować swoje hasło:" + +#: airtime_mvc/application/models/Auth.php:36 +msgid "Airtime Password Reset" +msgstr "Resetowanie hasła Airtime" + +#: airtime_mvc/application/models/Scheduler.php:82 +msgid "The schedule you're viewing is out of date! (sched mismatch)" +msgstr "" +"Harmonogram, który przeglądasz jest nieaktualny! (błędne dopasowanie " +"harmonogramu)" + +#: airtime_mvc/application/models/Scheduler.php:87 +msgid "The schedule you're viewing is out of date! (instance mismatch)" +msgstr "" +"Harmonogram, który przeglądasz jest nieaktualny! (błędne dopasowanie " +"instancji)" + +#: airtime_mvc/application/models/Scheduler.php:95 +#: airtime_mvc/application/models/Scheduler.php:347 +msgid "The schedule you're viewing is out of date!" +msgstr "Harmonogram, który przeglądasz jest nieaktualny!" + +#: airtime_mvc/application/models/Scheduler.php:105 +#, php-format +msgid "You are not allowed to schedule show %s." +msgstr "Nie posiadasz uprawnień, aby zaplanować program %s." + +#: airtime_mvc/application/models/Scheduler.php:109 +msgid "You cannot add files to recording shows." +msgstr "Nie można dodawać plików do nagrywanych programów." + +#: airtime_mvc/application/models/Scheduler.php:115 +#, php-format +msgid "The show %s is over and cannot be scheduled." +msgstr "" +"Program %s przekracza dopuszczalną długość i nie może zostać zaplanowany." + +#: airtime_mvc/application/models/Scheduler.php:122 +#, php-format +msgid "The show %s has been previously updated!" +msgstr "Program %s został zaktualizowany wcześniej!" + +#: airtime_mvc/application/models/Scheduler.php:141 +#: airtime_mvc/application/models/Scheduler.php:223 +msgid "A selected File does not exist!" +msgstr "Wybrany plik nie istnieje!" + +#: airtime_mvc/application/models/ShowBuilder.php:198 +#, php-format +msgid "Rebroadcast of %s from %s" +msgstr "Retransmisja z %s do %s" + +#: airtime_mvc/application/models/Block.php:1209 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:41 +msgid "Select criteria" +msgstr "Wybierz kryteria" + +#: airtime_mvc/application/models/Block.php:1210 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:42 +#: airtime_mvc/application/controllers/LocaleController.php:70 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:8 +msgid "Album" +msgstr "Album" + +#: airtime_mvc/application/models/Block.php:1211 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:43 +msgid "Bit Rate (Kbps)" +msgstr "Bit Rate (Kbps)" + +#: airtime_mvc/application/models/Block.php:1212 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:44 +#: airtime_mvc/application/controllers/LocaleController.php:72 +msgid "BPM" +msgstr "BPM" + +#: airtime_mvc/application/models/Block.php:1213 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:45 +#: airtime_mvc/application/controllers/LocaleController.php:73 +#: airtime_mvc/application/controllers/LocaleController.php:157 +msgid "Composer" +msgstr "Kompozytor" + +#: airtime_mvc/application/models/Block.php:1214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:46 +#: airtime_mvc/application/controllers/LocaleController.php:74 +msgid "Conductor" +msgstr "Dyrygent/Pod batutą" + +#: airtime_mvc/application/models/Block.php:1215 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:47 +#: airtime_mvc/application/controllers/LocaleController.php:75 +#: airtime_mvc/application/controllers/LocaleController.php:158 +msgid "Copyright" +msgstr "Prawa autorskie" + +#: airtime_mvc/application/models/Block.php:1216 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:48 +#: airtime_mvc/application/controllers/LocaleController.php:69 +#: airtime_mvc/application/controllers/LocaleController.php:154 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:7 +msgid "Creator" +msgstr "Twórca" + +#: airtime_mvc/application/models/Block.php:1217 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:49 +#: airtime_mvc/application/controllers/LocaleController.php:76 +msgid "Encoded By" +msgstr "Kodowane przez" + +#: airtime_mvc/application/models/Block.php:1218 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:132 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:50 +#: airtime_mvc/application/controllers/LocaleController.php:77 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10 +msgid "Genre" +msgstr "Gatunek" + +#: airtime_mvc/application/models/Block.php:1219 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:51 +#: airtime_mvc/application/controllers/LocaleController.php:78 +msgid "ISRC" +msgstr "ISRC" + +#: airtime_mvc/application/models/Block.php:1220 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:52 +#: airtime_mvc/application/controllers/LocaleController.php:79 +msgid "Label" +msgstr "Wydawnictwo" + +#: airtime_mvc/application/models/Block.php:1221 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:53 +#: airtime_mvc/application/controllers/LocaleController.php:80 +msgid "Language" +msgstr "Język" + +#: airtime_mvc/application/models/Block.php:1222 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:54 +#: airtime_mvc/application/controllers/LocaleController.php:81 +msgid "Last Modified" +msgstr "Ostatnio zmodyfikowany" + +#: airtime_mvc/application/models/Block.php:1223 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:55 +#: airtime_mvc/application/controllers/LocaleController.php:82 +msgid "Last Played" +msgstr "Ostatnio odtwarzany" + +#: airtime_mvc/application/models/Block.php:1224 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:56 +#: airtime_mvc/application/controllers/LocaleController.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:156 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:9 +msgid "Length" +msgstr "Długość" + +#: airtime_mvc/application/models/Block.php:1225 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:57 +#: airtime_mvc/application/controllers/LocaleController.php:84 +msgid "Mime" +msgstr "Podobne do" + +#: airtime_mvc/application/models/Block.php:1226 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:58 +#: airtime_mvc/application/controllers/LocaleController.php:85 +msgid "Mood" +msgstr "Nastrój" + +#: airtime_mvc/application/models/Block.php:1227 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:59 +#: airtime_mvc/application/controllers/LocaleController.php:86 +msgid "Owner" +msgstr "Właściciel" + +#: airtime_mvc/application/models/Block.php:1228 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:60 +#: airtime_mvc/application/controllers/LocaleController.php:87 +msgid "Replay Gain" +msgstr "Normalizacja głośności (Replay Gain)" + +#: airtime_mvc/application/models/Block.php:1229 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:61 +msgid "Sample Rate (kHz)" +msgstr "Częstotliwość próbkowania (kHz)" + +#: airtime_mvc/application/models/Block.php:1230 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:62 +#: airtime_mvc/application/controllers/LocaleController.php:68 +#: airtime_mvc/application/controllers/LocaleController.php:153 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:6 +msgid "Title" +msgstr "Tytuł" + +#: airtime_mvc/application/models/Block.php:1231 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:63 +#: airtime_mvc/application/controllers/LocaleController.php:89 +msgid "Track Number" +msgstr "Numer utworu" + +#: airtime_mvc/application/models/Block.php:1232 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:64 +#: airtime_mvc/application/controllers/LocaleController.php:90 +msgid "Uploaded" +msgstr "Przesłano" + +#: airtime_mvc/application/models/Block.php:1233 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:65 +#: airtime_mvc/application/controllers/LocaleController.php:91 +msgid "Website" +msgstr "Strona internetowa" + +#: airtime_mvc/application/models/Block.php:1234 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:66 +#: airtime_mvc/application/controllers/LocaleController.php:92 +msgid "Year" +msgstr "Rok" + +#: airtime_mvc/application/common/DateHelper.php:335 +#, php-format +msgid "The year %s must be within the range of 1753 - 9999" +msgstr "Rok %s musi być w przedziale od 1753 do 9999" + +#: airtime_mvc/application/common/DateHelper.php:338 +#, php-format +msgid "%s-%s-%s is not a valid date" +msgstr "%s-%s-%s nie jest poprawną datą" + +#: airtime_mvc/application/common/DateHelper.php:362 +#, php-format +msgid "%s:%s:%s is not a valid time" +msgstr "%s:%s:%s nie jest prawidłowym czasem" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:17 +msgid "Enable System Emails (Password Reset)" +msgstr "Włącz Emaile Systemowe (Resetowanie hasła)" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:27 +msgid "Reset Password 'From' Email" +msgstr "Adres nadawcy Emaila" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:34 +msgid "Configure Mail Server" +msgstr "Skonfiguruj serwer pocztowy" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:43 +msgid "Requires Authentication" +msgstr "Wymagana autoryzacja" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:53 +msgid "Mail Server" +msgstr "Serwer Email" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:67 +msgid "Email Address" +msgstr "Adres Email" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:82 +#: airtime_mvc/application/forms/PasswordChange.php:17 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:120 +msgid "Password" +msgstr "Hasło" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:109 +msgid "Port" +msgstr "Port" + +#: airtime_mvc/application/forms/RegisterAirtime.php:30 +#: airtime_mvc/application/forms/SupportSettings.php:21 +#: airtime_mvc/application/forms/GeneralPreferences.php:22 +msgid "Station Name" +msgstr "Nazwa stacji" + +#: airtime_mvc/application/forms/RegisterAirtime.php:39 +#: airtime_mvc/application/forms/SupportSettings.php:34 +msgid "Phone:" +msgstr "Telefon:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:51 +#: airtime_mvc/application/forms/AddUser.php:60 +#: airtime_mvc/application/forms/SupportSettings.php:46 +#: airtime_mvc/application/forms/EditUser.php:75 +msgid "Email:" +msgstr "Email:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:62 +#: airtime_mvc/application/forms/SupportSettings.php:57 +msgid "Station Web Site:" +msgstr "Strona internetowa stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:73 +#: airtime_mvc/application/forms/SupportSettings.php:68 +msgid "Country:" +msgstr "Kraj:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:84 +#: airtime_mvc/application/forms/SupportSettings.php:79 +msgid "City:" +msgstr "Miasto:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:96 +#: airtime_mvc/application/forms/SupportSettings.php:91 +msgid "Station Description:" +msgstr "Opis stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:106 +#: airtime_mvc/application/forms/SupportSettings.php:101 +msgid "Station Logo:" +msgstr "Logo stacji:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:116 +#: airtime_mvc/application/forms/SupportSettings.php:112 +#: airtime_mvc/application/controllers/LocaleController.php:333 +msgid "Send support feedback" +msgstr "Wyślij informację zwrotną" + +#: airtime_mvc/application/forms/RegisterAirtime.php:126 +#: airtime_mvc/application/forms/SupportSettings.php:122 +msgid "Promote my station on Sourcefabric.org" +msgstr "Promuj moją stację na Sourcefabric.org" + +#: airtime_mvc/application/forms/RegisterAirtime.php:149 +#: airtime_mvc/application/forms/SupportSettings.php:148 +#, php-format +msgid "By checking this box, I agree to Sourcefabric's %sprivacy policy%s." +msgstr "Zanaczając to pole, akceptujesz %spolitykę prywatności%s Sourcefabric." + +#: airtime_mvc/application/forms/RegisterAirtime.php:166 +#: airtime_mvc/application/forms/SupportSettings.php:171 +msgid "You have to agree to privacy policy." +msgstr "Wymagana jest akceptacja polityki prywatności." + +#: airtime_mvc/application/forms/PasswordChange.php:28 +msgid "Confirm new password" +msgstr "Potwierdź nowe hasło" + +#: airtime_mvc/application/forms/PasswordChange.php:36 +msgid "Password confirmation does not match your password." +msgstr "Hasła muszą się zgadzać." + +#: airtime_mvc/application/forms/PasswordChange.php:43 +msgid "Get new password" +msgstr "Uzyskaj nowe hasło" + +#: airtime_mvc/application/forms/DateRange.php:16 +#: airtime_mvc/application/forms/ShowBuilder.php:18 +msgid "Date Start:" +msgstr "Data rozpoczęcia:" + +#: airtime_mvc/application/forms/DateRange.php:35 +#: airtime_mvc/application/forms/DateRange.php:63 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:99 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:118 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:123 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:144 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:174 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:186 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:198 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:210 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26 +#: airtime_mvc/application/forms/ShowBuilder.php:37 +#: airtime_mvc/application/forms/ShowBuilder.php:65 +msgid "Invalid character entered" +msgstr "Wprowadzony znak jest nieprawidłowy" + +#: airtime_mvc/application/forms/DateRange.php:44 +#: airtime_mvc/application/forms/AddShowRepeats.php:40 +#: airtime_mvc/application/forms/ShowBuilder.php:46 +msgid "Date End:" +msgstr "Data zakończenia:" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 +#: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 +msgid "Value is required and can't be empty" +msgstr "Pole jest wymagane i nie może być puste" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 +msgid "" +"'%value%' is no valid email address in the basic format local-part@hostname" +msgstr "" +"'%value%' nie jest poprawnym adresem email w podstawowym formacie local-" +"part@hostname" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:33 +msgid "'%value%' does not fit the date format '%format%'" +msgstr "'%value%' nie pasuje do formatu daty '%format%'" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:59 +msgid "'%value%' is less than %min% characters long" +msgstr "'%value%' zawiera mniej niż %min% znaków" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:64 +msgid "'%value%' is more than %max% characters long" +msgstr "'%value%' zawiera więcej niż %max% znaków" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:76 +msgid "'%value%' is not between '%min%' and '%max%', inclusively" +msgstr "'%value%' nie zawiera się w przedziale od '%min%' do '%max%'" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 +msgid "Passwords do not match" +msgstr "Hasła muszą się zgadzać" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 +msgid "days" +msgstr "dni" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:63 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:58 +msgid "Day must be specified" +msgstr "Należy określić dzień" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:68 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:63 +msgid "Time must be specified" +msgstr "Należy określić czas" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:95 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:86 +msgid "Must wait at least 1 hour to rebroadcast" +msgstr "Należy odczekać przynajmniej 1 godzinę przed ponownym odtworzeniem" + +#: airtime_mvc/application/forms/AddShowRR.php:10 +msgid "Record from Line In?" +msgstr "Nagrywać z wejścia liniowego?" + +#: airtime_mvc/application/forms/AddShowRR.php:16 +msgid "Rebroadcast?" +msgstr "Odtwarzać ponownie?" + +#: airtime_mvc/application/forms/AddShowStyle.php:10 +msgid "Background Colour:" +msgstr "Kolor tła:" + +#: airtime_mvc/application/forms/AddShowStyle.php:29 +msgid "Text Colour:" +msgstr "Kolor tekstu:" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:19 +msgid "Auto Switch Off" +msgstr "Automatyczne wyłączanie" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:26 +msgid "Auto Switch On" +msgstr "Automatyczne włączanie" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:33 +msgid "Switch Transition Fade (s)" +msgstr "Zmień długość przenikania się utworów" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:36 +msgid "enter a time in seconds 00{.000000}" +msgstr "wprowadź czas w sekundach 00{.000000}" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:45 +msgid "Master Username" +msgstr "Nazwa użytkownika nadrzędnego" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:62 +msgid "Master Password" +msgstr "Hasło użytkownika nadrzędnego" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:70 +msgid "Master Source Connection URL" +msgstr "Adres URL do źródła nadrzędnego" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:78 +msgid "Show Source Connection URL" +msgstr "Adres URL dostępu do źródła programu" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:87 +msgid "Master Source Port" +msgstr "Nadrzędny port źródłowy" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:90 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:109 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:112 +msgid "Only numbers are allowed." +msgstr "Możliwe są tylko cyfry." + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:96 +msgid "Master Source Mount Point" +msgstr "Nadrzędny punkt montowania źródła" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:106 +msgid "Show Source Port" +msgstr "Port źródłowy programu" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:115 +msgid "Show Source Mount Point" +msgstr "Źródłowy punkt montowania programu" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:153 +msgid "You cannot use same port as Master DJ port." +msgstr "Nie można użyć tego samego portu co źródło nadrzędne" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:164 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:182 +#, php-format +msgid "Port %s is not available" +msgstr "Port %s nie jest dostępny" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:14 +msgid "Import Folder:" +msgstr "Katalog importu:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:25 +msgid "Watched Folders:" +msgstr "Katalogi obserwowane:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:40 +msgid "Not a valid Directory" +msgstr "Nieprawidłowy katalog" + +#: airtime_mvc/application/forms/AddUser.php:23 +#: airtime_mvc/application/forms/Login.php:19 +#: airtime_mvc/application/forms/EditUser.php:30 +msgid "Username:" +msgstr "Nazwa użytkownika:" + +#: airtime_mvc/application/forms/AddUser.php:32 +#: airtime_mvc/application/forms/Login.php:34 +#: airtime_mvc/application/forms/EditUser.php:41 +msgid "Password:" +msgstr "Hasło:" + +#: airtime_mvc/application/forms/AddUser.php:40 +#: airtime_mvc/application/forms/EditUser.php:50 +msgid "Verify Password:" +msgstr "Potwierdź hasło:" + +#: airtime_mvc/application/forms/AddUser.php:48 +#: airtime_mvc/application/forms/EditUser.php:59 +msgid "Firstname:" +msgstr "Imię:" + +#: airtime_mvc/application/forms/AddUser.php:54 +#: airtime_mvc/application/forms/EditUser.php:67 +msgid "Lastname:" +msgstr "Nazwisko:" + +#: airtime_mvc/application/forms/AddUser.php:69 +#: airtime_mvc/application/forms/EditUser.php:86 +msgid "Mobile Phone:" +msgstr "Telefon:" + +#: airtime_mvc/application/forms/AddUser.php:75 +#: airtime_mvc/application/forms/EditUser.php:94 +msgid "Skype:" +msgstr "Skype:" + +#: airtime_mvc/application/forms/AddUser.php:81 +#: airtime_mvc/application/forms/EditUser.php:102 +msgid "Jabber:" +msgstr "Jabber:" + +#: airtime_mvc/application/forms/AddUser.php:88 +msgid "User Type:" +msgstr "Typ użytkownika:" + +#: airtime_mvc/application/forms/AddUser.php:92 +#: airtime_mvc/application/controllers/LocaleController.php:316 +msgid "Guest" +msgstr "Gość" + +#: airtime_mvc/application/forms/AddUser.php:93 +#: airtime_mvc/application/controllers/LocaleController.php:314 +msgid "DJ" +msgstr "Prowadzący" + +#: airtime_mvc/application/forms/AddUser.php:94 +#: airtime_mvc/application/controllers/LocaleController.php:315 +msgid "Program Manager" +msgstr "Menedżer programowy" + +#: airtime_mvc/application/forms/AddUser.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:313 +msgid "Admin" +msgstr "Administrator" + +#: airtime_mvc/application/forms/AddUser.php:103 +#: airtime_mvc/application/forms/SupportSettings.php:158 +#: airtime_mvc/application/forms/EditAudioMD.php:134 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:20 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:15 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:6 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:116 +#: airtime_mvc/application/views/scripts/preference/index.phtml:6 +#: airtime_mvc/application/views/scripts/preference/index.phtml:14 +msgid "Save" +msgstr "Zapisz" + +#: airtime_mvc/application/forms/AddUser.php:113 +#: airtime_mvc/application/forms/EditUser.php:132 +msgid "Login name is not unique." +msgstr "Nazwa użytkownika musi być unikalna." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:48 +msgid "Enabled:" +msgstr "Włączony:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:57 +msgid "Stream Type:" +msgstr "Typ strumienia:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:67 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9 +msgid "Bit Rate:" +msgstr "Bit Rate:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:77 +msgid "Service Type:" +msgstr "Typ usługi:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:87 +msgid "Channels:" +msgstr "Kanały:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "1 - Mono" +msgstr "1 - Mono" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "2 - Stereo" +msgstr "2 - Stereo" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:97 +msgid "Server" +msgstr "Serwer" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:141 +msgid "URL" +msgstr "adres URL" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:153 +msgid "Name" +msgstr "Nazwa" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:162 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:51 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:53 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:40 +msgid "Description" +msgstr "Opis" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:171 +msgid "Mount Point" +msgstr "Punkt montowania" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:183 +#: airtime_mvc/application/forms/PasswordRestore.php:25 +#: airtime_mvc/application/views/scripts/user/add-user.phtml:18 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:195 +msgid "Admin User" +msgstr "Login Administratora" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:207 +msgid "Admin Password" +msgstr "Hasło Administratora" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:218 +#: airtime_mvc/application/controllers/LocaleController.php:173 +msgid "Getting information from the server..." +msgstr "Pobieranie informacji z serwera..." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:232 +msgid "Server cannot be empty." +msgstr "Serwer nie może być pusty." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:237 +msgid "Port cannot be empty." +msgstr "Port nie może być pusty." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:243 +msgid "Mount cannot be empty with Icecast server." +msgstr "Punkt montowania nie może być pusty dla serwera Icecast." + +#: airtime_mvc/application/forms/AddShowRepeats.php:11 +msgid "Repeat Type:" +msgstr "Typ powtarzania:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:14 +msgid "weekly" +msgstr "tygodniowo" + +#: airtime_mvc/application/forms/AddShowRepeats.php:15 +msgid "bi-weekly" +msgstr "dwutygodniowo" + +#: airtime_mvc/application/forms/AddShowRepeats.php:16 +msgid "monthly" +msgstr "miesięcznie" + +#: airtime_mvc/application/forms/AddShowRepeats.php:25 +msgid "Select Days:" +msgstr "Wybierz dni:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:28 +#: airtime_mvc/application/controllers/LocaleController.php:253 +msgid "Sun" +msgstr "Nie" + +#: airtime_mvc/application/forms/AddShowRepeats.php:29 +#: airtime_mvc/application/controllers/LocaleController.php:254 +msgid "Mon" +msgstr "Pon" + +#: airtime_mvc/application/forms/AddShowRepeats.php:30 +#: airtime_mvc/application/controllers/LocaleController.php:255 +msgid "Tue" +msgstr "Wt" + +#: airtime_mvc/application/forms/AddShowRepeats.php:31 +#: airtime_mvc/application/controllers/LocaleController.php:256 +msgid "Wed" +msgstr "Śr" + +#: airtime_mvc/application/forms/AddShowRepeats.php:32 +#: airtime_mvc/application/controllers/LocaleController.php:257 +msgid "Thu" +msgstr "Czw" + +#: airtime_mvc/application/forms/AddShowRepeats.php:33 +#: airtime_mvc/application/controllers/LocaleController.php:258 +msgid "Fri" +msgstr "Pt" + +#: airtime_mvc/application/forms/AddShowRepeats.php:34 +#: airtime_mvc/application/controllers/LocaleController.php:259 +msgid "Sat" +msgstr "Sob" + +#: airtime_mvc/application/forms/AddShowRepeats.php:53 +msgid "No End?" +msgstr "Bez czasu końcowego?" + +#: airtime_mvc/application/forms/AddShowRepeats.php:79 +msgid "End date must be after start date" +msgstr "Data końcowa musi występować po dacie początkowej" + +#: airtime_mvc/application/forms/AddShowWhat.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:127 +msgid "Name:" +msgstr "Nazwa:" + +#: airtime_mvc/application/forms/AddShowWhat.php:30 +msgid "Untitled Show" +msgstr "Program bez nazwy" + +#: airtime_mvc/application/forms/AddShowWhat.php:36 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:131 +msgid "URL:" +msgstr "Adres URL" + +#: airtime_mvc/application/forms/AddShowWhat.php:45 +#: airtime_mvc/application/forms/EditAudioMD.php:47 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11 +msgid "Genre:" +msgstr "Rodzaj:" + +#: airtime_mvc/application/forms/AddShowWhat.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:130 +msgid "Description:" +msgstr "Opis:" + +#: airtime_mvc/application/forms/AddShowWho.php:10 +msgid "Search Users:" +msgstr "Szukaj Użytkowników:" + +#: airtime_mvc/application/forms/AddShowWho.php:24 +msgid "DJs:" +msgstr "Prowadzący:" + +#: airtime_mvc/application/forms/StreamSetting.php:22 +msgid "Hardware Audio Output" +msgstr "Sprzętowe wyjście audio" + +#: airtime_mvc/application/forms/StreamSetting.php:33 +msgid "Output Type" +msgstr "Typ wyjścia" + +#: airtime_mvc/application/forms/StreamSetting.php:44 +msgid "Icecast Vorbis Metadata" +msgstr "Metadane Icecast Vorbis" + +#: airtime_mvc/application/forms/StreamSetting.php:54 +msgid "Stream Label:" +msgstr "Nazwa strumienia:" + +#: airtime_mvc/application/forms/StreamSetting.php:55 +msgid "Artist - Title" +msgstr "Artysta - Tytuł" + +#: airtime_mvc/application/forms/StreamSetting.php:56 +msgid "Show - Artist - Title" +msgstr "Program - Artysta -Tytuł" + +#: airtime_mvc/application/forms/StreamSetting.php:57 +msgid "Station name - Show name" +msgstr "Nazwa stacji - Nazwa programu" + +#: airtime_mvc/application/forms/StreamSetting.php:63 +msgid "Off Air Metadata" +msgstr "Metadane Off Air" + +#: airtime_mvc/application/forms/StreamSetting.php:69 +msgid "Enable Replay Gain" +msgstr "Włącz normalizację głośności (Replay Gain)" + +#: airtime_mvc/application/forms/StreamSetting.php:75 +msgid "Replay Gain Modifier" +msgstr "Modyfikator normalizacji głośności" + +#: airtime_mvc/application/forms/PasswordRestore.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: airtime_mvc/application/forms/PasswordRestore.php:36 +msgid "Restore password" +msgstr "Przywracanie hasła" + +#: airtime_mvc/application/forms/PasswordRestore.php:46 +#: airtime_mvc/application/forms/EditAudioMD.php:144 +#: airtime_mvc/application/controllers/LocaleController.php:310 +msgid "Cancel" +msgstr "Anuluj" + +#: airtime_mvc/application/forms/AddShowWhen.php:16 +msgid "'%value%' does not fit the time format 'HH:mm'" +msgstr "%value% nie odpowiada formatowi 'HH:mm'" + +#: airtime_mvc/application/forms/AddShowWhen.php:22 +msgid "Date/Time Start:" +msgstr "Data/Czas rozpoczęcia:" + +#: airtime_mvc/application/forms/AddShowWhen.php:49 +msgid "Date/Time End:" +msgstr "Data/Czas zakończenia:" + +#: airtime_mvc/application/forms/AddShowWhen.php:74 +msgid "Duration:" +msgstr "Czas trwania:" + +#: airtime_mvc/application/forms/AddShowWhen.php:83 +msgid "Repeats?" +msgstr "Powtarzanie?" + +#: airtime_mvc/application/forms/AddShowWhen.php:103 +msgid "Cannot create show in the past" +msgstr "Nie można utworzyć programu w przeszłości" + +#: airtime_mvc/application/forms/AddShowWhen.php:111 +msgid "Cannot modify start date/time of the show that is already started" +msgstr "Nie mozna zmienić daty/czasu programu, który się już rozpoczął" + +#: airtime_mvc/application/forms/AddShowWhen.php:130 +msgid "Cannot have duration 00h 00m" +msgstr "Czas trwania nie może wynosić 00h 00m" + +#: airtime_mvc/application/forms/AddShowWhen.php:134 +msgid "Cannot have duration greater than 24h" +msgstr "Czas trwania nie może być dłuższy niż 24h" + +#: airtime_mvc/application/forms/AddShowWhen.php:138 +msgid "Cannot have duration < 0m" +msgstr "Czas trwania nie może być mniejszy niż 0m" + +#: airtime_mvc/application/forms/EditAudioMD.php:19 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:3 +msgid "Title:" +msgstr "Tytuł:" + +#: airtime_mvc/application/forms/EditAudioMD.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:4 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:28 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:129 +msgid "Creator:" +msgstr "Autor:" + +#: airtime_mvc/application/forms/EditAudioMD.php:33 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:5 +msgid "Album:" +msgstr "Album:" + +#: airtime_mvc/application/forms/EditAudioMD.php:40 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:6 +msgid "Track:" +msgstr "Utwór:" + +#: airtime_mvc/application/forms/EditAudioMD.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12 +msgid "Year:" +msgstr "Rok:" + +#: airtime_mvc/application/forms/EditAudioMD.php:66 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13 +msgid "Label:" +msgstr "Wydawnictwo:" + +#: airtime_mvc/application/forms/EditAudioMD.php:73 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15 +msgid "Composer:" +msgstr "Kompozytor:" + +#: airtime_mvc/application/forms/EditAudioMD.php:80 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16 +msgid "Conductor:" +msgstr "Dyrygent/Pod batutą:" + +#: airtime_mvc/application/forms/EditAudioMD.php:87 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10 +msgid "Mood:" +msgstr "Nastrój:" + +#: airtime_mvc/application/forms/EditAudioMD.php:95 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:14 +msgid "BPM:" +msgstr "BPM:" + +#: airtime_mvc/application/forms/EditAudioMD.php:104 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17 +msgid "Copyright:" +msgstr "Prawa autorskie:" + +#: airtime_mvc/application/forms/EditAudioMD.php:111 +msgid "ISRC Number:" +msgstr "Numer ISRC:" + +#: airtime_mvc/application/forms/EditAudioMD.php:118 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19 +msgid "Website:" +msgstr "Strona internetowa:" + +#: airtime_mvc/application/forms/EditAudioMD.php:125 +#: airtime_mvc/application/forms/Login.php:48 +#: airtime_mvc/application/forms/EditUser.php:111 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20 +msgid "Language:" +msgstr "Język:" + +#: airtime_mvc/application/forms/Login.php:65 +#: airtime_mvc/application/views/scripts/login/index.phtml:3 +msgid "Login" +msgstr "Zaloguj" + +#: airtime_mvc/application/forms/Login.php:83 +msgid "Type the characters you see in the picture below." +msgstr "Wpisz znaki, które widzisz na obrazku poniżej." + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:78 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:94 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:329 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:367 +#: airtime_mvc/application/controllers/LocaleController.php:142 +msgid "Select modifier" +msgstr "Wybierz modyfikator" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:79 +#: airtime_mvc/application/controllers/LocaleController.php:143 +msgid "contains" +msgstr "zawiera" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:80 +#: airtime_mvc/application/controllers/LocaleController.php:144 +msgid "does not contain" +msgstr "nie zawiera" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:81 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:145 +msgid "is" +msgstr "to" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:82 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:96 +#: airtime_mvc/application/controllers/LocaleController.php:146 +msgid "is not" +msgstr "to nie" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:147 +msgid "starts with" +msgstr "zaczyna się od" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:84 +#: airtime_mvc/application/controllers/LocaleController.php:148 +msgid "ends with" +msgstr "kończy się" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:97 +#: airtime_mvc/application/controllers/LocaleController.php:149 +msgid "is greater than" +msgstr "jest większa niż" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:98 +#: airtime_mvc/application/controllers/LocaleController.php:150 +msgid "is less than" +msgstr "jest mniejsza niż" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:99 +#: airtime_mvc/application/controllers/LocaleController.php:151 +msgid "is in the range" +msgstr "mieści się w zakresie" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:109 +msgid "hours" +msgstr "godzin(y)" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:110 +msgid "minutes" +msgstr "minut(y)" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:111 +msgid "items" +msgstr "elementy" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:133 +msgid "Set smart block type:" +msgstr "Ustaw typ smart blocku:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:136 +#: airtime_mvc/application/controllers/LibraryController.php:501 +msgid "Static" +msgstr "Statyczny" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:137 +#: airtime_mvc/application/controllers/LibraryController.php:504 +msgid "Dynamic" +msgstr "Dynamiczny" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:248 +msgid "Allow Repeat Tracks:" +msgstr "Zezwól na powtarzanie utworów:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:265 +msgid "Limit to" +msgstr "Ogranicz do" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:287 +msgid "Generate playlist content and save criteria" +msgstr "Tworzenie zawartości listy odtwarzania i zapisz kryteria" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:289 +msgid "Generate" +msgstr "Utwórz" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:295 +msgid "Shuffle playlist content" +msgstr "Losowa kolejność odtwarzania" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:297 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle" +msgstr "Przemieszaj" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:461 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:473 +msgid "Limit cannot be empty or smaller than 0" +msgstr "Limit nie może być pusty oraz mniejszy od 0" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:466 +msgid "Limit cannot be more than 24 hrs" +msgstr "Limit nie może być większy niż 24 godziny" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:476 +msgid "The value should be an integer" +msgstr "Wartość powinna być liczbą całkowitą" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:479 +msgid "500 is the max item limit value you can set" +msgstr "Maksymalna liczba elementów do ustawienia to 500" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:490 +msgid "You must select Criteria and Modifier" +msgstr "Należy wybrać kryteria i modyfikator" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:497 +msgid "'Length' should be in '00:00:00' format" +msgstr "Długość powinna być wprowadzona w formacie '00:00:00'" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:502 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:515 +msgid "" +"The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00)" +msgstr "" +"Wartość powinna byc zapisana w formacie timestamp (np. 0000-00-00 lub " +"00-00-00 00:00:00)" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:529 +msgid "The value has to be numeric" +msgstr "Wartość musi być liczbą" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:534 +msgid "The value should be less then 2147483648" +msgstr "Wartość powinna być mniejsza niż 2147483648" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:539 +#, php-format +msgid "The value should be less than %s characters" +msgstr "Wartość powinna posiadać mniej niż %s znaków" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:546 +msgid "Value cannot be empty" +msgstr "Wartość nie może być pusta" + +#: airtime_mvc/application/forms/ShowBuilder.php:72 +msgid "Show:" +msgstr "Program:" + +#: airtime_mvc/application/forms/ShowBuilder.php:80 +msgid "All My Shows:" +msgstr "Wszystkie moje programy:" + +#: airtime_mvc/application/forms/EditUser.php:118 +msgid "Timezone:" +msgstr "Strefa czasowa:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:10 +msgid "Use Airtime Authentication:" +msgstr "Zastosuj uwierzytelnienie Airtime:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:16 +msgid "Use Custom Authentication:" +msgstr "Zastosuj własne uwierzytelnienie:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:26 +msgid "Custom Username" +msgstr "Nazwa użytkownika" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:39 +msgid "Custom Password" +msgstr "Hasło" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:63 +msgid "Username field cannot be empty." +msgstr "Pole nazwy użytkownika nie może być puste." + +#: airtime_mvc/application/forms/AddShowLiveStream.php:68 +msgid "Password field cannot be empty." +msgstr "Pole hasła nie może być puste." + +#: airtime_mvc/application/forms/GeneralPreferences.php:34 +msgid "Default Fade (s):" +msgstr "Domyślne zanikanie (Fade) (s):" + +#: airtime_mvc/application/forms/GeneralPreferences.php:39 +msgid "enter a time in seconds 0{.0}" +msgstr "wprowadź czas w sekundach 0{.0}" + +#: airtime_mvc/application/forms/GeneralPreferences.php:48 +#, php-format +msgid "" +"Allow Remote Websites To Access \"Schedule\" Info?%s (Enable this to make " +"front-end widgets work.)" +msgstr "" +"Umożliwienie zdalnego dostępu z innych stron \"Plan\" Info?%s (Włącz, aby " +"zewnętrzne widgety działały.)" + +#: airtime_mvc/application/forms/GeneralPreferences.php:49 +msgid "Disabled" +msgstr "Wyłączone" + +#: airtime_mvc/application/forms/GeneralPreferences.php:50 +msgid "Enabled" +msgstr "Włączone" + +#: airtime_mvc/application/forms/GeneralPreferences.php:56 +msgid "Default Interface Language" +msgstr "Domyślny język" + +#: airtime_mvc/application/forms/GeneralPreferences.php:64 +msgid "Default Interface Timezone" +msgstr "Domyślna strefa czasowa" + +#: airtime_mvc/application/forms/GeneralPreferences.php:72 +msgid "Week Starts On" +msgstr "Tydzień zaczynaj od" + +#: airtime_mvc/application/forms/GeneralPreferences.php:82 +#: airtime_mvc/application/controllers/LocaleController.php:246 +msgid "Sunday" +msgstr "Niedziela" + +#: airtime_mvc/application/forms/GeneralPreferences.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:247 +msgid "Monday" +msgstr "Poniedziałek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:84 +#: airtime_mvc/application/controllers/LocaleController.php:248 +msgid "Tuesday" +msgstr "Wtorek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:85 +#: airtime_mvc/application/controllers/LocaleController.php:249 +msgid "Wednesday" +msgstr "Środa" + +#: airtime_mvc/application/forms/GeneralPreferences.php:86 +#: airtime_mvc/application/controllers/LocaleController.php:250 +msgid "Thursday" +msgstr "Czwartek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:87 +#: airtime_mvc/application/controllers/LocaleController.php:251 +msgid "Friday" +msgstr "Piątek" + +#: airtime_mvc/application/forms/GeneralPreferences.php:88 +#: airtime_mvc/application/controllers/LocaleController.php:252 +msgid "Saturday" +msgstr "Sobota" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:16 +msgid "Automatically Upload Recorded Shows" +msgstr "Automatycznie dodawaj nagrane programy" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:26 +msgid "Enable SoundCloud Upload" +msgstr "Włącz wysyłanie do SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:36 +msgid "Automatically Mark Files \"Downloadable\" on SoundCloud" +msgstr "Automatycznie oznaczaj pliki jako \"Do pobrania\" na SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:47 +msgid "SoundCloud Email" +msgstr "Email SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:67 +msgid "SoundCloud Password" +msgstr "Hasło SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:87 +msgid "SoundCloud Tags: (separate tags with spaces)" +msgstr "Tagi SoundCloud: (oddzielaj tagi spacją)" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:99 +msgid "Default Genre:" +msgstr "Domyślny gatunek:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:109 +msgid "Default Track Type:" +msgstr "Domyślny typ utworu:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:113 +msgid "Original" +msgstr "Oryginalny" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:114 +msgid "Remix" +msgstr "Remix" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:115 +msgid "Live" +msgstr "Na żywo" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:116 +msgid "Recording" +msgstr "Nagranie" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:117 +msgid "Spoken" +msgstr "Mówiony" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:118 +msgid "Podcast" +msgstr "Podcast" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:119 +msgid "Demo" +msgstr "Demo" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:120 +msgid "Work in progress" +msgstr "Praca w toku" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:121 +msgid "Stem" +msgstr "Rdzeń" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:122 +msgid "Loop" +msgstr "Pętla" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:123 +msgid "Sound Effect" +msgstr "Efekt dźwiękowy" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:124 +msgid "One Shot Sample" +msgstr "Próbka one-shot" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:125 +msgid "Other" +msgstr "Inne" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:133 +msgid "Default License:" +msgstr "Domyślna licencja:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:137 +msgid "The work is in the public domain" +msgstr "Utwór w domenie publicznej" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:138 +msgid "All rights are reserved" +msgstr "Wszelkie prawa zastrzeżone" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:139 +msgid "Creative Commons Attribution" +msgstr "Uznanie autorstwa wg licencji Creative Commons " + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:140 +msgid "Creative Commons Attribution Noncommercial" +msgstr "Użycie niekomercyjne wg Creative Commons " + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:141 +msgid "Creative Commons Attribution No Derivative Works" +msgstr "Uznanie Autorstwa Bez Utworów Zależnych wg Creative Commons" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:142 +msgid "Creative Commons Attribution Share Alike" +msgstr "Uznanie a Na Tych Samych Warunkach wg Creative Commons " + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:143 +msgid "Creative Commons Attribution Noncommercial Non Derivate Works" +msgstr "Uznanie Autorstwa Bez Utworów Zależnych wg Creative Commons" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:144 +msgid "Creative Commons Attribution Noncommercial Share Alike" +msgstr "Uznanie a Na Tych Samych Warunkach wg Creative Commons " + +#: airtime_mvc/application/controllers/DashboardController.php:36 +#: airtime_mvc/application/controllers/DashboardController.php:85 +msgid "You don't have permission to disconnect source." +msgstr "Nie masz uprawnień do odłączenia żródła" + +#: airtime_mvc/application/controllers/DashboardController.php:38 +#: airtime_mvc/application/controllers/DashboardController.php:87 +msgid "There is no source connected to this input." +msgstr "Źródło nie jest podłączone do tego wyjścia." + +#: airtime_mvc/application/controllers/DashboardController.php:82 +msgid "You don't have permission to switch source." +msgstr "Nie masz uprawnień do przełączenia źródła." + +#: airtime_mvc/application/controllers/LoginController.php:34 +msgid "Please enter your user name and password" +msgstr "Proszę wpisać nazwę użytkownika i hasło" + +#: airtime_mvc/application/controllers/LoginController.php:77 +msgid "Wrong username or password provided. Please try again." +msgstr "Błędna nazwa użytkownika lub hasło. Spróbuj ponownie." + +#: airtime_mvc/application/controllers/LoginController.php:139 +msgid "" +"Email could not be sent. Check your mail server settings and ensure it has " +"been configured properly." +msgstr "" +"Email nie został wysłany. Sprawdź swoje ustawienia serwera pocztowego i " +"upewnij się, że został skonfigurowany poprawnie." + +#: airtime_mvc/application/controllers/LoginController.php:142 +msgid "Given email not found." +msgstr "Podany adres email nie został odnaleziony." + +#: airtime_mvc/application/controllers/PreferenceController.php:70 +msgid "Preferences updated." +msgstr "Zaktualizowano preferencje." + +#: airtime_mvc/application/controllers/PreferenceController.php:121 +msgid "Support setting updated." +msgstr "Zaktualizowano ustawienia wsparcia." + +#: airtime_mvc/application/controllers/PreferenceController.php:315 +msgid "Stream Setting Updated." +msgstr "Zaktualizowano ustawienia strumienia" + +#: airtime_mvc/application/controllers/PreferenceController.php:342 +msgid "path should be specified" +msgstr "należy okreslić ścieżkę" + +#: airtime_mvc/application/controllers/PreferenceController.php:437 +msgid "Problem with Liquidsoap..." +msgstr "Problem z Liquidsoap..." + +#: airtime_mvc/application/controllers/ErrorController.php:17 +msgid "Page not found" +msgstr "Nie odnaleziono strony" + +#: airtime_mvc/application/controllers/ErrorController.php:22 +msgid "Application error" +msgstr "Błąd aplikacji" + +#: airtime_mvc/application/controllers/UserController.php:55 +#: airtime_mvc/application/controllers/UserController.php:137 +msgid "Specific action is not allowed in demo version!" +msgstr "Żądana opcja nie jest dostępna w wersji demo!" + +#: airtime_mvc/application/controllers/UserController.php:87 +msgid "User added successfully!" +msgstr "Użytkownik został dodany poprawnie!" + +#: airtime_mvc/application/controllers/UserController.php:89 +msgid "User updated successfully!" +msgstr "Użytkownik został poprawnie zaktualizowany!" + +#: airtime_mvc/application/controllers/UserController.php:164 +msgid "Settings updated successfully!" +msgstr "Ustawienia zostały poprawnie zaktualizowane!" + +#: airtime_mvc/application/controllers/LocaleController.php:36 +msgid "Recording:" +msgstr "Nagrywanie:" + +#: airtime_mvc/application/controllers/LocaleController.php:37 +msgid "Master Stream" +msgstr "Strumień Nadrzędny" + +#: airtime_mvc/application/controllers/LocaleController.php:38 +msgid "Live Stream" +msgstr "Transmisja na żywo" + +#: airtime_mvc/application/controllers/LocaleController.php:39 +msgid "Nothing Scheduled" +msgstr "Nic nie zaplanowano" + +#: airtime_mvc/application/controllers/LocaleController.php:40 +msgid "Current Show:" +msgstr "Aktualny program:" + +#: airtime_mvc/application/controllers/LocaleController.php:41 +msgid "Current" +msgstr "Aktualny" + +#: airtime_mvc/application/controllers/LocaleController.php:43 +msgid "You are running the latest version" +msgstr "Używasz najnowszej wersji" + +#: airtime_mvc/application/controllers/LocaleController.php:44 +msgid "New version available: " +msgstr "Dostępna jest nowa wersja:" + +#: airtime_mvc/application/controllers/LocaleController.php:45 +msgid "This version will soon be obsolete." +msgstr "Ta wersja będzie wkrótce przestarzała." + +#: airtime_mvc/application/controllers/LocaleController.php:46 +msgid "This version is no longer supported." +msgstr "Ta wersja nie jest już obsługiwana" + +#: airtime_mvc/application/controllers/LocaleController.php:47 +msgid "Please upgrade to " +msgstr "Zaktualizuj na" + +#: airtime_mvc/application/controllers/LocaleController.php:49 +msgid "Add to current playlist" +msgstr "Dodaj do bieżącej listy odtwarzania" + +#: airtime_mvc/application/controllers/LocaleController.php:50 +msgid "Add to current smart block" +msgstr "Dodaj do bieżącego smart blocku" + +#: airtime_mvc/application/controllers/LocaleController.php:51 +msgid "Adding 1 Item" +msgstr "Dodawanie 1 elementu" + +#: airtime_mvc/application/controllers/LocaleController.php:52 +#, php-format +msgid "Adding %s Items" +msgstr "Dodawanie %s elementów" + +#: airtime_mvc/application/controllers/LocaleController.php:53 +msgid "You can only add tracks to smart blocks." +msgstr "do smart blocków mozna dodawać tylko utwory." + +#: airtime_mvc/application/controllers/LocaleController.php:54 +#: airtime_mvc/application/controllers/PlaylistController.php:160 +msgid "You can only add tracks, smart blocks, and webstreams to playlists." +msgstr "" +"Do list odtwarzania można dodawać tylko utwory, smart blocki i webstreamy" + +#: airtime_mvc/application/controllers/LocaleController.php:57 +msgid "Please select a cursor position on timeline." +msgstr "Proszę wybrać pozycję kursora na osi czasu." + +#: airtime_mvc/application/controllers/LocaleController.php:61 +#: airtime_mvc/application/controllers/LibraryController.php:190 +msgid "Edit Metadata" +msgstr "Edytuj Metadane." + +#: airtime_mvc/application/controllers/LocaleController.php:62 +msgid "Add to selected show" +msgstr "Dodaj do wybranego programu" + +#: airtime_mvc/application/controllers/LocaleController.php:63 +msgid "Select" +msgstr "Zaznacz" + +#: airtime_mvc/application/controllers/LocaleController.php:64 +msgid "Select this page" +msgstr "Zaznacz tę stronę" + +#: airtime_mvc/application/controllers/LocaleController.php:65 +msgid "Deselect this page" +msgstr "Odznacz tę stronę" + +#: airtime_mvc/application/controllers/LocaleController.php:66 +msgid "Deselect all" +msgstr "Odznacz wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:67 +msgid "Are you sure you want to delete the selected item(s)?" +msgstr "Czy na pewno chcesz usunąć wybrane elementy?" + +#: airtime_mvc/application/controllers/LocaleController.php:71 +msgid "Bit Rate" +msgstr "Bit Rate" + +#: airtime_mvc/application/controllers/LocaleController.php:88 +msgid "Sample Rate" +msgstr "Wartość próbkowania" + +#: airtime_mvc/application/controllers/LocaleController.php:93 +msgid "Loading..." +msgstr "Ładowanie" + +#: airtime_mvc/application/controllers/LocaleController.php:94 +#: airtime_mvc/application/controllers/LocaleController.php:159 +msgid "All" +msgstr "Wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:95 +msgid "Files" +msgstr "Pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:96 +msgid "Playlists" +msgstr "Listy odtwarzania" + +#: airtime_mvc/application/controllers/LocaleController.php:97 +msgid "Smart Blocks" +msgstr "Smart Blocki" + +#: airtime_mvc/application/controllers/LocaleController.php:98 +msgid "Web Streams" +msgstr "Web Stream" + +#: airtime_mvc/application/controllers/LocaleController.php:99 +msgid "Unknown type: " +msgstr "Nieznany typ:" + +#: airtime_mvc/application/controllers/LocaleController.php:100 +msgid "Are you sure you want to delete the selected item?" +msgstr "Czy na pewno chcesz usunąć wybrany element?" + +#: airtime_mvc/application/controllers/LocaleController.php:101 +#: airtime_mvc/application/controllers/LocaleController.php:206 +msgid "Uploading in progress..." +msgstr "Wysyłanie w toku..." + +#: airtime_mvc/application/controllers/LocaleController.php:102 +msgid "Retrieving data from the server..." +msgstr "Pobieranie danych z serwera..." + +#: airtime_mvc/application/controllers/LocaleController.php:103 +msgid "The soundcloud id for this file is: " +msgstr "Id SoundCloud dla tego pliku to:" + +#: airtime_mvc/application/controllers/LocaleController.php:104 +msgid "There was an error while uploading to soundcloud." +msgstr "Wystąpił błąd podczas wysyłania na SoundCloud" + +#: airtime_mvc/application/controllers/LocaleController.php:105 +msgid "Error code: " +msgstr "Kod błędu:" + +#: airtime_mvc/application/controllers/LocaleController.php:106 +msgid "Error msg: " +msgstr "Komunikat błędu:" + +#: airtime_mvc/application/controllers/LocaleController.php:107 +msgid "Input must be a positive number" +msgstr "Podana wartość musi być liczbą dodatnią" + +#: airtime_mvc/application/controllers/LocaleController.php:108 +msgid "Input must be a number" +msgstr "Podana wartość musi być liczbą" + +#: airtime_mvc/application/controllers/LocaleController.php:109 +msgid "Input must be in the format: yyyy-mm-dd" +msgstr "Podana wartość musi mieć format yyyy-mm-dd" + +#: airtime_mvc/application/controllers/LocaleController.php:110 +msgid "Input must be in the format: hh:mm:ss.t" +msgstr "Podana wartość musi mieć format hh:mm:ss.t" + +#: airtime_mvc/application/controllers/LocaleController.php:113 +#, php-format +msgid "" +"You are currently uploading files. %sGoing to another screen will cancel the " +"upload process. %sAre you sure you want to leave the page?" +msgstr "" +"Aktualnie dodajesz pliki. %sPrzejście do innej strony przerwie ten proces. " +"%sCzy na pewno chcesz przejść do innej strony?" + +#: airtime_mvc/application/controllers/LocaleController.php:115 +msgid "please put in a time '00:00:00 (.0)'" +msgstr "Wprowadź czas w formacie: '00:00:00 (.0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:116 +msgid "please put in a time in seconds '00 (.0)'" +msgstr "Wprowadź czas w sekundach '00 (.0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:117 +msgid "Your browser does not support playing this file type: " +msgstr "Twoja przeglądarka nie obsługuje odtwarzania plików tego typu:" + +#: airtime_mvc/application/controllers/LocaleController.php:118 +msgid "Dynamic block is not previewable" +msgstr "Podgląd bloku dynamicznego nie jest możliwy" + +#: airtime_mvc/application/controllers/LocaleController.php:119 +msgid "Limit to: " +msgstr "Ograniczenie do:" + +#: airtime_mvc/application/controllers/LocaleController.php:120 +msgid "Playlist saved" +msgstr "Lista odtwarzania została zapisana" + +#: airtime_mvc/application/controllers/LocaleController.php:121 +msgid "Playlist shuffled" +msgstr "Playlista została przemieszana" + +#: airtime_mvc/application/controllers/LocaleController.php:123 +msgid "" +"Airtime is unsure about the status of this file. This can happen when the " +"file is on a remote drive that is unaccessible or the file is in a directory " +"that isn't 'watched' anymore." +msgstr "" +"Airtime nie może odczytać statusu pliku. Może się tak zdarzyć, gdy plik " +"znajduje się na zdalnym dysku, do którego aktualnie nie ma dostępu lub " +"znajduje się w katalogu, który nie jest już \"obserwowany\"." + +#: airtime_mvc/application/controllers/LocaleController.php:125 +#, php-format +msgid "Listener Count on %s: %s" +msgstr "Licznik słuchaczy na %s: %s" + +#: airtime_mvc/application/controllers/LocaleController.php:127 +msgid "Remind me in 1 week" +msgstr "Przypomnij mi za 1 tydzień" + +#: airtime_mvc/application/controllers/LocaleController.php:128 +msgid "Remind me never" +msgstr "Nie przypominaj nigdy" + +#: airtime_mvc/application/controllers/LocaleController.php:129 +msgid "Yes, help Airtime" +msgstr "Tak, wspieraj Airtime" + +#: airtime_mvc/application/controllers/LocaleController.php:130 +#: airtime_mvc/application/controllers/LocaleController.php:188 +msgid "Image must be one of jpg, jpeg, png, or gif" +msgstr "Obraz musi mieć format jpg, jpeg, png lub gif" + +#: airtime_mvc/application/controllers/LocaleController.php:133 +msgid "" +"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." +msgstr "" +"Statyczny smart block będzie zapisywał kryteria i zawartość bezpośrednio, co " +"umożliwia edycję i wyświetlanie go w bibliotece, przed dodaniem do programu." + +#: airtime_mvc/application/controllers/LocaleController.php:135 +msgid "" +"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." +msgstr "" +"Dynamiczny smart block zapisuje tylko kryteria. Jego zawartość będzie " +"generowana automatycznie po dodaniu go do programu. Nie będzie można go " +"wyświetlać i edytować w zawartości biblioteki." + +#: airtime_mvc/application/controllers/LocaleController.php:137 +msgid "" +"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." +msgstr "" +"Pożądana długość bloku nie zostanie osiągnięta jesli airtime nie znajdzie " +"wystarczającej liczby oryginalnych ścieżek spełniających kryteria " +"wyszukiwania. Włącz tę opcję jesli chcesz, żeby ścieżki zostały wielokrotnie " +"dodane do smart blocku." + +#: airtime_mvc/application/controllers/LocaleController.php:138 +msgid "Smart block shuffled" +msgstr "Smart blocku został przemieszany" + +#: airtime_mvc/application/controllers/LocaleController.php:139 +msgid "Smart block generated and criteria saved" +msgstr "Utworzono smartblock i zapisano kryteria" + +#: airtime_mvc/application/controllers/LocaleController.php:140 +msgid "Smart block saved" +msgstr "Smart block został zapisany" + +#: airtime_mvc/application/controllers/LocaleController.php:141 +msgid "Processing..." +msgstr "Przetwarzanie..." + +#: airtime_mvc/application/controllers/LocaleController.php:155 +msgid "Played" +msgstr "Odtwarzane" + +#: airtime_mvc/application/controllers/LocaleController.php:160 +#, php-format +msgid "Copied %s row%s to the clipboard" +msgstr "Skopiowano %srow%s do schowka" + +#: airtime_mvc/application/controllers/LocaleController.php:161 +#, php-format +msgid "" +"%sPrint view%sPlease use your browser's print function to print this table. " +"Press escape when finished." +msgstr "" +"%sPrint view%s Użyj j funkcji drukowania na swojej wyszykiwarce. By " +"zakończyć, wciśnij 'escape'." + +#: airtime_mvc/application/controllers/LocaleController.php:163 +msgid "Choose Storage Folder" +msgstr "Wybierz ścieżkę do katalogu importu" + +#: airtime_mvc/application/controllers/LocaleController.php:164 +msgid "Choose Folder to Watch" +msgstr "Wybierz katalog do obserwacji" + +#: airtime_mvc/application/controllers/LocaleController.php:166 +msgid "" +"Are you sure you want to change the storage folder?\n" +"This will remove the files from your Airtime library!" +msgstr "" +"Czy na pewno chcesz zamienić ścieżkę do katalogu importu\n" +"Wszystkie pliki z biblioteki Airtime zostaną usunięte." + +#: airtime_mvc/application/controllers/LocaleController.php:167 +#: airtime_mvc/application/views/scripts/preference/directory-config.phtml:2 +msgid "Manage Media Folders" +msgstr "Zarządzaj folderami mediów" + +#: airtime_mvc/application/controllers/LocaleController.php:168 +msgid "Are you sure you want to remove the watched folder?" +msgstr "Czy na pewno chcesz usunąć katalog z listy katalogów obserwowanych?" + +#: airtime_mvc/application/controllers/LocaleController.php:169 +msgid "This path is currently not accessible." +msgstr "Ściezka jest obecnie niedostepna." + +#: airtime_mvc/application/controllers/LocaleController.php:171 +msgid "Connected to the streaming server" +msgstr "Połączono z serwerem streamingu" + +#: airtime_mvc/application/controllers/LocaleController.php:172 +msgid "The stream is disabled" +msgstr "Strumień jest odłączony" + +#: airtime_mvc/application/controllers/LocaleController.php:174 +msgid "Can not connect to the streaming server" +msgstr "Nie można połączyć z serwerem streamującym" + +#: airtime_mvc/application/controllers/LocaleController.php:176 +msgid "" +"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." +msgstr "" +"Jesli Airtime korzysta z routera bądź firewalla, może być konieczna " +"konfiguracja przekierowywania portu i informacja w tym polu będzie " +"nieprawidłowa. W takim wypadku należy dokonac ręcznej aktualizacji pola, tak " +"żeby wyświetlił się prawidłowy host/ port/ mount, do którego mógłby " +"podłączyć się prowadzący. Dopuszczalny zakres to 1024 i 49151." + +#: airtime_mvc/application/controllers/LocaleController.php:177 +#, php-format +msgid "For more details, please read the %sAirtime Manual%s" +msgstr "" +"W celu uzyskania wiecej informacji, należy zapoznać się z %sAirtime Manual%s" + +#: airtime_mvc/application/controllers/LocaleController.php:179 +msgid "" +"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." +msgstr "" +"Zaznacz tę opcję w celu włączenia metadanych dla strumieni OGG (metadane " +"strumieniowe to tytuł ścieżki, artysta i nazwa audycji, ktróre wyświetlają " +"się w odtwarzaczu audio). VLC oraz mplayer mają problem z odtwarzaniem " +"strumienia OGG/Vorbis, których metadane zostały udostępnione- odłączają się " +"one od strumenia po każdej piosence. Jeśli używasz strumeinia OGG, a " +"słuchacze nie żądają mozliwości odtwarzania w tych odtwarzaczach, wówczas " +"można udostepnić tę opcję" + +#: airtime_mvc/application/controllers/LocaleController.php:180 +msgid "" +"Check this box to automatically switch off Master/Show source upon source " +"disconnection." +msgstr "" +"To pole służy do automatycznego wyłączenia źródła nadrzędnego/źródła " +"programu po jego odłączeniu." + +#: airtime_mvc/application/controllers/LocaleController.php:181 +msgid "" +"Check this box to automatically switch on Master/Show source upon source " +"connection." +msgstr "" +"To pole służy automatycznego uruchomienia źródła nadrzędnego/źródła programu " +"na połączeniu źródłowym" + +#: airtime_mvc/application/controllers/LocaleController.php:182 +msgid "" +"If your Icecast server expects a username of 'source', this field can be " +"left blank." +msgstr "" +"Jesli serwer Icecast wymaga nazwy użytkownika \"source\", pole to może " +"zostać puste" + +#: airtime_mvc/application/controllers/LocaleController.php:183 +#: airtime_mvc/application/controllers/LocaleController.php:193 +msgid "" +"If your live streaming client does not ask for a username, this field should " +"be 'source'." +msgstr "" +"Jeśli klient nie żąda nazwy uzytkownika, zawartośc tego pola powinna być " +"\"source\"" + +#: airtime_mvc/application/controllers/LocaleController.php:185 +msgid "" +"If you change the username or password values for an enabled stream the " +"playout engine will be rebooted and your listeners will hear silence for " +"5-10 seconds. Changing the following fields will NOT cause a reboot: Stream " +"Label (Global Settings), and Switch Transition Fade(s), Master Username, and " +"Master Password (Input Stream Settings). If Airtime is recording, and if the " +"change causes a playout engine restart, the recording will be interrupted." +msgstr "" +"Jeśli nazwa użytkownika bądź hasło zostaną zmienione na włączonym " +"strumieniu, urządzenie zostanie uruchomione ponownie i nastąpi 5-10 " +"sekundowa cisza. Zmiany w następujących polach NIE spowodują ponownego " +"uruchomienia: Nazwa Strumienia (ustawienia globalne), Zmiana Czasu " +"Zanikania, Nazwa Użytkownika Nadrzędnego (Ustawienia Strumienia " +"Wyjściowego). Jeśli Airtime jest w trakcie nagrywania programu, a zmiany " +"spowodują ponowne uruchomienie urządzenia, nagrywanie zostanie przerwane." + +#: airtime_mvc/application/controllers/LocaleController.php:186 +msgid "" +"This is the admin username and password for Icecast/SHOUTcast to get " +"listener statistics." +msgstr "" +"Nazwa uzytkownika i hasło administartora w programie Icecast/ SHOUTcast w " +"celu uzyskania dostępu do statystyki słuchalności" + +#: airtime_mvc/application/controllers/LocaleController.php:190 +msgid "No result found" +msgstr "Nie znaleziono wyników" + +#: airtime_mvc/application/controllers/LocaleController.php:191 +msgid "" +"This follows the same security pattern for the shows: only users assigned to " +"the show can connect." +msgstr "" +"Ta funkcja działa w programach wg tych samych zasad bezpiezeństwa: jedynie " +"użytkownicy przypisani do audcyji mogą się podłączyć." + +#: airtime_mvc/application/controllers/LocaleController.php:192 +msgid "Specify custom authentication which will work only for this show." +msgstr "Ustal własne uwierzytelnienie tylko dla tego programu." + +#: airtime_mvc/application/controllers/LocaleController.php:194 +msgid "The show instance doesn't exist anymore!" +msgstr "Instancja audycji już nie istnieje." + +#: airtime_mvc/application/controllers/LocaleController.php:198 +msgid "Show" +msgstr "Program" + +#: airtime_mvc/application/controllers/LocaleController.php:199 +msgid "Show is empty" +msgstr "Program jest pusty" + +#: airtime_mvc/application/controllers/LocaleController.php:200 +msgid "1m" +msgstr "1 min" + +#: airtime_mvc/application/controllers/LocaleController.php:201 +msgid "5m" +msgstr "5 min" + +#: airtime_mvc/application/controllers/LocaleController.php:202 +msgid "10m" +msgstr "10 min" + +#: airtime_mvc/application/controllers/LocaleController.php:203 +msgid "15m" +msgstr "15 min" + +#: airtime_mvc/application/controllers/LocaleController.php:204 +msgid "30m" +msgstr "30 min" + +#: airtime_mvc/application/controllers/LocaleController.php:205 +msgid "60m" +msgstr "60 min" + +#: airtime_mvc/application/controllers/LocaleController.php:207 +msgid "Retreiving data from the server..." +msgstr "Odbieranie danych z serwera" + +#: airtime_mvc/application/controllers/LocaleController.php:213 +msgid "This show has no scheduled content." +msgstr "Ten program nie ma zawartości" + +#: airtime_mvc/application/controllers/LocaleController.php:214 +msgid "This show is not completely filled with content." +msgstr "Brak pełnej zawartości tej audycji." + +#: airtime_mvc/application/controllers/LocaleController.php:218 +msgid "January" +msgstr "Styczeń" + +#: airtime_mvc/application/controllers/LocaleController.php:219 +msgid "February" +msgstr "Luty" + +#: airtime_mvc/application/controllers/LocaleController.php:220 +msgid "March" +msgstr "Marzec" + +#: airtime_mvc/application/controllers/LocaleController.php:221 +msgid "April" +msgstr "Kwiecień" + +#: airtime_mvc/application/controllers/LocaleController.php:222 +#: airtime_mvc/application/controllers/LocaleController.php:234 +msgid "May" +msgstr "Maj" + +#: airtime_mvc/application/controllers/LocaleController.php:223 +msgid "June" +msgstr "Czerwiec" + +#: airtime_mvc/application/controllers/LocaleController.php:224 +msgid "July" +msgstr "Lipiec" + +#: airtime_mvc/application/controllers/LocaleController.php:225 +msgid "August" +msgstr "Sierpień" + +#: airtime_mvc/application/controllers/LocaleController.php:226 +msgid "September" +msgstr "Wrzesień" + +#: airtime_mvc/application/controllers/LocaleController.php:227 +msgid "October" +msgstr "Październik" + +#: airtime_mvc/application/controllers/LocaleController.php:228 +msgid "November" +msgstr "Listopad" + +#: airtime_mvc/application/controllers/LocaleController.php:229 +msgid "December" +msgstr "Grudzień" + +#: airtime_mvc/application/controllers/LocaleController.php:230 +msgid "Jan" +msgstr "Sty" + +#: airtime_mvc/application/controllers/LocaleController.php:231 +msgid "Feb" +msgstr "Lut" + +#: airtime_mvc/application/controllers/LocaleController.php:232 +msgid "Mar" +msgstr "Mar" + +#: airtime_mvc/application/controllers/LocaleController.php:233 +msgid "Apr" +msgstr "Kwi" + +#: airtime_mvc/application/controllers/LocaleController.php:235 +msgid "Jun" +msgstr "Cze" + +#: airtime_mvc/application/controllers/LocaleController.php:236 +msgid "Jul" +msgstr "Lip" + +#: airtime_mvc/application/controllers/LocaleController.php:237 +msgid "Aug" +msgstr "Sie" + +#: airtime_mvc/application/controllers/LocaleController.php:238 +msgid "Sep" +msgstr "Wrz" + +#: airtime_mvc/application/controllers/LocaleController.php:239 +msgid "Oct" +msgstr "Paź" + +#: airtime_mvc/application/controllers/LocaleController.php:240 +msgid "Nov" +msgstr "Lis" + +#: airtime_mvc/application/controllers/LocaleController.php:241 +msgid "Dec" +msgstr "Gru" + +#: airtime_mvc/application/controllers/LocaleController.php:242 +msgid "today" +msgstr "dzisiaj" + +#: airtime_mvc/application/controllers/LocaleController.php:243 +msgid "day" +msgstr "dzień" + +#: airtime_mvc/application/controllers/LocaleController.php:244 +msgid "week" +msgstr "tydzień" + +#: airtime_mvc/application/controllers/LocaleController.php:245 +msgid "month" +msgstr "miesiąć" + +#: airtime_mvc/application/controllers/LocaleController.php:260 +msgid "" +"Shows longer than their scheduled time will be cut off by a following show." +msgstr "" +"Programy o czasie dłuższym niż zaplanowany będą przerywane przez następne ." + +#: airtime_mvc/application/controllers/LocaleController.php:261 +msgid "Cancel Current Show?" +msgstr "Skasować obecną audycję?" + +#: airtime_mvc/application/controllers/LocaleController.php:262 +#: airtime_mvc/application/controllers/LocaleController.php:301 +msgid "Stop recording current show?" +msgstr "Przerwać nagrywanie aktualnej audycji?" + +#: airtime_mvc/application/controllers/LocaleController.php:263 +msgid "Ok" +msgstr "Ok" + +#: airtime_mvc/application/controllers/LocaleController.php:264 +msgid "Contents of Show" +msgstr "Zawartośc audycji" + +#: airtime_mvc/application/controllers/LocaleController.php:267 +msgid "Remove all content?" +msgstr "Usunąć całą zawartość?" + +#: airtime_mvc/application/controllers/LocaleController.php:269 +msgid "Delete selected item(s)?" +msgstr "Skasować wybrane elementy?" + +#: airtime_mvc/application/controllers/LocaleController.php:270 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5 +msgid "Start" +msgstr "Rozpocznij" + +#: airtime_mvc/application/controllers/LocaleController.php:271 +msgid "End" +msgstr "Zakończ" + +#: airtime_mvc/application/controllers/LocaleController.php:272 +msgid "Duration" +msgstr "Czas trwania" + +#: airtime_mvc/application/controllers/LocaleController.php:278 +msgid "Cue In" +msgstr "Cue In" + +#: airtime_mvc/application/controllers/LocaleController.php:279 +msgid "Cue Out" +msgstr "Cue out" + +#: airtime_mvc/application/controllers/LocaleController.php:280 +msgid "Fade In" +msgstr "Zgłaśnianie [Fade In]" + +#: airtime_mvc/application/controllers/LocaleController.php:281 +msgid "Fade Out" +msgstr "Wyciszanie [Fade out]" + +#: airtime_mvc/application/controllers/LocaleController.php:282 +msgid "Show Empty" +msgstr "Program jest pusty" + +#: airtime_mvc/application/controllers/LocaleController.php:283 +msgid "Recording From Line In" +msgstr "Nagrywaanie z wejścia liniowego" + +#: airtime_mvc/application/controllers/LocaleController.php:288 +msgid "Cannot schedule outside a show." +msgstr "Nie ma możliwości planowania poza programem" + +#: airtime_mvc/application/controllers/LocaleController.php:289 +msgid "Moving 1 Item" +msgstr "Przenoszenie 1 elementu" + +#: airtime_mvc/application/controllers/LocaleController.php:290 +#, php-format +msgid "Moving %s Items" +msgstr "Przenoszenie %s elementów" + +#: airtime_mvc/application/controllers/LocaleController.php:293 +msgid "Select all" +msgstr "Zaznacz wszystko" + +#: airtime_mvc/application/controllers/LocaleController.php:294 +msgid "Select none" +msgstr "Odznacz wszystkie" + +#: airtime_mvc/application/controllers/LocaleController.php:295 +msgid "Remove overbooked tracks" +msgstr "Usuń utwory niemieszczące się w ramach czasowych programu" + +#: airtime_mvc/application/controllers/LocaleController.php:296 +msgid "Remove selected scheduled items" +msgstr "Usuń wybrane elementy" + +#: airtime_mvc/application/controllers/LocaleController.php:297 +msgid "Jump to the current playing track" +msgstr "Przejdź do obecnie odtwarzanej ściezki" + +#: airtime_mvc/application/controllers/LocaleController.php:298 +msgid "Cancel current show" +msgstr "Skasuj obecny program" + +#: airtime_mvc/application/controllers/LocaleController.php:303 +msgid "Open library to add or remove content" +msgstr "Otwóz bibliotekę w celu dodania bądź usunięcia zawartości" + +#: airtime_mvc/application/controllers/LocaleController.php:304 +#: airtime_mvc/application/controllers/ScheduleController.php:261 +#: airtime_mvc/application/views/scripts/showbuilder/index.phtml:15 +msgid "Add / Remove Content" +msgstr "Dodaj/usuń zawartość" + +#: airtime_mvc/application/controllers/LocaleController.php:306 +msgid "in use" +msgstr "W użyciu" + +#: airtime_mvc/application/controllers/LocaleController.php:307 +msgid "Disk" +msgstr "Dysk" + +#: airtime_mvc/application/controllers/LocaleController.php:309 +msgid "Look in" +msgstr "Sprawdź" + +#: airtime_mvc/application/controllers/LocaleController.php:311 +msgid "Open" +msgstr "Otwórz" + +#: airtime_mvc/application/controllers/LocaleController.php:317 +msgid "Guests can do the following:" +msgstr "Goście mają mozliwość:" + +#: airtime_mvc/application/controllers/LocaleController.php:318 +msgid "View schedule" +msgstr "Przeglądanie harmonogramu" + +#: airtime_mvc/application/controllers/LocaleController.php:319 +msgid "View show content" +msgstr "Przeglądanie zawartości programów" + +#: airtime_mvc/application/controllers/LocaleController.php:320 +msgid "DJs can do the following:" +msgstr "Prowadzący ma możliwość:" + +#: airtime_mvc/application/controllers/LocaleController.php:321 +msgid "Manage assigned show content" +msgstr "Zarządzać przypisaną sobie zawartością programu" + +#: airtime_mvc/application/controllers/LocaleController.php:322 +msgid "Import media files" +msgstr "Importować pliki mediów" + +#: airtime_mvc/application/controllers/LocaleController.php:323 +msgid "Create playlists, smart blocks, and webstreams" +msgstr "Tworzyć playlisty, smart blocki i webstreamy" + +#: airtime_mvc/application/controllers/LocaleController.php:324 +msgid "Manage their own library content" +msgstr "Zarządzać zawartością własnej biblioteki" + +#: airtime_mvc/application/controllers/LocaleController.php:325 +msgid "Progam Managers can do the following:" +msgstr "Zarządzający programowi mają możliwość:" + +#: airtime_mvc/application/controllers/LocaleController.php:326 +msgid "View and manage show content" +msgstr "Przeglądać i zarządzać zawartością audycji" + +#: airtime_mvc/application/controllers/LocaleController.php:327 +msgid "Schedule shows" +msgstr "Planować programy" + +#: airtime_mvc/application/controllers/LocaleController.php:328 +msgid "Manage all library content" +msgstr "Zarządzać całą zawartością biblioteki" + +#: airtime_mvc/application/controllers/LocaleController.php:329 +msgid "Admins can do the following:" +msgstr "Administrator ma mozliwość:" + +#: airtime_mvc/application/controllers/LocaleController.php:330 +msgid "Manage preferences" +msgstr "Zarządzać preferencjami" + +#: airtime_mvc/application/controllers/LocaleController.php:331 +msgid "Manage users" +msgstr "Zarządzać użytkownikami" + +#: airtime_mvc/application/controllers/LocaleController.php:332 +msgid "Manage watched folders" +msgstr "Zarządzać przeglądanymi katalogami" + +#: airtime_mvc/application/controllers/LocaleController.php:334 +msgid "View system status" +msgstr "Sprawdzać status systemu" + +#: airtime_mvc/application/controllers/LocaleController.php:335 +msgid "Access playout history" +msgstr "Przeglądać historię odtworzeń" + +#: airtime_mvc/application/controllers/LocaleController.php:336 +msgid "View listener stats" +msgstr "Sprawdzać statystyki słuchaczy" + +#: airtime_mvc/application/controllers/LocaleController.php:338 +msgid "Show / hide columns" +msgstr "Pokaż/ukryj kolumny" + +#: airtime_mvc/application/controllers/LocaleController.php:340 +msgid "From {from} to {to}" +msgstr "Od {from} do {to}" + +#: airtime_mvc/application/controllers/LocaleController.php:341 +msgid "kbps" +msgstr "kbps" + +#: airtime_mvc/application/controllers/LocaleController.php:342 +msgid "yyyy-mm-dd" +msgstr "yyyy-mm-dd" + +#: airtime_mvc/application/controllers/LocaleController.php:343 +msgid "hh:mm:ss.t" +msgstr "hh:mm:ss.t" + +#: airtime_mvc/application/controllers/LocaleController.php:344 +msgid "kHz" +msgstr "kHz" + +#: airtime_mvc/application/controllers/LocaleController.php:347 +msgid "Su" +msgstr "Nd" + +#: airtime_mvc/application/controllers/LocaleController.php:348 +msgid "Mo" +msgstr "Pn" + +#: airtime_mvc/application/controllers/LocaleController.php:349 +msgid "Tu" +msgstr "Wt" + +#: airtime_mvc/application/controllers/LocaleController.php:350 +msgid "We" +msgstr "Śr" + +#: airtime_mvc/application/controllers/LocaleController.php:351 +msgid "Th" +msgstr "Cz" + +#: airtime_mvc/application/controllers/LocaleController.php:352 +msgid "Fr" +msgstr "Pt" + +#: airtime_mvc/application/controllers/LocaleController.php:353 +msgid "Sa" +msgstr "So" + +#: airtime_mvc/application/controllers/LocaleController.php:354 +#: airtime_mvc/application/controllers/LocaleController.php:382 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3 +msgid "Close" +msgstr "Zamknij" + +#: airtime_mvc/application/controllers/LocaleController.php:356 +msgid "Hour" +msgstr "Godzina" + +#: airtime_mvc/application/controllers/LocaleController.php:357 +msgid "Minute" +msgstr "Minuta" + +#: airtime_mvc/application/controllers/LocaleController.php:358 +msgid "Done" +msgstr "Gotowe" + +#: airtime_mvc/application/controllers/LocaleController.php:361 +msgid "Select files" +msgstr "Wybierz pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:362 +#: airtime_mvc/application/controllers/LocaleController.php:363 +msgid "Add files to the upload queue and click the start button." +msgstr "Dodaj pliki do kolejki i wciśnij \"start\"" + +#: airtime_mvc/application/controllers/LocaleController.php:366 +msgid "Add Files" +msgstr "Dodaj pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:367 +msgid "Stop Upload" +msgstr "Zatrzymaj przesyłanie" + +#: airtime_mvc/application/controllers/LocaleController.php:368 +msgid "Start upload" +msgstr "Rozpocznij przesyłanie" + +#: airtime_mvc/application/controllers/LocaleController.php:369 +msgid "Add files" +msgstr "Dodaj pliki" + +#: airtime_mvc/application/controllers/LocaleController.php:370 +#, php-format +msgid "Uploaded %d/%d files" +msgstr "Dodano pliki %d%d" + +#: airtime_mvc/application/controllers/LocaleController.php:371 +msgid "N/A" +msgstr "Nie dotyczy" + +#: airtime_mvc/application/controllers/LocaleController.php:372 +msgid "Drag files here." +msgstr "Przeciągnij pliki tutaj." + +#: airtime_mvc/application/controllers/LocaleController.php:373 +msgid "File extension error." +msgstr "Błąd rozszerzenia pliku." + +#: airtime_mvc/application/controllers/LocaleController.php:374 +msgid "File size error." +msgstr "Błąd rozmiaru pliku." + +#: airtime_mvc/application/controllers/LocaleController.php:375 +msgid "File count error." +msgstr "Błąd liczenia plików" + +#: airtime_mvc/application/controllers/LocaleController.php:376 +msgid "Init error." +msgstr "Błąd inicjalizacji" + +#: airtime_mvc/application/controllers/LocaleController.php:377 +msgid "HTTP Error." +msgstr "Błąd HTTP." + +#: airtime_mvc/application/controllers/LocaleController.php:378 +msgid "Security error." +msgstr "Błąd zabezpieczeń." + +#: airtime_mvc/application/controllers/LocaleController.php:379 +msgid "Generic error." +msgstr "Błąd ogólny." + +#: airtime_mvc/application/controllers/LocaleController.php:380 +msgid "IO error." +msgstr "Błąd I/O" + +#: airtime_mvc/application/controllers/LocaleController.php:381 +#, php-format +msgid "File: %s" +msgstr "Plik: %s" + +#: airtime_mvc/application/controllers/LocaleController.php:383 +#, php-format +msgid "%d files queued" +msgstr "%d plików oczekujących" + +#: airtime_mvc/application/controllers/LocaleController.php:384 +msgid "File: %f, size: %s, max file size: %m" +msgstr "Plik: %f, rozmiar %s, maksymalny rozmiar pliku: %m" + +#: airtime_mvc/application/controllers/LocaleController.php:385 +msgid "Upload URL might be wrong or doesn't exist" +msgstr "URL nie istnieje bądź jest niewłaściwy" + +#: airtime_mvc/application/controllers/LocaleController.php:386 +msgid "Error: File too large: " +msgstr "Błąd: plik jest za duży:" + +#: airtime_mvc/application/controllers/LocaleController.php:387 +msgid "Error: Invalid file extension: " +msgstr "Błąd: nieprawidłowe rozszerzenie pliku:" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:190 +#: airtime_mvc/application/controllers/LibraryController.php:161 +msgid "Preview" +msgstr "Podgląd" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:192 +msgid "Select cursor" +msgstr "Wybierz kursor" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:193 +msgid "Remove cursor" +msgstr "Usuń kursor" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:198 +#: airtime_mvc/application/controllers/LibraryController.php:189 +#: airtime_mvc/application/controllers/LibraryController.php:218 +#: airtime_mvc/application/controllers/LibraryController.php:237 +#: airtime_mvc/application/controllers/ScheduleController.php:315 +#: airtime_mvc/application/controllers/ScheduleController.php:322 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:26 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:23 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:18 +msgid "Delete" +msgstr "Usuń" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:212 +msgid "show does not exist" +msgstr "program nie istnieje" + +#: airtime_mvc/application/controllers/ListenerstatController.php:56 +msgid "" +"Please make sure admin user/password is correct on System->Streams page." +msgstr "" +"Upewnij się, że nazwa użytkownika i hasło są poprawne w System->Strumienie." + +#: airtime_mvc/application/controllers/ApiController.php:57 +#: airtime_mvc/application/controllers/ApiController.php:84 +msgid "You are not allowed to access this resource." +msgstr "Nie masz dostępu do tej lokalizacji" + +#: airtime_mvc/application/controllers/ApiController.php:286 +#: airtime_mvc/application/controllers/ApiController.php:325 +msgid "You are not allowed to access this resource. " +msgstr "Nie masz dostępu do tej lokalizacji." + +#: airtime_mvc/application/controllers/ApiController.php:507 +msgid "File does not exist in Airtime." +msgstr "Plik nie istnieje w Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:520 +msgid "File does not exist in Airtime" +msgstr "Plik nie istnieje w Airtime" + +#: airtime_mvc/application/controllers/ApiController.php:532 +msgid "File doesn't exist in Airtime." +msgstr "Plik nie istnieje w Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:578 +msgid "Bad request. no 'mode' parameter passed." +msgstr "Złe zapytanie. Nie zaakceprtowano parametru 'mode'" + +#: airtime_mvc/application/controllers/ApiController.php:588 +msgid "Bad request. 'mode' parameter is invalid" +msgstr "Złe zapytanie. Parametr 'mode' jest nieprawidłowy" + +#: airtime_mvc/application/controllers/LibraryController.php:95 +#: airtime_mvc/application/controllers/PlaylistController.php:127 +#, php-format +msgid "%s not found" +msgstr "nie znaleziono %s" + +#: airtime_mvc/application/controllers/LibraryController.php:104 +#: airtime_mvc/application/controllers/PlaylistController.php:148 +msgid "Something went wrong." +msgstr "Wystapił błąd" + +#: airtime_mvc/application/controllers/LibraryController.php:182 +#: airtime_mvc/application/controllers/LibraryController.php:206 +#: airtime_mvc/application/controllers/LibraryController.php:229 +msgid "Add to Playlist" +msgstr "Dodaj do listy odtwarzania" + +#: airtime_mvc/application/controllers/LibraryController.php:184 +msgid "Add to Smart Block" +msgstr "Dodaj do smartblocku" + +#: airtime_mvc/application/controllers/LibraryController.php:194 +#: airtime_mvc/application/controllers/ScheduleController.php:897 +msgid "Download" +msgstr "Pobierz" + +#: airtime_mvc/application/controllers/LibraryController.php:198 +msgid "Duplicate Playlist" +msgstr "Skopiuj listę odtwarzania" + +#: airtime_mvc/application/controllers/LibraryController.php:213 +#: airtime_mvc/application/controllers/LibraryController.php:235 +msgid "Edit" +msgstr "Edytuj" + +#: airtime_mvc/application/controllers/LibraryController.php:248 +msgid "Soundcloud" +msgstr "Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:254 +#: airtime_mvc/application/controllers/ScheduleController.php:284 +msgid "View on Soundcloud" +msgstr "Zobacz na Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:258 +#: airtime_mvc/application/controllers/ScheduleController.php:287 +msgid "Re-upload to SoundCloud" +msgstr "Prześlij ponownie do SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:260 +#: airtime_mvc/application/controllers/ScheduleController.php:287 +msgid "Upload to SoundCloud" +msgstr "Prześlij do SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:267 +msgid "No action available" +msgstr "Brak dostepnych czynności" + +#: airtime_mvc/application/controllers/LibraryController.php:287 +msgid "You don't have permission to delete selected items." +msgstr "Nie masz uprawnień do usunięcia wybranych elementów" + +#: airtime_mvc/application/controllers/LibraryController.php:336 +msgid "Could not delete some scheduled files." +msgstr "Nie można skasować niektórych plików z harmonogramu." + +#: airtime_mvc/application/controllers/LibraryController.php:375 +#, php-format +msgid "Copy of %s" +msgstr "Kopia %s" + +#: airtime_mvc/application/controllers/PlaylistController.php:45 +#, php-format +msgid "You are viewing an older version of %s" +msgstr "Przeglądasz starszą wersję %s" + +#: airtime_mvc/application/controllers/PlaylistController.php:120 +msgid "You cannot add tracks to dynamic blocks." +msgstr "Nie można dodać ścieżek do bloków dynamicznych" + +#: airtime_mvc/application/controllers/PlaylistController.php:141 +#, php-format +msgid "You don't have permission to delete selected %s(s)." +msgstr "Nie masz pozwolenia na usunięcie wybranych %s(s)" + +#: airtime_mvc/application/controllers/PlaylistController.php:154 +msgid "You can only add tracks to smart block." +msgstr "Utwory mogą być dodane tylko do smartblocku" + +#: airtime_mvc/application/controllers/PlaylistController.php:172 +msgid "Untitled Playlist" +msgstr "Lista odtwarzania bez tytułu" + +#: airtime_mvc/application/controllers/PlaylistController.php:174 +msgid "Untitled Smart Block" +msgstr "Smartblock bez tytułu" + +#: airtime_mvc/application/controllers/PlaylistController.php:437 +msgid "Unknown Playlist" +msgstr "Nieznana playlista" + +#: airtime_mvc/application/controllers/ScheduleController.php:252 +msgid "View Recorded File Metadata" +msgstr "Przeglądaj metadane nagrania" + +#: airtime_mvc/application/controllers/ScheduleController.php:264 +msgid "Remove All Content" +msgstr "Usuń całą zawartość" + +#: airtime_mvc/application/controllers/ScheduleController.php:271 +msgid "Show Content" +msgstr "Zawartość programu" + +#: airtime_mvc/application/controllers/ScheduleController.php:295 +#: airtime_mvc/application/controllers/ScheduleController.php:302 +msgid "Cancel Current Show" +msgstr "Skasuj obecny program" + +#: airtime_mvc/application/controllers/ScheduleController.php:299 +#: airtime_mvc/application/controllers/ScheduleController.php:309 +msgid "Edit Show" +msgstr "Edytuj program" + +#: airtime_mvc/application/controllers/ScheduleController.php:317 +msgid "Delete This Instance" +msgstr "Usuń tą instancję" + +#: airtime_mvc/application/controllers/ScheduleController.php:319 +msgid "Delete This Instance and All Following" +msgstr "Usuń ten i wszystkie inne instancje" + +#: airtime_mvc/application/controllers/ScheduleController.php:445 +#, php-format +msgid "Rebroadcast of show %s from %s at %s" +msgstr "Retransmisja programu %sfrom%sat%s" + +#: airtime_mvc/application/controllers/WebstreamController.php:29 +#: airtime_mvc/application/controllers/WebstreamController.php:33 +msgid "Untitled Webstream" +msgstr "Webstream bez nazwy" + +#: airtime_mvc/application/controllers/WebstreamController.php:138 +msgid "Webstream saved." +msgstr "Zapisano webstream" + +#: airtime_mvc/application/controllers/WebstreamController.php:146 +msgid "Invalid form values." +msgstr "Nieprawidłowe wartości formularzy" + +#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 +msgid "Listener Count Over Time" +msgstr "Licznik słuchaczy na przestrzeni czasu" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 +msgid "Previous:" +msgstr "Poprzedni:" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:10 +msgid "Next:" +msgstr "Następny:" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:24 +msgid "Source Streams" +msgstr "Strumienie źródłowe" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:29 +msgid "Master Source" +msgstr "Źródło Nadrzędne" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 +msgid "Show Source" +msgstr "Źródło Programu" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 +msgid "Scheduled Play" +msgstr "Planowane odtwarzanie" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:54 +msgid "ON AIR" +msgstr "Na antenie" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:55 +msgid "Listen" +msgstr "Słuchaj" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:59 +msgid "Station time" +msgstr "Czas stacji" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 +msgid "Your trial expires in" +msgstr "Twoja próba wygasa" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "Purchase your copy of Airtime" +msgstr "Zakup kopię Airtime'a" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "My Account" +msgstr "Moje konto" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:3 +msgid "Manage Users" +msgstr "Zarządzaj Użytkownikami" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:10 +msgid "New User" +msgstr "Nowy Użytkownik" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:17 +msgid "id" +msgstr "id" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:19 +msgid "First Name" +msgstr "Imię" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:20 +msgid "Last Name" +msgstr "Nazwisko" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:21 +msgid "User Type" +msgstr "Typ użytkownika" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 +#, php-format +msgid "" +"%sAirtime%s %s, the open radio software for scheduling and remote station " +"management. %s" +msgstr "" +"%sAirtime%s %s otwarte oprogramowanie radiowe do planowania i zdalnego " +"zarządzania stacją. %s" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 +#, php-format +msgid "" +"%sSourcefabric%s o.p.s. Airtime is distributed under the %sGNU GPL v.3%s" +msgstr "" +"%sSourcefabric%s o.p.s. Airtime jest rozpowszechniany na podstawie %sGNU GPL " +"v.3%s" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 +msgid "Share" +msgstr "Podziel się" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 +msgid "Select stream:" +msgstr "Wybierz strumień:" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:50 +msgid "mute" +msgstr "wycisz" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:53 +msgid "unmute" +msgstr "włącz głos" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 +msgid "Welcome to Airtime!" +msgstr "Witamy w Airtime!" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 +msgid "" +"Here's how you can get started using Airtime to automate your broadcasts: " +msgstr "" +"Dowiedz się jak rozpocząć użytkowanie Airtime'a, aby zautomatyzować " +"transmisje radiowe:" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 +msgid "" +"Begin by adding your files to the library using the 'Add Media' menu button. " +"You can drag and drop your files to this window too." +msgstr "" +"Zacznij od dodania swoich plików do biblioteki używając przycisku \"dodaj " +"media\" w menu programu\". Możesz także przeciągnąć pliki do tego okna." + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 +msgid "" +"Create a show by going to 'Calendar' in the menu bar, and then clicking the " +"'+ Show' icon. This can be either a one-time or repeating show. Only admins " +"and program managers can add shows." +msgstr "" +"Utwórz program przechodząc do '\"kalendarza\" w pasku \"menu\" a następnie " +"klikając w ikonę \"+ Program\". Można utworzyć program do jednorazowego bądź " +"wielokrotnego odtwarzania. Jedynie administratorzy i zarządzający programami " +"mogą je dodawać." + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 +msgid "" +"Add media to the show by going to your show in the Schedule calendar, left-" +"clicking on it and selecting 'Add / Remove Content'" +msgstr "" +"Dodaj media do programu przez przejście do programu z kalendarza, kliknij na " +"niego lewym przyciskiem myszki wybierając opcję 'dodaj/usuń zawartość'" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 +msgid "" +"Select your media from the left pane and drag them to your show in the right " +"pane." +msgstr "" +"Wybierz media z lewego okna i przeciągnij do utworzonego programu w prawym " +"oknie" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 +msgid "Then you're good to go!" +msgstr "Gotowe!" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:13 +#, php-format +msgid "For more detailed help, read the %suser manual%s." +msgstr "W celu uzyskania szczegółowej pomocy, skorzystaj z %suser manual%s" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:40 +msgid "Expand Static Block" +msgstr "Zwiększ bok statyczny" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:45 +msgid "Expand Dynamic Block" +msgstr "Zwiększ blok dynamiczny" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:98 +msgid "Empty smart block" +msgstr "Pusty smart block" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:100 +msgid "Empty playlist" +msgstr "Pusta playlista" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:66 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "Fade out: " +msgstr "Wyciszanie [fade out]:" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "(ss.t)" +msgstr "(ss.t)" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:63 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +msgid "Fade in: " +msgstr "Zgłaśnianie [fade in]:" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:10 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:4 +msgid "New" +msgstr "Nowy" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:13 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:13 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:7 +msgid "New Playlist" +msgstr "Nowa lista odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 +msgid "New Smart Block" +msgstr "Nowy Smartblock" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9 +msgid "New Webstream" +msgstr "Nowy webstream" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle playlist" +msgstr "Wymieszaj listę odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +msgid "Save playlist" +msgstr "Zapisz listę odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:30 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:27 +msgid "Playlist crossfade" +msgstr "Płynne przenikanie utworów na liście dotwarzania" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:49 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:51 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:38 +msgid "View / edit description" +msgstr "Zobacz/edytuj opis" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:81 +msgid "No open playlist" +msgstr "Brak otwartej listy odtwarzania" + +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:86 +msgid "No open smart block" +msgstr "Brak otwartego smartblocka" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +msgid "Cue In: " +msgstr "Zgłaśnianie [Cue in]:" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "(hh:mm:ss.t)" +msgstr "(hh:mm:ss.t)" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "Cue Out: " +msgstr "Wyciszanie [Cue out]:" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 +msgid "Original Length:" +msgstr "Oryginalna długość:" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Add this show" +msgstr "Dodaj program" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Update show" +msgstr "Aktualizuj program" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 +msgid "What" +msgstr "Co" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14 +msgid "When" +msgstr "Kiedy" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:19 +msgid "Live Stream Input" +msgstr "Wejście Strumienia \"Na żywo\"" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:23 +msgid "Record & Rebroadcast" +msgstr "Nagrywaj i odtwarzaj ponownie" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:29 +msgid "Who" +msgstr "Kto" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33 +msgid "Style" +msgstr "Styl" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 +msgid "Email sent" +msgstr "Email został wysłany" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:6 +msgid "An email has been sent" +msgstr "E-mail został wysłany" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:7 +msgid "Back to login screen" +msgstr "Powrót do okna logowania" + +#: airtime_mvc/application/views/scripts/login/index.phtml:7 +msgid "" +"Welcome to the online Airtime demo! You can log in using the username " +"'admin' and the password 'admin'." +msgstr "" +"Witamy w internetowej wersji demonstracyjnej programu Airtime. Możesz się " +"zalogować, wpisując login 'admin' oraz hasło 'admin'" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 +#: airtime_mvc/application/views/scripts/form/login.phtml:34 +msgid "Reset password" +msgstr "Resetuj hasło" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:7 +msgid "" +"Please enter your account e-mail address. You will receive a link to create " +"a new password via e-mail." +msgstr "" +"Wprowadź adres swojego konta e-mail, na który zostanie przesłany link w celu " +"utworzenia nowego hasła. " + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:3 +msgid "New password" +msgstr "Nowe hasło" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:6 +msgid "Please enter and confirm your new password in the fields below." +msgstr "Wprowadź i potwierdź swoje hasło w poniższych polach" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:4 +msgid "Service" +msgstr "Usługa" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:6 +msgid "Uptime" +msgstr "Czas pracy" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:7 +msgid "CPU" +msgstr "CPU" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:8 +msgid "Memory" +msgstr "Pamięć" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14 +msgid "Airtime Version" +msgstr "Wersja Airtime" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30 +msgid "Disk Space" +msgstr "Miejsce na dysku " + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:22 +msgid "previous" +msgstr "poprzedni" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:25 +msgid "play" +msgstr "play" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:28 +msgid "pause" +msgstr "pauza" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:31 +msgid "next" +msgstr "następny" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:34 +msgid "stop" +msgstr "stop" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:59 +msgid "max volume" +msgstr "maksymalna głośność" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:69 +msgid "Update Required" +msgstr "Wymagana aktualizacja" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:70 +#, php-format +msgid "" +"To play the media you will need to either update your browser to a recent " +"version or update your %sFlash plugin%s." +msgstr "" +"By odtworzyć medium, należy zaktualizować przeglądarkę do najnowszej wersji " +"bądź zainstalowac aktualizację %sFlash plugin%s" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:51 +msgid "Stream URL:" +msgstr "URL strumienia:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:56 +msgid "Default Length:" +msgstr "Domyślna długość:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:63 +msgid "No webstream" +msgstr "Brak webstreamu" + +#: airtime_mvc/application/views/scripts/error/error.phtml:6 +msgid "Zend Framework Default Application" +msgstr "Aplikacja domyślna Zend Framework" + +#: airtime_mvc/application/views/scripts/error/error.phtml:10 +msgid "Page not found!" +msgstr "Nie znaleziono strony!" + +#: airtime_mvc/application/views/scripts/error/error.phtml:11 +msgid "Looks like the page you were looking for doesn't exist!" +msgstr "Wygląda na to, że strona, której szukasz nie istnieje" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:4 +msgid "Stream " +msgstr "Strumień" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:33 +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:74 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:90 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:59 +#: airtime_mvc/application/views/scripts/form/preferences_general.phtml:71 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 +msgid "(Required)" +msgstr "(Wymagane)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:76 +msgid "Additional Options" +msgstr "Opcje dodatkowe" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:136 +msgid "" +"The following info will be displayed to listeners in their media player:" +msgstr "W odtwarzaczu słuchacza wyświetli sie nastepujaca informacja:" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:169 +msgid "(Your radio station website)" +msgstr "(Strona internetowa Twojej stacji)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:207 +msgid "Stream URL: " +msgstr "URL strumienia:" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:9 +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:27 +msgid "Choose folder" +msgstr "Wybierz folder" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:10 +msgid "Set" +msgstr "Ustaw" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 +msgid "Current Import Folder:" +msgstr "Aktualny folder importu:" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:41 +msgid "Add" +msgstr "Dodaj" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:43 +msgid "" +"Rescan watched directory (This is useful if it is network mount and may be " +"out of sync with Airtime)" +msgstr "" +"Przeskanuj ponownie obserwowany katalog (Przydatne w przypadku " +"rozsynchronizowanego dysku sieciowego)." + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 +msgid "Remove watched directory" +msgstr "Usuń obserwowany katalog." + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:50 +msgid "You are not watching any media folders." +msgstr "Nie obserwujesz w tej chwili żadnych folderów" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 +msgid "Choose Days:" +msgstr "Wybierz dni:" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:18 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:18 +msgid "Remove" +msgstr "Usuń" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:1 +msgid "Register Airtime" +msgstr "Zarejestruj Airtime" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:6 +#, php-format +msgid "" +"Help Airtime improve by letting us know how you are using it. This info will " +"be collected regularly in order to enhance your user experience.%sClick " +"'Yes, help Airtime' and we'll make sure the features you use are constantly " +"improving." +msgstr "" +"W celu udoskonalenia programu Airtime, prosimy o przesłanie informacji " +"zwrotnej o sposobie uzytkowania. Informacje takie będą zbierane regualrnie w " +"celu poprawienia jakości uzytkowania. %s Kliknij \"Tak, chcę wesprzeć Airtime" +"\", dołożymy starań, by funkcje, których używasz, były stale ulepszane." + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:25 +#, php-format +msgid "" +"Click the box below to advertise your station on %sSourcefabric.org%s. In " +"order to promote your station, 'Send support feedback' must be enabled. This " +"data will be collected in addition to the support feedback." +msgstr "" +"Kliknij w poniższe pole w celu umieszczenia reklamy twojej radiostacji na %s " +"Sourfabric.org%s. Należy przy tym udostępnić opcję 'Wyślij informację " +"zwrotną'. Informacje te będą pozyskiwane razem z informacją zwrotną." + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:65 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:79 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:61 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:76 +msgid "(for verification purposes only, will not be published)" +msgstr "(tylko dla celów weryfikacji, dane nie będą rozpowszechniane)" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:150 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:151 +msgid "Note: Anything larger than 600x600 will be resized." +msgstr "" +"Uwaga: każdy plik o rozmiarze większym niż 600x600 zostanie zmniejszony" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:164 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:164 +msgid "Show me what I am sending " +msgstr "Pokazuj, co wysyłam" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:178 +msgid "Terms and Conditions" +msgstr "Zasady i warunki" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:7 +msgid "Find Shows" +msgstr "Znajdź audycję" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:12 +msgid "Filter By Show:" +msgstr "Filtruj wg audycji" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:2 +msgid "Input Stream Settings" +msgstr "Ustawienia strumienia wejściowego" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:109 +msgid "Master Source Connection URL:" +msgstr "Adres URL połącznia dla Źródła Nadrzędnego" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:115 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:159 +msgid "Override" +msgstr "Zastąp" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "OK" +msgstr "OK" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "RESET" +msgstr "RESETUJ" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:153 +msgid "Show Source Connection URL:" +msgstr "Adres URL połączenia dla Żródła Programu" + +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 +#, php-format +msgid "%s's Settings" +msgstr "ustawienia %s's " + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 +msgid "Repeat Days:" +msgstr "Dni powtarzania:" + +#: airtime_mvc/application/views/scripts/form/daterange.phtml:6 +msgid "Filter History" +msgstr "Filtruj Historię" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:5 +msgid "Email / Mail Server Settings" +msgstr "Ustawienia Email/Serwera pocztowego" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:10 +msgid "SoundCloud Settings" +msgstr "Ustawienia SoundCloud" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:5 +#, php-format +msgid "" +"Help Airtime improve by letting Sourcefabric know how you are using it. This " +"information will be collected regularly in order to enhance your user " +"experience.%sClick the 'Send support feedback' box and we'll make sure the " +"features you use are constantly improving." +msgstr "" +"W celu udoskonalenia programu Airtime, prosimy o przesłanie informacji " +"zwrotnej o sposobie uzytkowania. Informacje takie będą zbierane regualrnie w " +"celu poprawienia jakości uzytkowania. %s Kliknij \"Tak, chcę wesprzeć Airtime" +"\", dołożymy starań, by funkcje, których używasz, były stale ulepszane." + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:23 +#, php-format +msgid "Click the box below to promote your station on %sSourcefabric.org%s." +msgstr "" +"Kliknij w poniższe pole w celu zareklamowania swojej stacji na " +"%sSourcefabric.org%s." + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:41 +msgid "" +"(In order to promote your station, 'Send support feedback' must be enabled)." +msgstr "" +"(Aby promowac stację, należy udostepnić funkcję \"wyślij informację zwrotną" +"\")" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:186 +msgid "Sourcefabric Privacy Policy" +msgstr "Polityka prywatności Sourcefabric" + +#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:53 +msgid "Connection URL: " +msgstr "Połaczenie URL:" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:3 +msgid "Smart Block Options" +msgstr "Opcje smart blocku" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 +msgid " to " +msgstr "do" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:120 +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:133 +msgid "files meet the criteria" +msgstr "pliki spełniają kryteria" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:127 +msgid "file meet the criteria" +msgstr "plik spełnia kryteria" + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:3 +#: airtime_mvc/application/views/scripts/library/library.phtml:2 +msgid "File import in progress..." +msgstr "Importowanie plików w toku..." + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:5 +#: airtime_mvc/application/views/scripts/library/library.phtml:5 +msgid "Advanced Search Options" +msgstr "Zaawansowane opcje wyszukiwania" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2 +msgid "Stream Settings" +msgstr "Ustawienia strumienia" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:12 +msgid "Global Settings" +msgstr "Ustawienia ogólne" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 +msgid "dB" +msgstr "dB" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 +msgid "Output Stream Settings" +msgstr "Ustawienia strumienia wyjściowego" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:7 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:30 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:32 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:128 +msgid "Length:" +msgstr "Długość: " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:8 +msgid "Sample Rate:" +msgstr "Częstotliwość próbkowania:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 +msgid "Isrc Number:" +msgstr "Numer Isrc:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 +msgid "File Path:" +msgstr "Ścieżka pliku:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:39 +msgid "Web Stream" +msgstr "Web Stream" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 +msgid "Dynamic Smart Block" +msgstr "Smart block dynamiczny" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:41 +msgid "Static Smart Block" +msgstr "Smart block statyczny" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:42 +msgid "Audio Track" +msgstr "Ścieżka audio" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:48 +msgid "Playlist Contents: " +msgstr "Zawartość listy odtwarzania:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:50 +msgid "Static Smart Block Contents: " +msgstr "Zawartość statycznego Smart Blocka:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:89 +msgid "Dynamic Smart Block Criteria: " +msgstr "Kryteria dynamicznego Smart Blocku " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:118 +msgid "Limit to " +msgstr "Ogranicz(enie) do:" + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 +msgid "Please selection an option" +msgstr "Wybierz opcję" + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 +msgid "No Records" +msgstr "Brak danych" From 1f0b9fa5dc6b68451284a292250547f49d6bb897 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 4 Feb 2013 11:06:46 -0500 Subject: [PATCH 054/208] CC-4897: XSS exploit on library page --- airtime_mvc/application/controllers/LibraryController.php | 2 +- airtime_mvc/application/models/StoredFile.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 15ae12944..1e3ac996a 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -438,7 +438,7 @@ class LibraryController extends Zend_Controller_Action $formValues = $this->_getParam('data', null); $formdata = array(); foreach ($formValues as $val) { - $formdata[$val["name"]] = htmlspecialchars($val["value"]); + $formdata[$val["name"]] = $val["value"]; } $file->setDbColMetadata($formdata); diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 9ca6ff32c..cc0d64489 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -269,7 +269,7 @@ class Application_Model_StoredFile $md = array(); foreach ($this->_dbMD as $dbColumn => $propelColumn) { $method = "get$propelColumn"; - $md[$dbColumn] = $this->_file->$method(); + $md[$dbColumn] = htmlspecialchars($this->_file->$method()); } return $md; @@ -300,7 +300,7 @@ class Application_Model_StoredFile if (isset($dbmd_copy[$value])) { $propelColumn = $dbmd_copy[$value]; $method = "get$propelColumn"; - $md[$constant] = $this->_file->$method(); + $md[$constant] = htmlspecialchars($this->_file->$method()); } } } From 20a3f674b4e1642f62a55c00b87a7239f7c31912 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 4 Feb 2013 12:12:57 -0500 Subject: [PATCH 055/208] CC-4897: XSS exploit on library page -fixed where this was happening on Calendar - show content --- airtime_mvc/application/controllers/ScheduleController.php | 2 +- airtime_mvc/application/models/StoredFile.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 0b384911e..1f3216eed 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -479,7 +479,7 @@ class ScheduleController extends Zend_Controller_Action $this->view->percentFilled = $show->getPercentScheduled(); $this->view->showContent = $show->getShowListContent(); $this->view->dialog = $this->view->render('schedule/show-content-dialog.phtml'); - $this->view->showTitle = $show->getName(); + $this->view->showTitle = htmlspecialchars($show->getName()); unset($this->view->showContent); } diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index cc0d64489..9e69f0d28 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -300,7 +300,7 @@ class Application_Model_StoredFile if (isset($dbmd_copy[$value])) { $propelColumn = $dbmd_copy[$value]; $method = "get$propelColumn"; - $md[$constant] = htmlspecialchars($this->_file->$method()); + $md[$constant] = $this->_file->$method(); } } } From b45f71e8f9eb0806beb936d01d820df1481b7990 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 4 Feb 2013 12:44:14 -0500 Subject: [PATCH 056/208] CC-4897: XSS exploit on library page --- airtime_mvc/application/models/StoredFile.php | 2 +- airtime_mvc/application/views/scripts/playlist/update.phtml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 9e69f0d28..9ca6ff32c 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -269,7 +269,7 @@ class Application_Model_StoredFile $md = array(); foreach ($this->_dbMD as $dbColumn => $propelColumn) { $method = "get$propelColumn"; - $md[$dbColumn] = htmlspecialchars($this->_file->$method()); + $md[$dbColumn] = $this->_file->$method(); } return $md; diff --git a/airtime_mvc/application/views/scripts/playlist/update.phtml b/airtime_mvc/application/views/scripts/playlist/update.phtml index 20ef17665..a3a5b5b28 100644 --- a/airtime_mvc/application/views/scripts/playlist/update.phtml +++ b/airtime_mvc/application/views/scripts/playlist/update.phtml @@ -8,6 +8,7 @@ if ($item['type'] == 2) { $bl= new Application_Model_Block($item['item_id']); $staticBlock = $bl->isStatic(); } +$item["track_title"] = $this->escape($item["track_title"]); ?>

  • " unqid="">
    From 331386f74fb2d6b4c078aac273043994d113dd5b Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 4 Feb 2013 16:05:58 -0500 Subject: [PATCH 057/208] CC-4910: Need to properly handle non-200 http status codes in api client -fixed --- python_apps/api_clients/api_client.py | 128 +++++++----------- .../airtimemediamonitorbootstrap.py | 8 +- .../media-monitor2/media/monitor/syncdb.py | 46 ++++--- .../media-monitor2/media/saas/launcher.py | 10 +- .../generate_liquidsoap_cfg.py | 13 +- python_apps/pypo/listenerstat.py | 5 +- .../pypo/media/update/replaygainupdater.py | 14 +- python_apps/pypo/pypocli.py | 9 +- python_apps/pypo/pypofetch.py | 30 ++-- python_apps/pypo/recorder.py | 10 +- utils/airtime-import/airtime-import.py | 37 ++--- utils/airtime-silan/airtime-silan.py | 2 +- 12 files changed, 156 insertions(+), 156 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index a3dc3f41a..e8dbbd16a 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -146,7 +146,6 @@ class AirtimeApiClient(object): sys.exit(1) def __get_airtime_version(self): - # TODO : maybe fix this function to drop an exception? try: return self.services.version_url()[u'version'] except Exception: return -1 @@ -154,18 +153,18 @@ class AirtimeApiClient(object): logger = self.logger version = self.__get_airtime_version() # logger.info('Airtime version found: ' + str(version)) - if (version == -1): + if version == -1: if (verbose): logger.info('Unable to get Airtime version number.\n') return False - elif (version[0:3] != AIRTIME_VERSION[0:3]): - if (verbose): + elif version[0:3] != AIRTIME_VERSION[0:3]: + if verbose: logger.info('Airtime version found: ' + str(version)) logger.info('pypo is at version ' + AIRTIME_VERSION + ' and is not compatible with this version of Airtime.\n') return False else: - if (verbose): + if verbose: logger.info('Airtime version: ' + str(version)) logger.info('pypo is at version ' + AIRTIME_VERSION + ' and is compatible with this version of Airtime.') return True @@ -193,14 +192,6 @@ class AirtimeApiClient(object): self.logger.error(str(e)) return None - # TODO : get this routine out of here it doesn't belong at all here - def get_liquidsoap_data(self, pkey, schedule): - playlist = schedule[pkey] - data = dict() - try: data["schedule_id"] = playlist['id'] - except Exception: data["schedule_id"] = 0 - return data - def get_shows_to_record(self): try: return self.services.show_schedule_url() @@ -259,12 +250,12 @@ class AirtimeApiClient(object): url = url.replace("%%api_key%%", self.config["api_key"]) return url + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def setup_media_monitor(self): - try: - return self.services.media_setup_url() - except Exception, e: - #TODO - self.logger.info(str(e)) + return self.services.media_setup_url() def send_media_monitor_requests(self, action_list, dry=False): """ @@ -323,37 +314,40 @@ class AirtimeApiClient(object): self.logger.error("Could not find index 'files' in dictionary: %s", str(response)) return [] - + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def list_all_watched_dirs(self): - try: - return self.services.list_all_watched_dirs() - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.list_all_watched_dirs() + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def add_watched_dir(self, path): - try: - return self.services.add_watched_dir(path=base64.b64encode(path)) - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.add_watched_dir(path=base64.b64encode(path)) + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def remove_watched_dir(self, path): - try: - return self.services.remove_watched_dir(path=base64.b64encode(path)) - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.remove_watched_dir(path=base64.b64encode(path)) + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def set_storage_dir(self, path): return self.services.set_storage_dir(path=base64.b64encode(path)) + """ + Caller of this method needs to catch any exceptions such as + ValueError thrown by json.loads or URLError by urllib2.urlopen + """ def get_stream_setting(self): - logger = self.logger - try: return self.services.get_stream_setting() - except Exception, e: - logger.error("Exception: %s", e) - return None + return self.services.get_stream_setting() def register_component(self, component): """ Purpose of this method is to contact the server with a "Hey its @@ -361,11 +355,7 @@ class AirtimeApiClient(object): (component = media-monitor, pypo etc.) ip address, and later use it to query monit via monit's http service, or download log files via a http server. """ - try: - return self.services.register_component(component=component) - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.register_component(component=component) def notify_liquidsoap_status(self, msg, stream_id, time): logger = self.logger @@ -388,11 +378,7 @@ class AirtimeApiClient(object): def get_bootstrap_info(self): """ Retrieve infomations needed on bootstrap time """ - try: - return self.services.get_bootstrap_info() - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.get_bootstrap_info() def get_files_without_replay_gain_value(self, dir_id): """ @@ -404,8 +390,8 @@ class AirtimeApiClient(object): try: return self.services.get_files_without_replay_gain(dir_id=dir_id) except Exception, e: - #TODO self.logger.error(str(e)) + return [] def get_files_without_silan_value(self): """ @@ -416,20 +402,16 @@ class AirtimeApiClient(object): try: return self.services.get_files_without_silan_value() except Exception, e: - #TODO self.logger.error(str(e)) + return [] def update_replay_gain_values(self, pairs): """ 'pairs' is a list of pairs in (x, y), where x is the file's database row id and y is the file's replay_gain value in dB """ - try: - self.logger.debug(self.services.update_replay_gain_value( - _post_data={'data': json.dumps(pairs)})) - except Exception, e: - #TODO - self.logger.error(str(e)) + self.logger.debug(self.services.update_replay_gain_value( + _post_data={'data': json.dumps(pairs)})) def update_cue_values_by_silan(self, pairs): @@ -437,11 +419,7 @@ class AirtimeApiClient(object): 'pairs' is a list of pairs in (x, y), where x is the file's database row id and y is the file's cue values in dB """ - try: - print self.services.update_cue_values_by_silan(_post_data={'data': json.dumps(pairs)}) - except Exception, e: - #TODO - self.logger.error(str(e)) + return self.services.update_cue_values_by_silan(_post_data={'data': json.dumps(pairs)}) def notify_webstream_data(self, data, media_id): @@ -449,30 +427,18 @@ class AirtimeApiClient(object): Update the server with the latest metadata we've received from the external webstream """ - try: - self.logger.info( self.services.notify_webstream_data.req( - _post_data={'data':data}, media_id=str(media_id)).retry(5)) - except Exception, e: - #TODO - self.logger.error(str(e)) + self.logger.info( self.services.notify_webstream_data.req( + _post_data={'data':data}, media_id=str(media_id)).retry(5)) def get_stream_parameters(self): - try: - response = self.services.get_stream_parameters() - self.logger.debug(response) - return response - except Exception, e: - #TODO - self.logger.error(str(e)) + response = self.services.get_stream_parameters() + self.logger.debug(response) + return response def push_stream_stats(self, data): # TODO : users of this method should do their own error handling - try: - response = self.services.push_stream_stats(_post_data={'data': json.dumps(data)}) - return response - except Exception, e: - #TODO - self.logger.error(str(e)) + response = self.services.push_stream_stats(_post_data={'data': json.dumps(data)}) + return response def update_stream_setting_table(self, data): try: diff --git a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py index 7a57a74e6..02b6cf2cf 100644 --- a/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py +++ b/python_apps/media-monitor/airtimefilemonitor/airtimemediamonitorbootstrap.py @@ -58,18 +58,18 @@ class AirtimeMediaMonitorBootstrap(): """ returns the path and its corresponding database row idfor all watched directories. Also returns the Stor directory, which can be identified by its row id (always has value of "1") - + Return type is a dictionary similar to: {"1":"/srv/airtime/stor/"} """ def get_list_of_watched_dirs(self): json = self.api_client.list_all_watched_dirs() - + try: return json["dirs"] except KeyError as e: self.logger.error("Could not find index 'dirs' in dictionary: %s", str(json)) - self.logger.error(e) + self.logger.error(str(e)) return {} """ @@ -94,7 +94,7 @@ class AirtimeMediaMonitorBootstrap(): db_known_files_set = set() files = self.list_db_files(dir_id) - + for f in files: db_known_files_set.add(f) diff --git a/python_apps/media-monitor2/media/monitor/syncdb.py b/python_apps/media-monitor2/media/monitor/syncdb.py index 786fb1a39..dd837b2a1 100644 --- a/python_apps/media-monitor2/media/monitor/syncdb.py +++ b/python_apps/media-monitor2/media/monitor/syncdb.py @@ -19,31 +19,35 @@ class AirtimeDB(Loggable): saas = user().root_path - # dirs_setup is a dict with keys: - # u'watched_dirs' and u'stor' which point to lists of corresponding - # dirs - dirs_setup = self.apc.setup_media_monitor() - dirs_setup[u'stor'] = normpath( join(saas, dirs_setup[u'stor'] ) ) - dirs_setup[u'watched_dirs'] = map(lambda p: normpath(join(saas,p)), - dirs_setup[u'watched_dirs']) - dirs_with_id = dict([ (k,normpath(v)) for k,v in - self.apc.list_all_watched_dirs()['dirs'].iteritems() ]) + try: + # dirs_setup is a dict with keys: + # u'watched_dirs' and u'stor' which point to lists of corresponding + # dirs + dirs_setup = self.apc.setup_media_monitor() + dirs_setup[u'stor'] = normpath( join(saas, dirs_setup[u'stor'] ) ) + dirs_setup[u'watched_dirs'] = map(lambda p: normpath(join(saas,p)), + dirs_setup[u'watched_dirs']) + dirs_with_id = dict([ (k,normpath(v)) for k,v in + self.apc.list_all_watched_dirs()['dirs'].iteritems() ]) - self.id_to_dir = dirs_with_id - self.dir_to_id = dict([ (v,k) for k,v in dirs_with_id.iteritems() ]) + self.id_to_dir = dirs_with_id + self.dir_to_id = dict([ (v,k) for k,v in dirs_with_id.iteritems() ]) - self.base_storage = dirs_setup[u'stor'] - self.storage_paths = mmp.expand_storage( self.base_storage ) - self.base_id = self.dir_to_id[self.base_storage] + self.base_storage = dirs_setup[u'stor'] + self.storage_paths = mmp.expand_storage( self.base_storage ) + self.base_id = self.dir_to_id[self.base_storage] - # hack to get around annoying schema of airtime db - self.dir_to_id[ self.recorded_path() ] = self.base_id - self.dir_to_id[ self.import_path() ] = self.base_id + # hack to get around annoying schema of airtime db + self.dir_to_id[ self.recorded_path() ] = self.base_id + self.dir_to_id[ self.import_path() ] = self.base_id + + # We don't know from the x_to_y dict which directory is watched or + # store... + self.watched_directories = set([ os.path.normpath(p) for p in + dirs_setup[u'watched_dirs'] ]) + except Exception, e: + self.logger.info(str(e)) - # We don't know from the x_to_y dict which directory is watched or - # store... - self.watched_directories = set([ os.path.normpath(p) for p in - dirs_setup[u'watched_dirs'] ]) def to_id(self, directory): """ directory path -> id """ diff --git a/python_apps/media-monitor2/media/saas/launcher.py b/python_apps/media-monitor2/media/saas/launcher.py index 6aacb8e40..83a972311 100644 --- a/python_apps/media-monitor2/media/saas/launcher.py +++ b/python_apps/media-monitor2/media/saas/launcher.py @@ -85,7 +85,15 @@ class MM2(InstanceThread, Loggable): ToucherThread(path=user().touch_file_path(), interval=int(config['touch_interval'])) - apiclient.register_component('media-monitor') + success = False + while not success: + try: + apiclient.register_component('media-monitor') + success = True + except Exception, e: + self.logger.error(str(e)) + import time + time.sleep(10) manager.loop() diff --git a/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py b/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py index 20d99976f..b123763e2 100644 --- a/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py +++ b/python_apps/pypo/liquidsoap_scripts/generate_liquidsoap_cfg.py @@ -26,13 +26,10 @@ def generate_liquidsoap_config(ss): logging.basicConfig(format='%(message)s') ac = AirtimeApiClient(logging.getLogger()) -ss = ac.get_stream_setting() - -if ss is not None: - try: - generate_liquidsoap_config(ss) - except Exception, e: - logging.error(e) -else: +try: + ss = ac.get_stream_setting() + generate_liquidsoap_config(ss) +except Exception, e: + logging.error(str(e)) print "Unable to connect to the Airtime server." sys.exit(1) diff --git a/python_apps/pypo/listenerstat.py b/python_apps/pypo/listenerstat.py index e6a272703..18dbd4f1e 100644 --- a/python_apps/pypo/listenerstat.py +++ b/python_apps/pypo/listenerstat.py @@ -103,7 +103,10 @@ class ListenerStat(Thread): self.update_listener_stat_error(v["mount"], 'OK') except Exception, e: self.logger.error('Exception: %s', e) - self.update_listener_stat_error(v["mount"], str(e)) + try: + self.update_listener_stat_error(v["mount"], str(e)) + except Exception, e: + self.logger.error('Exception: %s', e) return stats diff --git a/python_apps/pypo/media/update/replaygainupdater.py b/python_apps/pypo/media/update/replaygainupdater.py index 2f52c0a23..42f218ac5 100644 --- a/python_apps/pypo/media/update/replaygainupdater.py +++ b/python_apps/pypo/media/update/replaygainupdater.py @@ -67,15 +67,15 @@ class ReplayGainUpdater(Thread): self.logger.error(e) self.logger.debug(traceback.format_exc()) def run(self): - try: - while True: - self.logger.info("Runnning replaygain updater") + while True: + try: + self.logger.info("Running replaygain updater") self.main() # Sleep for 5 minutes in case new files have been added - time.sleep(60 * 5) - except Exception, e: - self.logger.error('ReplayGainUpdater Exception: %s', traceback.format_exc()) - self.logger.error(e) + except Exception, e: + self.logger.error('ReplayGainUpdater Exception: %s', traceback.format_exc()) + self.logger.error(e) + time.sleep(60 * 5) if __name__ == "__main__": rgu = ReplayGainUpdater() diff --git a/python_apps/pypo/pypocli.py b/python_apps/pypo/pypocli.py index 93a1718aa..42cef00cc 100644 --- a/python_apps/pypo/pypocli.py +++ b/python_apps/pypo/pypocli.py @@ -179,7 +179,14 @@ if __name__ == '__main__': ReplayGainUpdater.start_reply_gain(api_client) - api_client.register_component("pypo") + success = False + while not success: + try: + api_client.register_component('pypo') + success = True + except Exception, e: + logger.error(str(e)) + time.sleep(10) pypoFetch_q = Queue() recorder_q = Queue() diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index 2d6ad0fb5..3e029e8f5 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -206,23 +206,25 @@ class PypoFetch(Thread): """ def set_bootstrap_variables(self): self.logger.debug('Getting information needed on bootstrap from Airtime') - info = self.api_client.get_bootstrap_info() - if info is None: + try: + info = self.api_client.get_bootstrap_info() + except Exception, e: self.logger.error('Unable to get bootstrap info.. Exiting pypo...') - else: - self.logger.debug('info:%s', info) - commands = [] - for k, v in info['switch_status'].iteritems(): - commands.append(self.switch_source_temp(k, v)) + self.logger.error(str(e)) - stream_format = info['stream_label'] - station_name = info['station_name'] - fade = info['transition_fade'] + self.logger.debug('info:%s', info) + commands = [] + for k, v in info['switch_status'].iteritems(): + commands.append(self.switch_source_temp(k, v)) - commands.append(('vars.stream_metadata_type %s\n' % stream_format).encode('utf-8')) - commands.append(('vars.station_name %s\n' % station_name).encode('utf-8')) - commands.append(('vars.default_dj_fade %s\n' % fade).encode('utf-8')) - PypoFetch.telnet_send(self.logger, self.telnet_lock, commands) + stream_format = info['stream_label'] + station_name = info['station_name'] + fade = info['transition_fade'] + + commands.append(('vars.stream_metadata_type %s\n' % stream_format).encode('utf-8')) + commands.append(('vars.station_name %s\n' % station_name).encode('utf-8')) + commands.append(('vars.default_dj_fade %s\n' % fade).encode('utf-8')) + PypoFetch.telnet_send(self.logger, self.telnet_lock, commands) def restart_liquidsoap(self): diff --git a/python_apps/pypo/recorder.py b/python_apps/pypo/recorder.py index fbabc1b57..70d99144d 100644 --- a/python_apps/pypo/recorder.py +++ b/python_apps/pypo/recorder.py @@ -189,9 +189,17 @@ class Recorder(Thread): self.server_timezone = '' self.queue = q self.loops = 0 - self.api_client.register_component("show-recorder") self.logger.info("RecorderFetch: init complete") + success = False + while not success: + try: + self.api_client.register_component('show-recorder') + success = True + except Exception, e: + self.logger.error(str(e)) + time.sleep(10) + def handle_message(self): if not self.queue.empty(): message = self.queue.get() diff --git a/utils/airtime-import/airtime-import.py b/utils/airtime-import/airtime-import.py index 2b3ce03cd..97d4c4e35 100644 --- a/utils/airtime-import/airtime-import.py +++ b/utils/airtime-import/airtime-import.py @@ -75,15 +75,16 @@ def format_dir_string(path): return path def helper_get_stor_dir(): - res = api_client.list_all_watched_dirs() - if(res is None): + try: + res = api_client.list_all_watched_dirs() + except Exception, e: return res + + if(res['dirs']['1'][-1] != '/'): + out = res['dirs']['1']+'/' + return out else: - if(res['dirs']['1'][-1] != '/'): - out = res['dirs']['1']+'/' - return out - else: - return res['dirs']['1'] + return res['dirs']['1'] def checkOtherOption(args): for i in args: @@ -162,8 +163,9 @@ def WatchAddAction(option, opt, value, parser): path = apc.encode_to(path, 'utf-8') if(os.path.isdir(path)): #os.chmod(path, 0765) - res = api_client.add_watched_dir(path) - if(res is None): + try: + res = api_client.add_watched_dir(path) + except Exception, e: exit("Unable to connect to the server.") # sucess if(res['msg']['code'] == 0): @@ -179,8 +181,9 @@ def WatchListAction(option, opt, value, parser): errorIfMultipleOption(parser.rargs) if(len(parser.rargs) > 0): raise OptionValueError("This option doesn't take any arguments.") - res = api_client.list_all_watched_dirs() - if(res is None): + try: + res = api_client.list_all_watched_dirs() + except Exception, e: exit("Unable to connect to the Airtime server.") dirs = res["dirs"].items() # there will be always 1 which is storage folder @@ -204,8 +207,9 @@ def WatchRemoveAction(option, opt, value, parser): path = currentDir+path path = apc.encode_to(path, 'utf-8') if(os.path.isdir(path)): - res = api_client.remove_watched_dir(path) - if(res is None): + try: + res = api_client.remove_watched_dir(path) + except Exception, e: exit("Unable to connect to the Airtime server.") # sucess if(res['msg']['code'] == 0): @@ -249,10 +253,11 @@ def StorageSetAction(option, opt, value, parser): path = currentDir+path path = apc.encode_to(path, 'utf-8') if(os.path.isdir(path)): - res = api_client.set_storage_dir(path) - if(res is None): + try: + res = api_client.set_storage_dir(path) + except Exception, e: exit("Unable to connect to the Airtime server.") - # sucess + # success if(res['msg']['code'] == 0): print "Successfully set storage folder to %s" % path else: diff --git a/utils/airtime-silan/airtime-silan.py b/utils/airtime-silan/airtime-silan.py index d5f691698..bd8a0af4d 100644 --- a/utils/airtime-silan/airtime-silan.py +++ b/utils/airtime-silan/airtime-silan.py @@ -68,7 +68,7 @@ try: subtotal += total total = 0 try: - api_client.update_cue_values_by_silan(processed_data) + print api_client.update_cue_values_by_silan(processed_data) except Exception ,e: print e print traceback.format_exc() From e2472f1f5d0b86b84c6918319d64fd0c9430340a Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 4 Feb 2013 16:21:56 -0500 Subject: [PATCH 058/208] CC-4913: System -> Media Folder: Exception happens when media folder's path contains '<' --- .../controllers/PreferenceController.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index e68e6c603..0f97756de 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -139,17 +139,13 @@ class PreferenceController extends Zend_Controller_Action { $CC_CONFIG = Config::getConfig(); - if(Application_Model_Preference::GetPlanLevel() == 'disabled'){ - - $baseUrl = Application_Common_OsPath::getBaseDir(); + $baseUrl = Application_Common_OsPath::getBaseDir(); - $this->view->headScript()->appendFile($baseUrl.'js/serverbrowse/serverbrowser.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $this->view->headScript()->appendFile($baseUrl.'js/airtime/preferences/musicdirs.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'js/serverbrowse/serverbrowser.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'js/airtime/preferences/musicdirs.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); - $watched_dirs_pref = new Application_Form_WatchedDirPreferences(); - - $this->view->form = $watched_dirs_pref; - } + $watched_dirs_pref = new Application_Form_WatchedDirPreferences(); + $this->view->form = $watched_dirs_pref; } public function streamSettingAction() From 60d6f5585bd4d6ece750b4b54813f38e864680bb Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 4 Feb 2013 16:27:09 -0500 Subject: [PATCH 059/208] CC-4913: System -> Media Folder: Exception happens when media folder's path contains '<' --- .../views/scripts/form/preferences_watched_dirs.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml index ad8e77797..6c3030903 100644 --- a/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml +++ b/airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml @@ -39,7 +39,7 @@ 0): ?>
    - getExistsFlag())?"":""?>getDirectory();?> + getExistsFlag())?"":""?>getDirectory());?> " class="ui-icon ui-icon-refresh"> " class="ui-icon ui-icon-close"> From 74bc485b4b948ae1e62fa6e6d37e101d071e807a Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 10:56:38 -0500 Subject: [PATCH 060/208] XSS exploit prevention - Calendar - Show Contents - Playlist tooltip in Library page - Adding track to a show - Widgets - Playlist/Webstream title and description - Smart block expansion --- .../application/controllers/ApiController.php | 30 +++++++++++++++++-- airtime_mvc/application/models/Block.php | 6 +++- airtime_mvc/application/models/Playlist.php | 4 +++ .../application/models/ShowBuilder.php | 6 ++-- .../library/get-file-metadata.ajax.phtml | 23 ++++++++++++-- .../views/scripts/playlist/smart-block.phtml | 2 +- .../views/scripts/playlist/update.phtml | 1 - .../views/scripts/webstream/webstream.phtml | 2 +- 8 files changed, 63 insertions(+), 11 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 6bbe480da..62823103d 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -261,7 +261,14 @@ class ApiController extends Zend_Controller_Action "currentShow"=>Application_Model_Show::getCurrentShow($utcTimeNow), "nextShow"=>Application_Model_Show::getNextShows($utcTimeNow, $limit, $utcTimeEnd) ); - + // XSS exploit prevention + foreach ($result["currentShow"] as &$current) { + $current["name"] = htmlspecialchars($current["name"]); + } + foreach ($result["nextShow"] as &$next) { + $next["name"] = htmlspecialchars($next["name"]); + } + Application_Model_Show::convertToLocalTimeZone($result["currentShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); Application_Model_Show::convertToLocalTimeZone($result["nextShow"], @@ -269,6 +276,17 @@ class ApiController extends Zend_Controller_Action } else { $result = Application_Model_Schedule::GetPlayOrderRange(); + // XSS exploit prevention + $result["previous"]["name"] = htmlspecialchars($result["previous"]["name"]); + $result["current"]["name"] = htmlspecialchars($result["current"]["name"]); + $result["next"]["name"] = htmlspecialchars($result["next"]["name"]); + foreach ($result["currentShow"] as &$current) { + $current["name"] = htmlspecialchars($current["name"]); + } + foreach ($result["nextShow"] as &$next) { + $next["name"] = htmlspecialchars($next["name"]); + } + //Convert from UTC to localtime for Web Browser. Application_Model_Show::ConvertToLocalTimeZone($result["currentShow"], array("starts", "ends", "start_timestamp", "end_timestamp")); @@ -315,7 +333,15 @@ class ApiController extends Zend_Controller_Action $result[$dow[$i]] = $shows; } - + + // XSS exploit prevention + foreach ($dow as $d) { + foreach ($result[$d] as &$show) { + $show["name"] = htmlspecialchars($show["name"]); + $show["url"] = htmlspecialchars($show["url"]); + } + } + //used by caller to determine if the airtime they are running or widgets in use is out of date. $result['AIRTIME_API_VERSION'] = AIRTIME_API_VERSION; header("Content-type: text/javascript"); diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 7053e658d..ffe15ac56 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -257,6 +257,10 @@ SQL; //format original length $formatter = new LengthFormatter($row['orig_length']); $row['orig_length'] = $formatter->format(); + + // XSS exploit prevention + $row["track_title"] = htmlspecialchars($row["track_title"]); + $row["creator"] = htmlspecialchars($row["creator"]); } return $rows; @@ -1241,7 +1245,7 @@ SQL; foreach ($out as $crit) { $criteria = $crit->getDbCriteria(); $modifier = $crit->getDbModifier(); - $value = $crit->getDbValue(); + $value = htmlspecialchars($crit->getDbValue()); $extra = $crit->getDbExtra(); if ($criteria == "limit") { diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 1c446f182..6745eecc6 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -269,6 +269,10 @@ SQL; //format original length $formatter = new LengthFormatter($row['orig_length']); $row['orig_length'] = $formatter->format(); + + // XSS exploit prevention + $row["track_title"] = htmlspecialchars($row["track_title"]); + $row["creator"] = htmlspecialchars($row["creator"]); } return $rows; diff --git a/airtime_mvc/application/models/ShowBuilder.php b/airtime_mvc/application/models/ShowBuilder.php index 72a5f6ab0..fd85487db 100644 --- a/airtime_mvc/application/models/ShowBuilder.php +++ b/airtime_mvc/application/models/ShowBuilder.php @@ -275,9 +275,9 @@ class Application_Model_ShowBuilder $formatter = new LengthFormatter(Application_Common_DateHelper::ConvertMSToHHMMSSmm($run_time*1000)); $row['runtime'] = $formatter->format(); - $row["title"] = $p_item["file_track_title"]; - $row["creator"] = $p_item["file_artist_name"]; - $row["album"] = $p_item["file_album_title"]; + $row["title"] = htmlspecialchars($p_item["file_track_title"]); + $row["creator"] = htmlspecialchars($p_item["file_artist_name"]); + $row["album"] = htmlspecialchars($p_item["file_album_title"]); $row["cuein"] = $p_item["cue_in"]; $row["cueout"] = $p_item["cue_out"]; 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 4b1a38839..0e0d9cbcb 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,3 +1,9 @@ +md as $key => &$value) { + $value = $this->escape($value); +} +?> type == "audioclip") : ?> @@ -41,9 +47,18 @@ o
    o + type == "playlist" || ($this->type == "block" && $this->blType == "Static")) {?> + contents as &$item) { + foreach ($item as $key => &$value) { + $value = $this->escape($value); + } + }*/ + ?> type == "playlist") { ?>
    @@ -88,9 +103,13 @@ blType == "Dynamic") { ?>
    md["MDATA_KEY_TITLE"]);?>
    - contents["crit"] as $criterias) : ?> - + contents["crit"] as &$criterias) : ?> + $valMaxStrLen) { $crit["value"] = substr($crit["value"], 0, 24)."..."; diff --git a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml index b1ca48da5..59ea2ce95 100644 --- a/airtime_mvc/application/views/scripts/playlist/smart-block.phtml +++ b/airtime_mvc/application/views/scripts/playlist/smart-block.phtml @@ -39,7 +39,7 @@ if (isset($this->obj)) { unsavedName)) echo $this->unsavedName; - else echo $this->obj->getName(); + else echo $this->escape($this->obj->getName()); ?> diff --git a/airtime_mvc/application/views/scripts/playlist/update.phtml b/airtime_mvc/application/views/scripts/playlist/update.phtml index a3a5b5b28..20ef17665 100644 --- a/airtime_mvc/application/views/scripts/playlist/update.phtml +++ b/airtime_mvc/application/views/scripts/playlist/update.phtml @@ -8,7 +8,6 @@ if ($item['type'] == 2) { $bl= new Application_Model_Block($item['item_id']); $staticBlock = $bl->isStatic(); } -$item["track_title"] = $this->escape($item["track_title"]); ?>
  • " unqid="">
    diff --git a/airtime_mvc/application/views/scripts/webstream/webstream.phtml b/airtime_mvc/application/views/scripts/webstream/webstream.phtml index 34131aabd..1c3657a75 100644 --- a/airtime_mvc/application/views/scripts/webstream/webstream.phtml +++ b/airtime_mvc/application/views/scripts/webstream/webstream.phtml @@ -29,7 +29,7 @@

    - obj->getName(); ?> + escape($this->obj->getName()); ?>

    obj->getDefaultLength(); ?>

    From b5eededd05cc04da5642ddcd801da191feaf723b Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 11:14:53 -0500 Subject: [PATCH 061/208] New French po file --- .../locale/fr_FR/LC_MESSAGES/airtime.mo | Bin 64826 -> 64831 bytes .../locale/fr_FR/LC_MESSAGES/airtime.po | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.mo index e90db0ef5e4afced295932ce00cf33c71d3a8bae..eabbed19ca1161dc745e519689a8bbf88af6ad00 100644 GIT binary patch delta 4977 zcmXZgdsLT29>?(q5E0~}2m;FGhj;@cxr&+rk(^drIV`yzV$G7&R!`=p)~=WKx2Wxr zJ?bW#${uphS+6aN<`Km3UKwg@CYl;4CZeuFUP3KEZTJ0g=C9Yx{GOTl&Ue1ggSDs2 z>tL7Hjw?}af5&lBsvRd9voIK^U_X2lV{ip_$0|(2YV^SCsQIlJgg>F?`_wp2DE7lB zOhPZrLtiYgzfZ1l+>a;BWgwOx-o<#_ihZyFL+~mppf2>m&|Qubfl-)%8R)`d^v0#w z6H8G6u0gH00sCXE{r%J~w>jBG1_JouDt5!W*b6(*g}${WLkXx%j6(&Ik2+ByD!^h? zK=0ra_#yVdGpOe;qMo~kq3Ge>Z5|9mMK~5$V<9SlR@4R$P!qgAHugs?n2dvP6z1T| zc6;P5TC-&Fd5zdqY+3Wxz2HVV>T*91vnJnKt;R`BXB3`u8*VUT|mui zLk0W@hhyL#vtcGG&>U24j7Jx~gag^%`J-t#8?8rC#ds4{JpOx45hmaW`r}b2DnXra zB`Py(u`gDk0{RTK@fp-}O_+_>a4Zhl=Qy71@4QY!shNX%a2_hs#i-Q(6*KYgs4Myg zRb=0zYM~tmU?-}EBKJE^DkflmoPr8yAu6C1I11lKfA)7y&2KYYRru?|a0|Pr@AfFQ78A7JYCND$`ZAzvBq` z*TBbiU>^>mf7m|QiaOaX^v1i`9XqYgQPcN96<;7~y%^NSarihhsCgq$ujSLI*L2oV z^6x`q4Fmd6tVd;}5|i)(`eDE^V>qh#;!yL3V=QK%GW8<%!?#fzu0}myjw;Sg=!<(% z0eW;UgCe)xm)}ijU9<%TqYQwNEP01}RfpgFgx1!eF zX{|-Ay9af32QfnL{}CEWRWs_n??P=DaKdCH8g;j+=!^N*BGksyP;bvF)H<6`Dc+BI zYno62Kg2)``O5qrhq>(UJWE4Al%gUoN2Trq)JZm@Qnmw?!fMoWdr&7ifGWCr)N{?K ztGt47*om4Kb<%Oh;6T*+Q_-z2(<~ZF{bJM!mY@QvK;3aA24F4f`NOD8okd;I4a~(K zQ5hN2V4k0WgXzylty6*8XDhmJTLbym11A_5fcH_U4nJi+o$1({{;yCed=-C#i|`#h zhdKD`(|pFU97m(~*XEB`Hfp_@sCE8~s)2IU6|Mi8{OcRNp8=h)5jEkz7>wP{m=lJf zo*Re?BpdZNp%6819qP5)j8S+JgYXt=qn}apqR*NPjX-7Y6*moSI2(0We?g^wI}XDA zsD)Zk@BLj=QTd!RS2Y-w(kxUhK=3!FisMlM zWTEaX54BJcD$uvE1j{f9LmJH&FceHHy5m=1Mz+&5f4@2o!qF&2G7=m9|zeC;mJq*Y0=gk$wU_bg9kLCUgXlUYW zRH~L>7_PxNxD8zxb-@IhiP|s+mGWPru4JO^&%<8y7onb8fx61I)_thg?=lW!f2Yk3 zgf*GST&N;?3boLSs3Mz%s)awG-kRk&1V6IB?GpE&PUBMs6hH@RBd=!jI)&gk`dL_nrKo_eSldt=x1&-TblC(Dj>=G~?H8c} zcneh%rPv=UF1yX$?6wayp*HvdwO|J-r5-J&+9OdPkO`=_qyVFFDk>v?LS5D0P$&PV zbvtU_UexP)2tBdhO~Z@EG1P`%qEd4fW3dfYJONkC@2RM&AA>qc0cxRX=;y)fhb!sN zy~;-noomz&T*p+*VQ>PzjpNaMn1((GLD$V6ha8O452%edqVDV%>Q0+cC-%5u7IvZL zFT^Kt8*1JKJMP(P{@sv{3ZMvca24jUjnhD5IRmaX^I`cHYNKJ_oBxn_9<%8$!hyIC zb+^svg*|SXl=`EKelY4SNwwq8qONotF2j6OEu6t{_IGaB2Rv_?RQjS8_D65*h0kDL zJ6?!S(4UM6Sc=`S2KAw;LtV{jRB>KK6`SX6vvD-4pQ1kdJ9#v8=f$XE`#ol18ES!3 z=#RHiHSrL&K=d8+WgCsk$O||O7ov)Bi?t4Q;^V0Kmrz&a`2+dar*qc(gGgK-mT-fq;V_^kDIJNZ}j_PA@RyQeh- z0~n9OKpcjOcrVFH(tRE`q4j{3`{~5=~5huAEG|B4VaBVKM@4x<8!#n zO=C2TN0^NxJIviLz;X2Ja3p$ln%8Fxrqll&rr;LTbB(Cf$90)c_j4FT|4mHA5>$qE zp)!5|l@a$RG*spFs7xG3J=lb*@@uGt`#dlUXP}B`D*EA4RK`}J7G8t8vT{_4x1uum zZ|sc+Z2u(s>iut_p@nXuCUl@8duYc!9-6E0M~#QregrDeSlds)82Txw0~J^cQ5l$m znOKG@`UVWs{|jlNp{l=++Q9RXdBDfo2UQC(sON^D0#2*$ObVUqmy(#2?n+J`ot#!3 hUe+(xFZT`CtJ7Vx=ggj7ol(6$(&L%xGhaNJCO&DlN^T>m$ruGLIOKc2@KvY+d-S57`52 zt;inQJzCc;L(Q#;dt24&FrlI;p+sEgQkN3<#P)hS=db5E=XWlj@8^8J-)MI|^xN^! zZ{zunp1(0By~3DS%)(F{h0*vb#^D@nfvd0&u16m{hpq4ehTtvKdf!T8!Z92>Vh{Ag zp%{qy?)QL}4T*VLHZRAvVWZ*b+-o z0WLu8w*+Hwll%SPX3sv^aRyrRLp?Ub>(~ZwV>~w7Vl$M8%EVw)AbF@KDnJEThzjWU zn2aA|03JroKaQGr2E(z@qoIkRTWy2`aUuNzQ~(!H2i!$1Fx#x{Q5z;>BKE;SINFUb zK^-tj76x+6#C+;Kv z{xlXapby0dsEm|jDjvfi4A^fCLls{vYF!d`!gN%ohGR6ojymvN)ci73aW2C^+=2@5 zOV14)LOppcDv-yhnrQhSV=^!Swc%(~5f)(=EJoe+-|;Ejgh_ZDwZ7Q_V|rpo)Vw^5 z!{4AX<;|v{6wN_>YTrdgwgMH<2Iu#fK>rbHfmvxw`U$|pJk{NZ$rH` zwWxsaVK9b#Yk!Z$T+TNGXy}JhRK#Vd)V+^-lI5tBtwp79J!;-&)RSyS72R&sypyP_ zJdItj0ktmjurbeI9BTiu=;_Nek%m$~1N8(mQ2{N+mROFhaT99(E>xzfQCD;xbMYrs zMl!4I{37g1e=2I9#i(;uVmz*{CjXkSpMlPJ6P4<)Blgpoif!rt9F@Xf;~1QdGw}!x z!e4yHKUS~|v(VJoKVI3W{U)IHc^g#&WvDCqpoaYG8@-JIJz))M!C4H&|Dm2R^m{um z4i!i?>Tf~;YTY8#YquOb;sFf7%cz4Mpw>klwHZo7?K{S!p#xt*-PNB_sb7PMxDB;Y z9qPTmjw&kOWA>^#p;DTKs)ZcX0}Vmd#01oXc&PmsVLEPceeW`j_6)SHwN;#e3Lp!0 zXG2jNjX(wZ8orJ5F%?6O+b>`aYTkHM4a{_|LKS5->YN%>fLD?IJmY`DR&xTXO1q&B z?uGiaW@8iHW5_|Z=&9s+4vNG;`&EWPxb(nsdjbtt?Guu>F1#WT8{nk6Z8sc zT%w^5&2y*i-Moa|=}$&o$@{24mb%|JpfYs;`(hn-z=(PqKp%{w|01f&r=kKX!6%tT zWqfr#_n$%Ia|RT^ZPY=JQLj_T843`ya5R>p0y^!yh&uQhDy2bZZ2)1Y45hgK2vh*C zp=zQOV{q|V&)&_aZbB{UfFDsC-bSUg5mPbZoc(|dLA@pU7>i?38TljXs{V?4@{gQr zP#>NxsMmET`r>Ynh98YRr~~(*Qd5nc@FJ>s0?ymtQ&3f(iF%TJ)JEel$cNVt=hL5j zfq$UlBOHb2F4}*T_Gd7k{_FSxdb?=ogAjDd{&DD!UFg4sI(RAS&i0`0^d#zu8&Mm_ zT(;|rF@^qW)VgDCya^NNr(UrEjKD$k=ixBD|5Y^RG7xjsepvp2I;iW9_CF+^!yNk4 zQ5$VV-R(*AL%(Y_rT!RCzcuPDNpa%?P**w_OEC{s3x_e1^UZlTp$V1BX4mb;{@9#; zOZ*wOb>jt?On)RMVJSAl4X6)QCF*Jpp^CE}RcuYDgQITPeoqYJd^41W?z|9HY;WK| zoR8YzAhyCQsG7Kk+A!*-{jz1CGBON%U@@u~S2!zC2k%9#{{eMHP3Y-U+vO*FhrLh- zjdxDPc={!nf=f_$Uxfn-4 z>q<}=+K9^dc2q{Z&uFO1ccU_~7d5dKRpn<;8wWqK8>gd+XeztN6|p!)4lfp&2HM2w@~6ZJs( z&H_{hM&SUQk1F~qjL`oJsimQ+zll1y$xZNWvJ-<*2S%gjbw&l;tKvawcu`PV&$NvA jw9Ks3-W8FHqB}Kzc53k(MHSCfEa~8rTXEvsi9P=hu1}k^ diff --git a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po index 88b8dea61..6cb4b1300 100644 --- a/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/fr_FR/LC_MESSAGES/airtime.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Airtime 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-15 10:36-0500\n" -"PO-Revision-Date: 2013-01-15 17:03-0500\n" +"PO-Revision-Date: 2013-02-05 11:14-0500\n" "Last-Translator: Denise Rigato \n" "Language-Team: French Localization \n" "MIME-Version: 1.0\n" @@ -1124,7 +1124,7 @@ msgstr "Nom de la Station - Nom de l'Emission" #: airtime_mvc/application/forms/StreamSetting.php:63 msgid "Off Air Metadata" -msgstr "Métadonnées Hors Entenne" +msgstr "Métadonnées Hors Antenne" #: airtime_mvc/application/forms/StreamSetting.php:69 msgid "Enable Replay Gain" @@ -1745,7 +1745,7 @@ msgstr "Emission en Cours:" #: airtime_mvc/application/controllers/LocaleController.php:41 msgid "Current" -msgstr "Courant" +msgstr "En ce moment" #: airtime_mvc/application/controllers/LocaleController.php:43 msgid "You are running the latest version" From 23c29455d94b9815b0fc89cf5c6493f569f5f9b9 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 13:18:25 -0500 Subject: [PATCH 062/208] Modified schema.xml - made cue_in and cue_out required columns in cc_scheuled and removed default values --- airtime_mvc/application/configs/airtime-conf.php | 2 +- .../models/airtime/map/CcScheduleTableMap.php | 4 ++-- .../models/airtime/om/BaseCcSchedule.php | 16 ++-------------- airtime_mvc/build/build.properties | 2 +- airtime_mvc/build/schema.xml | 4 ++-- airtime_mvc/build/sql/schema.sql | 4 ++-- .../upgrades/airtime-2.3.0/data/upgrade.sql | 2 ++ 7 files changed, 12 insertions(+), 22 deletions(-) diff --git a/airtime_mvc/application/configs/airtime-conf.php b/airtime_mvc/application/configs/airtime-conf.php index c717a858e..aa69b6156 100644 --- a/airtime_mvc/application/configs/airtime-conf.php +++ b/airtime_mvc/application/configs/airtime-conf.php @@ -1,6 +1,6 @@ array ( diff --git a/airtime_mvc/application/models/airtime/map/CcScheduleTableMap.php b/airtime_mvc/application/models/airtime/map/CcScheduleTableMap.php index 5478ac8d2..8c1d00dd2 100644 --- a/airtime_mvc/application/models/airtime/map/CcScheduleTableMap.php +++ b/airtime_mvc/application/models/airtime/map/CcScheduleTableMap.php @@ -46,8 +46,8 @@ class CcScheduleTableMap extends TableMap { $this->addColumn('CLIP_LENGTH', 'DbClipLength', 'VARCHAR', false, null, '00:00:00'); $this->addColumn('FADE_IN', 'DbFadeIn', 'TIME', false, null, '00:00:00'); $this->addColumn('FADE_OUT', 'DbFadeOut', 'TIME', false, null, '00:00:00'); - $this->addColumn('CUE_IN', 'DbCueIn', 'VARCHAR', false, null, '00:00:00'); - $this->addColumn('CUE_OUT', 'DbCueOut', 'VARCHAR', false, null, '00:00:00'); + $this->addColumn('CUE_IN', 'DbCueIn', 'VARCHAR', true, null, null); + $this->addColumn('CUE_OUT', 'DbCueOut', 'VARCHAR', true, null, null); $this->addColumn('MEDIA_ITEM_PLAYED', 'DbMediaItemPlayed', 'BOOLEAN', false, null, false); $this->addForeignKey('INSTANCE_ID', 'DbInstanceId', 'INTEGER', 'cc_show_instances', 'ID', true, null, null); $this->addColumn('PLAYOUT_STATUS', 'DbPlayoutStatus', 'SMALLINT', true, null, 1); diff --git a/airtime_mvc/application/models/airtime/om/BaseCcSchedule.php b/airtime_mvc/application/models/airtime/om/BaseCcSchedule.php index 4f7edcebf..13a15093f 100644 --- a/airtime_mvc/application/models/airtime/om/BaseCcSchedule.php +++ b/airtime_mvc/application/models/airtime/om/BaseCcSchedule.php @@ -77,14 +77,12 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent /** * The value for the cue_in field. - * Note: this column has a database default value of: '00:00:00' * @var string */ protected $cue_in; /** * The value for the cue_out field. - * Note: this column has a database default value of: '00:00:00' * @var string */ protected $cue_out; @@ -161,8 +159,6 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent $this->clip_length = '00:00:00'; $this->fade_in = '00:00:00'; $this->fade_out = '00:00:00'; - $this->cue_in = '00:00:00'; - $this->cue_out = '00:00:00'; $this->media_item_played = false; $this->playout_status = 1; $this->broadcasted = 0; @@ -708,7 +704,7 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent $v = (string) $v; } - if ($this->cue_in !== $v || $this->isNew()) { + if ($this->cue_in !== $v) { $this->cue_in = $v; $this->modifiedColumns[] = CcSchedulePeer::CUE_IN; } @@ -728,7 +724,7 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent $v = (string) $v; } - if ($this->cue_out !== $v || $this->isNew()) { + if ($this->cue_out !== $v) { $this->cue_out = $v; $this->modifiedColumns[] = CcSchedulePeer::CUE_OUT; } @@ -842,14 +838,6 @@ abstract class BaseCcSchedule extends BaseObject implements Persistent return false; } - if ($this->cue_in !== '00:00:00') { - return false; - } - - if ($this->cue_out !== '00:00:00') { - return false; - } - if ($this->media_item_played !== false) { return false; } diff --git a/airtime_mvc/build/build.properties b/airtime_mvc/build/build.properties index 9c8ff5de0..1a83f8732 100644 --- a/airtime_mvc/build/build.properties +++ b/airtime_mvc/build/build.properties @@ -1,6 +1,6 @@ #Note: project.home is automatically generated by the propel-install script. #Any manual changes to this value will be overwritten. -project.home = /home/rudi/reps/Airtime/airtime_mvc +project.home = /home/denise/airtime/airtime_mvc project.build = ${project.home}/build #Database driver diff --git a/airtime_mvc/build/schema.xml b/airtime_mvc/build/schema.xml index a67043b3a..fb87d0ef3 100644 --- a/airtime_mvc/build/schema.xml +++ b/airtime_mvc/build/schema.xml @@ -314,8 +314,8 @@ - - + + diff --git a/airtime_mvc/build/sql/schema.sql b/airtime_mvc/build/sql/schema.sql index ebd0d6c5b..4e2e95c55 100644 --- a/airtime_mvc/build/sql/schema.sql +++ b/airtime_mvc/build/sql/schema.sql @@ -418,8 +418,8 @@ CREATE TABLE "cc_schedule" "clip_length" interval default '00:00:00', "fade_in" TIME default '00:00:00', "fade_out" TIME default '00:00:00', - "cue_in" interval default '00:00:00', - "cue_out" interval default '00:00:00', + "cue_in" interval NOT NULL, + "cue_out" interval NOT NULL, "media_item_played" BOOLEAN default 'f', "instance_id" INTEGER NOT NULL, "playout_status" INT2 default 1 NOT NULL, diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index cd34a28bb..7dd20278c 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -17,6 +17,8 @@ UPDATE cc_files SET filepath = substring(filepath from 2) where id in (select id UPDATE cc_files SET cueout = length where cueout = '00:00:00'; +UPDATE cc_schedule SET cue_out = clip_length WHERE cue_out = '00:00:00'; + INSERT INTO cc_pref("keystr", "valstr") VALUES('locale', 'en_CA'); INSERT INTO cc_pref("subjid", "keystr", "valstr") VALUES(1, 'user_locale', 'en_CA'); From cff865ef55aaad222b41dd181b8bb3161c8c6e62 Mon Sep 17 00:00:00 2001 From: Sebastian Matuszewski Date: Tue, 5 Feb 2013 20:02:55 +0100 Subject: [PATCH 063/208] Polish locale update (full - 100%) Polish locale full version. --- .../locale/pl_PL/LC_MESSAGES/airtime.mo | Bin 62462 -> 62546 bytes .../locale/pl_PL/LC_MESSAGES/airtime.po | 128 +++++++++--------- 2 files changed, 63 insertions(+), 65 deletions(-) diff --git a/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pl_PL/LC_MESSAGES/airtime.mo index a702db3a7765ecf7ce4b5172952628fde65a38f0..5bf88240db62571e9de72fa50d18af0c0775d12c 100644 GIT binary patch delta 17460 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

    ^rs=QYv}6v#f- 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 delta 17355 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\n" +"PO-Revision-Date: 2013-02-05 20:02+0100\n" +"Last-Translator: Sebastian Matuszewski \n" +"Language-Team: SEMATpl (licencjonuj.eu) & PallottiFM (pallotti.fm) + " +"radioaktywne.pl \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -94,7 +95,6 @@ msgstr "Informacje" #: airtime_mvc/application/layouts/scripts/bare.phtml:5 #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 -#, fuzzy msgid "Live stream" msgstr "Transmisja na żywo" @@ -237,7 +237,7 @@ msgstr "Wartość cue-out nie może być mniejsza od cue-in." #: airtime_mvc/application/models/Show.php:180 msgid "Shows can have a max length of 24 hours." -msgstr "Programy mogą mieć maksymalną długość 24 godzin." +msgstr "Audycje mogą mieć maksymalną długość 24 godzin." #: airtime_mvc/application/models/Show.php:211 #: airtime_mvc/application/forms/AddShowWhen.php:120 @@ -249,9 +249,8 @@ msgid "" "Cannot schedule overlapping shows.\n" "Note: Resizing a repeating show affects all of its repeats." msgstr "" -"Nie można planować programów nakładających się na siebie.\n" -"Uwaga: zmiana programu powoduje automatyczną zmianę wszystkich jego " -"powtórzeń." +"Nie można planować audycji nakładających się na siebie.\n" +"Uwaga: zmiana audycji powoduje automatyczną zmianę wszystkich jej powtórzeń." #: airtime_mvc/application/models/Webstream.php:157 msgid "Length needs to be greater than 0 minutes" @@ -300,15 +299,15 @@ msgstr "Nie rozpoznano typu strumienia: %s" #: airtime_mvc/application/models/ShowInstance.php:245 msgid "Can't drag and drop repeating shows" -msgstr "Nie można użyć metody 'przeciągnij i upuść' dla powtórek programów." +msgstr "Nie można użyć metody 'przeciągnij i upuść' dla powtórek audycji." #: airtime_mvc/application/models/ShowInstance.php:253 msgid "Can't move a past show" -msgstr "Nie można przenieść programu archiwalnego" +msgstr "Nie można przenieść audycji archiwalnej" #: airtime_mvc/application/models/ShowInstance.php:270 msgid "Can't move show into past" -msgstr "Nie można przenieść programu w przeszłość" +msgstr "Nie można przenieść audycji w przeszłość" #: airtime_mvc/application/models/ShowInstance.php:276 #: airtime_mvc/application/forms/AddShowWhen.php:254 @@ -317,17 +316,17 @@ msgstr "Nie można przenieść programu w przeszłość" #: airtime_mvc/application/forms/AddShowWhen.php:297 #: airtime_mvc/application/forms/AddShowWhen.php:302 msgid "Cannot schedule overlapping shows" -msgstr "Nie można planować nakładających się programów" +msgstr "Nie można planować nakładających się audycji" #: airtime_mvc/application/models/ShowInstance.php:290 msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." msgstr "" -"Nagrywany program nie może zostać przeniesiony na mniej niż 1h przed jego " +"Nagrywana audycja nie może zostać przeniesiona na mniej niż 1h przed jej " "powtórką." #: airtime_mvc/application/models/ShowInstance.php:303 msgid "Show was deleted because recorded show does not exist!" -msgstr "Program został usunięty, ponieważ nagranie nie istnieje!" +msgstr "Audycja została usunięta, ponieważ nagranie nie istnieje!" #: airtime_mvc/application/models/ShowInstance.php:310 msgid "Must wait 1 hour to rebroadcast." @@ -335,11 +334,11 @@ msgstr "Należy odczekać 1 godzinę przed ponownym odtworzeniem." #: airtime_mvc/application/models/ShowInstance.php:342 msgid "can't resize a past show" -msgstr "nie można zmienić rozmiaru przeszłego programu" +msgstr "nie można zmienić rozmiaru przeszłej audycji" #: airtime_mvc/application/models/ShowInstance.php:364 msgid "Should not overlap shows" -msgstr "Programy nie powinny nakładać się." +msgstr "Audycje nie powinny nakładać się." #: airtime_mvc/application/models/Auth.php:33 #, php-format @@ -376,22 +375,22 @@ msgstr "Harmonogram, który przeglądasz jest nieaktualny!" #: airtime_mvc/application/models/Scheduler.php:105 #, php-format msgid "You are not allowed to schedule show %s." -msgstr "Nie posiadasz uprawnień, aby zaplanować program %s." +msgstr "Nie posiadasz uprawnień, aby zaplanować audycję %s." #: airtime_mvc/application/models/Scheduler.php:109 msgid "You cannot add files to recording shows." -msgstr "Nie można dodawać plików do nagrywanych programów." +msgstr "Nie można dodawać plików do nagrywanych audycji." #: airtime_mvc/application/models/Scheduler.php:115 #, php-format msgid "The show %s is over and cannot be scheduled." msgstr "" -"Program %s przekracza dopuszczalną długość i nie może zostać zaplanowany." +"Audycja %s przekracza dopuszczalną długość i nie może zostać zaplanowana." #: airtime_mvc/application/models/Scheduler.php:122 #, php-format msgid "The show %s has been previously updated!" -msgstr "Program %s został zaktualizowany wcześniej!" +msgstr "Audycja %s została zaktualizowana wcześniej!" #: airtime_mvc/application/models/Scheduler.php:141 #: airtime_mvc/application/models/Scheduler.php:223 @@ -821,7 +820,7 @@ msgstr "Adres URL do źródła nadrzędnego" #: airtime_mvc/application/forms/LiveStreamingPreferences.php:78 msgid "Show Source Connection URL" -msgstr "Adres URL dostępu do źródła programu" +msgstr "Adres URL dostępu do źródła audycji" #: airtime_mvc/application/forms/LiveStreamingPreferences.php:87 msgid "Master Source Port" @@ -839,11 +838,11 @@ msgstr "Nadrzędny punkt montowania źródła" #: airtime_mvc/application/forms/LiveStreamingPreferences.php:106 msgid "Show Source Port" -msgstr "Port źródłowy programu" +msgstr "Port źródłowy audycji" #: airtime_mvc/application/forms/LiveStreamingPreferences.php:115 msgid "Show Source Mount Point" -msgstr "Źródłowy punkt montowania programu" +msgstr "Źródłowy punkt montowania audycji" #: airtime_mvc/application/forms/LiveStreamingPreferences.php:153 msgid "You cannot use same port as Master DJ port." @@ -1105,7 +1104,7 @@ msgstr "Nazwa:" #: airtime_mvc/application/forms/AddShowWhat.php:30 msgid "Untitled Show" -msgstr "Program bez nazwy" +msgstr "Audycja bez nazwy" #: airtime_mvc/application/forms/AddShowWhat.php:36 #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:131 @@ -1154,11 +1153,11 @@ msgstr "Artysta - Tytuł" #: airtime_mvc/application/forms/StreamSetting.php:56 msgid "Show - Artist - Title" -msgstr "Program - Artysta -Tytuł" +msgstr "Audycja - Artysta -Tytuł" #: airtime_mvc/application/forms/StreamSetting.php:57 msgid "Station name - Show name" -msgstr "Nazwa stacji - Nazwa programu" +msgstr "Nazwa stacji - Nazwa audycji" #: airtime_mvc/application/forms/StreamSetting.php:63 msgid "Off Air Metadata" @@ -1208,11 +1207,11 @@ msgstr "Powtarzanie?" #: airtime_mvc/application/forms/AddShowWhen.php:103 msgid "Cannot create show in the past" -msgstr "Nie można utworzyć programu w przeszłości" +msgstr "Nie można utworzyć audycji w przeszłości" #: airtime_mvc/application/forms/AddShowWhen.php:111 msgid "Cannot modify start date/time of the show that is already started" -msgstr "Nie mozna zmienić daty/czasu programu, który się już rozpoczął" +msgstr "Nie mozna zmienić daty/czasu audycji, która się już rozpoczęła" #: airtime_mvc/application/forms/AddShowWhen.php:130 msgid "Cannot have duration 00h 00m" @@ -1467,11 +1466,11 @@ msgstr "Wartość nie może być pusta" #: airtime_mvc/application/forms/ShowBuilder.php:72 msgid "Show:" -msgstr "Program:" +msgstr "Audycja:" #: airtime_mvc/application/forms/ShowBuilder.php:80 msgid "All My Shows:" -msgstr "Wszystkie moje programy:" +msgstr "Wszystkie moje audycje:" #: airtime_mvc/application/forms/EditUser.php:118 msgid "Timezone:" @@ -1575,7 +1574,7 @@ msgstr "Sobota" #: airtime_mvc/application/forms/SoundcloudPreferences.php:16 msgid "Automatically Upload Recorded Shows" -msgstr "Automatycznie dodawaj nagrane programy" +msgstr "Automatycznie dodawaj nagrane audycje" #: airtime_mvc/application/forms/SoundcloudPreferences.php:26 msgid "Enable SoundCloud Upload" @@ -1790,7 +1789,7 @@ msgstr "Nic nie zaplanowano" #: airtime_mvc/application/controllers/LocaleController.php:40 msgid "Current Show:" -msgstr "Aktualny program:" +msgstr "Aktualna audycja:" #: airtime_mvc/application/controllers/LocaleController.php:41 msgid "Current" @@ -1854,7 +1853,7 @@ msgstr "Edytuj Metadane." #: airtime_mvc/application/controllers/LocaleController.php:62 msgid "Add to selected show" -msgstr "Dodaj do wybranego programu" +msgstr "Dodaj do wybranej audycji" #: airtime_mvc/application/controllers/LocaleController.php:63 msgid "Select" @@ -2034,7 +2033,7 @@ msgid "" "adding it to a show." msgstr "" "Statyczny smart block będzie zapisywał kryteria i zawartość bezpośrednio, co " -"umożliwia edycję i wyświetlanie go w bibliotece, przed dodaniem do programu." +"umożliwia edycję i wyświetlanie go w bibliotece, przed dodaniem do audycji." #: airtime_mvc/application/controllers/LocaleController.php:135 msgid "" @@ -2043,7 +2042,7 @@ msgid "" "edit the content in the Library." msgstr "" "Dynamiczny smart block zapisuje tylko kryteria. Jego zawartość będzie " -"generowana automatycznie po dodaniu go do programu. Nie będzie można go " +"generowana automatycznie po dodaniu go do audycji. Nie będzie można go " "wyświetlać i edytować w zawartości biblioteki." #: airtime_mvc/application/controllers/LocaleController.php:137 @@ -2174,15 +2173,15 @@ msgid "" "Check this box to automatically switch off Master/Show source upon source " "disconnection." msgstr "" -"To pole służy do automatycznego wyłączenia źródła nadrzędnego/źródła " -"programu po jego odłączeniu." +"To pole służy do automatycznego wyłączenia źródła nadrzędnego/źródła audycji " +"po jego odłączeniu." #: airtime_mvc/application/controllers/LocaleController.php:181 msgid "" "Check this box to automatically switch on Master/Show source upon source " "connection." msgstr "" -"To pole służy automatycznego uruchomienia źródła nadrzędnego/źródła programu " +"To pole służy automatycznego uruchomienia źródła nadrzędnego/źródła audycji " "na połączeniu źródłowym" #: airtime_mvc/application/controllers/LocaleController.php:182 @@ -2241,7 +2240,7 @@ msgstr "" #: airtime_mvc/application/controllers/LocaleController.php:192 msgid "Specify custom authentication which will work only for this show." -msgstr "Ustal własne uwierzytelnienie tylko dla tego programu." +msgstr "Ustal własne uwierzytelnienie tylko dla tej audycji." #: airtime_mvc/application/controllers/LocaleController.php:194 msgid "The show instance doesn't exist anymore!" @@ -2249,11 +2248,11 @@ msgstr "Instancja audycji już nie istnieje." #: airtime_mvc/application/controllers/LocaleController.php:198 msgid "Show" -msgstr "Program" +msgstr "Audycja" #: airtime_mvc/application/controllers/LocaleController.php:199 msgid "Show is empty" -msgstr "Program jest pusty" +msgstr "Audycja jest pusta" #: airtime_mvc/application/controllers/LocaleController.php:200 msgid "1m" @@ -2285,7 +2284,7 @@ msgstr "Odbieranie danych z serwera" #: airtime_mvc/application/controllers/LocaleController.php:213 msgid "This show has no scheduled content." -msgstr "Ten program nie ma zawartości" +msgstr "Ta audycja nie ma zawartości" #: airtime_mvc/application/controllers/LocaleController.php:214 msgid "This show is not completely filled with content." @@ -2404,7 +2403,7 @@ msgstr "miesiąć" msgid "" "Shows longer than their scheduled time will be cut off by a following show." msgstr "" -"Programy o czasie dłuższym niż zaplanowany będą przerywane przez następne ." +"Audycje o czasie dłuższym niż zaplanowany będą przerywane przez następne ." #: airtime_mvc/application/controllers/LocaleController.php:261 msgid "Cancel Current Show?" @@ -2462,7 +2461,7 @@ msgstr "Wyciszanie [Fade out]" #: airtime_mvc/application/controllers/LocaleController.php:282 msgid "Show Empty" -msgstr "Program jest pusty" +msgstr "Audycja jest pusta" #: airtime_mvc/application/controllers/LocaleController.php:283 msgid "Recording From Line In" @@ -2470,7 +2469,7 @@ msgstr "Nagrywaanie z wejścia liniowego" #: airtime_mvc/application/controllers/LocaleController.php:288 msgid "Cannot schedule outside a show." -msgstr "Nie ma możliwości planowania poza programem" +msgstr "Nie ma możliwości planowania poza audycją." #: airtime_mvc/application/controllers/LocaleController.php:289 msgid "Moving 1 Item" @@ -2491,7 +2490,7 @@ msgstr "Odznacz wszystkie" #: airtime_mvc/application/controllers/LocaleController.php:295 msgid "Remove overbooked tracks" -msgstr "Usuń utwory niemieszczące się w ramach czasowych programu" +msgstr "Usuń utwory niemieszczące się w ramach czasowych audycji" #: airtime_mvc/application/controllers/LocaleController.php:296 msgid "Remove selected scheduled items" @@ -2503,7 +2502,7 @@ msgstr "Przejdź do obecnie odtwarzanej ściezki" #: airtime_mvc/application/controllers/LocaleController.php:298 msgid "Cancel current show" -msgstr "Skasuj obecny program" +msgstr "Skasuj obecną audycję" #: airtime_mvc/application/controllers/LocaleController.php:303 msgid "Open library to add or remove content" @@ -2541,7 +2540,7 @@ msgstr "Przeglądanie harmonogramu" #: airtime_mvc/application/controllers/LocaleController.php:319 msgid "View show content" -msgstr "Przeglądanie zawartości programów" +msgstr "Przeglądanie zawartości audycji" #: airtime_mvc/application/controllers/LocaleController.php:320 msgid "DJs can do the following:" @@ -2549,7 +2548,7 @@ msgstr "Prowadzący ma możliwość:" #: airtime_mvc/application/controllers/LocaleController.php:321 msgid "Manage assigned show content" -msgstr "Zarządzać przypisaną sobie zawartością programu" +msgstr "Zarządzać przypisaną sobie zawartością audycji" #: airtime_mvc/application/controllers/LocaleController.php:322 msgid "Import media files" @@ -2573,7 +2572,7 @@ msgstr "Przeglądać i zarządzać zawartością audycji" #: airtime_mvc/application/controllers/LocaleController.php:327 msgid "Schedule shows" -msgstr "Planować programy" +msgstr "Planować audycję" #: airtime_mvc/application/controllers/LocaleController.php:328 msgid "Manage all library content" @@ -2800,7 +2799,7 @@ msgstr "Usuń" #: airtime_mvc/application/controllers/ShowbuilderController.php:212 msgid "show does not exist" -msgstr "program nie istnieje" +msgstr "audycja nie istnieje" #: airtime_mvc/application/controllers/ListenerstatController.php:56 msgid "" @@ -2949,17 +2948,17 @@ msgstr "Usuń całą zawartość" #: airtime_mvc/application/controllers/ScheduleController.php:271 msgid "Show Content" -msgstr "Zawartość programu" +msgstr "Zawartość audycji" #: airtime_mvc/application/controllers/ScheduleController.php:295 #: airtime_mvc/application/controllers/ScheduleController.php:302 msgid "Cancel Current Show" -msgstr "Skasuj obecny program" +msgstr "Skasuj obecną audycję" #: airtime_mvc/application/controllers/ScheduleController.php:299 #: airtime_mvc/application/controllers/ScheduleController.php:309 msgid "Edit Show" -msgstr "Edytuj program" +msgstr "Edytuj audycję" #: airtime_mvc/application/controllers/ScheduleController.php:317 msgid "Delete This Instance" @@ -2972,7 +2971,7 @@ msgstr "Usuń ten i wszystkie inne instancje" #: airtime_mvc/application/controllers/ScheduleController.php:445 #, php-format msgid "Rebroadcast of show %s from %s at %s" -msgstr "Retransmisja programu %sfrom%sat%s" +msgstr "Retransmisja audycji %s z %s o %s" #: airtime_mvc/application/controllers/WebstreamController.php:29 #: airtime_mvc/application/controllers/WebstreamController.php:33 @@ -3009,7 +3008,7 @@ msgstr "Źródło Nadrzędne" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 msgid "Show Source" -msgstr "Źródło Programu" +msgstr "Źródło audycji" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 msgid "Scheduled Play" @@ -3123,9 +3122,9 @@ msgid "" "'+ Show' icon. This can be either a one-time or repeating show. Only admins " "and program managers can add shows." msgstr "" -"Utwórz program przechodząc do '\"kalendarza\" w pasku \"menu\" a następnie " -"klikając w ikonę \"+ Program\". Można utworzyć program do jednorazowego bądź " -"wielokrotnego odtwarzania. Jedynie administratorzy i zarządzający programami " +"Utwórz audycję przechodząc do '\"kalendarza\" w pasku \"menu\" a następnie " +"klikając w ikonę \"+ Audycja\". Można utworzyć audycję do jednorazowego bądź " +"wielokrotnego odtwarzania. Jedynie administratorzy i zarządzający audycjami " "mogą je dodawać." #: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 @@ -3133,7 +3132,7 @@ msgid "" "Add media to the show by going to your show in the Schedule calendar, left-" "clicking on it and selecting 'Add / Remove Content'" msgstr "" -"Dodaj media do programu przez przejście do programu z kalendarza, kliknij na " +"Dodaj media do audycji przez przejście do audycji w kalendarzu, kliknij na " "niego lewym przyciskiem myszki wybierając opcję 'dodaj/usuń zawartość'" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 @@ -3141,8 +3140,7 @@ msgid "" "Select your media from the left pane and drag them to your show in the right " "pane." msgstr "" -"Wybierz media z lewego okna i przeciągnij do utworzonego programu w prawym " -"oknie" +"Wybierz media z lewego okna i przeciągnij do utworzonej audyji w prawym oknie" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 msgid "Then you're good to go!" @@ -3259,12 +3257,12 @@ msgstr "Oryginalna długość:" #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 msgid "Add this show" -msgstr "Dodaj program" +msgstr "Dodaj audycję" #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 msgid "Update show" -msgstr "Aktualizuj program" +msgstr "Aktualizuj audycję" #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 msgid "What" @@ -3577,7 +3575,7 @@ msgstr "RESETUJ" #: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:153 msgid "Show Source Connection URL:" -msgstr "Adres URL połączenia dla Żródła Programu" +msgstr "Adres URL połączenia dla Żródła audycji" #: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 #, php-format From 50bfcb7eb8ede451d52c858d2d73859672305b95 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 15:37:00 -0500 Subject: [PATCH 064/208] XSS exploit prevention - Calendar -> show content --- .../views/scripts/schedule/show-content-dialog.phtml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml b/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml index 09aadb4d8..3f0ae83c7 100644 --- a/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml +++ b/airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml @@ -13,9 +13,9 @@ showContent as $row): ?>

  • " class=""> - - - + + + From 8db71eac529a287fce9989a19455a37363dd6b10 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 16:52:25 -0500 Subject: [PATCH 065/208] CC-4914: Update is_scheduled after tracks play out -done --- airtime_mvc/application/models/StoredFile.php | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 403ba5d53..ef96fe049 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -775,6 +775,9 @@ SQL; $fromTable = $unionTable; } + // update is_scheduled to false for tracks that + // have already played out + self::updatePastFilesIsScheduled(); $results = Application_Model_Datatables::findEntries($con, $displayColumns, $fromTable, $datatables); foreach ($results['aaData'] as &$row) { @@ -1298,8 +1301,12 @@ SQL; } } - public static function setIsScheduled($p_scheduleItem, $p_status) { - $fileId = Application_Model_Schedule::GetFileId($p_scheduleItem); + public static function setIsScheduled($p_scheduleItem, $p_status, $p_fileId=null) { + if (is_null($p_fileId)) { + $fileId = Application_Model_Schedule::GetFileId($p_scheduleItem); + } else { + $fileId = $p_fileId; + } $file = self::Recall($fileId); $updateIsScheduled = false; @@ -1311,6 +1318,22 @@ SQL; return $updateIsScheduled; } + public static function updatePastFilesIsScheduled() + { + $con = Propel::getConnection(); + $sql = <<query($sql)->fetchAll(); + foreach ($files as $file) { + if (!is_null($file['file_id'])) { + self::setIsScheduled(null, false, $file['file_id']); + } + } + + } + public function getRealClipLength($p_cuein, $p_cueout) { $sql = "SELECT :cueout::INTERVAL - :cuein::INTERVAL"; From 909f2c95c4167a35dd39fb475df18e6f8e1ba106 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 17:24:39 -0500 Subject: [PATCH 066/208] XSS exploit prevention - audio preview --- .../application/controllers/AudiopreviewController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/controllers/AudiopreviewController.php b/airtime_mvc/application/controllers/AudiopreviewController.php index 302e8c545..6955fccd9 100644 --- a/airtime_mvc/application/controllers/AudiopreviewController.php +++ b/airtime_mvc/application/controllers/AudiopreviewController.php @@ -62,8 +62,8 @@ class AudiopreviewController extends Zend_Controller_Action $this->view->audioFileID = $audioFileID; // We need to decode artist and title because it gets // encoded twice in js - $this->view->audioFileArtist = urldecode($audioFileArtist); - $this->view->audioFileTitle = urldecode($audioFileTitle); + $this->view->audioFileArtist = htmlspecialchars(urldecode($audioFileArtist)); + $this->view->audioFileTitle = htmlspecialchars(urldecode($audioFileTitle)); $this->view->type = $type; $this->_helper->viewRenderer->setRender('audio-preview'); From 8e82db1bc778dc7ecc2967673ef43152cd14a882 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 5 Feb 2013 17:57:21 -0500 Subject: [PATCH 067/208] CC-4921: Now Playing: Cannot insert items into current playing show -filler time in cc_schedule was not setting cue_in and cue_out -since we made those colunns not null and removed a default value, we always have to set a value --- airtime_mvc/application/models/Scheduler.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index be9930402..92db4cacd 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -325,6 +325,8 @@ class Application_Model_Scheduler $filler->setDbStarts($DT) ->setDbEnds($this->nowDT) ->setDbClipLength($cliplength) + ->setDbCueIn('00:00:00') + ->setDbCueOut('00:00:00') ->setDbPlayoutStatus(-1) ->setDbInstanceId($instance->getDbId()) ->save($this->con); From 517a58bc435b3715d6300975aaf675295fdfa259 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 12:36:04 -0500 Subject: [PATCH 068/208] CC-4919: Library -> Search: Exception happens when switching back to simple search with some illegal input in Advanced Search -fixed --- airtime_mvc/public/js/airtime/library/library.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index ed28d0c53..aae972017 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -702,8 +702,19 @@ var AIRTIME = (function(AIRTIME) { $simpleSearch.addClass("sp-invisible"); } else { - //clear the advanced search fields and reset datatable - $(".filter_column input").val("").keyup(); + // clear the advanced search fields + var divs = $("div#advanced_search").children(':visible'); + $.each(divs, function(i, div){ + fields = $(div).children().find('input'); + $.each(fields, function(i, field){ + if ($(field).val() !== "") { + $(field).val(""); + // we need to reset the results when removing + // an advanced search field + $(field).keyup(); + } + }); + }); //reset datatable with previous simple search results (if any) $(".dataTables_filter input").val(simpleSearchText).keyup(); From 0ed5d18e9540143c52bcca4bd6031f7da8866982 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 13:25:48 -0500 Subject: [PATCH 069/208] CC-4920: Now Playling js error -fixed --- airtime_mvc/public/js/airtime/showbuilder/builder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index 2b2e0f358..489e4240e 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -89,7 +89,7 @@ var AIRTIME = (function(AIRTIME){ $.post(baseUrl+"schedule/update-future-is-scheduled", {"format": "json", "schedId": schedId}, function(json) { var data = $.parseJSON(json); - if (data.redrawLibTable) { + if (data.redrawLibTable !== undefined && data.redrawLibTable) { $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); } }); From 634a6991ce42fd6e24a8d42e9800f50796b6aff0 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 13:44:10 -0500 Subject: [PATCH 070/208] CC-4865: Password reset -> Cancel -> url is missing base directory -removed extra '/' --- airtime_mvc/public/js/airtime/login/password-restore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/login/password-restore.js b/airtime_mvc/public/js/airtime/login/password-restore.js index 04d78f98b..4b45a59ff 100644 --- a/airtime_mvc/public/js/airtime/login/password-restore.js +++ b/airtime_mvc/public/js/airtime/login/password-restore.js @@ -1,3 +1,3 @@ function redirectToLogin(){ - window.location = baseUrl+"/Login" + window.location = baseUrl+"Login" } \ No newline at end of file From 55970a4b2040683d14a7a522ef70fb3b3fabfdbd Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 14:32:13 -0500 Subject: [PATCH 071/208] CC-4925: Changing User permissions to a higher level ends up with show editing problems - added check to ensure user is not an admin before assigning the 'dj-edit-show' action --- airtime_mvc/application/controllers/ScheduleController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 1f3216eed..20214f093 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -573,7 +573,10 @@ class ScheduleController extends Zend_Controller_Action return; } - if ($isDJ) { + // in case a user was once a dj and had been assigned to a show + // but was then changed to an admin user we need to allow + // the user to edit the show as an admin (CC-4925) + if ($isDJ && !$idAdminOrPM) { $this->view->action = "dj-edit-show"; } From ba4cb16171a6093067219aae8cb5c25aae629bd4 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 14:35:39 -0500 Subject: [PATCH 072/208] CC-4925: Changing User permissions to a higher level ends up with show editing problems -typo --- airtime_mvc/application/controllers/ScheduleController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 20214f093..1a908ec63 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -576,7 +576,7 @@ class ScheduleController extends Zend_Controller_Action // in case a user was once a dj and had been assigned to a show // but was then changed to an admin user we need to allow // the user to edit the show as an admin (CC-4925) - if ($isDJ && !$idAdminOrPM) { + if ($isDJ && !$isAdminOrPM) { $this->view->action = "dj-edit-show"; } From ad334d9e74839905a11ba03056ee11764ea2894d Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 15:44:52 -0500 Subject: [PATCH 073/208] CC-4926: System-> Preference: Please limit the default fade value less than 60 - added a range validator of 0 - 59.9 on default fade --- airtime_mvc/application/forms/GeneralPreferences.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/forms/GeneralPreferences.php b/airtime_mvc/application/forms/GeneralPreferences.php index 48a561b06..3d249ce47 100644 --- a/airtime_mvc/application/forms/GeneralPreferences.php +++ b/airtime_mvc/application/forms/GeneralPreferences.php @@ -7,6 +7,7 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm { $notEmptyValidator = Application_Form_Helper_ValidationTypes::overrideNotEmptyValidator(); + $rangeValidator = Application_Form_Helper_ValidationTypes::overrideBetweenValidator(0, 59.9); $this->setDecorators(array( array('ViewScript', array('viewScript' => 'form/preferences_general.phtml')) )); @@ -34,9 +35,13 @@ class Application_Form_GeneralPreferences extends Zend_Form_SubForm 'label' => _('Default Fade (s):'), 'required' => true, 'filters' => array('StringTrim'), - 'validators' => array(array($notEmptyValidator, 'regex', false, - array('/^[0-9]{1,2}(\.\d{1})?$/', - 'messages' => _('enter a time in seconds 0{.0}')))), + 'validators' => array( + array( + $rangeValidator, + $notEmptyValidator, + 'regex', false, array('/^[0-9]{1,2}(\.\d{1})?$/', 'messages' => _('enter a time in seconds 0{.0}')) + ) + ), 'value' => $defaultFade, 'decorators' => array( 'ViewHelper' From 532ea09eed553daad8c5b82973ded8db3d46e6b7 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 16:46:12 -0500 Subject: [PATCH 074/208] Added Polish datatables and plupload translation files Added Polish to upgrade script and default data --- airtime_mvc/build/sql/defaultdata.sql | 1 + .../public/js/datatables/i18n/pl_PL.txt | 18 +++++++++++++ airtime_mvc/public/js/plupload/i18n/pl_PL.js | 27 +++++++++++++++++++ .../upgrades/airtime-2.3.0/data/upgrade.sql | 1 + 4 files changed, 47 insertions(+) create mode 100644 airtime_mvc/public/js/datatables/i18n/pl_PL.txt create mode 100644 airtime_mvc/public/js/plupload/i18n/pl_PL.js diff --git a/airtime_mvc/build/sql/defaultdata.sql b/airtime_mvc/build/sql/defaultdata.sql index d2dc2fa6e..91c61ede9 100644 --- a/airtime_mvc/build/sql/defaultdata.sql +++ b/airtime_mvc/build/sql/defaultdata.sql @@ -332,6 +332,7 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('es_ES', 'Español'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('fr_FR', 'Français'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('it_IT', 'Italiano'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ko_KR', '한국어'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polish'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); diff --git a/airtime_mvc/public/js/datatables/i18n/pl_PL.txt b/airtime_mvc/public/js/datatables/i18n/pl_PL.txt new file mode 100644 index 000000000..5d73fcc24 --- /dev/null +++ b/airtime_mvc/public/js/datatables/i18n/pl_PL.txt @@ -0,0 +1,18 @@ +//Polish +{ + "sProcessing": "Proszę czekać...", + "sLengthMenu": "Pokaż _MENU_ pozycji", + "sZeroRecords": "Nie znaleziono żadnych pasujących indeksów", + "sInfo": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie", + "sInfoEmpty": "Pozycji 0 z 0 dostępnych", + "sInfoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)", + "sInfoPostFix": "", + "sSearch": "", + "sUrl": "", + "oPaginate": { + "sFirst": "Pierwsza", + "sPrevious": "Poprzednia", + "sNext": "Następna", + "sLast": "Ostatnia" + } +} \ No newline at end of file diff --git a/airtime_mvc/public/js/plupload/i18n/pl_PL.js b/airtime_mvc/public/js/plupload/i18n/pl_PL.js new file mode 100644 index 000000000..d117af72e --- /dev/null +++ b/airtime_mvc/public/js/plupload/i18n/pl_PL.js @@ -0,0 +1,27 @@ +//Polish +plupload.addI18n({ + 'Select files' : $.i18n._('Select files'), + 'Add files to the upload queue and click the start button.' : $.i18n._('Add files to the upload queue and click the start button.'), + 'Filename' : $.i18n._('Filename'), + 'Status' : $.i18n._('Status'), + 'Size' : $.i18n._('Size'), + 'Add files' : $.i18n._('Add files'), + 'Stop current upload' : $.i18n._('Stop current upload'), + 'Start uploading queue' : $.i18n._('Start uploading queue'), + 'Uploaded %d/%d files': $.i18n._('Uploaded %d/%d files'), + 'N/A' : $.i18n._('N/A'), + 'Drag files here.' : $.i18n._('Drag files here.'), + 'File extension error.': $.i18n._('File extension error.'), + 'File size error.': $.i18n._('File size error.'), + 'Init error.': $.i18n._('Init error.'), + 'HTTP Error.': $.i18n._('HTTP Error.'), + 'Security error.': $.i18n._('Security error.'), + 'Generic error.': $.i18n._('Generic error.'), + 'IO error.': $.i18n._('IO error.'), + 'Stop Upload': $.i18n._('Stop Upload'), + 'Add Files': $.i18n._('Add Files'), + 'Start Upload': $.i18n._('Start Upload'), + 'Start upload': $.i18n._('Start upload'), + '%d files queued': $.i18n._('%d files queued'), + "Error: Invalid file extension: " : $.i18n._("Error: Invalid file extension: ") +}); \ No newline at end of file diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index 7dd20278c..8c3e4dfa2 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -30,6 +30,7 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('es_ES', 'Español'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('fr_FR', 'Français'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('it_IT', 'Italiano'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ko_KR', '한국어'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polish'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); From 7cf45afd16cf6fdc9e1b2298313287d88dc91acc Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 6 Feb 2013 17:03:01 -0500 Subject: [PATCH 075/208] Changed 'Polish' to 'Polski' --- airtime_mvc/build/sql/defaultdata.sql | 2 +- install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/build/sql/defaultdata.sql b/airtime_mvc/build/sql/defaultdata.sql index 91c61ede9..0923d60a3 100644 --- a/airtime_mvc/build/sql/defaultdata.sql +++ b/airtime_mvc/build/sql/defaultdata.sql @@ -332,7 +332,7 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('es_ES', 'Español'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('fr_FR', 'Français'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('it_IT', 'Italiano'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ko_KR', '한국어'); -INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polish'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polski'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index 8c3e4dfa2..55e80d37e 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -30,7 +30,7 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('es_ES', 'Español'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('fr_FR', 'Français'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('it_IT', 'Italiano'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ko_KR', '한국어'); -INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polish'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polski'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); From 2935670455bfb582ddae80858265198263ddb56c Mon Sep 17 00:00:00 2001 From: Daniel James Date: Thu, 7 Feb 2013 10:21:45 +0000 Subject: [PATCH 076/208] Refined Brazilian Portuguese localization, thanks to Luciano De Fazio! --- .../locale/pt_BR/LC_MESSAGES/airtime.mo | Bin 62878 -> 62505 bytes .../locale/pt_BR/LC_MESSAGES/airtime.po | 244 +++++++++--------- 2 files changed, 122 insertions(+), 122 deletions(-) diff --git a/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/pt_BR/LC_MESSAGES/airtime.mo index 895552c1d002b9ef60f8ac399a29d7cc419588be..3c3ba85fac7c19a0939c87de8ead90f59d02c28f 100644 GIT binary patch delta 8349 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\n" "Language-Team: Brazilian Localization \n" "Language: pt-BR\n" @@ -69,11 +69,11 @@ msgstr "Estado" #: airtime_mvc/application/configs/navigation.php:83 msgid "Playout History" -msgstr "Registro" +msgstr "Histórico da Programação" #: airtime_mvc/application/configs/navigation.php:90 msgid "Listener Stats" -msgstr "Estado de Ouvintes" +msgstr "Estatísticas de Ouvintes" #: airtime_mvc/application/configs/navigation.php:99 #: airtime_mvc/application/views/scripts/error/error.phtml:13 @@ -123,7 +123,7 @@ msgstr "Prévia da playlist" #: airtime_mvc/application/models/StoredFile.php:815 msgid "Webstream preview" -msgstr "Prévia do fluxo" +msgstr "Prévia do fluxo web" #: airtime_mvc/application/models/StoredFile.php:817 msgid "Smart Block" @@ -189,7 +189,7 @@ msgstr "%s não existe na lista de diretórios monitorados." #: airtime_mvc/application/models/Playlist.php:723 #: airtime_mvc/application/models/Block.php:760 msgid "Cue in and cue out are null." -msgstr "Cue dentro e fora sugestão são nulos." +msgstr "Cue de entrada e saída são nulos." #: airtime_mvc/application/models/Playlist.php:753 #: airtime_mvc/application/models/Playlist.php:776 @@ -265,7 +265,7 @@ msgstr "Não foi possível analisar a lista M3U" #: airtime_mvc/application/models/Webstream.php:314 msgid "Invalid webstream - This appears to be a file download." -msgstr "Fluxo inválido. Este parece tratar-se de download de arquivo." +msgstr "Fluxo web inválido. A URL parece tratar-se de download de arquivo." #: airtime_mvc/application/models/Webstream.php:318 #, php-format @@ -274,7 +274,7 @@ msgstr "Tipo de fluxo não reconhecido: %s" #: airtime_mvc/application/models/ShowInstance.php:245 msgid "Can't drag and drop repeating shows" -msgstr "Não é possível arrastar e soltar programas repetitivos" +msgstr "Não é possível arrastar e soltar programas repetidos" #: airtime_mvc/application/models/ShowInstance.php:253 msgid "Can't move a past show" @@ -303,7 +303,7 @@ msgstr "O programa foi excluído porque a gravação prévia não existe!" #: airtime_mvc/application/models/ShowInstance.php:310 msgid "Must wait 1 hour to rebroadcast." -msgstr "É necessário aguardar 1 hora para retransmitir." +msgstr "É necessário aguardar 1 hora antes de retransmitir." #: airtime_mvc/application/models/ShowInstance.php:342 msgid "can't resize a past show" @@ -344,7 +344,7 @@ msgstr "A programação que você está vendo está desatualizada!" #: airtime_mvc/application/models/Scheduler.php:105 #, php-format msgid "You are not allowed to schedule show %s." -msgstr "Você não tem permissão para agendar o programa %s." +msgstr "Você não tem permissão para agendar programa %s." #: airtime_mvc/application/models/Scheduler.php:109 msgid "You cannot add files to recording shows." @@ -363,7 +363,7 @@ msgstr "O programa %s foi previamente atualizado!" #: airtime_mvc/application/models/Scheduler.php:141 #: airtime_mvc/application/models/Scheduler.php:223 msgid "A selected File does not exist!" -msgstr "Um arquivo selecionado não existe!" +msgstr "Um dos arquivos selecionados não existe!" #: airtime_mvc/application/models/ShowBuilder.php:198 #, php-format @@ -385,7 +385,7 @@ msgstr "Álbum" #: airtime_mvc/application/models/Block.php:1211 #: airtime_mvc/application/forms/SmartBlockCriteria.php:43 msgid "Bit Rate (Kbps)" -msgstr "Bitrate (Kpbs)" +msgstr "Bitrate (Kbps)" #: airtime_mvc/application/models/Block.php:1212 #: airtime_mvc/application/forms/SmartBlockCriteria.php:44 @@ -404,7 +404,7 @@ msgstr "Compositor" #: airtime_mvc/application/forms/SmartBlockCriteria.php:46 #: airtime_mvc/application/controllers/LocaleController.php:74 msgid "Conductor" -msgstr "Condutor" +msgstr "Maestro" #: airtime_mvc/application/models/Block.php:1215 #: airtime_mvc/application/forms/SmartBlockCriteria.php:47 @@ -551,11 +551,11 @@ msgstr "%s:%s:%s não é um horário válido" #: airtime_mvc/application/forms/EmailServerPreferences.php:17 msgid "Enable System Emails (Password Reset)" -msgstr "Ativar Emails do Sistema (Recuperação de Senha)" +msgstr "Ativar Envio de Emails (Recuperação de Senha)" #: airtime_mvc/application/forms/EmailServerPreferences.php:27 msgid "Reset Password 'From' Email" -msgstr "Remetente do Email de Recuperação de Senha" +msgstr "Remetente de Email para Recuperação de Senha" #: airtime_mvc/application/forms/EmailServerPreferences.php:34 msgid "Configure Mail Server" @@ -693,7 +693,7 @@ msgstr "Data de Fim:" #: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 #: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 msgid "Value is required and can't be empty" -msgstr "Valor é obrigatório e não poder estar vazio." +msgstr "Valor é obrigatório e não poder estar em branco." #: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 msgid "'%value%' is no valid email address in the basic format local-part@hostname" @@ -727,21 +727,21 @@ msgstr "dias" #: airtime_mvc/application/forms/AddShowRebroadcastDates.php:63 #: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:58 msgid "Day must be specified" -msgstr "Dia precisa ser informado" +msgstr "O dia precisa ser especificado" #: airtime_mvc/application/forms/AddShowRebroadcastDates.php:68 #: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:63 msgid "Time must be specified" -msgstr "Horário deve ser informado" +msgstr "O horário deve ser especificado" #: airtime_mvc/application/forms/AddShowRebroadcastDates.php:95 #: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:86 msgid "Must wait at least 1 hour to rebroadcast" -msgstr "É preciso aguardar uma hora para retransmissão" +msgstr "É preciso aguardar uma hora para retransmitir" #: airtime_mvc/application/forms/AddShowRR.php:10 msgid "Record from Line In?" -msgstr "Gravar a partir de Line In?" +msgstr "Gravar a partir do Line In?" #: airtime_mvc/application/forms/AddShowRR.php:16 msgid "Rebroadcast?" @@ -875,7 +875,7 @@ msgstr "Jabber:" #: airtime_mvc/application/forms/AddUser.php:88 msgid "User Type:" -msgstr "Tipo de Usuário:" +msgstr "Perfil do Usuário:" #: airtime_mvc/application/forms/AddUser.php:92 #: airtime_mvc/application/controllers/LocaleController.php:316 @@ -908,7 +908,7 @@ msgstr "Administrador" #: airtime_mvc/application/views/scripts/preference/index.phtml:6 #: airtime_mvc/application/views/scripts/preference/index.phtml:14 msgid "Save" -msgstr "Gravar" +msgstr "Salvar" #: airtime_mvc/application/forms/AddUser.php:113 #: airtime_mvc/application/forms/EditUser.php:132 @@ -996,11 +996,11 @@ msgstr "Porta não pode estar em branco." #: airtime_mvc/application/forms/StreamSettingSubForm.php:243 msgid "Mount cannot be empty with Icecast server." -msgstr "Montagem não pode estar em branco com servidor Icecast." +msgstr "Ponto de montagem deve ser informada em servidor Icecast." #: airtime_mvc/application/forms/AddShowRepeats.php:11 msgid "Repeat Type:" -msgstr "Tipo de Repetição:" +msgstr "Tipo de Reexibição:" #: airtime_mvc/application/forms/AddShowRepeats.php:14 msgid "weekly" @@ -1055,11 +1055,11 @@ msgstr "Sab" #: airtime_mvc/application/forms/AddShowRepeats.php:53 msgid "No End?" -msgstr "Não tem fim?" +msgstr "Sem fim?" #: airtime_mvc/application/forms/AddShowRepeats.php:79 msgid "End date must be after start date" -msgstr "Data de fim precisa ser após de data de início" +msgstr "A data de fim deve ser posterior à data de início" #: airtime_mvc/application/forms/AddShowWhat.php:26 #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 @@ -1168,7 +1168,7 @@ msgstr "Duração:" #: airtime_mvc/application/forms/AddShowWhen.php:83 msgid "Repeats?" -msgstr "Repetir?" +msgstr "Reexibir?" #: airtime_mvc/application/forms/AddShowWhen.php:103 msgid "Cannot create show in the past" @@ -1176,7 +1176,7 @@ msgstr "Não é possível criar um programa no passado." #: airtime_mvc/application/forms/AddShowWhen.php:111 msgid "Cannot modify start date/time of the show that is already started" -msgstr "Não é possível alterar o início de um programa já em execução" +msgstr "Não é possível alterar o início de um programa que está em execução" #: airtime_mvc/application/forms/AddShowWhen.php:130 msgid "Cannot have duration 00h 00m" @@ -1326,7 +1326,7 @@ msgstr "é menor que" #: airtime_mvc/application/forms/SmartBlockCriteria.php:99 #: airtime_mvc/application/controllers/LocaleController.php:151 msgid "is in the range" -msgstr "está compreendido" +msgstr "está no intervalo" #: airtime_mvc/application/forms/SmartBlockCriteria.php:109 msgid "hours" @@ -1342,7 +1342,7 @@ msgstr "itens" #: airtime_mvc/application/forms/SmartBlockCriteria.php:133 msgid "Set smart block type:" -msgstr "Definir tipo de bloco inteligente:" +msgstr "Definir tipo de bloco:" #: airtime_mvc/application/forms/SmartBlockCriteria.php:136 #: airtime_mvc/application/controllers/LibraryController.php:501 @@ -1364,7 +1364,7 @@ msgstr "Limitar em" #: airtime_mvc/application/forms/SmartBlockCriteria.php:287 msgid "Generate playlist content and save criteria" -msgstr "Gerar conteúdo da lista de reprodução e salvar critério" +msgstr "Gerar conteúdo da lista e salvar critério" #: airtime_mvc/application/forms/SmartBlockCriteria.php:289 msgid "Generate" @@ -1372,7 +1372,7 @@ msgstr "Gerar" #: airtime_mvc/application/forms/SmartBlockCriteria.php:295 msgid "Shuffle playlist content" -msgstr "Embaralhar conteúdo da lista de reprodução" +msgstr "Embaralhar conteúdo da lista" #: airtime_mvc/application/forms/SmartBlockCriteria.php:297 #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 @@ -1394,7 +1394,7 @@ msgstr "O valor deve ser um número inteiro" #: airtime_mvc/application/forms/SmartBlockCriteria.php:479 msgid "500 is the max item limit value you can set" -msgstr "500 é o número máximo de itens que você pode definir" +msgstr "O número máximo de itens é 500" #: airtime_mvc/application/forms/SmartBlockCriteria.php:490 msgid "You must select Criteria and Modifier" @@ -1402,7 +1402,7 @@ msgstr "Você precisa selecionar Critério e Modificador " #: airtime_mvc/application/forms/SmartBlockCriteria.php:497 msgid "'Length' should be in '00:00:00' format" -msgstr "A duração precisa ser informada no formato '00:00:00'" +msgstr "A duração deve ser informada no formato '00:00:00'" #: airtime_mvc/application/forms/SmartBlockCriteria.php:502 #: airtime_mvc/application/forms/SmartBlockCriteria.php:515 @@ -1432,7 +1432,7 @@ msgstr "Programa:" #: airtime_mvc/application/forms/ShowBuilder.php:80 msgid "All My Shows:" -msgstr "Todos os Meus Programas:" +msgstr "Meus Programas:" #: airtime_mvc/application/forms/EditUser.php:118 msgid "Timezone:" @@ -1448,19 +1448,19 @@ msgstr "Usar Autenticação Personalizada:" #: airtime_mvc/application/forms/AddShowLiveStream.php:26 msgid "Custom Username" -msgstr "Usuário Personalizado:" +msgstr "Definir Usuário:" #: airtime_mvc/application/forms/AddShowLiveStream.php:39 msgid "Custom Password" -msgstr "Senha Personalizada:" +msgstr "Definir Senha:" #: airtime_mvc/application/forms/AddShowLiveStream.php:63 msgid "Username field cannot be empty." -msgstr "O Usuário não pode estar em branco." +msgstr "O usuário não pode estar em branco." #: airtime_mvc/application/forms/AddShowLiveStream.php:68 msgid "Password field cannot be empty." -msgstr "A Senha não pode estar em branco." +msgstr "A senha não pode estar em branco." #: airtime_mvc/application/forms/GeneralPreferences.php:34 msgid "Default Fade (s):" @@ -1473,7 +1473,7 @@ msgstr "informe o tempo em segundos 0{.0}" #: airtime_mvc/application/forms/GeneralPreferences.php:48 #, php-format msgid "Allow Remote Websites To Access \"Schedule\" Info?%s (Enable this to make front-end widgets work.)" -msgstr "Permitir que sites remotos acessem as informações \"Schedule \"%s? (Habilite para fazer com que widgets funcionem.)" +msgstr "Permitir que sites remotos acessem as informações sobre \"Programação\"?%s (Habilite para fazer com que widgets externos funcionem.)" #: airtime_mvc/application/forms/GeneralPreferences.php:49 msgid "Disabled" @@ -1532,15 +1532,15 @@ msgstr "Sábado" #: airtime_mvc/application/forms/SoundcloudPreferences.php:16 msgid "Automatically Upload Recorded Shows" -msgstr "Programas Gravador Adicionados Automaticamente" +msgstr "Enviar programas gravados automaticamente" #: airtime_mvc/application/forms/SoundcloudPreferences.php:26 msgid "Enable SoundCloud Upload" -msgstr "Habilitar Envio para SoundCloud" +msgstr "Habilitar envio para SoundCloud" #: airtime_mvc/application/forms/SoundcloudPreferences.php:36 msgid "Automatically Mark Files \"Downloadable\" on SoundCloud" -msgstr "Definir Arquivos como \"Downloadable\" no SoundCloud" +msgstr "Permitir download dos arquivos no SoundCloud" #: airtime_mvc/application/forms/SoundcloudPreferences.php:47 msgid "SoundCloud Email" @@ -1711,7 +1711,7 @@ msgstr "Erro na aplicação" #: airtime_mvc/application/controllers/UserController.php:55 #: airtime_mvc/application/controllers/UserController.php:137 msgid "Specific action is not allowed in demo version!" -msgstr "Ação específica não permitida na versão de demonstração!" +msgstr "Esta ação não é permitida na versão de demonstração!" #: airtime_mvc/application/controllers/UserController.php:87 msgid "User added successfully!" @@ -1747,11 +1747,11 @@ msgstr "Programa em Exibição:" #: airtime_mvc/application/controllers/LocaleController.php:41 msgid "Current" -msgstr "Em Exibição" +msgstr "Agora" #: airtime_mvc/application/controllers/LocaleController.php:43 msgid "You are running the latest version" -msgstr "Você está executando a última versão" +msgstr "Você está executando a versão mais recente" #: airtime_mvc/application/controllers/LocaleController.php:44 msgid "New version available: " @@ -1775,7 +1775,7 @@ msgstr "Adicionar a esta lista de reprodução" #: airtime_mvc/application/controllers/LocaleController.php:50 msgid "Add to current smart block" -msgstr "Adiconar a este bloco inteligente" +msgstr "Adiconar a este bloco" #: airtime_mvc/application/controllers/LocaleController.php:51 msgid "Adding 1 Item" @@ -1793,11 +1793,11 @@ msgstr "Você pode adicionar somente faixas a um bloco inteligente." #: airtime_mvc/application/controllers/LocaleController.php:54 #: airtime_mvc/application/controllers/PlaylistController.php:160 msgid "You can only add tracks, smart blocks, and webstreams to playlists." -msgstr "Você pode adicionar somente faixas, blocos inteligentes e fluxos às listas de reprodução" +msgstr "Você pode adicionar apenas faixas, blocos e fluxos às listas de reprodução" #: airtime_mvc/application/controllers/LocaleController.php:57 msgid "Please select a cursor position on timeline." -msgstr "Por favor seleccione um posição do cursor na linha do tempo." +msgstr "Por favor selecione um posição do cursor na linha do tempo." #: airtime_mvc/application/controllers/LocaleController.php:61 #: airtime_mvc/application/controllers/LibraryController.php:190 @@ -1851,11 +1851,11 @@ msgstr "Arquivos" #: airtime_mvc/application/controllers/LocaleController.php:96 msgid "Playlists" -msgstr "Listas de Reprodução" +msgstr "Listas" #: airtime_mvc/application/controllers/LocaleController.php:97 msgid "Smart Blocks" -msgstr "Blocos Inteligentes" +msgstr "Blocos" #: airtime_mvc/application/controllers/LocaleController.php:98 msgid "Web Streams" @@ -1880,7 +1880,7 @@ msgstr "Obtendo dados do servidor..." #: airtime_mvc/application/controllers/LocaleController.php:103 msgid "The soundcloud id for this file is: " -msgstr "O id do SoundCloud para este arquivo é:" +msgstr "O id no SoundCloud para este arquivo é:" #: airtime_mvc/application/controllers/LocaleController.php:104 msgid "There was an error while uploading to soundcloud." @@ -1913,7 +1913,7 @@ msgstr "A entrada deve estar no formato hh:mm:ss.t" #: airtime_mvc/application/controllers/LocaleController.php:113 #, php-format msgid "You are currently uploading files. %sGoing to another screen will cancel the upload process. %sAre you sure you want to leave the page?" -msgstr "Você está fazendo upload de arquivos neste momento. %sIr a outra tela cancelará o processo de upload. %sTem certeza de que deseja sair desta página?" +msgstr "Você está fazendo upload de arquivos neste momento. %s Ir a outra tela cancelará o processo de upload. %sTem certeza de que deseja sair desta página?" #: airtime_mvc/application/controllers/LocaleController.php:115 msgid "please put in a time '00:00:00 (.0)'" @@ -1925,7 +1925,7 @@ msgstr "por favor informe o tempo em segundos '00 (.0)'" #: airtime_mvc/application/controllers/LocaleController.php:117 msgid "Your browser does not support playing this file type: " -msgstr "Seu navegador não suporta a execução deste formato de arquivo:" +msgstr "Seu navegador não suporta a execução deste tipo de arquivo:" #: airtime_mvc/application/controllers/LocaleController.php:118 msgid "Dynamic block is not previewable" @@ -1937,11 +1937,11 @@ msgstr "Limitar em:" #: airtime_mvc/application/controllers/LocaleController.php:120 msgid "Playlist saved" -msgstr "Lista de Reprodução salva" +msgstr "A lista foi salva" #: airtime_mvc/application/controllers/LocaleController.php:121 msgid "Playlist shuffled" -msgstr "Lista de Reprodução embaralhada" +msgstr "A lista foi embaralhada" #: airtime_mvc/application/controllers/LocaleController.php:123 msgid "Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't 'watched' anymore." @@ -1967,15 +1967,15 @@ msgstr "Sim, quero colaborar com o Airtime" #: airtime_mvc/application/controllers/LocaleController.php:130 #: airtime_mvc/application/controllers/LocaleController.php:188 msgid "Image must be one of jpg, jpeg, png, or gif" -msgstr "A imagem precisa ter extensão a jpg, jpeg, png ou gif" +msgstr "A imagem precisa conter extensão jpg, jpeg, png ou gif" #: airtime_mvc/application/controllers/LocaleController.php:133 msgid "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." -msgstr "Um bloco inteligente estático salvará os critérios e gerará o conteúdo imediatamente. Isso permite que você edite e visualize-o na Biblioteca antes de adicioná-lo a um programa." +msgstr "Um bloco estático salvará os critérios e gerará o conteúdo imediatamente. Isso permite que você edite e visualize-o na Biblioteca antes de adicioná-lo a um programa." #: airtime_mvc/application/controllers/LocaleController.php:135 msgid "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." -msgstr "Um bloco inteligente dinâmico apenas conterá critérios. O conteúdo do bloco será gerado após adicioná-lo a um programa. Você não será capaz de ver ou editar o conteúdo na Biblioteca." +msgstr "Um bloco dinâmico apenas conterá critérios. O conteúdo do bloco será gerado após adicioná-lo a um programa. Você não será capaz de ver ou editar o conteúdo na Biblioteca." #: airtime_mvc/application/controllers/LocaleController.php:137 msgid "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." @@ -1983,15 +1983,15 @@ msgstr "A duração desejada do bloco não será completada se o Airtime não lo #: airtime_mvc/application/controllers/LocaleController.php:138 msgid "Smart block shuffled" -msgstr "Bloco inteligente embaralhado" +msgstr "O bloco foi embaralhado" #: airtime_mvc/application/controllers/LocaleController.php:139 msgid "Smart block generated and criteria saved" -msgstr "Bloco inteligente gerado e criterio salvo" +msgstr "O bloco foi gerado e o criterio foi salvo" #: airtime_mvc/application/controllers/LocaleController.php:140 msgid "Smart block saved" -msgstr "Bloco inteligente salvo" +msgstr "O bloco foi salvo" #: airtime_mvc/application/controllers/LocaleController.php:141 msgid "Processing..." @@ -2050,7 +2050,7 @@ msgstr "O fluxo está desabilitado" #: airtime_mvc/application/controllers/LocaleController.php:174 msgid "Can not connect to the streaming server" -msgstr "Não é possível conectar ao servidor de fluxo" +msgstr "Não é possível conectar ao servidor de streaming" #: airtime_mvc/application/controllers/LocaleController.php:176 msgid "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." @@ -2075,7 +2075,7 @@ msgstr "Marque esta caixa para ligar automaticamente as fontes Mestre / Programa #: airtime_mvc/application/controllers/LocaleController.php:182 msgid "If your Icecast server expects a username of 'source', this field can be left blank." -msgstr "Se o servidor Icecast esperar por um usuário de 'source', este campo poderá permanecer em branco." +msgstr "Se o servidor Icecast esperar por um usuário 'source', este campo poderá permanecer em branco." #: airtime_mvc/application/controllers/LocaleController.php:183 #: airtime_mvc/application/controllers/LocaleController.php:193 @@ -2088,7 +2088,7 @@ msgstr "Se você alterar os campos de usuário ou senha de um fluxo ativo, o mec #: airtime_mvc/application/controllers/LocaleController.php:186 msgid "This is the admin username and password for Icecast/SHOUTcast to get listener statistics." -msgstr "Este é o usuário e senha de servidores Icecast / SHOUTcast, para obter estatísticas de ouvinte." +msgstr "Este é o usuário e senha de servidores Icecast / SHOUTcast, para obter estatísticas de ouvintes." #: airtime_mvc/application/controllers/LocaleController.php:190 msgid "No result found" @@ -2100,7 +2100,7 @@ msgstr "Este segue o mesmo padrão de segurança para os programas: apenas usuá #: airtime_mvc/application/controllers/LocaleController.php:192 msgid "Specify custom authentication which will work only for this show." -msgstr "Especifique a autenticação personalizada que funcionará apenas para este programa." +msgstr "Defina uma autenticação personalizada que funcionará apenas neste programa." #: airtime_mvc/application/controllers/LocaleController.php:194 msgid "The show instance doesn't exist anymore!" @@ -2112,7 +2112,7 @@ msgstr "Programa" #: airtime_mvc/application/controllers/LocaleController.php:199 msgid "Show is empty" -msgstr "O Programa está sem conteúdo" +msgstr "O programa está vazio" #: airtime_mvc/application/controllers/LocaleController.php:200 msgid "1m" @@ -2261,7 +2261,7 @@ msgstr "mês" #: airtime_mvc/application/controllers/LocaleController.php:260 msgid "Shows longer than their scheduled time will be cut off by a following show." -msgstr "Um programa com duração maior que o tempo programado será cortado pelo programa seguinte." +msgstr "Um programa com tempo maior que a duração programada será cortado pelo programa seguinte." #: airtime_mvc/application/controllers/LocaleController.php:261 msgid "Cancel Current Show?" @@ -2319,11 +2319,11 @@ msgstr "Fade Saída" #: airtime_mvc/application/controllers/LocaleController.php:282 msgid "Show Empty" -msgstr "Programa sem conteúdo" +msgstr "Programa vazio" #: airtime_mvc/application/controllers/LocaleController.php:283 msgid "Recording From Line In" -msgstr "Gravando a partir de Line In" +msgstr "Gravando a partir do Line In" #: airtime_mvc/application/controllers/LocaleController.php:288 msgid "Cannot schedule outside a show." @@ -2390,7 +2390,7 @@ msgstr "Abrir" #: airtime_mvc/application/controllers/LocaleController.php:317 msgid "Guests can do the following:" -msgstr "Visitantes poderm fazer o seguinte:" +msgstr "Visitantes podem fazer o seguinte:" #: airtime_mvc/application/controllers/LocaleController.php:318 msgid "View schedule" @@ -2406,7 +2406,7 @@ msgstr "DJs podem fazer o seguinte:" #: airtime_mvc/application/controllers/LocaleController.php:321 msgid "Manage assigned show content" -msgstr "Gerenciar o conteúdo de programas a ele delegados" +msgstr "Gerenciar o conteúdo de programas delegados a ele" #: airtime_mvc/application/controllers/LocaleController.php:322 msgid "Import media files" @@ -2454,11 +2454,11 @@ msgstr "Gerenciar diretórios monitorados" #: airtime_mvc/application/controllers/LocaleController.php:334 msgid "View system status" -msgstr "Visualizar estado so sistema" +msgstr "Visualizar estado do sistema" #: airtime_mvc/application/controllers/LocaleController.php:335 msgid "Access playout history" -msgstr "Acessar histórico de programação" +msgstr "Acessar o histórico da programação" #: airtime_mvc/application/controllers/LocaleController.php:336 msgid "View listener stats" @@ -2470,7 +2470,7 @@ msgstr "Exibir / ocultar colunas" #: airtime_mvc/application/controllers/LocaleController.php:340 msgid "From {from} to {to}" -msgstr "De {from} para {to}" +msgstr "De {from} até {to}" #: airtime_mvc/application/controllers/LocaleController.php:341 msgid "kbps" @@ -2478,7 +2478,7 @@ msgstr "kbps" #: airtime_mvc/application/controllers/LocaleController.php:342 msgid "yyyy-mm-dd" -msgstr "dd-mm-yyyy" +msgstr "yyy-mm-dd" #: airtime_mvc/application/controllers/LocaleController.php:343 msgid "hh:mm:ss.t" @@ -2532,7 +2532,7 @@ msgstr "Minuto" #: airtime_mvc/application/controllers/LocaleController.php:358 msgid "Done" -msgstr "Feito" +msgstr "Concluído" #: airtime_mvc/application/controllers/LocaleController.php:361 msgid "Select files" @@ -2553,7 +2553,7 @@ msgstr "Parar Upload" #: airtime_mvc/application/controllers/LocaleController.php:368 msgid "Start upload" -msgstr "In iciar Upload" +msgstr "Iniciar Upload" #: airtime_mvc/application/controllers/LocaleController.php:369 msgid "Add files" @@ -2570,7 +2570,7 @@ msgstr "N/A" #: airtime_mvc/application/controllers/LocaleController.php:372 msgid "Drag files here." -msgstr "Arraste arquivos aqui." +msgstr "Arraste arquivos nesta área." #: airtime_mvc/application/controllers/LocaleController.php:373 msgid "File extension error." @@ -2602,7 +2602,7 @@ msgstr "Erro genérico." #: airtime_mvc/application/controllers/LocaleController.php:380 msgid "IO error." -msgstr "Erro de IO." +msgstr "Erro de I/O." #: airtime_mvc/application/controllers/LocaleController.php:381 #, php-format @@ -2620,7 +2620,7 @@ msgstr "Arquivo: %f, tamanho: %s, tamanho máximo: %m" #: airtime_mvc/application/controllers/LocaleController.php:385 msgid "Upload URL might be wrong or doesn't exist" -msgstr "URL de upload pode estar errada ou não existe." +msgstr "URL de upload pode estar incorreta ou inexiste." #: airtime_mvc/application/controllers/LocaleController.php:386 msgid "Error: File too large: " @@ -2657,7 +2657,7 @@ msgstr "Excluir" #: airtime_mvc/application/controllers/ShowbuilderController.php:212 msgid "show does not exist" -msgstr "programa não existe" +msgstr "programa inexistente" #: airtime_mvc/application/controllers/ListenerstatController.php:56 msgid "Please make sure admin user/password is correct on System->Streams page." @@ -2702,17 +2702,17 @@ msgstr "%s não encontrado" #: airtime_mvc/application/controllers/LibraryController.php:104 #: airtime_mvc/application/controllers/PlaylistController.php:148 msgid "Something went wrong." -msgstr "Algum errado ocorreu." +msgstr "Ocorreu algo errado." #: airtime_mvc/application/controllers/LibraryController.php:182 #: airtime_mvc/application/controllers/LibraryController.php:206 #: airtime_mvc/application/controllers/LibraryController.php:229 msgid "Add to Playlist" -msgstr "Adicionar a Lista de Reprodução" +msgstr "Adicionar à Lista" #: airtime_mvc/application/controllers/LibraryController.php:184 msgid "Add to Smart Block" -msgstr "Adicionar a Bloco Inteligente" +msgstr "Adicionar ao Bloco" #: airtime_mvc/application/controllers/LibraryController.php:194 #: airtime_mvc/application/controllers/ScheduleController.php:897 @@ -2721,7 +2721,7 @@ msgstr "Download" #: airtime_mvc/application/controllers/LibraryController.php:198 msgid "Duplicate Playlist" -msgstr "Duplicar Lista de Reprodução" +msgstr "Duplicar Lista" #: airtime_mvc/application/controllers/LibraryController.php:213 #: airtime_mvc/application/controllers/LibraryController.php:235 @@ -2836,7 +2836,7 @@ msgstr "Fluxo Sem Título" #: airtime_mvc/application/controllers/WebstreamController.php:138 msgid "Webstream saved." -msgstr "Fluxo salvo." +msgstr "Fluxo gravado." #: airtime_mvc/application/controllers/WebstreamController.php:146 msgid "Invalid form values." @@ -2844,7 +2844,7 @@ msgstr "Valores do formulário inválidos." #: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 msgid "Listener Count Over Time" -msgstr "Número de Ouvintes ao Longo da Exibição" +msgstr "Número de ouvintes durante a exibição" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 msgid "Previous:" @@ -2860,15 +2860,15 @@ msgstr "Fontes de Fluxo" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:29 msgid "Master Source" -msgstr "Fonte Master" +msgstr "Master" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 msgid "Show Source" -msgstr "Fonte Programa" +msgstr "Programa" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 msgid "Scheduled Play" -msgstr "Reprodução Agendada" +msgstr "Programação" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:54 msgid "ON AIR" @@ -2880,15 +2880,15 @@ msgstr "Ouvir" #: airtime_mvc/application/views/scripts/partialviews/header.phtml:59 msgid "Station time" -msgstr "Horário da Estação" +msgstr "Hora Local" #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 msgid "Your trial expires in" -msgstr "Seu período de teste expira em" +msgstr "Seu período de teste termina em" #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 msgid "Purchase your copy of Airtime" -msgstr "Compre sua cópia do Airtime" +msgstr "Adquira sua cópia do Airtime" #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 msgid "My Account" @@ -2904,7 +2904,7 @@ msgstr "Novo Usuário" #: airtime_mvc/application/views/scripts/user/add-user.phtml:17 msgid "id" -msgstr "is" +msgstr "id" #: airtime_mvc/application/views/scripts/user/add-user.phtml:19 msgid "First Name" @@ -2921,7 +2921,7 @@ msgstr "Tipo de Usuário" #: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 #, php-format msgid "%sAirtime%s %s, the open radio software for scheduling and remote station management. %s" -msgstr "%sAirtime%s %s, um software de rádio aberto para programação e gestão remota de estação. % s" +msgstr "%sAirtime%s %s, um software livre para automação e gestão remota de estação de rádio. % s" #: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 #, php-format @@ -2934,7 +2934,7 @@ msgstr "Compartilhar" #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 msgid "Select stream:" -msgstr "Selecione o fluxo:" +msgstr "Selecionar fluxo:" #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 #: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:50 @@ -2952,27 +2952,27 @@ msgstr "Benvindo ao Airtime!" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 msgid "Here's how you can get started using Airtime to automate your broadcasts: " -msgstr "Veja aqui como você pode começar a usar o Airtime para automatizar suas transmissões:" +msgstr "Saiba como utilizar o Airtime para automatizar suas transmissões:" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 msgid "Begin by adding your files to the library using the 'Add Media' menu button. You can drag and drop your files to this window too." -msgstr "Comece adicionando seus arquivos À biblioteca usando o botão \"Adicionar Mídia\" no menu. Você pode arrastar e soltar os arquivos para esta janela também." +msgstr "Comece adicionando seus arquivos à biblioteca usando o botão \"Adicionar Mídia\" . Você também pode arrastar e soltar os arquivos dentro da página." #: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 msgid "Create a show by going to 'Calendar' in the menu bar, and then clicking the '+ Show' icon. This can be either a one-time or repeating show. Only admins and program managers can add shows." -msgstr "Crie um programa, indo até 'Calendário' na barra de menu e, em seguida, clicando no ícone '+Programa'. Este pode ser um programa inédito ou retransmitido. Apenas administradores e gerentes de programação podem adicionar programas." +msgstr "Crie um programa, através do 'Calendário' , clicando no ícone '+Programa'. Este pode ser um programa inédito ou retransmitido. Apenas administradores e gerentes de programação podem adicionar programas." #: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 msgid "Add media to the show by going to your show in the Schedule calendar, left-clicking on it and selecting 'Add / Remove Content'" -msgstr "Adicione conteúdo ao programa, indo para o seu programa no calendário, clique com o botão esquerdo do mouse sobre o programa e selecione \"Adicionar / Remover Conteúdo\"" +msgstr "Adicione conteúdos ao seu programa, através do link Calendário, clique com o botão esquerdo do mouse sobre o programa e selecione \"Adicionar / Remover Conteúdo\"" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 msgid "Select your media from the left pane and drag them to your show in the right pane." -msgstr "Selecione seu conteúdo a partir do painel esquerdo e arraste-o para o seu programa no painel da direita." +msgstr "Selecione seu conteúdo a partir da lista , no painel esquerdo, e arraste-o para o seu programa, no painel da direita." #: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 msgid "Then you're good to go!" -msgstr "Então você está pronto para começar!" +msgstr "Você já está pronto para começar!" #: airtime_mvc/application/views/scripts/dashboard/help.phtml:13 #, php-format @@ -2989,11 +2989,11 @@ msgstr "Expandir Bloco Dinâmico" #: airtime_mvc/application/views/scripts/playlist/update.phtml:98 msgid "Empty smart block" -msgstr "Bloco inteligente vazio" +msgstr "Bloco vazio" #: airtime_mvc/application/views/scripts/playlist/update.phtml:100 msgid "Empty playlist" -msgstr "Lista de reprodução vazia" +msgstr "Lista vazia" #: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:66 @@ -3024,27 +3024,27 @@ msgstr "Novo" #: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:13 #: airtime_mvc/application/views/scripts/webstream/webstream.phtml:7 msgid "New Playlist" -msgstr "Nova Lista de Reprodução" +msgstr "Nova Lista" #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14 #: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14 #: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 msgid "New Smart Block" -msgstr "Novo Bloco Inteligente" +msgstr "Novo Bloco" #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15 #: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15 #: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9 msgid "New Webstream" -msgstr "Novo Fluxo" +msgstr "Novo Fluxo Web" #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 msgid "Shuffle playlist" -msgstr "Embaralhar Lista de Reprodução" +msgstr "Embaralhar Lista" #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 msgid "Save playlist" -msgstr "Salvar Lista de Reprodução" +msgstr "Salvar Lista" #: airtime_mvc/application/views/scripts/playlist/playlist.phtml:30 #: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:27 @@ -3114,7 +3114,7 @@ msgstr "Quem" #: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33 msgid "Style" -msgstr "Estilo" +msgstr "Aparência" #: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 msgid "Email sent" @@ -3130,7 +3130,7 @@ msgstr "Voltar à tela de login" #: airtime_mvc/application/views/scripts/login/index.phtml:7 msgid "Welcome to the online Airtime demo! You can log in using the username 'admin' and the password 'admin'." -msgstr "Bem-vindo à demonstração online do Airtime! Você pode fazer login com usuário usando 'admin' e senha \"admin\"." +msgstr "Bem-vindo à demonstração online do Airtime! Autentique-se com usuário 'admin' e senha \"admin\"." #: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 #: airtime_mvc/application/views/scripts/form/login.phtml:34 @@ -3216,7 +3216,7 @@ msgstr "Duração Padrão:" #: airtime_mvc/application/views/scripts/webstream/webstream.phtml:63 msgid "No webstream" -msgstr "Nenhum fluxo" +msgstr "Nenhum fluxo web" #: airtime_mvc/application/views/scripts/error/error.phtml:6 msgid "Zend Framework Default Application" @@ -3274,7 +3274,7 @@ msgstr "Definir" #: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 msgid "Current Import Folder:" -msgstr "Diretório Import Atual:" +msgstr "Diretório de Importação Atual:" #: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 #: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 @@ -3292,7 +3292,7 @@ msgstr "Remover diretório monitorado" #: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:50 msgid "You are not watching any media folders." -msgstr "Você não está monitorando nenhum diretório de mídia." +msgstr "Você não está monitorando nenhum diretório." #: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 msgid "Choose Days:" @@ -3332,7 +3332,7 @@ msgstr "Nota: qualquer arquivo maior que 600x600 será redimensionado" #: airtime_mvc/application/views/scripts/form/register-dialog.phtml:164 #: airtime_mvc/application/views/scripts/form/support-setting.phtml:164 msgid "Show me what I am sending " -msgstr "Mostrar o que estou enviando" +msgstr "Mostrar quais informações estou enviando" #: airtime_mvc/application/views/scripts/form/register-dialog.phtml:178 msgid "Terms and Conditions" @@ -3380,7 +3380,7 @@ msgstr "Configurações de %s" #: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 msgid "Repeat Days:" -msgstr "Dias para repetir:" +msgstr "Dias para reexibir:" #: airtime_mvc/application/views/scripts/form/daterange.phtml:6 msgid "Filter History" @@ -3418,7 +3418,7 @@ msgstr "URL de Conexão:" #: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:3 msgid "Smart Block Options" -msgstr "Opções de Bloco Inteligente" +msgstr "Opções de Bloco" #: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 msgid " to " @@ -3453,7 +3453,7 @@ msgstr "Configurações Globais" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 msgid "dB" -msgstr "db" +msgstr "dB" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 msgid "Output Stream Settings" @@ -3472,7 +3472,7 @@ msgstr "Taxa de Amostragem:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 msgid "Isrc Number:" -msgstr "Número do Isrc:" +msgstr "Número Isrc:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 msgid "File Path:" @@ -3480,7 +3480,7 @@ msgstr "Caminho do Arquivo:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:39 msgid "Web Stream" -msgstr "Fluxo" +msgstr "Fluxo Web" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 msgid "Dynamic Smart Block" @@ -3508,7 +3508,7 @@ msgstr "Critério para Bloco Inteligente Dinâmico:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:118 msgid "Limit to " -msgstr "Limite em" +msgstr "Limitar em" #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 msgid "Please selection an option" @@ -3516,5 +3516,5 @@ msgstr "Por favor selecione uma opção" #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 msgid "No Records" -msgstr "Nenhum programa gravado" +msgstr "Não há gravações" From 969e34aba1486e684d2d0120ffbbe91b440d51fd Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 12:22:32 -0500 Subject: [PATCH 077/208] CC-4930: Calendar -> Recorded shows have 'show partially filled' icon -fixed --- .../schedule/full-calendar-functions.js | 94 ++++++++++--------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js index 810ce0d88..192d811fe 100644 --- a/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js +++ b/airtime_mvc/public/js/airtime/schedule/full-calendar-functions.js @@ -233,55 +233,61 @@ function eventRender(event, element, view) { } //add the record/rebroadcast/soundcloud icons if needed - if((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 1 && event.soundcloud_id === -1) { - $(element).find(".fc-event-time").before(''); - } else if ((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 1 && event.soundcloud_id > 0) { - $(element).find(".fc-event-time").before(''); - } else if ((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 1 && event.soundcloud_id === -2) { - $(element).find(".fc-event-time").before(''); - } else if ((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 1 && event.soundcloud_id === -3) { - $(element).find(".fc-event-time").before(''); - } - - if(view.name === 'month' && event.record === 1 && event.soundcloud_id === -1) { - $(element).find(".fc-event-title").after(''); - } else if (view.name === 'month' && event.record === 1 && event.soundcloud_id > 0) { - $(element).find(".fc-event-title").after(''); - } else if (view.name === 'month' && event.record === 1 && event.soundcloud_id === -2) { - $(element).find(".fc-event-title").after(''); - } else if (view.name === 'month' && event.record === 1 && event.soundcloud_id === -3) { - $(element).find(".fc-event-title").after(''); - } - - if (view.name === 'agendaDay' || view.name === 'agendaWeek') { - if (event.show_empty === 1 && event.record === 0 && event.rebroadcast === 0) { - $(element) - .find(".fc-event-time") - .before(''); - } else if (event.show_partial_filled === true) { - $(element) - .find(".fc-event-time") - .before(''); + if (event.record === 1) { + if (view.name === 'agendaDay' || view.name === 'agendaWeek') { + if (event.soundcloud_id === -1) { + $(element).find(".fc-event-time").before(''); + } else if ( event.soundcloud_id > 0) { + $(element).find(".fc-event-time").before(''); + } else if (event.soundcloud_id === -2) { + $(element).find(".fc-event-time").before(''); + } else if (event.soundcloud_id === -3) { + $(element).find(".fc-event-time").before(''); + } + } else if (view.name === 'month') { + if(event.soundcloud_id === -1) { + $(element).find(".fc-event-title").after(''); + } else if (event.soundcloud_id > 0) { + $(element).find(".fc-event-title").after(''); + } else if (event.soundcloud_id === -2) { + $(element).find(".fc-event-title").after(''); + } else if (event.soundcloud_id === -3) { + $(element).find(".fc-event-title").after(''); + } } - } else if (view.name === 'month') { - if (event.show_empty === 1 && event.record === 0 && event.rebroadcast === 0) { - $(element) - .find(".fc-event-title") - .after(''); - } else if (event.show_partial_filled === true) { - $(element) - .find(".fc-event-title") - .after(''); + } + + if (event.record === 0 && event.rebroadcast === 0) { + if (view.name === 'agendaDay' || view.name === 'agendaWeek') { + if (event.show_empty === 1) { + $(element) + .find(".fc-event-time") + .before(''); + } else if (event.show_partial_filled === true) { + $(element) + .find(".fc-event-time") + .before(''); + } + } else if (view.name === 'month') { + if (event.show_empty === 1) { + $(element) + .find(".fc-event-title") + .after(''); + } else if (event.show_partial_filled === true) { + $(element) + .find(".fc-event-title") + .after(''); + } } } //rebroadcast icon - if((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.rebroadcast === 1) { - $(element).find(".fc-event-time").before(''); - } - - if(view.name === 'month' && event.rebroadcast === 1) { - $(element).find(".fc-event-title").after(''); + if (event.rebroadcast === 1) { + if (view.name === 'agendaDay' || view.name === 'agendaWeek') { + $(element).find(".fc-event-time").before(''); + } else if (view.name === 'month') { + $(element).find(".fc-event-title").after(''); + } } } From 17f3c795901264ad993c53aa0d084fed91b4d570 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 13:01:53 -0500 Subject: [PATCH 078/208] CC-4931: Default fades upgrade script --- install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index 55e80d37e..3593384ed 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -19,6 +19,13 @@ UPDATE cc_files SET cueout = length where cueout = '00:00:00'; UPDATE cc_schedule SET cue_out = clip_length WHERE cue_out = '00:00:00'; +UPDATE cc_schedule SET fade_out = '00:00:59.9' WHERE fade_out > '00:00:59.9'; +UPDATE cc_schedule SET fade_in = '00:00:59.9' WHERE fade_in > '00:00:59.9'; +UPDATE cc_playlistcontents SET fadeout = '00:00:59.9' WHERE fadeout > '00:00:59.9'; +UPDATE cc_playlistcontents SET fadein = '00:00:59.9' WHERE fadein > '00:00:59.9'; +UPDATE cc_blockcontents SET fadeout = '00:00:59.9' WHERE fadeout > '00:00:59.9'; +UPDATE cc_blockcontents SET fadein = '00:00:59.9' WHERE fadein > '00:00:59.9'; + INSERT INTO cc_pref("keystr", "valstr") VALUES('locale', 'en_CA'); INSERT INTO cc_pref("subjid", "keystr", "valstr") VALUES(1, 'user_locale', 'en_CA'); From 525b2dcb33b34a0638914b74eaa7c3b0d5d604e6 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 15:41:47 -0500 Subject: [PATCH 079/208] CC-4895: Remove all json die() statements from code - removed json_encode --- .../application/controllers/ApiController.php | 6 ++++-- .../controllers/ListenerstatController.php | 2 +- .../controllers/PlaylistController.php | 18 +++++++++--------- .../controllers/PluploadController.php | 4 ++-- .../controllers/PreferenceController.php | 17 +++++++++-------- .../controllers/ScheduleController.php | 4 ++-- .../application/controllers/UserController.php | 10 +++++----- .../public/js/airtime/library/plupload.js | 3 +-- airtime_mvc/public/js/airtime/library/spl.js | 9 +++------ .../js/airtime/listenerstat/listenerstat.js | 1 - .../js/airtime/playlist/smart_blockbuilder.js | 5 ++--- .../js/airtime/preferences/preferences.js | 3 +-- .../js/airtime/preferences/streamsetting.js | 6 ++---- .../public/js/airtime/showbuilder/builder.js | 3 +-- airtime_mvc/public/js/airtime/user/user.js | 3 +-- 15 files changed, 43 insertions(+), 51 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index ffbae08aa..cda2e9dcb 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -411,7 +411,9 @@ class ApiController extends Zend_Controller_Action $result = Application_Model_StoredFile::copyFileToStor($upload_dir, $fileName, $tempFileName); if (!is_null($result)) { - $this->_helper->json->sendJson('{"jsonrpc" : "2.0", "error" : {"code": '.$result['code'].', "message" : "'.$result['message'].'"}}'); + $this->_helper->json->sendJson( + array("jsonrpc" => "2.0", "error" => array("code" => $result['code'], "message" => $result['message'])) + ); } } @@ -600,7 +602,7 @@ class ApiController extends Zend_Controller_Action $response['key'] = $k; array_push($responses, $response); } - $this->_helper->json->sendJson( json_encode($responses) ); + $this->_helper->json->sendJson($responses); } public function listAllFilesAction() diff --git a/airtime_mvc/application/controllers/ListenerstatController.php b/airtime_mvc/application/controllers/ListenerstatController.php index f64ea8bfb..bb280378d 100644 --- a/airtime_mvc/application/controllers/ListenerstatController.php +++ b/airtime_mvc/application/controllers/ListenerstatController.php @@ -76,6 +76,6 @@ class ListenerstatController extends Zend_Controller_Action $endsDT = DateTime::createFromFormat("U", $ends_epoch, new DateTimeZone("UTC")); $data = Application_Model_ListenerStat::getDataPointsWithinRange($startsDT->format("Y-m-d H:i:s"), $endsDT->format("Y-m-d H:i:s"), $mountName); - $this->_helper->json->sendJson(json_encode($data)); + $this->_helper->json->sendJson($data); } } diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 11d397bc3..e474b9177 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -133,7 +133,7 @@ class PlaylistController extends Zend_Controller_Action if (!$p_isJson) { $this->createFullResponse(null); } else { - $this->_helper->json->sendJson(json_encode(array("error"=>$this->view->error, "result"=>1, "html"=>$this->createFullResponse(null, $p_isJson)))); + $this->_helper->json->sendJson(array("error"=>$this->view->error, "result"=>1, "html"=>$this->createFullResponse(null, $p_isJson))); } } @@ -509,7 +509,7 @@ class PlaylistController extends Zend_Controller_Action } $result["modified"] = $this->view->modified; - $this->_helper->json->sendJson(json_encode($result)); + $this->_helper->json->sendJson($result); } public function smartBlockGenerateAction() @@ -525,7 +525,7 @@ class PlaylistController extends Zend_Controller_Action $form->startForm($params['obj_id']); if ($form->isValid($params)) { $result = $bl->generateSmartBlock($params['data']); - $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true, true)))); + $this->_helper->json->sendJson(array("result"=>0, "html"=>$this->createFullResponse($bl, true, true))); } else { $this->view->obj = $bl; $this->view->id = $bl->getId(); @@ -533,7 +533,7 @@ class PlaylistController extends Zend_Controller_Action $viewPath = 'playlist/smart-block.phtml'; $result['html'] = $this->view->render($viewPath); $result['result'] = 1; - $this->_helper->json->sendJson(json_encode($result)); + $this->_helper->json->sendJson($result); } } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); @@ -552,9 +552,9 @@ class PlaylistController extends Zend_Controller_Action $result = $bl->shuffleSmartBlock(); if ($result['result'] == 0) { - $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($bl, true)))); + $this->_helper->json->sendJson(array("result"=>0, "html"=>$this->createFullResponse($bl, true))); } else { - $this->_helper->json->sendJson(json_encode($result)); + $this->_helper->json->sendJson($result); } } catch (BlockNotFoundException $e) { $this->playlistNotFound('block', true); @@ -572,9 +572,9 @@ class PlaylistController extends Zend_Controller_Action $result = $pl->shuffle(); if ($result['result'] == 0) { - $this->_helper->json->sendJson(json_encode(array("result"=>0, "html"=>$this->createFullResponse($pl, true)))); + $this->_helper->json->sendJson(array("result"=>0, "html"=>$this->createFullResponse($pl, true))); } else { - $this->_helper->json->sendJson(json_encode($result)); + $this->_helper->json->sendJson($result); } } catch (PlaylistNotFoundException $e) { $this->playlistNotFound('block', true); @@ -595,7 +595,7 @@ class PlaylistController extends Zend_Controller_Action $out = $bl->getCriteria(); $out['isStatic'] = false; } - $this->_helper->json->sendJson(json_encode($out)); + $this->_helper->json->sendJson($out); } } class WrongTypeToBlockException extends Exception {} diff --git a/airtime_mvc/application/controllers/PluploadController.php b/airtime_mvc/application/controllers/PluploadController.php index 49b706644..9698b163a 100644 --- a/airtime_mvc/application/controllers/PluploadController.php +++ b/airtime_mvc/application/controllers/PluploadController.php @@ -43,8 +43,8 @@ class PluploadController extends Zend_Controller_Action $result = Application_Model_StoredFile::copyFileToStor($upload_dir, $filename, $tempname); if (!is_null($result)) - $this->_helper->json->sendJson('{"jsonrpc" : "2.0", "error" : '.json_encode($result).'}'); + $this->_helper->json->sendJson(array("jsonrpc" => "2.0", "error" => $result)); - $this->_helper->json->sendJson('{"jsonrpc" : "2.0"}'); + $this->_helper->json->sendJson(array("jsonrpc" => "2.0")); } } diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index 33a021aa4..d30a0d292 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -70,10 +70,10 @@ class PreferenceController extends Zend_Controller_Action $this->view->statusMsg = "
    ". _("Preferences updated.")."
    "; $this->view->form = $form; - $this->_helper->json->sendJson(json_encode(array("valid"=>"true", "html"=>$this->view->render('preference/index.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"true", "html"=>$this->view->render('preference/index.phtml'))); } else { $this->view->form = $form; - $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/index.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"false", "html"=>$this->view->render('preference/index.phtml'))); } } $this->view->form = $form; @@ -323,19 +323,19 @@ class PreferenceController extends Zend_Controller_Action $this->view->form = $form; $this->view->num_stream = $num_of_stream; $this->view->statusMsg = "
    "._("Stream Setting Updated.")."
    "; - $this->_helper->json->sendJson(json_encode(array( + $this->_helper->json->sendJson(array( "valid"=>"true", "html"=>$this->view->render('preference/stream-setting.phtml'), "s1_set_admin_pass"=>$s1_set_admin_pass, "s2_set_admin_pass"=>$s2_set_admin_pass, "s3_set_admin_pass"=>$s3_set_admin_pass, - ))); + )); } else { $live_stream_subform->updateVariables(); $this->view->enable_stream_conf = Application_Model_Preference::GetEnableStreamConf(); $this->view->form = $form; $this->view->num_stream = $num_of_stream; - $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('preference/stream-setting.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"false", "html"=>$this->view->render('preference/stream-setting.phtml'))); } } @@ -441,7 +441,7 @@ class PreferenceController extends Zend_Controller_Action if (Application_Model_Preference::GetImportTimestamp()+10 > $now) { $res = true; } - $this->_helper->json->sendJson(json_encode($res)); + $this->_helper->json->sendJson($res); } public function getLiquidsoapStatusAction() @@ -456,7 +456,7 @@ class PreferenceController extends Zend_Controller_Action } $out[] = array("id"=>$i, "status"=>$status); } - $this->_helper->json->sendJson(json_encode($out)); + $this->_helper->json->sendJson($out); } public function setSourceConnectionUrlAction() @@ -479,6 +479,7 @@ class PreferenceController extends Zend_Controller_Action public function getAdminPasswordStatusAction() { + Logging::info("11111111111"); $out = array(); for ($i=1; $i<=3; $i++) { if (Application_Model_StreamSetting::getAdminPass('s'.$i)=='') { @@ -487,6 +488,6 @@ class PreferenceController extends Zend_Controller_Action $out["s".$i] = true; } } - $this->_helper->json->sendJson(json_encode($out)); + $this->_helper->json->sendJson($out); } } diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 3ce212513..c4fd65205 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -925,7 +925,7 @@ class ScheduleController extends Zend_Controller_Action 'title' => _('Download')); //returns format jjmenu is looking for. - $this->_helper->json->sendJson(json_encode($menu)); + $this->_helper->json->sendJson($menu); } /** @@ -983,6 +983,6 @@ class ScheduleController extends Zend_Controller_Action { $schedId = $this->_getParam('schedId'); $redrawLibTable = Application_Model_StoredFile::setIsScheduled($schedId, false); - $this->_helper->json->sendJson(json_encode(array("redrawLibTable" => $redrawLibTable))); + $this->_helper->json->sendJson(array("redrawLibTable" => $redrawLibTable)); } } diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index 14728512a..319c57767 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -53,7 +53,7 @@ class UserController extends Zend_Controller_Action && $formData['user_id'] != 0) { $this->view->form = $form; $this->view->successMessage = "
    "._("Specific action is not allowed in demo version!")."
    "; - $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml'))); } elseif ($form->validateLogin($formData)) { $user = new Application_Model_User($formData['user_id']); if (empty($formData['user_id'])) { @@ -89,14 +89,14 @@ class UserController extends Zend_Controller_Action $this->view->successMessage = "
    "._("User updated successfully!")."
    "; } - $this->_helper->json->sendJson(json_encode(array("valid"=>"true", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"true", "html"=>$this->view->render('user/add-user.phtml'))); } else { $this->view->form = $form; - $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml'))); } } else { $this->view->form = $form; - $this->_helper->json->sendJson(json_encode(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml')))); + $this->_helper->json->sendJson(array("valid"=>"false", "html"=>$this->view->render('user/add-user.phtml'))); } } @@ -135,7 +135,7 @@ class UserController extends Zend_Controller_Action && $formData['cu_login'] == 'admin') { $this->view->form = $form; $this->view->successMessage = "
    "._("Specific action is not allowed in demo version!")."
    "; - $this->_helper->json->sendJson(json_encode(array("html"=>$this->view->render('user/edit-user.phtml')))); + $this->_helper->json->sendJson(array("html"=>$this->view->render('user/edit-user.phtml'))); } else if ($form->isValid($formData) && $form->validateLogin($formData['cu_login'], $formData['cu_user_id'])) { $user = new Application_Model_User($formData['cu_user_id']); diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js index b429c5602..91fdc63ee 100644 --- a/airtime_mvc/public/js/airtime/library/plupload.js +++ b/airtime_mvc/public/js/airtime/library/plupload.js @@ -30,8 +30,7 @@ $(document).ready(function() { var tempFileName = j.tempfilepath; $.get(baseUrl+'Plupload/copyfile/format/json/name/'+ encodeURIComponent(file.name)+'/tempname/' + - encodeURIComponent(tempFileName), function(json){ - var jr = jQuery.parseJSON(json); + encodeURIComponent(tempFileName), function(jr){ if(jr.error !== undefined) { var row = $("
    ") .append('') diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 6c49443ff..4f61517e5 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -450,9 +450,8 @@ var AIRTIME = (function(AIRTIME){ if ($(this).hasClass('close')) { var sUrl = baseUrl+"playlist/get-block-info"; mod.disableUI(); - $.post(sUrl, {format:"json", id:blockId}, function(json){ + $.post(sUrl, {format:"json", id:blockId}, function(data){ $html = ""; - var data = $.parseJSON(json); var isStatic = data.isStatic; delete data.type; if (isStatic) { @@ -643,8 +642,7 @@ var AIRTIME = (function(AIRTIME){ obj_id = $('input[id="obj_id"]').val(); url = baseUrl+"Playlist/shuffle"; enableLoadingIcon(); - $.post(url, {format: "json", obj_id: obj_id}, function(data){ - var json = $.parseJSON(data) + $.post(url, {format: "json", obj_id: obj_id}, function(json){ if (json.error !== undefined) { alert(json.error); @@ -727,8 +725,7 @@ var AIRTIME = (function(AIRTIME){ enableLoadingIcon(); $.post(save_action, {format: "json", data: criteria, name: block_name, description: block_desc, obj_id: obj_id, type: obj_type, modified: lastMod}, - function(data){ - var json = $.parseJSON(data); + function(json){ if (json.error !== undefined) { alert(json.error); } diff --git a/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js b/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js index 926368966..bebfd1471 100644 --- a/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js +++ b/airtime_mvc/public/js/airtime/listenerstat/listenerstat.js @@ -23,7 +23,6 @@ $(document).ready(function() { function getDataAndPlot(startTimestamp, endTimestamp){ // get data $.get(baseUrl+'Listenerstat/get-data', {startTimestamp: startTimestamp, endTimestamp: endTimestamp}, function(data){ - data = JSON.parse(data); out = new Object(); $.each(data, function(mpName, v){ plotData = new Object(); diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index a06ee081e..022e93148 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -480,9 +480,8 @@ function getCriteriaOptionType(e) { return criteriaTypes[criteria]; } -function callback(data, type) { - var json = $.parseJSON(data), - dt = $('table[id="library_display"]').dataTable(); +function callback(json, type) { + var dt = $('table[id="library_display"]').dataTable(); if (type == 'shuffle' || type == 'generate') { if (json.error !== undefined) { diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index eec5e1c7e..50466f462 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -108,8 +108,7 @@ $(document).ready(function() { var data = $('#pref_form').serialize(); var url = baseUrl+'Preference/index'; - $.post(url, {format: "json", data: data}, function(data){ - var json = $.parseJSON(data); + $.post(url, {format: "json", data: data}, function(json){ $('#content').empty().append(json.html); $.cookie("default_airtime_locale", $('#locale').val(), {path: '/'}); setTimeout(removeSuccessMsg, 5000); diff --git a/airtime_mvc/public/js/airtime/preferences/streamsetting.js b/airtime_mvc/public/js/airtime/preferences/streamsetting.js index 6e76b693c..0fdd82f2c 100644 --- a/airtime_mvc/public/js/airtime/preferences/streamsetting.js +++ b/airtime_mvc/public/js/airtime/preferences/streamsetting.js @@ -77,8 +77,7 @@ function showForIcecast(ele){ function checkLiquidsoapStatus(){ var url = baseUrl+'Preference/get-liquidsoap-status/format/json'; var id = $(this).attr("id"); - $.post(url, function(json){ - var json_obj = jQuery.parseJSON(json); + $.post(url, function(json_obj){ for(var i=0;i Date: Thu, 7 Feb 2013 15:42:06 -0500 Subject: [PATCH 080/208] CC-4839: Nginx doesn't allow liquidsoap to check uploaded file, which blocks uploading any file -fixed --- airtime_mvc/application/models/StoredFile.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 9ca6ff32c..769f6176e 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -1026,8 +1026,10 @@ SQL; $LIQUIDSOAP_ERRORS = array('TagLib: MPEG::Properties::read() -- Could not find a valid last MPEG frame in the stream.'); // Ask Liquidsoap if file is playable - $command = sprintf("/usr/bin/airtime-liquidsoap -c 'output.dummy(audio_to_stereo(single(\"%s\")))' 2>&1", $audio_file); + $ls_command = sprintf('/usr/bin/airtime-liquidsoap -v -c "output.dummy(audio_to_stereo(single(%s)))" 2>&1', + escapeshellarg($audio_file)); + $command = "export PATH=/usr/local/bin:/usr/bin:/bin/usr/bin/ && $ls_command"; exec($command, $output, $rv); $isError = count($output) > 0 && in_array($output[0], $LIQUIDSOAP_ERRORS); From 8124d096d031749675587180a211fdde18ab330d Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 15:56:35 -0500 Subject: [PATCH 081/208] Removed log message --- airtime_mvc/application/controllers/PreferenceController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/airtime_mvc/application/controllers/PreferenceController.php b/airtime_mvc/application/controllers/PreferenceController.php index d30a0d292..7f6d6b8b5 100644 --- a/airtime_mvc/application/controllers/PreferenceController.php +++ b/airtime_mvc/application/controllers/PreferenceController.php @@ -479,7 +479,6 @@ class PreferenceController extends Zend_Controller_Action public function getAdminPasswordStatusAction() { - Logging::info("11111111111"); $out = array(); for ($i=1; $i<=3; $i++) { if (Application_Model_StreamSetting::getAdminPass('s'.$i)=='') { From b175dd84918dce00c26b47ac14239bf203257a73 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 7 Feb 2013 16:18:48 -0500 Subject: [PATCH 082/208] make sure upgrade script is fully up-to-date --- .../upgrades/airtime-2.3.0/data/schema.sql | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/install_minimal/upgrades/airtime-2.3.0/data/schema.sql b/install_minimal/upgrades/airtime-2.3.0/data/schema.sql index 689c9ed3c..b742303f0 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/schema.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/schema.sql @@ -1,3 +1,4 @@ + CREATE SEQUENCE cc_listener_count_id_seq START WITH 1 INCREMENT BY 1 @@ -55,6 +56,24 @@ ALTER TABLE cc_files ADD COLUMN silan_check boolean DEFAULT false, ADD COLUMN hidden boolean DEFAULT false; +ALTER TABLE cc_schedule + ALTER COLUMN cue_in DROP DEFAULT, + ALTER COLUMN cue_in SET NOT NULL, + ALTER COLUMN cue_out DROP DEFAULT, + ALTER COLUMN cue_out SET NOT NULL; + +ALTER SEQUENCE cc_listener_count_id_seq + OWNED BY cc_listener_count.id; + +ALTER SEQUENCE cc_locale_id_seq + OWNED BY cc_locale.id; + +ALTER SEQUENCE cc_mount_name_id_seq + OWNED BY cc_mount_name.id; + +ALTER SEQUENCE cc_timestamp_id_seq + OWNED BY cc_timestamp.id; + ALTER TABLE cc_listener_count ADD CONSTRAINT cc_listener_count_pkey PRIMARY KEY (id); @@ -72,5 +91,3 @@ ALTER TABLE cc_listener_count ALTER TABLE cc_listener_count ADD CONSTRAINT cc_timestamp_inst_fkey FOREIGN KEY (timestamp_id) REFERENCES cc_timestamp(id) ON DELETE CASCADE; - - From a37e032494f3b8bba1dc2488857011c0baa7a9e4 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 16:23:20 -0500 Subject: [PATCH 083/208] Adding Greek po file --- .../locale/el_GR/LC_MESSAGES/airtime.mo | Bin 0 -> 76396 bytes .../locale/el_GR/LC_MESSAGES/airtime.po | 3538 +++++++++++++++++ 2 files changed, 3538 insertions(+) create mode 100644 airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo create mode 100644 airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo new file mode 100644 index 0000000000000000000000000000000000000000..f67fa635274e99dfe92c12e8f8c5e8fb07cc47b8 GIT binary patch literal 76396 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, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Airtime 2.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-07 16:22-0500\n" +"PO-Revision-Date: 2013-02-07 16:21-0500\n" +"Last-Translator: Denise Rigato \n" +"Language-Team: Sourcefabric \n" +"Language: el_GR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Greek\n" +"X-Poedit-Country: GREECE\n" + +#: airtime_mvc/application/configs/navigation.php:12 +msgid "Now Playing" +msgstr "Αναπαραγωγή σε Εξέλιξη" + +#: airtime_mvc/application/configs/navigation.php:19 +msgid "Add Media" +msgstr "Προσθήκη Πολυμέσων" + +#: airtime_mvc/application/configs/navigation.php:26 +msgid "Library" +msgstr "Βιβλιοθήκη" + +#: airtime_mvc/application/configs/navigation.php:33 +msgid "Calendar" +msgstr "Ημερολόγιο" + +#: airtime_mvc/application/configs/navigation.php:40 +msgid "System" +msgstr "Σύστημα" + +#: airtime_mvc/application/configs/navigation.php:45 +#: airtime_mvc/application/views/scripts/preference/index.phtml:2 +msgid "Preferences" +msgstr "Προτιμήσεις" + +#: airtime_mvc/application/configs/navigation.php:50 +msgid "Users" +msgstr "Xρήστες" + +#: airtime_mvc/application/configs/navigation.php:57 +msgid "Media Folders" +msgstr "Φάκελοι Πολυμέσων" + +#: airtime_mvc/application/configs/navigation.php:64 +msgid "Streams" +msgstr "Streams" + +#: airtime_mvc/application/configs/navigation.php:70 +#: airtime_mvc/application/controllers/PreferenceController.php:134 +msgid "Support Feedback" +msgstr "Σχόλια Υποστήριξης" + +#: airtime_mvc/application/configs/navigation.php:76 +#: airtime_mvc/application/controllers/LocaleController.php:360 +#: airtime_mvc/application/controllers/LocaleController.php:361 +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:5 +msgid "Status" +msgstr "Κατάσταση" + +#: airtime_mvc/application/configs/navigation.php:83 +msgid "Playout History" +msgstr "Ιστορία Playout" + +#: airtime_mvc/application/configs/navigation.php:90 +msgid "Listener Stats" +msgstr "Στατιστικές Ακροατών" + +#: airtime_mvc/application/configs/navigation.php:99 +#: airtime_mvc/application/views/scripts/error/error.phtml:13 +msgid "Help" +msgstr "Βοήθεια" + +#: airtime_mvc/application/configs/navigation.php:104 +msgid "Getting Started" +msgstr "Έναρξη" + +#: airtime_mvc/application/configs/navigation.php:111 +msgid "User Manual" +msgstr "Εγχειρίδιο Χρήστη" + +#: airtime_mvc/application/configs/navigation.php:116 +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:2 +msgid "About" +msgstr "Σχετικά" + +#: airtime_mvc/application/layouts/scripts/bare.phtml:5 +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:2 +msgid "Live stream" +msgstr "Ζωντανό Stream" + +#: airtime_mvc/application/layouts/scripts/audio-player.phtml:5 +#: airtime_mvc/application/controllers/LocaleController.php:30 +msgid "Audio Player" +msgstr "Αναπαραγωγή ήχου" + +#: airtime_mvc/application/layouts/scripts/layout.phtml:27 +msgid "Logout" +msgstr "Έξοδος" + +#: airtime_mvc/application/layouts/scripts/login.phtml:16 +#, php-format +msgid "Airtime Copyright ©Sourcefabric o.p.s. All rights reserved.%sMaintained and distributed under GNU GPL v.3 by %sSourcefabric o.p.s%s" +msgstr "Airtime Copyright ©Sourcefabric o.p.s. Διατήρηση όλων των δικαιωμάτων.%sΣυντήρηση και διανομή από GNU GPL v.3 by %sSourcefabric o.p.s%s" + +#: airtime_mvc/application/models/StoredFile.php:814 +#: airtime_mvc/application/controllers/LocaleController.php:280 +msgid "Track preview" +msgstr "Προεπισκόπηση κομματιού" + +#: airtime_mvc/application/models/StoredFile.php:816 +msgid "Playlist preview" +msgstr "Προεπισκόπηση λίστας αναπαραγωγής" + +#: airtime_mvc/application/models/StoredFile.php:819 +msgid "Webstream preview" +msgstr "Προεπισκόπηση webstream" + +#: airtime_mvc/application/models/StoredFile.php:821 +msgid "Smart Block" +msgstr "Smart Block" + +#: airtime_mvc/application/models/StoredFile.php:954 +msgid "Failed to create 'organize' directory." +msgstr "Αποτυχία δημιουργίας «οργάνωση» directory." + +#: airtime_mvc/application/models/StoredFile.php:967 +#, php-format +msgid "The file was not uploaded, there is %s MB of disk space left and the file you are uploading has a size of %s MB." +msgstr "Το αρχείο δεν ανέβηκε, υπάρχει %s MB ελεύθερου χώρου στο δίσκο και το αρχείο που ανεβάζετε έχει μέγεθος %s MB." + +#: airtime_mvc/application/models/StoredFile.php:976 +msgid "This file appears to be corrupted and will not be added to media library." +msgstr "Αυτό το αρχείο φαίνεται να είναι κατεστραμμένο και δεν θα προστεθεί στη βιβλιοθήκη πολυμέσων." + +#: airtime_mvc/application/models/StoredFile.php:1012 +msgid "The file was not uploaded, this error can occur if the computer hard drive does not have enough disk space or the stor directory does not have correct write permissions." +msgstr "Το αρχείο δεν ανέβηκε, αυτό το σφάλμα μπορεί να προκύψει είτε διότι ο σκληρός δίσκος του υπολογιστή δεν έχει αρκετό χώρο ή διότι ο directory αποθήκευσης δεν έχει έγγυρες άδειες εγγραφής." + +#: airtime_mvc/application/models/Preference.php:548 +msgid "Select Country" +msgstr "Επιλέξτε Χώρα" + +#: airtime_mvc/application/models/MusicDir.php:160 +#, php-format +msgid "%s is already watched." +msgstr "%s έχει ήδη προβληθεί." + +#: airtime_mvc/application/models/MusicDir.php:164 +#, php-format +msgid "%s contains nested watched directory: %s" +msgstr "%s περιέχει ένθετο ευρετήριο προβεβλημένων: %s" + +#: airtime_mvc/application/models/MusicDir.php:168 +#, php-format +msgid "%s is nested within existing watched directory: %s" +msgstr "%s βρίσκεται σε υποκατηγορία υπάρχωντος ευρετηρίου προβεβλημμένων: %s" + +#: airtime_mvc/application/models/MusicDir.php:189 +#: airtime_mvc/application/models/MusicDir.php:363 +#, php-format +msgid "%s is not a valid directory." +msgstr "%s μη έγκυρο ευρετήριο." + +#: airtime_mvc/application/models/MusicDir.php:231 +#, php-format +msgid "%s is already set as the current storage dir or in the watched folders list" +msgstr "%s έχει ήδη οριστεί ως το τρέχον ευρετήριο αποθήκευσης ή βρίσκεται στη λίστα προβεβλημένων φακέλων" + +#: airtime_mvc/application/models/MusicDir.php:381 +#, php-format +msgid "%s is already set as the current storage dir or in the watched folders list." +msgstr "%s έχει ήδη οριστεί ως το τρέχον ευρετήριο αποθήκευσης ή βρίσκεται στη λίστα προβεβλημένων φακέλων." + +#: airtime_mvc/application/models/MusicDir.php:424 +#, php-format +msgid "%s doesn't exist in the watched list." +msgstr "%s δεν υπάρχει στη λίστα προβεβλημένων." + +#: airtime_mvc/application/models/Playlist.php:727 +#: airtime_mvc/application/models/Block.php:764 +msgid "Cue in and cue out are null." +msgstr "Cue in και cue out είναι μηδέν." + +#: airtime_mvc/application/models/Playlist.php:757 +#: airtime_mvc/application/models/Playlist.php:780 +#: airtime_mvc/application/models/Block.php:810 +#: airtime_mvc/application/models/Block.php:831 +msgid "Can't set cue in to be larger than cue out." +msgstr "Το cue in δεν μπορεί να είναι μεγαλύτερης διάρκειας από το cue out." + +#: airtime_mvc/application/models/Playlist.php:764 +#: airtime_mvc/application/models/Playlist.php:805 +#: airtime_mvc/application/models/Block.php:799 +#: airtime_mvc/application/models/Block.php:855 +msgid "Can't set cue out to be greater than file length." +msgstr "Το cue out δεν μπορεί να είναι μεγαλύτερο από το μήκος του αρχείου." + +#: airtime_mvc/application/models/Playlist.php:798 +#: airtime_mvc/application/models/Block.php:866 +msgid "Can't set cue out to be smaller than cue in." +msgstr "Το cue out δεν μπορεί να είναι μικρότερο από το cue in." + +#: airtime_mvc/application/models/Show.php:180 +msgid "Shows can have a max length of 24 hours." +msgstr "Η μέγιστη διάρκει εκπομπών είναι 24 ώρες." + +#: airtime_mvc/application/models/Show.php:211 +#: airtime_mvc/application/forms/AddShowWhen.php:120 +msgid "End date/time cannot be in the past" +msgstr "Η λήξη ημερομηνίας/χρόνου δεν μπορεί να είναι στο παρελθόν" + +#: airtime_mvc/application/models/Show.php:222 +msgid "" +"Cannot schedule overlapping shows.\n" +"Note: Resizing a repeating show affects all of its repeats." +msgstr "" +"Δεν είναι δυνατός ο προγραμματισμός αλληλοεπικαλυπτώμενων εκπομπών.\n" +" Σημείωση: Η αλλαγή μεγέθους μιας εκπομπής επηρεάζει όλες τις επαναλήψεις της." + +#: airtime_mvc/application/models/Webstream.php:157 +msgid "Length needs to be greater than 0 minutes" +msgstr "Το μήκος πρέπει να είναι μεγαλύτερο από 0 λεπτά" + +#: airtime_mvc/application/models/Webstream.php:162 +msgid "Length should be of form \"00h 00m\"" +msgstr "Το μήκος πρέπει να είναι υπό μορφής \"00h 00m\"" + +#: airtime_mvc/application/models/Webstream.php:175 +msgid "URL should be of form \"http://domain\"" +msgstr "Το URL θα πρέπει να είναι υπό μορφής \"http://domain \"" + +#: airtime_mvc/application/models/Webstream.php:178 +msgid "URL should be 512 characters or less" +msgstr "Το URL πρέπει να αποτελέιται από μέχρι και 512 χαρακτήρες " + +#: airtime_mvc/application/models/Webstream.php:184 +msgid "No MIME type found for webstream." +msgstr "Δεν βρέθηκε τύπος MIME για webstream." + +#: airtime_mvc/application/models/Webstream.php:200 +msgid "Webstream name cannot be empty" +msgstr "Το όνομα του webstream δεν μπορεί να είναι κενό" + +#: airtime_mvc/application/models/Webstream.php:269 +msgid "Could not parse XSPF playlist" +msgstr "Δεν ήταν δυνατή η ανάλυση της λίστας αναπαραγωγής XSPF " + +#: airtime_mvc/application/models/Webstream.php:281 +msgid "Could not parse PLS playlist" +msgstr "Αδυναμία ανάλυσης λίστας αναπαραγωγής PLS" + +#: airtime_mvc/application/models/Webstream.php:300 +msgid "Could not parse M3U playlist" +msgstr "Δεν ήταν δυνατή η ανάλυση της λίστας αναπαραγωγής M3U" + +#: airtime_mvc/application/models/Webstream.php:314 +msgid "Invalid webstream - This appears to be a file download." +msgstr "Μη έγκυρο webstream - Αυτό φαίνεται να αποτελεί αρχείο λήψης." + +#: airtime_mvc/application/models/Webstream.php:318 +#, php-format +msgid "Unrecognized stream type: %s" +msgstr "Άγνωστος τύπος stream: %s" + +#: airtime_mvc/application/models/ShowInstance.php:245 +msgid "Can't drag and drop repeating shows" +msgstr "Δεν είναι δυνατό το drag and drop επαναλαμβανόμενων εκπομπών" + +#: airtime_mvc/application/models/ShowInstance.php:253 +msgid "Can't move a past show" +msgstr "Δεν είναι δυνατή η μετακίνηση περασμένης εκπομπής" + +#: airtime_mvc/application/models/ShowInstance.php:270 +msgid "Can't move show into past" +msgstr "Δεν είναι δυνατή η μετακίνηση εκπομπής στο παρελθόν" + +#: airtime_mvc/application/models/ShowInstance.php:276 +#: airtime_mvc/application/forms/AddShowWhen.php:254 +#: airtime_mvc/application/forms/AddShowWhen.php:268 +#: airtime_mvc/application/forms/AddShowWhen.php:291 +#: airtime_mvc/application/forms/AddShowWhen.php:297 +#: airtime_mvc/application/forms/AddShowWhen.php:302 +msgid "Cannot schedule overlapping shows" +msgstr "Δεν είναι δυνατός ο προγραμματισμός αλληλοεπικαλυπτόμενων εκπομπών" + +#: airtime_mvc/application/models/ShowInstance.php:290 +msgid "Can't move a recorded show less than 1 hour before its rebroadcasts." +msgstr "Δεν είναι δυνατή η μετακίνηση ηχογραφημένης εκπομπής σε λιγότερο από 1 ώρα πριν από την αναμετάδοση της." + +#: airtime_mvc/application/models/ShowInstance.php:303 +msgid "Show was deleted because recorded show does not exist!" +msgstr "Η εκπομπή διεγράφη επειδή δεν υπάρχει ηχογραφημένη εκπομπή!" + +#: airtime_mvc/application/models/ShowInstance.php:310 +msgid "Must wait 1 hour to rebroadcast." +msgstr "Πρέπει να περιμένετε 1 ώρα για την αναμετάδοση." + +#: airtime_mvc/application/models/ShowInstance.php:342 +msgid "can't resize a past show" +msgstr "Δεν είναι δυνατή η αλλαγή μεγέθους παρελθοντικής εκπομπής" + +#: airtime_mvc/application/models/ShowInstance.php:364 +msgid "Should not overlap shows" +msgstr "Αδύνατη η αλληλοεπικάλυψη εκπομπών" + +#: airtime_mvc/application/models/Auth.php:33 +#, php-format +msgid "" +"Hi %s, \n" +"\n" +"Click this link to reset your password: " +msgstr "" +"Γεια σας %s , \n" +"\n" +"Πατήστε αυτόν τον σύνδεσμο για να επαναφέρετε τον κωδικό πρόσβασής σας: " + +#: airtime_mvc/application/models/Auth.php:36 +msgid "Airtime Password Reset" +msgstr "Επαναφορά κωδικού πρόσβασης Airtime" + +#: airtime_mvc/application/models/Scheduler.php:82 +msgid "The schedule you're viewing is out of date! (sched mismatch)" +msgstr "Το πρόγραμμα που βλέπετε δεν είναι έγκυρο! (αναντιστοιχία προγράμματος)" + +#: airtime_mvc/application/models/Scheduler.php:87 +msgid "The schedule you're viewing is out of date! (instance mismatch)" +msgstr "Το πρόγραμμα που βλέπετε δεν είναι ενημερωμένο! (αναντιστοιχία παραδείγματος)" + +#: airtime_mvc/application/models/Scheduler.php:95 +#: airtime_mvc/application/models/Scheduler.php:353 +msgid "The schedule you're viewing is out of date!" +msgstr "Το πρόγραμμα που βλέπετε δεν είναι ενημερωμένο!" + +#: airtime_mvc/application/models/Scheduler.php:105 +#, php-format +msgid "You are not allowed to schedule show %s." +msgstr "Δεν έχετε δικαίωμα προγραμματισμού εκπομπής%s.." + +#: airtime_mvc/application/models/Scheduler.php:109 +msgid "You cannot add files to recording shows." +msgstr "Δεν μπορείτε να προσθεσετε αρχεία σε ηχογραφημένες εκπομπές." + +#: airtime_mvc/application/models/Scheduler.php:115 +#, php-format +msgid "The show %s is over and cannot be scheduled." +msgstr "Η εκπομπή %s έχει τελειώσει και δεν μπορεί να προγραμματιστεί." + +#: airtime_mvc/application/models/Scheduler.php:122 +#, php-format +msgid "The show %s has been previously updated!" +msgstr "Η εκπομπή %s έχει ενημερωθεί πρόσφατα!" + +#: airtime_mvc/application/models/Scheduler.php:142 +#: airtime_mvc/application/models/Scheduler.php:227 +msgid "A selected File does not exist!" +msgstr "Ένα επιλεγμένο αρχείο δεν υπάρχει!" + +#: airtime_mvc/application/models/ShowBuilder.php:198 +#, php-format +msgid "Rebroadcast of %s from %s" +msgstr "Αναμετάδοση του %s από %s" + +#: airtime_mvc/application/models/Block.php:1213 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:41 +msgid "Select criteria" +msgstr "Επιλέξτε κριτήρια" + +#: airtime_mvc/application/models/Block.php:1214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:42 +#: airtime_mvc/application/controllers/LocaleController.php:66 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:8 +msgid "Album" +msgstr "Album" + +#: airtime_mvc/application/models/Block.php:1215 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:43 +msgid "Bit Rate (Kbps)" +msgstr "Bit Rate (Kbps)" + +#: airtime_mvc/application/models/Block.php:1216 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:44 +#: airtime_mvc/application/controllers/LocaleController.php:68 +msgid "BPM" +msgstr "BPM" + +#: airtime_mvc/application/models/Block.php:1217 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:45 +#: airtime_mvc/application/controllers/LocaleController.php:69 +#: airtime_mvc/application/controllers/LocaleController.php:153 +msgid "Composer" +msgstr "Συνθέτης" + +#: airtime_mvc/application/models/Block.php:1218 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:46 +#: airtime_mvc/application/controllers/LocaleController.php:70 +msgid "Conductor" +msgstr "Μαέστρος" + +#: airtime_mvc/application/models/Block.php:1219 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:47 +#: airtime_mvc/application/controllers/LocaleController.php:71 +#: airtime_mvc/application/controllers/LocaleController.php:154 +msgid "Copyright" +msgstr "Copyright" + +#: airtime_mvc/application/models/Block.php:1220 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:48 +#: airtime_mvc/application/controllers/LocaleController.php:65 +#: airtime_mvc/application/controllers/LocaleController.php:150 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:7 +msgid "Creator" +msgstr "Δημιουργός" + +#: airtime_mvc/application/models/Block.php:1221 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:49 +#: airtime_mvc/application/controllers/LocaleController.php:72 +msgid "Encoded By" +msgstr "Κωδικοποιήθηκε από" + +#: airtime_mvc/application/models/Block.php:1222 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:132 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:50 +#: airtime_mvc/application/controllers/LocaleController.php:73 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:10 +msgid "Genre" +msgstr "Είδος" + +#: airtime_mvc/application/models/Block.php:1223 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:51 +#: airtime_mvc/application/controllers/LocaleController.php:74 +msgid "ISRC" +msgstr "ISRC" + +#: airtime_mvc/application/models/Block.php:1224 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:52 +#: airtime_mvc/application/controllers/LocaleController.php:75 +msgid "Label" +msgstr "Εταιρεία" + +#: airtime_mvc/application/models/Block.php:1225 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:53 +#: airtime_mvc/application/controllers/LocaleController.php:76 +msgid "Language" +msgstr "Γλώσσα" + +#: airtime_mvc/application/models/Block.php:1226 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:54 +#: airtime_mvc/application/controllers/LocaleController.php:77 +msgid "Last Modified" +msgstr "Τελευταία τροποποίηση" + +#: airtime_mvc/application/models/Block.php:1227 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:55 +#: airtime_mvc/application/controllers/LocaleController.php:78 +msgid "Last Played" +msgstr "Τελευταία αναπαραγωγή" + +#: airtime_mvc/application/models/Block.php:1228 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:56 +#: airtime_mvc/application/controllers/LocaleController.php:79 +#: airtime_mvc/application/controllers/LocaleController.php:152 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:9 +msgid "Length" +msgstr "Διάρκεια" + +#: airtime_mvc/application/models/Block.php:1229 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:57 +#: airtime_mvc/application/controllers/LocaleController.php:80 +msgid "Mime" +msgstr "Μίμος" + +#: airtime_mvc/application/models/Block.php:1230 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:58 +#: airtime_mvc/application/controllers/LocaleController.php:81 +msgid "Mood" +msgstr "Διάθεση" + +#: airtime_mvc/application/models/Block.php:1231 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:59 +#: airtime_mvc/application/controllers/LocaleController.php:82 +msgid "Owner" +msgstr "Ιδιοκτήτης" + +#: airtime_mvc/application/models/Block.php:1232 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:60 +#: airtime_mvc/application/controllers/LocaleController.php:83 +msgid "Replay Gain" +msgstr "Κέρδος Επανάληψης" + +#: airtime_mvc/application/models/Block.php:1233 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:61 +msgid "Sample Rate (kHz)" +msgstr "Ρυθμός Δειγματοληψίας (kHz)" + +#: airtime_mvc/application/models/Block.php:1234 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:62 +#: airtime_mvc/application/controllers/LocaleController.php:64 +#: airtime_mvc/application/controllers/LocaleController.php:149 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:6 +msgid "Title" +msgstr "Τίτλος" + +#: airtime_mvc/application/models/Block.php:1235 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:63 +#: airtime_mvc/application/controllers/LocaleController.php:85 +msgid "Track Number" +msgstr "Αριθμός Κομματιού" + +#: airtime_mvc/application/models/Block.php:1236 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:64 +#: airtime_mvc/application/controllers/LocaleController.php:86 +msgid "Uploaded" +msgstr "Φορτώθηκε" + +#: airtime_mvc/application/models/Block.php:1237 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:65 +#: airtime_mvc/application/controllers/LocaleController.php:87 +msgid "Website" +msgstr "Ιστοσελίδα" + +#: airtime_mvc/application/models/Block.php:1238 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:66 +#: airtime_mvc/application/controllers/LocaleController.php:88 +msgid "Year" +msgstr "Έτος" + +#: airtime_mvc/application/common/DateHelper.php:335 +#, php-format +msgid "The year %s must be within the range of 1753 - 9999" +msgstr "Το έτος %s πρέπει να είναι εντός του εύρους 1753 - 9999" + +#: airtime_mvc/application/common/DateHelper.php:338 +#, php-format +msgid "%s-%s-%s is not a valid date" +msgstr "%s-%s-%s δεν αποτελεί έγκυρη ημερομηνία" + +#: airtime_mvc/application/common/DateHelper.php:362 +#, php-format +msgid "%s:%s:%s is not a valid time" +msgstr "%s : %s : %s δεν αποτελεί έγκυρη ώρα" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:17 +msgid "Enable System Emails (Password Reset)" +msgstr "Ενεργοποίηση Emails Συστήματος (Επαναφορά κωδικού πρόσβασης)" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:27 +msgid "Reset Password 'From' Email" +msgstr "Επαναφορά Κωδικού πρόσβασης 'Από' E-mail" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:34 +msgid "Configure Mail Server" +msgstr "Διαμόρφωση Διακομιστή Αλληλογραφίας" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:43 +msgid "Requires Authentication" +msgstr "Απαιτείται Έλεγχος Ταυτότητας" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:53 +msgid "Mail Server" +msgstr "Διακομιστής Αλληλογραφίας" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:67 +msgid "Email Address" +msgstr "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:82 +#: airtime_mvc/application/forms/PasswordChange.php:17 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:120 +msgid "Password" +msgstr "Κωδικός πρόσβασης" + +#: airtime_mvc/application/forms/EmailServerPreferences.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:109 +msgid "Port" +msgstr "Θύρα" + +#: airtime_mvc/application/forms/RegisterAirtime.php:30 +#: airtime_mvc/application/forms/SupportSettings.php:21 +#: airtime_mvc/application/forms/GeneralPreferences.php:23 +msgid "Station Name" +msgstr "Όνομα Σταθμού" + +#: airtime_mvc/application/forms/RegisterAirtime.php:39 +#: airtime_mvc/application/forms/SupportSettings.php:34 +msgid "Phone:" +msgstr "Τηλέφωνο:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:51 +#: airtime_mvc/application/forms/AddUser.php:60 +#: airtime_mvc/application/forms/SupportSettings.php:46 +#: airtime_mvc/application/forms/EditUser.php:75 +msgid "Email:" +msgstr "Email:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:62 +#: airtime_mvc/application/forms/SupportSettings.php:57 +msgid "Station Web Site:" +msgstr "Ιστοσελίδα Σταθμού:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:73 +#: airtime_mvc/application/forms/SupportSettings.php:68 +msgid "Country:" +msgstr "Χώρα" + +#: airtime_mvc/application/forms/RegisterAirtime.php:84 +#: airtime_mvc/application/forms/SupportSettings.php:79 +msgid "City:" +msgstr "Πόλη" + +#: airtime_mvc/application/forms/RegisterAirtime.php:96 +#: airtime_mvc/application/forms/SupportSettings.php:91 +msgid "Station Description:" +msgstr "Περιγραφή Σταθμού:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:106 +#: airtime_mvc/application/forms/SupportSettings.php:101 +msgid "Station Logo:" +msgstr "Λογότυπο Σταθμού:" + +#: airtime_mvc/application/forms/RegisterAirtime.php:116 +#: airtime_mvc/application/forms/SupportSettings.php:112 +#: airtime_mvc/application/controllers/LocaleController.php:329 +msgid "Send support feedback" +msgstr "Αποστολή Σχολίων Υποστήριξης" + +#: airtime_mvc/application/forms/RegisterAirtime.php:126 +#: airtime_mvc/application/forms/SupportSettings.php:122 +msgid "Promote my station on Sourcefabric.org" +msgstr "Προώθηση του σταθμού μου στην ιστοσελίδα Sourcefabric.org" + +#: airtime_mvc/application/forms/RegisterAirtime.php:149 +#: airtime_mvc/application/forms/SupportSettings.php:148 +#, php-format +msgid "By checking this box, I agree to Sourcefabric's %sprivacy policy%s." +msgstr "Με την επιλογή του πλαισίου, συμφωνώ με την %sπολιτική απορρήτου%s της Sourcefabric." + +#: airtime_mvc/application/forms/RegisterAirtime.php:166 +#: airtime_mvc/application/forms/SupportSettings.php:171 +msgid "You have to agree to privacy policy." +msgstr "Πρέπει να συμφωνείτε με την πολιτική προστασίας προσωπικών δεδομένων." + +#: airtime_mvc/application/forms/PasswordChange.php:28 +msgid "Confirm new password" +msgstr "Επιβεβαίωση νέου κωδικού πρόσβασης" + +#: airtime_mvc/application/forms/PasswordChange.php:36 +msgid "Password confirmation does not match your password." +msgstr "Η επιβεβαίωση κωδικού δεν ταιριάζει με τον κωδικό πρόσβασής σας." + +#: airtime_mvc/application/forms/PasswordChange.php:43 +msgid "Get new password" +msgstr "Αποκτήστε νέο κωδικό πρόσβασης" + +#: airtime_mvc/application/forms/DateRange.php:16 +#: airtime_mvc/application/forms/ShowBuilder.php:18 +msgid "Date Start:" +msgstr "Ημερομηνία Έναρξης:" + +#: airtime_mvc/application/forms/DateRange.php:35 +#: airtime_mvc/application/forms/DateRange.php:63 +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:31 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:99 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:118 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:100 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:123 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:144 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:174 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:186 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:198 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:210 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:26 +#: airtime_mvc/application/forms/ShowBuilder.php:37 +#: airtime_mvc/application/forms/ShowBuilder.php:65 +msgid "Invalid character entered" +msgstr "Εισαγωγή άκυρου χαρακτήρα" + +#: airtime_mvc/application/forms/DateRange.php:44 +#: airtime_mvc/application/forms/AddShowRepeats.php:40 +#: airtime_mvc/application/forms/ShowBuilder.php:46 +msgid "Date End:" +msgstr "Ημερομηνία Λήξης:" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:8 +#: airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php:26 +msgid "Value is required and can't be empty" +msgstr "Απαιτείται αξία και δεν μπορεί να είναι κενή" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:19 +msgid "'%value%' is no valid email address in the basic format local-part@hostname" +msgstr "'%value%' δεν αποτελεί έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στη βασική μορφή local-part@hostname" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:33 +msgid "'%value%' does not fit the date format '%format%'" +msgstr "'%value%' δεν ταιριάζει με τη μορφή ημερομηνίας '%format%'" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:59 +msgid "'%value%' is less than %min% characters long" +msgstr "'%value%' είναι λιγότερο από %min% χαρακτήρες " + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:64 +msgid "'%value%' is more than %max% characters long" +msgstr "'%value%' είναι περισσότερο από %max% χαρακτήρες " + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:76 +msgid "'%value%' is not between '%min%' and '%max%', inclusively" +msgstr "'%value%' δεν είναι μεταξύ '%min%' και '%max%', συνολικά" + +#: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 +msgid "Passwords do not match" +msgstr "" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 +msgid "days" +msgstr "ημέρες" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:63 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:58 +msgid "Day must be specified" +msgstr "Η μέρα πρέπει να προσδιοριστεί" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:68 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:63 +msgid "Time must be specified" +msgstr "Η ώρα πρέπει να προσδιοριστεί" + +#: airtime_mvc/application/forms/AddShowRebroadcastDates.php:95 +#: airtime_mvc/application/forms/AddShowAbsoluteRebroadcastDates.php:86 +msgid "Must wait at least 1 hour to rebroadcast" +msgstr "Πρέπει να περιμένετε τουλάχιστον 1 ώρα για την αναμετάδοση" + +#: airtime_mvc/application/forms/AddShowRR.php:10 +msgid "Record from Line In?" +msgstr "Ηχογράφηση από Line In;" + +#: airtime_mvc/application/forms/AddShowRR.php:16 +msgid "Rebroadcast?" +msgstr "Αναμετάδοση;" + +#: airtime_mvc/application/forms/AddShowStyle.php:10 +msgid "Background Colour:" +msgstr "Χρώμα Φόντου:" + +#: airtime_mvc/application/forms/AddShowStyle.php:29 +msgid "Text Colour:" +msgstr "Χρώμα Κειμένου:" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:19 +msgid "Auto Switch Off" +msgstr "Αυτόματη Απενεργοποίηση" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:26 +msgid "Auto Switch On" +msgstr "Αυτόματη Ενεργοποίηση" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:33 +msgid "Switch Transition Fade (s)" +msgstr "Διακόπτης Fade Μετάβασης (s)" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:36 +msgid "enter a time in seconds 00{.000000}" +msgstr "εισάγετε την ώρα σε δευτερόλεπτα 00{.000000}" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:45 +msgid "Master Username" +msgstr "Κύριο Όνομα Χρήστη" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:62 +msgid "Master Password" +msgstr "Κύριος Κωδικός Πρόσβασης" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:70 +msgid "Master Source Connection URL" +msgstr "URL Σύνδεσης Κύριας Πηγής " + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:78 +msgid "Show Source Connection URL" +msgstr "Εμφάνιση URL Σύνδεσης Πηγής " + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:87 +msgid "Master Source Port" +msgstr "Κύριο Port Πηγής" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:90 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:109 +#: airtime_mvc/application/forms/StreamSettingSubForm.php:112 +msgid "Only numbers are allowed." +msgstr "Επιτρέπονται μόνο αριθμοί." + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:96 +msgid "Master Source Mount Point" +msgstr "Κύριο Σημείο Προσάρτησης Πηγής" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:106 +msgid "Show Source Port" +msgstr "Εμφάνιση Port Πηγής" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:115 +msgid "Show Source Mount Point" +msgstr "Εμφάνιση Σημείου Προσάρτησης Πηγής" + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:153 +msgid "You cannot use same port as Master DJ port." +msgstr "Δεν μπορείτε να χρησιμοποιήσετε το ίδιο port ως Master DJ Show port." + +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:164 +#: airtime_mvc/application/forms/LiveStreamingPreferences.php:182 +#, php-format +msgid "Port %s is not available" +msgstr "Μη διαθέσιμο Port %s " + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:14 +msgid "Import Folder:" +msgstr "Εισαγωγή Φακέλου:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:25 +msgid "Watched Folders:" +msgstr "Παροβεβλημμένοι Φάκελοι:" + +#: airtime_mvc/application/forms/WatchedDirPreferences.php:40 +msgid "Not a valid Directory" +msgstr "Μη έγκυρο Ευρετήριο" + +#: airtime_mvc/application/forms/AddUser.php:23 +#: airtime_mvc/application/forms/Login.php:19 +#: airtime_mvc/application/forms/EditUser.php:30 +msgid "Username:" +msgstr "Όνομα Χρήστη:" + +#: airtime_mvc/application/forms/AddUser.php:32 +#: airtime_mvc/application/forms/Login.php:34 +#: airtime_mvc/application/forms/EditUser.php:41 +msgid "Password:" +msgstr "Κωδικός πρόσβασης:" + +#: airtime_mvc/application/forms/AddUser.php:40 +#: airtime_mvc/application/forms/EditUser.php:50 +msgid "Verify Password:" +msgstr "" + +#: airtime_mvc/application/forms/AddUser.php:48 +#: airtime_mvc/application/forms/EditUser.php:59 +msgid "Firstname:" +msgstr "Όνομα:" + +#: airtime_mvc/application/forms/AddUser.php:54 +#: airtime_mvc/application/forms/EditUser.php:67 +msgid "Lastname:" +msgstr "Επώνυμο:" + +#: airtime_mvc/application/forms/AddUser.php:69 +#: airtime_mvc/application/forms/EditUser.php:86 +msgid "Mobile Phone:" +msgstr "Κινητό Τηλέφωνο:" + +#: airtime_mvc/application/forms/AddUser.php:75 +#: airtime_mvc/application/forms/EditUser.php:94 +msgid "Skype:" +msgstr "Skype" + +#: airtime_mvc/application/forms/AddUser.php:81 +#: airtime_mvc/application/forms/EditUser.php:102 +msgid "Jabber:" +msgstr "Jabber" + +#: airtime_mvc/application/forms/AddUser.php:88 +msgid "User Type:" +msgstr "Τύπος Χρήστη:" + +#: airtime_mvc/application/forms/AddUser.php:92 +#: airtime_mvc/application/controllers/LocaleController.php:312 +msgid "Guest" +msgstr "Επισκέπτης" + +#: airtime_mvc/application/forms/AddUser.php:93 +#: airtime_mvc/application/controllers/LocaleController.php:310 +msgid "DJ" +msgstr "DJ" + +#: airtime_mvc/application/forms/AddUser.php:94 +#: airtime_mvc/application/controllers/LocaleController.php:311 +msgid "Program Manager" +msgstr "Διευθυντής Προγράμματος" + +#: airtime_mvc/application/forms/AddUser.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:309 +msgid "Admin" +msgstr "Διαχειριστής" + +#: airtime_mvc/application/forms/AddUser.php:103 +#: airtime_mvc/application/forms/SupportSettings.php:158 +#: airtime_mvc/application/forms/EditAudioMD.php:134 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:20 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:15 +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:160 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:6 +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:116 +#: airtime_mvc/application/views/scripts/preference/index.phtml:6 +#: airtime_mvc/application/views/scripts/preference/index.phtml:14 +msgid "Save" +msgstr "Αποθήκευση" + +#: airtime_mvc/application/forms/AddUser.php:113 +#: airtime_mvc/application/forms/EditUser.php:132 +msgid "Login name is not unique." +msgstr "Το όνομα εισόδου δεν είναι μοναδικό." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:48 +msgid "Enabled:" +msgstr "Ενεργοποιημένο" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:57 +msgid "Stream Type:" +msgstr "Τύπος Stream:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:67 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:15 +msgid "Bit Rate:" +msgstr "Ρυθμός Δεδομένων:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:77 +msgid "Service Type:" +msgstr "Τύπος Υπηρεσίας:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:87 +msgid "Channels:" +msgstr "Κανάλια" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "1 - Mono" +msgstr "1 - Mono" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:88 +msgid "2 - Stereo" +msgstr "2 - Stereo" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:97 +msgid "Server" +msgstr "Διακομιστής" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:141 +msgid "URL" +msgstr "Διεύθυνση URL:" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:153 +msgid "Name" +msgstr "Ονομασία" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:162 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:51 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:53 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:40 +msgid "Description" +msgstr "Περιγραφή" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:171 +msgid "Mount Point" +msgstr "Σημείο Προσάρτησης" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:183 +#: airtime_mvc/application/forms/PasswordRestore.php:25 +#: airtime_mvc/application/views/scripts/user/add-user.phtml:18 +msgid "Username" +msgstr "Όνομα Χρήστη" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:195 +msgid "Admin User" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:207 +msgid "Admin Password" +msgstr "" + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:218 +#: airtime_mvc/application/controllers/LocaleController.php:169 +msgid "Getting information from the server..." +msgstr "Λήψη πληροφοριών από το διακομιστή..." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:232 +msgid "Server cannot be empty." +msgstr "Ο διακομιστής δεν μπορεί να είναι κενός." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:237 +msgid "Port cannot be empty." +msgstr "Το Port δεν μπορεί να είναι κενό." + +#: airtime_mvc/application/forms/StreamSettingSubForm.php:243 +msgid "Mount cannot be empty with Icecast server." +msgstr "Η προσάρτηση δεν μπορεί να είναι κενή με διακομιστή Icecast." + +#: airtime_mvc/application/forms/AddShowRepeats.php:11 +msgid "Repeat Type:" +msgstr "Τύπος Επανάληψης:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:14 +msgid "weekly" +msgstr "εβδομαδιαία" + +#: airtime_mvc/application/forms/AddShowRepeats.php:15 +msgid "bi-weekly" +msgstr "δύο φορές την εβδομάδα" + +#: airtime_mvc/application/forms/AddShowRepeats.php:16 +msgid "monthly" +msgstr "μηνιαία" + +#: airtime_mvc/application/forms/AddShowRepeats.php:25 +msgid "Select Days:" +msgstr "Επιλέξτε Ημέρες:" + +#: airtime_mvc/application/forms/AddShowRepeats.php:28 +#: airtime_mvc/application/controllers/LocaleController.php:249 +msgid "Sun" +msgstr "Κυρ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:29 +#: airtime_mvc/application/controllers/LocaleController.php:250 +msgid "Mon" +msgstr "Δευ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:30 +#: airtime_mvc/application/controllers/LocaleController.php:251 +msgid "Tue" +msgstr "Τρι" + +#: airtime_mvc/application/forms/AddShowRepeats.php:31 +#: airtime_mvc/application/controllers/LocaleController.php:252 +msgid "Wed" +msgstr "Τετ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:32 +#: airtime_mvc/application/controllers/LocaleController.php:253 +msgid "Thu" +msgstr "Πεμ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:33 +#: airtime_mvc/application/controllers/LocaleController.php:254 +msgid "Fri" +msgstr "Παρ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:34 +#: airtime_mvc/application/controllers/LocaleController.php:255 +msgid "Sat" +msgstr "Σαβ" + +#: airtime_mvc/application/forms/AddShowRepeats.php:53 +msgid "No End?" +msgstr "Χωρίς Τέλος;" + +#: airtime_mvc/application/forms/AddShowRepeats.php:79 +msgid "End date must be after start date" +msgstr "Η ημερομηνία λήξης πρέπει να είναι μετά την ημερομηνία έναρξης" + +#: airtime_mvc/application/forms/AddShowWhat.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:33 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:146 +msgid "Name:" +msgstr "Όνομα:" + +#: airtime_mvc/application/forms/AddShowWhat.php:30 +msgid "Untitled Show" +msgstr "Εκπομπή χωρίς Τίτλο" + +#: airtime_mvc/application/forms/AddShowWhat.php:36 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:150 +msgid "URL:" +msgstr "Διεύθυνση URL:" + +#: airtime_mvc/application/forms/AddShowWhat.php:45 +#: airtime_mvc/application/forms/EditAudioMD.php:47 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:17 +msgid "Genre:" +msgstr "Είδος:" + +#: airtime_mvc/application/forms/AddShowWhat.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:40 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:149 +msgid "Description:" +msgstr "Περιγραφή:" + +#: airtime_mvc/application/forms/AddShowWho.php:10 +msgid "Search Users:" +msgstr "Αναζήτηση Χρηστών:" + +#: airtime_mvc/application/forms/AddShowWho.php:24 +msgid "DJs:" +msgstr "DJs:" + +#: airtime_mvc/application/forms/StreamSetting.php:22 +msgid "Hardware Audio Output" +msgstr "Έξοδος Hardware Ήχου" + +#: airtime_mvc/application/forms/StreamSetting.php:33 +msgid "Output Type" +msgstr "Τύπος Εξόδου" + +#: airtime_mvc/application/forms/StreamSetting.php:44 +msgid "Icecast Vorbis Metadata" +msgstr "Μεταδεδομένα Icecast Vorbis " + +#: airtime_mvc/application/forms/StreamSetting.php:54 +msgid "Stream Label:" +msgstr "Stream Label:" + +#: airtime_mvc/application/forms/StreamSetting.php:55 +msgid "Artist - Title" +msgstr "Καλλιτέχνης - Τίτλος" + +#: airtime_mvc/application/forms/StreamSetting.php:56 +msgid "Show - Artist - Title" +msgstr "Εκπομπή - Καλλιτέχνης - Τίτλος" + +#: airtime_mvc/application/forms/StreamSetting.php:57 +msgid "Station name - Show name" +msgstr "Όνομα Σταθμού - Όνομα Εκπομπής" + +#: airtime_mvc/application/forms/StreamSetting.php:63 +msgid "Off Air Metadata" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:69 +msgid "Enable Replay Gain" +msgstr "" + +#: airtime_mvc/application/forms/StreamSetting.php:75 +msgid "Replay Gain Modifier" +msgstr "" + +#: airtime_mvc/application/forms/PasswordRestore.php:14 +msgid "E-mail" +msgstr "E-mail" + +#: airtime_mvc/application/forms/PasswordRestore.php:36 +msgid "Restore password" +msgstr "Επαναφορά κωδικού πρόσβασης" + +#: airtime_mvc/application/forms/PasswordRestore.php:46 +#: airtime_mvc/application/forms/EditAudioMD.php:144 +#: airtime_mvc/application/controllers/LocaleController.php:306 +msgid "Cancel" +msgstr "Ακύρωση" + +#: airtime_mvc/application/forms/AddShowWhen.php:16 +msgid "'%value%' does not fit the time format 'HH:mm'" +msgstr "'%value%' δεν ταιριάζει με τη μορφή της ώρας 'ΩΩ:λλ'" + +#: airtime_mvc/application/forms/AddShowWhen.php:22 +msgid "Date/Time Start:" +msgstr "Ημερομηνία/Ώρα Έναρξης:" + +#: airtime_mvc/application/forms/AddShowWhen.php:49 +msgid "Date/Time End:" +msgstr "Ημερομηνία/Ώρα Λήξης:" + +#: airtime_mvc/application/forms/AddShowWhen.php:74 +msgid "Duration:" +msgstr "Διάρκεια:" + +#: airtime_mvc/application/forms/AddShowWhen.php:83 +msgid "Repeats?" +msgstr "Επαναλήψεις;" + +#: airtime_mvc/application/forms/AddShowWhen.php:103 +msgid "Cannot create show in the past" +msgstr "Δεν είναι δυνατή η δημιουργία εκπομπής στο παρελθόν" + +#: airtime_mvc/application/forms/AddShowWhen.php:111 +msgid "Cannot modify start date/time of the show that is already started" +msgstr "Αδύνατη η τροποποίηση ημερομηνίας/ώρας έναρξης της εκπομπής που έχει ήδη αρχίσει" + +#: airtime_mvc/application/forms/AddShowWhen.php:130 +msgid "Cannot have duration 00h 00m" +msgstr "Δεν μπορεί να έχει διάρκεια 00h 00m" + +#: airtime_mvc/application/forms/AddShowWhen.php:134 +msgid "Cannot have duration greater than 24h" +msgstr "Δεν μπορεί να έχει διάρκεια μεγαλύτερη από 24 ώρες" + +#: airtime_mvc/application/forms/AddShowWhen.php:138 +msgid "Cannot have duration < 0m" +msgstr "Δεν μπορεί να έχει διάρκεια < 0m" + +#: airtime_mvc/application/forms/EditAudioMD.php:19 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:9 +msgid "Title:" +msgstr "Τίτλος:" + +#: airtime_mvc/application/forms/EditAudioMD.php:26 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:10 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:34 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:148 +msgid "Creator:" +msgstr "Δημιουργός:" + +#: airtime_mvc/application/forms/EditAudioMD.php:33 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:11 +msgid "Album:" +msgstr "Album:" + +#: airtime_mvc/application/forms/EditAudioMD.php:40 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:12 +msgid "Track:" +msgstr "Κομμάτι:" + +#: airtime_mvc/application/forms/EditAudioMD.php:54 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:18 +msgid "Year:" +msgstr "Έτος" + +#: airtime_mvc/application/forms/EditAudioMD.php:66 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:19 +msgid "Label:" +msgstr "Δισκογραφική:" + +#: airtime_mvc/application/forms/EditAudioMD.php:73 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 +msgid "Composer:" +msgstr "Συνθέτης:" + +#: airtime_mvc/application/forms/EditAudioMD.php:80 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:22 +msgid "Conductor:" +msgstr "Μαέστρος:" + +#: airtime_mvc/application/forms/EditAudioMD.php:87 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:16 +msgid "Mood:" +msgstr "Διάθεση:" + +#: airtime_mvc/application/forms/EditAudioMD.php:95 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:20 +msgid "BPM:" +msgstr "BPM:" + +#: airtime_mvc/application/forms/EditAudioMD.php:104 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:23 +msgid "Copyright:" +msgstr "Copyright:" + +#: airtime_mvc/application/forms/EditAudioMD.php:111 +msgid "ISRC Number:" +msgstr "Αριθμός ISRC:" + +#: airtime_mvc/application/forms/EditAudioMD.php:118 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:25 +msgid "Website:" +msgstr "Ιστοσελίδα:" + +#: airtime_mvc/application/forms/EditAudioMD.php:125 +#: airtime_mvc/application/forms/Login.php:48 +#: airtime_mvc/application/forms/EditUser.php:111 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:26 +msgid "Language:" +msgstr "Γλώσσα:" + +#: airtime_mvc/application/forms/Login.php:65 +#: airtime_mvc/application/views/scripts/login/index.phtml:3 +msgid "Login" +msgstr "Σύνδεση" + +#: airtime_mvc/application/forms/Login.php:83 +msgid "Type the characters you see in the picture below." +msgstr "Πληκτρολογήστε τους χαρακτήρες που βλέπετε στην παρακάτω εικόνα." + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:78 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:94 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:214 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:329 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:367 +#: airtime_mvc/application/controllers/LocaleController.php:138 +msgid "Select modifier" +msgstr "Επιλέξτε τροποποιητή" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:79 +#: airtime_mvc/application/controllers/LocaleController.php:139 +msgid "contains" +msgstr "περιέχει" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:80 +#: airtime_mvc/application/controllers/LocaleController.php:140 +msgid "does not contain" +msgstr "δεν περιέχει" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:81 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:95 +#: airtime_mvc/application/controllers/LocaleController.php:141 +msgid "is" +msgstr "είναι" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:82 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:96 +#: airtime_mvc/application/controllers/LocaleController.php:142 +msgid "is not" +msgstr "δεν είναι" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:83 +#: airtime_mvc/application/controllers/LocaleController.php:143 +msgid "starts with" +msgstr "ξεκινά με" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:84 +#: airtime_mvc/application/controllers/LocaleController.php:144 +msgid "ends with" +msgstr "τελειώνει με" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:97 +#: airtime_mvc/application/controllers/LocaleController.php:145 +msgid "is greater than" +msgstr "είναι μεγαλύτερος από" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:98 +#: airtime_mvc/application/controllers/LocaleController.php:146 +msgid "is less than" +msgstr "είναι μικρότερος από" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:99 +#: airtime_mvc/application/controllers/LocaleController.php:147 +msgid "is in the range" +msgstr "είναι στην κλίμακα" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:109 +msgid "hours" +msgstr "ώρες" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:110 +msgid "minutes" +msgstr "λεπτά" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:111 +msgid "items" +msgstr "στοιχεία" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:133 +msgid "Set smart block type:" +msgstr "Ορισμός τύπου smart block:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:136 +msgid "Static" +msgstr "Στατικό" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:137 +msgid "Dynamic" +msgstr "Δυναμικό" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:248 +msgid "Allow Repeat Tracks:" +msgstr "Επιτρέψτε την επανάληψη κομματιών:" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:265 +msgid "Limit to" +msgstr "Όριο για" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:287 +msgid "Generate playlist content and save criteria" +msgstr "Δημιουργία λίστας αναπαραγωγής περιεχομένου και αποθήκευση κριτηρίων" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:289 +msgid "Generate" +msgstr "Δημιουργία" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:295 +msgid "Shuffle playlist content" +msgstr "Περιεχόμενο λίστας Shuffle " + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:297 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle" +msgstr "Shuffle" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:461 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:473 +msgid "Limit cannot be empty or smaller than 0" +msgstr "Το όριο δεν μπορεί να είναι κενό ή μικρότερο από 0" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:466 +msgid "Limit cannot be more than 24 hrs" +msgstr "Το όριο δεν μπορεί να είναι ξεπερνάει τις 24 ώρες" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:476 +msgid "The value should be an integer" +msgstr "Η τιμή πρέπει να είναι ακέραιος αριθμός" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:479 +msgid "500 is the max item limit value you can set" +msgstr "Το 500 είναι η μέγιστη οριακή τιμή σημείου, που μπορείτε να ορίσετε" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:490 +msgid "You must select Criteria and Modifier" +msgstr "Θα πρέπει να επιλέξετε Κριτήρια και Τροποποιητή" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:497 +msgid "'Length' should be in '00:00:00' format" +msgstr "Το «Μήκος» θα πρέπει να είναι σε υπό μορφής '00:00:00'" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:502 +#: airtime_mvc/application/forms/SmartBlockCriteria.php:515 +msgid "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00)" +msgstr "Η τιμή θα πρέπει να είναι υπο μορφής ώρας (π.χ. 0000-00-00 ή 00-00-00 00:00:00)" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:529 +msgid "The value has to be numeric" +msgstr "Η τιμή πρέπει να είναι αριθμός" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:534 +msgid "The value should be less then 2147483648" +msgstr "Η τιμή πρέπει να είναι μικρότερη από 2147483648" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:539 +#, php-format +msgid "The value should be less than %s characters" +msgstr "Η τιμή πρέπει να είναι μικρότερη από %s χαρακτήρες" + +#: airtime_mvc/application/forms/SmartBlockCriteria.php:546 +msgid "Value cannot be empty" +msgstr "Η αξία δεν μπορεί να είναι κενή" + +#: airtime_mvc/application/forms/ShowBuilder.php:72 +msgid "Show:" +msgstr "Εκπομπή:" + +#: airtime_mvc/application/forms/ShowBuilder.php:80 +msgid "All My Shows:" +msgstr "Όλες οι Εκπομπές μου:" + +#: airtime_mvc/application/forms/EditUser.php:118 +msgid "Timezone:" +msgstr "" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:10 +msgid "Use Airtime Authentication:" +msgstr "Ταυτοποίηση Χρήστη Airtime:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:16 +msgid "Use Custom Authentication:" +msgstr "Χρήση Προσαρμοσμένης Ταυτοποίησης:" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:26 +msgid "Custom Username" +msgstr "Προσαρμοσμένο Όνομα Χρήστη" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:39 +msgid "Custom Password" +msgstr "Προσαρμοσμένος Κωδικός Πρόσβασης" + +#: airtime_mvc/application/forms/AddShowLiveStream.php:63 +msgid "Username field cannot be empty." +msgstr "Το πεδίο 'Όνομα Χρήστη' δεν μπορεί να είναι κενό." + +#: airtime_mvc/application/forms/AddShowLiveStream.php:68 +msgid "Password field cannot be empty." +msgstr "Το πεδίο 'Κωδικός Πρόσβασης' δεν μπορεί να είναι κενό." + +#: airtime_mvc/application/forms/GeneralPreferences.php:35 +msgid "Default Fade (s):" +msgstr "Fade Προεπιλογής (s):" + +#: airtime_mvc/application/forms/GeneralPreferences.php:42 +msgid "enter a time in seconds 0{.0}" +msgstr "εισάγετε ένα χρόνο σε δευτερόλεπτα 0{.0}" + +#: airtime_mvc/application/forms/GeneralPreferences.php:53 +#, php-format +msgid "Allow Remote Websites To Access \"Schedule\" Info?%s (Enable this to make front-end widgets work.)" +msgstr "Επιτρέψτε την Πρόσβαση \"Πρόγραμμα\" Πληροφορίες;%s σε Ιστοσελίδες με Απομακρυσμένη Πρόσβαση (Ενεργοποιήστε το για να λειτουργήσουν τα front-end widgets.)" + +#: airtime_mvc/application/forms/GeneralPreferences.php:54 +msgid "Disabled" +msgstr "Απενεργοποιημένο" + +#: airtime_mvc/application/forms/GeneralPreferences.php:55 +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +#: airtime_mvc/application/forms/GeneralPreferences.php:61 +msgid "Default Interface Language" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:69 +msgid "Default Interface Timezone" +msgstr "" + +#: airtime_mvc/application/forms/GeneralPreferences.php:77 +msgid "Week Starts On" +msgstr "Η Εβδομάδα αρχίζει " + +#: airtime_mvc/application/forms/GeneralPreferences.php:87 +#: airtime_mvc/application/controllers/LocaleController.php:242 +msgid "Sunday" +msgstr "Κυριακή" + +#: airtime_mvc/application/forms/GeneralPreferences.php:88 +#: airtime_mvc/application/controllers/LocaleController.php:243 +msgid "Monday" +msgstr "Δευτέρα" + +#: airtime_mvc/application/forms/GeneralPreferences.php:89 +#: airtime_mvc/application/controllers/LocaleController.php:244 +msgid "Tuesday" +msgstr "Τρίτη" + +#: airtime_mvc/application/forms/GeneralPreferences.php:90 +#: airtime_mvc/application/controllers/LocaleController.php:245 +msgid "Wednesday" +msgstr "Τετάρτη" + +#: airtime_mvc/application/forms/GeneralPreferences.php:91 +#: airtime_mvc/application/controllers/LocaleController.php:246 +msgid "Thursday" +msgstr "Πέμπτη" + +#: airtime_mvc/application/forms/GeneralPreferences.php:92 +#: airtime_mvc/application/controllers/LocaleController.php:247 +msgid "Friday" +msgstr "Παρασκευή" + +#: airtime_mvc/application/forms/GeneralPreferences.php:93 +#: airtime_mvc/application/controllers/LocaleController.php:248 +msgid "Saturday" +msgstr "Σάββατο" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:16 +msgid "Automatically Upload Recorded Shows" +msgstr "Αυτόματο Ανέβασμα Ηχογραφημένων Εκπομπών" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:26 +msgid "Enable SoundCloud Upload" +msgstr "Ενεργοποίηση Ανεβάσματος SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:36 +msgid "Automatically Mark Files \"Downloadable\" on SoundCloud" +msgstr "Αυτόματη Σήμανση Αρχείων \"για λήψη \" στο SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:47 +msgid "SoundCloud Email" +msgstr "SoundCloud Email" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:67 +msgid "SoundCloud Password" +msgstr "Κωδικός πρόσβασης SoundCloud" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:87 +msgid "SoundCloud Tags: (separate tags with spaces)" +msgstr "SoundCloud Ετικέτες: (διαχωρίσετε ετικέτες με κενά)" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:99 +msgid "Default Genre:" +msgstr "Προεπιλεγμένο Είδος:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:109 +msgid "Default Track Type:" +msgstr "Προεπιλεγμένος Τύπος Κομματιού:" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:113 +msgid "Original" +msgstr "Πρώτυπο" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:114 +msgid "Remix" +msgstr "Remix" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:115 +msgid "Live" +msgstr "Live" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:116 +msgid "Recording" +msgstr "Εγγραφή" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:117 +msgid "Spoken" +msgstr "Ομιλούμενο" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:118 +msgid "Podcast" +msgstr "Podcast" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:119 +msgid "Demo" +msgstr "Demo" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:120 +msgid "Work in progress" +msgstr "Εργασία σε εξέλιξη" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:121 +msgid "Stem" +msgstr "Στέλεχος" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:122 +msgid "Loop" +msgstr "Loop" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:123 +msgid "Sound Effect" +msgstr "Εφέ Ήχου" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:124 +msgid "One Shot Sample" +msgstr "Δείγμα Shot" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:125 +msgid "Other" +msgstr "Άλλο" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:133 +msgid "Default License:" +msgstr "Προεπιλεγμένη Άδεια :" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:137 +msgid "The work is in the public domain" +msgstr "Εργασία δημόσιας χρήσης" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:138 +msgid "All rights are reserved" +msgstr "Διατήρηση όλων των δικαιωμάτων" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:139 +msgid "Creative Commons Attribution" +msgstr "Απόδοση Creative Commons" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:140 +msgid "Creative Commons Attribution Noncommercial" +msgstr "Απόδοση Creative Commons Μη Εμπορική Χρήση" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:141 +msgid "Creative Commons Attribution No Derivative Works" +msgstr "Απόδοση Creative Commons Όχι Παράγωγα Έργα" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:142 +msgid "Creative Commons Attribution Share Alike" +msgstr "Απόδοση Creative Commons Share Alike" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:143 +msgid "Creative Commons Attribution Noncommercial Non Derivate Works" +msgstr "Απόδοση Creative Commons Μη Εμπορική Χρήση Όχι Παράγωγα Έργα" + +#: airtime_mvc/application/forms/SoundcloudPreferences.php:144 +msgid "Creative Commons Attribution Noncommercial Share Alike" +msgstr "Απόδοση Creative Commons Μη Εμπορική Χρήση Share Alike" + +#: airtime_mvc/application/controllers/DashboardController.php:36 +#: airtime_mvc/application/controllers/DashboardController.php:85 +msgid "You don't have permission to disconnect source." +msgstr "Δεν έχετε άδεια για αποσύνδεση πηγής." + +#: airtime_mvc/application/controllers/DashboardController.php:38 +#: airtime_mvc/application/controllers/DashboardController.php:87 +msgid "There is no source connected to this input." +msgstr "Δεν υπάρχει καμία πηγή που είναι συνδεδεμένη σε αυτή την είσοδο." + +#: airtime_mvc/application/controllers/DashboardController.php:82 +msgid "You don't have permission to switch source." +msgstr "Δεν έχετε άδεια για αλλαγή πηγής." + +#: airtime_mvc/application/controllers/LoginController.php:34 +msgid "Please enter your user name and password" +msgstr "Παρακαλώ εισάγετε το όνομα χρήστη και τον κωδικό πρόσβασής σας" + +#: airtime_mvc/application/controllers/LoginController.php:77 +msgid "Wrong username or password provided. Please try again." +msgstr "Άκυρο όνομα χρήστη ή κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά." + +#: airtime_mvc/application/controllers/LoginController.php:139 +msgid "Email could not be sent. Check your mail server settings and ensure it has been configured properly." +msgstr "Το e-mail δεν μπόρεσε να σταλεί. Ελέγξτε τις ρυθμίσεις email του διακομιστή σας και βεβαιωθείτε ότι έχει ρυθμιστεί σωστά." + +#: airtime_mvc/application/controllers/LoginController.php:142 +msgid "Given email not found." +msgstr "Το email δεν βρέθηκε." + +#: airtime_mvc/application/controllers/PreferenceController.php:71 +msgid "Preferences updated." +msgstr "Οι προτιμήσεις ενημερώθηκαν." + +#: airtime_mvc/application/controllers/PreferenceController.php:122 +msgid "Support setting updated." +msgstr "Η ρύθμιση υποστήριξης ενημερώθηκε." + +#: airtime_mvc/application/controllers/PreferenceController.php:321 +msgid "Stream Setting Updated." +msgstr "Η Ρύθμιση Stream Ενημερώθηκε." + +#: airtime_mvc/application/controllers/PreferenceController.php:354 +msgid "path should be specified" +msgstr "η διαδρομή πρέπει να καθοριστεί" + +#: airtime_mvc/application/controllers/PreferenceController.php:449 +msgid "Problem with Liquidsoap..." +msgstr "Πρόβλημα με Liquidsoap ..." + +#: airtime_mvc/application/controllers/ErrorController.php:17 +msgid "Page not found" +msgstr "Η σελίδα δεν βρέθηκε" + +#: airtime_mvc/application/controllers/ErrorController.php:22 +msgid "Application error" +msgstr "Σφάλμα εφαρμογής" + +#: airtime_mvc/application/controllers/UserController.php:55 +#: airtime_mvc/application/controllers/UserController.php:137 +msgid "Specific action is not allowed in demo version!" +msgstr "Η συγκεκριμένη δράση δεν επιτρέπεται στη δοκιμαστική έκδοση!" + +#: airtime_mvc/application/controllers/UserController.php:87 +msgid "User added successfully!" +msgstr "Ο χρήστης προστέθηκε επιτυχώς!" + +#: airtime_mvc/application/controllers/UserController.php:89 +msgid "User updated successfully!" +msgstr "Ο χρήστης ενημερώθηκε με επιτυχία!" + +#: airtime_mvc/application/controllers/UserController.php:164 +msgid "Settings updated successfully!" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:32 +msgid "Recording:" +msgstr "Εγγραφή" + +#: airtime_mvc/application/controllers/LocaleController.php:33 +msgid "Master Stream" +msgstr "Κύριο Stream" + +#: airtime_mvc/application/controllers/LocaleController.php:34 +msgid "Live Stream" +msgstr "Live Stream" + +#: airtime_mvc/application/controllers/LocaleController.php:35 +msgid "Nothing Scheduled" +msgstr "Τίποτα δεν έχει προγραμματιστεί" + +#: airtime_mvc/application/controllers/LocaleController.php:36 +msgid "Current Show:" +msgstr "Τρέχουσα Εκπομπή:" + +#: airtime_mvc/application/controllers/LocaleController.php:37 +msgid "Current" +msgstr "Τρέχουσα" + +#: airtime_mvc/application/controllers/LocaleController.php:39 +msgid "You are running the latest version" +msgstr "Χρησιμοποιείτε την τελευταία έκδοση" + +#: airtime_mvc/application/controllers/LocaleController.php:40 +msgid "New version available: " +msgstr "Νέα έκδοση διαθέσιμη: " + +#: airtime_mvc/application/controllers/LocaleController.php:41 +msgid "This version will soon be obsolete." +msgstr "Αυτή η έκδοση θα παρωχηθεί σύντομα." + +#: airtime_mvc/application/controllers/LocaleController.php:42 +msgid "This version is no longer supported." +msgstr "Αυτή η έκδοση δεν υποστηρίζεται πλέον." + +#: airtime_mvc/application/controllers/LocaleController.php:43 +msgid "Please upgrade to " +msgstr "Παρακαλούμε να αναβαθμίσετε σε " + +#: airtime_mvc/application/controllers/LocaleController.php:45 +msgid "Add to current playlist" +msgstr "Προσθήκη στην τρέχουσα λίστα αναπαραγωγής" + +#: airtime_mvc/application/controllers/LocaleController.php:46 +msgid "Add to current smart block" +msgstr "Προσθήκη στο τρέχον smart block" + +#: airtime_mvc/application/controllers/LocaleController.php:47 +msgid "Adding 1 Item" +msgstr "Προσθήκη 1 Στοιχείου" + +#: airtime_mvc/application/controllers/LocaleController.php:48 +#, php-format +msgid "Adding %s Items" +msgstr "Προσθήκη %s στοιχείου/ων" + +#: airtime_mvc/application/controllers/LocaleController.php:49 +msgid "You can only add tracks to smart blocks." +msgstr "Μπορείτε να προσθέσετε μόνο κομμάτια στα smart blocks." + +#: airtime_mvc/application/controllers/LocaleController.php:50 +#: airtime_mvc/application/controllers/PlaylistController.php:160 +msgid "You can only add tracks, smart blocks, and webstreams to playlists." +msgstr "Μπορείτε να προσθέσετε μόνο κομμάτια, smart blocks και webstreams σε λίστες αναπαραγωγής." + +#: airtime_mvc/application/controllers/LocaleController.php:53 +msgid "Please select a cursor position on timeline." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:57 +#: airtime_mvc/application/controllers/LibraryController.php:190 +msgid "Edit Metadata" +msgstr "Επεξεργασία Μεταδεδομένων" + +#: airtime_mvc/application/controllers/LocaleController.php:58 +msgid "Add to selected show" +msgstr "Προσθήκη στην επιλεγμένη εκπομπή" + +#: airtime_mvc/application/controllers/LocaleController.php:59 +msgid "Select" +msgstr "Επιλογή" + +#: airtime_mvc/application/controllers/LocaleController.php:60 +msgid "Select this page" +msgstr "Επιλέξτε αυτή τη σελίδα" + +#: airtime_mvc/application/controllers/LocaleController.php:61 +msgid "Deselect this page" +msgstr "Καταργήστε αυτήν την σελίδα" + +#: airtime_mvc/application/controllers/LocaleController.php:62 +msgid "Deselect all" +msgstr "Κατάργηση όλων" + +#: airtime_mvc/application/controllers/LocaleController.php:63 +msgid "Are you sure you want to delete the selected item(s)?" +msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετε το επιλεγμένο στοιχείο/α;" + +#: airtime_mvc/application/controllers/LocaleController.php:67 +msgid "Bit Rate" +msgstr "Ρυθμός Bit:" + +#: airtime_mvc/application/controllers/LocaleController.php:84 +msgid "Sample Rate" +msgstr "Ρυθμός δειγματοληψίας" + +#: airtime_mvc/application/controllers/LocaleController.php:89 +msgid "Loading..." +msgstr "Φόρτωση..." + +#: airtime_mvc/application/controllers/LocaleController.php:90 +#: airtime_mvc/application/controllers/LocaleController.php:155 +msgid "All" +msgstr "Όλα" + +#: airtime_mvc/application/controllers/LocaleController.php:91 +msgid "Files" +msgstr "Αρχεία" + +#: airtime_mvc/application/controllers/LocaleController.php:92 +msgid "Playlists" +msgstr "Λίστες αναπαραγωγής" + +#: airtime_mvc/application/controllers/LocaleController.php:93 +msgid "Smart Blocks" +msgstr "Smart Blocks" + +#: airtime_mvc/application/controllers/LocaleController.php:94 +msgid "Web Streams" +msgstr "Web Streams" + +#: airtime_mvc/application/controllers/LocaleController.php:95 +msgid "Unknown type: " +msgstr "Άγνωστος τύπος: " + +#: airtime_mvc/application/controllers/LocaleController.php:96 +msgid "Are you sure you want to delete the selected item?" +msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετε το επιλεγμένο στοιχείο;" + +#: airtime_mvc/application/controllers/LocaleController.php:97 +#: airtime_mvc/application/controllers/LocaleController.php:202 +msgid "Uploading in progress..." +msgstr "Ανέβασμα σε εξέλιξη..." + +#: airtime_mvc/application/controllers/LocaleController.php:98 +msgid "Retrieving data from the server..." +msgstr "Ανάκτηση δεδομένων από τον διακομιστή..." + +#: airtime_mvc/application/controllers/LocaleController.php:99 +msgid "The soundcloud id for this file is: " +msgstr "Η ταυτότητα SoundCloud για αυτό το αρχείο είναι: " + +#: airtime_mvc/application/controllers/LocaleController.php:100 +msgid "There was an error while uploading to soundcloud." +msgstr "Υπήρξε ένα σφάλμα κατά το ανέβασμα στο SoundCloud." + +#: airtime_mvc/application/controllers/LocaleController.php:101 +msgid "Error code: " +msgstr "Κωδικός σφάλματος: " + +#: airtime_mvc/application/controllers/LocaleController.php:102 +msgid "Error msg: " +msgstr "Μήνυμα σφάλματος: " + +#: airtime_mvc/application/controllers/LocaleController.php:103 +msgid "Input must be a positive number" +msgstr "Το input πρέπει να είναι θετικός αριθμός" + +#: airtime_mvc/application/controllers/LocaleController.php:104 +msgid "Input must be a number" +msgstr "Το input πρέπει να είναι αριθμός" + +#: airtime_mvc/application/controllers/LocaleController.php:105 +msgid "Input must be in the format: yyyy-mm-dd" +msgstr "Το input πρέπει να είναι υπό μορφής: εεεε-μμ-ηη" + +#: airtime_mvc/application/controllers/LocaleController.php:106 +msgid "Input must be in the format: hh:mm:ss.t" +msgstr "Το input πρέπει να είναι υπό μορφής: ωω: λλ: ss.t" + +#: airtime_mvc/application/controllers/LocaleController.php:109 +#, php-format +msgid "You are currently uploading files. %sGoing to another screen will cancel the upload process. %sAre you sure you want to leave the page?" +msgstr "Προς το παρόν ανεβάζετε αρχεία. %sΠηγαίνοντας σε μια άλλη οθόνη θα ακυρώσετε τη διαδικασία του ανεβάσματος.%sΕίστε σίγουροι ότι θέλετε να εγκαταλείψετε τη σελίδα;" + +#: airtime_mvc/application/controllers/LocaleController.php:111 +msgid "please put in a time '00:00:00 (.0)'" +msgstr "παρακαλούμε εισάγετε τιμή ώρας '00:00:00 (.0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:112 +msgid "please put in a time in seconds '00 (.0)'" +msgstr "παρακαλούμε εισάγετε τιμή ώρας σε δευτερόλεπτα '00 (0,0)'" + +#: airtime_mvc/application/controllers/LocaleController.php:113 +msgid "Your browser does not support playing this file type: " +msgstr "Ο περιηγητής ιστού σας δεν υποστηρίζει την αναπαραγωγή αρχείων αυτού του τύπου: " + +#: airtime_mvc/application/controllers/LocaleController.php:114 +msgid "Dynamic block is not previewable" +msgstr "Αδύνατη η προεπισκόπιση του δυναμικού block" + +#: airtime_mvc/application/controllers/LocaleController.php:115 +msgid "Limit to: " +msgstr "Όριο για: " + +#: airtime_mvc/application/controllers/LocaleController.php:116 +msgid "Playlist saved" +msgstr "Οι λίστες αναπαραγωγής αποθηκεύτηκαν" + +#: airtime_mvc/application/controllers/LocaleController.php:117 +msgid "Playlist shuffled" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:119 +msgid "Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't 'watched' anymore." +msgstr "To Airtime είναι αβέβαιο για την κατάσταση αυτού του αρχείου. Αυτό μπορεί να συμβεί όταν το αρχείο είναι σε μια απομακρυσμένη μονάδα δίσκου που είναι απροσπέλαστη ή το αρχείο είναι σε ευρετήριο που δεν «προβάλλεται» πια." + +#: airtime_mvc/application/controllers/LocaleController.php:121 +#, php-format +msgid "Listener Count on %s: %s" +msgstr "Καταμέτρηση Ακροατών για %s : %s" + +#: airtime_mvc/application/controllers/LocaleController.php:123 +msgid "Remind me in 1 week" +msgstr "Υπενθύμιση σε 1 εβδομάδα" + +#: airtime_mvc/application/controllers/LocaleController.php:124 +msgid "Remind me never" +msgstr "Καμία υπενθύμιση" + +#: airtime_mvc/application/controllers/LocaleController.php:125 +msgid "Yes, help Airtime" +msgstr "Ναι, βοηθώ το Airtime" + +#: airtime_mvc/application/controllers/LocaleController.php:126 +#: airtime_mvc/application/controllers/LocaleController.php:184 +msgid "Image must be one of jpg, jpeg, png, or gif" +msgstr "Η εικόνα πρέπει να είναι jpg, jpeg, png ή gif " + +#: airtime_mvc/application/controllers/LocaleController.php:129 +msgid "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." +msgstr "Ένα στατικό smart block θα αποθηκεύσει τα κριτήρια και θα δημιουργήσει αμέσως το περιεχόμενο του block. Αυτό σας επιτρέπει να το επεξεργαστείτε και να το προβάλεται στη Βιβλιοθήκη πριν το προσθέσετε σε μια εκπομπή." + +#: airtime_mvc/application/controllers/LocaleController.php:131 +msgid "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." +msgstr "Ένα στατικό smart block θα αποθηκεύσει μόνο τα κριτήρια. Το περιεχόμενο του block θα δημιουργηθεί κατά την προσθήκη του σε μια εκπομπή. Δεν θα μπορείτε να δείτε και να επεξεργαστείτε το περιεχόμενο στη Βιβλιοθήκη." + +#: airtime_mvc/application/controllers/LocaleController.php:133 +msgid "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." +msgstr "Η επιθυμητή διάρκεια του block δεν θα επιτευχθεί αν το Airtime δεν μπορέσει να βρεί αρκετά μοναδικά κομμάτια που να ταιριάζουν στα κριτήριά σας. Ενεργοποιήστε αυτή την επιλογή αν θέλετε να επιτρέψετε την πολλαπλή προσθήκη κομματιών στο smart block." + +#: airtime_mvc/application/controllers/LocaleController.php:134 +msgid "Smart block shuffled" +msgstr "Smart block shuffled" + +#: airtime_mvc/application/controllers/LocaleController.php:135 +msgid "Smart block generated and criteria saved" +msgstr "Το Smart block δημιουργήθηκε και τα κριτήρια αποθηκεύτηκαν" + +#: airtime_mvc/application/controllers/LocaleController.php:136 +msgid "Smart block saved" +msgstr "Το Smart block αποθηκεύτηκε" + +#: airtime_mvc/application/controllers/LocaleController.php:137 +msgid "Processing..." +msgstr "Επεξεργασία..." + +#: airtime_mvc/application/controllers/LocaleController.php:151 +msgid "Played" +msgstr "Παίχτηκε" + +#: airtime_mvc/application/controllers/LocaleController.php:156 +#, php-format +msgid "Copied %s row%s to the clipboard" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:157 +#, php-format +msgid "%sPrint view%sPlease use your browser's print function to print this table. Press escape when finished." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:159 +msgid "Choose Storage Folder" +msgstr "Επιλογή Φακέλου Αποθήκευσης" + +#: airtime_mvc/application/controllers/LocaleController.php:160 +msgid "Choose Folder to Watch" +msgstr "Επιλογή Φακέλου για Προβολή" + +#: airtime_mvc/application/controllers/LocaleController.php:162 +msgid "" +"Are you sure you want to change the storage folder?\n" +"This will remove the files from your Airtime library!" +msgstr "" +"Είστε βέβαιοι ότι θέλετε να αλλάξετε το φάκελο αποθήκευσης;\n" +"Αυτό θα αφαιρέσει τα αρχεία από τη βιβλιοθήκη του Airtime!" + +#: airtime_mvc/application/controllers/LocaleController.php:163 +#: airtime_mvc/application/views/scripts/preference/directory-config.phtml:2 +msgid "Manage Media Folders" +msgstr "Διαχείριση Φακέλων Πολυμέσων" + +#: airtime_mvc/application/controllers/LocaleController.php:164 +msgid "Are you sure you want to remove the watched folder?" +msgstr "Είστε βέβαιοι ότι θέλετε να αφαιρέσετε το φάκελο που προβάλλεται;" + +#: airtime_mvc/application/controllers/LocaleController.php:165 +msgid "This path is currently not accessible." +msgstr "Αυτή η διαδρομή δεν είναι προς το παρόν προσβάσιμη." + +#: airtime_mvc/application/controllers/LocaleController.php:167 +msgid "Connected to the streaming server" +msgstr "Συνδέθηκε με τον διακομιστή streaming " + +#: airtime_mvc/application/controllers/LocaleController.php:168 +msgid "The stream is disabled" +msgstr "Το stream είναι απενεργοποιημένο" + +#: airtime_mvc/application/controllers/LocaleController.php:170 +msgid "Can not connect to the streaming server" +msgstr "Αδύνατη η σύνδεση με τον διακομιστή streaming " + +#: airtime_mvc/application/controllers/LocaleController.php:172 +msgid "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." +msgstr "Αν το Airtime είναι πίσω από ένα τείχος προστασίας ή router, ίσως χρειαστεί να ρυθμίσετε την προώθηση port και οι πληροφορίες πεδίου θα είναι λανθασμένες. Σε αυτή την περίπτωση θα πρέπει να ενημερώσετε αυτό το πεδίο, ώστε να δείχνει το σωστό host/port/mount που χρειάζονται οι DJ σας για να συνδεθούν. Το επιτρεπόμενο εύρος είναι μεταξύ 1024 και 49151." + +#: airtime_mvc/application/controllers/LocaleController.php:173 +#, php-format +msgid "For more details, please read the %sAirtime Manual%s" +msgstr "Για περισσότερες λεπτομέρειες, παρακαλούμε διαβάστε το %sAirtime Εγχειρίδιο%s" + +#: airtime_mvc/application/controllers/LocaleController.php:175 +msgid "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." +msgstr "Τσεκάρετε αυτή την επιλογή για να ενεργοποιήσετε τα μεταδεδομένα για OGG streams (τα stream μεταδεδομένα είναι ο τίτλος του κομματιού και του καλλιτέχνη, που εμφανίζονται σε ένα audio player). VLC και mplayer προκαλούν βλάβες κατά την αναπαραγωγή ενός OGG / Vorbis stream, το οποίο έχει ενεργοποιημένες τις πληροφορίες μεταδεδομένων: θα αποσυνδέονται από το stream μετά από κάθε κομμάτι. Εάν χρησιμοποιείτε ένα OGG stream και οι ακροατές σας δεν απαιτούν υποστήριξη για αυτές τις συσκευές αναπαραγωγής ήχου, τότε μπορείτε να ενεργοποιήσετε αυτή την επιλογή." + +#: airtime_mvc/application/controllers/LocaleController.php:176 +msgid "Check this box to automatically switch off Master/Show source upon source disconnection." +msgstr "Επιλέξτε αυτό το πλαίσιο για να σβήσει αυτόματα η Κύρια/Εμφάνιση πηγής κατά την αποσύνδεση πηγής." + +#: airtime_mvc/application/controllers/LocaleController.php:177 +msgid "Check this box to automatically switch on Master/Show source upon source connection." +msgstr "Επιλέξτε αυτό το πλαίσιο για να ενεργοποιηθεί αυτόματα η η Κύρια/Εμφάνιση πηγής κατά την σύνδεση πηγής." + +#: airtime_mvc/application/controllers/LocaleController.php:178 +msgid "If your Icecast server expects a username of 'source', this field can be left blank." +msgstr "Εάν ο διακομιστής Icecast περιμένει ένα όνομα χρήστη από την «πηγή», αυτό το πεδίο μπορεί να μείνει κενό." + +#: airtime_mvc/application/controllers/LocaleController.php:179 +#: airtime_mvc/application/controllers/LocaleController.php:189 +msgid "If your live streaming client does not ask for a username, this field should be 'source'." +msgstr "Εάν ο live streaming πελάτη σας δεν ζητά ένα όνομα χρήστη, το πεδίο αυτό θα πρέπει να είναι η «πηγή»." + +#: airtime_mvc/application/controllers/LocaleController.php:181 +msgid "If you change the username or password values for an enabled stream the playout engine will be rebooted and your listeners will hear silence for 5-10 seconds. Changing the following fields will NOT cause a reboot: Stream Label (Global Settings), and Switch Transition Fade(s), Master Username, and Master Password (Input Stream Settings). If Airtime is recording, and if the change causes a playout engine restart, the recording will be interrupted." +msgstr "Εάν αλλάξετε το όνομα χρήστη ή τον κωδικό πρόσβασης για ένα ενεργοποιημένο stream, η μηχανή playout θα πραγματοποιήσει επανεκκίνηση και οι ακροατές σας θα ακούσουν σιωπή για 5-10 δευτερόλεπτα. Με την αλλαγή των παρακάτω πεδίων ΔΕΝ θα προκληθεί επανεκκίνηση: Stream Label (Γενικές Ρυθμίσεις), και Εναλλαγή Fade(s) Μετάβασης, Κύριο Όνομα χρήστη και Κύριος Κωδικός πρόσβασης (Ρυθμίσεις Stream Εισόδου). Αν το Airtime ηχογραφεί και αν η αλλαγή προκαλέσει επανεκκίνηση της μηχανής playout, η ηχογράφηση θα διακοπεί." + +#: airtime_mvc/application/controllers/LocaleController.php:182 +msgid "This is the admin username and password for Icecast/SHOUTcast to get listener statistics." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:186 +msgid "No result found" +msgstr "Δεν βρέθηκαν αποτελέσματα" + +#: airtime_mvc/application/controllers/LocaleController.php:187 +msgid "This follows the same security pattern for the shows: only users assigned to the show can connect." +msgstr "Αυτό ακολουθεί το ίδιο πρότυπο ασφαλείας για τις εκπομπές: μόνο οι χρήστες της συγκεκριμένης εκπομπής μπορούν να συνδεθούν." + +#: airtime_mvc/application/controllers/LocaleController.php:188 +msgid "Specify custom authentication which will work only for this show." +msgstr "Καθορίστε την προσαρμόσιμη πιστοποίηση, η οποία θα λειτουργήσει μόνο για αυτή την εκπομπή." + +#: airtime_mvc/application/controllers/LocaleController.php:190 +msgid "The show instance doesn't exist anymore!" +msgstr "Η εκπομπή δεν υπάρχει πια!" + +#: airtime_mvc/application/controllers/LocaleController.php:194 +msgid "Show" +msgstr "Εκπομπή" + +#: airtime_mvc/application/controllers/LocaleController.php:195 +msgid "Show is empty" +msgstr "Η εκπομπή είναι άδεια" + +#: airtime_mvc/application/controllers/LocaleController.php:196 +msgid "1m" +msgstr "1λ" + +#: airtime_mvc/application/controllers/LocaleController.php:197 +msgid "5m" +msgstr "5λ" + +#: airtime_mvc/application/controllers/LocaleController.php:198 +msgid "10m" +msgstr "10λ" + +#: airtime_mvc/application/controllers/LocaleController.php:199 +msgid "15m" +msgstr "15λ" + +#: airtime_mvc/application/controllers/LocaleController.php:200 +msgid "30m" +msgstr "30λ" + +#: airtime_mvc/application/controllers/LocaleController.php:201 +msgid "60m" +msgstr "60λ" + +#: airtime_mvc/application/controllers/LocaleController.php:203 +msgid "Retreiving data from the server..." +msgstr "Ανάκτηση δεδομένων από το διακομιστή..." + +#: airtime_mvc/application/controllers/LocaleController.php:209 +msgid "This show has no scheduled content." +msgstr "Αυτή η εκπομπή δεν έχει προγραμματισμένο περιεχόμενο." + +#: airtime_mvc/application/controllers/LocaleController.php:210 +msgid "This show is not completely filled with content." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:214 +msgid "January" +msgstr "Ιανουάριος" + +#: airtime_mvc/application/controllers/LocaleController.php:215 +msgid "February" +msgstr "Φεβρουάριος" + +#: airtime_mvc/application/controllers/LocaleController.php:216 +msgid "March" +msgstr "Μάρτιος" + +#: airtime_mvc/application/controllers/LocaleController.php:217 +msgid "April" +msgstr "Απρίλης" + +#: airtime_mvc/application/controllers/LocaleController.php:218 +#: airtime_mvc/application/controllers/LocaleController.php:230 +msgid "May" +msgstr "Μάιος" + +#: airtime_mvc/application/controllers/LocaleController.php:219 +msgid "June" +msgstr "Ιούνιος" + +#: airtime_mvc/application/controllers/LocaleController.php:220 +msgid "July" +msgstr "Ιούλιος" + +#: airtime_mvc/application/controllers/LocaleController.php:221 +msgid "August" +msgstr "Αύγουστος" + +#: airtime_mvc/application/controllers/LocaleController.php:222 +msgid "September" +msgstr "Σεπτέμβριος" + +#: airtime_mvc/application/controllers/LocaleController.php:223 +msgid "October" +msgstr "Οκτώβριος" + +#: airtime_mvc/application/controllers/LocaleController.php:224 +msgid "November" +msgstr "Νοέμβριος" + +#: airtime_mvc/application/controllers/LocaleController.php:225 +msgid "December" +msgstr "Δεκέμβριος" + +#: airtime_mvc/application/controllers/LocaleController.php:226 +msgid "Jan" +msgstr "Ιαν" + +#: airtime_mvc/application/controllers/LocaleController.php:227 +msgid "Feb" +msgstr "Φεβ" + +#: airtime_mvc/application/controllers/LocaleController.php:228 +msgid "Mar" +msgstr "Μαρ" + +#: airtime_mvc/application/controllers/LocaleController.php:229 +msgid "Apr" +msgstr "Απρ" + +#: airtime_mvc/application/controllers/LocaleController.php:231 +msgid "Jun" +msgstr "Ιουν" + +#: airtime_mvc/application/controllers/LocaleController.php:232 +msgid "Jul" +msgstr "Ιουλ" + +#: airtime_mvc/application/controllers/LocaleController.php:233 +msgid "Aug" +msgstr "Αυγ" + +#: airtime_mvc/application/controllers/LocaleController.php:234 +msgid "Sep" +msgstr "Σεπ" + +#: airtime_mvc/application/controllers/LocaleController.php:235 +msgid "Oct" +msgstr "Οκτ" + +#: airtime_mvc/application/controllers/LocaleController.php:236 +msgid "Nov" +msgstr "Νοε" + +#: airtime_mvc/application/controllers/LocaleController.php:237 +msgid "Dec" +msgstr "Δεκ" + +#: airtime_mvc/application/controllers/LocaleController.php:238 +msgid "today" +msgstr "σήμερα" + +#: airtime_mvc/application/controllers/LocaleController.php:239 +msgid "day" +msgstr "ημέρα" + +#: airtime_mvc/application/controllers/LocaleController.php:240 +msgid "week" +msgstr "εβδομάδα" + +#: airtime_mvc/application/controllers/LocaleController.php:241 +msgid "month" +msgstr "μήνας" + +#: airtime_mvc/application/controllers/LocaleController.php:256 +msgid "Shows longer than their scheduled time will be cut off by a following show." +msgstr "Εκπομπές μεγαλύτερες από την προγραμματισμένη διάρκειά τους θα διακόπτονται από την επόμενη εκπομπή." + +#: airtime_mvc/application/controllers/LocaleController.php:257 +msgid "Cancel Current Show?" +msgstr "Ακύρωση Τρέχουσας Εκπομπής;" + +#: airtime_mvc/application/controllers/LocaleController.php:258 +#: airtime_mvc/application/controllers/LocaleController.php:297 +msgid "Stop recording current show?" +msgstr "Πάυση ηχογράφησης τρέχουσας εκπομπής;" + +#: airtime_mvc/application/controllers/LocaleController.php:259 +msgid "Ok" +msgstr "Οκ" + +#: airtime_mvc/application/controllers/LocaleController.php:260 +msgid "Contents of Show" +msgstr "Περιεχόμενα Εκπομπής" + +#: airtime_mvc/application/controllers/LocaleController.php:263 +msgid "Remove all content?" +msgstr "Αφαίρεση όλου του περιεχομένου;" + +#: airtime_mvc/application/controllers/LocaleController.php:265 +msgid "Delete selected item(s)?" +msgstr "Διαγραφή επιλεγμένου στοιχείου/ων;" + +#: airtime_mvc/application/controllers/LocaleController.php:266 +#: airtime_mvc/application/views/scripts/schedule/show-content-dialog.phtml:5 +msgid "Start" +msgstr "Έναρξη" + +#: airtime_mvc/application/controllers/LocaleController.php:267 +msgid "End" +msgstr "Τέλος" + +#: airtime_mvc/application/controllers/LocaleController.php:268 +msgid "Duration" +msgstr "Διάρκεια" + +#: airtime_mvc/application/controllers/LocaleController.php:274 +msgid "Cue In" +msgstr "Cue In" + +#: airtime_mvc/application/controllers/LocaleController.php:275 +msgid "Cue Out" +msgstr "Cue Out" + +#: airtime_mvc/application/controllers/LocaleController.php:276 +msgid "Fade In" +msgstr "Fade In" + +#: airtime_mvc/application/controllers/LocaleController.php:277 +msgid "Fade Out" +msgstr "Fade Out" + +#: airtime_mvc/application/controllers/LocaleController.php:278 +msgid "Show Empty" +msgstr "Η εκπομπή είναι άδεια" + +#: airtime_mvc/application/controllers/LocaleController.php:279 +msgid "Recording From Line In" +msgstr "Ηχογράφηση Από Line In" + +#: airtime_mvc/application/controllers/LocaleController.php:284 +msgid "Cannot schedule outside a show." +msgstr "Δεν είναι δυνατός ο προγραμματισμός εκτός εκπομπής." + +#: airtime_mvc/application/controllers/LocaleController.php:285 +msgid "Moving 1 Item" +msgstr "Μετακίνηση 1 Στοιχείου" + +#: airtime_mvc/application/controllers/LocaleController.php:286 +#, php-format +msgid "Moving %s Items" +msgstr "Μετακίνηση Στοιχείων %s" + +#: airtime_mvc/application/controllers/LocaleController.php:289 +msgid "Select all" +msgstr "Επιλογή όλων" + +#: airtime_mvc/application/controllers/LocaleController.php:290 +msgid "Select none" +msgstr "Καμία Επιλογή" + +#: airtime_mvc/application/controllers/LocaleController.php:291 +msgid "Remove overbooked tracks" +msgstr "Αφαίρεση υπεράριθμων κρατήσεων κομματιών" + +#: airtime_mvc/application/controllers/LocaleController.php:292 +msgid "Remove selected scheduled items" +msgstr "Αφαίρεση επιλεγμένων προγραμματισμένων στοιχείων " + +#: airtime_mvc/application/controllers/LocaleController.php:293 +msgid "Jump to the current playing track" +msgstr "Μετάβαση στο τρέχον κομμάτι " + +#: airtime_mvc/application/controllers/LocaleController.php:294 +msgid "Cancel current show" +msgstr "Ακύρωση τρέχουσας εκπομπής" + +#: airtime_mvc/application/controllers/LocaleController.php:299 +msgid "Open library to add or remove content" +msgstr "Άνοιγμα βιβλιοθήκης για προσθήκη ή αφαίρεση περιεχομένου" + +#: airtime_mvc/application/controllers/LocaleController.php:300 +#: airtime_mvc/application/controllers/ScheduleController.php:288 +#: airtime_mvc/application/views/scripts/showbuilder/index.phtml:15 +msgid "Add / Remove Content" +msgstr "Προσθήκη / Αφαίρεση Περιεχομένου" + +#: airtime_mvc/application/controllers/LocaleController.php:302 +msgid "in use" +msgstr "σε χρήση" + +#: airtime_mvc/application/controllers/LocaleController.php:303 +msgid "Disk" +msgstr "Δίσκος" + +#: airtime_mvc/application/controllers/LocaleController.php:305 +msgid "Look in" +msgstr "Κοιτάξτε σε" + +#: airtime_mvc/application/controllers/LocaleController.php:307 +msgid "Open" +msgstr "Άνοιγμα" + +#: airtime_mvc/application/controllers/LocaleController.php:313 +msgid "Guests can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:314 +msgid "View schedule" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:315 +msgid "View show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:316 +msgid "DJs can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:317 +msgid "Manage assigned show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:318 +msgid "Import media files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:319 +msgid "Create playlists, smart blocks, and webstreams" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:320 +msgid "Manage their own library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:321 +msgid "Progam Managers can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:322 +msgid "View and manage show content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:323 +msgid "Schedule shows" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:324 +msgid "Manage all library content" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:325 +msgid "Admins can do the following:" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:326 +msgid "Manage preferences" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:327 +msgid "Manage users" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:328 +msgid "Manage watched folders" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:330 +msgid "View system status" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:331 +msgid "Access playout history" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:332 +msgid "View listener stats" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:334 +msgid "Show / hide columns" +msgstr "Εμφάνιση / απόκρυψη στηλών" + +#: airtime_mvc/application/controllers/LocaleController.php:336 +msgid "From {from} to {to}" +msgstr "Από {από} σε {σε}" + +#: airtime_mvc/application/controllers/LocaleController.php:337 +msgid "kbps" +msgstr "Kbps" + +#: airtime_mvc/application/controllers/LocaleController.php:338 +msgid "yyyy-mm-dd" +msgstr "εεεε-μμ-ηη" + +#: airtime_mvc/application/controllers/LocaleController.php:339 +msgid "hh:mm:ss.t" +msgstr "ωω:λλ:δδ.t" + +#: airtime_mvc/application/controllers/LocaleController.php:340 +msgid "kHz" +msgstr "kHz" + +#: airtime_mvc/application/controllers/LocaleController.php:343 +msgid "Su" +msgstr "Κυ" + +#: airtime_mvc/application/controllers/LocaleController.php:344 +msgid "Mo" +msgstr "Δε" + +#: airtime_mvc/application/controllers/LocaleController.php:345 +msgid "Tu" +msgstr "Τρ" + +#: airtime_mvc/application/controllers/LocaleController.php:346 +msgid "We" +msgstr "Τε" + +#: airtime_mvc/application/controllers/LocaleController.php:347 +msgid "Th" +msgstr "Πε" + +#: airtime_mvc/application/controllers/LocaleController.php:348 +msgid "Fr" +msgstr "Πα" + +#: airtime_mvc/application/controllers/LocaleController.php:349 +msgid "Sa" +msgstr "Σα" + +#: airtime_mvc/application/controllers/LocaleController.php:350 +#: airtime_mvc/application/controllers/LocaleController.php:378 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:3 +msgid "Close" +msgstr "Κλείσιμο" + +#: airtime_mvc/application/controllers/LocaleController.php:352 +msgid "Hour" +msgstr "Ώρα" + +#: airtime_mvc/application/controllers/LocaleController.php:353 +msgid "Minute" +msgstr "Λεπτό" + +#: airtime_mvc/application/controllers/LocaleController.php:354 +msgid "Done" +msgstr "Ολοκληρώθηκε" + +#: airtime_mvc/application/controllers/LocaleController.php:357 +msgid "Select files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:358 +#: airtime_mvc/application/controllers/LocaleController.php:359 +msgid "Add files to the upload queue and click the start button." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:362 +msgid "Add Files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:363 +msgid "Stop Upload" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:364 +msgid "Start upload" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:365 +msgid "Add files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:366 +#, php-format +msgid "Uploaded %d/%d files" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:367 +msgid "N/A" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:368 +msgid "Drag files here." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:369 +msgid "File extension error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:370 +msgid "File size error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:371 +msgid "File count error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:372 +msgid "Init error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:373 +msgid "HTTP Error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:374 +msgid "Security error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:375 +msgid "Generic error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:376 +msgid "IO error." +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:377 +#, php-format +msgid "File: %s" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:379 +#, php-format +msgid "%d files queued" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:380 +msgid "File: %f, size: %s, max file size: %m" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:381 +msgid "Upload URL might be wrong or doesn't exist" +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:382 +msgid "Error: File too large: " +msgstr "" + +#: airtime_mvc/application/controllers/LocaleController.php:383 +msgid "Error: Invalid file extension: " +msgstr "" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:190 +#: airtime_mvc/application/controllers/LibraryController.php:161 +msgid "Preview" +msgstr "Προεπισκόπηση" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:192 +msgid "Select cursor" +msgstr "Επιλέξτε cursor" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:193 +msgid "Remove cursor" +msgstr "Αφαίρεση cursor" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:198 +#: airtime_mvc/application/controllers/LibraryController.php:189 +#: airtime_mvc/application/controllers/LibraryController.php:218 +#: airtime_mvc/application/controllers/LibraryController.php:237 +#: airtime_mvc/application/controllers/ScheduleController.php:342 +#: airtime_mvc/application/controllers/ScheduleController.php:349 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:26 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:23 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:18 +msgid "Delete" +msgstr "Διαγραφή" + +#: airtime_mvc/application/controllers/ShowbuilderController.php:212 +msgid "show does not exist" +msgstr "η εκπομπή δεν υπάρχει" + +#: airtime_mvc/application/controllers/ListenerstatController.php:56 +msgid "Please make sure admin user/password is correct on System->Streams page." +msgstr "" + +#: airtime_mvc/application/controllers/ApiController.php:58 +#: airtime_mvc/application/controllers/ApiController.php:85 +msgid "You are not allowed to access this resource." +msgstr "Δεν έχετε δικαίωμα πρόσβασης σε αυτό το βοήθημα" + +#: airtime_mvc/application/controllers/ApiController.php:305 +#: airtime_mvc/application/controllers/ApiController.php:352 +msgid "You are not allowed to access this resource. " +msgstr "Δεν έχετε δικαίωμα πρόσβασης σε αυτό το βοήθημα. " + +#: airtime_mvc/application/controllers/ApiController.php:534 +msgid "File does not exist in Airtime." +msgstr "Το αρχείο δεν υπάρχει στο Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:547 +msgid "File does not exist in Airtime" +msgstr "Το αρχείο δεν υπάρχει στο Airtime" + +#: airtime_mvc/application/controllers/ApiController.php:559 +msgid "File doesn't exist in Airtime." +msgstr "Το αρχείο δεν υπάρχει στο Airtime." + +#: airtime_mvc/application/controllers/ApiController.php:605 +msgid "Bad request. no 'mode' parameter passed." +msgstr "Λανθασμένο αίτημα. Η παράμετρος «κατάσταση» δεν πέρασε." + +#: airtime_mvc/application/controllers/ApiController.php:615 +msgid "Bad request. 'mode' parameter is invalid" +msgstr "Λανθασμένο αίτημα. Η παράμετρος «κατάσταση» δεν είναι έγκυρη" + +#: airtime_mvc/application/controllers/LibraryController.php:95 +#: airtime_mvc/application/controllers/PlaylistController.php:127 +#, php-format +msgid "%s not found" +msgstr "%s δεν βρέθηκε" + +#: airtime_mvc/application/controllers/LibraryController.php:104 +#: airtime_mvc/application/controllers/PlaylistController.php:148 +msgid "Something went wrong." +msgstr "Κάτι πήγε στραβά." + +#: airtime_mvc/application/controllers/LibraryController.php:182 +#: airtime_mvc/application/controllers/LibraryController.php:206 +#: airtime_mvc/application/controllers/LibraryController.php:229 +msgid "Add to Playlist" +msgstr "Προσθήκη στη λίστα αναπαραγωγής" + +#: airtime_mvc/application/controllers/LibraryController.php:184 +msgid "Add to Smart Block" +msgstr "Προσθήκη στο Smart Block" + +#: airtime_mvc/application/controllers/LibraryController.php:194 +#: airtime_mvc/application/controllers/ScheduleController.php:927 +msgid "Download" +msgstr "Λήψη" + +#: airtime_mvc/application/controllers/LibraryController.php:198 +msgid "Duplicate Playlist" +msgstr "" + +#: airtime_mvc/application/controllers/LibraryController.php:213 +#: airtime_mvc/application/controllers/LibraryController.php:235 +msgid "Edit" +msgstr "Επεξεργασία" + +#: airtime_mvc/application/controllers/LibraryController.php:248 +msgid "Soundcloud" +msgstr "Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:254 +#: airtime_mvc/application/controllers/ScheduleController.php:311 +msgid "View on Soundcloud" +msgstr "Προβολή σε Soundcloud" + +#: airtime_mvc/application/controllers/LibraryController.php:258 +#: airtime_mvc/application/controllers/ScheduleController.php:314 +msgid "Re-upload to SoundCloud" +msgstr "Επαναφόρτωση σε SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:260 +#: airtime_mvc/application/controllers/ScheduleController.php:314 +msgid "Upload to SoundCloud" +msgstr "Ανέβασμα σε SoundCloud" + +#: airtime_mvc/application/controllers/LibraryController.php:267 +msgid "No action available" +msgstr "Καμία διαθέσιμη δράση" + +#: airtime_mvc/application/controllers/LibraryController.php:287 +msgid "You don't have permission to delete selected items." +msgstr "Δεν έχετε άδεια διαγραφής των επιλεγμένων στοιχείων." + +#: airtime_mvc/application/controllers/LibraryController.php:336 +msgid "Could not delete some scheduled files." +msgstr "Δεν ήταν δυνατή η διαγραφή ορισμένων προγραμματισμένων αρχείων." + +#: airtime_mvc/application/controllers/LibraryController.php:375 +#, php-format +msgid "Copy of %s" +msgstr "" + +#: airtime_mvc/application/controllers/PlaylistController.php:45 +#, php-format +msgid "You are viewing an older version of %s" +msgstr "Βλέπετε μια παλαιότερη έκδοση του %s" + +#: airtime_mvc/application/controllers/PlaylistController.php:120 +msgid "You cannot add tracks to dynamic blocks." +msgstr "Δεν μπορείτε να προσθέσετε κομμάτια σε δυναμικά blocks." + +#: airtime_mvc/application/controllers/PlaylistController.php:141 +#, php-format +msgid "You don't have permission to delete selected %s(s)." +msgstr "Δεν έχετε άδεια διαγραφής επιλεγμένων %s(s)." + +#: airtime_mvc/application/controllers/PlaylistController.php:154 +msgid "You can only add tracks to smart block." +msgstr "Μπορείτε να προσθέσετε κομμάτια μόνο σε smart block." + +#: airtime_mvc/application/controllers/PlaylistController.php:172 +msgid "Untitled Playlist" +msgstr "Λίστα Αναπαραγωγλης χωρίς Τίτλο" + +#: airtime_mvc/application/controllers/PlaylistController.php:174 +msgid "Untitled Smart Block" +msgstr "Smart Block χωρίς Τίτλο" + +#: airtime_mvc/application/controllers/PlaylistController.php:437 +msgid "Unknown Playlist" +msgstr "Άγνωστη λίστα αναπαραγωγής" + +#: airtime_mvc/application/controllers/ScheduleController.php:279 +msgid "View Recorded File Metadata" +msgstr "Προβολή εγγεγραμμένων Αρχείων Μεταδεδομένων " + +#: airtime_mvc/application/controllers/ScheduleController.php:291 +msgid "Remove All Content" +msgstr "Αφαίρεση Όλου του Περιεχομένου" + +#: airtime_mvc/application/controllers/ScheduleController.php:298 +msgid "Show Content" +msgstr "Εμφάνιση Περιεχομένου" + +#: airtime_mvc/application/controllers/ScheduleController.php:322 +#: airtime_mvc/application/controllers/ScheduleController.php:329 +msgid "Cancel Current Show" +msgstr "Ακύρωση Τρέχουσας Εκπομπής" + +#: airtime_mvc/application/controllers/ScheduleController.php:326 +#: airtime_mvc/application/controllers/ScheduleController.php:336 +msgid "Edit Show" +msgstr "Επεξεργασία Εκπομπής" + +#: airtime_mvc/application/controllers/ScheduleController.php:344 +msgid "Delete This Instance" +msgstr "Διαγραφή Του Παραδείγματος" + +#: airtime_mvc/application/controllers/ScheduleController.php:346 +msgid "Delete This Instance and All Following" +msgstr "Διαγράψτε Του Παραδείγματος και Όλων των Ακόλουθών του" + +#: airtime_mvc/application/controllers/ScheduleController.php:472 +#, php-format +msgid "Rebroadcast of show %s from %s at %s" +msgstr "Αναμετάδοση της εκπομπής %s από %s σε %s" + +#: airtime_mvc/application/controllers/WebstreamController.php:29 +#: airtime_mvc/application/controllers/WebstreamController.php:33 +msgid "Untitled Webstream" +msgstr "Webstream χωρίς Τίτλο" + +#: airtime_mvc/application/controllers/WebstreamController.php:138 +msgid "Webstream saved." +msgstr "Το Webstream αποθηκεύτηκε." + +#: airtime_mvc/application/controllers/WebstreamController.php:146 +msgid "Invalid form values." +msgstr "Άκυρες μορφές αξίας." + +#: airtime_mvc/application/views/scripts/listenerstat/index.phtml:2 +msgid "Listener Count Over Time" +msgstr "Καταμέτρηση Ακροατών με την Πάροδου Χρόνου" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:3 +msgid "Previous:" +msgstr "Προηγούμενο" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:10 +msgid "Next:" +msgstr "Επόμενο" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:24 +msgid "Source Streams" +msgstr "Πηγή Streams" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:29 +msgid "Master Source" +msgstr "Κύρια Πηγή " + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:38 +msgid "Show Source" +msgstr "Εμφάνιση Πηγής " + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:45 +msgid "Scheduled Play" +msgstr "Προγραμματισμένη Αναπαραγωγή" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:54 +msgid "ON AIR" +msgstr "ON AIR" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:55 +msgid "Listen" +msgstr "Ακούστε!" + +#: airtime_mvc/application/views/scripts/partialviews/header.phtml:59 +msgid "Station time" +msgstr "Χρόνος σταθμού" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:3 +msgid "Your trial expires in" +msgstr "Το δοκιμαστικό λήγει σε" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "Purchase your copy of Airtime" +msgstr "Αγοράστε το δικό σας αντίγραφο του Airtime" + +#: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:9 +msgid "My Account" +msgstr "Ο λογαριασμός μου" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:3 +msgid "Manage Users" +msgstr "Διαχείριση Χρηστών" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:10 +msgid "New User" +msgstr "Νέος Χρήστης" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:17 +msgid "id" +msgstr "ταυτότητα" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:19 +msgid "First Name" +msgstr "Όνομα" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:20 +msgid "Last Name" +msgstr "Επώνυμο" + +#: airtime_mvc/application/views/scripts/user/add-user.phtml:21 +msgid "User Type" +msgstr "Τύπος Χρήστη" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 +#, php-format +msgid "%sAirtime%s %s, the open radio software for scheduling and remote station management. %s" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 +#, php-format +msgid "%sSourcefabric%s o.p.s. Airtime is distributed under the %sGNU GPL v.3%s" +msgstr "%s Sourcefabric%s o.p.s. Το Airtime διανέμεται υπό %s GNU GPL v.3 %s" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 +msgid "Share" +msgstr "" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 +msgid "Select stream:" +msgstr "Επιλέξτε stream:" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:90 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:50 +msgid "mute" +msgstr "Σίγαση" + +#: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:91 +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:53 +msgid "unmute" +msgstr "Κατάργηση σίγασης" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:3 +msgid "Welcome to Airtime!" +msgstr "Καλώς ήρθατε στο Airtime!" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:4 +msgid "Here's how you can get started using Airtime to automate your broadcasts: " +msgstr "Διαβάστε τις οδηγίες για να ξεκινήσετε να χρησιμοποιείται το Airtime, για την αυτοματοποίηση των εκπομπών σας: " + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:7 +msgid "Begin by adding your files to the library using the 'Add Media' menu button. You can drag and drop your files to this window too." +msgstr "Ξεκινήστε με την προσθήκη αρχείων στη βιβλιοθήκη επιλέγοντας 'Προσθήκη Πολυμέσων' στο μενού. Μπορείτε να κάνετε και drag-and-drop στα αρχεία σας σε αυτό το παράθυρο." + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:8 +msgid "Create a show by going to 'Calendar' in the menu bar, and then clicking the '+ Show' icon. This can be either a one-time or repeating show. Only admins and program managers can add shows." +msgstr "Δημιουργήστε μια εκπομπή πηγαίνοντας στο «Ημερολόγιο» και στη συνέχεια κάνοντας κλικ στο εικονίδιο '+Εκπομπή'. Αυτό μπορεί να είναι είτε μια ή επαναλαμβανόμενες εκπομπές. Μόνο οι διαχειριστές και οι μουσικοί παραγωγοί μπορούν να επεξεργαστούν την εκπομπή." + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:9 +msgid "Add media to the show by going to your show in the Schedule calendar, left-clicking on it and selecting 'Add / Remove Content'" +msgstr "Προσθέστε πολυμέσα στην εκπομπή σας πηγαίνοντας στο Ημερολόγιο προγραμματισμού, κάνοντας αριστερό κλικ πάνω στην εκπομπή και επιλέγοντας 'Προσθήκη / Αφαίρεση Περιεχομένου'" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:10 +msgid "Select your media from the left pane and drag them to your show in the right pane." +msgstr "Επιλέξτε τα πολυμέσα σας από το αριστερό τμήμα του παραθύρου και σύρετέ τα στην εκπομπή σας στο δεξιό τμήμα." + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:12 +msgid "Then you're good to go!" +msgstr "Και είστε έτοιμοι!" + +#: airtime_mvc/application/views/scripts/dashboard/help.phtml:13 +#, php-format +msgid "For more detailed help, read the %suser manual%s." +msgstr "Για περισσότερες αναλυτικές οδηγίες, διαβάστε το %sεγχειρίδιο%s ." + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:40 +msgid "Expand Static Block" +msgstr "Επέκταση Στατικών Block" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:45 +msgid "Expand Dynamic Block" +msgstr "Επέκταση Δυναμικών Block" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:98 +msgid "Empty smart block" +msgstr "Άδειασμα smart block" + +#: airtime_mvc/application/views/scripts/playlist/update.phtml:100 +msgid "Empty playlist" +msgstr "Άδειασμα λίστας αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:66 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "Fade out: " +msgstr "Fade out: " + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:3 +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:71 +msgid "(ss.t)" +msgstr "(Ss.t)" + +#: airtime_mvc/application/views/scripts/playlist/set-fade.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:63 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:68 +msgid "Fade in: " +msgstr "Fade in: " + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:10 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:10 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:4 +msgid "New" +msgstr "Νέο" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:13 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:13 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:7 +msgid "New Playlist" +msgstr "Νέα λίστα αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:14 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:14 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:8 +msgid "New Smart Block" +msgstr "Νέο Smart Block" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:15 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:15 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:9 +msgid "New Webstream" +msgstr "Νέο Webstream" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:20 +msgid "Shuffle playlist" +msgstr "Shuffle λίστα αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:23 +msgid "Save playlist" +msgstr "Αποθήκευση λίστας αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:30 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:27 +msgid "Playlist crossfade" +msgstr "Crossfade λίστας αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:49 +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:51 +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:38 +msgid "View / edit description" +msgstr "Προβολή / επεξεργασία περιγραφής" + +#: airtime_mvc/application/views/scripts/playlist/playlist.phtml:81 +msgid "No open playlist" +msgstr "Καμία ανοικτή λίστα αναπαραγωγής" + +#: airtime_mvc/application/views/scripts/playlist/smart-block.phtml:86 +msgid "No open smart block" +msgstr "Κανένα ανοικτό smart block " + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +msgid "Cue In: " +msgstr "Cue In: " + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:2 +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "(hh:mm:ss.t)" +msgstr "(ωω:λλ:δδ.t)" + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:7 +msgid "Cue Out: " +msgstr "Cue Out: " + +#: airtime_mvc/application/views/scripts/playlist/set-cue.phtml:12 +msgid "Original Length:" +msgstr "Αρχική Διάρκεια:" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Add this show" +msgstr "Προσθήκη αυτής της εκπομπής " + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:6 +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:40 +msgid "Update show" +msgstr "Ενημέρωση εκπομπής" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:10 +msgid "What" +msgstr "Τι" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:14 +msgid "When" +msgstr "Πότε" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:19 +msgid "Live Stream Input" +msgstr "Είσοδος Live Stream " + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:23 +msgid "Record & Rebroadcast" +msgstr "Εγγραφή και Αναμετάδοση" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:29 +msgid "Who" +msgstr "Ποιός" + +#: airtime_mvc/application/views/scripts/schedule/add-show-form.phtml:33 +msgid "Style" +msgstr "Στυλ" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:3 +msgid "Email sent" +msgstr "Το e-mail εστάλη" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:6 +msgid "An email has been sent" +msgstr "Το e-mail εστάλη" + +#: airtime_mvc/application/views/scripts/login/password-restore-after.phtml:7 +msgid "Back to login screen" +msgstr "Επιστροφή στην σελίδα εισόδου" + +#: airtime_mvc/application/views/scripts/login/index.phtml:7 +msgid "Welcome to the online Airtime demo! You can log in using the username 'admin' and the password 'admin'." +msgstr "Καλώς ήρθατε στο online demo του Airtime! Μπορείτε να συνδεθείτε χρησιμοποιώντας το όνομα χρήστη «admin» και τον κωδικό πρόσβασης «admin»." + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:3 +#: airtime_mvc/application/views/scripts/form/login.phtml:34 +msgid "Reset password" +msgstr "Επαναφορά κωδικού πρόσβασης" + +#: airtime_mvc/application/views/scripts/login/password-restore.phtml:7 +msgid "Please enter your account e-mail address. You will receive a link to create a new password via e-mail." +msgstr "Παρακαλώ εισάγετε τη διεύθυνση e-mail σας. Θα λάβετε ένα σύνδεσμο για να δημιουργήσετε έναν νέο κωδικό πρόσβασης μέσω e-mail." + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:3 +msgid "New password" +msgstr "Νέος κωδικός πρόσβασης" + +#: airtime_mvc/application/views/scripts/login/password-change.phtml:6 +msgid "Please enter and confirm your new password in the fields below." +msgstr "Παρακαλώ εισάγετε και επαληθεύστε τον νέο κωδικό πρόσβασής σας στα παρακάτω πεδία. " + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:4 +msgid "Service" +msgstr "Εξυπηρέτηση" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:6 +msgid "Uptime" +msgstr "Χρόνος λειτουργίας" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:7 +msgid "CPU" +msgstr "CPU" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:8 +msgid "Memory" +msgstr "Μνήμη" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:14 +msgid "Airtime Version" +msgstr "Έκδοση Airtime" + +#: airtime_mvc/application/views/scripts/systemstatus/index.phtml:30 +msgid "Disk Space" +msgstr "Χώρος δίσκου" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:22 +msgid "previous" +msgstr "προηγούμενο" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:25 +msgid "play" +msgstr "αναπαραγωγή" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:28 +msgid "pause" +msgstr "παύση" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:31 +msgid "next" +msgstr "επόμενο" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:34 +msgid "stop" +msgstr "στάση" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:59 +msgid "max volume" +msgstr "μέγιστη ένταση" + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:69 +msgid "Update Required" +msgstr "Απαιτείται Ενημέρωση " + +#: airtime_mvc/application/views/scripts/audiopreview/audio-preview.phtml:70 +#, php-format +msgid "To play the media you will need to either update your browser to a recent version or update your %sFlash plugin%s." +msgstr "Για να παίξετε τα πολυμέσα θα πρέπει είτε να αναβαθμίστε το πρόγραμμα περιήγησηής σας σε μια πρόσφατη έκδοση ή να ενημέρώσετε το %sFlash plugin %s σας." + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:51 +msgid "Stream URL:" +msgstr "URL Stream:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:56 +msgid "Default Length:" +msgstr "Προεπιλεγμένη Διάρκεια:" + +#: airtime_mvc/application/views/scripts/webstream/webstream.phtml:63 +msgid "No webstream" +msgstr "Κανένα webstream" + +#: airtime_mvc/application/views/scripts/error/error.phtml:6 +msgid "Zend Framework Default Application" +msgstr "Εφαρμογή Προεπιλεγμένου Πλαισίου Zend " + +#: airtime_mvc/application/views/scripts/error/error.phtml:10 +msgid "Page not found!" +msgstr "Η σελίδα δεν βρέθηκε!" + +#: airtime_mvc/application/views/scripts/error/error.phtml:11 +msgid "Looks like the page you were looking for doesn't exist!" +msgstr "Η σελίδα που ψάχνατε δεν υπάρχει!" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:4 +msgid "Stream " +msgstr "Stream " + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:33 +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:74 +#: airtime_mvc/application/views/scripts/form/preferences_email_server.phtml:90 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:47 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:44 +#: airtime_mvc/application/views/scripts/form/preferences_soundcloud.phtml:59 +#: airtime_mvc/application/views/scripts/form/preferences_general.phtml:71 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:46 +msgid "(Required)" +msgstr "(Απαιτείται)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:76 +msgid "Additional Options" +msgstr "Πρόσθετες επιλογές" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:136 +msgid "The following info will be displayed to listeners in their media player:" +msgstr "Η παρακάτω πληροφορία θα εμφανίζεται στις συσκευές αναπαραγωγής πολυμέσων των ακροατών σας:" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:169 +msgid "(Your radio station website)" +msgstr "(Ιστοσελίδα του Ραδιοφωνικού σταθμού)" + +#: airtime_mvc/application/views/scripts/form/stream-setting-form.phtml:207 +msgid "Stream URL: " +msgstr "URL Stream: " + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:9 +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:27 +msgid "Choose folder" +msgstr "Επιλέξτε φάκελο" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:10 +msgid "Set" +msgstr "Ορισμός" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:19 +msgid "Current Import Folder:" +msgstr "Τρέχων Φάκελος Εισαγωγής:" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:28 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:40 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:41 +msgid "Add" +msgstr "Προσθήκη" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:43 +msgid "Rescan watched directory (This is useful if it is network mount and may be out of sync with Airtime)" +msgstr "Επανασάρωση προβεβλημμένου ευρετηρίου (Αυτό είναι χρήσιμο αν το δίκτυο στήριξης είναι εκτός συγχρονισμού με το Airtime)" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:44 +msgid "Remove watched directory" +msgstr "Αφαίρεση προβεβλημμένου ευρετηρίου" + +#: airtime_mvc/application/views/scripts/form/preferences_watched_dirs.phtml:50 +msgid "You are not watching any media folders." +msgstr "Δεν παρακολουθείτε κανέναν φάκελο πολυμέσων." + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:4 +msgid "Choose Days:" +msgstr "Επιλέξτε Ημέρες:" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast-absolute.phtml:18 +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:18 +msgid "Remove" +msgstr "Αφαίρεση" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:1 +msgid "Register Airtime" +msgstr "Εγγραφή σε Airtime" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:6 +#, php-format +msgid "Help Airtime improve by letting us know how you are using it. This info will be collected regularly in order to enhance your user experience.%sClick 'Yes, help Airtime' and we'll make sure the features you use are constantly improving." +msgstr "Βοηθείστε στη βελτίωση του Airtime, ενημερώνοντας μας για την χρήση που του κάνετε. Αυτές οι πληροφορίες θα συλλέγονται τακτικά, προκειμένου να ενισχύσουν την εμπειρία των χρηστών σας. %sΚάντε κλικ στο κουμπί 'Ναι, βοηθώ το Airtime' και θα βεβαιωθείτε ότι οι λειτουργίες που χρησιμοποιείτε συνεχώς βελτιώνεται." + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:25 +#, php-format +msgid "Click the box below to advertise your station on %sSourcefabric.org%s. In order to promote your station, 'Send support feedback' must be enabled. This data will be collected in addition to the support feedback." +msgstr "Κάντε κλικ στο παρακάτω πλαίσιο για να διαφημίσετε το σταθμό σας στην ιστοσελίδα %s Sourcefabric.org %s . Προκειμένου να το κάνετε πρέπει η επιλογή 'Αποστολή σχολίων υποστήριξης» να είναι ενεργοποιημένη. Αυτά τα δεδομένα θα συλλέγονται μαζί με τo feedback σας." + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:65 +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:79 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:61 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:76 +msgid "(for verification purposes only, will not be published)" +msgstr "(Μόνο για σκοπούς επαλήθευσης, δεν θα δημοσιευθεί)" + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:150 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:151 +msgid "Note: Anything larger than 600x600 will be resized." +msgstr "Σημείωση: Οτιδήποτε μεγαλύτερο από 600x600 θα αλλάξει μέγεθος." + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:164 +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:164 +msgid "Show me what I am sending " +msgstr "Δείξε μου τι στέλνω " + +#: airtime_mvc/application/views/scripts/form/register-dialog.phtml:178 +msgid "Terms and Conditions" +msgstr "Όροι και Προϋποθέσεις" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:7 +msgid "Find Shows" +msgstr "Εύρεση Εκπομπών" + +#: airtime_mvc/application/views/scripts/form/showbuilder.phtml:12 +msgid "Filter By Show:" +msgstr "Φιλτράρισμα βάσει Εκπομπών:" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:2 +msgid "Input Stream Settings" +msgstr "Ρυθμίσεις Stream Εισόδου" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:109 +msgid "Master Source Connection URL:" +msgstr "URL Σύνδεσης Κυρίαρχης Πηγής:" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:115 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:159 +msgid "Override" +msgstr "Παράκαμψη" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "OK" +msgstr "ΟΚ" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:120 +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:164 +msgid "RESET" +msgstr "ΕΠΑΝΑΦΟΡΑ" + +#: airtime_mvc/application/views/scripts/form/preferences_livestream.phtml:153 +msgid "Show Source Connection URL:" +msgstr "Εμφάνιση Πηγής URL Σύνδεσης:" + +#: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 +#, php-format +msgid "%s's Settings" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 +msgid "Repeat Days:" +msgstr "Επανάληψη Ημερών:" + +#: airtime_mvc/application/views/scripts/form/daterange.phtml:6 +msgid "Filter History" +msgstr "Φιλτράρισμα Ιστορίας" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:5 +msgid "Email / Mail Server Settings" +msgstr "Ρυθμίσεις Δακομιστή Email / Αλληλογραφίας" + +#: airtime_mvc/application/views/scripts/form/preferences.phtml:10 +msgid "SoundCloud Settings" +msgstr "Ρυθμίσεις SoundCloud" + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:5 +#, php-format +msgid "Help Airtime improve by letting Sourcefabric know how you are using it. This information will be collected regularly in order to enhance your user experience.%sClick the 'Send support feedback' box and we'll make sure the features you use are constantly improving." +msgstr "Βοηθείστε το Airtime ενημερώνοντας τη Sourcefabric για τη χρήση που του κάνετε. Αυτές οι πληροφορίες θα συλλέγονται τακτικά, προκειμένου να ενισχύσουν την εμπειρία των χρηστών σας. %s Κάντε κλικ στο πλαίσιο Αποστολή σχολίων υποστήριξης» και θα βεβαιωθείτε ότι οι λειτουργίες που χρησιμοποιείτε βελτιώνοται συνεχώς." + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:23 +#, php-format +msgid "Click the box below to promote your station on %sSourcefabric.org%s." +msgstr "Κάντε κλικ στο παρακάτω πλαίσιο για να προωθήσετε τον σταθμό σας στην ιστοσελίδα %sSourcefabric.org%s ." + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:41 +msgid "(In order to promote your station, 'Send support feedback' must be enabled)." +msgstr "(Για να προωθήσετε τον σταθμό σας, η 'Αποστολή σχολίων υποστήριξης» πρέπει να είναι ενεργοποιημένη)." + +#: airtime_mvc/application/views/scripts/form/support-setting.phtml:186 +msgid "Sourcefabric Privacy Policy" +msgstr "Πολιτική Προστασίας Προσωπικών Δεδομένων της Sourcefabric" + +#: airtime_mvc/application/views/scripts/form/add-show-live-stream.phtml:53 +msgid "Connection URL: " +msgstr "URL Σύνδεσης: " + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:3 +msgid "Smart Block Options" +msgstr "Επιλογές Smart Block" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:39 +msgid "or" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:40 +msgid "and" +msgstr "" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 +msgid " to " +msgstr " να " + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:120 +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:133 +msgid "files meet the criteria" +msgstr "τα αρχεία πληρούν τα κριτήρια" + +#: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:127 +msgid "file meet the criteria" +msgstr "το αρχείο πληρεί τα κριτήρια" + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:3 +#: airtime_mvc/application/views/scripts/library/library.phtml:2 +msgid "File import in progress..." +msgstr "Εισαγωγή αρχείου σε εξέλιξη..." + +#: airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml:5 +#: airtime_mvc/application/views/scripts/library/library.phtml:5 +msgid "Advanced Search Options" +msgstr "Προηγμένες Επιλογές Αναζήτησης" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:2 +msgid "Stream Settings" +msgstr "Ρυθμίσεις Stream" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:12 +msgid "Global Settings" +msgstr "Γενικές ρυθμίσεις" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 +msgid "dB" +msgstr "" + +#: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 +msgid "Output Stream Settings" +msgstr "Ρυθμίσεις Stream Εξόδου" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:13 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:36 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:38 +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:147 +msgid "Length:" +msgstr "Διάρκεια:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:14 +msgid "Sample Rate:" +msgstr "Ρυθμός δειγματοληψίας:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:24 +msgid "Isrc Number:" +msgstr "Αριθμός ISRC:" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 +msgid "File Path:" +msgstr "" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:45 +msgid "Web Stream" +msgstr "Web Stream" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:46 +msgid "Dynamic Smart Block" +msgstr "Δυναμικά Smart Block" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:47 +msgid "Static Smart Block" +msgstr "Στατικά Smart Block" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:48 +msgid "Audio Track" +msgstr "Κομμάτι Ήχου" + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:63 +msgid "Playlist Contents: " +msgstr "Περιεχόμενα Λίστας Αναπαραγωγής: " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:65 +msgid "Static Smart Block Contents: " +msgstr "Περιεχόμενα Στατικών Smart Block : " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:104 +msgid "Dynamic Smart Block Criteria: " +msgstr "Κριτήρια Δυναμικών Smart Block: " + +#: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:137 +msgid "Limit to " +msgstr "Όριο για " + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 +msgid "Please selection an option" +msgstr "Παρακαλούμε επιλέξτε μια επιλογή" + +#: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 +msgid "No Records" +msgstr "Κανένα Αρχείο" + +#~ msgid "Timezone" +#~ msgstr "Χρονική ζώνη" + +#~ msgid "%sAirtime%s %s, , the open radio software for scheduling and remote station management. %s" +#~ msgstr "%sΤο Airtime%s %s, το ανοικτού κώδικα λογισμικό για τον προγραμματισμό και την διαχείριση ραδιοφωνικών σταθμών εξ αποστάσεως. %s" + +#~ msgid "File" +#~ msgstr "Αρχείο" + +#~ msgid "Path:" +#~ msgstr "Διαδρομή" From 93017b847706697f944cc694eb69b9493f2d6523 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 16:43:24 -0500 Subject: [PATCH 084/208] Added Greek datatables and plupload language files Added Greek to locale db table --- airtime_mvc/build/sql/defaultdata.sql | 1 + .../public/js/datatables/i18n/el_GR.txt | 18 +++++++++++++ airtime_mvc/public/js/plupload/i18n/el_GR.js | 27 +++++++++++++++++++ .../upgrades/airtime-2.3.0/data/upgrade.sql | 1 + 4 files changed, 47 insertions(+) create mode 100644 airtime_mvc/public/js/datatables/i18n/el_GR.txt create mode 100644 airtime_mvc/public/js/plupload/i18n/el_GR.js diff --git a/airtime_mvc/build/sql/defaultdata.sql b/airtime_mvc/build/sql/defaultdata.sql index 0923d60a3..94e1de23e 100644 --- a/airtime_mvc/build/sql/defaultdata.sql +++ b/airtime_mvc/build/sql/defaultdata.sql @@ -336,5 +336,6 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polski'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('el_GR', 'Ελληνικά'); -- end of added in 2.3 diff --git a/airtime_mvc/public/js/datatables/i18n/el_GR.txt b/airtime_mvc/public/js/datatables/i18n/el_GR.txt new file mode 100644 index 000000000..03f52058f --- /dev/null +++ b/airtime_mvc/public/js/datatables/i18n/el_GR.txt @@ -0,0 +1,18 @@ +// Greek +{ + "sProcessing": "Επεξεργασία...", + "sLengthMenu": "Δείξε _MENU_ εγγραφές", + "sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν", + "sInfo": "Δείχνοντας _START_ εως _END_ από _TOTAL_ εγγραφές", + "sInfoEmpty": "Δείχνοντας 0 εως 0 από 0 εγγραφές", + "sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)", + "sInfoPostFix": "", + "sSearch": "", + "sUrl": "", + "oPaginate": { + "sFirst": "Πρώτη", + "sPrevious": "Προηγούμενη", + "sNext": "Επόμενη", + "sLast": "Τελευταία" + } +} \ No newline at end of file diff --git a/airtime_mvc/public/js/plupload/i18n/el_GR.js b/airtime_mvc/public/js/plupload/i18n/el_GR.js new file mode 100644 index 000000000..1652d739d --- /dev/null +++ b/airtime_mvc/public/js/plupload/i18n/el_GR.js @@ -0,0 +1,27 @@ +//Greek +plupload.addI18n({ + 'Select files' : $.i18n._('Select files'), + 'Add files to the upload queue and click the start button.' : $.i18n._('Add files to the upload queue and click the start button.'), + 'Filename' : $.i18n._('Filename'), + 'Status' : $.i18n._('Status'), + 'Size' : $.i18n._('Size'), + 'Add files' : $.i18n._('Add files'), + 'Stop current upload' : $.i18n._('Stop current upload'), + 'Start uploading queue' : $.i18n._('Start uploading queue'), + 'Uploaded %d/%d files': $.i18n._('Uploaded %d/%d files'), + 'N/A' : $.i18n._('N/A'), + 'Drag files here.' : $.i18n._('Drag files here.'), + 'File extension error.': $.i18n._('File extension error.'), + 'File size error.': $.i18n._('File size error.'), + 'Init error.': $.i18n._('Init error.'), + 'HTTP Error.': $.i18n._('HTTP Error.'), + 'Security error.': $.i18n._('Security error.'), + 'Generic error.': $.i18n._('Generic error.'), + 'IO error.': $.i18n._('IO error.'), + 'Stop Upload': $.i18n._('Stop Upload'), + 'Add Files': $.i18n._('Add Files'), + 'Start Upload': $.i18n._('Start Upload'), + 'Start upload': $.i18n._('Start upload'), + '%d files queued': $.i18n._('%d files queued'), + "Error: Invalid file extension: " : $.i18n._("Error: Invalid file extension: ") +}); diff --git a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql index 3593384ed..5ef1a1612 100644 --- a/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql +++ b/install_minimal/upgrades/airtime-2.3.0/data/upgrade.sql @@ -41,3 +41,4 @@ INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pl_PL', 'Polski'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('pt_BR', 'Português Brasileiro'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('ru_RU', 'Русский'); INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('zh_CN', '简体中文'); +INSERT INTO cc_locale (locale_code, locale_lang) VALUES ('el_GR', 'Ελληνικά'); From 9a893aea49c0b431cb6ba3537fd7685daa3fd338 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 17:13:04 -0500 Subject: [PATCH 085/208] Fixed some typos --- .../locale/en_CA/LC_MESSAGES/airtime.mo | Bin 53854 -> 53853 bytes .../locale/en_CA/LC_MESSAGES/airtime.po | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.mo index da0de47ecadd74999f70de4f19a9331e7d54df25..b1fccf89e277921f03f315d8a16926661161d338 100644 GIT binary patch delta 5874 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 delta 5863 zcmXxnd3?`D9>?(^K_ZC=;)sxhL_>l^#2NQZTB|J^>uNlLM(REu^kMsTlsKZ!Vk=l= zwNC=zjKSY<5JoIDCKa==E*4=MJcr>}d6_YR7=fzCI|pDI_3_vr zk6|MEEjOkWc3N&c6Hg(N2Dt&XUO02=2QQx)UT z58I#*c6N5d%G7(I=INW`*$zW!h@)Ys>#zVd@Lepxr5J%JD~;KOBe4qlyl4CQV;$;2 z=#NeC9gN2y`~-vXAlAZCtcO=T3Sks}MNJUA%65!K4Qz`V&=a-bP}IN?NcPPP)R8>J zV645`m;=}p)&C!;j9f!)=mu)u+o*ZGM-<+m5WL0)Fcmf7Vhq7t)WChH3G*=%i!d3R zthIL`4U?#^z#4cA1Mw^d;APZ2w@?AyMFRHBLkb#Dd7Ygw1e;RthZ>NDx|~x`8JdZ; za2dv8uJcP=K>a@I?5D1`8JUYZl4aNn*P-UUgnq1VE>qAY`w_Kp;QKZM3D}!@KWuO#?)t_F70~MeETtm_04GtJ+K0G$&xl26NRtg zXq<)G!MCXAbPZp}_M413&hyPdrTUc*Y~Uj>l=^hkSuaH$-3GjXxu}gz*-ZZR!vP9P z*&)#t%V_8-dMmJci>+=Wc97{i|H^uZ3^W z@K?P5{|;M>Nl*uDfse5ZHr;AWJ4{EN{U)r2$5Hc?qAu43SO4DqUXBXv4u<2eu03QM z`L9bugKaid38-h()%gnQgE1O)3DZ#%jYr+;si@0450!}(s7&ReE?GV*utE&MW2pXR zsCEA7QP98#sLNC7&vpl)s8oleQkaPKF%1>SG*keyQD?u+*9*%*Z@P|tQRDidX>%v?id@D6Gt z&r$Q$-f8D+i2i#2(G)asD^#jGq7S}-S~vrhfk_yFIj+73!>FG|y`r0_Grfm8x6e{C-^udj&6m3RDz5^9VA;#e`)Pi?W{VGs*=rJk)|G(Ic zG(cVM?x^^~wQ zn8f(zs1MSpkL?F4;uB+r({Cm!@Uy7QJV6EEzlZ!Q!iYUKwe9dF>cgDxpgxtmP-j_; z?eQW8V$fcDreUbeHF5Q3uHFh2cpKDRY46&HyY^9g$$u4o7)ygv`6epWQ&6{g4hG>u zS6__*)IUI-?Jm@~{n#9funCr9HLSAF8id+dC`Muz)HucLRGmwIIoQ4WyjH_p$ zUPTsap~df9mO*qZ{?qNOZIjHe@s1)x;UAlbKk$j7K&OcyH{6%%Wf8Tt&Kz-DL zv8d;fj7c~ML(oG7wgwf*`=}jnMP+I?DwBIr{SKf4DRRFTqc&24I-+mz#ryx6LJSQL zQ4`lMun|U~cGL#-Ogo?!9E|EW!u_6sHK~A)O`0)nRt#m>S~4d zbp;lZ|4*8|MrP+?UEPGHHI)Ylb47Jd|P#L_1+Ub2%ze+_m&`{KO zq$%nMQe1r`DiCj$D=b8v=_*tvHeo%?!wfu(4KeDVJ(4b{z*13Pyiv~isLQw$HP0^8 z<;_Pecmj1f%aHXvbCH71dnjt6XjFz0Q5i`=jZby;KcE7b zh#EH=74Tww6*pk0-v4b1is(7&2z>ZUR4ENYWuOk~F2ti2Xp8FK6Loj`VtpKm+Q=-| z{x<3;R-*#WLj}Aa71&`6V|{aqLPNZcTJSk4(t3yOg0UDzy&bm0A*i!oin{gh;UN41 z6{ybP=WPFPmztJpoub3XSEh}JM&OGJc#Od4i(rH)C4~}D;>4} z6ADG`uqP_zFQYa#5?kXO?13Ml0=jdQ{A(u_uHg~t7C*yA7;?-8(i)Ze-l#xcMFlzr zwZmzyeK~64ji{s8is85um6>AHJf~2Z{_dD(FVB4%H1RW3iUNvly&h^{G%C<|)a`DA zx&z6m1v{cL(;XGi5Y&-PME$-PmC+p3I@?k6?DHs`rLZ5T;{4;re2f*?A2xxzM{)bYiO2Y`8 zj$=_Nx`;Zfa`*cKRLUNq4?e+a_zV?T)l;^;11f+NjKOsD#cb3O<)AL-77W+>-$Ox{ zsT8%~Wz<>S#ut|n^??Z~wRa;5^?OV7!=9)!AB5US1}f!Qs5_92x>GyQANQeNNfFj( zeN#d~9j~A!e1s8b{%!|EBB?ShP|q;|wZp!sBg#T8xCj;SHq=h@Q5h@2>Ua_rNEs?~ zSJBggHz??G+(%_1=(L?60+s3n^vAZS)OAI@|CezBrlV3^>O6}Y_YEqLOQ;XmPww}K zukD7Szb5}$umug-n1b(f`aj4X;L0z6gRODAssjq$B2GAUpkyO;#4?|^g3To$bP#Kwr zHE{u||5|K{xu_3Zu}4AA;Tq~J|Bcl#sLZCQKI#k`qb^sJtH)w6^*Co|45U5?)h`Wo zXU3oc8ixuf6E**2)E)5VQc%YQt|1%Mag}pDYKMP9^~-ndMW{?2!RAP(e95TsolpUGx9zn|Ki80oitM$5+wtdzcTQ}X&^9u$eW&DvxP-)ngzBm3GiJ7Y yeR}%j8E>V}oHD&rWbgFJnd9Dy9GE_7+>FSSj2E?56ICnt&yqW>3XW&a5C0!Tqr)Nq diff --git a/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.po b/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.po index c73f6bd02..1965f28d8 100644 --- a/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/en_CA/LC_MESSAGES/airtime.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: Airtime 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-15 10:36-0500\n" -"PO-Revision-Date: 2013-01-04 17:50+0100\n" -"Last-Translator: Daniel James \n" +"PO-Revision-Date: 2013-02-07 17:10-0500\n" +"Last-Translator: Denise Rigato \n" "Language-Team: Canadian Localization \n" "Language: en_CA\n" "MIME-Version: 1.0\n" @@ -2139,7 +2139,7 @@ msgstr "60m" #: airtime_mvc/application/controllers/LocaleController.php:207 msgid "Retreiving data from the server..." -msgstr "Retreiving data from the server..." +msgstr "Retrieving data from the server..." #: airtime_mvc/application/controllers/LocaleController.php:213 msgid "This show has no scheduled content." @@ -3511,7 +3511,7 @@ msgstr "Limit to " #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 msgid "Please selection an option" -msgstr "Please selection an option" +msgstr "Please select an option" #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 msgid "No Records" From 2315e3473ddc6754758e9ab0c5326e6f4b6e8654 Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 7 Feb 2013 17:33:11 -0500 Subject: [PATCH 086/208] CC-4935: Smart Block -> Error when saving sometimes -fixed --- airtime_mvc/public/js/airtime/library/spl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 4f61517e5..24faa2e87 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -734,7 +734,7 @@ var AIRTIME = (function(AIRTIME){ } setModified(json.modified); if (obj_type == "block") { - callback(data, "save"); + callback(json, "save"); } else { $('.success').text($.i18n._('Playlist saved')); $('.success').show(); From 8bdf50c0e8df94e8aeda980be985f46adbcc3210 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 10:14:22 +0000 Subject: [PATCH 087/208] Fixed translation of 'Settings' --- .../locale/el_GR/LC_MESSAGES/airtime.mo | Bin 76396 -> 75966 bytes .../locale/el_GR/LC_MESSAGES/airtime.po | 10 ++++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo index f67fa635274e99dfe92c12e8f8c5e8fb07cc47b8..426a9966c44b4b146efabc5a8eb36a5b18cb5f30 100644 GIT binary patch delta 15445 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 delta 15857 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 diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po index ffc19788c..074d2170e 100644 --- a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: Airtime 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-07 16:22-0500\n" -"PO-Revision-Date: 2013-02-07 16:21-0500\n" -"Last-Translator: Denise Rigato \n" +"PO-Revision-Date: 2013-02-08 10:11+0100\n" +"Last-Translator: Daniel James \n" "Language-Team: Sourcefabric \n" "Language: el_GR\n" "MIME-Version: 1.0\n" @@ -3375,7 +3375,7 @@ msgstr "Εμφάνιση Πηγής URL Σύνδεσης:" #: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 #, php-format msgid "%s's Settings" -msgstr "" +msgstr "%s's Ρυθμίσεις" #: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 msgid "Repeat Days:" @@ -3527,12 +3527,10 @@ msgstr "Κανένα Αρχείο" #~ msgid "Timezone" #~ msgstr "Χρονική ζώνη" - #~ msgid "%sAirtime%s %s, , the open radio software for scheduling and remote station management. %s" #~ msgstr "%sΤο Airtime%s %s, το ανοικτού κώδικα λογισμικό για τον προγραμματισμό και την διαχείριση ραδιοφωνικών σταθμών εξ αποστάσεως. %s" - #~ msgid "File" #~ msgstr "Αρχείο" - #~ msgid "Path:" #~ msgstr "Διαδρομή" + From 2c9d208db857acc1b174e47ab44ec07f614088c3 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 10:17:15 +0000 Subject: [PATCH 088/208] Added bug report address to Greek translation --- .../locale/el_GR/LC_MESSAGES/airtime.mo | Bin 75966 -> 75998 bytes .../locale/el_GR/LC_MESSAGES/airtime.po | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo index 426a9966c44b4b146efabc5a8eb36a5b18cb5f30..891e1ca04524535b6d730f0821a63b17ab72529d 100644 GIT binary patch delta 5823 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 KvTaFP@&5sSsmUb( diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po index 074d2170e..0469d64a5 100644 --- a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po @@ -1,16 +1,16 @@ -# LANGUAGE (xx_XX) translation for Airtime. -# Copyright (C) 2012 Sourcefabric +# GREEK (el_GR) translation for Airtime. +# Copyright (C) 2013 Sourcefabric # This file is distributed under the same license as the Airtime package. -# Sourcefabric , 2012. +# Sourcefabric , 2013. # msgid "" msgstr "" "Project-Id-Version: Airtime 2.3\n" -"Report-Msgid-Bugs-To: \n" +"Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-07 16:22-0500\n" -"PO-Revision-Date: 2013-02-08 10:11+0100\n" +"PO-Revision-Date: 2013-02-08 10:16+0100\n" "Last-Translator: Daniel James \n" -"Language-Team: Sourcefabric \n" +"Language-Team: Greek Localization \n" "Language: el_GR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" From 8232244faa5137e3ca86a3c9eeb5b5c6b555e819 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 10:31:20 +0000 Subject: [PATCH 089/208] Improved Greek localization with extra strings, thanks Kat! --- .../locale/el_GR/LC_MESSAGES/airtime.mo | Bin 75998 -> 82796 bytes .../locale/el_GR/LC_MESSAGES/airtime.po | 134 +++++++++--------- 2 files changed, 67 insertions(+), 67 deletions(-) diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo index 891e1ca04524535b6d730f0821a63b17ab72529d..e5c4489f2dedfd12ea25091489ba746f76ca7488 100644 GIT binary patch delta 21431 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%0DLgj?}0``~k=TM++> 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 O<=eQuSUulIzW)bGU-%yY delta 15984 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 YGc4^>!`+;kt)@FOAa!+Z_Y3!b0NRqvxc~qF diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po index 0469d64a5..60a355d52 100644 --- a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Airtime 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-07 16:22-0500\n" -"PO-Revision-Date: 2013-02-08 10:16+0100\n" +"PO-Revision-Date: 2013-02-08 10:29+0100\n" "Last-Translator: Daniel James \n" "Language-Team: Greek Localization \n" "Language: el_GR\n" @@ -717,7 +717,7 @@ msgstr "'%value%' δεν είναι μεταξύ '%min%' και '%max%', συν #: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 msgid "Passwords do not match" -msgstr "" +msgstr "Οι κωδικοί πρόσβασης δεν συμπίπτουν" #: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 @@ -846,7 +846,7 @@ msgstr "Κωδικός πρόσβασης:" #: airtime_mvc/application/forms/AddUser.php:40 #: airtime_mvc/application/forms/EditUser.php:50 msgid "Verify Password:" -msgstr "" +msgstr "Επαλήθευση κωδικού πρόσβασης" #: airtime_mvc/application/forms/AddUser.php:48 #: airtime_mvc/application/forms/EditUser.php:59 @@ -976,11 +976,11 @@ msgstr "Όνομα Χρήστη" #: airtime_mvc/application/forms/StreamSettingSubForm.php:195 msgid "Admin User" -msgstr "" +msgstr "Διαχειριστής Χρήστης" #: airtime_mvc/application/forms/StreamSettingSubForm.php:207 msgid "Admin Password" -msgstr "" +msgstr "Κωδικός πρόσβασης Διαχειριστή" #: airtime_mvc/application/forms/StreamSettingSubForm.php:218 #: airtime_mvc/application/controllers/LocaleController.php:169 @@ -1127,15 +1127,15 @@ msgstr "Όνομα Σταθμού - Όνομα Εκπομπής" #: airtime_mvc/application/forms/StreamSetting.php:63 msgid "Off Air Metadata" -msgstr "" +msgstr "Μεταδεδομένα Off Air" #: airtime_mvc/application/forms/StreamSetting.php:69 msgid "Enable Replay Gain" -msgstr "" +msgstr "Ενεργοποίηση Επανάληψη Κέρδους" #: airtime_mvc/application/forms/StreamSetting.php:75 msgid "Replay Gain Modifier" -msgstr "" +msgstr "Τροποποιητής Επανάληψης Κέρδους" #: airtime_mvc/application/forms/PasswordRestore.php:14 msgid "E-mail" @@ -1435,7 +1435,7 @@ msgstr "Όλες οι Εκπομπές μου:" #: airtime_mvc/application/forms/EditUser.php:118 msgid "Timezone:" -msgstr "" +msgstr "Ζώνη Ώρας" #: airtime_mvc/application/forms/AddShowLiveStream.php:10 msgid "Use Airtime Authentication:" @@ -1484,11 +1484,11 @@ msgstr "Ενεργοποιημένο" #: airtime_mvc/application/forms/GeneralPreferences.php:61 msgid "Default Interface Language" -msgstr "" +msgstr "Προεπιλογή Γλώσσας Interface" #: airtime_mvc/application/forms/GeneralPreferences.php:69 msgid "Default Interface Timezone" -msgstr "" +msgstr "Προεπιλογή Ζώνης Ώρας Interface" #: airtime_mvc/application/forms/GeneralPreferences.php:77 msgid "Week Starts On" @@ -1722,7 +1722,7 @@ msgstr "Ο χρήστης ενημερώθηκε με επιτυχία!" #: airtime_mvc/application/controllers/UserController.php:164 msgid "Settings updated successfully!" -msgstr "" +msgstr "Οι ρυθμίσεις ενημερώθηκαν επιτυχώς!" #: airtime_mvc/application/controllers/LocaleController.php:32 msgid "Recording:" @@ -1940,7 +1940,7 @@ msgstr "Οι λίστες αναπαραγωγής αποθηκεύτηκαν" #: airtime_mvc/application/controllers/LocaleController.php:117 msgid "Playlist shuffled" -msgstr "" +msgstr "Ανασχηματισμός λίστας αναπαραγωγής" #: airtime_mvc/application/controllers/LocaleController.php:119 msgid "Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't 'watched' anymore." @@ -2003,12 +2003,12 @@ msgstr "Παίχτηκε" #: airtime_mvc/application/controllers/LocaleController.php:156 #, php-format msgid "Copied %s row%s to the clipboard" -msgstr "" +msgstr "Αντιγράφηκαν %s σειρές%s στο πρόχειρο" #: airtime_mvc/application/controllers/LocaleController.php:157 #, php-format msgid "%sPrint view%sPlease use your browser's print function to print this table. Press escape when finished." -msgstr "" +msgstr "%sΕκτύπωση προβολής%sΠαρακαλούμε να χρησιμοποιείσετε την λειτουργία εκτύπωσης του περιηγητή σας για να τυπώσετε τον πίνακα. Όταν τελειώσετε πατήστε escape" #: airtime_mvc/application/controllers/LocaleController.php:159 msgid "Choose Storage Folder" @@ -2147,7 +2147,7 @@ msgstr "Αυτή η εκπομπή δεν έχει προγραμματισμέ #: airtime_mvc/application/controllers/LocaleController.php:210 msgid "This show is not completely filled with content." -msgstr "" +msgstr "Η εκπομπή δεν εντελώς γεμάτη με περιεχόμενο " #: airtime_mvc/application/controllers/LocaleController.php:214 msgid "January" @@ -2389,79 +2389,79 @@ msgstr "Άνοιγμα" #: airtime_mvc/application/controllers/LocaleController.php:313 msgid "Guests can do the following:" -msgstr "" +msgstr "Οι επισκέπτες μπορούν να κάνουν τα παρακάτω" #: airtime_mvc/application/controllers/LocaleController.php:314 msgid "View schedule" -msgstr "" +msgstr "Προβολή Προγράμματος" #: airtime_mvc/application/controllers/LocaleController.php:315 msgid "View show content" -msgstr "" +msgstr "Προβολή περιεχομένου εκπομπής" #: airtime_mvc/application/controllers/LocaleController.php:316 msgid "DJs can do the following:" -msgstr "" +msgstr "Οι DJ μπορούν να κάνουν τα παρακάτω" #: airtime_mvc/application/controllers/LocaleController.php:317 msgid "Manage assigned show content" -msgstr "" +msgstr "Διαχείριση ανατεθημένου περιεχομένου εκπομπής" #: airtime_mvc/application/controllers/LocaleController.php:318 msgid "Import media files" -msgstr "" +msgstr "Εισαγωγή αρχείων πολυμέσων" #: airtime_mvc/application/controllers/LocaleController.php:319 msgid "Create playlists, smart blocks, and webstreams" -msgstr "" +msgstr "Δημιουργία λιστών αναπαραγωγής, smart blocks, και webstreams " #: airtime_mvc/application/controllers/LocaleController.php:320 msgid "Manage their own library content" -msgstr "" +msgstr "Διαχείριση δικού τους περιεχομένου βιβλιοθήκης" #: airtime_mvc/application/controllers/LocaleController.php:321 msgid "Progam Managers can do the following:" -msgstr "" +msgstr "Οι Μάνατζερ Προγράμματος μπορούν να κάνουν τα παρακάτω:" #: airtime_mvc/application/controllers/LocaleController.php:322 msgid "View and manage show content" -msgstr "" +msgstr "Προβολή και διαχείριση περιεχομένου εκπομπής" #: airtime_mvc/application/controllers/LocaleController.php:323 msgid "Schedule shows" -msgstr "" +msgstr "Πρόγραμμα εκπομπών" #: airtime_mvc/application/controllers/LocaleController.php:324 msgid "Manage all library content" -msgstr "" +msgstr "Διαχείριση όλου του περιεχομένου βιβλιοθήκης" #: airtime_mvc/application/controllers/LocaleController.php:325 msgid "Admins can do the following:" -msgstr "" +msgstr "ΟΙ Διαχειριστές μπορούν να κάνουν τα παρακάτω:" #: airtime_mvc/application/controllers/LocaleController.php:326 msgid "Manage preferences" -msgstr "" +msgstr "Διαχείριση προτιμήσεων" #: airtime_mvc/application/controllers/LocaleController.php:327 msgid "Manage users" -msgstr "" +msgstr "Διαχείριση Χρηστών" #: airtime_mvc/application/controllers/LocaleController.php:328 msgid "Manage watched folders" -msgstr "" +msgstr "Διαχείριση προβεβλημένων φακέλων " #: airtime_mvc/application/controllers/LocaleController.php:330 msgid "View system status" -msgstr "" +msgstr "Προβολή κατάστασης συστήματος" #: airtime_mvc/application/controllers/LocaleController.php:331 msgid "Access playout history" -msgstr "" +msgstr "Πρόσβαση στην ιστορία playout" #: airtime_mvc/application/controllers/LocaleController.php:332 msgid "View listener stats" -msgstr "" +msgstr "Προβολή στατιστικών των ακροατών" #: airtime_mvc/application/controllers/LocaleController.php:334 msgid "Show / hide columns" @@ -2535,99 +2535,99 @@ msgstr "Ολοκληρώθηκε" #: airtime_mvc/application/controllers/LocaleController.php:357 msgid "Select files" -msgstr "" +msgstr "Επιλογή αρχείων" #: airtime_mvc/application/controllers/LocaleController.php:358 #: airtime_mvc/application/controllers/LocaleController.php:359 msgid "Add files to the upload queue and click the start button." -msgstr "" +msgstr "Προσθέστε αρχεία στην ουρά ανεβάσματος και κάντε κλίκ στο κουμπί έναρξης" #: airtime_mvc/application/controllers/LocaleController.php:362 msgid "Add Files" -msgstr "" +msgstr "Προσθήκη Αρχείων" #: airtime_mvc/application/controllers/LocaleController.php:363 msgid "Stop Upload" -msgstr "" +msgstr "Στάση Ανεβάσματος" #: airtime_mvc/application/controllers/LocaleController.php:364 msgid "Start upload" -msgstr "" +msgstr "Έναρξη ανεβάσματος" #: airtime_mvc/application/controllers/LocaleController.php:365 msgid "Add files" -msgstr "" +msgstr "Προσθήκη αρχείων" #: airtime_mvc/application/controllers/LocaleController.php:366 #, php-format msgid "Uploaded %d/%d files" -msgstr "" +msgstr "Ανέβηκαν %d/%d αρχεία" #: airtime_mvc/application/controllers/LocaleController.php:367 msgid "N/A" -msgstr "" +msgstr "N/A" #: airtime_mvc/application/controllers/LocaleController.php:368 msgid "Drag files here." -msgstr "" +msgstr "Σύρετε αρχεία εδώ." #: airtime_mvc/application/controllers/LocaleController.php:369 msgid "File extension error." -msgstr "" +msgstr "Σφάλμα επέκτασης αρχείου." #: airtime_mvc/application/controllers/LocaleController.php:370 msgid "File size error." -msgstr "" +msgstr "Σφάλμα μεγέθους αρχείου." #: airtime_mvc/application/controllers/LocaleController.php:371 msgid "File count error." -msgstr "" +msgstr "Σφάλμα μέτρησης αρχείων." #: airtime_mvc/application/controllers/LocaleController.php:372 msgid "Init error." -msgstr "" +msgstr "Σφάλμα αρχικοποίησης." #: airtime_mvc/application/controllers/LocaleController.php:373 msgid "HTTP Error." -msgstr "" +msgstr "Σφάλμα HTTP." #: airtime_mvc/application/controllers/LocaleController.php:374 msgid "Security error." -msgstr "" +msgstr "Σφάλμα ασφάλειας." #: airtime_mvc/application/controllers/LocaleController.php:375 msgid "Generic error." -msgstr "" +msgstr "Γενικό σφάλμα." #: airtime_mvc/application/controllers/LocaleController.php:376 msgid "IO error." -msgstr "" +msgstr "Σφάλμα IO" #: airtime_mvc/application/controllers/LocaleController.php:377 #, php-format msgid "File: %s" -msgstr "" +msgstr "Αρχείο: %s" #: airtime_mvc/application/controllers/LocaleController.php:379 #, php-format msgid "%d files queued" -msgstr "" +msgstr "%d αρχεία σε αναμονή" #: airtime_mvc/application/controllers/LocaleController.php:380 msgid "File: %f, size: %s, max file size: %m" -msgstr "" +msgstr "Αρχείο: %f, μέγεθος: %s, μέγιστο μέγεθος αρχείου: %m" #: airtime_mvc/application/controllers/LocaleController.php:381 msgid "Upload URL might be wrong or doesn't exist" -msgstr "" +msgstr "Το URL είτε είναι λάθος ή δεν υφίσταται" #: airtime_mvc/application/controllers/LocaleController.php:382 msgid "Error: File too large: " -msgstr "" +msgstr "Σφάλμα: Πολύ μεγάλο αρχείο: " #: airtime_mvc/application/controllers/LocaleController.php:383 msgid "Error: Invalid file extension: " -msgstr "" +msgstr "Σφάλμα: Μη έγκυρη προέκταση αρχείου: " #: airtime_mvc/application/controllers/ShowbuilderController.php:190 #: airtime_mvc/application/controllers/LibraryController.php:161 @@ -2660,7 +2660,7 @@ msgstr "η εκπομπή δεν υπάρχει" #: airtime_mvc/application/controllers/ListenerstatController.php:56 msgid "Please make sure admin user/password is correct on System->Streams page." -msgstr "" +msgstr "Παρακαλούμε σιγουρευτείτε ότι ο χρήστης/κωδικός πρόσβασης διαχειριστή είναι σωστός στη σελίδα Σύστημα>Streams." #: airtime_mvc/application/controllers/ApiController.php:58 #: airtime_mvc/application/controllers/ApiController.php:85 @@ -2720,7 +2720,7 @@ msgstr "Λήψη" #: airtime_mvc/application/controllers/LibraryController.php:198 msgid "Duplicate Playlist" -msgstr "" +msgstr "Αντιγραφή Λίστας Αναπαραγωγής" #: airtime_mvc/application/controllers/LibraryController.php:213 #: airtime_mvc/application/controllers/LibraryController.php:235 @@ -2761,7 +2761,7 @@ msgstr "Δεν ήταν δυνατή η διαγραφή ορισμένων πρ #: airtime_mvc/application/controllers/LibraryController.php:375 #, php-format msgid "Copy of %s" -msgstr "" +msgstr "Αντιγραφή από %s" #: airtime_mvc/application/controllers/PlaylistController.php:45 #, php-format @@ -2920,7 +2920,7 @@ msgstr "Τύπος Χρήστη" #: airtime_mvc/application/views/scripts/dashboard/about.phtml:5 #, php-format msgid "%sAirtime%s %s, the open radio software for scheduling and remote station management. %s" -msgstr "" +msgstr "%sΤο Airtime%s %s, το ανοικτού κώδικα λογισμικό για προγραμματισμό και διαχείριση ραδιοφωνικών σταθμών εξ αποστάσεως. %s" #: airtime_mvc/application/views/scripts/dashboard/about.phtml:13 #, php-format @@ -2929,7 +2929,7 @@ msgstr "%s Sourcefabric%s o.p.s. Το Airtime διανέμεται υπό %s GNU #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 msgid "Share" -msgstr "" +msgstr "Μοιραστείτε" #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 msgid "Select stream:" @@ -3421,11 +3421,11 @@ msgstr "Επιλογές Smart Block" #: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:39 msgid "or" -msgstr "" +msgstr "ή" #: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:40 msgid "and" -msgstr "" +msgstr "και" #: airtime_mvc/application/views/scripts/form/smart-block-criteria.phtml:63 msgid " to " @@ -3460,7 +3460,7 @@ msgstr "Γενικές ρυθμίσεις" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 msgid "dB" -msgstr "" +msgstr "βΔ" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 msgid "Output Stream Settings" @@ -3483,7 +3483,7 @@ msgstr "Αριθμός ISRC:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:27 msgid "File Path:" -msgstr "" +msgstr "Διαδρομή Αρχείου" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:45 msgid "Web Stream" From 654cc6233f489f83fb0379a78baaf9f48f7fbe81 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 11:05:48 +0000 Subject: [PATCH 090/208] Improved British localization --- .../locale/en_GB/LC_MESSAGES/airtime.mo | Bin 53720 -> 58209 bytes .../locale/en_GB/LC_MESSAGES/airtime.po | 141 +++++++++--------- 2 files changed, 70 insertions(+), 71 deletions(-) diff --git a/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/en_GB/LC_MESSAGES/airtime.mo index 4a115c5a2a6b28d20d9f0786eeb44e4a220729ff..b01f0c3d6f01edca2cb0d224aa7520e7723de308 100644 GIT binary patch literal 58209 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 J{|i?+{tv_2eGvcv delta 16028 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\n" "Language-Team: British Localization \n" "Language: en_GB\n" @@ -716,7 +716,7 @@ msgstr "'%value%' is not between '%min%' and '%max%', inclusively" #: airtime_mvc/application/forms/helpers/ValidationTypes.php:89 msgid "Passwords do not match" -msgstr "" +msgstr "Passwords do not match" #: airtime_mvc/application/forms/AddShowRebroadcastDates.php:15 #: airtime_mvc/application/views/scripts/partialviews/trialBox.phtml:6 @@ -845,7 +845,7 @@ msgstr "Password:" #: airtime_mvc/application/forms/AddUser.php:40 #: airtime_mvc/application/forms/EditUser.php:50 msgid "Verify Password:" -msgstr "" +msgstr "Verify Password:" #: airtime_mvc/application/forms/AddUser.php:48 #: airtime_mvc/application/forms/EditUser.php:59 @@ -974,11 +974,11 @@ msgstr "Username" #: airtime_mvc/application/forms/StreamSettingSubForm.php:195 msgid "Admin User" -msgstr "" +msgstr "Admin User" #: airtime_mvc/application/forms/StreamSettingSubForm.php:207 msgid "Admin Password" -msgstr "" +msgstr "Admin Password" #: airtime_mvc/application/forms/StreamSettingSubForm.php:218 #: airtime_mvc/application/controllers/LocaleController.php:173 @@ -1125,15 +1125,15 @@ msgstr "Station name - Show name" #: airtime_mvc/application/forms/StreamSetting.php:63 msgid "Off Air Metadata" -msgstr "" +msgstr "Off Air Metadata" #: airtime_mvc/application/forms/StreamSetting.php:69 msgid "Enable Replay Gain" -msgstr "" +msgstr "Enable Replay Gain" #: airtime_mvc/application/forms/StreamSetting.php:75 msgid "Replay Gain Modifier" -msgstr "" +msgstr "Replay Gain Modifier" #: airtime_mvc/application/forms/PasswordRestore.php:14 msgid "E-mail" @@ -1435,7 +1435,7 @@ msgstr "All My Shows:" #: airtime_mvc/application/forms/EditUser.php:118 msgid "Timezone:" -msgstr "" +msgstr "Timezone:" #: airtime_mvc/application/forms/AddShowLiveStream.php:10 msgid "Use Airtime Authentication:" @@ -1484,11 +1484,11 @@ msgstr "Enabled" #: airtime_mvc/application/forms/GeneralPreferences.php:56 msgid "Default Interface Language" -msgstr "" +msgstr "Default Interface Language" #: airtime_mvc/application/forms/GeneralPreferences.php:64 msgid "Default Interface Timezone" -msgstr "" +msgstr "Default Interface Timezone" #: airtime_mvc/application/forms/GeneralPreferences.php:72 msgid "Week Starts On" @@ -1722,7 +1722,7 @@ msgstr "User updated successfully!" #: airtime_mvc/application/controllers/UserController.php:164 msgid "Settings updated successfully!" -msgstr "" +msgstr "Settings updated successfully!" #: airtime_mvc/application/controllers/LocaleController.php:36 msgid "Recording:" @@ -1796,7 +1796,7 @@ msgstr "You can only add tracks, smart blocks, and webstreams to playlists." #: airtime_mvc/application/controllers/LocaleController.php:57 msgid "Please select a cursor position on timeline." -msgstr "" +msgstr "Please select a cursor position on timeline." #: airtime_mvc/application/controllers/LocaleController.php:61 #: airtime_mvc/application/controllers/LibraryController.php:190 @@ -1940,7 +1940,7 @@ msgstr "Playlist saved" #: airtime_mvc/application/controllers/LocaleController.php:121 msgid "Playlist shuffled" -msgstr "" +msgstr "Playlist shuffled" #: airtime_mvc/application/controllers/LocaleController.php:123 msgid "Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't 'watched' anymore." @@ -2003,12 +2003,12 @@ msgstr "Played" #: airtime_mvc/application/controllers/LocaleController.php:160 #, php-format msgid "Copied %s row%s to the clipboard" -msgstr "" +msgstr "Copied %s row%s to the clipboard" #: airtime_mvc/application/controllers/LocaleController.php:161 #, php-format msgid "%sPrint view%sPlease use your browser's print function to print this table. Press escape when finished." -msgstr "" +msgstr "%sPrint view%sPlease use your browser's print function to print this table. Press the Escape key when finished." #: airtime_mvc/application/controllers/LocaleController.php:163 msgid "Choose Storage Folder" @@ -2087,7 +2087,7 @@ msgstr "If you change the username or password values for an enabled stream the #: airtime_mvc/application/controllers/LocaleController.php:186 msgid "This is the admin username and password for Icecast/SHOUTcast to get listener statistics." -msgstr "" +msgstr "This is the admin username and password for Icecast/SHOUTcast to get listener statistics." #: airtime_mvc/application/controllers/LocaleController.php:190 msgid "No result found" @@ -2139,7 +2139,7 @@ msgstr "60m" #: airtime_mvc/application/controllers/LocaleController.php:207 msgid "Retreiving data from the server..." -msgstr "Retreiving data from the server..." +msgstr "Retrieving data from the server..." #: airtime_mvc/application/controllers/LocaleController.php:213 msgid "This show has no scheduled content." @@ -2147,7 +2147,7 @@ msgstr "This show has no scheduled content." #: airtime_mvc/application/controllers/LocaleController.php:214 msgid "This show is not completely filled with content." -msgstr "" +msgstr "This show is not completely filled with content." #: airtime_mvc/application/controllers/LocaleController.php:218 msgid "January" @@ -2389,79 +2389,79 @@ msgstr "Open" #: airtime_mvc/application/controllers/LocaleController.php:317 msgid "Guests can do the following:" -msgstr "" +msgstr "Guests can do the following:" #: airtime_mvc/application/controllers/LocaleController.php:318 msgid "View schedule" -msgstr "" +msgstr "View schedule" #: airtime_mvc/application/controllers/LocaleController.php:319 msgid "View show content" -msgstr "" +msgstr "View show content" #: airtime_mvc/application/controllers/LocaleController.php:320 msgid "DJs can do the following:" -msgstr "" +msgstr "DJs can do the following:" #: airtime_mvc/application/controllers/LocaleController.php:321 msgid "Manage assigned show content" -msgstr "" +msgstr "Manage assigned show content" #: airtime_mvc/application/controllers/LocaleController.php:322 msgid "Import media files" -msgstr "" +msgstr "Import media files" #: airtime_mvc/application/controllers/LocaleController.php:323 msgid "Create playlists, smart blocks, and webstreams" -msgstr "" +msgstr "Create playlists, smart blocks, and webstreams" #: airtime_mvc/application/controllers/LocaleController.php:324 msgid "Manage their own library content" -msgstr "" +msgstr "Manage their own library content" #: airtime_mvc/application/controllers/LocaleController.php:325 msgid "Progam Managers can do the following:" -msgstr "" +msgstr "Progam Managers can do the following:" #: airtime_mvc/application/controllers/LocaleController.php:326 msgid "View and manage show content" -msgstr "" +msgstr "View and manage show content" #: airtime_mvc/application/controllers/LocaleController.php:327 msgid "Schedule shows" -msgstr "" +msgstr "Schedule shows" #: airtime_mvc/application/controllers/LocaleController.php:328 msgid "Manage all library content" -msgstr "" +msgstr "Manage all library content" #: airtime_mvc/application/controllers/LocaleController.php:329 msgid "Admins can do the following:" -msgstr "" +msgstr "Admins can do the following:" #: airtime_mvc/application/controllers/LocaleController.php:330 msgid "Manage preferences" -msgstr "" +msgstr "Manage preferences" #: airtime_mvc/application/controllers/LocaleController.php:331 msgid "Manage users" -msgstr "" +msgstr "Manage users" #: airtime_mvc/application/controllers/LocaleController.php:332 msgid "Manage watched folders" -msgstr "" +msgstr "Manage watched folders" #: airtime_mvc/application/controllers/LocaleController.php:334 msgid "View system status" -msgstr "" +msgstr "View system status" #: airtime_mvc/application/controllers/LocaleController.php:335 msgid "Access playout history" -msgstr "" +msgstr "Access playout history" #: airtime_mvc/application/controllers/LocaleController.php:336 msgid "View listener stats" -msgstr "" +msgstr "View listener stats" #: airtime_mvc/application/controllers/LocaleController.php:338 msgid "Show / hide columns" @@ -2535,99 +2535,99 @@ msgstr "Done" #: airtime_mvc/application/controllers/LocaleController.php:361 msgid "Select files" -msgstr "" +msgstr "Select files" #: airtime_mvc/application/controllers/LocaleController.php:362 #: airtime_mvc/application/controllers/LocaleController.php:363 msgid "Add files to the upload queue and click the start button." -msgstr "" +msgstr "Add files to the upload queue and click the start button." #: airtime_mvc/application/controllers/LocaleController.php:366 msgid "Add Files" -msgstr "" +msgstr "Add Files" #: airtime_mvc/application/controllers/LocaleController.php:367 msgid "Stop Upload" -msgstr "" +msgstr "Stop Upload" #: airtime_mvc/application/controllers/LocaleController.php:368 msgid "Start upload" -msgstr "" +msgstr "Start upload" #: airtime_mvc/application/controllers/LocaleController.php:369 msgid "Add files" -msgstr "" +msgstr "Add files" #: airtime_mvc/application/controllers/LocaleController.php:370 #, php-format msgid "Uploaded %d/%d files" -msgstr "" +msgstr "Uploaded %d/%d files" #: airtime_mvc/application/controllers/LocaleController.php:371 msgid "N/A" -msgstr "" +msgstr "N/A" #: airtime_mvc/application/controllers/LocaleController.php:372 msgid "Drag files here." -msgstr "" +msgstr "Drag files here." #: airtime_mvc/application/controllers/LocaleController.php:373 msgid "File extension error." -msgstr "" +msgstr "File extension error." #: airtime_mvc/application/controllers/LocaleController.php:374 msgid "File size error." -msgstr "" +msgstr "File size error." #: airtime_mvc/application/controllers/LocaleController.php:375 msgid "File count error." -msgstr "" +msgstr "File count error." #: airtime_mvc/application/controllers/LocaleController.php:376 msgid "Init error." -msgstr "" +msgstr "Init error." #: airtime_mvc/application/controllers/LocaleController.php:377 msgid "HTTP Error." -msgstr "" +msgstr "HTTP Error." #: airtime_mvc/application/controllers/LocaleController.php:378 msgid "Security error." -msgstr "" +msgstr "Security error." #: airtime_mvc/application/controllers/LocaleController.php:379 msgid "Generic error." -msgstr "" +msgstr "Generic error." #: airtime_mvc/application/controllers/LocaleController.php:380 msgid "IO error." -msgstr "" +msgstr "IO error." #: airtime_mvc/application/controllers/LocaleController.php:381 #, php-format msgid "File: %s" -msgstr "" +msgstr "File: %s" #: airtime_mvc/application/controllers/LocaleController.php:383 #, php-format msgid "%d files queued" -msgstr "" +msgstr "%d files queued" #: airtime_mvc/application/controllers/LocaleController.php:384 msgid "File: %f, size: %s, max file size: %m" -msgstr "" +msgstr "File: %f, size: %s, max file size: %m" #: airtime_mvc/application/controllers/LocaleController.php:385 msgid "Upload URL might be wrong or doesn't exist" -msgstr "" +msgstr "Upload URL might be wrong or doesn't exist" #: airtime_mvc/application/controllers/LocaleController.php:386 msgid "Error: File too large: " -msgstr "" +msgstr "Error: File too large: " #: airtime_mvc/application/controllers/LocaleController.php:387 msgid "Error: Invalid file extension: " -msgstr "" +msgstr "Error: Invalid file extension: " #: airtime_mvc/application/controllers/ShowbuilderController.php:190 #: airtime_mvc/application/controllers/LibraryController.php:161 @@ -2660,7 +2660,7 @@ msgstr "show does not exist" #: airtime_mvc/application/controllers/ListenerstatController.php:56 msgid "Please make sure admin user/password is correct on System->Streams page." -msgstr "" +msgstr "Please make sure admin user/password is correct on System->Streams page." #: airtime_mvc/application/controllers/ApiController.php:57 #: airtime_mvc/application/controllers/ApiController.php:84 @@ -2720,7 +2720,7 @@ msgstr "Download" #: airtime_mvc/application/controllers/LibraryController.php:198 msgid "Duplicate Playlist" -msgstr "" +msgstr "Duplicate Playlist" #: airtime_mvc/application/controllers/LibraryController.php:213 #: airtime_mvc/application/controllers/LibraryController.php:235 @@ -2761,7 +2761,7 @@ msgstr "Could not delete some scheduled files." #: airtime_mvc/application/controllers/LibraryController.php:375 #, php-format msgid "Copy of %s" -msgstr "" +msgstr "Copy of %s" #: airtime_mvc/application/controllers/PlaylistController.php:45 #, php-format @@ -2929,7 +2929,7 @@ msgstr "%sSourcefabric%s o.p.s. Airtime is distributed under the %sGNU GPL v.3%s #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:3 msgid "Share" -msgstr "" +msgstr "Share" #: airtime_mvc/application/views/scripts/dashboard/stream-player.phtml:64 msgid "Select stream:" @@ -3375,7 +3375,7 @@ msgstr "Show Source Connection URL:" #: airtime_mvc/application/views/scripts/form/edit-user.phtml:1 #, php-format msgid "%s's Settings" -msgstr "" +msgstr "%s's Settings" #: airtime_mvc/application/views/scripts/form/add-show-rebroadcast.phtml:4 msgid "Repeat Days:" @@ -3452,7 +3452,7 @@ msgstr "Global Settings" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:88 msgid "dB" -msgstr "" +msgstr "dB" #: airtime_mvc/application/views/scripts/preference/stream-setting.phtml:107 msgid "Output Stream Settings" @@ -3475,7 +3475,7 @@ msgstr "Isrc Number:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:21 msgid "File Path:" -msgstr "" +msgstr "File Path:" #: airtime_mvc/application/views/scripts/library/get-file-metadata.ajax.phtml:39 msgid "Web Stream" @@ -3511,7 +3511,7 @@ msgstr "Limit to " #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 msgid "Please selection an option" -msgstr "Please selection an option" +msgstr "Please select an option" #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 msgid "No Records" @@ -3519,9 +3519,8 @@ msgstr "No Records" #~ msgid "Timezone" #~ msgstr "Timezone" - #~ msgid "File" #~ msgstr "File" - #~ msgid "Path:" #~ msgstr "Path:" + From 192db754eaf6e54988ce93323096bd52db8edcaf Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 11:11:20 +0000 Subject: [PATCH 091/208] Fixed typos in US localization --- .../locale/en_US/LC_MESSAGES/airtime.mo | Bin 53716 -> 53601 bytes .../locale/en_US/LC_MESSAGES/airtime.po | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.mo index 0994f31144e2acea04c0cd3035596ca810ff93a5..17eea0dd17318c5981bf0585ae1a0d15ccf94a77 100644 GIT binary patch delta 15376 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 delta 15464 zcmYk@2YgT0|Htu55{V=d84_Y8W+Xx)#3*9#QX{2G5rWXzwe@RP)F`oP6SZqaZGzg= zY-@C&RI4p5T2!n4uXoPz|GAIH@jRb%&prFzq({bFf97bXVERF54IgY^=coKQk3902cl`sa2U|00TF*crRU4tDQ z$K@O$(}W5|YdcOH_QVRf0L$ZX>z}9&BN82_I;LS+T!R|GIrPRNbxg-)u_|!`)Br|f z9!y6s{0QCX-}yKv<2Xx@MQ~Q28d`-cgtHl=F$;D7I;#8!%)&cZ92eGgoYlAoJ+NCn zQ?C~W6ZgfuI2PZ>shE%coxJrO#~(v65X)jH*1#}qgK8iRRc}1z!`Z0%%TXO>p`P1~ zQ}6<6OFA|%&ke-w#N$x)6B@GqT9TS%+^{~X;l`+jlCUeLp$2dk)!;1*z-OrEd>fet z^J6M;2v)(dsI#yGPf+zw zqC0+p8sJ6Liu{B+tk0|^Ibh?6Tc8)7MYVsq3G1&t`H6!1_yE;#m8Pa*bu3F<57luW z)C$Z%R?+zc3*j%QGveON9O78i;Y~(OXeI{XJk&tf+c?`rrWgg6P_N5FRD=G_&1+T; zIZsY2)FGRN5x5oK!AqDIEAa~OIyp759nQr=xfmGw5^rp22EH2$5T8eFwd)QU4>Et^ zMSO;u*%z%$dEgsnB?_WCim*nbH*pnIgLP0ddlNOlzL+1UTbH7q-;8>0HbacMQkzr~zi8+F6fUxy`8O z_oG($xGle(#QOK3;2{MXK>IgM1IehBNJXv8aMTQ^Vrk4o4df(hpchcjUqdbJkEla< z7xmiuv^OhJ5w$WkF&LY)XZ6q|b03>hN_`y|$>c)Dbm+zNiVgMv)02v(nz!je77T7Ql0;8UBb~`k>&i#E&{U zPBXmzwi#$tCsVJJwHxa2^~6vdjPX4GA?m}F-8tt&<#NV#aU9xozDA8awyRm1PN)I& zMGbHqYH1f>S=?p4frW^@x|uyKfmMmCq6W|(wY8&BD>u=`Q*vS#zX*`g4Ci13ew=fI zkB%+RMy<#Z)KZ?poI{5?BiB%;{I-oBq7K==Hug$3&jn&R$_rr$tdE}b@AOm#`=Mqw z6vJ^Ts-tXFM<-BcXbDqL z4ZBbSnv7b?8K@OHhHCIM>h-ydTH@c(4gW^9_Z)S|+p$B^O zG%M`mA`?MD5UQgpsQ0-J>V0iz;}lc}BTyZtqu!2r7>^rKdwc^mu!pFDJVwp<1!|>y zdYP5ZlZIk1C^P-V#e=TU5g%Py-x~no$PoHT@XX;TBZAefIuQ z)ZsjhYX6$K?{a=2qZvFxz29Yfo73JH)o^RfgYB*FpjIdab#_Le1~LuR!4lNlvJutM z4ot*j$Rap-Qq9(;VVHjY&m*ITwxTBh-#STIyd=GjsZw)9;I_AAxzX9O_#i zkJ|f|r~!1sGWag)^k<+ZwiQF^-`PnQ?BDJy9z# z5VbPnQ60}ib+j6_f*Vm2%|g{XhAxft8X3*>XVeztde_7esDae5HbyVvcIbnhQKvc; zd*C=MjCW95kvq){EC5Rom#{WOoweR+tiKxSOMy=BF!aTA)ajgu>Tn@yOENJZu0?gQ z!^THZGrVNWuc6wxi&~+_s1?c8&paQ1ii`JS{WXA!6sW=1P)pei+u+-%z2Afy&=J%Y zoIrJW5w!wWQD@-+=EJ{H^*#HW=Y3Es9D$lh4O^b*BBQ-XLX9{THR7SDfsI2Qs_Ceu zU5o1Q2x_3;qB^{Xs`n2jV8{To_pf6laa(MTqfrArf%(yOo{UCz6E&k}sE%_DGy}_r z8dwCXp$Zs)?NL7iQc)}PKC0dvRKqJ!6WeAzhUJN`p(f}#C}+j_{*%$nBCsOX!n&A- z8qj9cDc)h@eHcjmIqG%#8a0qVQ7e&muo*}w1`wA*O)$Zhw?ehs3ElPncPFEtPQ6h} zGYQqubktHWLVwIc&G2*73Z1v{x2Wgtq6Yc^b-JIR&cHKNhyS5g#$$*XPzZ+U{jW$y z6`El%wnlZ-6V=dQJc~n--EkVe=Q!(d2R6a3L(Oka>oAe{E3AnHhM6sEgIfAgHeQSR z&RjrO2${!Zv<3Nwo8Mx~VGH6W7>#pLdw&SS@fVCopAlw-5>fTqV;oMvruZ2q;|nZ< z$s^6L{y?+3; zaz|0^on5v;G>1_h|Fets?6EOhWBdNA$zKSOiC+4%K{AhwCsHcVZx( zL7kQBs5A1rz5fqtV)@6Iy)T5CNF^7U!epvr7$%_}9Dw@Jj7GgKld&MqLe*Q3YVar) z$Fr#V_faeL6!lvEhnisU`(~@Eqxx%&8n7#kjAl9(wPdqU9nL`wWEpDdHlRAp!eY1& zwG!W;p1+4$>iKpYUmS8z#XQ7a}PD6ho}yp z;s@wG)|~3u7(<+mk$4ZwV#ql2L#HXa|C zo=I4sJODVHFhBGhfVM}>I0I0s`(>zJ=CXlpmixWCq9kUG4w-o=vt!&Fao{t z7^=fF7YgK10>_ z&QOE=Dvu?x6{`MV)Zrb5TA|SxfU_`C?|-H;cn0|vIe(${e%Kt-!C2Ime1!FJA*$i; zQT2X6ec66RbsRL;tUy(4K->}wVFv1qe2Q^+6X6l#&#Q?Y@f{qEn!q=xx9LZ0hqV{5{)c#fGZvVoPFiS2o{R;k zFaovLGf{iD1TSJHYGy+hnex4;l{kdz=#=$K)LZgBs=d3YiM>D#Fjzl)@{>teY;25b zpabf`WGsVeSOn)-x1v7DXHgyhhI{d^m-m;LKT@B?D9T@8EsR=fen#}hNaAHKGWxWh zKs9t8b-1qD_=dfI7d5a4SOovEnpR60=cDm5DlJyHNw%k2fn!zyG%-qowPBYM>`-i3iy7>DYsK5o!R=O4EQ3Y9#_uD-(g5VLa-sXn`8YAk;ud zqMo0CTG<&G;UY7ejNaSrsFk>a+M6FyOZWgalRTNG!7x;VB~Sy7Mm1aowbXUc4SS*L z^+m1V5Y$SHz~Z<7T`Jf`CJZm5UbBa&y?u(Bq1P(YL8!HaH3sz|sfLxY59Y>Y=!Pp% zOT8L3flpBbI)wTVom$2ItHZ~(;=icFBBemAW$O!_<47`BFt~Fn^?Wp+aT?1B^l~ZCxyj-K^=TFXmR%mY&9{c*8};mrTJ=&EA$qEnSR_<7`|VHS$^* zf%R;84_n?FJt$8@E%{*d!jY&mG6D19bQ>>1A7a-hwqPsj!M#`x4`T`Z4RwnBHyJ}w zGb@ha*cjDOZ&XJEQHOC9s=djmw_>_=HTn@}BNK8tXUS+Jmr$?KbsIlGHS`=cGq25N z3H?wFN1_H+5w(<6Q7hCR)!q=)QjbNg@LbF}l&JPrqd)yS8_DFOU?1weKZQl{C)A#K zY%w3C;;4F+&>!od8hpc+w?hpq88whp8}~!K74M;*AC7u%vhLHrGnI@Un1veIJk$&p zV-&7Mb$AKYz%2~N2N;QgTg^(nhH9q~s-5Pjj#{HuAPLn@GHS~PVb0(GM%fDKsJCDq zs)0?YCEkuYbo)?S@;&N(zKi+sxsCm{nGQ;zI;@0xJrgk=lQ00&Q3G4FjrG?^mQkP? zuSG4@cGObtv=tAa26EWmKZTmf7pN`z4mI;9SQ`IDwOb;~3@{osp_-`Iv>vLzx3XA& zRZOuJ`k^235L5>fQ1>%19v7qD@AIhB{s*ezXQ%<|H&^M2LFk8pSOT?DRZ#6WLOq}4 zBBPGFU?TR%p12t!G2}DzX--5n)Dg83X{Z^$hkCt6VgbxR&1@Y8<7cS)r%)YUM1AVN zMV%$r6EYfr#}4zUEr2@xHBmF`h&mHpQA<4>OW|zP9`8hTbi{fU)zN(n!KbJ*TekdX)K>h5nt33<>T1BnQ3H#@FigP0 z*c#Pg8fu`EP#w-g)mw!Ln7xuV(nUM}eH827-u&JmSWuiJ>j~dtx z)WA-m+PRF{DrdhroPnqbmPOU8g=)9ie%4!u=&lYH6~I%25aj5-%mz+_6)W3B|kUu z8>kP>2-JsUDQXKo!(w;=Ti_oUjkS)L=Tb48cs9mk7HWllLe+bLaTtA6f24Nt7YQ=S z6s*BA=zYxmIv$6mh?8tQ65WWGqTctFsDW*;@nO``p2j?Q0SDm~)Rr_qZnmrg>V8km zP5(|B88tirJ#h$XgrjZwCe%Q-VQIXK?)V(FRk=@?LmGrSBPCF0DiL)?TBEkC3+hk~ zL7kNk(4{?`Z!2V?7x6CC-XB7Z^crgEZ=%k^bJTMMPnr)+Db(9i0rgyURJ}Ing=ttE zhhkowhgzxSCs}{Jm#Znz4ELe->L#kgzfmJDaLUXy5_1z*M|D^eHIT;WiEU9GzKuE~ zJy0t#0ku+dQ7gR~^WyqbtiRsx?G)(!{~UYaWz-TUo;Ef>J=hf0(Cer#*gN+AT-1yf zqB>lTAK*6Bp{{Yp{E@mBMiS4(vUtEnrUaQgSO)WcVQ$2tDt5s7IL^jLt@kmS@=)G6 zo$~tDVW()YHFv6SgLOxeq;FJ+4f2HJulSk%_@@FSBiV_K#DjPfMZ=~!%^ zDUZ!^vl}{6d2OQutUbBeos>eFP5O;G-dGi1UJuEXqU;uFB}p&WLVI%#v98HDl~kL2 z1N0<~B+baV%YUrvG)y6grm!q&JZS(akb&gIsw7>zi8VGIqxNL#lA_4h=Kdhvu-5{c zUuvK8ApVkjdZ8Cl_BLq|`Gb`2QJsu{ib1Y7iLMb;prj0WcTyALmzQ4mrZzaqy=UZ~ z*m#Uu;Yy*rH0h=Zo!;b&kS3EpqfQ@E9QlU!{(j;b#9S_C3IEnKfpa~ljA>EfYw|yl z0?DW0a?)wi5mGp1Bd`(AjU~T|yk4fZww~Nya_Rd%2H*@DZ+(gn9nz14_)ODQF z-$->x$Ee+qbbvI6l%KLJ(jD`F^EdgklE!Fmu#G4mLB6vxT-~T#l%y*W%X05c@?Y7qAILW#og==FKVTu!R`Q)O z7ikjd<+ab|w__tx;aqPsbM8(gh(Uh3DMQ&(T&9Y2tm|L$JunGRQC6JPCFhR$ zr<$#IfUrwOK&2qp9$T`OC&s-}Q`y%kJ7e!F-b<`jH@}HA* zmBWd+9>>_StF(EP{7@5{^;PBJ+|X47=aJfy{7Jb<`zddebC#3)k(T)*vciipG?yAsr3@~ zIuK7Ken009KT9YZN@_{EOVZ_O>+dB_CVfE~McF9s_0jzQBUL8pT4pQvvkyPS+oWvD z(@8T({Y=%Ie>-x|o!rm(C#ewm8>DUIUtV*_+_P~(Y+>`SQy$lzU@n={IGV<%kO~v~ zpsx9pUnE^6-vrY#T2~G&^d-3%YMjMqq<3uXk2A(q4swMP^{2ENN!LE&_izM0vSowG zZ>Ow;jT;cRC*DHpO<8?nT@|n-DV_XE(qdcA4{v8R`F1vLW95Yjb4J>LIywJQa~7x5 z=+7B3RYE%tB)5qaORc7OLe;o}h(99jpiEZ?`FF@)Cv_n|&X(^b|LT=Y@H_VwkXB}_ zs1ogJN{xd=Nw3s=leiT%*Q0*@&{d23k;L~&8%Xtt^-J1&LjkeNU#P1#tyLdvIh ziQj;?Y#(c|Cn?+fp^85>b5mDuQVVX(!U8*HL~5huJbe?*B@D0;b>t)b*Iee}=i76Skn4^)=j; zQ-vL}Wm{-;J83tu3rFEL>Ud#SY)pzHKN)v$KN_3hTG9y0E0S_4ru+!`|6RQCM{U7} zR9HcNCg}t6&u#gq)P9Xv*FU5?l&`Y!AmUxbZERiDnMR6KhHId$_apaf5!cNrW z{=fR-%%)Ov96$=@#s+Lo*+xNbV#*$~uy| zQGSzHS2cqZORWB#?%Z5K>PYHO`kWiTkou9YZy!><%cNA|s+9jpz6beDE^+Nq#Eo`j-49^vH?$ z3|fP6BK0Fl6-hU!_wxFHOl#t(jGNViT*Jtoq!8*B#m$tZ zkzB;XZT(`_(cJGz`kVBEbeQsH`0CYzvXd0}>lc^t_Rg;~c8WCDHuMeolBAc{`?fp} zW!)+K5WOh7MSd0@AYMqCODaTskMiQA?}(2OuO?p!b-keMHlEiHR$V`mmXQvU{@`W@ zTX72cdX(u3Ag^m4_x`bY#Zkm3i5uey(oD)$+xy|Fz}1WLE4Hi{aXR@Yq+NPx%jHzz zG?3TTfg7n<(8dwO`^kT%o7k0D*VlLsKgH#gZ^19HioL&%dnHwos}$wmVjui~`{hxW zM;ZRf&id=M^@Xz*wx5vSt=o{^Sz*182j)pj8QH&IO4j!y>-ZGx-oM|FZrz8}8QlN9 zLETe&c1s?V+Py;mLA^4HO%AP6DJCv1rc$-=xP%(9u`#h#Vq?AEXcf~YWoYW))c*Zq z8gv_yQX{-lY+QUyY+OuiN9y;kym>R^Ud0ny)n=Ky6xbWwfW>W&;J7+ CxHzo< diff --git a/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.po b/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.po index 3c2f21ecb..c61c27a9d 100644 --- a/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.po +++ b/airtime_mvc/locale/en_US/LC_MESSAGES/airtime.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Airtime 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-01-15 10:36-0500\n" -"PO-Revision-Date: 2013-01-04 17:48+0100\n" +"PO-Revision-Date: 2013-02-08 11:10+0100\n" "Last-Translator: Daniel James \n" "Language-Team: United States Localization \n" "Language: en_US\n" @@ -2139,7 +2139,7 @@ msgstr "60m" #: airtime_mvc/application/controllers/LocaleController.php:207 msgid "Retreiving data from the server..." -msgstr "Retreiving data from the server..." +msgstr "Retrieving data from the server..." #: airtime_mvc/application/controllers/LocaleController.php:213 msgid "This show has no scheduled content." @@ -3511,7 +3511,7 @@ msgstr "Limit to " #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:512 msgid "Please selection an option" -msgstr "Please selection an option" +msgstr "Please select an option" #: airtime_mvc/library/propel/contrib/pear/HTML_QuickForm_Propel/Propel.php:531 msgid "No Records" @@ -3519,9 +3519,8 @@ msgstr "No Records" #~ msgid "Timezone" #~ msgstr "Timezone" - #~ msgid "File" #~ msgstr "File" - #~ msgid "Path:" #~ msgstr "Path:" + From 5f9f342e0746968cb30fffa380e65bd5bd33dd78 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 8 Feb 2013 11:14:19 +0000 Subject: [PATCH 092/208] Added strings to Greek localization --- .../locale/el_GR/LC_MESSAGES/airtime.mo | Bin 82796 -> 83258 bytes .../locale/el_GR/LC_MESSAGES/airtime.po | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo b/airtime_mvc/locale/el_GR/LC_MESSAGES/airtime.mo index e5c4489f2dedfd12ea25091489ba746f76ca7488..98a3e9ae6906ce82467d0647d9cc044af4d1b273 100644 GIT binary patch delta 16086 zcmZYG2Yk)f|Htv~jU9<3NX*D3BsLMmiWRf=-nB<;60^8=jcRdiRkf?OD79*p8WpNk zYu0F0RgI$5`oG@y9FNEE@%VoqztiXWobUOb@A;nby*JnY|JT%XduF8bT+5nvzQYlm z#&PoEr#T%bS6cEhDs`OkH5`Y~nSen!6$|46EQANJ0se*!F{Y;DgyA?WgY!}C9>)Ou z4FmD9Dfc)|f~gRWZ8=d1d!rZY;Y(CsYSnU_k~kcT;~MKZR0rN-MQl*paiVbwszaO5 zAOAyjBwZcHiNgXI;Bf!;WYSa68#CfSOoJn=AD|zx2i4F-TRsbm5zn#b_uKM=m_qrt z7=a_}I?h^Lgz2yvPo)v6jcK^Q(~(Se?1GtanAKyQj(RdLj>FTaA#7OROi6ppO57K7 z;8@I!^HJ??MNQpN)O8n7^>3j^J$gna3%)`bf&@%UTo={DhNz+HiiI)R zx(p`}AH$4TuZg)qGt8v=n1KCI9od4amx5ZH`%w42?IEKP$k>z>juDs(dtfmfhg$t# zVsX5JdZJ9t948wFqdHp9#uYIiaU;}f?~iJ4Iu^oJ$WC=mpcbbmb92YZPo@~YkBv}I zuo1N#cVbHnYQa3Z=oo6Kqgt7c$6_e)dl-maP*XP$&tWp^!Rod)qmG3G=!aS_yY@1Z*0%Ep~BinuRoB<5H*V>t0C%&7f; zm&{%Y9%D(|%wy|it1oE zs{Lq{Yya0G6NU{@L)aaIaENsR>IF0hbKyMHBHfH?Fa@>h_hS}3ff}iwQ6qU5wFuv$ zI+&(|*=+&n(FOU)Uj$T5OY1Pqqj(HOo;$yaRLMWmLzWpgQydwN}z~ zG-k!D#1W{Dlw?M@Xb!8R;s&-tQ&b1qp)Txe%g3Ugd@5>aXQMi}2(|h*q8m@4 zI{X)^-G5Lc{2X*nk?T?HGcGP#yXa_2j>!w%1!! zhYGQk^n@i)?UYANK@HSmu8rFNy**?!L^DxCwg_|JYSjMRhZ^cDs3&}cxtkVyGK7M|GsNJ>MDi0DUnZdd856AhXmK>_sh_OQ<#R5H$svyO<};i)yeY zYM(bit(9h|5$cNS$YARS)~Ogn`5Y{ZN03GBah{V=PhX;j`Yq~7(|0vD%8hyxMxt)e z1a;&0QT2PEI@k}@kuj(d_z1PDQf&E2)OD9oQ~oPv*8YD@Mo*lnn^`0gn9;>674K1A zqB}1a%*Ddc6ZAkWrUj^>UuxqusHyxCHHEt{mUhmd-kfQAnK$Xt-YjU&=kCLUaepV7 zjGpXs)S}vgS__9!9ZN+$$!(0lml%zC5{(I{_d-9^TA6}zxCGUqbEq|Q9W~N-YQA1t=Gh$iHgz>0tRoBL?P!G`A#{E#&4Z|Wh1`FWY zzKp+mc7g)=1M10sK{vYknHv>A-KZG)V>wiV)lu88uC)tlBuAkhXc}h5S*TUN*v1=B z?dVnItj{S<6@pmkWk5M-aA7~mVfo|f;SQtB^hIR_7 z-Px%2=AqhKY|EEpfcF0?GHP%uYEd1;Ks;e8I2Tdd={Bl?SE#A+8)O!%KkA0XQSXg7 z)cc@;jXPox@nGbJ&UnYTFJ?V*E81Gbzv$uRv|9O{fbFqdIUB zwY|=x*2V+WP`*ZWEHc@=^J7uFr9EmyN21owIMh@uz=F6HwH7WUGyd7h+@wJMi@IUJ zFf(*vsKr$RH9{3I8`ekNxD)C|15iVpgnHu9sCu(d9bSQY;w`8tI&R}XJY>`p*KlJN z)STx*jYvUM$4aA~q&D`zPM8M|qo(W{s)P4Yuhuu#{3Fbwtc7Z?E{0$W)O|fY$!IkX zMcsHfYK}apo=-;IV6JtAE#Hb7fp1Vxo@&ouKs9_DHFA$o^$L81_Lvbgnqu-;Z=q&2SmoNw3K&_b$9Q0@f1N#Sv}0D z{ok03p13!vVt>@!O+-D(0@RbNLUnXAYBBCXO~D0J2Ogn1o@un{KyFmM!dM;?P&Xcp zg>gJK;Qr2fGV1wLR0FRuCuaG;JYh8I#wAf5tAy%UV^l*OP;)vNwN@6O9%KWm-XT=G zsi^C(TmL~%aSAewF;7?)H3ii$4>rb9*cWTy64a1iK|RSW)D7<1@@J^k{~EOogU6Z< zl|)TR0;+y9REOUm%lPX_2ip_VQ8!qCnv!LxCtrzqaWiV9PN5q75q)!yT4XO!H^?;3 zTo;Cl3!ttmh3a@5>Qx;-j`7!`s!oA!TnjZ+4Nx8Hh`Di?JwF>Y#0yakZ$ve;8&h!~ z4#t_ZyB=R*JzP89e2IO4)rj*<;Bx^xc*tlD7h!QcWaGcFAaRa~=0#KmH6<-D9}dEX z_%Rm4%cyoTOfnzGr7@Pc8ES;4pz1Bd7(9XX(esi_H!`&+n{TCGU=*?66!RBK5iCvI z2-Tr+wtN+)A^r|C;wcQn^Qi5457XgO)X2WXq3Ac&jNC9}3O&w5GO92e{cs_w;U%a! z`wZ3NwYL0cR7b90A#{Cc)=D&L>WZTlaXf0xG(;`7MAVx305yfvF{}3fXJoW^wxJf= zAuNigQ5Bz~o-lBliNjE9qZp>gTBxaMfLbfPQSD4bjl{>O_s1gCb*oVI_F+cu?_4Ak zfxn_IaHgA~^GEIDVAK;wp>J`b=CmW~#>uEBosHVxn^4>E5bBA~qekGSEq{V)C&LWJ zUqhagjCz;{)$=IKfMqZvRzfYh1XM%aPz@xbrfLdi!s)1?_o6zo5_{uLOpEzu8Y5BH z6`slX`{s-Sy&~gng=Ey?8HKu`2bl$D4r-U=`iPHYtb>Iy8KZF-7Qmwzg@4%cpjoC~ z941iS#m1{=G5%`cGzG=*8EV@U_}JJQ^#+`QI==@s6~ChvU*=Ct$74`a)d$sqai}L; zff|`LsJY*Q8qwpZk^jL%MitMahUjP1h+IWo_%}x4a}3A4v&}ZEgjxg5&>s^~BbJP6 zcrG}>j;bFr$JEP#8o|6+MEk!684XE4)S^ko%s36z@H|uli%}h2Zp+u&cmt|~+i|yx zU%_no2(KBraj5SRE3pnf#T{5>p5uI_{r`we6b0+%GjEuRS`&>Hm?s#H8tPB5rs`n@ z{1eY&xE`Bn|2JJ~E?9{>iC<$F?)a3~ zGM>T?7_!Xl>j9{d7>^pc4^bmE+d3aLg-cK)^O-GQk0XdT+w)PMG5)%+D47vFK`E?8 zyly!Qi1-d>A?~)qdioP#WK0JeFExw%Y(KM7$Vv!2#5wx`mp8SEzkoj`3`Tov;$7;C}oY)zOXX z%&Yq@&Y(kYFdgO7*L%!RezM-U0HZju3@hTdm_Zj{b>j3JOb6 z1vnD>Y~;HG-ay4|Hkk)Hi@N@qhm00i*k;pENz}W$9G1X(SOkZo7T4$42%n(lxaJl! z_jNFixB+T}CgEWG6nkOdR$fdzNHT^HFWhF{2cGq0+!XA_nRp4+aIfuV$ogVKVh{Gj z@3AA6N#VOceuAB`@eY3T$IY08;a~BzI0v)fT`YsoF&2xl(uqAzXEJJFE^6)`qn@P1 zF0(6o;sWA>sCsR_HrsR;2JuAYcbgm3*~2@4^Q};GpK&i+k0&{X`G_YTFgIR-T8tMk zoclZe2hBDrj0b5j2AMwR@gcL?KRayPf+3V2wDCC`-@;myKgAkY=?JSH$6y%lMJ>{E zSQG!lycqv2uXyh7v?rr|+5?Bx|iMxlkil2J>TO)Pr)|!5h0#CIDeR9qvHCf4eLE~q+y!-`g{a-N!}I4juAK-OW+bLkH;|%-&*4?n#DK>b$&Uj{!iE%)BbFxpaW{^`eQ7P!f5UP zO=Q9;xPW@%e=sw?!C~nCi}~_79<^37UNRjG#H_^GQEMd{wXG6xBDTfccp261GgP~- z%jUBs5CgcsQW1lXwVURhUkCLdt_03VLDwzswU)L#>5n*44Ir z17@WBAnM6aU|IaxmIvN9 zKEU^|_TOe7&qj^hN^FO_unmShFxMxdt{;UVIK!5IicN?&qDJVIhm5vK>_amr9Z-v; z3+BQ87>d(S4Sj}La4Xit1E?qSdt~YbVHM&+s5$P2G1wb*!^P;^-q@1Z^Ms6gUjMOq z1+T!i#HUdeqy9193Ex9a$qZBn=3q(u95oVWums-5Sj_swtnxajT`(R)a48nRP3W)v zf0m3^{bf_&ytZb1YPL-_)RW{xeU3+>I#LtWk^0uQ7)0C~)$tM78<%2HO!Lglc}Z+V z+!p(3|8FMarXcsf=9^Dt3?{CInu?~V8+JrB)E%`AKgJxm0#$!E>ikL6Zg`67V7}+( zg;oONh-;x1WzV#kZ0lvo481=$j*aiy{55)fH#meaXXF65|)u9Ab2U?>> zY=S*M)jA7RZyvgF9s0iiA19-^IgK%R9o6%Ym;CmJZd5!IH3dsh+i*8V;bF{ycTqQR zy)tVeJ8F9uLDg%5n(E;=92dP}{JW9~dTkcP5Y(!khw9Kp)X?5VeZlw-OJT(~=JPud z^@8~lb=^bM4P)P$k!y#Gi3j5)^mkmo53}F!JK}aOkIVOeV3gm_<(q<;ScwxSFaxGd z_uBHGP*Zjvb79uBF5e5TIBJ)8u@fHhkf}>1BAv@O zbiGk)U^HqjS78FCqJ}tYdYA8;PEphi+MuRp3~JTSwDA_qL;MXE$4eN28Te}^9Y&)@ z)>DE^MKV=UPd*ZLqZDj}r|^Bu#XpH_h)1Fu_gb%@>c2+KZD=N!?*$Zx6^N7ZC)|X! zaI(M4_sTwD^f+(GXar(2yL`V$et=rNM^W$Slc+g=f*O&60WRNmY=V07)|ef8q8?y0 zY9ziwP1P@`7fwi^>3CVxb*(U$_J0pD`6w8NdXiiFeh;n zEQWpXD9*$3*q*;m^xl|*S}TjJTd+RyF~!{92@Wr&?cpo)lpP)Lr8}s4~)V6+OEuGc0(+xdtPOK)Q3yz|1)#5hgU^MPqm3vZ#(O3UzsWb9a~mtkz(6y2CJmznE|sF7)bT2v!Z+iNT8jrTpOBiB)D=ONa?thvqmqa6kk zcf-;+81-IQ;US|2_M(O?74><32{pubP_Nnts9o_KwWwaBo*-==^F-OOI&mD9#F41; z>rn5Lov5j}j%w!>Zg;W&U3p#30Sb16yPO6TBtY|mNPgm^z{gaRXtwXq)YSWLoW*d8kt^u1p^&U`XjJh!kd1{X3zn25uO zXJT`7MY)`f*b;9kj&?cw@Hf<}bY)?)xSS#`rx|e%)D-N*>i8Npa#f3(5w4Bpwf~!w z(TB}+dtxbSuD(Fty3S72obD@T-rd(wi!`9P8Opq0HCDr`_I!AZSsUe0^=6?)Y%Qw(4%8If zNA0R=Wz1*7aMboqv1W{A|Ho6%Db~CJm!f*Q2i4F`Yo4-ZRkuW~-btvTo`%{rUerEc zj-j{%_2G3A3u4Z4X2jxAQ`HN#I|h_v|7(cGP@o%sj<@kR>PDN&o9(w9b;G@=_roz9 zj(6?(E^($_B5I0;BJ0wbi*1PaRB-wJPRLr(<@=+wKenL!h=)u9nH-hOJGle4CSHc^ z@CnYw#+A)>yN+Fmn^ti-eQ+DXyEzv75qCnp*-oHF7 zi>&DzF^^N0jNX9psBP60b%QRbRo)LZUPCqX5YwP5!E`Vk>ecLzYA4DX zgPQXysE#-A#q7VfWc(=Tjrs!77j@wp48yIcPrvW58-~;}<;kcuGZWRJ6x4M`Q8ze? z`SB{Mqi<2|1=ltY9E~om+Wg%8F^gprc^xs{keF;eE2~c&J*`ow+bzP5w(ONv_1e;c zj(>0!9=7LBlMg39oYaz}$=0!e{7UcimD|F+qEm}F4KAketT|D@$2k7`7bm_nh0ahadP(|5 zRnc3&Omx*vL=#jC`ApDXKfdEQ|NVwEpYm52!MWc^4}53MKb^SJcsG{`^OU2CK73rL z<5%l3s(VQfN$W`kNcy7F9Iumfti&O>Ql#yq^GeiXlbV0BrA`9rbK?G-({YYemV9j+ z_w<$Wu|nL7wBO}D99tl81ljLN+S~`ck76T>bRqiR;}r2$8a{>%QO9`lKYHWK=J7QB zpW5HrvjuEfAL2_SR<`f|p(xd!e-G!HhMauV{e=7-QaXD+4AU~6GdVYfyxwTLZGE8^ zNCnRQh+=>oJ@Qdi;{S6I=yX6ODHcy z;)C6H)W?CO%(nG4lx`)tD9cT~*0`KBm@@tKSCg_)#D8N!R?_lvp*=I%Yu8g&n>zY| zZY}EQO5Iaa4G(*bJTf8dPrG&(h$n@5u&4@cY66eo??`4F$K;%@+C;`j(pUf^*^y* zT;nKfLwZIU$GNj4eI;9J>jg0edZYeCtj~gXM|R@VTyxD9_?i0N$hcgt%ij379Gyf6JD=ufQIYI6s2?HqN~uO@DX7dXDqmNU5ZgBpnAyo&5OG z<31N;u#J|c@C)*hq;{lhq_ZR)-LNDVk0;MZweu1B^Vqj2J5Rnd2BE&C=nH>3yDa)p z{)qawz3~+)x4U9n+ev9&YU$`q3Lu{Ei-@W7j95n=+>UkZb<2qPs^nau>>J!*%Nuxq zs1O~V*P9J7-NK>it1933< zQ1Tr~FNlkh26*RG%;CvJ?lous<;)@c5?@jlNV-aDK&)d2X)y7-qY3$4q$jpu5oRUs zk4Lzs75NLK9`^bRw%$U@Mv@j#UR2*NMsea01;5&gYpr7_Ys|SPn1Q6DE2#zf{oYQM za+LUknk$GV<6V2zYT}F3`T`?K`uebwbDw%wR4SJLCtHg`=RT=5HFRX5d_Vem?^h~S zs12n@h-zTGt#O7LA5eA!>rmF$TcdKGT+#L{C!Ei0K0P(Adxuqy2>FVVD56N6=J?yY zrgCJXQhQMN*~$le!+0cBXF)QJHYuQ%El5Wl76%0YE8#cZ)lZ>@J}c$LfTEu zcgJ+{6Dh0fZB`{)*8rCAV|(p;$X^l8O{(r7-x9|XUm|}3n-Xs(ovPP(XqUcDO zjvnOG&|VSB|0Vu{)X#ggN`z~+_qQq$xz=$08`8U@AN4Mf_IktP<4WY|DHvnR&yd&AoOF$RamwG47JCm>&l9?hl3GODN#B!t zQ0q_cqw3j;Ea%KLO6HN4P^xC`@}JSlaD0IGICtM$qDEw3PNGqy?>X~FN~ao2V#3{B z-Q9-`O&T=RJ$O)3Vshf3fo}enoH(Fo|HOeQcZQA%X_1)ZPVUpw-L=Pn#DVT%Nj--S z>^gvOU=R1;u1QHF1`X}u?#1=>yZ7wgH7U7Ni+W93wN%cXJjmU;9gE9b5`E?50R1u%OX_}3?soew z{eNBZzPXco{y0~9ztjT@tCw>XSeVb{$`zDCv)pcS>h3cWxvTf%2VsHRQup|7yY0;6 OGav6d8|C^m@Bab&dnXzI delta 15797 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\n" "POT-Creation-Date: 2013-02-07 16:22-0500\n" -"PO-Revision-Date: 2013-02-08 10:29+0100\n" +"PO-Revision-Date: 2013-02-08 11:13+0100\n" "Last-Translator: Daniel James \n" "Language-Team: Greek Localization \n" "Language: el_GR\n" @@ -1796,7 +1796,7 @@ msgstr "Μπορείτε να προσθέσετε μόνο κομμάτια, sm #: airtime_mvc/application/controllers/LocaleController.php:53 msgid "Please select a cursor position on timeline." -msgstr "" +msgstr "Παρακαλούμε επιλέξτε μια θέση δρομέα στο χρονοδιάγραμμα." #: airtime_mvc/application/controllers/LocaleController.php:57 #: airtime_mvc/application/controllers/LibraryController.php:190 @@ -2087,7 +2087,7 @@ msgstr "Εάν αλλάξετε το όνομα χρήστη ή τον κωδι #: airtime_mvc/application/controllers/LocaleController.php:182 msgid "This is the admin username and password for Icecast/SHOUTcast to get listener statistics." -msgstr "" +msgstr "Αυτό είναι το Icecast/SHOUTcast όνομα χρήστη και ο κωδικός πρόσβασης διαχειριστή για τις στατιστικές ακροατών." #: airtime_mvc/application/controllers/LocaleController.php:186 msgid "No result found" From e8bde5090959b46d3d9439fef7891a9c90117b30 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 11:17:00 -0500 Subject: [PATCH 093/208] CC-4939: All webstreams in a playlist will have 0 length in Schedule - set cuein and cueout of playlist item if it is a webstream --- airtime_mvc/application/models/Playlist.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 6745eecc6..3230a7fa1 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -402,6 +402,9 @@ SQL; if ($obj instanceof CcFiles && $obj) { $entry["cuein"] = $obj->getDbCuein(); $entry["cueout"] = $obj->getDbCueout(); + } elseif ($obj instanceof CcWebstream && $obj) { + $entry["cuein"] = "00:00:00"; + $entry["cueout"] = $entry["cliplength"]; } $entry["ftype"] = $objType; } From 69054806c475f2b64bb26832070cfc1e7c675ce4 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 12:24:06 -0500 Subject: [PATCH 094/208] CC-4940: Playlist editor in Library ignores cue points set by silence detection when displaying item time - fixed by setting length to cue_out - cue_in when tracks get added to playlist/block --- airtime_mvc/application/models/Block.php | 5 ++++- airtime_mvc/application/models/Playlist.php | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index ffe15ac56..aed47c3a1 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -403,10 +403,13 @@ SQL; $entry = $this->blockItem; $entry["id"] = $file->getDbId(); $entry["pos"] = $pos; - $entry["cliplength"] = $file->getDbLength(); $entry["cueout"] = $file->getDbCueout(); $entry["cuein"] = $file->getDbCuein(); + $cue_out = Application_Common_DateHelper::calculateLengthInSeconds($entry['cueout']); + $cue_in = Application_Common_DateHelper::calculateLengthInSeconds($entry['cuein']); + $entry["cliplength"] = $cue_out-$cue_in; + return $entry; } else { throw new Exception("trying to add a file that does not exist."); diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 3230a7fa1..9fae286ac 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -398,14 +398,18 @@ SQL; $entry = $this->plItem; $entry["id"] = $obj->getDbId(); $entry["pos"] = $pos; - $entry["cliplength"] = $obj->getDbLength(); if ($obj instanceof CcFiles && $obj) { $entry["cuein"] = $obj->getDbCuein(); $entry["cueout"] = $obj->getDbCueout(); + + $cue_out = Application_Common_DateHelper::calculateLengthInSeconds($entry['cueout']); + $cue_in = Application_Common_DateHelper::calculateLengthInSeconds($entry['cuein']); + $entry["cliplength"] = $cue_out-$cue_in; } elseif ($obj instanceof CcWebstream && $obj) { $entry["cuein"] = "00:00:00"; $entry["cueout"] = $entry["cliplength"]; } + $entry["cliplength"] = $obj->getDbLength(); $entry["ftype"] = $objType; } From 6071dea839e688f0bd33c4974cddd5f68c611630 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 12:32:20 -0500 Subject: [PATCH 095/208] CC-4940: Playlist editor in Library ignores cue points set by silence detection when displaying item time -small fix on where to set clip length --- airtime_mvc/application/models/Playlist.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index 9fae286ac..dbea90a89 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -398,6 +398,7 @@ SQL; $entry = $this->plItem; $entry["id"] = $obj->getDbId(); $entry["pos"] = $pos; + $entry["cliplength"] = $obj->getDbLength(); if ($obj instanceof CcFiles && $obj) { $entry["cuein"] = $obj->getDbCuein(); $entry["cueout"] = $obj->getDbCueout(); @@ -409,7 +410,6 @@ SQL; $entry["cuein"] = "00:00:00"; $entry["cueout"] = $entry["cliplength"]; } - $entry["cliplength"] = $obj->getDbLength(); $entry["ftype"] = $objType; } From 3c73535f700dd4a28dedc036d85ba7254d3112fc Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 12:37:20 -0500 Subject: [PATCH 096/208] Convert clip length seconds to interval format before inserting into cc_playlistcontents / cc_blockcontents --- airtime_mvc/application/models/Block.php | 2 +- airtime_mvc/application/models/Playlist.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index aed47c3a1..2655aff09 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -408,7 +408,7 @@ SQL; $cue_out = Application_Common_DateHelper::calculateLengthInSeconds($entry['cueout']); $cue_in = Application_Common_DateHelper::calculateLengthInSeconds($entry['cuein']); - $entry["cliplength"] = $cue_out-$cue_in; + $entry["cliplength"] = Application_Common_DateHelper::secondsToPlaylistTime($cue_out-$cue_in); return $entry; } else { diff --git a/airtime_mvc/application/models/Playlist.php b/airtime_mvc/application/models/Playlist.php index dbea90a89..c7a9d2f34 100644 --- a/airtime_mvc/application/models/Playlist.php +++ b/airtime_mvc/application/models/Playlist.php @@ -405,7 +405,7 @@ SQL; $cue_out = Application_Common_DateHelper::calculateLengthInSeconds($entry['cueout']); $cue_in = Application_Common_DateHelper::calculateLengthInSeconds($entry['cuein']); - $entry["cliplength"] = $cue_out-$cue_in; + $entry["cliplength"] = Application_Common_DateHelper::secondsToPlaylistTime($cue_out-$cue_in); } elseif ($obj instanceof CcWebstream && $obj) { $entry["cuein"] = "00:00:00"; $entry["cueout"] = $entry["cliplength"]; From 51ade73e85f0e93118d86f3e9744d2c4547ed1c5 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 13:45:51 -0500 Subject: [PATCH 097/208] CC-4941: Dynamic Smart Block ignores the silan check -fixed --- airtime_mvc/application/models/Scheduler.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index 92db4cacd..b5047cc5d 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -261,9 +261,12 @@ class Application_Model_Scheduler $file = CcFilesQuery::create()->findPk($fileId); if (isset($file) && $file->visible()) { $data["id"] = $file->getDbId(); - $data["cliplength"] = $file->getDbLength(); - $data["cuein"] = "00:00:00"; - $data["cueout"] = $file->getDbLength(); + $data["cuein"] = $file->getDbCuein(); + $data["cueout"] = $file->getDbCueout(); + + $cuein = Application_Common_DateHelper::calculateLengthInSeconds($data["cuein"]); + $cueout = Application_Common_DateHelper::calculateLengthInSeconds($data["cueout"]); + $data["cliplength"] = Application_Common_DateHelper::secondsToPlaylistTime($cueout - $cuein); $defaultFade = Application_Model_Preference::GetDefaultFade(); if (isset($defaultFade)) { //fade is in format SS.uuuuuu From 2c1fa283dad3d05c7a4f763d994514011aba9a71 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 14:17:18 -0500 Subject: [PATCH 098/208] CC-4941: Dynamic Smart Block ignores the silan check -fixed for playlists that contain dynamic blocks --- airtime_mvc/application/models/Scheduler.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/models/Scheduler.php b/airtime_mvc/application/models/Scheduler.php index b5047cc5d..bd6a3bb4d 100644 --- a/airtime_mvc/application/models/Scheduler.php +++ b/airtime_mvc/application/models/Scheduler.php @@ -203,9 +203,12 @@ class Application_Model_Scheduler $file = CcFilesQuery::create()->findPk($fileId); if (isset($file) && $file->visible()) { $data["id"] = $file->getDbId(); - $data["cliplength"] = $file->getDbLength(); - $data["cuein"] = "00:00:00"; - $data["cueout"] = $file->getDbLength(); + $data["cuein"] = $file->getDbCuein(); + $data["cueout"] = $file->getDbCueout(); + + $cuein = Application_Common_DateHelper::calculateLengthInSeconds($data["cuein"]); + $cueout = Application_Common_DateHelper::calculateLengthInSeconds($data["cueout"]); + $data["cliplength"] = Application_Common_DateHelper::secondsToPlaylistTime($cueout - $cuein); $defaultFade = Application_Model_Preference::GetDefaultFade(); if (isset($defaultFade)) { //fade is in format SS.uuuuuu From 30c47df93d29a593f58c7f8a2b1886270a174686 Mon Sep 17 00:00:00 2001 From: denise Date: Mon, 11 Feb 2013 15:56:21 -0500 Subject: [PATCH 099/208] Audio preview wasn't working in Firefox when airtime is not in document root --- airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js index b5f192219..01badc43d 100644 --- a/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jplayer.js @@ -24,7 +24,7 @@ $(document).ready(function(){ cssSelectorAncestor: "#jp_container_1" },[], //array of songs will be filled with below's json call { - swfPath: "/js/jplayer", + swfPath: baseUrl+"js/jplayer", supplied:"oga, mp3, m4v, m4a, wav", size: { width: "0px", From 50613dd9a8baa86555ad8314e8bc1d9237f86fd3 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 12 Feb 2013 17:21:21 -0500 Subject: [PATCH 100/208] CC-4907: Library -> Adding items to show doesn't add the correct item sometimes -fixed --- airtime_mvc/application/models/StoredFile.php | 1 + 1 file changed, 1 insertion(+) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index ef96fe049..4f61c3592 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -816,6 +816,7 @@ SQL; $row['checkbox'] = ""; $row['image'] = ""; + $type = substr($row['ftype'], 0, 2); $row['tr_id'] = "{$type}_{$row['id']}"; } From 4ff1e8e78a7423bf2c9ca86239dc4599bf25f10a Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 13 Feb 2013 11:29:43 -0500 Subject: [PATCH 101/208] CC-4932: Library -> Update Scheduled column on 'Cancel current show' action -fixed --- airtime_mvc/application/controllers/ScheduleController.php | 1 + airtime_mvc/public/js/airtime/showbuilder/builder.js | 1 + 2 files changed, 2 insertions(+) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index c4fd65205..f15f9e099 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -895,6 +895,7 @@ class ScheduleController extends Zend_Controller_Action try { $scheduler = new Application_Model_Scheduler(); $scheduler->cancelShow($id); + Application_Model_StoredFile::updatePastFilesIsScheduled(); // send kick out source stream signal to pypo $data = array("sourcename"=>"live_dj"); Application_Model_RabbitMq::SendMessageToPypo("disconnect_source", $data); diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index d4b70abc2..d40f4f349 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -1076,6 +1076,7 @@ var AIRTIME = (function(AIRTIME){ url: url, data: {format: "json", id: data.instance}, success: function(data){ + $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); var oTable = $sbTable.dataTable(); oTable.fnDraw(); } From eb38503d6eeab8cc073e2e86f5375caac16f8487 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 13 Feb 2013 11:51:25 -0500 Subject: [PATCH 102/208] CC-4946: Now Playing -> Apache error when empty show starts -we were trying to update the is_scheduled flag on a non-schedule item --- .../public/js/airtime/showbuilder/builder.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index d40f4f349..9bbc4db92 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -86,13 +86,15 @@ var AIRTIME = (function(AIRTIME){ // once a track plays out we need to check if we can update // the is_scheduled flag in cc_files - $.post(baseUrl+"schedule/update-future-is-scheduled", - {"format": "json", "schedId": schedId}, function(data) { - if (data.redrawLibTable !== undefined && data.redrawLibTable) { - $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); - } - }); - oSchedTable.fnDraw(); + if (schedId > 0) { + $.post(baseUrl+"schedule/update-future-is-scheduled", + {"format": "json", "schedId": schedId}, function(data) { + if (data.redrawLibTable !== undefined && data.redrawLibTable) { + $("#library_content").find("#library_display").dataTable().fnStandingRedraw(); + } + }); + oSchedTable.fnDraw(); + } }; mod.checkSelectButton = function() { From 76cb04e2960ea1ec1b6685ff5974e9acb73a2767 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 13 Feb 2013 11:55:27 -0500 Subject: [PATCH 103/208] CC-4538: Cannot edit title or change time of repeating show if first instance has ended - fixed by populating the edit show form with the next repeating show that is not in the past --- .../controllers/ScheduleController.php | 16 ++++++++++--- airtime_mvc/application/models/Show.php | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index f15f9e099..dc16d657d 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -627,7 +627,11 @@ class ScheduleController extends Zend_Controller_Action if (!$showInstance->getShow()->isRepeating()) { $formWhen->disableStartDateAndTime(); } else { - $formWhen->getElement('add_show_start_date')->setOptions(array('disabled' => true)); + $nextFutureRepeatShow = $show->getNextFutureRepeatShowTime(); + $formWhen->getElement('add_show_start_date')->setValue($nextFutureRepeatShow["starts"]->format("Y-m-d")); + $formWhen->getElement('add_show_start_time')->setValue($nextFutureRepeatShow["starts"]->format("H:i")); + $formWhen->getElement('add_show_end_date_no_repeat')->setValue($nextFutureRepeatShow["ends"]->format("Y-m-d")); + $formWhen->getElement('add_show_end_time')->setValue($nextFutureRepeatShow["ends"]->format("H:i")); } } @@ -802,10 +806,16 @@ class ScheduleController extends Zend_Controller_Action } $data['add_show_record'] = $show->isRecorded(); - $origianlShowStartDateTime = Application_Common_DateHelper::ConvertToLocalDateTime($show->getStartDateAndTime()); + if ($show->isRepeating()) { + $nextFutureRepeatShow = $show->getNextFutureRepeatShowTime(); + $originalShowStartDateTime = $nextFutureRepeatShow["starts"]; + } else { + $originalShowStartDateTime = Application_Common_DateHelper::ConvertToLocalDateTime( + $show->getStartDateAndTime()); + } $success = Application_Model_Schedule::addUpdateShow($data, $this, - $validateStartDate, $origianlShowStartDateTime, true, + $validateStartDate, $originalShowStartDateTime, true, $data['add_show_instance_id']); if ($success) { diff --git a/airtime_mvc/application/models/Show.php b/airtime_mvc/application/models/Show.php index 933c2c841..f485e41bc 100644 --- a/airtime_mvc/application/models/Show.php +++ b/airtime_mvc/application/models/Show.php @@ -663,6 +663,30 @@ SQL; $con->exec($sql); } + public function getNextFutureRepeatShowTime() + { + $sql = << now() at time zone 'UTC' +AND show_id = :showId +ORDER BY starts +LIMIT 1 +SQL; + $result = Application_Common_Database::prepareAndExecute( $sql, + array( 'showId' => $this->getId() ), 'all' ); + + foreach ($result as $r) { + $show["starts"] = new DateTime($r["starts"], new DateTimeZone('UTC')); + $show["ends"] = new DateTime($r["ends"], new DateTimeZone('UTC')); + } + $currentUser = Application_Model_User::getCurrentUser(); + $currentUserId = $currentUser->getId(); + $userTimezone = Application_Model_Preference::GetUserTimezone($currentUserId); + $show["starts"]->setTimezone(new DateTimeZone($userTimezone)); + $show["ends"]->setTimezone(new DateTimeZone($userTimezone)); + return $show; + } + /** * Get the start date of the current show in UTC timezone. * From 04ed64075667917e813a01ab5b2208195180e2f9 Mon Sep 17 00:00:00 2001 From: denise Date: Wed, 13 Feb 2013 15:44:52 -0500 Subject: [PATCH 104/208] CC-3885: Deleted open playlist is not closed until a new item is added to it -fixed --- .../controllers/PlaylistController.php | 8 +++ .../public/js/airtime/library/library.js | 50 +++++++++++++------ 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index e474b9177..3f0dd66b7 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -14,6 +14,7 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('new', 'json') ->addActionContext('edit', 'json') ->addActionContext('delete', 'json') + ->addActionContext('close-playlist', 'json') ->addActionContext('play', 'json') ->addActionContext('set-playlist-fades', 'json') ->addActionContext('get-playlist-fades', 'json') @@ -246,6 +247,13 @@ class PlaylistController extends Zend_Controller_Action } } + public function closePlaylistAction() { + $type = $this->_getParam('type'); + $obj = null; + Application_Model_Library::changePlaylist($obj, $type); + $this->createFullResponse($obj); + } + public function addItemsAction() { $ids = $this->_getParam('aItems', array()); diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 6ec4a1540..5d835125e 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -322,22 +322,40 @@ var AIRTIME = (function(AIRTIME) { }; mod.fnDeleteSelectedItems = function() { - if (confirm($.i18n._('Are you sure you want to delete the selected item(s)?'))) { - var aData = AIRTIME.library.getSelectedData(), - item, - temp, - aMedia = []; - - // process selected files/playlists. - for (item in aData) { - temp = aData[item]; - if (temp !== null && temp.hasOwnProperty('id') ) { - aMedia.push({"id": temp.id, "type": temp.ftype}); - } - } - - AIRTIME.library.fnDeleteItems(aMedia); - } + if (confirm($.i18n._('Are you sure you want to delete the selected item(s)?'))) { + var aData = AIRTIME.library.getSelectedData(), + item, + temp, + aMedia = [], + currentObjId = $("#side_playlist").find("#obj_id").val(), + currentObjType = $("#side_playlist").find("#obj_type").val(), + closeObj = false; + + // process selected files/playlists. + for (item in aData) { + temp = aData[item]; + if (temp !== null && temp.hasOwnProperty('id') ) { + aMedia.push({"id": temp.id, "type": temp.ftype}); + if ( (temp.id == currentObjId && temp.ftype === currentObjType) || + temp.id == currentObjId && temp.ftype === "stream" && currentObjType === "webstream") { + closeObj = true; + } + } + } + + AIRTIME.library.fnDeleteItems(aMedia); + + // close the object (playlist/block/webstream) + // on the right side if it was just deleted + // from the library + if (closeObj) { + $.post(baseUrl+"playlist/close-playlist", + {"format": "json", "type": currentObjType}, + function(json) { + $("#side_playlist").empty().append(json.html); + }); + } + } }; libraryInit = function() { From 6bbb603bcd8d0c3008a56742467ba3443daa399d Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 22 Jan 2013 13:27:20 -0500 Subject: [PATCH 105/208] CC-3627: PlaylistBuilder->Playlist Panel -> it would be very handy to have "Close playlist" functionality --- .../views/scripts/playlist/playlist.phtml | 1 + .../views/scripts/playlist/smart-block.phtml | 1 + .../views/scripts/webstream/webstream.phtml | 1 + airtime_mvc/public/js/airtime/library/spl.js | 26 ++++++++++++++++--- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/views/scripts/playlist/playlist.phtml b/airtime_mvc/application/views/scripts/playlist/playlist.phtml index 5a31ba2b5..ead87942e 100644 --- a/airtime_mvc/application/views/scripts/playlist/playlist.phtml +++ b/airtime_mvc/application/views/scripts/playlist/playlist.phtml @@ -4,6 +4,7 @@ if (isset($this->obj)) { $count = count($contents); } ?> +
    ')[0]; - oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable ); - - /* - * All DataTables are wrapped in a div - */ - oSettings.nTableWrapper = $('
    ')[0]; - oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; - - /* Track where we want to insert the option */ - var nInsertNode = oSettings.nTableWrapper; - - /* Loop over the user set positioning and place the elements as needed */ - var aDom = oSettings.sDom.split(''); - var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; - for ( var i=0 ; i
    ')[0]; - - /* Check to see if we should append an id and/or a class name to the container */ - cNext = aDom[i+1]; - if ( cNext == "'" || cNext == '"' ) - { - sAttr = ""; - j = 2; - while ( aDom[i+j] != cNext ) - { - sAttr += aDom[i+j]; - j++; - } - - /* Replace jQuery UI constants */ - if ( sAttr == "H" ) - { - sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix"; - } - else if ( sAttr == "F" ) - { - sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"; - } - - /* The attribute can be in the format of "#id.class", "#id" or "class" This logic - * breaks the string into parts and applies them as needed - */ - if ( sAttr.indexOf('.') != -1 ) - { - var aSplit = sAttr.split('.'); - nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1); - nNewNode.className = aSplit[1]; - } - else if ( sAttr.charAt(0) == "#" ) - { - nNewNode.id = sAttr.substr(1, sAttr.length-1); - } - else - { - nNewNode.className = sAttr; - } - - i += j; /* Move along the position array */ - } - - nInsertNode.appendChild( nNewNode ); - nInsertNode = nNewNode; - } - else if ( cOption == '>' ) - { - /* End container div */ - nInsertNode = nInsertNode.parentNode; - } - else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange ) - { - /* Length */ - nTmp = _fnFeatureHtmlLength( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'f' && oSettings.oFeatures.bFilter ) - { - /* Filter */ - nTmp = _fnFeatureHtmlFilter( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'r' && oSettings.oFeatures.bProcessing ) - { - /* pRocessing */ - nTmp = _fnFeatureHtmlProcessing( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 't' ) - { - /* Table */ - nTmp = _fnFeatureHtmlTable( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'i' && oSettings.oFeatures.bInfo ) - { - /* Info */ - nTmp = _fnFeatureHtmlInfo( oSettings ); - iPushFeature = 1; - } - else if ( cOption == 'p' && oSettings.oFeatures.bPaginate ) - { - /* Pagination */ - nTmp = _fnFeatureHtmlPaginate( oSettings ); - iPushFeature = 1; - } - else if ( DataTable.ext.aoFeatures.length !== 0 ) - { - /* Plug-in features */ - var aoFeatures = DataTable.ext.aoFeatures; - for ( var k=0, kLen=aoFeatures.length ; k') : - sSearchStr==="" ? '' : sSearchStr+' '; - - var nFilter = document.createElement( 'div' ); - nFilter.className = oSettings.oClasses.sFilter; - nFilter.innerHTML = ''; - if ( !oSettings.aanFeatures.f ) - { - nFilter.id = oSettings.sTableId+'_filter'; - } - - var jqFilter = $('input[type="text"]', nFilter); - - // Store a reference to the input element, so other input elements could be - // added to the filter wrapper if needed (submit button for example) - nFilter._DT_Input = jqFilter[0]; - - jqFilter.val( oPreviousSearch.sSearch.replace('"','"') ); - jqFilter.bind( 'keyup.DT', function(e) { - /* Update all other filter input elements for the new display */ - var n = oSettings.aanFeatures.f; - var val = this.value==="" ? "" : this.value; // mental IE8 fix :-( - - for ( var i=0, iLen=n.length ; i=0 ; i-- ) - { - var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ), - oSettings.aoColumns[iColumn].sType ); - if ( ! rpSearch.test( sData ) ) - { - oSettings.aiDisplay.splice( i, 1 ); - iIndexCorrector++; - } - } - } - - - /** - * Filter the data table based on user input and draw the table - * @param {object} oSettings dataTables settings object - * @param {string} sInput string to filter on - * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0) - * @param {bool} bRegex treat as a regular expression or not - * @param {bool} bSmart perform smart filtering or not - * @param {bool} bCaseInsensitive Do case insenstive matching or not - * @memberof DataTable#oApi - */ - function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive ) - { - var i; - var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); - var oPrevSearch = oSettings.oPreviousSearch; - - /* Check if we are forcing or not - optional parameter */ - if ( !iForce ) - { - iForce = 0; - } - - /* Need to take account of custom filtering functions - always filter */ - if ( DataTable.ext.afnFiltering.length !== 0 ) - { - iForce = 1; - } - - /* - * If the input is blank - we want the full data set - */ - if ( sInput.length <= 0 ) - { - oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - } - else - { - /* - * We are starting a new search or the new search string is smaller - * then the old one (i.e. delete). Search from the master array - */ - if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || - oPrevSearch.sSearch.length > sInput.length || iForce == 1 || - sInput.indexOf(oPrevSearch.sSearch) !== 0 ) - { - /* Nuke the old display array - we are going to rebuild it */ - oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); - - /* Force a rebuild of the search array */ - _fnBuildSearchArray( oSettings, 1 ); - - /* Search through all records to populate the search array - * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 - * mapping - */ - for ( i=0 ; i tag - remove it */ - sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,""); - } - - return sSearch; - } - - /** - * Build a regular expression object suitable for searching a table - * @param {string} sSearch string to search for - * @param {bool} bRegex treat as a regular expression or not - * @param {bool} bSmart perform smart filtering or not - * @param {bool} bCaseInsensitive Do case insenstive matching or not - * @returns {RegExp} constructed object - * @memberof DataTable#oApi - */ - function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive ) - { - var asSearch, sRegExpString; - - if ( bSmart ) - { - /* Generate the regular expression to use. Something along the lines of: - * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$ - */ - asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' ); - sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$'; - return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" ); - } - else - { - sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch ); - return new RegExp( sSearch, bCaseInsensitive ? "i" : "" ); - } - } - - - /** - * Convert raw data into something that the user can search on - * @param {string} sData data to be modified - * @param {string} sType data type - * @returns {string} search string - * @memberof DataTable#oApi - */ - function _fnDataToSearch ( sData, sType ) - { - if ( typeof DataTable.ext.ofnSearch[sType] === "function" ) - { - return DataTable.ext.ofnSearch[sType]( sData ); - } - else if ( sData === null ) - { - return ''; - } - else if ( sType == "html" ) - { - return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" ); - } - else if ( typeof sData === "string" ) - { - return sData.replace(/[\r\n]/g," "); - } - return sData; - } - - - /** - * scape a string stuch that it can be used in a regular expression - * @param {string} sVal string to escape - * @returns {string} escaped string - * @memberof DataTable#oApi - */ - function _fnEscapeRegex ( sVal ) - { - var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^' ]; - var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' ); - return sVal.replace(reReplace, '\\$1'); - } - - - - /** - * Generate the node required for the info display - * @param {object} oSettings dataTables settings object - * @returns {node} Information element - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlInfo ( oSettings ) - { - var nInfo = document.createElement( 'div' ); - nInfo.className = oSettings.oClasses.sInfo; - - /* Actions that are to be taken once only for this feature */ - if ( !oSettings.aanFeatures.i ) - { - /* Add draw callback */ - oSettings.aoDrawCallback.push( { - "fn": _fnUpdateInfo, - "sName": "information" - } ); - - /* Add id */ - nInfo.id = oSettings.sTableId+'_info'; - } - oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' ); - - return nInfo; - } - - - /** - * Update the information elements in the display - * @param {object} oSettings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnUpdateInfo ( oSettings ) - { - /* Show information about the table */ - if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 ) - { - return; - } - - var - oLang = oSettings.oLanguage, - iStart = oSettings._iDisplayStart+1, - iEnd = oSettings.fnDisplayEnd(), - iMax = oSettings.fnRecordsTotal(), - iTotal = oSettings.fnRecordsDisplay(), - sOut; - - if ( iTotal === 0 && iTotal == iMax ) - { - /* Empty record set */ - sOut = oLang.sInfoEmpty; - } - else if ( iTotal === 0 ) - { - /* Empty record set after filtering */ - sOut = oLang.sInfoEmpty +' '+ oLang.sInfoFiltered; - } - else if ( iTotal == iMax ) - { - /* Normal record set */ - sOut = oLang.sInfo; - } - else - { - /* Record set after filtering */ - sOut = oLang.sInfo +' '+ oLang.sInfoFiltered; - } - - // Convert the macros - sOut += oLang.sInfoPostFix; - sOut = _fnInfoMacros( oSettings, sOut ); - - if ( oLang.fnInfoCallback !== null ) - { - sOut = oLang.fnInfoCallback.call( oSettings.oInstance, - oSettings, iStart, iEnd, iMax, iTotal, sOut ); - } - - var n = oSettings.aanFeatures.i; - for ( var i=0, iLen=n.length ; i'; - var i, iLen; - var aLengthMenu = oSettings.aLengthMenu; - - if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && - typeof aLengthMenu[1] === 'object' ) - { - for ( i=0, iLen=aLengthMenu[0].length ; i'+aLengthMenu[1][i]+''; - } - } - else - { - for ( i=0, iLen=aLengthMenu.length ; i'+aLengthMenu[i]+''; - } - } - sStdMenu += ''; - - var nLength = document.createElement( 'div' ); - if ( !oSettings.aanFeatures.l ) - { - nLength.id = oSettings.sTableId+'_length'; - } - nLength.className = oSettings.oClasses.sLength; - nLength.innerHTML = ''; - - /* - * Set the length to the current display length - thanks to Andrea Pavlovic for this fix, - * and Stefan Skopnik for fixing the fix! - */ - $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true); - - $('select', nLength).bind( 'change.DT', function(e) { - var iVal = $(this).val(); - - /* Update all other length options for the new display */ - var n = oSettings.aanFeatures.l; - for ( i=0, iLen=n.length ; i oSettings.aiDisplay.length || - oSettings._iDisplayLength == -1 ) - { - oSettings._iDisplayEnd = oSettings.aiDisplay.length; - } - else - { - oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; - } - } - } - - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Note that most of the paging logic is done in - * DataTable.ext.oPagination - */ - - /** - * Generate the node required for default pagination - * @param {object} oSettings dataTables settings object - * @returns {node} Pagination feature node - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlPaginate ( oSettings ) - { - if ( oSettings.oScroll.bInfinite ) - { - return null; - } - - var nPaginate = document.createElement( 'div' ); - nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType; - - DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, - function( oSettings ) { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - ); - - /* Add a draw callback for the pagination on first instance, to update the paging display */ - if ( !oSettings.aanFeatures.p ) - { - oSettings.aoDrawCallback.push( { - "fn": function( oSettings ) { - DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } ); - }, - "sName": "pagination" - } ); - } - return nPaginate; - } - - - /** - * Alter the display settings to change the page - * @param {object} oSettings dataTables settings object - * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" - * or page number to jump to (integer) - * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1 - * @memberof DataTable#oApi - */ - function _fnPageChange ( oSettings, mAction ) - { - var iOldStart = oSettings._iDisplayStart; - - if ( typeof mAction === "number" ) - { - oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; - if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "first" ) - { - oSettings._iDisplayStart = 0; - } - else if ( mAction == "previous" ) - { - oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? - oSettings._iDisplayStart - oSettings._iDisplayLength : - 0; - - /* Correct for underrun */ - if ( oSettings._iDisplayStart < 0 ) - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "next" ) - { - if ( oSettings._iDisplayLength >= 0 ) - { - /* Make sure we are not over running the display array */ - if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) - { - oSettings._iDisplayStart += oSettings._iDisplayLength; - } - } - else - { - oSettings._iDisplayStart = 0; - } - } - else if ( mAction == "last" ) - { - if ( oSettings._iDisplayLength >= 0 ) - { - var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1; - oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength; - } - else - { - oSettings._iDisplayStart = 0; - } - } - else - { - _fnLog( oSettings, 0, "Unknown paging action: "+mAction ); - } - $(oSettings.oInstance).trigger('page', oSettings); - - return iOldStart != oSettings._iDisplayStart; - } - - - - /** - * Generate the node required for the processing node - * @param {object} oSettings dataTables settings object - * @returns {node} Processing element - * @memberof DataTable#oApi - */ - function _fnFeatureHtmlProcessing ( oSettings ) - { - var nProcessing = document.createElement( 'div' ); - - if ( !oSettings.aanFeatures.r ) - { - nProcessing.id = oSettings.sTableId+'_processing'; - } - nProcessing.innerHTML = oSettings.oLanguage.sProcessing; - nProcessing.className = oSettings.oClasses.sProcessing; - oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable ); - - return nProcessing; - } - - - /** - * Display or hide the processing indicator - * @param {object} oSettings dataTables settings object - * @param {bool} bShow Show the processing indicator (true) or not (false) - * @memberof DataTable#oApi - */ - function _fnProcessingDisplay ( oSettings, bShow ) - { - if ( oSettings.oFeatures.bProcessing ) - { - var an = oSettings.aanFeatures.r; - for ( var i=0, iLen=an.length ; i 0 ) - { - nCaption = nCaption[0]; - if ( nCaption._captionSide === "top" ) - { - nScrollHeadTable.appendChild( nCaption ); - } - else if ( nCaption._captionSide === "bottom" && nTfoot ) - { - nScrollFootTable.appendChild( nCaption ); - } - } - - /* - * Sizing - */ - /* When xscrolling add the width and a scroller to move the header with the body */ - if ( oSettings.oScroll.sX !== "" ) - { - nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX ); - nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX ); - - if ( nTfoot !== null ) - { - nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX ); - } - - /* When the body is scrolled, then we also want to scroll the headers */ - $(nScrollBody).scroll( function (e) { - nScrollHead.scrollLeft = this.scrollLeft; - - if ( nTfoot !== null ) - { - nScrollFoot.scrollLeft = this.scrollLeft; - } - } ); - } - - /* When yscrolling, add the height */ - if ( oSettings.oScroll.sY !== "" ) - { - nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY ); - } - - /* Redraw - align columns across the tables */ - oSettings.aoDrawCallback.push( { - "fn": _fnScrollDraw, - "sName": "scrolling" - } ); - - /* Infinite scrolling event handlers */ - if ( oSettings.oScroll.bInfinite ) - { - $(nScrollBody).scroll( function() { - /* Use a blocker to stop scrolling from loading more data while other data is still loading */ - if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 ) - { - /* Check if we should load the next data set */ - if ( $(this).scrollTop() + $(this).height() > - $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap ) - { - /* Only do the redraw if we have to - we might be at the end of the data */ - if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() ) - { - _fnPageChange( oSettings, 'next' ); - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - } - } - } ); - } - - oSettings.nScrollHead = nScrollHead; - oSettings.nScrollFoot = nScrollFoot; - - return nScroller; - } - - - /** - * Update the various tables for resizing. It's a bit of a pig this function, but - * basically the idea to: - * 1. Re-create the table inside the scrolling div - * 2. Take live measurements from the DOM - * 3. Apply the measurements - * 4. Clean up - * @param {object} o dataTables settings object - * @returns {node} Node to add to the DOM - * @memberof DataTable#oApi - */ - function _fnScrollDraw ( o ) - { - var - nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], - nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], - nScrollBody = o.nTable.parentNode, - i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, - nTheadSize, nTfootSize, - iWidth, aApplied=[], iSanityWidth, - nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, - nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, - ie67 = $.browser.msie && $.browser.version <= 7; - - /* - * 1. Re-create the table inside the scrolling div - */ - - /* Remove the old minimised thead and tfoot elements in the inner table */ - $(o.nTable).children('thead, tfoot').remove(); - - /* Clone the current header and footer elements and then place it into the inner table */ - nTheadSize = $(o.nTHead).clone()[0]; - o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] ); - - if ( o.nTFoot !== null ) - { - nTfootSize = $(o.nTFoot).clone()[0]; - o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] ); - } - - /* - * 2. Take live measurements from the DOM - do not alter the DOM itself! - */ - - /* Remove old sizing and apply the calculated column widths - * Get the unique column headers in the newly created (cloned) header. We want to apply the - * calclated sizes to this header - */ - if ( o.oScroll.sX === "" ) - { - nScrollBody.style.width = '100%'; - nScrollHeadInner.parentNode.style.width = '100%'; - } - - var nThs = _fnGetUniqueThs( o, nTheadSize ); - for ( i=0, iLen=nThs.length ; i nScrollBody.offsetHeight || - $(nScrollBody).css('overflow-y') == "scroll") ) - { - o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth); - } - } - else - { - if ( o.oScroll.sXInner !== "" ) - { - /* x scroll inner has been given - use it */ - o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner); - } - else if ( iSanityWidth == $(nScrollBody).width() && - $(nScrollBody).height() < $(o.nTable).height() ) - { - /* There is y-scrolling - try to take account of the y scroll bar */ - o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth ); - if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth ) - { - /* Not possible to take account of it */ - o.nTable.style.width = _fnStringToCss( iSanityWidth ); - } - } - else - { - /* All else fails */ - o.nTable.style.width = _fnStringToCss( iSanityWidth ); - } - } - - /* Recalculate the sanity width - now that we've applied the required width, before it was - * a temporary variable. This is required because the column width calculation is done - * before this table DOM is created. - */ - iSanityWidth = $(o.nTable).outerWidth(); - - /* We want the hidden header to have zero height, so remove padding and borders. Then - * set the width based on the real headers - */ - anHeadToSize = o.nTHead.getElementsByTagName('tr'); - anHeadSizers = nTheadSize.getElementsByTagName('tr'); - - _fnApplyToChildren( function(nSizer, nToSize) { - oStyle = nSizer.style; - oStyle.paddingTop = "0"; - oStyle.paddingBottom = "0"; - oStyle.borderTopWidth = "0"; - oStyle.borderBottomWidth = "0"; - oStyle.height = 0; - - iWidth = $(nSizer).width(); - nToSize.style.width = _fnStringToCss( iWidth ); - aApplied.push( iWidth ); - }, anHeadSizers, anHeadToSize ); - $(anHeadSizers).height(0); - - if ( o.nTFoot !== null ) - { - /* Clone the current footer and then place it into the body table as a "hidden header" */ - anFootSizers = nTfootSize.getElementsByTagName('tr'); - anFootToSize = o.nTFoot.getElementsByTagName('tr'); - - _fnApplyToChildren( function(nSizer, nToSize) { - oStyle = nSizer.style; - oStyle.paddingTop = "0"; - oStyle.paddingBottom = "0"; - oStyle.borderTopWidth = "0"; - oStyle.borderBottomWidth = "0"; - oStyle.height = 0; - - iWidth = $(nSizer).width(); - nToSize.style.width = _fnStringToCss( iWidth ); - aApplied.push( iWidth ); - }, anFootSizers, anFootToSize ); - $(anFootSizers).height(0); - } - - /* - * 3. Apply the measurements - */ - - /* "Hide" the header and footer that we used for the sizing. We want to also fix their width - * to what they currently are - */ - _fnApplyToChildren( function(nSizer) { - nSizer.innerHTML = ""; - nSizer.style.width = _fnStringToCss( aApplied.shift() ); - }, anHeadSizers ); - - if ( o.nTFoot !== null ) - { - _fnApplyToChildren( function(nSizer) { - nSizer.innerHTML = ""; - nSizer.style.width = _fnStringToCss( aApplied.shift() ); - }, anFootSizers ); - } - - /* Sanity check that the table is of a sensible width. If not then we are going to get - * misalignment - try to prevent this by not allowing the table to shrink below its min width - */ - if ( $(o.nTable).outerWidth() < iSanityWidth ) - { - /* The min width depends upon if we have a vertical scrollbar visible or not */ - var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || - $(nScrollBody).css('overflow-y') == "scroll")) ? - iSanityWidth+o.oScroll.iBarWidth : iSanityWidth; - - /* IE6/7 are a law unto themselves... */ - if ( ie67 && (nScrollBody.scrollHeight > - nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") ) - { - o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth ); - } - - /* Apply the calculated minimum width to the table wrappers */ - nScrollBody.style.width = _fnStringToCss( iCorrection ); - nScrollHeadInner.parentNode.style.width = _fnStringToCss( iCorrection ); - - if ( o.nTFoot !== null ) - { - nScrollFootInner.parentNode.style.width = _fnStringToCss( iCorrection ); - } - - /* And give the user a warning that we've stopped the table getting too small */ - if ( o.oScroll.sX === "" ) - { - _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ - " misalignment. The table has been drawn at its minimum possible width." ); - } - else if ( o.oScroll.sXInner !== "" ) - { - _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ - " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+ - " calculation" ); - } - } - else - { - nScrollBody.style.width = _fnStringToCss( '100%' ); - nScrollHeadInner.parentNode.style.width = _fnStringToCss( '100%' ); - - if ( o.nTFoot !== null ) - { - nScrollFootInner.parentNode.style.width = _fnStringToCss( '100%' ); - } - } - - - /* - * 4. Clean up - */ - if ( o.oScroll.sY === "" ) - { - /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting - * the scrollbar height from the visible display, rather than adding it on. We need to - * set the height in order to sort this. Don't want to do it in any other browsers. - */ - if ( ie67 ) - { - nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth ); - } - } - - if ( o.oScroll.sY !== "" && o.oScroll.bCollapse ) - { - nScrollBody.style.height = _fnStringToCss( o.oScroll.sY ); - - var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? - o.oScroll.iBarWidth : 0; - if ( o.nTable.offsetHeight < nScrollBody.offsetHeight ) - { - nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra ); - } - } - - /* Finally set the width's of the header and footer tables */ - var iOuterWidth = $(o.nTable).outerWidth(); - nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth ); - nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth ); - - // Figure out if there are scrollbar present - if so then we need a the header and footer to - // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar) - var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll"; - nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; - - if ( o.nTFoot !== null ) - { - nScrollFootTable.style.width = _fnStringToCss( iOuterWidth ); - nScrollFootInner.style.width = _fnStringToCss( iOuterWidth ); - nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; - } - - /* Adjust the position of the header incase we loose the y-scrollbar */ - $(nScrollBody).scroll(); - - /* If sorting or filtering has occurred, jump the scrolling back to the top */ - if ( o.bSorted || o.bFiltered ) - { - nScrollBody.scrollTop = 0; - } - } - - - /** - * Apply a given function to the display child nodes of an element array (typically - * TD children of TR rows - * @param {function} fn Method to apply to the objects - * @param array {nodes} an1 List of elements to look through for display children - * @param array {nodes} an2 Another list (identical structure to the first) - optional - * @memberof DataTable#oApi - */ - function _fnApplyToChildren( fn, an1, an2 ) - { - for ( var i=0, iLen=an1.length ; itd', nCalcTmp); - } - - /* Apply custom sizing to the cloned header */ - var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); - iCorrector = 0; - for ( i=0 ; i 0 ) - { - oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); - } - iCorrector++; - } - } - - var cssWidth = $(nCalcTmp).css('width'); - oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? - cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); - nCalcTmp.parentNode.removeChild( nCalcTmp ); - } - - if ( widthAttr ) - { - oSettings.nTable.style.width = _fnStringToCss( widthAttr ); - } - } - - - /** - * Adjust a table's width to take account of scrolling - * @param {object} oSettings dataTables settings object - * @param {node} n table node - * @memberof DataTable#oApi - */ - function _fnScrollingWidthAdjust ( oSettings, n ) - { - if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) - { - /* When y-scrolling only, we want to remove the width of the scroll bar so the table - * + scroll bar will fit into the area avaialble. - */ - var iOrigWidth = $(n).width(); - n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); - } - else if ( oSettings.oScroll.sX !== "" ) - { - /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ - n.style.width = _fnStringToCss( $(n).outerWidth() ); - } - } - - - /** - * Get the widest node - * @param {object} oSettings dataTables settings object - * @param {int} iCol column of interest - * @returns {string} max strlens for each column - * @memberof DataTable#oApi - */ - function _fnGetWidestNode( oSettings, iCol ) - { - var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); - if ( iMaxIndex < 0 ) - { - return null; - } - - if ( oSettings.aoData[iMaxIndex].nTr === null ) - { - var n = document.createElement('td'); - n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); - return n; - } - return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; - } - - - /** - * Get the maximum strlen for each data column - * @param {object} oSettings dataTables settings object - * @param {int} iCol column of interest - * @returns {string} max strlens for each column - * @memberof DataTable#oApi - */ - function _fnGetMaxLenString( oSettings, iCol ) - { - var iMax = -1; - var iMaxIndex = -1; - - for ( var i=0 ; i/g, "" ); - if ( s.length > iMax ) - { - iMax = s.length; - iMaxIndex = i; - } - } - - return iMaxIndex; - } - - - /** - * Append a CSS unit (only if required) to a string - * @param {array} aArray1 first array - * @param {array} aArray2 second array - * @returns {int} 0 if match, 1 if length is different, 2 if no match - * @memberof DataTable#oApi - */ - function _fnStringToCss( s ) - { - if ( s === null ) - { - return "0px"; - } - - if ( typeof s == 'number' ) - { - if ( s < 0 ) - { - return "0px"; - } - return s+"px"; - } - - /* Check if the last character is not 0-9 */ - var c = s.charCodeAt( s.length-1 ); - if (c < 0x30 || c > 0x39) - { - return s; - } - return s+"px"; - } - - - /** - * Get the width of a scroll bar in this browser being used - * @returns {int} width in pixels - * @memberof DataTable#oApi - */ - function _fnScrollBarWidth () - { - var inner = document.createElement('p'); - var style = inner.style; - style.width = "100%"; - style.height = "200px"; - style.padding = "0px"; - - var outer = document.createElement('div'); - style = outer.style; - style.position = "absolute"; - style.top = "0px"; - style.left = "0px"; - style.visibility = "hidden"; - style.width = "200px"; - style.height = "150px"; - style.padding = "0px"; - style.overflow = "hidden"; - outer.appendChild(inner); - - document.body.appendChild(outer); - var w1 = inner.offsetWidth; - outer.style.overflow = 'scroll'; - var w2 = inner.offsetWidth; - if ( w1 == w2 ) - { - w2 = outer.clientWidth; - } - - document.body.removeChild(outer); - return (w1 - w2); - } - - - - /** - * Change the order of the table - * @param {object} oSettings dataTables settings object - * @param {bool} bApplyClasses optional - should we apply classes or not - * @memberof DataTable#oApi - */ - function _fnSort ( oSettings, bApplyClasses ) - { - var - i, iLen, j, jLen, k, kLen, - sDataType, nTh, - aaSort = [], - aiOrig = [], - oSort = DataTable.ext.oSort, - aoData = oSettings.aoData, - aoColumns = oSettings.aoColumns, - oAria = oSettings.oLanguage.oAria; - - /* No sorting required if server-side or no sorting array */ - if ( !oSettings.oFeatures.bServerSide && - (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) ) - { - aaSort = ( oSettings.aaSortingFixed !== null ) ? - oSettings.aaSortingFixed.concat( oSettings.aaSorting ) : - oSettings.aaSorting.slice(); - - /* If there is a sorting data type, and a fuction belonging to it, then we need to - * get the data from the developer's function and apply it for this column - */ - for ( i=0 ; i/g, "" ); - nTh = aoColumns[i].nTh; - nTh.removeAttribute('aria-sort'); - nTh.removeAttribute('aria-label'); - - /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */ - if ( aoColumns[i].bSortable ) - { - if ( aaSort.length > 0 && aaSort[0][0] == i ) - { - nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" ); - - var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? - aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0]; - nTh.setAttribute('aria-label', sTitle+ - (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); - } - else - { - nTh.setAttribute('aria-label', sTitle+ - (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); - } - } - else - { - nTh.setAttribute('aria-label', sTitle); - } - } - - /* Tell the draw function that we have sorted the data */ - oSettings.bSorted = true; - $(oSettings.oInstance).trigger('sort', oSettings); - - /* Copy the master data into the draw array and re-draw */ - if ( oSettings.oFeatures.bFilter ) - { - /* _fnFilter() will redraw the table for us */ - _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); - } - else - { - oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); - oSettings._iDisplayStart = 0; /* reset display back to page 0 */ - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - } - - - /** - * Attach a sort handler (click) to a node - * @param {object} oSettings dataTables settings object - * @param {node} nNode node to attach the handler to - * @param {int} iDataIndex column sorting index - * @param {function} [fnCallback] callback function - * @memberof DataTable#oApi - */ - function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback ) - { - _fnBindAction( nNode, {}, function (e) { - /* If the column is not sortable - don't to anything */ - if ( oSettings.aoColumns[iDataIndex].bSortable === false ) - { - return; - } - - /* - * This is a little bit odd I admit... I declare a temporary function inside the scope of - * _fnBuildHead and the click handler in order that the code presented here can be used - * twice - once for when bProcessing is enabled, and another time for when it is - * disabled, as we need to perform slightly different actions. - * Basically the issue here is that the Javascript engine in modern browsers don't - * appear to allow the rendering engine to update the display while it is still excuting - * it's thread (well - it does but only after long intervals). This means that the - * 'processing' display doesn't appear for a table sort. To break the js thread up a bit - * I force an execution break by using setTimeout - but this breaks the expected - * thread continuation for the end-developer's point of view (their code would execute - * too early), so we on;y do it when we absolutely have to. - */ - var fnInnerSorting = function () { - var iColumn, iNextSort; - - /* If the shift key is pressed then we are multipe column sorting */ - if ( e.shiftKey ) - { - /* Are we already doing some kind of sort on this column? */ - var bFound = false; - for ( var i=0 ; i= iColumns ) - { - for ( i=0 ; i 4096 ) /* Magic 10 for padding */ - { - var aCookies =document.cookie.split(';'); - for ( var i=0, iLen=aCookies.length ; i=0 ; i-- ) - { - aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) ); - } - - if ( sTrigger !== null ) - { - $(oSettings.oInstance).trigger(sTrigger, aArgs); - } - - return aRet; - } - - - /** - * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other - * library, then we use that as it is fast, safe and accurate. If the function isn't - * available then we need to built it ourselves - the insperation for this function comes - * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is - * not perfect and absolutely should not be used as a replacement to json2.js - but it does - * do what we need, without requiring a dependency for DataTables. - * @param {object} o JSON object to be converted - * @returns {string} JSON string - * @memberof DataTable#oApi - */ - var _fnJsonString = (window.JSON) ? JSON.stringify : function( o ) - { - /* Not an object or array */ - var sType = typeof o; - if (sType !== "object" || o === null) - { - // simple data type - if (sType === "string") - { - o = '"'+o+'"'; - } - return o+""; - } - - /* If object or array, need to recurse over it */ - var - sProp, mValue, - json = [], - bArr = $.isArray(o); - - for (sProp in o) - { - mValue = o[sProp]; - sType = typeof mValue; - - if (sType === "string") - { - mValue = '"'+mValue+'"'; - } - else if (sType === "object" && mValue !== null) - { - mValue = _fnJsonString(mValue); - } - - json.push((bArr ? "" : '"'+sProp+'":') + mValue); - } - - return (bArr ? "[" : "{") + json + (bArr ? "]" : "}"); - }; - - - - - /** - * Perform a jQuery selector action on the table's TR elements (from the tbody) and - * return the resulting jQuery object. - * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on - * @param {object} [oOpts] Optional parameters for modifying the rows to be included - * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter - * criterion ("applied") or all TR elements (i.e. no filter). - * @param {string} [oOpts.order=current] Order of the TR elements in the processed array. - * Can be either 'current', whereby the current sorting of the table is used, or - * 'original' whereby the original order the data was read into the table is used. - * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page - * ("current") or not ("all"). If 'current' is given, then order is assumed to be - * 'current' and filter is 'applied', regardless of what they might be given as. - * @returns {object} jQuery object, filtered by the given selector. - * @dtopt API - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Highlight every second row - * oTable.$('tr:odd').css('backgroundColor', 'blue'); - * } ); - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable(); - * - * // Filter to rows with 'Webkit' in them, add a background colour and then - * // remove the filter, thus highlighting the 'Webkit' rows only. - * oTable.fnFilter('Webkit'); - * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue'); - * oTable.fnFilter(''); - * } ); - */ - this.$ = function ( sSelector, oOpts ) - { - var i, iLen, a = []; - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - if ( !oOpts ) - { - oOpts = {}; - } - - oOpts = $.extend( {}, { - "filter": "none", // applied - "order": "current", // "original" - "page": "all" // current - }, oOpts ); - - // Current page implies that order=current and fitler=applied, since it is fairly - // senseless otherwise - if ( oOpts.page == 'current' ) - { - for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i - *
  • 1D array of data - add a single row with the data provided
  • - *
  • 2D array of arrays - add multiple rows in a single call
  • - *
  • object - data object when using mDataProp
  • - *
  • array of objects - multiple data objects when using mDataProp
  • - * - * @param {bool} [bRedraw=true] redraw the table or not - * @returns {array} An array of integers, representing the list of indexes in - * aoData ({@link DataTable.models.oSettings}) that have been added to - * the table. - * @dtopt API - * - * @example - * // Global var for counter - * var giCount = 2; - * - * $(document).ready(function() { - * $('#example').dataTable(); - * } ); - * - * function fnClickAddRow() { - * $('#example').dataTable().fnAddData( [ - * giCount+".1", - * giCount+".2", - * giCount+".3", - * giCount+".4" ] - * ); - * - * giCount++; - * } - */ - this.fnAddData = function( mData, bRedraw ) - { - if ( mData.length === 0 ) - { - return []; - } - - var aiReturn = []; - var iTest; - - /* Find settings from table node */ - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - - /* Check if we want to add multiple rows or not */ - if ( typeof mData[0] === "object" && mData[0] !== null ) - { - for ( var i=0 ; i= oSettings.aiDisplay.length ) - { - oSettings._iDisplayStart -= oSettings._iDisplayLength; - if ( oSettings._iDisplayStart < 0 ) - { - oSettings._iDisplayStart = 0; - } - } - - if ( bRedraw === undefined || bRedraw ) - { - _fnCalculateEnd( oSettings ); - _fnDraw( oSettings ); - } - - return oData; - }; - - - /** - * Restore the table to it's original state in the DOM by removing all of DataTables - * enhancements, alterations to the DOM structure of the table and event listeners. - * @param {boolean} [bRemove=false] Completely remove the table from the DOM - * @dtopt API - * - * @example - * $(document).ready(function() { - * // This example is fairly pointless in reality, but shows how fnDestroy can be used - * var oTable = $('#example').dataTable(); - * oTable.fnDestroy(); - * } ); - */ - this.fnDestroy = function ( bRemove ) - { - var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); - var nOrig = oSettings.nTableWrapper.parentNode; - var nBody = oSettings.nTBody; - var i, iLen; - - bRemove = (bRemove===undefined) ? false : true; - - /* Flag to note that the table is currently being destroyed - no action should be taken */ - oSettings.bDestroying = true; - - /* Fire off the destroy callbacks for plug-ins etc */ - _fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] ); - - /* Restore hidden columns */ - for ( i=0, iLen=oSettings.aoColumns.length ; itr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); - - /* When scrolling we had to break the table up - restore it */ - if ( oSettings.nTable != oSettings.nTHead.parentNode ) - { - $(oSettings.nTable).children('thead').remove(); - oSettings.nTable.appendChild( oSettings.nTHead ); - } - - if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode ) - { - $(oSettings.nTable).children('tfoot').remove(); - oSettings.nTable.appendChild( oSettings.nTFoot ); - } - - /* Remove the DataTables generated nodes, events and classes */ - oSettings.nTable.parentNode.removeChild( oSettings.nTable ); - $(oSettings.nTableWrapper).remove(); - - oSettings.aaSorting = []; - oSettings.aaSortingFixed = []; - _fnSortingClasses( oSettings ); - - $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') ); - - $('th, td', oSettings.nTHead).removeClass( [ - oSettings.oClasses.sSortable, - oSettings.oClasses.sSortableAsc, - oSettings.oClasses.sSortableDesc, - oSettings.oClasses.sSortableNone ].join(' ') - ); - if ( oSettings.bJUI ) - { - $('th span.'+oSettings.oClasses.sSortIcon - + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); - - $('th, td', oSettings.nTHead).each( function () { - var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this); - var kids = jqWrapper.contents(); - $(this).append( kids ); - jqWrapper.remove(); - } ); - } - - /* Add the TR elements back into the table in their original order */ - if ( !bRemove && oSettings.nTableReinsertBefore ) - { - nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore ); - } - else if ( !bRemove ) - { - nOrig.appendChild( oSettings.nTable ); - } - - for ( i=0, iLen=oSettings.aoData.length ; i
    for filtering data. - *
      - *
    • - * Function input parameters: - *
        - *
      • {*} Data from the column cell to be prepared for filtering
      • - *
      - *
    • - *
    • - * Function return: - *
        - *
      • {string|null} Formatted string that will be used for the filtering.
      • - *
      - * - *
    - * - * Note that as of v1.9, it is typically preferable to use mDataProp to prepare data for - * the different uses that DataTables can put the data to. Specifically mDataProp when - * used as a function will give you a 'type' (sorting, filtering etc) that you can use to - * prepare the data as required for the different types. As such, this method is deprecated. - * @type object - * @default {} - * @deprecated - * - * @example - * $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) { - * return sData.replace(/\n/g," ").replace( /<.*?>/g, "" ); - * } - */ - "ofnSearch": {}, - - - /** - * Container for all private functions in DataTables so they can be exposed externally - * @type object - * @default {} - */ - "oApi": {}, - - - /** - * Storage for the various classes that DataTables uses - * @type object - * @default {} - */ - "oStdClasses": {}, - - - /** - * Storage for the various classes that DataTables uses - jQuery UI suitable - * @type object - * @default {} - */ - "oJUIClasses": {}, - - - /** - * Pagination plug-in methods - The style and controls of the pagination can significantly - * impact on how the end user interacts with the data in your table, and DataTables allows - * the addition of pagination controls by extending this object, which can then be enabled - * through the sPaginationType initialisation parameter. Each pagination type that - * is added is an object (the property name of which is what sPaginationType refers - * to) that has two properties, both methods that are used by DataTables to update the - * control's state. - *
      - *
    • - * fnInit - Initialisation of the paging controls. Called only during initialisation - * of the table. It is expected that this function will add the required DOM elements - * to the page for the paging controls to work. The element pointer - * 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging - * controls (note that this is a 2D array to allow for multiple instances of each - * DataTables DOM element). It is suggested that you add the controls to this element - * as children - *
        - *
      • - * Function input parameters: - *
          - *
        • {object} DataTables settings object: see {@link DataTable.models.oSettings}.
        • - *
        • {node} Container into which the pagination controls must be inserted
        • - *
        • {function} Draw callback function - whenever the controls cause a page - * change, this method must be called to redraw the table.
        • - *
        - *
      • - *
      • - * Function return: - *
          - *
        • No return required
        • - *
        - * - *
      - * - *
    • - * fnInit - This function is called whenever the paging status of the table changes and is - * typically used to update classes and/or text of the paging controls to reflex the new - * status. - *
        - *
      • - * Function input parameters: - *
          - *
        • {object} DataTables settings object: see {@link DataTable.models.oSettings}.
        • - *
        • {function} Draw callback function - in case you need to redraw the table again - * or attach new event listeners
        • - *
        - *
      • - *
      • - * Function return: - *
          - *
        • No return required
        • - *
        - * - *
      - * - *
    - * @type object - * @default {} - * - * @example - * $.fn.dataTableExt.oPagination.four_button = { - * "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { - * nFirst = document.createElement( 'span' ); - * nPrevious = document.createElement( 'span' ); - * nNext = document.createElement( 'span' ); - * nLast = document.createElement( 'span' ); - * - * nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) ); - * nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) ); - * nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) ); - * nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) ); - * - * nFirst.className = "paginate_button first"; - * nPrevious.className = "paginate_button previous"; - * nNext.className="paginate_button next"; - * nLast.className = "paginate_button last"; - * - * nPaging.appendChild( nFirst ); - * nPaging.appendChild( nPrevious ); - * nPaging.appendChild( nNext ); - * nPaging.appendChild( nLast ); - * - * $(nFirst).click( function () { - * oSettings.oApi._fnPageChange( oSettings, "first" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nPrevious).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "previous" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nNext).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "next" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nLast).click( function() { - * oSettings.oApi._fnPageChange( oSettings, "last" ); - * fnCallbackDraw( oSettings ); - * } ); - * - * $(nFirst).bind( 'selectstart', function () { return false; } ); - * $(nPrevious).bind( 'selectstart', function () { return false; } ); - * $(nNext).bind( 'selectstart', function () { return false; } ); - * $(nLast).bind( 'selectstart', function () { return false; } ); - * }, - * - * "fnUpdate": function ( oSettings, fnCallbackDraw ) { - * if ( !oSettings.aanFeatures.p ) { - * return; - * } - * - * // Loop over each instance of the pager - * var an = oSettings.aanFeatures.p; - * for ( var i=0, iLen=an.length ; i - *
  • - * Function input parameters: - *
      - *
    • {*} Data to compare to the second parameter
    • - *
    • {*} Data to compare to the first parameter
    • - *
    - *
  • - *
  • - * Function return: - *
      - *
    • {int} Sorting match: <0 if first parameter should be sorted lower than - * the second parameter, ===0 if the two parameters are equal and >0 if - * the first parameter should be sorted height than the second parameter.
    • - *
    - * - * - * @type object - * @default {} - * - * @example - * // Case-sensitive string sorting, with no pre-formatting method - * $.extend( $.fn.dataTableExt.oSort, { - * "string-case-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-case-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - * - * @example - * // Case-insensitive string sorting, with pre-formatting - * $.extend( $.fn.dataTableExt.oSort, { - * "string-pre": function(x) { - * return x.toLowerCase(); - * }, - * "string-asc": function(x,y) { - * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - * }, - * "string-desc": function(x,y) { - * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - * } - * } ); - */ - "oSort": {}, - - - /** - * Version string for plug-ins to check compatibility. Allowed format is - * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and - * e are optional - * @type string - * @default Version number - */ - "sVersion": DataTable.version, - - - /** - * How should DataTables report an error. Can take the value 'alert' or 'throw' - * @type string - * @default alert - */ - "sErrMode": "alert", - - - /** - * Store information for DataTables to access globally about other instances - * @namespace - * @private - */ - "_oExternConfig": { - /* int:iNextUnique - next unique number for an instance */ - "iNextUnique": 0 - } - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * search information for the global filter and individual column filters. - * @namespace - */ - DataTable.models.oSearch = { - /** - * Flag to indicate if the filtering should be case insensitive or not - * @type boolean - * @default true - */ - "bCaseInsensitive": true, - - /** - * Applied search term - * @type string - * @default Empty string - */ - "sSearch": "", - - /** - * Flag to indicate if the search term should be interpreted as a - * regular expression (true) or not (false) and therefore and special - * regex characters escaped. - * @type boolean - * @default false - */ - "bRegex": false, - - /** - * Flag to indicate if DataTables is to use its smart filtering or not. - * @type boolean - * @default true - */ - "bSmart": true - }; - - - - - /** - * Template object for the way in which DataTables holds information about - * each individual row. This is the object format used for the settings - * aoData array. - * @namespace - */ - DataTable.models.oRow = { - /** - * TR element for the row - * @type node - * @default null - */ - "nTr": null, - - /** - * Data object from the original data source for the row. This is either - * an array if using the traditional form of DataTables, or an object if - * using mDataProp options. The exact type will depend on the passed in - * data from the data source, or will be an array if using DOM a data - * source. - * @type array|object - * @default [] - */ - "_aData": [], - - /** - * Sorting data cache - this array is ostensibly the same length as the - * number of columns (although each index is generated only as it is - * needed), and holds the data that is used for sorting each column in the - * row. We do this cache generation at the start of the sort in order that - * the formatting of the sort data need be done only once for each cell - * per sort. This array should not be read from or written to by anything - * other than the master sorting methods. - * @type array - * @default [] - * @private - */ - "_aSortData": [], - - /** - * Array of TD elements that are cached for hidden rows, so they can be - * reinserted into the table if a column is made visible again (or to act - * as a store if a column is made hidden). Only hidden columns have a - * reference in the array. For non-hidden columns the value is either - * undefined or null. - * @type array nodes - * @default [] - * @private - */ - "_anHidden": [], - - /** - * Cache of the class name that DataTables has applied to the row, so we - * can quickly look at this variable rather than needing to do a DOM check - * on className for the nTr property. - * @type string - * @default Empty string - * @private - */ - "_sRowStripe": "" - }; - - - - /** - * Template object for the column information object in DataTables. This object - * is held in the settings aoColumns array and contains all the information that - * DataTables needs about each individual column. - * - * Note that this object is related to {@link DataTable.defaults.columns} - * but this one is the internal data store for DataTables's cache of columns. - * It should NOT be manipulated outside of DataTables. Any configuration should - * be done through the initialisation options. - * @namespace - */ - DataTable.models.oColumn = { - /** - * A list of the columns that sorting should occur on when this column - * is sorted. That this property is an array allows multi-column sorting - * to be defined for a column (for example first name / last name columns - * would benefit from this). The values are integers pointing to the - * columns to be sorted on (typically it will be a single integer pointing - * at itself, but that doesn't need to be the case). - * @type array - */ - "aDataSort": null, - - /** - * Define the sorting directions that are applied to the column, in sequence - * as the column is repeatedly sorted upon - i.e. the first value is used - * as the sorting direction when the column if first sorted (clicked on). - * Sort it again (click again) and it will move on to the next index. - * Repeat until loop. - * @type array - */ - "asSorting": null, - - /** - * Flag to indicate if the column is searchable, and thus should be included - * in the filtering or not. - * @type boolean - */ - "bSearchable": null, - - /** - * Flag to indicate if the column is sortable or not. - * @type boolean - */ - "bSortable": null, - - /** - * When using fnRender, you have two options for what to do with the data, - * and this property serves as the switch. Firstly, you can have the sorting - * and filtering use the rendered value (true - default), or you can have - * the sorting and filtering us the original value (false). - * - * *NOTE* It is it is advisable now to use mDataProp as a function and make - * use of the 'type' that it gives, allowing (potentially) different data to - * be used for sorting, filtering, display and type detection. - * @type boolean - * @deprecated - */ - "bUseRendered": null, - - /** - * Flag to indicate if the column is currently visible in the table or not - * @type boolean - */ - "bVisible": null, - - /** - * Flag to indicate to the type detection method if the automatic type - * detection should be used, or if a column type (sType) has been specified - * @type boolean - * @default true - * @private - */ - "_bAutoType": true, - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to fnRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available (since it is not when fnRender is called). - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @default null - */ - "fnCreatedCell": null, - - /** - * Function to get data from a cell in a column. You should never - * access data directly through _aData internally in DataTables - always use - * the method attached to this property. It allows mDataProp to function as - * required. This function is automatically assigned by the column - * initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {string} sSpecific The specific data type you want to get - - * 'display', 'type' 'filter' 'sort' - * @returns {*} The data for the cell from the given row's data - * @default null - */ - "fnGetData": null, - - /** - * Custom display function that will be called for the display of each cell - * in this column. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @returns {string} The string you which to use in the display - * @default null - */ - "fnRender": null, - - /** - * Function to set data for a cell in the column. You should never - * set the data directly to _aData internally in DataTables - always use - * this method. It allows mDataProp to function as required. This function - * is automatically assigned by the column initialisation method - * @type function - * @param {array|object} oData The data array/object for the array - * (i.e. aoData[]._aData) - * @param {*} sValue Value to set - * @default null - */ - "fnSetData": null, - - /** - * Property to read the value for the cells in the column from the data - * source array / object. If null, then the default content is used, if a - * function is given then the return from the function is used. - * @type function|int|string|null - * @default null - */ - "mDataProp": null, - - /** - * Unique header TH/TD element for this column - this is what the sorting - * listener is attached to (if sorting is enabled.) - * @type node - * @default null - */ - "nTh": null, - - /** - * Unique footer TH/TD element for this column (if there is one). Not used - * in DataTables as such, but can be used for plug-ins to reference the - * footer for each column. - * @type node - * @default null - */ - "nTf": null, - - /** - * The class to apply to all TD elements in the table's TBODY for the column - * @type string - * @default null - */ - "sClass": null, - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * @type string - */ - "sContentPadding": null, - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mDataProp - * is set to null, or because the data source itself is null). - * @type string - * @default null - */ - "sDefaultContent": null, - - /** - * Name for the column, allowing reference to the column by name as well as - * by index (needs a lookup to work by name). - * @type string - */ - "sName": null, - - /** - * Custom sorting data type - defines which of the available plug-ins in - * afnSortData the custom sorting will use - if any is defined. - * @type string - * @default std - */ - "sSortDataType": 'std', - - /** - * Class to be applied to the header element when sorting on this column - * @type string - * @default null - */ - "sSortingClass": null, - - /** - * Class to be applied to the header element when sorting on this column - - * when jQuery UI theming is used. - * @type string - * @default null - */ - "sSortingClassJUI": null, - - /** - * Title of the column - what is seen in the TH element (nTh). - * @type string - */ - "sTitle": null, - - /** - * Column sorting and filtering type - * @type string - * @default null - */ - "sType": null, - - /** - * Width of the column - * @type string - * @default null - */ - "sWidth": null, - - /** - * Width of the column when it was first "encountered" - * @type string - * @default null - */ - "sWidthOrig": null - }; - - - - /** - * Initialisation options that can be given to DataTables at initialisation - * time. - * @namespace - */ - DataTable.defaults = { - /** - * An array of data to use for the table, passed in at initialisation which - * will be used in preference to any data which is already in the DOM. This is - * particularly useful for constructing tables purely in Javascript, for - * example with a custom Ajax call. - * @type array - * @default null - * @dtopt Option - * - * @example - * // Using a 2D array data source - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'], - * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'], - * ], - * "aoColumns": [ - * { "sTitle": "Engine" }, - * { "sTitle": "Browser" }, - * { "sTitle": "Platform" }, - * { "sTitle": "Version" }, - * { "sTitle": "Grade" } - * ] - * } ); - * } ); - * - * @example - * // Using an array of objects as a data source (mDataProp) - * $(document).ready( function () { - * $('#example').dataTable( { - * "aaData": [ - * { - * "engine": "Trident", - * "browser": "Internet Explorer 4.0", - * "platform": "Win 95+", - * "version": 4, - * "grade": "X" - * }, - * { - * "engine": "Trident", - * "browser": "Internet Explorer 5.0", - * "platform": "Win 95+", - * "version": 5, - * "grade": "C" - * } - * ], - * "aoColumns": [ - * { "sTitle": "Engine", "mDataProp": "engine" }, - * { "sTitle": "Browser", "mDataProp": "browser" }, - * { "sTitle": "Platform", "mDataProp": "platform" }, - * { "sTitle": "Version", "mDataProp": "version" }, - * { "sTitle": "Grade", "mDataProp": "grade" } - * ] - * } ); - * } ); - */ - "aaData": null, - - - /** - * If sorting is enabled, then DataTables will perform a first pass sort on - * initialisation. You can define which column(s) the sort is performed upon, - * and the sorting direction, with this variable. The aaSorting array should - * contain an array for each column to be sorted initially containing the - * column's index and a direction string ('asc' or 'desc'). - * @type array - * @default [[0,'asc']] - * @dtopt Option - * - * @example - * // Sort by 3rd column first, and then 4th column - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [[2,'asc'], [3,'desc']] - * } ); - * } ); - * - * // No initial sorting - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSorting": [] - * } ); - * } ); - */ - "aaSorting": [[0,'asc']], - - - /** - * This parameter is basically identical to the aaSorting parameter, but - * cannot be overridden by user interaction with the table. What this means - * is that you could have a column (visible or hidden) which the sorting will - * always be forced on first - any sorting after that (from the user) will - * then be performed as required. This can be useful for grouping rows - * together. - * @type array - * @default null - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aaSortingFixed": [[0,'asc']] - * } ); - * } ) - */ - "aaSortingFixed": null, - - - /** - * This parameter allows you to readily specify the entries in the length drop - * down menu that DataTables shows when pagination is enabled. It can be - * either a 1D array of options which will be used for both the displayed - * option and the value, or a 2D array which will use the array in the first - * position as the value, and the array in the second position as the - * displayed options (useful for language strings such as 'All'). - * @type array - * @default [ 10, 25, 50, 100 ] - * @dtopt Option - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] - * } ); - * } ); - * - * @example - * // Setting the default display length as well as length menu - * // This is likely to be wanted if you remove the '10' option which - * // is the iDisplayLength default. - * $(document).ready(function() { - * $('#example').dataTable( { - * "iDisplayLength": 25, - * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]] - * } ); - * } ); - */ - "aLengthMenu": [ 10, 25, 50, 100 ], - - - /** - * The aoColumns option in the initialisation parameter allows you to define - * details about the way individual columns behave. For a full list of - * column options that can be set, please see - * {@link DataTable.defaults.columns}. Note that if you use aoColumns to - * define your columns, you must have an entry in the array for every single - * column that you have in your table (these can be null if you don't which - * to specify any options). - * @member - */ - "aoColumns": null, - - /** - * Very similar to aoColumns, aoColumnDefs allows you to target a specific - * column, multiple columns, or all columns, using the aTargets property of - * each object in the array. This allows great flexibility when creating - * tables, as the aoColumnDefs arrays can be of any length, targeting the - * columns you specifically want. aoColumnDefs may use any of the column - * options available: {@link DataTable.defaults.columns}, but it _must_ - * have aTargets defined in each object in the array. Values in the aTargets - * array may be: - *
      - *
    • a string - class name will be matched on the TH for the column
    • - *
    • 0 or a positive integer - column index counting from the left
    • - *
    • a negative integer - column index counting from the right
    • - *
    • the string "_all" - all columns (i.e. assign a default)
    • - *
    - * @member - */ - "aoColumnDefs": null, - - - /** - * Basically the same as oSearch, this parameter defines the individual column - * filtering state at initialisation time. The array must be of the same size - * as the number of columns, and each element be an object with the parameters - * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also - * accepted and the default will be used. - * @type array - * @default [] - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "aoSearchCols": [ - * null, - * { "sSearch": "My filter" }, - * null, - * { "sSearch": "^[0-9]", "bEscapeRegex": false } - * ] - * } ); - * } ) - */ - "aoSearchCols": [], - - - /** - * An array of CSS classes that should be applied to displayed rows. This - * array may be of any length, and DataTables will apply each class - * sequentially, looping when required. - * @type array - * @default null Will take the values determinted by the oClasses.sStripe* - * options - * @dtopt Option - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ] - * } ); - * } ) - */ - "asStripeClasses": null, - - - /** - * Enable or disable automatic column width calculation. This can be disabled - * as an optimisation (it takes some time to calculate the widths) if the - * tables widths are passed in using aoColumns. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bAutoWidth": false - * } ); - * } ); - */ - "bAutoWidth": true, - - - /** - * Deferred rendering can provide DataTables with a huge speed boost when you - * are using an Ajax or JS data source for the table. This option, when set to - * true, will cause DataTables to defer the creation of the table elements for - * each row until they are needed for a draw - saving a significant amount of - * time. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/arrays.txt", - * "bDeferRender": true - * } ); - * } ); - */ - "bDeferRender": false, - - - /** - * Replace a DataTable which matches the given selector and replace it with - * one which has the properties of the new initialisation object passed. If no - * table matches the selector, then the new DataTable will be constructed as - * per normal. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * - * // Some time later.... - * $('#example').dataTable( { - * "bFilter": false, - * "bDestroy": true - * } ); - * } ); - */ - "bDestroy": false, - - - /** - * Enable or disable filtering of data. Filtering in DataTables is "smart" in - * that it allows the end user to input multiple words (space separated) and - * will match a row containing those words, even if not in the order that was - * specified (this allow matching across multiple columns). Note that if you - * wish to use filtering in DataTables this must remain 'true' - to remove the - * default filtering input box and retain filtering abilities, please use - * {@link DataTable.defaults.sDom}. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bFilter": false - * } ); - * } ); - */ - "bFilter": true, - - - /** - * Enable or disable the table information display. This shows information - * about the data that is currently visible on the page, including information - * about filtered data if that action is being performed. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bInfo": false - * } ); - * } ); - */ - "bInfo": true, - - - /** - * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some - * slightly different and additional mark-up from what DataTables has - * traditionally used). - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "bJQueryUI": true - * } ); - * } ); - */ - "bJQueryUI": false, - - - /** - * Allows the end user to select the size of a formatted page from a select - * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate). - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bLengthChange": false - * } ); - * } ); - */ - "bLengthChange": true, - - - /** - * Enable or disable pagination. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bPaginate": false - * } ); - * } ); - */ - "bPaginate": true, - - - /** - * Enable or disable the display of a 'processing' indicator when the table is - * being processed (e.g. a sort). This is particularly useful for tables with - * large amounts of data where it can take a noticeable amount of time to sort - * the entries. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bProcessing": true - * } ); - * } ); - */ - "bProcessing": false, - - - /** - * Retrieve the DataTables object for the given selector. Note that if the - * table has already been initialised, this parameter will cause DataTables - * to simply return the object that has already been set up - it will not take - * account of any changes you might have made to the initialisation object - * passed to DataTables (setting this parameter to true is an acknowledgement - * that you understand this). bDestroy can be used to reinitialise a table if - * you need. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready(function() { - * initTable(); - * tableActions(); - * } ); - * - * function initTable () - * { - * return $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false, - * "bRetrieve": true - * } ); - * } - * - * function tableActions () - * { - * var oTable = initTable(); - * // perform API operations with oTable - * } - */ - "bRetrieve": false, - - - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * @type boolean - * @default true - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bScrollAutoCss": false, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollAutoCss": true, - - - /** - * When vertical (y) scrolling is enabled, DataTables will force the height of - * the table's viewport to the given height at all times (useful for layout). - * However, this can look odd when filtering data down to a small data set, - * and the footer is left "floating" further down. This parameter (when - * enabled) will cause DataTables to collapse the table's viewport down when - * the result set will fit within the given Y height. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sScrollY": "200", - * "bScrollCollapse": true - * } ); - * } ); - */ - "bScrollCollapse": false, - - - /** - * Enable infinite scrolling for DataTables (to be used in combination with - * sScrollY). Infinite scrolling means that DataTables will continually load - * data as a user scrolls through a table, which is very useful for large - * dataset. This cannot be used with pagination, which is automatically - * disabled. Note - the Scroller extra for DataTables is recommended in - * in preference to this option. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px" - * } ); - * } ); - */ - "bScrollInfinite": false, - - - /** - * Configure DataTables to use server-side processing. Note that the - * sAjaxSource parameter must also be given in order to give DataTables a - * source to obtain the required data for each draw. - * @type boolean - * @default false - * @dtopt Features - * @dtopt Server-side - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "xhr.php" - * } ); - * } ); - */ - "bServerSide": false, - - - /** - * Enable or disable sorting of columns. Sorting of individual columns can be - * disabled by the "bSortable" option for each column. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSort": false - * } ); - * } ); - */ - "bSort": true, - - - /** - * Allows control over whether DataTables should use the top (true) unique - * cell that is found for a single column, or the bottom (false - default). - * This is useful when using complex headers. - * @type boolean - * @default false - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bSortCellsTop": true - * } ); - * } ); - */ - "bSortCellsTop": false, - - - /** - * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and - * 'sorting_3' to the columns which are currently being sorted on. This is - * presented as a feature switch as it can increase processing time (while - * classes are removed and added) so for large data sets you might want to - * turn this off. - * @type boolean - * @default true - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bSortClasses": false - * } ); - * } ); - */ - "bSortClasses": true, - - - /** - * Enable or disable state saving. When enabled a cookie will be used to save - * table display information such as pagination information, display length, - * filtering and sorting. As such when the end user reloads the page the - * display display will match what thy had previously set up. - * @type boolean - * @default false - * @dtopt Features - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "bStateSave": true - * } ); - * } ); - */ - "bStateSave": false, - - - /** - * Customise the cookie and / or the parameters being stored when using - * DataTables with state saving enabled. This function is called whenever - * the cookie is modified, and it expects a fully formed cookie string to be - * returned. Note that the data object passed in is a Javascript object which - * must be converted to a string (JSON.stringify for example). - * @type function - * @param {string} sName Name of the cookie defined by DataTables - * @param {object} oData Data to be stored in the cookie - * @param {string} sExpires Cookie expires string - * @param {string} sPath Path of the cookie to set - * @returns {string} Cookie formatted string (which should be encoded by - * using encodeURIComponent()) - * @dtopt Callbacks - * - * @example - * $(document).ready( function () { - * $('#example').dataTable( { - * "fnCookieCallback": function (sName, oData, sExpires, sPath) { - * // Customise oData or sName or whatever else here - * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath; - * } - * } ); - * } ); - */ - "fnCookieCallback": null, - - - /** - * This function is called when a TR element is created (and all TD child - * elements have been inserted), or registered if using a DOM source, allowing - * manipulation of the TR element (adding classes etc). - * @type function - * @param {node} nRow "TR" element for the current row - * @param {array} aData Raw data array for this row - * @param {int} iDataIndex The index of this row in aoData - * @dtopt Callbacks - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "fnCreatedRow": function( nRow, aData, iDataIndex ) { - * // Bold the grade for all 'A' grade browsers - * if ( aData[4] == "A" ) - * { - * $('td:eq(4)', nRow).html( 'A' ); - * } - * } - * } ); - * } ); - */ - "fnCreatedRow": null, - - - /** - * This function is called on every 'draw' event, and allows you to - * dynamically modify any aspect you want about the created DOM. - * @type function - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnDrawCallback": function( oSettings ) { - * alert( 'DataTables has redrawn the table' ); - * } - * } ); - * } ); - */ - "fnDrawCallback": null, - - - /** - * Identical to fnHeaderCallback() but for the table footer this function - * allows you to modify the table footer on every 'draw' even. - * @type function - * @param {node} nFoot "TR" element for the footer - * @param {array} aData Full table data (as derived from the original HTML) - * @param {int} iStart Index for the current display starting point in the - * display array - * @param {int} iEnd Index for the current display ending point in the - * display array - * @param {array int} aiDisplay Index array to translate the visual position - * to the full data array - * @dtopt Callbacks - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) { - * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart; - * } - * } ); - * } ) - */ - "fnFooterCallback": null, - - - /** - * When rendering large numbers in the information element for the table - * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers - * to have a comma separator for the 'thousands' units (e.g. 1 million is - * rendered as "1,000,000") to help readability for the end user. This - * function will override the default method DataTables uses. - * @type function - * @member - * @param {int} iIn number to be formatted - * @returns {string} formatted string for DataTables to show the number - * @dtopt Callbacks - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "fnFormatNumber": function ( iIn ) { - * if ( iIn < 1000 ) { - * return iIn; - * } else { - * var - * s=(iIn+""), - * a=s.split(""), out="", - * iLen=s.length; - * - * for ( var i=0 ; i<iLen ; i++ ) { - * if ( i%3 === 0 && i !== 0 ) { - * out = "'"+out; - * } - * out = a[iLen-i-1]+out; - * } - * } - * return out; - * }; - * } ); - * } ); - */ - "fnFormatNumber": function ( iIn ) { - if ( iIn < 1000 ) - { - // A small optimisation for what is likely to be the majority of use cases - return iIn; - } - - var s=(iIn+""), a=s.split(""), out="", iLen=s.length; - - for ( var i=0 ; iA
    ' ); - * } - * } - * } ); - * } ); - */ - "fnRowCallback": null, - - - /** - * This parameter allows you to override the default function which obtains - * the data from the server ($.getJSON) so something more suitable for your - * application. For example you could use POST data, or pull information from - * a Gears or AIR database. - * @type function - * @member - * @param {string} sSource HTTP source to obtain the data from (sAjaxSource) - * @param {array} aoData A key/value pair object containing the data to send - * to the server - * @param {function} fnCallback to be called on completion of the data get - * process that will draw the data on the page. - * @param {object} oSettings DataTables settings object - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * // POST data to server - * $(document).ready(function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "xhr.php", - * "fnServerData": function ( sSource, aoData, fnCallback ) { - * $.ajax( { - * "dataType": 'json', - * "type": "POST", - * "url": sSource, - * "data": aoData, - * "success": fnCallback - * } ); - * } - * } ); - * } ); - */ - "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) { - oSettings.jqXHR = $.ajax( { - "url": sUrl, - "data": aoData, - "success": function (json) { - $(oSettings.oInstance).trigger('xhr', oSettings); - fnCallback( json ); - }, - "dataType": "json", - "cache": false, - "type": oSettings.sServerMethod, - "error": function (xhr, error, thrown) { - if ( error == "parsererror" ) { - oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+ - "server could not be parsed. This is caused by a JSON formatting error." ); - } - } - } ); - }, - - - /** - * It is often useful to send extra data to the server when making an Ajax - * request - for example custom filtering information, and this callback - * function makes it trivial to send extra information to the server. The - * passed in parameter is the data set that has been constructed by - * DataTables, and you can add to this or modify it as you require. - * @type function - * @param {array} aoData Data array (array of objects which are name/value - * pairs) that has been constructed by DataTables and will be sent to the - * server. In the case of Ajax sourced data with server-side processing - * this will be an empty array, for server-side processing there will be a - * significant number of parameters! - * @returns {undefined} Ensure that you modify the aoData array passed in, - * as this is passed by reference. - * @dtopt Callbacks - * @dtopt Server-side - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bProcessing": true, - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "fnServerParams": function ( aoData ) { - * aoData.push( { "name": "more_data", "value": "my_value" } ); - * } - * } ); - * } ); - */ - "fnServerParams": null, - - - /** - * Load the table state. With this function you can define from where, and how, the - * state of a table is loaded. By default DataTables will load from its state saving - * cookie, but you might wish to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @return {object} The DataTables state object to be loaded - * @dtopt Callbacks - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoad": function (oSettings, oData) { - * var o; - * - * // Send an Ajax request to the server to get the data. Note that - * // this is a synchronous request. - * $.ajax( { - * "url": "/state_load", - * "async": false, - * "dataType": "json", - * "success": function (json) { - * o = json; - * } - * } ); - * - * return o; - * } - * } ); - * } ); - */ - "fnStateLoad": function ( oSettings ) { - var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance ); - var oData; - - try { - oData = (typeof $.parseJSON === 'function') ? - $.parseJSON(sData) : eval( '('+sData+')' ); - } catch (e) { - oData = null; - } - - return oData; - }, - - - /** - * Callback which allows modification of the saved state prior to loading that state. - * This callback is called when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state. Note that for - * plug-in authors, you should use the 'stateLoadParams' event to load parameters for - * a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that is to be loaded - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never loaded - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } ); - * } ); - * - * @example - * // Disallow state loading by returning false - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoadParams": function (oSettings, oData) { - * return false; - * } ); - * } ); - */ - "fnStateLoadParams": null, - - - /** - * Callback that is called when the state has been loaded from the state saving method - * and the DataTables settings object has been modified as a result of the loaded state. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object that was loaded - * @dtopt Callbacks - * - * @example - * // Show an alert with the filtering value that was saved - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateLoaded": function (oSettings, oData) { - * alert( 'Saved filter was: '+oData.oSearch.sSearch ); - * } ); - * } ); - */ - "fnStateLoaded": null, - - - /** - * Save the table state. This function allows you to define where and how the state - * information for the table is stored - by default it will use a cookie, but you - * might want to use local storage (HTML5) or a server-side database. - * @type function - * @member - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSave": function (oSettings, oData) { - * // Send an Ajax request to the server with the state object - * $.ajax( { - * "url": "/state_save", - * "data": oData, - * "dataType": "json", - * "method": "POST" - * "success": function () {} - * } ); - * } - * } ); - * } ); - */ - "fnStateSave": function ( oSettings, oData ) { - this.oApi._fnCreateCookie( - oSettings.sCookiePrefix+oSettings.sInstance, - this.oApi._fnJsonString(oData), - oSettings.iCookieDuration, - oSettings.sCookiePrefix, - oSettings.fnCookieCallback - ); - }, - - - /** - * Callback which allows modification of the state to be saved. Called when the table - * has changed state a new state save is required. This method allows modification of - * the state saving object prior to actually doing the save, including addition or - * other state properties or modification. Note that for plug-in authors, you should - * use the 'stateSaveParams' event to save parameters for a plug-in. - * @type function - * @param {object} oSettings DataTables settings object - * @param {object} oData The state object to be saved - * @dtopt Callbacks - * - * @example - * // Remove a saved filter, so filtering is never saved - * $(document).ready(function() { - * $('#example').dataTable( { - * "bStateSave": true, - * "fnStateSaveParams": function (oSettings, oData) { - * oData.oSearch.sSearch = ""; - * } ); - * } ); - */ - "fnStateSaveParams": null, - - - /** - * Duration of the cookie which is used for storing session information. This - * value is given in seconds. - * @type int - * @default 7200 (2 hours) - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iCookieDuration": 60*60*24 // 1 day - * } ); - * } ) - */ - "iCookieDuration": 7200, - - - /** - * When enabled DataTables will not make a request to the server for the first - * page draw - rather it will use the data already on the page (no sorting etc - * will be applied to it), thus saving on an XHR at load time. iDeferLoading - * is used to indicate that deferred loading is required, but it is also used - * to tell DataTables how many records there are in the full table (allowing - * the information element and pagination to be displayed correctly). In the case - * where a filtering is applied to the table on initial load, this can be - * indicated by giving the parameter as an array, where the first element is - * the number of records available after filtering and the second element is the - * number of records without filtering (allowing the table information element - * to be shown correctly). - * @type int | array - * @default null - * @dtopt Options - * - * @example - * // 57 records available in the table, no filtering applied - * $(document).ready(function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": 57 - * } ); - * } ); - * - * @example - * // 57 records after filtering, 100 without filtering (an initial filter applied) - * $(document).ready(function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/server_processing.php", - * "iDeferLoading": [ 57, 100 ], - * "oSearch": { - * "sSearch": "my_filter" - * } - * } ); - * } ); - */ - "iDeferLoading": null, - - - /** - * Number of rows to display on a single page when using pagination. If - * feature enabled (bLengthChange) then the end user will be able to override - * this to a custom setting using a pop-up menu. - * @type int - * @default 10 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayLength": 50 - * } ); - * } ) - */ - "iDisplayLength": 10, - - - /** - * Define the starting point for data display when using DataTables with - * pagination. Note that this parameter is the number of records, rather than - * the page number, so if you have 10 records per page and want to start on - * the third page, it should be "20". - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "iDisplayStart": 20 - * } ); - * } ) - */ - "iDisplayStart": 0, - - - /** - * The scroll gap is the amount of scrolling that is left to go before - * DataTables will load the next 'page' of data automatically. You typically - * want a gap which is big enough that the scrolling will be smooth for the - * user, while not so large that it will load more data than need. - * @type int - * @default 100 - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bScrollInfinite": true, - * "bScrollCollapse": true, - * "sScrollY": "200px", - * "iScrollLoadGap": 50 - * } ); - * } ); - */ - "iScrollLoadGap": 100, - - - /** - * By default DataTables allows keyboard navigation of the table (sorting, paging, - * and filtering) by adding a tabindex attribute to the required elements. This - * allows you to tab through the controls and press the enter key to activate them. - * The tabindex is default 0, meaning that the tab follows the flow of the document. - * You can overrule this using this parameter if you wish. Use a value of -1 to - * disable built-in keyboard navigation. - * @type int - * @default 0 - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "iTabIndex": 1 - * } ); - * } ); - */ - "iTabIndex": 0, - - - /** - * All strings that DataTables uses in the user interface that it creates - * are defined in this object, allowing you to modified them individually or - * completely replace them all as required. - * @namespace - */ - "oLanguage": { - /** - * Strings that are used for WAI-ARIA labels and controls only (these are not - * actually visible on the page, but will be read by screenreaders, and thus - * must be internationalised as well). - * @namespace - */ - "oAria": { - /** - * ARIA label that is added to the table headers when the column may be - * sorted ascending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortAscending": " - click/return to sort ascending" - * } - * } - * } ); - * } ); - */ - "sSortAscending": ": activate to sort column ascending", - - /** - * ARIA label that is added to the table headers when the column may be - * sorted descending by activing the column (click or return when focused). - * Note that the column header is prefixed to this string. - * @type string - * @default : activate to sort column ascending - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oAria": { - * "sSortDescending": " - click/return to sort descending" - * } - * } - * } ); - * } ); - */ - "sSortDescending": ": activate to sort column descending" - }, - - /** - * Pagination string used by DataTables for the two built-in pagination - * control types ("two_button" and "full_numbers") - * @namespace - */ - "oPaginate": { - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the first page. - * @type string - * @default First - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sFirst": "First page" - * } - * } - * } ); - * } ); - */ - "sFirst": "First", - - - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the last page. - * @type string - * @default Last - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sLast": "Last page" - * } - * } - * } ); - * } ); - */ - "sLast": "Last", - - - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the next page. - * @type string - * @default Next - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sNext": "Next page" - * } - * } - * } ); - * } ); - */ - "sNext": "Next", - - - /** - * Text to use when using the 'full_numbers' type of pagination for the - * button to take the user to the previous page. - * @type string - * @default Previous - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "oPaginate": { - * "sPrevious": "Previous page" - * } - * } - * } ); - * } ); - */ - "sPrevious": "Previous" - }, - - /** - * This string is shown in preference to sZeroRecords when the table is - * empty of data (regardless of filtering). Note that this is an optional - * parameter - if it is not given, the value of sZeroRecords will be used - * instead (either the default or given value). - * @type string - * @default No data available in table - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sEmptyTable": "No data available in table" - * } - * } ); - * } ); - */ - "sEmptyTable": "No data available in table", - - - /** - * This string gives information to the end user about the information that - * is current on display on the page. The _START_, _END_ and _TOTAL_ - * variables are all dynamically replaced as the table display updates, and - * can be freely moved or removed as the language requirements change. - * @type string - * @default Showing _START_ to _END_ of _TOTAL_ entries - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)" - * } - * } ); - * } ); - */ - "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", - - - /** - * Display information string for when the table is empty. Typically the - * format of this string should match sInfo. - * @type string - * @default Showing 0 to 0 of 0 entries - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoEmpty": "No entries to show" - * } - * } ); - * } ); - */ - "sInfoEmpty": "Showing 0 to 0 of 0 entries", - - - /** - * When a user filters the information in a table, this string is appended - * to the information (sInfo) to give an idea of how strong the filtering - * is. The variable _MAX_ is dynamically updated. - * @type string - * @default (filtered from _MAX_ total entries) - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoFiltered": " - filtering from _MAX_ records" - * } - * } ); - * } ); - */ - "sInfoFiltered": "(filtered from _MAX_ total entries)", - - - /** - * If can be useful to append extra information to the info string at times, - * and this variable does exactly that. This information will be appended to - * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are - * being used) at all times. - * @type string - * @default Empty string - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoPostFix": "All records shown are derived from real information." - * } - * } ); - * } ); - */ - "sInfoPostFix": "", - - - /** - * DataTables has a build in number formatter (fnFormatNumber) which is used - * to format large numbers that are used in the table information. By - * default a comma is used, but this can be trivially changed to any - * character you wish with this parameter. - * @type string - * @default , - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sInfoThousands": "'" - * } - * } ); - * } ); - */ - "sInfoThousands": ",", - - - /** - * Detail the action that will be taken when the drop down menu for the - * pagination length option is changed. The '_MENU_' variable is replaced - * with a default select list of 10, 25, 50 and 100, and can be replaced - * with a custom select box if required. - * @type string - * @default Show _MENU_ entries - * @dtopt Language - * - * @example - * // Language change only - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": "Display _MENU_ records" - * } - * } ); - * } ); - * - * @example - * // Language and options change - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLengthMenu": 'Display records' - * } - * } ); - * } ); - */ - "sLengthMenu": "Show _MENU_ entries", - - - /** - * When using Ajax sourced data and during the first draw when DataTables is - * gathering the data, this message is shown in an empty row in the table to - * indicate to the end user the the data is being loaded. Note that this - * parameter is not used when loading data by server-side processing, just - * Ajax sourced data with client-side processing. - * @type string - * @default Loading... - * @dtopt Language - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sLoadingRecords": "Please wait - loading..." - * } - * } ); - * } ); - */ - "sLoadingRecords": "Loading...", - - - /** - * Text which is displayed when the table is processing a user action - * (usually a sort command or similar). - * @type string - * @default Processing... - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sProcessing": "DataTables is currently busy" - * } - * } ); - * } ); - */ - "sProcessing": "Processing...", - - - /** - * Details the actions that will be taken when the user types into the - * filtering input text box. The variable "_INPUT_", if used in the string, - * is replaced with the HTML text box for the filtering input allowing - * control over where it appears in the string. If "_INPUT_" is not given - * then the input box is appended to the string automatically. - * @type string - * @default Search: - * @dtopt Language - * - * @example - * // Input text box will be appended at the end automatically - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Filter records:" - * } - * } ); - * } ); - * - * @example - * // Specify where the filter should appear - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sSearch": "Apply filter _INPUT_ to table" - * } - * } ); - * } ); - */ - "sSearch": "Search:", - - - /** - * All of the language information can be stored in a file on the - * server-side, which DataTables will look up if this parameter is passed. - * It must store the URL of the language file, which is in a JSON format, - * and the object has the same properties as the oLanguage object in the - * initialiser object (i.e. the above parameters). Please refer to one of - * the example language files to see how this works in action. - * @type string - * @default Empty string - i.e. disabled - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt" - * } - * } ); - * } ); - */ - "sUrl": "", - - - /** - * Text shown inside the table records when the is no information to be - * displayed after filtering. sEmptyTable is shown when there is simply no - * information in the table at all (regardless of filtering). - * @type string - * @default No matching records found - * @dtopt Language - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "oLanguage": { - * "sZeroRecords": "No records to display" - * } - * } ); - * } ); - */ - "sZeroRecords": "No matching records found" - }, - - - /** - * This parameter allows you to have define the global filtering state at - * initialisation time. As an object the "sSearch" parameter must be - * defined, but all other parameters are optional. When "bRegex" is true, - * the search string will be treated as a regular expression, when false - * (default) it will be treated as a straight string. When "bSmart" - * DataTables will use it's smart filtering methods (to word match at - * any point in the data), when false this will not be done. - * @namespace - * @extends DataTable.models.oSearch - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "oSearch": {"sSearch": "Initial search"} - * } ); - * } ) - */ - "oSearch": $.extend( {}, DataTable.models.oSearch ), - - - /** - * By default DataTables will look for the property 'aaData' when obtaining - * data from an Ajax source or for server-side processing - this parameter - * allows that property to be changed. You can use Javascript dotted object - * notation to get a data source for multiple levels of nesting. - * @type string - * @default aaData - * @dtopt Options - * @dtopt Server-side - * - * @example - * // Get data from { "data": [...] } - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data" - * } ); - * } ); - * - * @example - * // Get data from { "data": { "inner": [...] } } - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/data.txt", - * "sAjaxDataProp": "data.inner" - * } ); - * } ); - */ - "sAjaxDataProp": "aaData", - - - /** - * You can instruct DataTables to load data from an external source using this - * parameter (use aData if you want to pass data in you already have). Simply - * provide a url a JSON object can be obtained from. This object must include - * the parameter 'aaData' which is the data source for the table. - * @type string - * @default null - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php" - * } ); - * } ) - */ - "sAjaxSource": null, - - - /** - * This parameter can be used to override the default prefix that DataTables - * assigns to a cookie when state saving is enabled. - * @type string - * @default SpryMedia_DataTables_ - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sCookiePrefix": "my_datatable_", - * } ); - * } ); - */ - "sCookiePrefix": "SpryMedia_DataTables_", - - - /** - * This initialisation variable allows you to specify exactly where in the - * DOM you want DataTables to inject the various controls it adds to the page - * (for example you might want the pagination controls at the top of the - * table). DIV elements (with or without a custom class) can also be added to - * aid styling. The follow syntax is used: - *
      - *
    • The following options are allowed: - *
        - *
      • 'l' - Length changing
      • 'f' - Filtering input - *
      • 't' - The table!
      • - *
      • 'i' - Information
      • - *
      • 'p' - Pagination
      • - *
      • 'r' - pRocessing
      • - *
      - *
    • - *
    • The following constants are allowed: - *
        - *
      • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
      • - *
      • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
      • - *
      - *
    • - *
    • The following syntax is expected: - *
        - *
      • '<' and '>' - div elements
      • - *
      • '<"class" and '>' - div with a class
      • - *
      • '<"#id" and '>' - div with an ID
      • - *
      - *
    • - *
    • Examples: - *
        - *
      • '<"wrapper"flipt>'
      • - *
      • '<lf<t>ip>'
      • - *
      - *
    • - *
    - * @type string - * @default lfrtip (when bJQueryUI is false) or - * <"H"lfr>t<"F"ip> (when bJQueryUI is true) - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sDom": '<"top"i>rt<"bottom"flp><"clear"&lgt;' - * } ); - * } ); - */ - "sDom": "lfrtip", - - - /** - * DataTables features two different built-in pagination interaction methods - * ('two_button' or 'full_numbers') which present different page controls to - * the end user. Further methods can be added using the API (see below). - * @type string - * @default two_button - * @dtopt Options - * - * @example - * $(document).ready( function() { - * $('#example').dataTable( { - * "sPaginationType": "full_numbers" - * } ); - * } ) - */ - "sPaginationType": "two_button", - - - /** - * Enable horizontal scrolling. When a table is too wide to fit into a certain - * layout, or you have a large number of columns in the table, you can enable - * x-scrolling to show the table in a viewport, which can be scrolled. This - * property can be any CSS unit, or a number (in which case it will be treated - * as a pixel measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Features - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "bScrollCollapse": true - * } ); - * } ); - */ - "sScrollX": "", - - - /** - * This property can be used to force a DataTable to use more width than it - * might otherwise do when x-scrolling is enabled. For example if you have a - * table which requires to be well spaced, this parameter is useful for - * "over-sizing" the table, and thus forcing scrolling. This property can by - * any CSS unit, or a number (in which case it will be treated as a pixel - * measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Options - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sScrollX": "100%", - * "sScrollXInner": "110%" - * } ); - * } ); - */ - "sScrollXInner": "", - - - /** - * Enable vertical scrolling. Vertical scrolling will constrain the DataTable - * to the given height, and enable scrolling for any data which overflows the - * current viewport. This can be used as an alternative to paging to display - * a lot of data in a small area (although paging and scrolling can both be - * enabled at the same time). This property can be any CSS unit, or a number - * (in which case it will be treated as a pixel measurement). - * @type string - * @default blank string - i.e. disabled - * @dtopt Features - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "sScrollY": "200px", - * "bPaginate": false - * } ); - * } ); - */ - "sScrollY": "", - - - /** - * Set the HTTP method that is used to make the Ajax call for server-side - * processing or Ajax sourced data. - * @type string - * @default GET - * @dtopt Options - * @dtopt Server-side - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "bServerSide": true, - * "sAjaxSource": "scripts/post.php", - * "sServerMethod": "POST" - * } ); - * } ); - */ - "sServerMethod": "GET" - }; - - - - /** - * Column options that can be given to DataTables at initialisation time. - * @namespace - */ - DataTable.defaults.columns = { - /** - * Allows a column's sorting to take multiple columns into account when - * doing a sort. For example first name / last name columns make sense to - * do a multi-column sort over the two columns. - * @type array - * @default null Takes the value of the column index automatically - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] }, - * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] }, - * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "aDataSort": [ 0, 1 ] }, - * { "aDataSort": [ 1, 0 ] }, - * { "aDataSort": [ 2, 3, 4 ] }, - * null, - * null - * ] - * } ); - * } ); - */ - "aDataSort": null, - - - /** - * You can control the default sorting direction, and even alter the behaviour - * of the sort handler (i.e. only allow ascending sorting etc) using this - * parameter. - * @type array - * @default [ 'asc', 'desc' ] - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "asSorting": [ "asc" ], "aTargets": [ 1 ] }, - * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] }, - * { "asSorting": [ "desc" ], "aTargets": [ 3 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * { "asSorting": [ "asc" ] }, - * { "asSorting": [ "desc", "asc", "asc" ] }, - * { "asSorting": [ "desc" ] }, - * null - * ] - * } ); - * } ); - */ - "asSorting": [ 'asc', 'desc' ], - - - /** - * Enable or disable filtering on the data in this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSearchable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSearchable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSearchable": true, - - - /** - * Enable or disable sorting on this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bSortable": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bSortable": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bSortable": true, - - - /** - * When using fnRender() for a column, you may wish to use the original data - * (before rendering) for sorting and filtering (the default is to used the - * rendered data that the user can see). This may be useful for dates etc. - * - * *NOTE* It is it is advisable now to use mDataProp as a function and make - * use of the 'type' that it gives, allowing (potentially) different data to - * be used for sorting, filtering, display and type detection. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "fnRender": function ( oObj ) { - * return oObj.aData[0] +' '+ oObj.aData[3]; - * }, - * "bUseRendered": false, - * "aTargets": [ 0 ] - * } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { - * "fnRender": function ( oObj ) { - * return oObj.aData[0] +' '+ oObj.aData[3]; - * }, - * "bUseRendered": false - * }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "bUseRendered": true, - - - /** - * Enable or disable the display of this column. - * @type boolean - * @default true - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "bVisible": false, "aTargets": [ 0 ] } - * ] } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "bVisible": false }, - * null, - * null, - * null, - * null - * ] } ); - * } ); - */ - "bVisible": true, - - - /** - * Developer definable function that is called whenever a cell is created (Ajax source, - * etc) or processed for input (DOM source). This can be used as a compliment to fnRender - * allowing you to modify the DOM element (add background colour for example) when the - * element is available (since it is not when fnRender is called). - * @type function - * @param {element} nTd The TD node that has been created - * @param {*} sData The Data for the cell - * @param {array|object} oData The data for the whole row - * @param {int} iRow The row index for the aoData data store - * @param {int} iCol The column index for aoColumns - * @dtopt Columns - * - * @example - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ { - * "aTargets": [3], - * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { - * if ( sData == "1.7" ) { - * $(nTd).css('color', 'blue') - * } - * } - * } ] - * }); - * } ); - */ - "fnCreatedCell": null, - - - /** - * Custom display function that will be called for the display of each cell in - * this column. - * @type function - * @param {object} o Object with the following parameters: - * @param {int} o.iDataRow The row in aoData - * @param {int} o.iDataColumn The column in question - * @param {array} o.aData The data for the row in question - * @param {object} o.oSettings The settings object for this DataTables instance - * @param {object} o.mDataProp The data property used for this column - * @param {*} val The current cell value - * @returns {string} The string you which to use in the display - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "fnRender": function ( o, val ) { - * return o.aData[0] +' '+ o.aData[3]; - * }, - * "aTargets": [ 0 ] - * } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "fnRender": function ( o, val ) { - * return o.aData[0] +' '+ o.aData[3]; - * } }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "fnRender": null, - - - /** - * The column index (starting from 0!) that you wish a sort to be performed - * upon when this column is selected for sorting. This can be used for sorting - * on hidden columns for example. - * @type int - * @default -1 Use automatically calculated column index - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "iDataSort": 1, "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "iDataSort": 1 }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "iDataSort": -1, - - - /** - * This property can be used to read data from any JSON data source property, - * including deeply nested objects / properties. mDataProp can be given in a - * number of different ways which effect its behaviour: - *
      - *
    • integer - treated as an array index for the data source. This is the - * default that DataTables uses (incrementally increased for each column).
    • - *
    • string - read an object property from the data source. Note that you can - * use Javascript dotted notation to read deep properties/arrays from the - * data source.
    • - *
    • null - the sDefaultContent option will be used for the cell (null - * by default, so you will need to specify the default content you want - - * typically an empty string). This can be useful on generated columns such - * as edit / delete action columns.
    • - *
    • function - the function given will be executed whenever DataTables - * needs to set or get the data for a cell in the column. The function - * takes three parameters: - *
        - *
      • {array|object} The data source for the row
      • - *
      • {string} The type call data requested - this will be 'set' when - * setting data or 'filter', 'display', 'type', 'sort' or undefined when - * gathering data. Note that when undefined is given for the type - * DataTables expects to get the raw data for the object back
      • - *
      • {*} Data to set when the second parameter is 'set'.
      • - *
      - * The return value from the function is not required when 'set' is the type - * of call, but otherwise the return is what will be used for the data - * requested.
    • - *
    - * @type string|int|function|null - * @default null Use automatically calculated column index - * @dtopt Columns - * - * @example - * // Read table data from objects - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "sAjaxSource": "sources/deep.txt", - * "aoColumns": [ - * { "mDataProp": "engine" }, - * { "mDataProp": "browser" }, - * { "mDataProp": "platform.inner" }, - * { "mDataProp": "platform.details.0" }, - * { "mDataProp": "platform.details.1" } - * ] - * } ); - * } ); - * - * @example - * // Using mDataProp as a function to provide different information for - * // sorting, filtering and display. In this case, currency (price) - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "aTargets": [ 0 ], - * "mDataProp": function ( source, type, val ) { - * if (type === 'set') { - * source.price = val; - * // Store the computed dislay and filter values for efficiency - * source.price_display = val=="" ? "" : "$"+numberFormat(val); - * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; - * return; - * } - * else if (type === 'display') { - * return source.price_display; - * } - * else if (type === 'filter') { - * return source.price_filter; - * } - * // 'sort', 'type' and undefined all just use the integer - * return source.price; - * } - * ] - * } ); - * } ); - */ - "mDataProp": null, - - - /** - * Change the cell type created for the column - either TD cells or TH cells. This - * can be useful as TH cells have semantic meaning in the table body, allowing them - * to act as a header for a row (you may wish to add scope='row' to the TH elements). - * @type string - * @default td - * @dtopt Columns - * - * @example - * // Make the first column use TH cells - * $(document).ready(function() { - * var oTable = $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "aTargets": [ 0 ], - * "sCellType": "th" - * ] - * } ); - * } ); - */ - "sCellType": "td", - - - /** - * Class to give to each cell in this column. - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sClass": "my_class", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sClass": "my_class" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sClass": "", - - /** - * When DataTables calculates the column widths to assign to each column, - * it finds the longest string in each column and then constructs a - * temporary table and reads the widths from that. The problem with this - * is that "mmm" is much wider then "iiii", but the latter is a longer - * string - thus the calculation can go wrong (doing it properly and putting - * it into an DOM object and measuring that is horribly(!) slow). Thus as - * a "work around" we provide this option. It will append its value to the - * text that is found to be the longest string for the column - i.e. padding. - * Generally you shouldn't need this, and it is not documented on the - * general DataTables.net documentation - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "sContentPadding": "mmm" - * } - * ] - * } ); - * } ); - */ - "sContentPadding": "", - - - /** - * Allows a default value to be given for a column's data, and will be used - * whenever a null data source is encountered (this can be because mDataProp - * is set to null, or because the data source itself is null). - * @type string - * @default null - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { - * "mDataProp": null, - * "sDefaultContent": "Edit", - * "aTargets": [ -1 ] - * } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * null, - * { - * "mDataProp": null, - * "sDefaultContent": "Edit" - * } - * ] - * } ); - * } ); - */ - "sDefaultContent": null, - - - /** - * This parameter is only used in DataTables' server-side processing. It can - * be exceptionally useful to know what columns are being displayed on the - * client side, and to map these to database fields. When defined, the names - * also allow DataTables to reorder information from the server if it comes - * back in an unexpected order (i.e. if you switch your columns around on the - * client-side, your server-side code does not also need updating). - * @type string - * @default Empty string - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sName": "engine", "aTargets": [ 0 ] }, - * { "sName": "browser", "aTargets": [ 1 ] }, - * { "sName": "platform", "aTargets": [ 2 ] }, - * { "sName": "version", "aTargets": [ 3 ] }, - * { "sName": "grade", "aTargets": [ 4 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sName": "engine" }, - * { "sName": "browser" }, - * { "sName": "platform" }, - * { "sName": "version" }, - * { "sName": "grade" } - * ] - * } ); - * } ); - */ - "sName": "", - - - /** - * Defines a data source type for the sorting which can be used to read - * realtime information from the table (updating the internally cached - * version) prior to sorting. This allows sorting to occur on user editable - * elements such as form inputs. - * @type string - * @default std - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] }, - * { "sType": "numeric", "aTargets": [ 3 ] }, - * { "sSortDataType": "dom-select", "aTargets": [ 4 ] }, - * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * null, - * null, - * { "sSortDataType": "dom-text" }, - * { "sSortDataType": "dom-text", "sType": "numeric" }, - * { "sSortDataType": "dom-select" }, - * { "sSortDataType": "dom-checkbox" } - * ] - * } ); - * } ); - */ - "sSortDataType": "std", - - - /** - * The title of this column. - * @type string - * @default null Derived from the 'TH' value for this column in the - * original HTML table. - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sTitle": "My column title", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sTitle": "My column title" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sTitle": null, - - - /** - * The type allows you to specify how the data for this column will be sorted. - * Four types (string, numeric, date and html (which will strip HTML tags - * before sorting)) are currently available. Note that only date formats - * understood by Javascript's Date() object will be accepted as type date. For - * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', - * 'date' or 'html' (by default). Further types can be adding through - * plug-ins. - * @type string - * @default null Auto-detected from raw data - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sType": "html", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sType": "html" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sType": null, - - - /** - * Defining the width of the column, this parameter may take any CSS value - * (3em, 20px etc). DataTables applys 'smart' widths to columns which have not - * been given a specific width through this interface ensuring that the table - * remains readable. - * @type string - * @default null Automatic - * @dtopt Columns - * - * @example - * // Using aoColumnDefs - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumnDefs": [ - * { "sWidth": "20%", "aTargets": [ 0 ] } - * ] - * } ); - * } ); - * - * @example - * // Using aoColumns - * $(document).ready(function() { - * $('#example').dataTable( { - * "aoColumns": [ - * { "sWidth": "20%" }, - * null, - * null, - * null, - * null - * ] - * } ); - * } ); - */ - "sWidth": null - }; - - - - /** - * DataTables settings object - this holds all the information needed for a - * given table, including configuration, data and current application of the - * table options. DataTables does not have a single instance for each DataTable - * with the settings attached to that instance, but rather instances of the - * DataTable "class" are created on-the-fly as needed (typically by a - * $().dataTable() call) and the settings object is then applied to that - * instance. - * - * Note that this object is related to {@link DataTable.defaults} but this - * one is the internal data store for DataTables's cache of columns. It should - * NOT be manipulated outside of DataTables. Any configuration should be done - * through the initialisation options. - * @namespace - * @todo Really should attach the settings object to individual instances so we - * don't need to create new instances on each $().dataTable() call (if the - * table already exists). It would also save passing oSettings around and - * into every single function. However, this is a very significant - * architecture change for DataTables and will almost certainly break - * backwards compatibility with older installations. This is something that - * will be done in 2.0. - */ - DataTable.models.oSettings = { - /** - * Primary features of DataTables and their enablement state. - * @namespace - */ - "oFeatures": { - - /** - * Flag to say if DataTables should automatically try to calculate the - * optimum table and columns widths (true) or not (false). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoWidth": null, - - /** - * Delay the creation of TR and TD elements until they are actually - * needed by a driven page draw. This can give a significant speed - * increase for Ajax source and Javascript source data, but makes no - * difference at all fro DOM and server-side processing tables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bDeferRender": null, - - /** - * Enable filtering on the table or not. Note that if this is disabled - * then there is no filtering at all on the table, including fnFilter. - * To just remove the filtering input use sDom and remove the 'f' option. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bFilter": null, - - /** - * Table information element (the 'Showing x of y records' div) enable - * flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfo": null, - - /** - * Present a user control allowing the end user to change the page size - * when pagination is enabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bLengthChange": null, - - /** - * Pagination enabled or not. Note that if this is disabled then length - * changing must also be disabled. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bPaginate": null, - - /** - * Processing indicator enable flag whenever DataTables is enacting a - * user request - typically an Ajax request for server-side processing. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bProcessing": null, - - /** - * Server-side processing enabled flag - when enabled DataTables will - * get all data from the server for every draw - there is no filtering, - * sorting or paging done on the client-side. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bServerSide": null, - - /** - * Sorting enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSort": null, - - /** - * Apply a class to the columns which are being sorted to provide a - * visual highlight or not. This can slow things down when enabled since - * there is a lot of DOM interaction. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortClasses": null, - - /** - * State saving enablement flag. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bStateSave": null - }, - - - /** - * Scrolling settings for a table. - * @namespace - */ - "oScroll": { - /** - * Indicate if DataTables should be allowed to set the padding / margin - * etc for the scrolling header elements or not. Typically you will want - * this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bAutoCss": null, - - /** - * When the table is shorter in height than sScrollY, collapse the - * table container down to the height of the table (when true). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bCollapse": null, - - /** - * Infinite scrolling enablement flag. Now deprecated in favour of - * using the Scroller plug-in. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bInfinite": null, - - /** - * Width of the scrollbar for the web-browser's platform. Calculated - * during table initialisation. - * @type int - * @default 0 - */ - "iBarWidth": 0, - - /** - * Space (in pixels) between the bottom of the scrolling container and - * the bottom of the scrolling viewport before the next page is loaded - * when using infinite scrolling. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - */ - "iLoadGap": null, - - /** - * Viewport width for horizontal scrolling. Horizontal scrolling is - * disabled if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sX": null, - - /** - * Width to expand the table to when using x-scrolling. Typically you - * should not need to use this. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @deprecated - */ - "sXInner": null, - - /** - * Viewport height for vertical scrolling. Vertical scrolling is disabled - * if an empty string. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sY": null - }, - - /** - * Language information for the table. - * @namespace - * @extends DataTable.defaults.oLanguage - */ - "oLanguage": { - /** - * Information callback function. See - * {@link DataTable.defaults.fnInfoCallback} - * @type function - * @default - */ - "fnInfoCallback": null - }, - - /** - * Array referencing the nodes which are used for the features. The - * parameters of this object match what is allowed by sDom - i.e. - *
      - *
    • 'l' - Length changing
    • - *
    • 'f' - Filtering input
    • - *
    • 't' - The table!
    • - *
    • 'i' - Information
    • - *
    • 'p' - Pagination
    • - *
    • 'r' - pRocessing
    • - *
    - * @type array - * @default [] - */ - "aanFeatures": [], - - /** - * Store data information - see {@link DataTable.models.oRow} for detailed - * information. - * @type array - * @default [] - */ - "aoData": [], - - /** - * Array of indexes which are in the current display (after filtering etc) - * @type array - * @default [] - */ - "aiDisplay": [], - - /** - * Array of indexes for display - no filtering - * @type array - * @default [] - */ - "aiDisplayMaster": [], - - /** - * Store information about each column that is in use - * @type array - * @default [] - */ - "aoColumns": [], - - /** - * Store information about the table's header - * @type array - * @default [] - */ - "aoHeader": [], - - /** - * Store information about the table's footer - * @type array - * @default [] - */ - "aoFooter": [], - - /** - * Search data array for regular expression searching - * @type array - * @default [] - */ - "asDataSearch": [], - - /** - * Store the applied global search information in case we want to force a - * research or compare the old search to a new one. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @namespace - * @extends DataTable.models.oSearch - */ - "oPreviousSearch": {}, - - /** - * Store the applied search for each column - see - * {@link DataTable.models.oSearch} for the format that is used for the - * filtering information for each column. - * @type array - * @default [] - */ - "aoPreSearchCols": [], - - /** - * Sorting that is applied to the table. Note that the inner arrays are - * used in the following manner: - *
      - *
    • Index 0 - column number
    • - *
    • Index 1 - current sorting direction
    • - *
    • Index 2 - index of asSorting for this column
    • - *
    - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @todo These inner arrays should really be objects - */ - "aaSorting": null, - - /** - * Sorting that is always applied to the table (i.e. prefixed in front of - * aaSorting). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array|null - * @default null - */ - "aaSortingFixed": null, - - /** - * Classes to use for the striping of a table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "asStripeClasses": null, - - /** - * If restoring a table - we should restore its striping classes as well - * @type array - * @default [] - */ - "asDestroyStripes": [], - - /** - * If restoring a table - we should restore its width - * @type int - * @default 0 - */ - "sDestroyWidth": 0, - - /** - * Callback functions array for every time a row is inserted (i.e. on a draw). - * @type array - * @default [] - */ - "aoRowCallback": [], - - /** - * Callback functions for the header on each draw. - * @type array - * @default [] - */ - "aoHeaderCallback": [], - - /** - * Callback function for the footer on each draw. - * @type array - * @default [] - */ - "aoFooterCallback": [], - - /** - * Array of callback functions for draw callback functions - * @type array - * @default [] - */ - "aoDrawCallback": [], - - /** - * Array of callback functions for row created function - * @type array - * @default [] - */ - "aoRowCreatedCallback": [], - - /** - * Callback functions for just before the table is redrawn. A return of - * false will be used to cancel the draw. - * @type array - * @default [] - */ - "aoPreDrawCallback": [], - - /** - * Callback functions for when the table has been initialised. - * @type array - * @default [] - */ - "aoInitComplete": [], - - - /** - * Callbacks for modifying the settings to be stored for state saving, prior to - * saving state. - * @type array - * @default [] - */ - "aoStateSaveParams": [], - - /** - * Callbacks for modifying the settings that have been stored for state saving - * prior to using the stored values to restore the state. - * @type array - * @default [] - */ - "aoStateLoadParams": [], - - /** - * Callbacks for operating on the settings object once the saved state has been - * loaded - * @type array - * @default [] - */ - "aoStateLoaded": [], - - /** - * Cache the table ID for quick access - * @type string - * @default Empty string - */ - "sTableId": "", - - /** - * The TABLE node for the main table - * @type node - * @default null - */ - "nTable": null, - - /** - * Permanent ref to the thead element - * @type node - * @default null - */ - "nTHead": null, - - /** - * Permanent ref to the tfoot element - if it exists - * @type node - * @default null - */ - "nTFoot": null, - - /** - * Permanent ref to the tbody element - * @type node - * @default null - */ - "nTBody": null, - - /** - * Cache the wrapper node (contains all DataTables controlled elements) - * @type node - * @default null - */ - "nTableWrapper": null, - - /** - * Indicate if when using server-side processing the loading of data - * should be deferred until the second draw. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - * @default false - */ - "bDeferLoading": false, - - /** - * Indicate if all required information has been read in - * @type boolean - * @default false - */ - "bInitialised": false, - - /** - * Information about open rows. Each object in the array has the parameters - * 'nTr' and 'nParent' - * @type array - * @default [] - */ - "aoOpenRows": [], - - /** - * Dictate the positioning of DataTables' control elements - see - * {@link DataTable.model.oInit.sDom}. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sDom": null, - - /** - * Which type of pagination should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default two_button - */ - "sPaginationType": "two_button", - - /** - * The cookie duration (for bStateSave) in seconds. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type int - * @default 0 - */ - "iCookieDuration": 0, - - /** - * The cookie name prefix. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default Empty string - */ - "sCookiePrefix": "", - - /** - * Callback function for cookie creation. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - * @default null - */ - "fnCookieCallback": null, - - /** - * Array of callback functions for state saving. Each array element is an - * object with the following parameters: - *
      - *
    • function:fn - function to call. Takes two parameters, oSettings - * and the JSON string to save that has been thus far created. Returns - * a JSON string to be inserted into a json object - * (i.e. '"param": [ 0, 1, 2]')
    • - *
    • string:sName - name of callback
    • - *
    - * @type array - * @default [] - */ - "aoStateSave": [], - - /** - * Array of callback functions for state loading. Each array element is an - * object with the following parameters: - *
      - *
    • function:fn - function to call. Takes two parameters, oSettings - * and the object stored. May return false to cancel state loading
    • - *
    • string:sName - name of callback
    • - *
    - * @type array - * @default [] - */ - "aoStateLoad": [], - - /** - * State that was loaded from the cookie. Useful for back reference - * @type object - * @default null - */ - "oLoadedState": null, - - /** - * Source url for AJAX data for the table. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - * @default null - */ - "sAjaxSource": null, - - /** - * Property from a given object from which to read the table data from. This - * can be an empty string (when not server-side processing), in which case - * it is assumed an an array is given directly. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sAjaxDataProp": null, - - /** - * Note if draw should be blocked while getting data - * @type boolean - * @default true - */ - "bAjaxDataGet": true, - - /** - * The last jQuery XHR object that was used for server-side data gathering. - * This can be used for working with the XHR information in one of the - * callbacks - * @type object - * @default null - */ - "jqXHR": null, - - /** - * Function to get the server-side data. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnServerData": null, - - /** - * Functions which are called prior to sending an Ajax request so extra - * parameters can easily be sent to the server - * @type array - * @default [] - */ - "aoServerParams": [], - - /** - * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if - * required). - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type string - */ - "sServerMethod": null, - - /** - * Format numbers for display. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type function - */ - "fnFormatNumber": null, - - /** - * List of options that can be used for the user selectable length menu. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type array - * @default [] - */ - "aLengthMenu": null, - - /** - * Counter for the draws that the table does. Also used as a tracker for - * server-side processing - * @type int - * @default 0 - */ - "iDraw": 0, - - /** - * Indicate if a redraw is being done - useful for Ajax - * @type boolean - * @default false - */ - "bDrawing": false, - - /** - * Draw index (iDraw) of the last error when parsing the returned data - * @type int - * @default -1 - */ - "iDrawError": -1, - - /** - * Paging display length - * @type int - * @default 10 - */ - "_iDisplayLength": 10, - - /** - * Paging start point - aiDisplay index - * @type int - * @default 0 - */ - "_iDisplayStart": 0, - - /** - * Paging end point - aiDisplay index. Use fnDisplayEnd rather than - * this property to get the end point - * @type int - * @default 10 - * @private - */ - "_iDisplayEnd": 10, - - /** - * Server-side processing - number of records in the result set - * (i.e. before filtering), Use fnRecordsTotal rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type int - * @default 0 - * @private - */ - "_iRecordsTotal": 0, - - /** - * Server-side processing - number of records in the current display set - * (i.e. after filtering). Use fnRecordsDisplay rather than - * this property to get the value of the number of records, regardless of - * the server-side processing setting. - * @type boolean - * @default 0 - * @private - */ - "_iRecordsDisplay": 0, - - /** - * Flag to indicate if jQuery UI marking and classes should be used. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bJUI": null, - - /** - * The classes to use for the table - * @type object - * @default {} - */ - "oClasses": {}, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if filtering has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bFiltered": false, - - /** - * Flag attached to the settings object so you can check in the draw - * callback if sorting has been done in the draw. Deprecated in favour of - * events. - * @type boolean - * @default false - * @deprecated - */ - "bSorted": false, - - /** - * Indicate that if multiple rows are in the header and there is more than - * one unique cell per column, if the top one (true) or bottom one (false) - * should be used for sorting / title by DataTables. - * Note that this parameter will be set by the initialisation routine. To - * set a default use {@link DataTable.defaults}. - * @type boolean - */ - "bSortCellsTop": null, - - /** - * Initialisation object that is used for the table - * @type object - * @default null - */ - "oInit": null, - - /** - * Destroy callback functions - for plug-ins to attach themselves to the - * destroy so they can clean up markup and events. - * @type array - * @default [] - */ - "aoDestroyCallback": [], - - - /** - * Get the number of records in the current record set, before filtering - * @type function - */ - "fnRecordsTotal": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsTotal, 10); - } else { - return this.aiDisplayMaster.length; - } - }, - - /** - * Get the number of records in the current record set, after filtering - * @type function - */ - "fnRecordsDisplay": function () - { - if ( this.oFeatures.bServerSide ) { - return parseInt(this._iRecordsDisplay, 10); - } else { - return this.aiDisplay.length; - } - }, - - /** - * Set the display end point - aiDisplay index - * @type function - * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here - */ - "fnDisplayEnd": function () - { - if ( this.oFeatures.bServerSide ) { - if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { - return this._iDisplayStart+this.aiDisplay.length; - } else { - return Math.min( this._iDisplayStart+this._iDisplayLength, - this._iRecordsDisplay ); - } - } else { - return this._iDisplayEnd; - } - }, - - /** - * The DataTables object for this table - * @type object - * @default null - */ - "oInstance": null, - - /** - * Unique identifier for each instance of the DataTables object. If there - * is an ID on the table node, then it takes that value, otherwise an - * incrementing internal counter is used. - * @type string - * @default null - */ - "sInstance": null, - - /** - * tabindex attribute value that is added to DataTables control elements, allowing - * keyboard navigation of the table and its controls. - */ - "iTabIndex": 0, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollHead": null, - - /** - * DIV container for the footer scrolling table if scrolling - */ - "nScrollFoot": null - }; - - /** - * Extension object for DataTables that is used to provide all extension options. - * - * Note that the DataTable.ext object is available through - * jQuery.fn.dataTable.ext where it may be accessed and manipulated. It is - * also aliased to jQuery.fn.dataTableExt for historic reasons. - * @namespace - * @extends DataTable.models.ext - */ - DataTable.ext = $.extend( true, {}, DataTable.models.ext ); - - $.extend( DataTable.ext.oStdClasses, { - "sTable": "dataTable", - - /* Two buttons buttons */ - "sPagePrevEnabled": "paginate_enabled_previous", - "sPagePrevDisabled": "paginate_disabled_previous", - "sPageNextEnabled": "paginate_enabled_next", - "sPageNextDisabled": "paginate_disabled_next", - "sPageJUINext": "", - "sPageJUIPrev": "", - - /* Full numbers paging buttons */ - "sPageButton": "paginate_button", - "sPageButtonActive": "paginate_active", - "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", - "sPageFirst": "first", - "sPagePrevious": "previous", - "sPageNext": "next", - "sPageLast": "last", - - /* Striping classes */ - "sStripeOdd": "odd", - "sStripeEven": "even", - - /* Empty row */ - "sRowEmpty": "dataTables_empty", - - /* Features */ - "sWrapper": "dataTables_wrapper", - "sFilter": "dataTables_filter", - "sInfo": "dataTables_info", - "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ - "sLength": "dataTables_length", - "sProcessing": "dataTables_processing", - - /* Sorting */ - "sSortAsc": "sorting_asc", - "sSortDesc": "sorting_desc", - "sSortable": "sorting", /* Sortable in both directions */ - "sSortableAsc": "sorting_asc_disabled", - "sSortableDesc": "sorting_desc_disabled", - "sSortableNone": "sorting_disabled", - "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ - "sSortJUIAsc": "", - "sSortJUIDesc": "", - "sSortJUI": "", - "sSortJUIAscAllowed": "", - "sSortJUIDescAllowed": "", - "sSortJUIWrapper": "", - "sSortIcon": "", - - /* Scrolling */ - "sScrollWrapper": "dataTables_scroll", - "sScrollHead": "dataTables_scrollHead", - "sScrollHeadInner": "dataTables_scrollHeadInner", - "sScrollBody": "dataTables_scrollBody", - "sScrollFoot": "dataTables_scrollFoot", - "sScrollFootInner": "dataTables_scrollFootInner", - - /* Misc */ - "sFooterTH": "" - } ); - - - $.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { - /* Two buttons buttons */ - "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left", - "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", - "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right", - "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", - "sPageJUINext": "ui-icon ui-icon-circle-arrow-e", - "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w", - - /* Full numbers paging buttons */ - "sPageButton": "fg-button ui-button ui-state-default", - "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled", - "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled", - "sPageFirst": "first ui-corner-tl ui-corner-bl", - "sPageLast": "last ui-corner-tr ui-corner-br", - - /* Features */ - "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ - "ui-buttonset-multi paging_", /* Note that the type is postfixed */ - - /* Sorting */ - "sSortAsc": "ui-state-default", - "sSortDesc": "ui-state-default", - "sSortable": "ui-state-default", - "sSortableAsc": "ui-state-default", - "sSortableDesc": "ui-state-default", - "sSortableNone": "ui-state-default", - "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n", - "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s", - "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s", - "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n", - "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s", - "sSortJUIWrapper": "DataTables_sort_wrapper", - "sSortIcon": "DataTables_sort_icon", - - /* Scrolling */ - "sScrollHead": "dataTables_scrollHead ui-state-default", - "sScrollFoot": "dataTables_scrollFoot ui-state-default", - - /* Misc */ - "sFooterTH": "ui-state-default" - } ); - - - /* - * Variable: oPagination - * Purpose: - * Scope: jQuery.fn.dataTableExt - */ - $.extend( DataTable.ext.oPagination, { - /* - * Variable: two_button - * Purpose: Standard two button (forward/back) pagination - * Scope: jQuery.fn.dataTableExt.oPagination - */ - "two_button": { - /* - * Function: oPagination.two_button.fnInit - * Purpose: Initialise dom elements required for pagination with forward/back buttons only - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * node:nPaging - the DIV which contains this pagination control - * function:fnCallbackDraw - draw function which must be called on update - */ - "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) - { - var oLang = oSettings.oLanguage.oPaginate; - var oClasses = oSettings.oClasses; - var fnClickHandler = function ( e ) { - if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) - { - fnCallbackDraw( oSettings ); - } - }; - - var sAppend = (!oSettings.bJUI) ? - ''+oLang.sPrevious+''+ - ''+oLang.sNext+'' - : - ''+ - ''; - $(nPaging).append( sAppend ); - - var els = $('a', nPaging); - var nPrevious = els[0], - nNext = els[1]; - - oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nPrevious.id = oSettings.sTableId+'_previous'; - nNext.id = oSettings.sTableId+'_next'; - - nPrevious.setAttribute('aria-controls', oSettings.sTableId); - nNext.setAttribute('aria-controls', oSettings.sTableId); - } - }, - - /* - * Function: oPagination.two_button.fnUpdate - * Purpose: Update the two button pagination at the end of the draw - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var oClasses = oSettings.oClasses; - var an = oSettings.aanFeatures.p; - - /* Loop over each instance of the pager */ - for ( var i=0, iLen=an.length ; i'+oLang.sFirst+''+ - ''+oLang.sPrevious+''+ - ''+ - ''+oLang.sNext+''+ - ''+oLang.sLast+'' - ); - var els = $('a', nPaging); - var nFirst = els[0], - nPrev = els[1], - nNext = els[2], - nLast = els[3]; - - oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); - oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler ); - - /* ID the first elements only */ - if ( !oSettings.aanFeatures.p ) - { - nPaging.id = oSettings.sTableId+'_paginate'; - nFirst.id =oSettings.sTableId+'_first'; - nPrev.id =oSettings.sTableId+'_previous'; - nNext.id =oSettings.sTableId+'_next'; - nLast.id =oSettings.sTableId+'_last'; - } - }, - - /* - * Function: oPagination.full_numbers.fnUpdate - * Purpose: Update the list of page buttons shows - * Returns: - - * Inputs: object:oSettings - dataTables settings object - * function:fnCallbackDraw - draw function to call on page change - */ - "fnUpdate": function ( oSettings, fnCallbackDraw ) - { - if ( !oSettings.aanFeatures.p ) - { - return; - } - - var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; - var iPageCountHalf = Math.floor(iPageCount / 2); - var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); - var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; - var sList = ""; - var iStartButton, iEndButton, i, iLen; - var oClasses = oSettings.oClasses; - var anButtons, anStatic, nPaginateList; - var an = oSettings.aanFeatures.p; - var fnBind = function (j) { - oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) { - /* Use the information in the element to jump to the required page */ - oSettings.oApi._fnPageChange( oSettings, e.data.page ); - fnCallbackDraw( oSettings ); - e.preventDefault(); - } ); - }; - - /* Pages calculation */ - if ( oSettings._iDisplayLength === -1 ) - { - iStartButton = 1; - iEndButton = 1; - iCurrentPage = 1; - } - else if (iPages < iPageCount) - { - iStartButton = 1; - iEndButton = iPages; - } - else if (iCurrentPage <= iPageCountHalf) - { - iStartButton = 1; - iEndButton = iPageCount; - } - else if (iCurrentPage >= (iPages - iPageCountHalf)) - { - iStartButton = iPages - iPageCount + 1; - iEndButton = iPages; - } - else - { - iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; - iEndButton = iStartButton + iPageCount - 1; - } - - - /* Build the dynamic list */ - for ( i=iStartButton ; i<=iEndButton ; i++ ) - { - sList += (iCurrentPage !== i) ? - ''+oSettings.fnFormatNumber(i)+'' : - ''+oSettings.fnFormatNumber(i)+''; - } - - /* Loop over each instance of the pager */ - for ( i=0, iLen=an.length ; i y) ? 1 : 0)); - }, - - "string-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * html sorting (ignore html tags) - */ - "html-pre": function ( a ) - { - return a.replace( /<.*?>/g, "" ).toLowerCase(); - }, - - "html-asc": function ( x, y ) - { - return ((x < y) ? -1 : ((x > y) ? 1 : 0)); - }, - - "html-desc": function ( x, y ) - { - return ((x < y) ? 1 : ((x > y) ? -1 : 0)); - }, - - - /* - * date sorting - */ - "date-pre": function ( a ) - { - var x = Date.parse( a ); - - if ( isNaN(x) || x==="" ) - { - x = Date.parse( "01/01/1970 00:00:00" ); - } - return x; - }, - - "date-asc": function ( x, y ) - { - return x - y; - }, - - "date-desc": function ( x, y ) - { - return y - x; - }, - - - /* - * numerical sorting - */ - "numeric-pre": function ( a ) - { - return (a=="-" || a==="") ? 0 : a*1; - }, - - "numeric-asc": function ( x, y ) - { - return x - y; - }, - - "numeric-desc": function ( x, y ) - { - return y - x; - } - } ); - - - $.extend( DataTable.ext.aTypes, [ - /* - * Function: - - * Purpose: Check to see if a string is numeric - * Returns: string:'numeric' or null - * Inputs: mixed:sText - string to check - */ - function ( sData ) - { - /* Allow zero length strings as a number */ - if ( typeof sData === 'number' ) - { - return 'numeric'; - } - else if ( typeof sData !== 'string' ) - { - return null; - } - - var sValidFirstChars = "0123456789-"; - var sValidChars = "0123456789."; - var Char; - var bDecimal = false; - - /* Check for a valid first char (no period and allow negatives) */ - Char = sData.charAt(0); - if (sValidFirstChars.indexOf(Char) == -1) - { - return null; - } - - /* Check all the other characters are valid */ - for ( var i=1 ; i') != -1 ) - { - return 'html'; - } - return null; - } - ] ); - - - // jQuery aliases - $.fn.DataTable = DataTable; - $.fn.dataTable = DataTable; - $.fn.dataTableSettings = DataTable.settings; - $.fn.dataTableExt = DataTable.ext; - - - // Information about events fired by DataTables - for documentation. - /** - * Draw event, fired whenever the table is redrawn on the page, at the same point as - * fnDrawCallback. This may be useful for binding events or performing calculations when - * the table is altered at all. - * @name DataTable#draw - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Filter event, fired when the filtering applied to the table (using the build in global - * global filter, or column filters) is altered. - * @name DataTable#filter - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Page change event, fired when the paging of the table is altered. - * @name DataTable#page - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Sort event, fired when the sorting applied to the table is altered. - * @name DataTable#sort - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * DataTables initialisation complete event, fired when the table is fully drawn, - * including Ajax data loaded, if Ajax data is required. - * @name DataTable#init - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The JSON object request from the server - only - * present if client-side Ajax sourced data is used
  • - */ - - /** - * State save event, fired when the table has changed state a new state save is required. - * This method allows modification of the state saving object prior to actually doing the - * save, including addition or other state properties (for plug-ins) or modification - * of a DataTables core property. - * @name DataTable#stateSaveParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The state information to be saved - */ - - /** - * State load event, fired when the table is loading state from the stored data, but - * prior to the settings object being modified by the saved state - allowing modification - * of the saved state is required or loading of state for a plug-in. - * @name DataTable#stateLoadParams - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * State loaded event, fired when state has been loaded from stored data and the settings - * object has been modified by the loaded data. - * @name DataTable#stateLoaded - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {object} json The saved state information - */ - - /** - * Processing event, fired when DataTables is doing some kind of processing (be it, - * sort, filter or anything else). Can be used to indicate to the end user that - * there is something happening, or that something has finished. - * @name DataTable#processing - * @event - * @param {event} e jQuery event object - * @param {object} oSettings DataTables settings object - * @param {boolean} bShow Flag for if DataTables is doing processing or not - */ - - /** - * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to - * made to the server for new data (note that this trigger is called in fnServerData, - * if you override fnServerData and which to use this event, you need to trigger it in - * you success function). - * @name DataTable#xhr - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ - - /** - * Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing - * the bDestroy:true parameter in the initialisation object. This can be used to remove - * bound events, added DOM nodes, etc. - * @name DataTable#destroy - * @event - * @param {event} e jQuery event object - * @param {object} o DataTables settings object {@link DataTable.models.oSettings} - */ -}(jQuery, window, document, undefined)); +(function(X,l,n){var L=function(h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===n||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else if(c=a.aoPreSearchCols[d], +c.bRegex===n&&(c.bRegex=!0),c.bSmart===n&&(c.bSmart=!0),c.bCaseInsensitive===n)c.bCaseInsensitive=!0;m(a,d,null)}function m(a,b,c){var d=a.aoColumns[b];c!==n&&null!==c&&(c.mDataProp&&!c.mData&&(c.mData=c.mDataProp),c.sType!==n&&(d.sType=c.sType,d._bAutoType=!1),h.extend(d,c),p(d,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(d.aDataSort=[c.iDataSort]),p(d,c,"aDataSort"));var i=d.mRender?Q(d.mRender):null,f=Q(d.mData);d.fnGetData=function(a,b){var c=f(a,b);return d.mRender&&b&&""!==b?i(c,b,a):c};d.fnSetData= +L(d.mData);a.oFeatures.bSort||(d.bSortable=!1);!d.bSortable||-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableNone,d.sSortingClassJUI=""):-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortable,d.sSortingClassJUI=a.oClasses.sSortJUI):-1!=h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableAsc,d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed):-1== +h.inArray("asc",d.asSorting)&&-1!=h.inArray("desc",d.asSorting)&&(d.sSortingClass=a.oClasses.sSortableDesc,d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed)}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;da(a);for(var b=0,c=a.aoColumns.length;bj[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;eb&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& +(c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= +a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('
    ')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m")[0];w=d[m+ +1];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= +1;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k'):""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, +g=0,e=c.length;g=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, +a.aiDisplay.length);la(a,1);for(b=0;b").html(c).text()); +return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), +"\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); +null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c'+i[1][c]+""}else{c=0;for(d=i.length;c'+i[c]+""}b+="";i=l.createElement("div");a.aanFeatures.l|| +(i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, +b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= +0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthh(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= +q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= +"";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): +""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> +d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= +0,i=0,f=b.length,g,e;itd",b));j=N(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); +return 48>b||57/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b
    ')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= +100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? +"[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;itr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, +b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i=t(d);if(!m)for(e=a;et<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, +g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, +g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= +k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;me)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';h(j).append(k);var l=h("a",j), +k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, +fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= +n!==m?''+e.fnFormatNumber(m)+"":''+e.fnFormatNumber(m)+"";m=0;for(k=M.length;mh?1:0},"string-desc":function(e,h){return eh?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return eh?1:0},"html-desc":function(e,h){return e< +h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; +for(var k=1;k")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& +L(jQuery)})(window,document); From 1a36953d821b463875054cee7a0b6efa5356465d Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 14 Feb 2013 14:52:48 -0500 Subject: [PATCH 111/208] CC-4898: Pressing "Enter" from anywhere on the edit metadata popup should automatically Save and close the popup -fixed --- airtime_mvc/public/js/airtime/library/library.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 9cb2ed96c..3c29baeda 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -1380,5 +1380,11 @@ $(document).ready(function() { $('#editmdcancel').live("click", function() { $("#edit-md-dialog").dialog().remove(); }); + + $('#edit-md-dialog').live("keyup", function(event) { + if (event.keyCode === 13) { + $('#editmdsave').click(); + } + }); }); From e2e45b01600318c8d96bd7e3b85b8fb91ed28f5e Mon Sep 17 00:00:00 2001 From: denise Date: Thu, 14 Feb 2013 15:34:11 -0500 Subject: [PATCH 112/208] CC-4948: Library -> library loses have its width when window is resized -fixed --- airtime_mvc/public/js/airtime/library/spl.js | 34 ++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 25203e631..534c5d5b7 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -1072,20 +1072,28 @@ var AIRTIME = (function(AIRTIME){ }; function setWidgetSize() { - viewport = AIRTIME.utilities.findViewportDimensions(); - widgetHeight = viewport.height - 185; - width = Math.floor(viewport.width - 80); - - var libTableHeight = widgetHeight - 130; + viewport = AIRTIME.utilities.findViewportDimensions(); + widgetHeight = viewport.height - 185; + width = Math.floor(viewport.width - 80); - $lib.height(widgetHeight) - .find(".dataTables_scrolling") - .css("max-height", libTableHeight) - .end() - .width(Math.floor(width * 0.55)); - - $pl.height(widgetHeight) - .width(Math.floor(width * 0.45)); + var libTableHeight = widgetHeight - 130; + + if (!$pl.is(':hidden')) { + $lib.height(widgetHeight) + .find(".dataTables_scrolling") + .css("max-height", libTableHeight) + .end() + .width(Math.floor(width * 0.55)); + + $pl.height(widgetHeight) + .width(Math.floor(width * 0.45)); + } else { + $lib.height(widgetHeight) + .find(".dataTables_scrolling") + .css("max-height", libTableHeight) + .end() + .width(width + 40); + } } mod.onReady = function() { From b30f67b24b003ed3ce1a94acc6d350b285d3f12a Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 14 Feb 2013 15:49:38 -0500 Subject: [PATCH 113/208] CC-4950: builder-feed is called twice on NowPlaying screen load --- airtime_mvc/public/js/airtime/showbuilder/main_builder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js index 98a1915a5..ee19e85fd 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js @@ -86,7 +86,7 @@ AIRTIME = (function(AIRTIME) { .end(); oTable = $('#show_builder_table').dataTable(); - oTable.fnDraw(); + //oTable.fnDraw(); } } From 4f3ea3f4066e39073304d5b872df95352e604a11 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 14 Feb 2013 17:48:32 -0500 Subject: [PATCH 114/208] Update ColReorder Datatables plugin --- .../plugin/dataTables.ColReorder.js | 73 +++++++++++++------ 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorder.js b/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorder.js index 7c7b728a2..35b96594f 100644 --- a/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorder.js +++ b/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorder.js @@ -1,8 +1,8 @@ /* * File: ColReorder.js - * Version: 1.0.5 + * Version: 1.0.8 * CVS: $Id$ - * Description: Controls for column visiblity in DataTables + * Description: Allow columns to be reordered in a DataTable * Author: Allan Jardine (www.sprymedia.co.uk) * Created: Wed Sep 15 18:23:29 BST 2010 * Modified: $Date$ by $Author$ @@ -174,10 +174,10 @@ $.fn.dataTableExt.oApi.fnColReorder = function ( oSettings, iFrom, iTo ) for ( i=0, iLen=iCols ; i Date: Fri, 15 Feb 2013 12:55:57 -0500 Subject: [PATCH 115/208] CC-4883: Python services contacting Apache with strange URL format -fixed --- python_apps/api_clients/api_client.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index e8dbbd16a..ccdde9e3c 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -112,7 +112,9 @@ class RequestProvider(object): def __init__(self, cfg): self.config = cfg self.requests = {} - self.url = ApcUrl("http://%s:%s/%s/%s/%s" \ + if self.config["base_dir"].startswith("/"): + self.config["base_dir"] = self.config["base_dir"][1:] + self.url = ApcUrl("http://%s:%s/%s%s/%s" \ % (self.config["host"], str(self.config["base_port"]), self.config["base_dir"], self.config["api_base"], '%%action%%')) @@ -243,7 +245,9 @@ class AirtimeApiClient(object): def construct_url(self,config_action_key): """Constructs the base url for every request""" # TODO : Make other methods in this class use this this method. - url = "http://%s:%s/%s/%s/%s" % \ + if self.config["base_dir"].startswith("/"): + self.config["base_dir"] = self.config["base_dir"][1:] + url = "http://%s:%s/%s%s/%s" % \ (self.config["host"], str(self.config["base_port"]), self.config["base_dir"], self.config["api_base"], self.config[config_action_key]) From 39ec07e71c11a04290df988731549b589bddea7b Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 15 Feb 2013 14:18:32 -0500 Subject: [PATCH 116/208] CC-4955: Datatables saves its parameters twice on every page load -fixed --- airtime_mvc/public/js/airtime/library/library.js | 2 ++ airtime_mvc/public/js/airtime/showbuilder/builder.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index dd0574a03..31caca2fb 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -520,6 +520,8 @@ var AIRTIME = (function(AIRTIME) { oData.iLength = parseInt(oData.iLength, 10); oData.iStart = parseInt(oData.iStart, 10); oData.iCreate = parseInt(oData.iCreate, 10); + + return false; }, "sAjaxSource": baseUrl+"Library/contents-feed", diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index b7d4bda7f..c1e988789 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -451,6 +451,8 @@ var AIRTIME = (function(AIRTIME){ } oData.iCreate = parseInt(oData.iCreate, 10); + + return false; }, "fnServerData": mod.fnServerData, From 09baf3a47d82940aa5fdef2ecaa31c5f6fa77c6d Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 15 Feb 2013 14:19:04 -0500 Subject: [PATCH 117/208] remove unecessary file + better error handling --- .../public/js/airtime/library/library.js | 30 +- .../plugin/dataTables.ColReorderResize.js | 1020 ----------------- 2 files changed, 18 insertions(+), 1032 deletions(-) delete mode 100644 airtime_mvc/public/js/datatables/plugin/dataTables.ColReorderResize.js diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 31caca2fb..bce74d2ec 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -491,9 +491,11 @@ var AIRTIME = (function(AIRTIME) { }, "fnStateLoad": function fnLibStateLoad(oSettings) { var settings = localStorage.getItem('datatables-library'); - - if (settings !== "") { + + try { return JSON.parse(settings); + } catch (e) { + return null; } }, "fnStateLoadParams": function (oSettings, oData) { @@ -501,18 +503,22 @@ var AIRTIME = (function(AIRTIME) { length, a = oData.abVisCols; - // putting serialized data back into the correct js type to make - // sure everything works properly. - for (i = 0, length = a.length; i < length; i++) { - if (typeof(a[i]) === "string") { - a[i] = (a[i] === "true") ? true : false; - } + if (a) { + // putting serialized data back into the correct js type to make + // sure everything works properly. + for (i = 0, length = a.length; i < length; i++) { + if (typeof(a[i]) === "string") { + a[i] = (a[i] === "true") ? true : false; + } + } } - + a = oData.ColReorder; - for (i = 0, length = a.length; i < length; i++) { - if (typeof(a[i]) === "string") { - a[i] = parseInt(a[i], 10); + if (a) { + for (i = 0, length = a.length; i < length; i++) { + if (typeof(a[i]) === "string") { + a[i] = parseInt(a[i], 10); + } } } diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorderResize.js b/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorderResize.js deleted file mode 100644 index c1336ffac..000000000 --- a/airtime_mvc/public/js/datatables/plugin/dataTables.ColReorderResize.js +++ /dev/null @@ -1,1020 +0,0 @@ -/* - * File: ColReorderWithResize.js - * Version: 1.0.3 - * CVS: $Id$ - * Description: Controls for column visiblity in DataTables + col resizing - * Author: Allan Jardine (www.sprymedia.co.uk) - * Created: Wed Sep 15 18:23:29 BST 2010 - * Modified: July 2011 by Christophe Battarel - christophe.battarel@altairis.fr (resizing) - * Language: Javascript - * License: GPL v2 or BSD 3 point style - * Project: DataTables - * Contact: www.sprymedia.co.uk/contact - * - * Copyright 2010-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD style license, available at: - * http://datatables.net/license_gpl2 - * http://datatables.net/license_bsd - * - */ - - -(function($, window, document) { - - -/** - * Switch the key value pairing of an index array to be value key (i.e. the old value is now the - * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ]. - * @method fnInvertKeyValues - * @param array aIn Array to switch around - * @returns array - */ -function fnInvertKeyValues( aIn ) -{ - var aRet=[]; - for ( var i=0, iLen=aIn.length ; i= iCols ) - { - this.oApi._fnLog( oSettings, 1, "ColReorder 'from' index is out of bounds: "+iFrom ); - return; - } - - if ( iTo < 0 || iTo >= iCols ) - { - this.oApi._fnLog( oSettings, 1, "ColReorder 'to' index is out of bounds: "+iTo ); - return; - } - - /* - * Calculate the new column array index, so we have a mapping between the old and new - */ - var aiMapping = []; - for ( i=0, iLen=iCols ; i this.s.fixed-1 ) - { - this._fnMouseListener( i, this.s.dt.aoColumns[i].nTh ); - } - - /* Mark the original column order for later reference */ - this.s.dt.aoColumns[i]._ColReorder_iOrigCol = i; - } - - /* State saving */ - this.s.dt.aoStateSave.push( { - "fn": function (oS, sVal) { - return that._fnStateSave.call( that, sVal ); - }, - "sName": "ColReorder_State" - } ); - - /* An initial column order has been specified */ - var aiOrder = null; - if ( typeof this.s.init.aiOrder != 'undefined' ) - { - aiOrder = this.s.init.aiOrder.slice(); - } - - /* State loading, overrides the column order given */ - if ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' && - this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length ) - { - aiOrder = this.s.dt.oLoadedState.ColReorder; - } - - /* If we have an order to apply - do so */ - if ( aiOrder ) - { - /* We might be called during or after the DataTables initialisation. If before, then we need - * to wait until the draw is done, if after, then do what we need to do right away - */ - if ( !that.s.dt._bInitComplete ) - { - var bDone = false; - this.s.dt.aoDrawCallback.push( { - "fn": function () { - if ( !that.s.dt._bInitComplete && !bDone ) - { - bDone = true; - var resort = fnInvertKeyValues( aiOrder ); - that._fnOrderColumns.call( that, resort ); - } - }, - "sName": "ColReorder_Pre" - } ); - } - else - { - var resort = fnInvertKeyValues( aiOrder ); - that._fnOrderColumns.call( that, resort ); - } - } - }, - - - /** - * Set the column order from an array - * @method _fnOrderColumns - * @param array a An array of integers which dictate the column order that should be applied - * @returns void - * @private - */ - "_fnOrderColumns": function ( a ) - { - if ( a.length != this.s.dt.aoColumns.length ) - { - this.s.dt.oInstance.oApi._fnLog( oDTSettings, 1, "ColReorder - array reorder does not "+ - "match known number of columns. Skipping." ); - return; - } - - for ( var i=0, iLen=a.length ; i 0 ) - { - this.dom.drag.removeChild( this.dom.drag.getElementsByTagName('tbody')[0] ); - } - while ( this.dom.drag.getElementsByTagName('tfoot').length > 0 ) - { - this.dom.drag.removeChild( this.dom.drag.getElementsByTagName('tfoot')[0] ); - } - - $('thead tr:eq(0)', this.dom.drag).each( function () { - $('th:not(:eq('+that.s.mouse.targetIndex+'))', this).remove(); - } ); - $('tr', this.dom.drag).height( $('tr:eq(0)', that.s.dt.nTHead).height() ); - - $('thead tr:gt(0)', this.dom.drag).remove(); - - $('thead th:eq(0)', this.dom.drag).each( function (i) { - this.style.width = $('th:eq('+that.s.mouse.targetIndex+')', that.s.dt.nTHead).width()+"px"; - } ); - - this.dom.drag.style.position = "absolute"; - this.dom.drag.style.zIndex = 1200; - this.dom.drag.style.top = "0px"; - this.dom.drag.style.left = "0px"; - this.dom.drag.style.width = $('th:eq('+that.s.mouse.targetIndex+')', that.s.dt.nTHead).outerWidth()+"px"; - - - this.dom.pointer = document.createElement( 'div' ); - this.dom.pointer.className = "DTCR_pointer"; - this.dom.pointer.style.position = "absolute"; - - if ( this.s.dt.oScroll.sX === "" && this.s.dt.oScroll.sY === "" ) - { - this.dom.pointer.style.top = $(this.s.dt.nTable).offset().top+"px"; - this.dom.pointer.style.height = $(this.s.dt.nTable).height()+"px"; - } - else - { - this.dom.pointer.style.top = $('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top+"px"; - this.dom.pointer.style.height = $('div.dataTables_scroll', this.s.dt.nTableWrapper).height()+"px"; - } - - document.body.appendChild( this.dom.pointer ); - document.body.appendChild( this.dom.drag ); - } -}; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static parameters - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Array of all ColReorder instances for later reference - * @property ColReorder.aoInstances - * @type array - * @default [] - * @static - */ -ColReorder.aoInstances = []; - - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Static functions - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/** - * Reset the column ordering for a DataTables instance - * @method ColReorder.fnReset - * @param object oTable DataTables instance to consider - * @returns void - * @static - */ -ColReorder.fnReset = function ( oTable ) -{ - for ( var i=0, iLen=ColReorder.aoInstances.length ; i Date: Fri, 15 Feb 2013 14:19:18 -0500 Subject: [PATCH 118/208] add silan to tarball full install --- install_full/ubuntu/airtime-full-install | 1 + install_full/ubuntu/airtime-full-install-nginx | 1 + 2 files changed, 2 insertions(+) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 08596a7e9..5d314d02c 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -80,6 +80,7 @@ fi #Install Sourcefabric's custom Liquidsoap debian package apt-get -y --force-yes install sourcefabric-keyring apt-get -y --force-yes install liquidsoap +apt-get -y --force-yes install silan # Apache Config File diff --git a/install_full/ubuntu/airtime-full-install-nginx b/install_full/ubuntu/airtime-full-install-nginx index 58a7f2af4..e4c1ceca9 100755 --- a/install_full/ubuntu/airtime-full-install-nginx +++ b/install_full/ubuntu/airtime-full-install-nginx @@ -81,6 +81,7 @@ fi #Install Sourcefabric's custom Liquidsoap debian package apt-get -y --force-yes install sourcefabric-keyring apt-get -y --force-yes install liquidsoap +apt-get -y --force-yes install silan # php-fpm Airtime pool file echo "----------------------------------------------------" From d35c8050cf97d4f6f75102253268a36f37dd1462 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 15 Feb 2013 15:02:14 -0500 Subject: [PATCH 119/208] CC-4956: Merge nginx + apache install full scripts -fixed --- install_full/ubuntu/airtime-full-install | 56 ++++++-- .../ubuntu/airtime-full-install-nginx | 127 +----------------- 2 files changed, 46 insertions(+), 137 deletions(-) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 5d314d02c..6fffe3e1c 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -2,6 +2,9 @@ # # Auto install script for airtime on Ubuntu # +# NGINX changes are contributed by Eugene MechanisM +# Link to the post: +# http://forum.sourcefabric.org/discussion/13563/first-step-to-run-airtime-via-nginx-based-on-airtime-2.0-beta-files exec > >(tee install_log.txt) exec 2>&1 @@ -11,6 +14,8 @@ if [ "$(id -u)" != "0" ]; then exit 1 fi +server="$1" + #Current dir # Absolute path to this script, e.g. /home/user/bin/foo.sh SCRIPT=`readlink -f $0` @@ -60,7 +65,6 @@ pwgen libfaad2 #of Debian, where these packages are unauthorized) apt-get -y --force-yes install libmp3lame-dev lame icecast2 - #Debian Squeeze only has zendframework package. Newer versions of Ubuntu have zend-framework package. #Ubuntu Lucid has both zendframework and zend-framework. Difference appears to be that zendframework is for #1.10 and zend-framework is 1.11 @@ -70,33 +74,59 @@ else apt-get -y --force-yes install libzend-framework-php fi +#get the "timeout" unix command if [ "$code" = "lucid" ]; then apt-get -y --force-yes install timeout else apt-get -y --force-yes install coreutils fi - #Install Sourcefabric's custom Liquidsoap debian package apt-get -y --force-yes install sourcefabric-keyring apt-get -y --force-yes install liquidsoap apt-get -y --force-yes install silan +if [ "$server" = "nginx" ]; then + # NGINX Config File + echo "----------------------------------------------------" + echo "2.1 NGINX Config File" + echo "----------------------------------------------------" + if [ ! -f /etc/nginx/sites-available/airtime ]; then + cp $SCRIPTPATH/../nginx/airtime-vhost /etc/nginx/sites-available/airtime + ln -s /etc/nginx/sites-available/airtime /etc/nginx/sites-enabled/airtime + service nginx reload + else + echo "NGINX config for Airtime already exists..." + fi -# Apache Config File -echo "----------------------------------------------------" -echo "2. Apache Config File" -echo "----------------------------------------------------" -if [ ! -f /etc/apache2/sites-available/airtime ]; then - cp $SCRIPTPATH/../apache/airtime-vhost /etc/apache2/sites-available/airtime - a2dissite default - a2ensite airtime - a2enmod rewrite php5 - service apache2 restart + # php-fpm Airtime pool file + echo "----------------------------------------------------" + echo "2.2 Airtime php pool file" + echo "----------------------------------------------------" + if [ ! -f /etc/php5/fpm/pool.d/airtime.conf ]; then + cp $SCRIPTPATH/../php5-fpm/airtime.conf /etc/php5/fpm/pool.d/airtime.conf + service php5-fpm reload + else + echo "Airtime php pool file already exists..." + fi else - echo "Apache config for Airtime already exists..." + # Apache Config File + echo "----------------------------------------------------" + echo "2. Apache Config File" + echo "----------------------------------------------------" + if [ ! -f /etc/apache2/sites-available/airtime ]; then + cp $SCRIPTPATH/../apache/airtime-vhost /etc/apache2/sites-available/airtime + a2dissite default + a2ensite airtime + a2enmod rewrite php5 + service apache2 restart + else + echo "Apache config for Airtime already exists..." + fi fi + + # Enable Icecast echo "----------------------------------------------------" echo "3. Enable Icecast" diff --git a/install_full/ubuntu/airtime-full-install-nginx b/install_full/ubuntu/airtime-full-install-nginx index e4c1ceca9..7f55a3aa2 100755 --- a/install_full/ubuntu/airtime-full-install-nginx +++ b/install_full/ubuntu/airtime-full-install-nginx @@ -1,131 +1,10 @@ -#!/bin/bash -e -# -# Auto install script for airtime on Ubuntu -# -# NGINX changes are contributed by Eugene MechanisM -# Link to the post: -# http://forum.sourcefabric.org/discussion/13563/first-step-to-run-airtime-via-nginx-based-on-airtime-2.0-beta-files +#!/bin/bash +# Auto install script for airtime + nginx -exec > >(tee install_log.txt) -exec 2>&1 - -if [ "$(id -u)" != "0" ]; then - echo "Please run as root user." - exit 1 -fi - -#Current dir # Absolute path to this script, e.g. /home/user/bin/foo.sh SCRIPT=`readlink -f $0` # Absolute path this script is in, thus /home/user/bin SCRIPTPATH=`dirname $SCRIPT` -#Prerequisite -echo "----------------------------------------------------" -echo " 1. Install Packages" -echo "----------------------------------------------------" - -dist=`lsb_release -is` -code=`lsb_release -cs` - -#enable squeeze backports to get lame packages -if [ "$dist" = "Debian" -a "$code" = "squeeze" ]; then - grep "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list - if [ "$?" -ne "0" ]; then - echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list - fi -fi - -apt-get update - -# Updated package list -apt-get -y --force-yes install tar gzip curl nginx php5-pgsql php5-fpm \ -php-pear php5-gd postgresql odbc-postgresql python libsoundtouch-ocaml \ -libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ -libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \ -php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \ -libpulse0 vorbis-tools lsb-release lsof sudo mp3gain vorbisgain flac vorbis-tools \ -pwgen libfaad2 - -#install packages with --force-yes option (this is useful in the case -#of Debian, where these packages are unauthorized) -apt-get -y --force-yes install libmp3lame-dev lame icecast2 - -#Debian Squeeze only has zendframework package. Newer versions of Ubuntu have zend-framework package. -#Ubuntu Lucid has both zendframework and zend-framework. Difference appears to be that zendframework is for -#1.10 and zend-framework is 1.11 -if [ "$dist" = "Debian" ]; then - apt-get -y install --force-yes zendframework -else - apt-get -y install --force-yes libzend-framework-php -fi - -if [ "$code" = "lucid" ]; then - apt-get -y install --force-yes timeout -else - apt-get -y install --force-yes coreutils -fi - -# NGINX Config File -echo "----------------------------------------------------" -echo "2.1 NGINX Config File" -echo "----------------------------------------------------" -if [ ! -f /etc/nginx/sites-available/airtime ]; then - cp $SCRIPTPATH/../nginx/airtime-vhost /etc/nginx/sites-available/airtime - ln -s /etc/nginx/sites-available/airtime /etc/nginx/sites-enabled/airtime - service nginx reload -else - echo "NGINX config for Airtime already exists..." -fi - -#Install Sourcefabric's custom Liquidsoap debian package -apt-get -y --force-yes install sourcefabric-keyring -apt-get -y --force-yes install liquidsoap -apt-get -y --force-yes install silan - -# php-fpm Airtime pool file -echo "----------------------------------------------------" -echo "2.2 Airtime php pool file" -echo "----------------------------------------------------" -if [ ! -f /etc/php5/fpm/pool.d/airtime.conf ]; then - cp $SCRIPTPATH/../php5-fpm/airtime.conf /etc/php5/fpm/pool.d/airtime.conf - service php5-fpm reload -else - echo "Airtime php pool file already exists..." -fi - -# Enable Icecast -echo "----------------------------------------------------" -echo "3. Enable Icecast" -echo "----------------------------------------------------" -cd /etc/default/ -sed -i 's/ENABLE=false/ENABLE=true/g' icecast2 -set +e -service icecast2 start -set -e -echo "" - -# Enable Monit -echo "----------------------------------------------------" -echo "4. Enable Monit" -echo "----------------------------------------------------" -cd /etc/default/ -sed -i 's/startup=0/startup=1/g' monit - -set +e -grep -q "include /etc/monit/conf.d" /etc/monit/monitrc -RETVAL=$? -set -e -if [ $RETVAL -ne 0 ] ; then - mkdir -p /etc/monit/conf.d - echo "include /etc/monit/conf.d/*" >> /etc/monit/monitrc -fi - -# Run Airtime Install -echo "----------------------------------------------------" -echo "5. Run Airtime Install" -echo "----------------------------------------------------" -cd $SCRIPTPATH/../../install_minimal -./airtime-install - +$SCRIPTPATH/airtime-full-install nginx From fe611e7c6a03fcd845645a6884d3d709285fd4d8 Mon Sep 17 00:00:00 2001 From: Naomi Date: Fri, 15 Feb 2013 16:32:05 -0500 Subject: [PATCH 120/208] CC-4957 : Replay Gain undefined error, json response not being sent back properly. --- airtime_mvc/application/controllers/ApiController.php | 11 +++++------ python_apps/api_clients/api_client.cfg | 2 +- python_apps/pypo/media/update/replaygainupdater.py | 4 +++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 6bbe480da..065352ba7 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -42,8 +42,9 @@ class ApiController extends Zend_Controller_Action ->addActionContext('reload-metadata-group' , 'json') ->addActionContext('notify-webstream-data' , 'json') ->addActionContext('get-stream-parameters' , 'json') - ->addActionContext('push-stream-stats' , 'json') - ->addActionContext('update-stream-setting-table' , 'json') + ->addActionContext('push-stream-stats' , 'json') + ->addActionContext('update-stream-setting-table' , 'json') + ->addActionContext('update-replay-gain-value' , 'json') ->initContext(); } @@ -919,10 +920,6 @@ class ApiController extends Zend_Controller_Action public function updateReplayGainValueAction() { - // disable layout - $this->view->layout()->disableLayout(); - $this->_helper->viewRenderer->setNoRender(true); - $request = $this->getRequest(); $data = json_decode($request->getParam('data')); @@ -933,6 +930,8 @@ class ApiController extends Zend_Controller_Action $file->setDbReplayGain($gain); $file->save(); } + + $this->view->msg = "OK"; } public function updateCueValuesBySilanAction() diff --git a/python_apps/api_clients/api_client.cfg b/python_apps/api_clients/api_client.cfg index d9a67b608..0f1050a61 100644 --- a/python_apps/api_clients/api_client.cfg +++ b/python_apps/api_clients/api_client.cfg @@ -115,7 +115,7 @@ get_bootstrap_info = 'get-bootstrap-info/format/json/api_key/%%api_key%%' get_files_without_replay_gain = 'get-files-without-replay-gain/api_key/%%api_key%%/dir_id/%%dir_id%%' -update_replay_gain_value = 'update-replay-gain-value/api_key/%%api_key%%' +update_replay_gain_value = 'update-replay-gain-value/format/json/api_key/%%api_key%%' notify_webstream_data = 'notify-webstream-data/api_key/%%api_key%%/media_id/%%media_id%%/format/json' diff --git a/python_apps/pypo/media/update/replaygainupdater.py b/python_apps/pypo/media/update/replaygainupdater.py index 2f52c0a23..0d971d432 100644 --- a/python_apps/pypo/media/update/replaygainupdater.py +++ b/python_apps/pypo/media/update/replaygainupdater.py @@ -58,7 +58,9 @@ class ReplayGainUpdater(Thread): try: self.api_client.update_replay_gain_values(processed_data) - except Exception as e: self.unexpected_exception(e) + except Exception as e: + self.logger.error(e) + self.logger.debug(traceback.format_exc()) if len(files) == 0: break self.logger.info("Processed: %d songs" % total) From 9a2b8af7b1339a7d7e059f81f9469038305156b6 Mon Sep 17 00:00:00 2001 From: Naomi Date: Fri, 15 Feb 2013 16:50:43 -0500 Subject: [PATCH 121/208] Revert "CC-4955: Datatables saves its parameters twice on every page load" This reverts commit 39ec07e71c11a04290df988731549b589bddea7b. --- airtime_mvc/public/js/airtime/library/library.js | 2 -- airtime_mvc/public/js/airtime/showbuilder/builder.js | 2 -- 2 files changed, 4 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index bce74d2ec..11194574a 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -526,8 +526,6 @@ var AIRTIME = (function(AIRTIME) { oData.iLength = parseInt(oData.iLength, 10); oData.iStart = parseInt(oData.iStart, 10); oData.iCreate = parseInt(oData.iCreate, 10); - - return false; }, "sAjaxSource": baseUrl+"Library/contents-feed", diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index c1e988789..b7d4bda7f 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -451,8 +451,6 @@ var AIRTIME = (function(AIRTIME){ } oData.iCreate = parseInt(oData.iCreate, 10); - - return false; }, "fnServerData": mod.fnServerData, From 70931e9a5e3566d1fc337ae89f7e43c99d65fe12 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 15 Feb 2013 17:26:08 -0500 Subject: [PATCH 122/208] CC-4956: Merge nginx + apache install full scripts -install appropriate packages --- install_full/ubuntu/airtime-full-install | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/install_full/ubuntu/airtime-full-install b/install_full/ubuntu/airtime-full-install index 6fffe3e1c..d574b9adb 100755 --- a/install_full/ubuntu/airtime-full-install +++ b/install_full/ubuntu/airtime-full-install @@ -53,7 +53,7 @@ fi apt-get update # Updated package list -apt-get -y --force-yes install tar gzip curl apache2 php5-pgsql libapache2-mod-php5 \ +apt-get -y --force-yes install tar gzip curl php5-pgsql \ php-pear php5-gd postgresql odbc-postgresql python libsoundtouch-ocaml \ libtaglib-ocaml libao-ocaml libmad-ocaml ecasound \ libesd0 libportaudio2 libsamplerate0 rabbitmq-server patch \ @@ -61,6 +61,7 @@ php5-curl mpg123 monit python-virtualenv multitail libcamomile-ocaml-data \ libpulse0 vorbis-tools lsb-release lsof sudo mp3gain vorbisgain flac vorbis-tools \ pwgen libfaad2 + #install packages with --force-yes option (this is useful in the case #of Debian, where these packages are unauthorized) apt-get -y --force-yes install libmp3lame-dev lame icecast2 @@ -87,6 +88,7 @@ apt-get -y --force-yes install liquidsoap apt-get -y --force-yes install silan if [ "$server" = "nginx" ]; then + apt-get -y --force-yes install nginx php5-fpm # NGINX Config File echo "----------------------------------------------------" echo "2.1 NGINX Config File" @@ -110,6 +112,7 @@ if [ "$server" = "nginx" ]; then echo "Airtime php pool file already exists..." fi else + apt-get -y --force-yes install apache2 libapache2-mod-php5 # Apache Config File echo "----------------------------------------------------" echo "2. Apache Config File" From d1301ff676877478b2c853f59e7d57b4781fb403 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 10:58:48 -0500 Subject: [PATCH 123/208] CC-4954: Please make Library page remember the status per user -done --- .../controllers/LibraryController.php | 11 +++++++ .../controllers/UsersettingsController.php | 9 +++++ airtime_mvc/application/models/Preference.php | 14 +++++++- .../views/scripts/library/index.phtml | 9 ++++- airtime_mvc/public/js/airtime/library/spl.js | 33 +++++++++++++++++-- 5 files changed, 72 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 2974d85a1..d63b6d4e3 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -77,6 +77,17 @@ class LibraryController extends Zend_Controller_Action } } + //get user settings and determine if we need to hide + // or show the playlist editor + $showPlaylist = false; + $data = Application_Model_Preference::getLibraryScreenSettings(); + if (!is_null($data)) { + if ($data["playlist"] == "true") { + $showLib = true; + } + } + $this->view->showPlaylist = $showPlaylist; + $formatter = new LengthFormatter($obj->getLength()); $this->view->length = $formatter->format(); $this->view->type = $obj_sess->type; diff --git a/airtime_mvc/application/controllers/UsersettingsController.php b/airtime_mvc/application/controllers/UsersettingsController.php index 238e67f3b..9d8154578 100644 --- a/airtime_mvc/application/controllers/UsersettingsController.php +++ b/airtime_mvc/application/controllers/UsersettingsController.php @@ -15,6 +15,7 @@ class UsersettingsController extends Zend_Controller_Action ->addActionContext('remindme', 'json') ->addActionContext('remindme-never', 'json') ->addActionContext('donotshowregistrationpopup', 'json') + ->addActionContext('set-library-screen-settings', 'json') ->initContext(); } @@ -54,6 +55,7 @@ class UsersettingsController extends Zend_Controller_Action { $request = $this->getRequest(); $settings = $request->getParam("settings"); + Application_Model_Preference::setTimelineDatatableSetting($settings); } @@ -91,4 +93,11 @@ class UsersettingsController extends Zend_Controller_Action // unset session Zend_Session::namespaceUnset('referrer'); } + + public function setLibraryScreenSettingsAction() + { + $request = $this->getRequest(); + $settings = $request->getParam("settings"); + Application_Model_Preference::setLibraryScreenSettings($settings); + } } diff --git a/airtime_mvc/application/models/Preference.php b/airtime_mvc/application/models/Preference.php index 1d56313f7..2af97d193 100644 --- a/airtime_mvc/application/models/Preference.php +++ b/airtime_mvc/application/models/Preference.php @@ -1262,7 +1262,19 @@ class Application_Model_Preference $data = self::getValue("nowplaying_screen", true); return ($data != "") ? unserialize($data) : null; } - + + public static function setLibraryScreenSettings($settings) + { + $data = serialize($settings); + self::setValue("library_screen", $data, true); + } + + public static function getLibraryScreenSettings() + { + $data = self::getValue("library_screen", true); + return ($data != "") ? unserialize($data) : null; + } + public static function SetEnableReplayGain($value) { self::setValue("enable_replay_gain", $value, false); } diff --git a/airtime_mvc/application/views/scripts/library/index.phtml b/airtime_mvc/application/views/scripts/library/index.phtml index 30c18e365..a00a32149 100644 --- a/airtime_mvc/application/views/scripts/library/index.phtml +++ b/airtime_mvc/application/views/scripts/library/index.phtml @@ -2,7 +2,14 @@ render('library/library.phtml') ?> -
    +showPlaylist) { + $display = ""; +} else { + $display = "display:none"; +} +?> +
    type == 'block') { echo $this->render('playlist/smart-block.phtml'); } else if ($this->type == 'playlist') { diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 534c5d5b7..f0f0c32a0 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -12,7 +12,7 @@ var AIRTIME = (function(AIRTIME){ viewport, $lib, $pl, - $togglePl = $(""+$.i18n._("Open Playlist")+""), + $togglePl = $(""), widgetHeight, resizeTimeout, width; @@ -720,12 +720,35 @@ var AIRTIME = (function(AIRTIME){ $lib.on("click", "#pl_edit", function() { openPlaylistPanel(); + $.ajax( { + url : baseUrl+"usersettings/set-library-screen-settings", + type : "POST", + data : { + settings : { + playlist : true + }, + format : "json" + }, + dataType : "json" + }); }); $pl.on("click", "#lib_pl_close", function() { var screenWidth = Math.floor(viewport.width - 40); $pl.hide(); $lib.width(screenWidth).find("#library_display_length").append($togglePl.show()); + + $.ajax( { + url : baseUrl+"usersettings/set-library-screen-settings", + type : "POST", + data : { + settings : { + playlist : false + }, + format : "json" + }, + dataType : "json" + }); }); $('#save_button').live("click", function(event){ @@ -1099,12 +1122,18 @@ var AIRTIME = (function(AIRTIME){ mod.onReady = function() { $lib = $("#library_content"); $pl = $("#side_playlist"); + + setWidgetSize(); AIRTIME.library.libraryInit(); AIRTIME.playlist.init(); - + + if ($pl.is(':hidden')) { + $lib.find("#library_display_length").append($togglePl.show()); + } + $pl.find(".ui-icon-alert").qtip({ content: { text: $.i18n._("Airtime is unsure about the status of this file. This can happen when the file is on a remote drive that is unaccessible or the file is in a directory that isn't 'watched' anymore.") From c0c6ac5d753acde6b242c834ab9f960047fa340b Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 11:37:22 -0500 Subject: [PATCH 124/208] CC-4954: Please make Library page remember the status per user - it was only working if there was a playlist object set - fixed so it works even if there isnt --- .../controllers/LibraryController.php | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index d63b6d4e3..a6f6b4921 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -77,21 +77,23 @@ class LibraryController extends Zend_Controller_Action } } - //get user settings and determine if we need to hide - // or show the playlist editor - $showPlaylist = false; - $data = Application_Model_Preference::getLibraryScreenSettings(); - if (!is_null($data)) { - if ($data["playlist"] == "true") { - $showLib = true; - } - } - $this->view->showPlaylist = $showPlaylist; - $formatter = new LengthFormatter($obj->getLength()); $this->view->length = $formatter->format(); $this->view->type = $obj_sess->type; } + + //get user settings and determine if we need to hide + // or show the playlist editor + $showPlaylist = false; + $data = Application_Model_Preference::getLibraryScreenSettings(); + Logging::info($data); + if (!is_null($data)) { + Logging::info($data); + if ($data["playlist"] == "true") { + $showPlaylist = true; + } + } + $this->view->showPlaylist = $showPlaylist; } catch (PlaylistNotFoundException $e) { $this->playlistNotFound($obj_sess->type); } catch (Exception $e) { From 9113853e41d9b086294a5eac27ed466d08886cf3 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 11:51:26 -0500 Subject: [PATCH 125/208] Removed logging messages from Library controller, index action --- airtime_mvc/application/controllers/LibraryController.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index a6f6b4921..79dd4b2be 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -86,9 +86,7 @@ class LibraryController extends Zend_Controller_Action // or show the playlist editor $showPlaylist = false; $data = Application_Model_Preference::getLibraryScreenSettings(); - Logging::info($data); if (!is_null($data)) { - Logging::info($data); if ($data["playlist"] == "true") { $showPlaylist = true; } From 49dc3140a8ad7a6c263ad59c1899dd9060f79020 Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 11:59:17 -0500 Subject: [PATCH 126/208] CC-4962: Library -> Library and playlist editor have different heights sometimes Fixed: needed to set height when we open the playlist editor --- airtime_mvc/public/js/airtime/library/spl.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index f0f0c32a0..93d1cd80d 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -366,8 +366,12 @@ var AIRTIME = (function(AIRTIME){ function openPlaylistPanel() { var screenWidth = Math.floor(viewport.width - 40); + viewport = AIRTIME.utilities.findViewportDimensions(); + widgetHeight = viewport.height - 185; + $lib.width(Math.floor(screenWidth * 0.53)); $pl.show().width(Math.floor(screenWidth * 0.44)); + $pl.height(widgetHeight); $("#pl_edit").hide(); } From 8bdf3508b0d98adf29acb888c29fb30e0f0800ab Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 13:38:35 -0500 Subject: [PATCH 127/208] CC-4951: Add cue in and cue out to library filter columns Done --- airtime_mvc/application/models/StoredFile.php | 18 +++++++++++++++--- .../public/js/airtime/library/library.js | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php index 1c8d83873..87d3bd62f 100644 --- a/airtime_mvc/application/models/StoredFile.php +++ b/airtime_mvc/application/models/StoredFile.php @@ -645,7 +645,8 @@ SQL; "track_number", "mood", "bpm", "composer", "info_url", "bit_rate", "sample_rate", "isrc_number", "encoded_by", "label", "copyright", "mime", "language", "filepath", "owner_id", - "conductor", "replay_gain", "lptime", "is_playlist", "is_scheduled" ); + "conductor", "replay_gain", "lptime", "is_playlist", "is_scheduled", + "cuein", "cueout" ); } public static function searchLibraryFiles($datatables) @@ -702,6 +703,11 @@ SQL; $blSelect[] = "NULL::boolean AS ".$key; $fileSelect[] = $key; $streamSelect[] = "NULL::boolean AS ".$key; + } elseif ($key === "cuein" || $key === "cueout") { + $plSelect[] = "NULL::INTERVAL AS ".$key; + $blSelect[] = "NULL::INTERVAL AS ".$key; + $fileSelect[] = $key; + $streamSelect[] = "NULL::INTERVAL AS ".$key; } //same columns in each table. else if (in_array($key, array("length", "utime", "mtime"))) { @@ -783,8 +789,14 @@ SQL; foreach ($results['aaData'] as &$row) { $row['id'] = intval($row['id']); - $formatter = new LengthFormatter($row['length']); - $row['length'] = $formatter->format(); + $len_formatter = new LengthFormatter($row['length']); + $row['length'] = $len_formatter->format(); + + $cuein_formatter = new LengthFormatter($row["cuein"]); + $row["cuein"] = $cuein_formatter->format(); + + $cueout_formatter = new LengthFormatter($row["cueout"]); + $row["cueout"] = $cueout_formatter->format(); if ($row['ftype'] === "audioclip") { $formatter = new SamplerateFormatter($row['sample_rate']); diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 89a03a90f..af30bbfa7 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -467,6 +467,8 @@ var AIRTIME = (function(AIRTIME) { /* Composer */ { "sTitle" : $.i18n._("Composer") , "mDataProp" : "composer" , "bVisible" : false , "sClass" : "library_composer" , "sWidth" : "150px" }, /* Conductor */ { "sTitle" : $.i18n._("Conductor") , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" }, /* Copyright */ { "sTitle" : $.i18n._("Copyright") , "mDataProp" : "copyright" , "bVisible" : false , "sClass" : "library_copyright" , "sWidth" : "125px" }, + /* Cue In */ { "sTitle" : $.i18n._("Cue In") , "mDataProp" : "cuein" , "bVisible" : false , "sClass" : "library_length" , "sWidth" : "80px" }, + /* Cue Out */ { "sTitle" : $.i18n._("Cue Out") , "mDataProp" : "cueout" , "bVisible" : false , "sClass" : "library_length" , "sWidth" : "80px" }, /* Encoded */ { "sTitle" : $.i18n._("Encoded By") , "mDataProp" : "encoded_by" , "bVisible" : false , "sClass" : "library_encoded" , "sWidth" : "150px" }, /* Genre */ { "sTitle" : $.i18n._("Genre") , "mDataProp" : "genre" , "bVisible" : false , "sClass" : "library_genre" , "sWidth" : "100px" }, /* ISRC Number */ { "sTitle" : $.i18n._("ISRC") , "mDataProp" : "isrc_number" , "bVisible" : false , "sClass" : "library_isrc" , "sWidth" : "150px" }, From 32fc5eb75845cbb2af0bfb3e0a1d2deba5684aff Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 14:44:32 -0500 Subject: [PATCH 128/208] CC-4951: Add cue in and cue out to library filter columns Configured advanced search for these columns --- airtime_mvc/public/js/airtime/library/library.js | 2 ++ .../public/js/datatables/plugin/dataTables.columnFilter.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index af30bbfa7..c738d900c 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -1346,6 +1346,8 @@ var validationTypes = { "composer" : "s", "conductor" : "s", "copyright" : "s", + "cuein" : "l", + "cueout" : "l", "encoded_by" : "s", "utime" : "t", "mtime" : "t", diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js b/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js index 07c8bba72..fbf333082 100644 --- a/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js +++ b/airtime_mvc/public/js/datatables/plugin/dataTables.columnFilter.js @@ -187,7 +187,7 @@ label = $.i18n._("kbps"); } else if (th.attr('id') == "utime" || th.attr('id') == "mtime" || th.attr('id') == "lptime") { label = $.i18n._("yyyy-mm-dd"); - } else if (th.attr('id') == "length") { + } else if (th.attr('id') == "length" || th.attr('id') == "cuein" || th.attr('id') == "cueout") { label = $.i18n._("hh:mm:ss.t"); } else if (th.attr('id') == "sample_rate") { label = $.i18n._("kHz"); From 959839e18001c1de83e3bde3914bdf16b9b4392f Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 15:09:24 -0500 Subject: [PATCH 129/208] Renamed criteriaTypes to libraryColumnTypes for library advanced search --- airtime_mvc/public/js/airtime/library/library.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index c738d900c..942cd39dc 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -7,8 +7,13 @@ var AIRTIME = (function(AIRTIME) { LIB_SELECTED_CLASS = "lib-selected", chosenItems = {}, visibleChosenItems = {}; - - var criteriaTypes = { + + // we need to know whether the criteria value is string or + // numeric in order to provide a single textbox or range textboxes + // in the advanced search + // s => string + // n => numberic + var libraryColumnTypes = { 0 : "", "album_title" : "s", "artist_name" : "s", @@ -18,6 +23,8 @@ var AIRTIME = (function(AIRTIME) { "composer" : "s", "conductor" : "s", "copyright" : "s", + "cuein" : "n", + "cueout" : "n", "utime" : "n", "mtime" : "n", "lptime" : "n", @@ -399,7 +406,7 @@ var AIRTIME = (function(AIRTIME) { var inputClass = 'filter_column filter_number_text'; var labelStyle = "style='margin-right:35px;'"; - if (criteriaTypes[ele.mDataProp] != "s") { + if (libraryColumnTypes[ele.mDataProp] != "s") { inputClass = 'filterColumn filter_number_range'; labelStyle = ""; } @@ -418,7 +425,7 @@ var AIRTIME = (function(AIRTIME) { "
    "); } - if (criteriaTypes[ele.mDataProp] == "s") { + if (libraryColumnTypes[ele.mDataProp] == "s") { var obj = { sSelector: "#"+ele.mDataProp } } else { var obj = { sSelector: "#"+ele.mDataProp, type: "number-range" } From c8d7d23d62950c99c2d635113339254672684ccd Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 16:38:58 -0500 Subject: [PATCH 130/208] CC-4963: Add cue in and cue out to smart block criteria list Done --- .../application/forms/SmartBlockCriteria.php | 65 +++++++++++-------- airtime_mvc/application/models/Block.php | 6 +- .../js/airtime/playlist/smart_blockbuilder.js | 6 +- 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/airtime_mvc/application/forms/SmartBlockCriteria.php b/airtime_mvc/application/forms/SmartBlockCriteria.php index f47117b63..d981fdb49 100644 --- a/airtime_mvc/application/forms/SmartBlockCriteria.php +++ b/airtime_mvc/application/forms/SmartBlockCriteria.php @@ -5,6 +5,11 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm private $stringCriteriaOptions; private $numericCriteriaOptions; private $limitOptions; + + /* We need to know if the criteria value will be a string + * or numeric value in order to populate the modifier + * select list + */ private $criteriaTypes = array( 0 => "", "album_title" => "s", @@ -13,6 +18,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm "composer" => "s", "conductor" => "s", "copyright" => "s", + "cuein" => "n", + "cueout" => "n", "artist_name" => "s", "encoded_by" => "s", "utime" => "n", @@ -45,6 +52,8 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm "composer" => _("Composer"), "conductor" => _("Conductor"), "copyright" => _("Copyright"), + "cuein" => _("Cue In"), + "cueout" => _("Cue Out"), "artist_name" => _("Creator"), "encoded_by" => _("Encoded By"), "genre" => _("Genre"), @@ -416,32 +425,34 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm $isValid = true; $data = $this->preValidation($params); $criteria2PeerMap = array( - 0 => "Select criteria", - "album_title" => "DbAlbumTitle", - "artist_name" => "DbArtistName", - "bit_rate" => "DbBitRate", - "bpm" => "DbBpm", - "composer" => "DbComposer", - "conductor" => "DbConductor", - "copyright" => "DbCopyright", - "encoded_by" => "DbEncodedBy", - "utime" => "DbUtime", - "mtime" => "DbMtime", - "lptime" => "DbLPtime", - "genre" => "DbGenre", - "info_url" => "DbInfoUrl", - "isrc_number" => "DbIsrcNumber", - "label" => "DbLabel", - "language" => "DbLanguage", - "length" => "DbLength", - "mime" => "DbMime", - "mood" => "DbMood", - "owner_id" => "DbOwnerId", - "replay_gain" => "DbReplayGain", - "sample_rate" => "DbSampleRate", - "track_title" => "DbTrackTitle", - "track_number" => "DbTrackNumber", - "year" => "DbYear" + 0 => "Select criteria", + "album_title" => "DbAlbumTitle", + "artist_name" => "DbArtistName", + "bit_rate" => "DbBitRate", + "bpm" => "DbBpm", + "composer" => "DbComposer", + "conductor" => "DbConductor", + "copyright" => "DbCopyright", + "cuein" => "DbCuein", + "cueout" => "DbCueout", + "encoded_by" => "DbEncodedBy", + "utime" => "DbUtime", + "mtime" => "DbMtime", + "lptime" => "DbLPtime", + "genre" => "DbGenre", + "info_url" => "DbInfoUrl", + "isrc_number" => "DbIsrcNumber", + "label" => "DbLabel", + "language" => "DbLanguage", + "length" => "DbLength", + "mime" => "DbMime", + "mood" => "DbMood", + "owner_id" => "DbOwnerId", + "replay_gain" => "DbReplayGain", + "sample_rate" => "DbSampleRate", + "track_title" => "DbTrackTitle", + "track_number" => "DbTrackNumber", + "year" => "DbYear" ); // things we need to check @@ -492,7 +503,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm } else { $column = CcFilesPeer::getTableMap()->getColumnByPhpName($criteria2PeerMap[$d['sp_criteria_field']]); // validation on type of column - if ($d['sp_criteria_field'] == 'length') { + if (in_array($d['sp_criteria_field'], array('length', 'cuein', 'cueout'))) { if (!preg_match("/^(\d{2}):(\d{2}):(\d{2})/", $d['sp_criteria_value'])) { $element->addError(_("'Length' should be in '00:00:00' format")); $isValid = false; diff --git a/airtime_mvc/application/models/Block.php b/airtime_mvc/application/models/Block.php index 6ba02ccb5..b364e5eb5 100644 --- a/airtime_mvc/application/models/Block.php +++ b/airtime_mvc/application/models/Block.php @@ -63,6 +63,8 @@ class Application_Model_Block implements Application_Model_LibraryEditable "composer" => "DbComposer", "conductor" => "DbConductor", "copyright" => "DbCopyright", + "cuein" => "DbCuein", + "cueout" => "DbCueout", "encoded_by" => "DbEncodedBy", "utime" => "DbUtime", "mtime" => "DbMtime", @@ -1278,6 +1280,8 @@ SQL; "composer" => _("Composer"), "conductor" => _("Conductor"), "copyright" => _("Copyright"), + "cuein" => _("Cue In"), + "cueout" => _("Cue Out"), "artist_name" => _("Creator"), "encoded_by" => _("Encoded By"), "genre" => _("Genre"), @@ -1370,7 +1374,7 @@ SQL; * user only sees the rounded version (i.e. 4:02.7 is 4:02.761625 * in the database) */ - } elseif ($spCriteria == 'length' && $spCriteriaModifier == "is") { + } elseif (in_array($spCriteria, array('length', 'cuein', 'cueout')) && $spCriteriaModifier == "is") { $spCriteriaModifier = "starts with"; $spCriteria = $spCriteria.'::text'; $spCriteriaValue = $criteria['value']; diff --git a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js index 022e93148..f47a7b8ed 100644 --- a/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js +++ b/airtime_mvc/public/js/airtime/playlist/smart_blockbuilder.js @@ -559,7 +559,9 @@ function enableLoadingIcon() { function disableLoadingIcon() { $("#side_playlist").unblock() } - +// We need to know if the criteria value will be a string +// or numeric value in order to populate the modifier +// select list var criteriaTypes = { 0 : "", "album_title" : "s", @@ -568,6 +570,8 @@ var criteriaTypes = { "composer" : "s", "conductor" : "s", "copyright" : "s", + "cuein" : "n", + "cueout" : "n", "artist_name" : "s", "encoded_by" : "s", "utime" : "n", From 176e78632f605c357eb5ea42a2825fa9a902cf5a Mon Sep 17 00:00:00 2001 From: denise Date: Tue, 19 Feb 2013 16:43:47 -0500 Subject: [PATCH 131/208] Added a comment about referring to the wiki when adding a new datatable column --- airtime_mvc/public/js/airtime/library/library.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 942cd39dc..fa9de60f0 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -460,6 +460,9 @@ var AIRTIME = (function(AIRTIME) { // put hidden columns at the top to insure they can never be visible // on the table through column reordering. + + //IMPORTANT: WHEN ADDING A NEW COLUMN PLEASE CONSULT WITH THE WIKI + // https://wiki.sourcefabric.org/display/CC/Adding+a+new+library+datatable+column "aoColumns": [ /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false } , /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "25px" , "sClass" : "library_checkbox" } , From 8f53871ddcfb1fd3ac2744af74c1bfc722c8d09f Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 20 Feb 2013 14:40:16 -0500 Subject: [PATCH 132/208] CC-4970: Process return codes aren't "reaped" after exiting - Zombie processes are created. -fixed --- python_apps/media-monitor2/media/metadata/process.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python_apps/media-monitor2/media/metadata/process.py b/python_apps/media-monitor2/media/metadata/process.py index ccaa1f41c..74d008b66 100644 --- a/python_apps/media-monitor2/media/metadata/process.py +++ b/python_apps/media-monitor2/media/metadata/process.py @@ -174,7 +174,8 @@ def normalize_mutagen(path): try: command = ['silan', '-f', 'JSON', md['path']] proc = subprocess.Popen(command, stdout=subprocess.PIPE) - out = proc.stdout.read() + out = proc.communicate()[0].strip('\r\n') + info = json.loads(out) md['cuein'] = info['sound'][0][0] md['cueout'] = info['sound'][-1][1] From 0f19ffc7df96df38f8af0f2128d7562faadf8573 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 20 Feb 2013 15:02:37 -0500 Subject: [PATCH 133/208] CC-4965: Fix airtime-silan import tool -move to correct directory --- utils/{airtime-silan => }/airtime-silan | 0 utils/{airtime-silan => }/airtime-silan.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename utils/{airtime-silan => }/airtime-silan (100%) rename utils/{airtime-silan => }/airtime-silan.py (100%) diff --git a/utils/airtime-silan/airtime-silan b/utils/airtime-silan similarity index 100% rename from utils/airtime-silan/airtime-silan rename to utils/airtime-silan diff --git a/utils/airtime-silan/airtime-silan.py b/utils/airtime-silan.py similarity index 100% rename from utils/airtime-silan/airtime-silan.py rename to utils/airtime-silan.py From b8f9acc0e50f3b97bc110ae8694845334f719746 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 20 Feb 2013 15:11:27 -0500 Subject: [PATCH 134/208] CC-4965: Fix airtime-silan import tool -various fixes --- utils/airtime-silan | 48 ++++++++++++++++++++++++++++++------------ utils/airtime-silan.py | 15 ++++++------- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/utils/airtime-silan b/utils/airtime-silan index be88f8954..efb96ef30 100755 --- a/utils/airtime-silan +++ b/utils/airtime-silan @@ -1,22 +1,42 @@ #!/bin/bash +#------------------------------------------------------------------------------- +# Copyright (c) 2011 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 handles update cue-in/cue-out points for files that already exist +# in Airtime's library. +# +exec 2>&1 +airtime_silan_script="airtime-silan.py" +api_client_path="/usr/lib/airtime/" virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/" . ${virtualenv_bin}activate -invokePwd=$PWD - -#airtime_silan_path="/usr/lib/airtime/utils/airtime-silan/" -airtime_silan_path="/home/james/src/airtime/utils/airtime-silan/" -airtime_silan_script="airtime-silan.py" - -api_client_path="/usr/lib/airtime/" -cd ${airtime_silan_path} - -exec 2>&1 - export PYTHONPATH=${api_client_path} -# Note the -u when calling python! we need it to get unbuffered binary stdout and stderr -exec python -u ${airtime_silan_path}${airtime_silan_script} --dir "$invokePwd" "$@" +# Absolute path to this script +SCRIPT=`readlink -f $0` +# Absolute directory this script is in +SCRIPTPATH=`dirname $SCRIPT` -# EOF +cd $SCRIPTPATH +python ${airtime_silan_script} diff --git a/utils/airtime-silan.py b/utils/airtime-silan.py index bd8a0af4d..465edae6f 100644 --- a/utils/airtime-silan.py +++ b/utils/airtime-silan.py @@ -1,11 +1,12 @@ -import logging +from configobj import ConfigObj from api_clients import api_client as apc + +import logging import json import shutil import commands import os import sys -from configobj import ConfigObj import subprocess import traceback @@ -19,16 +20,16 @@ logging.disable(50) # add ch to logger logger.addHandler(ch) -if (os.geteuid() != 0): +if os.geteuid() != 0: print 'Must be a root user.' - sys.exit() + sys.exit(1) # loading config file try: config = ConfigObj('/etc/airtime/media-monitor.cfg') except Exception, e: print('Error loading config file: %s', e) - sys.exit() + sys.exit(1) api_client = apc.AirtimeApiClient(config) @@ -58,7 +59,7 @@ try: data['cueout'] = str('{0:f}'.format(info['sound'][-1][1])) processed_data.append((f['id'], data)) total += 1 - if (total % 5 == 0): + if total % 5 == 0: print "Total %s / %s files has been processed.." % (total, total_files) except Exception, e: print e @@ -77,5 +78,3 @@ try: except Exception, e: print e print traceback.format_exc() - -#update_cue_values_by_silan From b001053d915d403fbaf9d2bd0575ee661132e6ad Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 20 Feb 2013 15:19:09 -0500 Subject: [PATCH 135/208] add airtime-silan to symlink to /usr/bin --- install_minimal/include/airtime-copy-files.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install_minimal/include/airtime-copy-files.sh b/install_minimal/include/airtime-copy-files.sh index 92d9e0c6c..20b128a68 100755 --- a/install_minimal/include/airtime-copy-files.sh +++ b/install_minimal/include/airtime-copy-files.sh @@ -84,6 +84,7 @@ ln -sf /usr/lib/airtime/utils/airtime-check-system /usr/bin/airtime-check-system ln -sf /usr/lib/airtime/utils/airtime-log /usr/bin/airtime-log ln -sf /usr/lib/airtime/utils/airtime-test-soundcard /usr/bin/airtime-test-soundcard ln -sf /usr/lib/airtime/utils/airtime-test-stream /usr/bin/airtime-test-stream +ln -sf /usr/lib/airtime/utils/airtime-silan /usr/bin/airtime-silan echo "* Creating /var/log/airtime" mkdir -p /var/log/airtime From 671c6276078b76df5ffeedb8e4e8591bfc1d7433 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 20 Feb 2013 15:22:58 -0500 Subject: [PATCH 136/208] CC-4965: Fix airtime-silan import tool -prevent zombie processes --- utils/airtime-silan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/airtime-silan.py b/utils/airtime-silan.py index 465edae6f..04ec86745 100644 --- a/utils/airtime-silan.py +++ b/utils/airtime-silan.py @@ -52,7 +52,7 @@ try: try: command = ['silan', '-f', 'JSON', full_path] proc = subprocess.Popen(command, stdout=subprocess.PIPE) - out = proc.stdout.read() + out = proc.communicate()[0].strip('\r\n') info = json.loads(out) data = {} data['cuein'] = str('{0:f}'.format(info['sound'][0][0])) From 57183b8ac82f0807d0159894a5444442b94fe944 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 22 Feb 2013 12:03:39 -0500 Subject: [PATCH 137/208] prevent creation of Zombie processes when running lsof --- python_apps/media-monitor2/media/monitor/pure.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index d3b6ded30..2eedfe4b4 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -166,8 +166,9 @@ def walk_supported(directory, clean_empties=False): def file_locked(path): - f = Popen(["lsof", path], stdout=PIPE).stdout - return bool(f.readlines()) + proc = Popen(["lsof", path], stdout=PIPE) + out = proc.communicate()[0].strip('\r\n') + return bool(out) def magic_move(old, new, after_dir_make=lambda : None): """ Moves path old to new and constructs the necessary to From deb50ea76948d1c7e0bf30e82982ef237bc4e4f9 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 25 Feb 2013 16:44:28 -0500 Subject: [PATCH 138/208] make sure path names are quoted when passing to lsof --- python_apps/media-monitor2/media/monitor/pure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index 2eedfe4b4..e808783a6 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -166,7 +166,7 @@ def walk_supported(directory, clean_empties=False): def file_locked(path): - proc = Popen(["lsof", path], stdout=PIPE) + proc = Popen(["lsof", '"%s"' % path], stdout=PIPE) out = proc.communicate()[0].strip('\r\n') return bool(out) From e35416b1e8620d9a89eea4d96b288156f50d054a Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 25 Feb 2013 17:43:02 -0500 Subject: [PATCH 139/208] undo - make sure path names are quoted when passing to lsof --- python_apps/media-monitor2/media/metadata/process.py | 2 +- python_apps/media-monitor2/media/monitor/pure.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/python_apps/media-monitor2/media/metadata/process.py b/python_apps/media-monitor2/media/metadata/process.py index 74d008b66..a9c251944 100644 --- a/python_apps/media-monitor2/media/metadata/process.py +++ b/python_apps/media-monitor2/media/metadata/process.py @@ -170,7 +170,7 @@ def normalize_mutagen(path): md['mime'] = m.mime[0] if len(m.mime) > 0 else u'' md['path'] = normpath(path) - # silence detect(set default queue in and out) + # silence detect(set default cue in and out) try: command = ['silan', '-f', 'JSON', md['path']] proc = subprocess.Popen(command, stdout=subprocess.PIPE) diff --git a/python_apps/media-monitor2/media/monitor/pure.py b/python_apps/media-monitor2/media/monitor/pure.py index e808783a6..31863ac2b 100644 --- a/python_apps/media-monitor2/media/monitor/pure.py +++ b/python_apps/media-monitor2/media/monitor/pure.py @@ -166,7 +166,8 @@ def walk_supported(directory, clean_empties=False): def file_locked(path): - proc = Popen(["lsof", '"%s"' % path], stdout=PIPE) + #Capture stderr to avoid polluting py-interpreter.log + proc = Popen(["lsof", path], stdout=PIPE, stderr=PIPE) out = proc.communicate()[0].strip('\r\n') return bool(out) From e08732fba713432be2a595913cce150c69bab07e Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Mon, 25 Feb 2013 19:45:26 -0500 Subject: [PATCH 140/208] CC-4975: airtime-silan cmd error -fixed --- airtime_mvc/application/controllers/ApiController.php | 9 ++++++--- python_apps/api_clients/api_client.py | 6 +++++- utils/airtime-silan.py | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 083666945..512eb1b10 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -45,6 +45,7 @@ class ApiController extends Zend_Controller_Action ->addActionContext('push-stream-stats' , 'json') ->addActionContext('update-stream-setting-table' , 'json') ->addActionContext('update-replay-gain-value' , 'json') + ->addActionContext('update-cue-values-by-silan' , 'json') ->initContext(); } @@ -962,13 +963,13 @@ class ApiController extends Zend_Controller_Action public function updateCueValuesBySilanAction() { - // disable layout + // disable the view and the layout $this->view->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); - + $request = $this->getRequest(); $data = json_decode($request->getParam('data')); - Logging::info($data); + foreach ($data as $pair) { list($id, $info) = $pair; // TODO : move this code into model -- RG @@ -980,6 +981,8 @@ class ApiController extends Zend_Controller_Action $file->setDbSilanCheck(true); $file->save(); } + + echo json_encode(array()); } public function notifyWebstreamDataAction() diff --git a/python_apps/api_clients/api_client.py b/python_apps/api_clients/api_client.py index e8dbbd16a..991fd3f7c 100644 --- a/python_apps/api_clients/api_client.py +++ b/python_apps/api_clients/api_client.py @@ -92,7 +92,11 @@ class ApiRequest(object): raise # Ghetto hack for now because we don't the content type we are getting # (Pointless to look at mime since it's not being set correctly always) - return json.loads(response) + try: + return json.loads(response) + except Exception: + self.logger.error(response) + raise def req(self, *args, **kwargs): self.__req = lambda : self(*args, **kwargs) diff --git a/utils/airtime-silan.py b/utils/airtime-silan.py index 04ec86745..08bc04b55 100644 --- a/utils/airtime-silan.py +++ b/utils/airtime-silan.py @@ -67,7 +67,7 @@ try: break print "Processed: %d songs" % total subtotal += total - total = 0 + try: print api_client.update_cue_values_by_silan(processed_data) except Exception ,e: From 1e1d291124072c497a0f33240ae364ee3bca46f1 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 26 Feb 2013 12:06:22 -0500 Subject: [PATCH 141/208] CC-4888: Add unofficial support for AAC plugin -fixed --- .../media-monitor/airtimefilemonitor/replaygain.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/python_apps/media-monitor/airtimefilemonitor/replaygain.py b/python_apps/media-monitor/airtimefilemonitor/replaygain.py index cc0f148f9..f5c29a538 100644 --- a/python_apps/media-monitor/airtimefilemonitor/replaygain.py +++ b/python_apps/media-monitor/airtimefilemonitor/replaygain.py @@ -57,14 +57,18 @@ def get_file_type(file_path): file_type = 'vorbis' elif re.search(r'flac$', file_path, re.IGNORECASE): file_type = 'flac' + elif re.search(r'(mp4|m4a)$', file_path, re.IGNORECASE): + file_type = 'mp4' else: mime_type = get_mime_type(file_path) == "audio/mpeg" if 'mpeg' in mime_type: file_type = 'mp3' - elif 'ogg' in mime_type: + elif 'ogg' in mime_type or "oga" in mime_type: file_type = 'vorbis' elif 'flac' in mime_type: file_type = 'flac' + elif 'mp4' in mime_type or "m4a" in mime_type: + file_type = 'mp4' return file_type @@ -109,6 +113,12 @@ def calculate_replay_gain(file_path): search = re.search(r'REPLAYGAIN_TRACK_GAIN=(.*) dB', out) else: logger.warn("metaflac not found") + elif file_type == 'mp4': + if run_process("which aacgain > /dev/null") == 0: + out = get_process_output('aacgain -q "%s" 2> /dev/null' % temp_file_path) + search = re.search(r'Recommended "Track" dB change: (.*)', out) + else: + logger.warn("aacgain not found") else: pass From 0c88949eb2bda13129baf102d3950afc64320201 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 26 Feb 2013 13:33:56 -0500 Subject: [PATCH 142/208] potential future optimization by using -b silan option -in the future this -b should be quicker for silan --- python_apps/media-monitor2/media/metadata/process.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python_apps/media-monitor2/media/metadata/process.py b/python_apps/media-monitor2/media/metadata/process.py index a9c251944..9128c0bec 100644 --- a/python_apps/media-monitor2/media/metadata/process.py +++ b/python_apps/media-monitor2/media/metadata/process.py @@ -172,13 +172,13 @@ def normalize_mutagen(path): # silence detect(set default cue in and out) try: - command = ['silan', '-f', 'JSON', md['path']] + command = ['silan', "-b", '-f', 'JSON', md['path']] proc = subprocess.Popen(command, stdout=subprocess.PIPE) out = proc.communicate()[0].strip('\r\n') info = json.loads(out) md['cuein'] = info['sound'][0][0] - md['cueout'] = info['sound'][-1][1] + md['cueout'] = info['sound'][0][1] except Exception: logger = logging.getLogger() logger.info('silan is missing') From 15f253322527dbe6c3aa603add1e7afed58156c1 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 26 Feb 2013 13:34:05 -0500 Subject: [PATCH 143/208] less verbose logging --- python_apps/pypo/listenerstat.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/python_apps/pypo/listenerstat.py b/python_apps/pypo/listenerstat.py index 18dbd4f1e..1a7bb27b1 100644 --- a/python_apps/pypo/listenerstat.py +++ b/python_apps/pypo/listenerstat.py @@ -102,7 +102,6 @@ class ListenerStat(Thread): stats.append(self.get_shoutcast_stats(v)) self.update_listener_stat_error(v["mount"], 'OK') except Exception, e: - self.logger.error('Exception: %s', e) try: self.update_listener_stat_error(v["mount"], str(e)) except Exception, e: @@ -126,13 +125,9 @@ class ListenerStat(Thread): while True: try: stream_parameters = self.get_stream_parameters() - stats = self.get_stream_stats(stream_parameters["stream_params"]) - self.logger.debug(stats) - if not stats: - self.logger.error("Not able to get listener stats") - else: + if stats: self.push_stream_stats(stats) except Exception, e: self.logger.error('Exception: %s', e) From fbaba59dca707f2e9a2dff7587e8c7cdfec455d8 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Tue, 26 Feb 2013 14:47:48 -0500 Subject: [PATCH 144/208] CC-4974: Watchdog for ensuring Liquidsoap does not consume more than 1GB of memory -changed to 600MB for now. May lower even more later --- python_apps/pypo/airtime-liquidsoap | 2 +- python_apps/pypo/airtime-liquidsoap-init-d | 7 +++++-- python_apps/pypo/liquidsoap_scripts/ls_script.liq | 4 +++- python_apps/pypo/monit-airtime-liquidsoap.cfg | 9 ++++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/python_apps/pypo/airtime-liquidsoap b/python_apps/pypo/airtime-liquidsoap index bfefcf46f..75821b942 100755 --- a/python_apps/pypo/airtime-liquidsoap +++ b/python_apps/pypo/airtime-liquidsoap @@ -6,7 +6,7 @@ virtualenv_bin="/usr/lib/airtime/airtime_virtualenv/bin/" ls_user="pypo" export HOME="/var/tmp/airtime/pypo/" api_client_path="/usr/lib/airtime/" -ls_path="/usr/bin/airtime-liquidsoap --verbose -f" +ls_path="/usr/bin/airtime-liquidsoap --verbose -f -d" ls_param="/usr/lib/airtime/pypo/bin/liquidsoap_scripts/ls_script.liq" exec 2>&1 diff --git a/python_apps/pypo/airtime-liquidsoap-init-d b/python_apps/pypo/airtime-liquidsoap-init-d index 7096bc59c..106006fab 100755 --- a/python_apps/pypo/airtime-liquidsoap-init-d +++ b/python_apps/pypo/airtime-liquidsoap-init-d @@ -20,8 +20,11 @@ start () { chown pypo:pypo /var/log/airtime/pypo chown pypo:pypo /var/log/airtime/pypo-liquidsoap - start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ - --nicelevel -15 --make-pidfile --pidfile $PIDFILE --startas $DAEMON + touch /var/run/airtime-liquidsoap.pid + chown pypo:pypo /var/run/airtime-liquidsoap.pid + + start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \ + --pidfile /var/run/airtime-liquidsoap.pid --nicelevel -15 --startas $DAEMON monit monitor airtime-liquidsoap >/dev/null 2>&1 } diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 489d494a3..6663193f0 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -1,10 +1,12 @@ -%include "library/pervasives.liq" %include "/etc/airtime/liquidsoap.cfg" set("log.file.path", log_file) set("log.stdout", true) set("server.telnet", true) set("server.telnet.port", 1234) +set("init.daemon.pidfile.path", "/var/run/airtime-liquidsoap.pid") + +%include "library/pervasives.liq" #Dynamic source list #dyn_sources = ref [] diff --git a/python_apps/pypo/monit-airtime-liquidsoap.cfg b/python_apps/pypo/monit-airtime-liquidsoap.cfg index f8efcaf18..297854faa 100644 --- a/python_apps/pypo/monit-airtime-liquidsoap.cfg +++ b/python_apps/pypo/monit-airtime-liquidsoap.cfg @@ -1,4 +1,4 @@ - set daemon 10 # Poll at 5 second intervals + set daemon 15 # Poll at 5 second intervals set logfile /var/log/monit.log set httpd port 2812 @@ -7,3 +7,10 @@ with pidfile "/var/run/airtime-liquidsoap.pid" start program = "/etc/init.d/airtime-liquidsoap start" with timeout 5 seconds stop program = "/etc/init.d/airtime-liquidsoap stop" + + if mem > 600 MB for 3 cycles then restart + if failed host localhost port 1234 + send "version\r\nexit\r\n" + expect "Liquidsoap" + retry 3 + then restart From baf693d1a97ed97f59105e3f580b12a1314c77c9 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 27 Feb 2013 17:36:43 +0100 Subject: [PATCH 145/208] CC-4980: Create graphic with 4 switches for Airtime Dashboard --- airtime_mvc/public/css/masterpanel.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/public/css/masterpanel.css b/airtime_mvc/public/css/masterpanel.css index 39c95044f..a391ce306 100644 --- a/airtime_mvc/public/css/masterpanel.css +++ b/airtime_mvc/public/css/masterpanel.css @@ -24,7 +24,7 @@ margin-left:0; } .source-info-block ul { - margin:0 0 0 7px; + margin:-3px 0 0 7px; padding:0; } .source-info-block li { @@ -35,14 +35,14 @@ height:15px; padding-right:0; overflow:visible; + padding-bottom:3px; } .source-info-block li:first-child { background-position: right -50px; - padding-bottom:3px; } .source-info-block li:last-child { background-position: right -150px; - padding-top:3px; + padding-top:0; } .source-info-block li div.source-label { margin-right:0; @@ -51,7 +51,7 @@ height:15px; line-height:14px; padding:0 2px 0 3px; - background:#3e3e3e; + background:#333; -webkit-border-radius:2px 0 0 2px; -moz-border-radius:2px 0 0 2px; border-radius:2px 0 0 2px; @@ -66,11 +66,11 @@ float:left; height:15px; padding:0; - border-left:2px solid #3e3e3e; + border-left:2px solid #333; background:url(images/source_to_switch_lines.png) repeat-x 0 0; } .source-info-block li .line-to-switch.off { - border-color:#3e3e3e; + border-color:#333; background:url(images/source_to_switch_lines.png) repeat-x 0 0; } .source-info-block li .line-to-switch.on { From 943538ed9dbf6007a7b1be8ff2486d4e6d061ed7 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 27 Feb 2013 14:35:35 -0500 Subject: [PATCH 146/208] Revert "CC-4980: Create graphic with 4 switches for Airtime Dashboard" This reverts commit baf693d1a97ed97f59105e3f580b12a1314c77c9. --- airtime_mvc/public/css/masterpanel.css | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/airtime_mvc/public/css/masterpanel.css b/airtime_mvc/public/css/masterpanel.css index a391ce306..39c95044f 100644 --- a/airtime_mvc/public/css/masterpanel.css +++ b/airtime_mvc/public/css/masterpanel.css @@ -24,7 +24,7 @@ margin-left:0; } .source-info-block ul { - margin:-3px 0 0 7px; + margin:0 0 0 7px; padding:0; } .source-info-block li { @@ -35,14 +35,14 @@ height:15px; padding-right:0; overflow:visible; - padding-bottom:3px; } .source-info-block li:first-child { background-position: right -50px; + padding-bottom:3px; } .source-info-block li:last-child { background-position: right -150px; - padding-top:0; + padding-top:3px; } .source-info-block li div.source-label { margin-right:0; @@ -51,7 +51,7 @@ height:15px; line-height:14px; padding:0 2px 0 3px; - background:#333; + background:#3e3e3e; -webkit-border-radius:2px 0 0 2px; -moz-border-radius:2px 0 0 2px; border-radius:2px 0 0 2px; @@ -66,11 +66,11 @@ float:left; height:15px; padding:0; - border-left:2px solid #333; + border-left:2px solid #3e3e3e; background:url(images/source_to_switch_lines.png) repeat-x 0 0; } .source-info-block li .line-to-switch.off { - border-color:#333; + border-color:#3e3e3e; background:url(images/source_to_switch_lines.png) repeat-x 0 0; } .source-info-block li .line-to-switch.on { From b3ecb477be561d5226996039888384dc8ffcc234 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Wed, 27 Feb 2013 17:48:10 -0500 Subject: [PATCH 147/208] minor refactor of LS code --- .../pypo/liquidsoap_scripts/ls_script.liq | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 6663193f0..a0ec38014 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -33,8 +33,6 @@ s2_namespace = ref '' s3_namespace = ref '' just_switched = ref false -#stream_harbor_pass = list.hd(get_process_lines('pwgen -s -N 1 -n 20')) - %include "ls_lib.liq" queue = audio_to_stereo(id="queue_src", request.equeue(id="queue", length=0.5)) @@ -235,7 +233,7 @@ def append_dj_inputs(master_harbor_input_port, transitions=[transition, transition, transition], [({!master_dj_enabled},master_dj), ({!live_dj_enabled},dj_live), - ({true}, s)]) + ({!scheduled_play_enabled}, s)]) elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != "" then master_dj = mksafe( @@ -253,7 +251,7 @@ def append_dj_inputs(master_harbor_input_port, switch(id="master_dj_switch", track_sensitive=false, transitions=[transition, transition], - [({!master_dj_enabled},master_dj), ({true}, s)]) + [({!master_dj_enabled},master_dj), ({!scheduled_play_enabled}, s)]) elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then dj_live = mksafe( @@ -271,18 +269,21 @@ def append_dj_inputs(master_harbor_input_port, switch(id="live_dj_switch", track_sensitive=false, transitions=[transition, transition], - [({!live_dj_enabled},dj_live), ({true}, s)]) + [({!live_dj_enabled},dj_live), ({!scheduled_play_enabled}, s)]) else s end end -s = switch(id="default_switch", track_sensitive=false, - transitions=[transition_default, transition], - [({!scheduled_play_enabled}, stream_queue),({true},default)]) + s = append_dj_inputs(master_live_stream_port, master_live_stream_mp, - dj_live_stream_port, dj_live_stream_mp, s) + dj_live_stream_port, dj_live_stream_mp, stream_queue) + +s = fallback(id="default_fallback", + track_sensitive=false, + transitions=[transition_default, transition], + [s, default]) # Attach a skip command to the source s: From 66fbfa1554ee1c068d2697e3403547ded4b6f3a5 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 28 Feb 2013 16:27:52 -0500 Subject: [PATCH 148/208] CC-4986: Installation fail because of monit-airtime-liquidsoap.cfg -fixed --- python_apps/pypo/install/pypo-copy-files.py | 34 ++++++++++++++++++- .../pypo/monit-pre530-airtime-playout.cfg | 9 +++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 python_apps/pypo/monit-pre530-airtime-playout.cfg diff --git a/python_apps/pypo/install/pypo-copy-files.py b/python_apps/pypo/install/pypo-copy-files.py index ed7368b87..fd80e7113 100644 --- a/python_apps/pypo/install/pypo-copy-files.py +++ b/python_apps/pypo/install/pypo-copy-files.py @@ -6,6 +6,7 @@ import sys import subprocess import random import string +import re from configobj import ConfigObj if os.geteuid() != 0: @@ -36,6 +37,30 @@ def get_rand_string(length=10): def get_rand_string(length=10): return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(length)) +def get_monit_version(): + version = 0 + try: + p = subprocess.Popen(['monit', '-V'], stdout=subprocess.PIPE) + out = p.communicate()[0].strip() + search = re.search(r'This is Monit version (.*)\n', out, re.IGNORECASE) + + if search: + matches = search.groups() + if len(matches) == 1: + version = matches[0] + except Exception: + print "Could not get monit version" + + return version + +#return 1 if version1 > version2 +#return 0 if version1 == version2 +#return -1 if version1 < version2 +def version_compare(version1, version2): + def normalize(v): + return [int(x) for x in re.sub(r'(\.0+)*$','', v).split(".")] + return cmp(normalize(version1), normalize(version2)) + PATH_INI_FILE = '/etc/airtime/pypo.cfg' try: @@ -65,7 +90,14 @@ try: subprocess.call('sed -i "s/\$admin_pass/%s/g" /etc/monit/conf.d/monit-airtime-generic.cfg' % get_rand_string(), shell=True) shutil.copy('%s/../../monit/monit-airtime-rabbitmq-server.cfg'%current_script_dir, '/etc/monit/conf.d/') - shutil.copy('%s/../monit-airtime-liquidsoap.cfg'%current_script_dir, '/etc/monit/conf.d/') + monit_version = get_monit_version() + if version_compare(monit_version, "5.3.0") >= 0: + shutil.copy('%s/../monit-airtime-liquidsoap.cfg' % current_script_dir, \ + '/etc/monit/conf.d/monit-airtime-liquidsoap.cfg') + else: + shutil.copy('%s/../monit-pre530-airtime-liquidsoap.cfg' % current_script_dir, \ + '/etc/monit/conf.d/monit-airtime-liquidsoap.cfg') + shutil.copy('%s/../monit-airtime-playout.cfg'%current_script_dir, '/etc/monit/conf.d/') #create pypo log dir diff --git a/python_apps/pypo/monit-pre530-airtime-playout.cfg b/python_apps/pypo/monit-pre530-airtime-playout.cfg new file mode 100644 index 000000000..972edd46f --- /dev/null +++ b/python_apps/pypo/monit-pre530-airtime-playout.cfg @@ -0,0 +1,9 @@ + set daemon 15 # Poll at 5 second intervals + set logfile /var/log/monit.log + + set httpd port 2812 + + check process airtime-liquidsoap + with pidfile "/var/run/airtime-liquidsoap.pid" + start program = "/etc/init.d/airtime-liquidsoap start" with timeout 5 seconds + stop program = "/etc/init.d/airtime-liquidsoap stop" From 5ae4ed67a5e968b93576e37ec1a683554ef7b915 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 28 Feb 2013 16:33:59 -0500 Subject: [PATCH 149/208] CC-4986: Installation fail because of monit-airtime-liquidsoap.cfg -fixed --- ...30-airtime-playout.cfg => monit-pre530-airtime-liquidsoap.cfg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename python_apps/pypo/{monit-pre530-airtime-playout.cfg => monit-pre530-airtime-liquidsoap.cfg} (100%) diff --git a/python_apps/pypo/monit-pre530-airtime-playout.cfg b/python_apps/pypo/monit-pre530-airtime-liquidsoap.cfg similarity index 100% rename from python_apps/pypo/monit-pre530-airtime-playout.cfg rename to python_apps/pypo/monit-pre530-airtime-liquidsoap.cfg From ae503121d8e7a97454a37ac9d6d4b78409e5a3b3 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 28 Feb 2013 18:26:15 -0500 Subject: [PATCH 150/208] CC-4984: Exception for replaygain -fixed --- airtime_mvc/application/controllers/ApiController.php | 4 ++++ python_apps/pypo/media/update/replaygainupdater.py | 1 + 2 files changed, 5 insertions(+) diff --git a/airtime_mvc/application/controllers/ApiController.php b/airtime_mvc/application/controllers/ApiController.php index 512eb1b10..0040428dd 100644 --- a/airtime_mvc/application/controllers/ApiController.php +++ b/airtime_mvc/application/controllers/ApiController.php @@ -947,6 +947,10 @@ class ApiController extends Zend_Controller_Action public function updateReplayGainValueAction() { + // disable the view and the layout + $this->view->layout()->disableLayout(); + $this->_helper->viewRenderer->setNoRender(true); + $request = $this->getRequest(); $data = json_decode($request->getParam('data')); diff --git a/python_apps/pypo/media/update/replaygainupdater.py b/python_apps/pypo/media/update/replaygainupdater.py index f1a38502a..5466e30ce 100644 --- a/python_apps/pypo/media/update/replaygainupdater.py +++ b/python_apps/pypo/media/update/replaygainupdater.py @@ -55,6 +55,7 @@ class ReplayGainUpdater(Thread): for f in files: full_path = os.path.join(dir_path, f['fp']) processed_data.append((f['id'], replaygain.calculate_replay_gain(full_path))) + total += 1 try: self.api_client.update_replay_gain_values(processed_data) From 6624911d2ce9db1020838090d0c9b057a70891e5 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Thu, 28 Feb 2013 18:54:23 -0500 Subject: [PATCH 151/208] minor refactor of LS code --- .../pypo/liquidsoap_scripts/ls_script.liq | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index a0ec38014..5f7e16e28 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -199,7 +199,8 @@ def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, dj_harbor_input_port, dj_harbor_input_mount_point, - s) = + s, + default) = if master_harbor_input_port != 0 and master_harbor_input_mount_point != "" and dj_harbor_input_port != 0 @@ -230,10 +231,15 @@ def append_dj_inputs(master_harbor_input_port, switch(id="master_dj_switch", track_sensitive=false, - transitions=[transition, transition, transition], - [({!master_dj_enabled},master_dj), - ({!live_dj_enabled},dj_live), - ({!scheduled_play_enabled}, s)]) + transitions=[transition, transition, transition, transition], + [ + ({!master_dj_enabled},master_dj), + ({!live_dj_enabled},dj_live), + ({!scheduled_play_enabled}, s), + ({true}, default), + ], + + ) elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != "" then master_dj = mksafe( @@ -250,8 +256,13 @@ def append_dj_inputs(master_harbor_input_port, switch(id="master_dj_switch", track_sensitive=false, - transitions=[transition, transition], - [({!master_dj_enabled},master_dj), ({!scheduled_play_enabled}, s)]) + transitions=[transition, transition, transition], + [ + ({!master_dj_enabled},master_dj), + ({!scheduled_play_enabled}, s), + ({true}, default), + ] + ) elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then dj_live = mksafe( @@ -268,22 +279,34 @@ def append_dj_inputs(master_harbor_input_port, switch(id="live_dj_switch", track_sensitive=false, - transitions=[transition, transition], - [({!live_dj_enabled},dj_live), ({!scheduled_play_enabled}, s)]) + transitions=[transition, transition, transition], + [ + ({!live_dj_enabled},dj_live), + ({!scheduled_play_enabled}, s), + ({true}, default), + ] + ) else - s + switch(id="no_dj_inputs", + track_sensitive=false, + transitions=[transition, transition], + [ + ({!scheduled_play_enabled}, s), + ({true}, default), + ] + ) end end s = append_dj_inputs(master_live_stream_port, master_live_stream_mp, - dj_live_stream_port, dj_live_stream_mp, stream_queue) + dj_live_stream_port, dj_live_stream_mp, stream_queue, default) -s = fallback(id="default_fallback", - track_sensitive=false, - transitions=[transition_default, transition], - [s, default]) +#s = fallback(id="default_fallback", +# track_sensitive=false, +# transitions=[transition_default, transition], +# [s, default]) # Attach a skip command to the source s: From 7e19eba7e1806a49a9815c99050e0d497cb61bd6 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 1 Mar 2013 11:44:11 -0500 Subject: [PATCH 152/208] another refactor of LS source --- .../pypo/liquidsoap_scripts/ls_script.liq | 64 +++++++------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 5f7e16e28..64066e660 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -199,8 +199,7 @@ def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, dj_harbor_input_port, dj_harbor_input_mount_point, - s, - default) = + s) = if master_harbor_input_port != 0 and master_harbor_input_mount_point != "" and dj_harbor_input_port != 0 @@ -229,17 +228,12 @@ def append_dj_inputs(master_harbor_input_port, ignore(output.dummy(master_dj, fallible=true)) ignore(output.dummy(dj_live, fallible=true)) - switch(id="master_dj_switch", - track_sensitive=false, - transitions=[transition, transition, transition, transition], + ([transition, transition, transition], [ ({!master_dj_enabled},master_dj), ({!live_dj_enabled},dj_live), - ({!scheduled_play_enabled}, s), - ({true}, default), - ], - - ) + ({true}, s), + ]) elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != "" then master_dj = mksafe( @@ -254,15 +248,11 @@ def append_dj_inputs(master_harbor_input_port, ignore(output.dummy(master_dj, fallible=true)) - switch(id="master_dj_switch", - track_sensitive=false, - transitions=[transition, transition, transition], + ([transition, transition], [ ({!master_dj_enabled},master_dj), - ({!scheduled_play_enabled}, s), - ({true}, default), - ] - ) + ({true}, s), + ]) elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then dj_live = mksafe( @@ -277,39 +267,33 @@ def append_dj_inputs(master_harbor_input_port, ignore(output.dummy(dj_live, fallible=true)) - switch(id="live_dj_switch", - track_sensitive=false, - transitions=[transition, transition, transition], + ([transition, transition], [ ({!live_dj_enabled},dj_live), - ({!scheduled_play_enabled}, s), - ({true}, default), - ] - ) + ({true}, s), + ]) else - switch(id="no_dj_inputs", - track_sensitive=false, - transitions=[transition, transition], - [ - ({!scheduled_play_enabled}, s), - ({true}, default), - ] - ) + ([transition], [ + ({true}, s), + ]) end end +s = switch(id="default_switch", + track_sensitive=false, + transitions=[transition_default, transition], + [({!scheduled_play_enabled}, stream_queue), ({true}, default)]) +pair = append_dj_inputs(master_live_stream_port, master_live_stream_mp, + dj_live_stream_port, dj_live_stream_mp, s) -s = append_dj_inputs(master_live_stream_port, master_live_stream_mp, - dj_live_stream_port, dj_live_stream_mp, stream_queue, default) - -#s = fallback(id="default_fallback", -# track_sensitive=false, -# transitions=[transition_default, transition], -# [s, default]) +s = switch(id="master_switch", + track_sensitive=false, + transitions=fst(pair), + snd(pair) +) # Attach a skip command to the source s: - add_skip_command(s) server.register(namespace="streams", From 0f7063e8a6c8566d0d420349ece4978cfb5a2bf0 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 1 Mar 2013 12:48:32 -0500 Subject: [PATCH 153/208] another refactor of the switches in LS --- .../pypo/liquidsoap_scripts/ls_script.liq | 139 ++++++------------ 1 file changed, 46 insertions(+), 93 deletions(-) diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 64066e660..c7df65a22 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -4,7 +4,7 @@ set("log.file.path", log_file) set("log.stdout", true) set("server.telnet", true) set("server.telnet.port", 1234) -set("init.daemon.pidfile.path", "/var/run/airtime-liquidsoap.pid") +set("init.daemon.pidfile.path", "/var/run/airtime-liquidsoap.pid") %include "library/pervasives.liq" @@ -78,8 +78,8 @@ server.register(namespace="dynamic_source", description="Enable webstream output", usage='start', "output_start", - fun (s) -> begin log("dynamic_source.output_start") - notify([("schedule_table_id", !current_dyn_id)]) + fun (s) -> begin log("dynamic_source.output_start") + notify([("schedule_table_id", !current_dyn_id)]) webstream_enabled := true "enabled" end) server.register(namespace="dynamic_source", description="Enable webstream output", @@ -195,103 +195,56 @@ def check_dj_client(user,password) = hd == "True" end -def append_dj_inputs(master_harbor_input_port, - master_harbor_input_mount_point, - dj_harbor_input_port, - dj_harbor_input_mount_point, - s) = - if master_harbor_input_port != 0 - and master_harbor_input_mount_point != "" - and dj_harbor_input_port != 0 - and dj_harbor_input_mount_point != "" then +s = switch(id="schedule_noise_switch", + track_sensitive=false, + transitions=[transition_default, transition], + [({!scheduled_play_enabled}, stream_queue), ({true}, default)] + ) - master_dj = mksafe( - audio_to_stereo( - input.harbor(id="master_harbor", - master_harbor_input_mount_point, - port=master_harbor_input_port, - auth=check_master_dj_client, - max=40., - on_connect=master_dj_connect, - on_disconnect=master_dj_disconnect))) +s = if dj_live_stream_port != 0 and dj_live_stream_mp != "" then + dj_live = mksafe( + audio_to_stereo( + input.harbor(id="live_dj_harbor", + dj_live_stream_mp, + port=dj_live_stream_port, + auth=check_dj_client, + max=40., + on_connect=live_dj_connect, + on_disconnect=live_dj_disconnect))) - dj_live = mksafe( - audio_to_stereo( - input.harbor(id="live_dj_harbor", - dj_harbor_input_mount_point, - port=dj_harbor_input_port, - auth=check_dj_client, - max=40., - on_connect=live_dj_connect, - on_disconnect=live_dj_disconnect))) + ignore(output.dummy(dj_live, fallible=true)) - ignore(output.dummy(master_dj, fallible=true)) - ignore(output.dummy(dj_live, fallible=true)) - - ([transition, transition, transition], - [ - ({!master_dj_enabled},master_dj), - ({!live_dj_enabled},dj_live), - ({true}, s), - ]) - - elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != "" then - master_dj = mksafe( - audio_to_stereo( - input.harbor(id="master_harbor", - master_harbor_input_mount_point, - port=master_harbor_input_port, - auth=check_master_dj_client, - max=40., - on_connect=master_dj_connect, - on_disconnect=master_dj_disconnect))) - - ignore(output.dummy(master_dj, fallible=true)) - - ([transition, transition], - [ - ({!master_dj_enabled},master_dj), - ({true}, s), - ]) - - elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then - dj_live = mksafe( - audio_to_stereo( - input.harbor(id="live_dj_harbor", - dj_harbor_input_mount_point, - port=dj_harbor_input_port, - auth=check_dj_client, - max=40., - on_connect=live_dj_connect, - on_disconnect=live_dj_disconnect))) - - ignore(output.dummy(dj_live, fallible=true)) - - ([transition, transition], - [ - ({!live_dj_enabled},dj_live), - ({true}, s), - ]) - else - ([transition], [ - ({true}, s), - ]) - end + switch(id="show_schedule_noise_switch", + track_sensitive=false, + transitions=[transition, transition], + [({!live_dj_enabled}, dj_live), ({true}, s)] + ) +else + s end -s = switch(id="default_switch", - track_sensitive=false, - transitions=[transition_default, transition], - [({!scheduled_play_enabled}, stream_queue), ({true}, default)]) +s = if master_live_stream_port != 0 and master_live_stream_mp != "" then + master_dj = mksafe( + audio_to_stereo( + input.harbor(id="master_harbor", + master_live_stream_mp, + port=master_live_stream_port, + auth=check_master_dj_client, + max=40., + on_connect=master_dj_connect, + on_disconnect=master_dj_disconnect))) -pair = append_dj_inputs(master_live_stream_port, master_live_stream_mp, - dj_live_stream_port, dj_live_stream_mp, s) + ignore(output.dummy(master_dj, fallible=true)) + + switch(id="master_show_schedule_noise_switch", + track_sensitive=false, + transitions=[transition, transition], + [({!master_dj_enabled}, master_dj), ({true}, s)] + ) +else + s +end -s = switch(id="master_switch", - track_sensitive=false, - transitions=fst(pair), - snd(pair) -) # Attach a skip command to the source s: add_skip_command(s) From d4891803cc9fbe4bf77bc23a7f2695eda01fb014 Mon Sep 17 00:00:00 2001 From: Martin Konecny Date: Fri, 1 Mar 2013 14:58:26 -0500 Subject: [PATCH 154/208] CC-4989: upgrade to mutagen 1.21 -done --- .../airtime_virtual_env.pybundle | Bin 2068919 -> 2222106 bytes python_apps/python-virtualenv/requirements | 2 +- .../python-virtualenv/virtualenv-install.sh | 15 --------------- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/python_apps/python-virtualenv/airtime_virtual_env.pybundle b/python_apps/python-virtualenv/airtime_virtual_env.pybundle index 694793148b560896cdcaabe0eb6cbd3144f7ae85..109804252c54eeb92a9fd04c28ae73d7b372baab 100644 GIT binary patch delta 419336 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%0A9(~$f$eY2 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

    iL8stR5`SPwulLXI)xl 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

    escape($row["track_title"]) ?>escape($row["creator"]) ?>escape($row["album"]) ?>
    ' + file.name +'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
  • &~;mGk3P29tUCo#pRD-pribF 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 RS>>#X{D;D+ccKY5{s%YrA3gv8 delta 264388 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

    }rJG%QL|HGPc1bDao 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

    $U8rRj$YN4*9(ZES@dhkP0$BIuU(>bht(m*lfG_ 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