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

This commit is contained in:
James 2012-09-18 15:47:48 -04:00
commit be214ac126
10 changed files with 115 additions and 55 deletions

View File

@ -109,7 +109,7 @@ class UserController extends Zend_Controller_Action
# TODO : remove this. we only use default for now not to break the UI.
if (!$files_action) { # set default action
$files_action = "reassign_to";
$delId = 1;
$new_owner = Application_Model_User::getFirstAdmin();
}
# only delete when valid action is selected for the owned files
@ -132,8 +132,11 @@ class UserController extends Zend_Controller_Action
if ($files_action == "delete_cascade") {
$user->deleteAllFiles();
} elseif ($files_action == "reassign_to") {
$new_owner = $this->_getParam("new_owner");
$user->reassignTo( $new_owner );
// TODO : fix code to actually use the line below and pick a
// real owner instead of defaulting to the first found admin
//$new_owner_id = $this->_getParam("new_owner");
//$new_owner = new Application_Model_User($new_owner_id);
$user->donateFilesTo( $new_owner );
}
# Finally delete the user
$this->view->entries = $user->delete();

View File

@ -696,6 +696,7 @@ SQL;
'start' => $start,
'end' => $end,
'show_name' => $item["show_name"],
'row_id' => $item["id"],
'independent_event' => true
);
self::appendScheduleItem($data, $start, $schedule_item);

View File

@ -729,6 +729,7 @@ SQL;
$unionTable = "({$plTable} UNION {$blTable} UNION {$fileTable} UNION {$streamTable}) AS RESULTS";
//choose which table we need to select data from.
// TODO : use constants instead of numbers -- RG
switch ($type) {
case 0:
$fromTable = $unionTable;
@ -1056,12 +1057,14 @@ SQL;
{
$con = Propel::getConnection();
$sql = "SELECT id, filepath as fp"
." FROM CC_FILES"
." WHERE directory = :dir_id"
." AND file_exists = 'TRUE'"
." AND replay_gain is NULL"
." LIMIT :lim";
$sql = <<<SQL
SELECT id,
filepath AS fp
FROM cc_files
WHERE directory = :dir_id
AND file_exists = 'TRUE'
AND replay_gain IS NULL LIMIT :lim
SQL;
$stmt = $con->prepare($sql);
$stmt->bindParam(':dir_id', $dir_id);
@ -1170,6 +1173,8 @@ SQL;
return $this->_file->getDbFileExists();
}
// note: never call this method from controllers because it does a sleep
public function uploadToSoundCloud()
{
global $CC_CONFIG;
@ -1196,6 +1201,7 @@ SQL;
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
$code = $e->getHttpCode();
$msg = $e->getHttpBody();
// TODO : Do not parse JSON by hand
$temp = explode('"error":',$msg);
$msg = trim($temp[1], '"}');
$this->setSoundCloudErrorCode($code);

View File

@ -215,7 +215,7 @@ class Application_Model_User
return $user->getCcFilessRelatedByDbOwnerId();
}
public function donateFilesTo($user)
public function donateFilesTo($user) // $user is object not user id
{
$my_files = $this->getOwnedFiles();
foreach ($my_files as $file) {
@ -242,18 +242,27 @@ class Application_Model_User
{
return CcSubjsQuery::create()->filterByDbType($type)->find();
}
public static function getFirstAdminId()
{
public static function getFirstAdmin() {
$admins = Application_Model_User::getUsersOfType('A');
if (count($admins) > 0) { // found admin => pick first one
return $admins[0]->getDbId();
return $admins[0];
} else {
Logging::warn("Warning. no admins found in database");
return null;
}
}
public static function getFirstAdminId()
{
$admin = self::getFirstAdmin();
if ($admin) {
return $admin->getDbId();
} else {
return null;
}
}
public static function getUsers(array $type, $search=null)
{
$con = Propel::getConnection();

View File

@ -216,9 +216,9 @@ class Application_Model_Webstream implements Application_Model_LibraryEditable
}
// TODO : Fix this interface
//This function should not be defined in the interface.
public function setMetadata($key, $val)
{
//This function should not be defined in the interface.
throw new Exception("Not implemented.");
}

View File

@ -17,6 +17,7 @@ $(document).ready(function(){
{
id: "remind_me",
text: "Remind me in 1 week",
"class": "btn",
click: function() {
var url = '/Usersettings/remindme';
$.ajax({
@ -29,6 +30,7 @@ $(document).ready(function(){
{
id: "remind_never",
text: "Remind me never",
"class": "btn",
click: function() {
var url ='/Usersettings/remindme-never';
$.ajax({
@ -41,6 +43,7 @@ $(document).ready(function(){
{
id: "help_airtime",
text: "Yes, help Airtime",
"class": "btn",
click: function() {
$("#register-form").submit();
}

View File

@ -255,6 +255,8 @@ function eventRender(event, element, view) {
}
//add scheduled show content empty icon
addIcon = checkEmptyShowStatus(event);
if (!addIcon) {
if (view.name === 'agendaDay' || view.name === 'agendaWeek') {
if (event.show_empty === 1 && event.record === 0 && event.rebroadcast === 0) {
if (event.soundcloud_id === -1) {
@ -280,6 +282,7 @@ function eventRender(event, element, view) {
}
}
}
}
//rebroadcast icon
if((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.rebroadcast === 1) {
@ -416,6 +419,7 @@ function getCurrentShow(){
function addQtipToSCIcons(ele){
var id = $(ele).attr("id");
if($(ele).hasClass("progress")){
$(ele).qtip({
content: {
@ -508,6 +512,36 @@ function addQtipToSCIcons(ele){
}
}
/* This functions does two things:
* 1. Checks if each event(i.e. a show) is over and removes the show empty icon if it is
* 2. Else, if an event is passed in, it checks if the event(i.e. a show) is over
* This gets checked when we are deciding if the show-empty icon should be added
* at the beginning of an event render callback.
*/
function checkEmptyShowStatus(e) {
var currDate = new Date();
var endTime;
if (e === undefined) {
var events = $('#schedule_calendar').fullCalendar('clientEvents');
$.each(events, function(i, event){
endTime = event.end;
$emptyIcon = $("span[id="+event.id+"][class='small-icon show-empty']");
if (currDate.getTime() > endTime.getTime() && $emptyIcon.length === 1) {
$emptyIcon.remove();
}
});
} else {
endTime = e.end;
var showOver = false;
if (currDate.getTime() > endTime.getTime()) {
showOver = true;
}
return showOver;
}
}
//Alert the error and reload the page
//this function is used to resolve concurrency issue
function alertShowErrorAndReload(){
@ -518,6 +552,7 @@ function alertShowErrorAndReload(){
$(document).ready(function(){
setInterval( "checkSCUploadStatus()", 5000 );
setInterval( "getCurrentShow()", 5000 );
setInterval( "checkEmptyShowStatus()", 5000 );
});
var view_name;

View File

@ -66,6 +66,7 @@ class Organizer(ReportHandler,Loggable):
# See hack in mmp.magic_move
def new_dir_watch(d):
# TODO : rewrite as return lambda : dispatcher.send(...
def cb():
dispatcher.send(signal="add_subwatch", sender=self,
directory=d)

View File

@ -41,11 +41,13 @@ stream_harbor_pass = list.hd(get_process_lines('pwgen -s -N 1 -n 20'))
web_stream = input.harbor("test-harbor", port=8999, password=stream_harbor_pass)
web_stream = on_metadata(notify_stream, web_stream)
output.dummy(fallible=true, web_stream)
queue = on_metadata(notify, queue)
queue = map_metadata(update=false, append_title, queue)
# the crossfade function controls fade in/out
queue = crossfade(queue)
output.dummy(fallible=true, queue)
stream_queue = switch(id="stream_queue_switch", track_sensitive=false,

View File

@ -191,7 +191,7 @@ class PypoPush(Thread):
if self.current_stream_info is None:
correct = False
else:
correct = self.current_stream_info['uri'] == media_item['uri']
correct = self.current_stream_info['row_id'] == media_item['row_id']
self.logger.debug("Is current item correct?: %s", str(correct))
return correct