store clip values in clip db, cleanup if all annotations are gone, add additionalSort

This commit is contained in:
j 2012-01-20 23:23:21 +05:30
commit 16cc495fb5
10 changed files with 109 additions and 99 deletions

View file

@ -40,7 +40,6 @@ import archive.models
from person.models import get_name_sort
from title.models import get_title_sort
def get_id(info):
q = Item.objects.all()
for key in ('title', 'director', 'year'):
@ -325,9 +324,6 @@ class Item(models.Model):
if self.poster_frame == -1 and self.sort.duration:
self.poster_frame = self.sort.duration/2
update_poster = True
if not self.get('runtime') and self.sort.duration:
self.data['runtime'] = self.sort.duration
self.update_sort()
self.json = self.get_json()
super(Item, self).save(*args, **kwargs)
if update_ids:
@ -1143,7 +1139,7 @@ class Item(models.Model):
return icon
def load_subtitles(self):
if not filter(lambda l: l['id'] == 'subtitles', settings.CONFIG['layers']):
if not utils.get_by_id(settings.CONFIG['layers'], 'subtitles'):
return
with transaction.commit_on_success():
layer = 'subtitles'
@ -1220,7 +1216,8 @@ pre_delete.connect(delete_item, sender=Item)
Item.facet_keys = []
for key in settings.CONFIG['itemKeys']:
if 'autocomplete' in key and not 'autocompleteSortKey' in key:
if 'autocomplete' in key and not 'autocompleteSortKey' in key or \
key.get('filter'):
Item.facet_keys.append(key['id'])
Item.person_keys = []

View file

@ -78,3 +78,7 @@ def get_positions(ids, pos):
except:
pass
return positions
def get_by_id(objects, id):
obj = filter(lambda o: o['id'] == id, objects)
return obj and obj[0] or None

View file

@ -33,23 +33,15 @@ from clip.models import Clip
from ox.django.api import actions
import utils
def _order_query(qs, sort, prefix='sort__'):
order_by = []
if len(sort) == 1:
if sort[0]['key'] == 'title':
sort.append({'operator': '-', 'key': 'year'})
sort.append({'operator': '+', 'key': 'director'})
elif sort[0]['key'] == 'director':
sort.append({'operator': '-', 'key': 'year'})
sort.append({'operator': '-', 'key': 'title'})
elif sort[0]['key'] == 'year':
sort.append({'operator': '+', 'key': 'director'})
sort.append({'operator': '+', 'key': 'title'})
elif not sort[0]['key'] in ('value', 'sortvalue'):
sort.append({'operator': '+', 'key': 'director'})
sort.append({'operator': '-', 'key': 'year'})
sort.append({'operator': '+', 'key': 'title'})
key = utils.get_by_id(settings.CONFIG['itemKeys'], sort[0]['key'])
for s in key.get('additionalSort', settings.CONFIG.get('additionalSort', [])):
sort.append(s)
for e in sort:
operator = e['operator']
if operator != '-':
@ -273,14 +265,21 @@ Positions
Sum('pixels'),
Sum('size')
)
response['data']['duration'] = r['duration__sum']
response['data']['files'] = files.count()
response['data']['items'] = items.count()
response['data']['pixels'] = r['pixels__sum']
response['data']['runtime'] = items.aggregate(Sum('sort__runtime'))['sort__runtime__sum']
response['data']['size'] = r['size__sum']
totals = [i['id'] for i in settings.CONFIG['totals']]
if 'duration' in totals:
response['data']['duration'] = r['duration__sum']
if 'files' in totals:
response['data']['files'] = files.count()
if 'items' in totals:
response['data']['items'] = items.count()
if 'pixels' in totals:
response['data']['pixels'] = r['pixels__sum']
if 'runtime' in totals:
response['data']['runtime'] = items.aggregate(Sum('sort__runtime'))['sort__runtime__sum'] or 0
if 'size' in totals:
response['data']['size'] = r['size__sum']
for key in ('runtime', 'duration', 'pixels', 'size'):
if response['data'][key] == None:
if key in totals and response['data'][key] == None:
response['data'][key] = 0
return render_to_json_response(response)
actions.register(find)
@ -769,8 +768,8 @@ def video(request, id, resolution, format, index=None):
response = HttpResponse(extract.chop(path, t[0], t[1]), content_type=content_type)
filename = "Clip of %s - %s-%s - %s %s%s" % (
item.get('title'),
ox.formatDuration(t[0] * 1000),
ox.formatDuration(t[1] * 1000),
ox.formatDuration(t[0] * 1000).replace(':', '.')[:-4],
ox.formatDuration(t[1] * 1000).replace(':', '.')[:-4],
settings.SITENAME,
item.itemId,
ext