From c2981681c1c8968988aa4dbb154c1bd75f960457 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Thu, 2 Jun 2011 10:19:15 +0200 Subject: [PATCH] matches, subtitles, parts --- pandora/archive/models.py | 14 +++++++++++++- pandora/item/managers.py | 4 +++- pandora/item/models.py | 4 ++-- pandora/item/tasks.py | 20 ++++++++++++++++++-- pandora/place/models.py | 14 ++++++-------- 5 files changed, 42 insertions(+), 14 deletions(-) diff --git a/pandora/archive/models.py b/pandora/archive/models.py index 140754d2..bda7f0e0 100644 --- a/pandora/archive/models.py +++ b/pandora/archive/models.py @@ -7,6 +7,7 @@ import re import time from django.db import models +from django.db.models import Q from django.contrib.auth.models import User from django.conf import settings from django.db.models.signals import pre_delete @@ -138,10 +139,12 @@ class File(models.Model): else: self.is_video = os.path.splitext(self.name)[-1] in ('.avi', '.mkv', '.dv', '.ogv', '.mpeg', '.mov') self.is_audio = os.path.splitext(self.name)[-1] in ('.mp3', '.wav', '.ogg', '.flac') - self.is_subtitle= os.path.splitext(self.name)[-1] in ('.srt', '.sub', '.idx') + self.is_subtitle = os.path.splitext(self.name)[-1] in ('.srt', ) if not self.is_audio and not self.is_video and self.name.endswith('.srt'): self.is_subtitle = True + else: + self.is_subtitle = False self.type = self.get_type() self.language = self.get_language() @@ -282,6 +285,15 @@ class File(models.Model): return data def get_part(self): + #FIXME: this breaks for sub/idx/srt + if os.path.splitext(self.name)[-1] in ('.sub', '.idx', '.srt'): + name = os.path.splitext(self.name)[0] + if self.language: + name = name[-(len(self.language)+1)] + qs = self.item.files.filter(Q(is_video=True)|Q(is_audio=True), + is_main=True, name__startswith=name) + if qs.count()>0: + return qs[0].part if not self.is_extra: files = list(self.item.files.filter(type=self.type, language=self.language, is_main=self.is_main).order_by('sort_name')) diff --git a/pandora/item/managers.py b/pandora/item/managers.py index eb74c984..ee5c213f 100644 --- a/pandora/item/managers.py +++ b/pandora/item/managers.py @@ -52,10 +52,12 @@ def parseCondition(condition): 'text': 'string', 'year': 'string', 'length': 'string', - 'list': 'list' + 'list': 'list', + 'layer': 'string' }.get(key_type, key_type) if k == 'list': key_type = 'list' + if key_type == "string": in_find=True value_key = 'find__value' diff --git a/pandora/item/models.py b/pandora/item/models.py index 8482d49b..a8d29500 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -400,8 +400,8 @@ class Item(models.Model): save('trivia', ' '.join(self.get('trivia', []))) #FIXME: - qs = Annotation.objects.filter(layer__type='subtitle', item=self).order_by('start') - save('dialog', '\n'.join([l.value for l in qs])) + qs = Annotation.objects.filter(layer__name='subtitles', item=self).order_by('start') + save('subtitles', '\n'.join([l.value for l in qs])) def update_sort(self): try: diff --git a/pandora/item/tasks.py b/pandora/item/tasks.py index 2a7781d0..5511b561 100644 --- a/pandora/item/tasks.py +++ b/pandora/item/tasks.py @@ -41,7 +41,16 @@ def load_subtitles(itemId): layer = models.Layer.objects.get(name='subtitles') models.Annotation.objects.filter(layer=layer,item=item).delete() offset = 0 - for f in item.files.filter(is_main=True, is_subtitle=True, available=True).order_by('part'): + language = '' + languages = [f.language for f in item.files.filter(is_main=True, is_subtitle=True, + available=True)] + if languages: + if 'en' in languages: + language = 'en' + else: + language = languages[0] + for f in item.files.filter(is_main=True, is_subtitle=True, + available=True, language=language).order_by('part'): user = f.instances.all()[0].volume.user for data in f.srt(offset): annotation = models.Annotation( @@ -54,5 +63,12 @@ def load_subtitles(itemId): ) annotation.save() duration = item.files.filter(Q(is_audio=True)|Q(is_video=True)) \ - .filter(is_main=True, available=True, part=f.part)[0].duration + .filter(is_main=True, available=True, part=f.part) + if duration: + duration = duration[0].duration + else: + models.Annotation.objects.filter(layer=layer,item=item).delete() + break offset += duration + item.update_find() + diff --git a/pandora/place/models.py b/pandora/place/models.py index 9dfec291..23bbdc6f 100644 --- a/pandora/place/models.py +++ b/pandora/place/models.py @@ -70,16 +70,14 @@ class Place(models.Model): j[key] = getattr(self, key) return j - def update_matches(self): - """ - import random - self.matches = random.randint(0, 100) - """ - q = Q(value__icontains=self.name) + def get_matches(self): + q = Q(value__icontains=" " + self.name)|Q(value__startswith=self.name) for name in self.alternativeNames: - q = q|Q(value__icontains=name) - self.matches = Annotation.objects.filter(q).count() + q = q|Q(value__icontains=" " + name)|Q(value__startswith=name) + return Annotation.objects.filter(q) + def update_matches(self): + self.matches = self.get_matches().count() self.save() def save(self, *args, **kwargs):