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

This commit is contained in:
James 2011-07-26 12:06:00 -04:00
commit cd705c5394
6 changed files with 46 additions and 31 deletions

View File

@ -116,19 +116,19 @@ class AirtimeInstall
}
}
/* TODO: This function should be moved to the media-monitor
* install script. */
public static function InstallStorageDirectory()
{
global $CC_CONFIG, $CC_DBC;
echo "* Storage directory setup".PHP_EOL;
$ini = parse_ini_file(__DIR__."/airtime-install.ini");
$stor_dir = $ini["storage_dir"];
$dirs = array($stor_dir, $stor_dir."/organize");
foreach ($dirs as $dir){
if (!file_exists($dir)) {
@mkdir($dir, 02777, true);
@ -152,7 +152,7 @@ class AirtimeInstall
echo "* Giving Apache permission to access $rp".PHP_EOL;
$success = chgrp($rp, $CC_CONFIG["webServerUser"]);
$success = chown($rp, "pypo");
$success = chown($rp, "www-data");
$success = chmod($rp, 02777);
}
}
@ -270,7 +270,7 @@ class AirtimeInstall
}
return true;
}
public static function SetUniqueId()
{
global $CC_DBC;
@ -404,12 +404,12 @@ class AirtimeInstall
exec("rm -rf \"$path\"");
}
public static function CreateCronFile(){
// Create CRON task to run every day. Time of day is initialized to a random time.
$hour = rand(0,23);
$minute = rand(0,59);
$fp = fopen('/etc/cron.d/airtime-crons','w');
fwrite($fp, "$minute $hour * * * root /usr/lib/airtime/utils/phone_home_stat\n");
fclose($fp);

View File

@ -9,6 +9,7 @@ import json
import ConfigParser
import pwd
import grp
import subprocess
import os.path
@ -28,35 +29,34 @@ config.read('/etc/airtime/airtime.conf')
stor_dir = config.get('general', 'base_files_dir') + "/stor"
organize_dir = stor_dir + '/organize'
try:
os.makedirs(organize_dir)
omask = os.umask(0)
uid = pwd.getpwnam('pypo')[2]
gid = grp.getgrnam('www-data')[2]
os.chown(organize_dir, uid, gid)
os.chmod(organize_dir, 02777)
except Exception, e:
print e
finally:
os.umask(omask)
mmconfig.storage_directory = os.path.normpath(stor_dir)
mmconfig.imported_directory = os.path.normpath(stor_dir + '/imported')
mmconfig.organize_directory = os.path.normpath(organize_dir)
mmc = MediaMonitorCommon(mmconfig)
try:
os.makedirs(organize_dir)
except Exception, e:
print e
#older versions of Airtime installed from repository at least had owner of stor dir as "root"
mmc.set_needed_file_permissions(stor_dir, True)
mmc.set_needed_file_permissions(organize_dir, True)
#read list of all files in stor location.....and one-by-one pass this through to
#mmc.organize_files. print out json encoding of before and after
pairs = []
for root, dirs, files in os.walk(mmconfig.storage_directory):
for f in files:
#print os.path.join(root, f)
#print mmc.organize_new_file(os.path.join(root, f))
pair = os.path.join(root, f), mmc.organize_new_file(os.path.join(root, f))
old_filepath = os.path.join(root, f)
new_filepath = mmc.organize_new_file(os.path.join(root, f))
pair = old_filepath, new_filepath
pairs.append(pair)
mmc.set_needed_file_permissions(new_filepath, False)
#need to set all the dirs in imported to be owned by www-data.
command = "chown -R www-data " + stor_dir
subprocess.call(command.split(" "))
print json.dumps(pairs)

View File

@ -136,11 +136,16 @@ class AirtimeMetadata:
#incase track number is in format u'4/11'
#need to also check that the tracknumber is even a tracknumber (cc-2582)
if 'MDATA_KEY_TRACKNUMBER' in md:
try:
md['MDATA_KEY_TRACKNUMBER'] = int(md['MDATA_KEY_TRACKNUMBER'])
except Exception, e:
pass
if isinstance(md['MDATA_KEY_TRACKNUMBER'], basestring):
match = re.search('^(\d*/\d*)?', md['MDATA_KEY_TRACKNUMBER'])
if match.group(0) is not u'':
md['MDATA_KEY_TRACKNUMBER'] = md['MDATA_KEY_TRACKNUMBER'].split("/")[0]
md['MDATA_KEY_TRACKNUMBER'] = int(md['MDATA_KEY_TRACKNUMBER'].split("/")[0])
else:
del md['MDATA_KEY_TRACKNUMBER']

View File

@ -92,8 +92,6 @@ class AirtimeNotifier(Notifier):
self.logger.info("Removing watch on: %s wd %s", storage_directory, wd)
mm.wm.rm_watch(wd, rec=True)
self.mmc.set_needed_file_permissions(new_storage_directory, True)
self.bootstrap.sync_database_to_filesystem(new_storage_directory_id, new_storage_directory)
self.config.storage_directory = os.path.normpath(new_storage_directory)
@ -104,6 +102,10 @@ class AirtimeNotifier(Notifier):
self.mmc.ensure_is_dir(self.config.imported_directory)
self.mmc.ensure_is_dir(self.config.organize_directory)
self.mmc.set_needed_file_permissions(self.config.storage_directory, True)
self.mmc.set_needed_file_permissions(self.config.imported_directory, True)
self.mmc.set_needed_file_permissions(self.config.organize_directory, True)
self.watch_directory(new_storage_directory)
elif m['event_type'] == "file_delete":
filepath = m['filepath'].encode('utf-8')

View File

@ -179,10 +179,8 @@ class MediaMonitorCommon:
else:
md[m] = orig_md[m]
self.logger.debug(md['MDATA_KEY_TRACKNUMBER'])
if 'MDATA_KEY_TRACKNUMBER' in orig_md:
#make sure all track numbers are at least 2 digits long in the filepath.
self.logger.debug("formatting track number")
md['MDATA_KEY_TRACKNUMBER'] = "%02d" % (int(md['MDATA_KEY_TRACKNUMBER']))
#format bitrate as 128kbps

View File

@ -37,6 +37,10 @@ def copy_or_move_files_to(paths, dest, flag):
path = os.path.realpath(path)
else:
path = currentDir+path
path = path.decode('utf-8')
path = path.encode('utf-8')
dest = dest.decode('utf-8')
dest = dest.encode('utf-8')
if(os.path.exists(path)):
if(os.path.isdir(path)):
path = format_dir_string(path)
@ -140,6 +144,8 @@ def WatchAddAction(option, opt, value, parser):
elif(len(parser.rargs) == 0 ):
raise OptionValueError("No argument found. This option requires exactly one argument.")
path = parser.rargs[0]
path = path.decode('utf-8')
path = path.encode('utf-8')
if(os.path.isdir(path)):
res = api_client.add_watched_dir(path)
if(res is None):
@ -175,6 +181,8 @@ def WatchRemoveAction(option, opt, value, parser):
elif(len(parser.rargs) == 0 ):
raise OptionValueError("No argument found. This option requires exactly one argument.")
path = parser.rargs[0]
path = path.decode('utf-8')
path = path.encode('utf-8')
if(os.path.isdir(path)):
res = api_client.remove_watched_dir(path)
if(res is None):
@ -215,6 +223,8 @@ def StorageSetAction(option, opt, value, parser):
raise OptionValueError("No argument found. This option requires exactly one argument.")
path = parser.rargs[0]
path = path.decode('utf-8')
path = path.encode('utf-8')
if(os.path.isdir(path)):
res = api_client.set_storage_dir(path)
if(res is None):