forked from 0x2620/pandora
fix findMedia by list
This commit is contained in:
parent
74c4d718ab
commit
557c078319
1 changed files with 29 additions and 0 deletions
|
@ -7,6 +7,7 @@ from oxdjango.managers import get_operator
|
||||||
from oxdjango.query import QuerySet
|
from oxdjango.query import QuerySet
|
||||||
from oxdjango.fields import DictField
|
from oxdjango.fields import DictField
|
||||||
|
|
||||||
|
|
||||||
keymap = {
|
keymap = {
|
||||||
'id': 'item__public_id',
|
'id': 'item__public_id',
|
||||||
'filename': 'path',
|
'filename': 'path',
|
||||||
|
@ -16,6 +17,9 @@ default_key = 'oshash'
|
||||||
def parseCondition(condition, user):
|
def parseCondition(condition, user):
|
||||||
'''
|
'''
|
||||||
'''
|
'''
|
||||||
|
from item.managers import parseConditions as itemParseConditions
|
||||||
|
from itemlist.models import List
|
||||||
|
from item.models import Item
|
||||||
k = condition.get('key', default_key)
|
k = condition.get('key', default_key)
|
||||||
k = keymap.get(k, k)
|
k = keymap.get(k, k)
|
||||||
if not k:
|
if not k:
|
||||||
|
@ -34,6 +38,31 @@ def parseCondition(condition, user):
|
||||||
elif k == 'url':
|
elif k == 'url':
|
||||||
key = 'info' + get_operator('=', 'istr')
|
key = 'info' + get_operator('=', 'istr')
|
||||||
v = DictField.dumps({'url': v})[1:-1]
|
v = DictField.dumps({'url': v})[1:-1]
|
||||||
|
elif k == 'list':
|
||||||
|
q = Q(id=0)
|
||||||
|
l = v.split(":")
|
||||||
|
if len(l) == 1:
|
||||||
|
vqs = Volume.objects.filter(name=v, user=user)
|
||||||
|
if vqs.count() == 1:
|
||||||
|
v = vqs[0]
|
||||||
|
q = Q(files__instances__volume__id=v.id)
|
||||||
|
elif len(l) >= 2:
|
||||||
|
l = (l[0], ":".join(l[1:]))
|
||||||
|
lqs = list(List.objects.filter(name=l[1], user__username=l[0]))
|
||||||
|
if len(lqs) == 1 and lqs[0].accessible(user):
|
||||||
|
l = lqs[0]
|
||||||
|
if l.query.get('static', False) is False:
|
||||||
|
data = l.query
|
||||||
|
q = itemParseConditions(data.get('conditions', []),
|
||||||
|
data.get('operator', '&'),
|
||||||
|
user, l.user)
|
||||||
|
else:
|
||||||
|
q = Q(id__in=l.items.all())
|
||||||
|
if exclude:
|
||||||
|
q = ~q
|
||||||
|
else:
|
||||||
|
q = Q(id=0)
|
||||||
|
return Q(item__in=Item.objects.filter(q))
|
||||||
else:
|
else:
|
||||||
key = k + get_operator(op, 'istr')
|
key = k + get_operator(op, 'istr')
|
||||||
key = str(key)
|
key = str(key)
|
||||||
|
|
Loading…
Reference in a new issue