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

This commit is contained in:
denise 2012-05-07 15:08:47 -04:00
commit 0a03bba5b7
4 changed files with 63 additions and 13 deletions

View File

@ -1583,7 +1583,7 @@ class Application_Model_Show {
$interval = $p_start->diff($p_end);
$days = $interval->format('%a');
$shows = Application_Model_Show::getShows($p_start, $p_end);
$today_timestamp = gmdate("Y-m-d H:i:s");
$nowEpoch = time();
foreach ($shows as $show) {
$options = array();
@ -1593,8 +1593,17 @@ class Application_Model_Show {
if (intval($days) <= 7) {
$options["percent"] = Application_Model_Show::getPercentScheduled($show["starts"], $show["ends"], $show["time_filled"]);
}
$startsDT = new DateTime($show["starts"], new DateTimeZone("UTC"));
$endsDT = new DateTime($show["ends"], new DateTimeZone("UTC"));
$startsEpoch = intval($startsDT->format("U"));
$endsEpoch = intval($endsDT->format("U"));
if ($p_editable && (strtotime($today_timestamp) < strtotime($show["ends"]))) {
if ($p_editable && $show["record"] && $nowEpoch < $endsEpoch) {
$options["editable"] = false;
}
else if ($p_editable && $nowEpoch < $endsEpoch) {
$options["editable"] = true;
}
$events[] = Application_Model_Show::makeFullCalendarEvent($show, $options);

View File

@ -879,6 +879,11 @@ Logging::log("getting media! - 2");
$audio_stor = Application_Common_OsPath::join($stor, "organize", $fileName);
Logging::log("copyFileToStor: moving file $audio_file to $audio_stor");
if (chmod($audio_file, 0644) === false){
Logging::log("Warning: couldn't change permissions of $audio_file to 0644");
}
//Martin K.: changed to rename: Much less load + quicker since this is an atomic operation
$r = @rename($audio_file, $audio_stor);

View File

@ -134,8 +134,9 @@ class AirtimeProcessEvent(ProcessEvent):
#file is being overwritten/replaced in GUI.
elif "goutputstream" in pathname:
self.temp_files[pathname] = None
elif self.mmc.is_audio_file(pathname) and self.mmc.is_readable(pathname, False):
elif self.mmc.is_audio_file(name):
if self.mmc.is_parent_directory(pathname, self.config.organize_directory):
#file was created in /srv/airtime/stor/organize. Need to process and move
#to /srv/airtime/stor/imported
oldPath = pathname
@ -144,21 +145,16 @@ class AirtimeProcessEvent(ProcessEvent):
#delete files from organize if they can not be read properly.
if pathname is None:
try:
self.logger.info("Deleting file because it cannot be read properly: %s", oldPath)
self.logger.warn("Deleting file because it cannot be read properly: %s", oldPath)
os.remove(oldPath)
return
except Exception, e:
self.logger.error('Exception: %s', e)
self.logger.error("traceback: %s", traceback.format_exc())
return
self.mmc.is_readable(pathname, dir)
is_recorded = self.mmc.is_parent_directory(pathname, self.config.recorded_directory)
self.file_events.append({'mode': self.config.MODE_CREATE, 'filepath': pathname, 'is_recorded_show': is_recorded})
self.file_events.append({'mode': self.config.MODE_CREATE, 'filepath': pathname, 'is_recorded_show': is_recorded})
else:
#event is because of a created directory
if self.mmc.is_parent_directory(pathname, self.config.storage_directory):
self.mmc.is_readable(pathname, dir)
def process_IN_MODIFY(self, event):
# if IN_MODIFY is followed by IN_CREATE, it's not true modify event
@ -238,7 +234,7 @@ class AirtimeProcessEvent(ProcessEvent):
self.handle_mount_change()
if not event.dir:
if self.mmc.is_audio_file(event.name) and self.mmc.is_readable(event.pathname, False):
if self.mmc.is_audio_file(event.name):
if event.cookie in self.temp_files:
self.file_events.append({'filepath': event.pathname, 'mode': self.config.MODE_MODIFY})
del self.temp_files[event.cookie]
@ -280,7 +276,7 @@ class AirtimeProcessEvent(ProcessEvent):
#show dragged from unwatched folder into a watched folder. Do not "organize".:q!
if self.mmc.is_parent_directory(event.pathname, self.config.recorded_directory):
is_recorded = True
else :
else:
is_recorded = False
self.file_events.append({'mode': self.config.MODE_CREATE, 'filepath': event.pathname, 'is_recorded_show': is_recorded})
else:

View File

@ -83,6 +83,43 @@ class MediaMonitorCommon:
except Exception, e:
self.logger.warn("Failed to check owner/group/permissions for %s", item)
return False
def make_file_readable(self, pathname, is_dir):
if is_dir:
#set to 755
os.chmod(pathname, stat.S_IRUSR|stat.S_IWUSR|stat.S_IXUSR | stat.S_IRGRP|stat.S_IXGRP | stat.S_IROTH|stat.S_IXOTH)
else:
#set to 644
os.chmod(pathname, stat.S_IRUSR|stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
def make_readable(self, pathname):
"""
Should only call this function if is_readable() returns False. This function
will attempt to make the file world readable by modifying the file's permission's
as well as the file's parent directory permissions. We should only call this function
on files in Airtime's stor directory, not watched directories!
Returns True if we were able to make the file world readable. False otherwise.
"""
original_file = pathname
is_dir = False
try:
while not self.is_readable(original_file, is_dir):
#Not readable. Make appropriate permission changes.
self.make_file_readable(pathname, is_dir)
dirname = os.path.dirname(pathname)
if dirname == pathname:
#most likey reason for this is that we've hit '/'. Avoid infinite loop by terminating loop
raise Exception()
else:
pathname = dirname
is_dir = True
except Exception, e:
#something went wrong while we were trying to make world readable.
return False
return True
#checks if path is a directory, and if it doesnt exist, then creates it.
#Otherwise prints error to log file.
@ -277,6 +314,9 @@ class MediaMonitorCommon:
self.logger.debug("Moving from %s to %s", pathname, filepath)
self.move_file(pathname, filepath)
if not self.make_readable(filepath):
self.logger.warn("Couldn't make filepath %s readable", pathname)
filepath = None
else:
filepath = None
self.logger.warn("File %s, has invalid metadata", pathname)