diff --git a/pandora/annotation/models.py b/pandora/annotation/models.py index 618759d1..412cdc18 100644 --- a/pandora/annotation/models.py +++ b/pandora/annotation/models.py @@ -18,7 +18,7 @@ from changelog.models import Changelog from item.utils import sort_string import managers import utils -from tasks import update_matching_events, update_matching_places +from tasks import update_matching_events, update_matching_places, update_item def get_matches(obj, model, layer_type): @@ -160,9 +160,8 @@ class Annotation(models.Model): if layer.get('type') == 'event' or layer.get('hasEvents'): update_matching_events(self.id) - #update facets if needed - if filter(lambda f: f['id'] == self.layer, settings.CONFIG['filters']): - self.item.update_layer_facet(self.layer) + #update sort/find tables async + update_item.delay(self.id) def cleanup_undefined_relations(self): layer = self.get_layer() diff --git a/pandora/annotation/tasks.py b/pandora/annotation/tasks.py index 6d568019..0f395504 100644 --- a/pandora/annotation/tasks.py +++ b/pandora/annotation/tasks.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # vi:si:et:sw=4:sts=4:ts=4 +from django.conf import settings from celery.task import task import models @@ -44,3 +45,16 @@ def update_matching_places(id): if name.lower() in a.value.lower(): e.update_matches() break + +@task(ignore_resulsts=True, queue='default') +def update_item(id): + from item.models import Item + a = models.Annotation.objects.get(pk=id) + #update facets if needed + if filter(lambda f: f['id'] == a.layer, settings.CONFIG['filters']): + a.item.update_layer_facet(a.layer) + Item.objects.filter(id=a.item.id).update(modified=a.modified) + a.item.modified = a.modified + a.item.update_find() + a.item.update_sort() + a.item.update_facets() diff --git a/pandora/archive/views.py b/pandora/archive/views.py index fa84ccf9..04b17751 100644 --- a/pandora/archive/views.py +++ b/pandora/archive/views.py @@ -104,10 +104,14 @@ def update(request): response['data']['data'] += [f.file.oshash for f in files.filter(file__is_audio=True, file__available=False, file__wanted=True)] - response['data']['file'] = [f.file.oshash for f in files.filter(file__is_subtitle=True, - file__available=False, - path__endswith='.srt')] + if filter(lambda l: l['id'] == 'subtitles', settings.CONFIG['layers']): + response['data']['file'] = [f.file.oshash + for f in files.filter(file__is_subtitle=True, + file__available=False, + path__endswith='.srt')] + else: + response['data']['file'] = [] return render_to_json_response(response) actions.register(update, cache=False) diff --git a/pandora/person/models.py b/pandora/person/models.py index 5bc75551..4bfb882c 100644 --- a/pandora/person/models.py +++ b/pandora/person/models.py @@ -13,7 +13,7 @@ from item import utils import item.models import managers - +import tasks def get_name_sort(name): name = unicodedata.normalize('NFKD', name).strip() @@ -51,6 +51,9 @@ class Person(models.Model): self.sortsortname = utils.sort_string(self.sortname) self.numberofnames = len(self.name.split(' ')) super(Person, self).save(*args, **kwargs) + tasks.update_itemsort.delay(self.id) + + def update_itemsort(self): item.models.Facet.objects.filter( key__in=item.models.Item.person_keys + ['name'], value=self.name @@ -59,6 +62,11 @@ class Person(models.Model): ).update( sortvalue=self.sortname ) + for i in item.models.Item.objects.filter(facets__in=item.models.Facet.objects.filter( + key__in=item.models.Item.person_keys + ['name'], + value=self.name) + ).distinct(): + i.update_sort() def get_or_create(model, name, imdbId=None): if imdbId: diff --git a/pandora/person/tasks.py b/pandora/person/tasks.py new file mode 100644 index 00000000..a77fe2dd --- /dev/null +++ b/pandora/person/tasks.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 +from celery.task import task + +import models + + +@task(ignore_resulsts=True, queue='default') +def update_itemsort(id): + p = models.Person.objects.get(pk=id) + p.update_itemsort()