diff --git a/aircox/admin/sound.py b/aircox/admin/sound.py
index 3dc35b5..259d480 100644
--- a/aircox/admin/sound.py
+++ b/aircox/admin/sound.py
@@ -45,7 +45,7 @@ class SoundAdmin(SortableAdminBase, admin.ModelAdmin):
'type', 'duration', 'is_public', 'is_good_quality',
'is_downloadable', 'audio']
list_filter = ('type', 'is_good_quality', 'is_public')
- list_editable = ['name', 'type', 'is_public', 'is_downloadable']
+ list_editable = ['name', 'is_public', 'is_downloadable']
search_fields = ['name', 'program__title']
fieldsets = [
@@ -53,7 +53,7 @@ class SoundAdmin(SortableAdminBase, admin.ModelAdmin):
(None, {'fields': ['duration', 'is_public', 'is_downloadable',
'is_good_quality', 'mtime']}),
]
- readonly_fields = ('file', 'duration',)
+ readonly_fields = ('file', 'duration', 'type')
inlines = [SoundTrackInline]
def related(self, obj):
@@ -63,7 +63,8 @@ class SoundAdmin(SortableAdminBase, admin.ModelAdmin):
related.short_description = _('Program / Episode')
def audio(self, obj):
- return mark_safe(''.format(obj.file.url))
+ return mark_safe(''.format(obj.file.url)) \
+ if obj.type != Sound.TYPE_REMOVED else ''
audio.short_description = _('Audio')
diff --git a/aircox/management/commands/sounds_monitor.py b/aircox/management/commands/sounds_monitor.py
index cf50ee0..66a975b 100755
--- a/aircox/management/commands/sounds_monitor.py
+++ b/aircox/management/commands/sounds_monitor.py
@@ -52,7 +52,7 @@ sound_path_re = re.compile(
'^(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{2})'
'(_(?P[0-9]{2})h(?P[0-9]{2}))?'
'(_(?P[0-9]+))?'
- '_?(?P.*)$'
+ '_?[ -]*(?P.*)$'
)
@@ -67,6 +67,7 @@ class SoundFile:
@property
def sound_path(self):
+ """ Relative path name """
return self.path.replace(conf.MEDIA_ROOT + '/', '')
def sync(self, sound=None, program=None, deleted=False, **kwargs):
@@ -74,7 +75,7 @@ class SoundFile:
Update related sound model and save it.
"""
if deleted:
- sound = Sound.objects.filter(file=self.path).first()
+ sound = Sound.objects.path(self.path).first()
if sound:
sound.type = sound.TYPE_REMOVED
sound.check_on_file()
@@ -249,7 +250,7 @@ class MonitorHandler(PatternMatchingEventHandler):
logger.info('sound deleted: %s', event.src_path)
def deleted(event):
SoundFile(event.src_path).sync(deleted=True)
- self.pool.submit(deleted, event.src_path)
+ self.pool.submit(deleted, event)
class Command(BaseCommand):
@@ -325,9 +326,9 @@ class Command(BaseCommand):
excerpts_handler = MonitorHandler(settings.AIRCOX_SOUND_EXCERPTS_SUBDIR, pool)
observer = Observer()
- observer.schedule(archives_handler, settings.AIRCOX_PROGRAMS_DIR,
+ observer.schedule(archives_handler, settings.AIRCOX_PROGRAMS_DIR_ABS,
recursive=True)
- observer.schedule(excerpts_handler, settings.AIRCOX_PROGRAMS_DIR,
+ observer.schedule(excerpts_handler, settings.AIRCOX_PROGRAMS_DIR_ABS,
recursive=True)
observer.start()
diff --git a/aircox/models/program.py b/aircox/models/program.py
index 90845f0..42eef57 100644
--- a/aircox/models/program.py
+++ b/aircox/models/program.py
@@ -98,13 +98,10 @@ class Program(Page):
Return a Program from the given path. We assume the path has been
given in a previous time by this model (Program.path getter).
"""
- if path.startswith(conf.MEDIA_ROOT):
- path = path.replace(conf.MEDIA_ROOT + '/', '')
- path = path.replace(settings.AIRCOX_PROGRAMS_DIR, '')
-
+ if path.startswith(settings.AIRCOX_PROGRAMS_DIR_ABS):
+ path = path.replace(settings.AIRCOX_PROGRAMS_DIR_ABS, '')
while path[0] == '/':
path = path[1:]
-
path = path[:path.index('/')]
return cl.objects.filter(slug=path.replace('_','-')).first()
diff --git a/aircox/models/sound.py b/aircox/models/sound.py
index b3b19b4..c0185fc 100644
--- a/aircox/models/sound.py
+++ b/aircox/models/sound.py
@@ -214,9 +214,9 @@ class Sound(models.Model):
def __check_name(self):
if not self.name and self.file and self.file.name:
# FIXME: later, remove date?
- self.name = os.path.basename(self.file.name)
- self.name = os.path.splitext(self.name)[0]
- self.name = self.name.replace('_', ' ')
+ name = os.path.basename(self.file.name)
+ name = os.path.splitext(name)[0]
+ self.name = name.replace('_', ' ').strip()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
diff --git a/aircox/settings.py b/aircox/settings.py
index fb54742..56b3377 100755
--- a/aircox/settings.py
+++ b/aircox/settings.py
@@ -86,8 +86,9 @@ ensure('AIRCOX_DEFAULT_USER_GROUPS', {
})
# Directory for the programs data
-# TODO: rename to PROGRAMS_ROOT
ensure('AIRCOX_PROGRAMS_DIR', 'programs')
+ensure('AIRCOX_PROGRAMS_DIR_ABS', os.path.join(settings.MEDIA_ROOT,
+ AIRCOX_PROGRAMS_DIR))
########################################################################