From 72c0917d2cda4ba53a50ed480d8d14a07f8a27a4 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Thu, 10 Nov 2011 21:22:58 +0000 Subject: [PATCH] list/enum, support find resolution --- pandora/0xdb.jsonc | 13 ++++++++----- pandora/item/managers.py | 6 ++++++ pandora/item/models.py | 10 ++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pandora/0xdb.jsonc b/pandora/0xdb.jsonc index 2c279e00..61ef43dd 100644 --- a/pandora/0xdb.jsonc +++ b/pandora/0xdb.jsonc @@ -306,7 +306,9 @@ "id": "resolution", "title": "Resolution", "type": ["integer"], - "columnWidth": 90 + "capability": "canSeeFiles", + "columnWidth": 90, + "format": {"type": "resolution", "args": ["px"]} }, { "id": "aspectratio", @@ -319,6 +321,7 @@ "id": "pixels", "title": "Pixels", "type": "integer", + "capability": "canSeeFiles", "columnWidth": 90, "format": {"type": "value", "args": ["px"]} }, @@ -393,7 +396,7 @@ "type": "integer", "capability": "canSeeFiles", "columnWidth": 60, - "format": {"type": "value", "args": ["bps"]} + "format": {"type": "unit", "args": ["kbps", 0, 0.001]} }, { "id": "parts", @@ -447,13 +450,13 @@ { "id": "rightslevel", "title": "Rights Level", - "type": "list", + "type": "enum", "columnWidth": 90, "format": {"type": "ColorLevel", "args": [ ["Public", "Relaxed", "Regular", "Restricted", "Private"] ]}, - "list": ["Public", "Relaxed", "Regular", "Restricted", "Private", "Unknown"], - "sortOperator": "+" + "sortOperator": "+", + "values": ["Public", "Relaxed", "Regular", "Restricted", "Private", "Unknown"] }, { "id": "canplayvideo", diff --git a/pandora/item/managers.py b/pandora/item/managers.py index c0e3b6d8..40b18ba0 100644 --- a/pandora/item/managers.py +++ b/pandora/item/managers.py @@ -59,6 +59,12 @@ def parseCondition(condition, user): elif k == 'filename' and (user.is_anonymous() or \ not user.get_profile().capability('canSeeFiles')): return Q(id=0) + elif k == 'resolution': + q = parseCondition({'key': 'width', 'value': v[0], 'operator': op}, user) \ + & parseCondition({'key': 'height', 'value': v[1], 'operator': op}, user) + if exclude: + q = ~q + return q elif isinstance(v, list) and len(v) == 2: q = parseCondition({'key': k, 'value': v[0], 'operator': '>='}, user) \ & parseCondition({'key': k, 'value': v[1], 'operator': '<'}, user) diff --git a/pandora/item/models.py b/pandora/item/models.py index 479eabaf..8bf2aa28 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -606,6 +606,8 @@ class Item(models.Model): 'pixels', 'timesaccessed', 'resolution', + 'width', + 'height', 'rightslevel', 'saturation', 'size', @@ -678,6 +680,8 @@ class Item(models.Model): s.duration = sum([v.duration for v in videos]) v = videos[0] s.resolution = v.width * v.height + s.width = v.width + s.height = v.height if not s.aspectratio: s.aspectratio = float(utils.parse_decimal(v.display_aspect_ratio)) s.pixels = sum([v.pixels for v in videos]) @@ -1156,8 +1160,10 @@ attrs = { '__module__': 'item.models', 'item': models.OneToOneField('Item', related_name='sort', primary_key=True), 'duration': models.FloatField(null=True, blank=True, db_index=True), + 'width': models.BigIntegerField(null=True, blank=True, db_index=True), + 'height': models.BigIntegerField(null=True, blank=True, db_index=True), } -for key in filter(lambda k: 'columnWidth' in k or k['type'] in ('integer', 'time', 'float', 'date', 'list'), settings.CONFIG['itemKeys']): +for key in filter(lambda k: 'columnWidth' in k or k['type'] in ('integer', 'time', 'float', 'date', 'enum'), settings.CONFIG['itemKeys']): name = key['id'] name = {'id': 'itemId'}.get(name, name) sort_type = key.get('sort', key['type']) @@ -1179,7 +1185,7 @@ for key in filter(lambda k: 'columnWidth' in k or k['type'] in ('integer', 'time 'date': 'date', 'hue': 'float', 'time': 'integer', - 'list': 'integer', + 'enum': 'integer', }.get(sort_type, sort_type)] attrs[name] = model[0](**model[1])