Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
0a03bba5b7
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue