]> git.parisson.com Git - telemeta.git/commitdiff
add sound_public query for full access items,
authoryomguy <yomguy@parisson.com>
Wed, 13 Mar 2013 21:58:04 +0000 (22:58 +0100)
committeryomguy <yomguy@parisson.com>
Wed, 13 Mar 2013 21:58:04 +0000 (22:58 +0100)
optimize random items query in home,
debug new access workflow

telemeta/models/query.py
telemeta/templates/telemeta/mediaitem_player.html
telemeta/templates/telemeta/mediaitem_player_contour.html
telemeta/templates/telemeta/mediaitem_player_simple.html
telemeta/views/core.py
telemeta/views/home.py

index c5f1d991084811c11d11baab1bc14062c2c3da22..7a078819258a8d23b18e12228e76fce5e5e05153 100644 (file)
@@ -200,6 +200,9 @@ class MediaItemQuerySet(CoreQuerySet):
     def sound(self):
         return self.filter(file__contains='/')
 
+    def sound_public(self):
+        return self.filter(file__contains='/', public_access='full', collection__public_access='full')
+
     def by_instrument(self, instrument):
         "Find items by instrument"
         return self.filter(instruments__in=instrument)
@@ -248,6 +251,10 @@ class MediaItemManager(CoreManager):
         return self.get_query_set().sound(*args, **kwargs)
     sound.__doc__ = MediaItemQuerySet.sound.__doc__
 
+    def sound_public(self, *args, **kwargs):
+        return self.get_query_set().sound_public(*args, **kwargs)
+    sound_public.__doc__ = MediaItemQuerySet.sound_public.__doc__
+
     def by_instrument(self, *args, **kwargs):
         return self.get_query_set().by_instrument(*args, **kwargs)
     by_instrument.__doc__ = MediaItemQuerySet.by_instrument.__doc__
index 0c4149eed8c3ae3d834e92baaac0e2f309c4c31a..01bfab089b358ccd3372f12a3492e5f1e8287d0d 100644 (file)
@@ -22,7 +22,7 @@
 {% block content %}
 <div>
 {% if item.file %}
-    {% if public_access or user.is_staff %}
+    {% if access or user.is_staff %}
     <div id="rightcol" style="float: left; padding-bottom:0;">
         <div id="player_minimized" class="ts-skin-lab">
             <div class="wazing"></div>
index aeb3bd80ec35741317fbcae8d6cb833d3c7cbfd1..5d6f1045cba9f3b12565cc348e58cb19d18f219a 100644 (file)
@@ -35,7 +35,7 @@
 {% block content %}
 <div>
 {% if item.file %}
-    {% if public_access or user.is_staff %}
+    {% if access or user.is_staff %}
     <div id="rightcol" style="float: left; padding-bottom:0;">
         <div id="player_minimized" class="ts-skin-lab">
             <div class="wazing"></div>
index f7a3cee9ff4f3792c0a303e7e62725aead1ba2ee..3f84687c64205bf1c1e0e964a98c261d9c813eda 100644 (file)
@@ -30,7 +30,7 @@
 {% block content %}
 <div>
 {% if item.file %}
-    {% if public_access or user.is_staff %}
+    {% if access or user.is_staff %}
     <div id="rightcol" style="float: left; padding-bottom:0;">
         <div id="player_minimized" class="ts-skin-lab">
             <div class="wazing"></div>
index 46b1c5462b5bb3f09d1cee57984fc007e14b9ed3..4c672dd536cc23c6ea43cd71909935a52f13a5b2 100644 (file)
@@ -102,7 +102,6 @@ def send_file(request, filename, content_type='image/jpeg'):
     response['Content-Length'] = os.path.getsize(filename)
     return response
 
-<<<<<<< HEAD
 def nginx_media_accel(request, filename):
     """Send a protected medie file through nginx with X-Accel-Redirect"""
 
@@ -113,8 +112,6 @@ def nginx_media_accel(request, filename):
     response['X-Accel-Redirect'] = url
     return response
 
-=======
->>>>>>> crem
 def render(request, template, data = None, mimetype = None):
     return render_to_response(template, data, context_instance=RequestContext(request),
                               mimetype=mimetype)
@@ -148,24 +145,31 @@ def get_item_access(item, user):
 
     if user.is_staff or user.is_superuser or user.has_perm('telemeta.can_play_all_items'):
         access = 'full'
+        print '1'
 
     elif user.is_authenticated() and item.collection.public_access != 'mixed':
         if item.collection.public_access == 'metadata' and item.auto_period_access:
             access = 'full'
+            print '2'
         else:
             access = item.collection.public_access
+            print '3'
 
     elif user.is_authenticated() and item.collection.public_access == 'mixed':
         if item.public_access == 'metadata' and item.auto_period_access:
             access = 'full'
+            print '4'
         else:
             access = item.public_access
+            print '5'
 
     elif not user.is_authenticated() and item.collection.public_access != 'mixed':
         access = item.collection.public_access
+        print '6'
 
     elif not user.is_authenticated() and item.collection.public_access == 'mixed':
         access = item.public_access
+        print '7'
 
     # Auto publish after a period given at settings.TELEMETA_PUBLIC_ACCESS_PERIOD
     if access != 'full' and item.auto_period_access:
@@ -183,6 +187,7 @@ def get_item_access(item, user):
             year_now = datetime.datetime.now().strftime("%Y")
             if int(year_now) - int(year) >= settings.TELEMETA_PUBLIC_ACCESS_PERIOD:
                 access = 'full'
+        print '8'
 
     return access
 
index 2c6f92095132756a349bb55c3bb65865c404485e..c0b0051d67174c724a6afa91c0117eef98d5bd0d 100644 (file)
@@ -45,24 +45,28 @@ class HomeView(object):
 
         template = loader.get_template('telemeta/home.html')
 
-        sound_items = MediaItem.objects.sound()
-        _sound_pub_items = []
-        for item in sound_items:
-            if get_item_access(item, request.user) == 'full':
-                _sound_pub_items.append(item)
-
-        random.shuffle(_sound_pub_items)
-        if len(_sound_pub_items) != 0:
-            sound_pub_item = _sound_pub_items[0]
-        else:
+        N = 3   # max number of pub items
+
+        sound_items = MediaItem.objects.sound_public()
+        count = sound_items.count()
+
+        if count == 0:
             sound_pub_item = None
-        if len(_sound_pub_items) == 2:
-            sound_pub_items = [_sound_pub_items[1]]
-        elif len(_sound_pub_items) > 2:
-            sound_pub_items = _sound_pub_items[1:3]
-        else:
             sound_pub_items = None
 
+        elif count == 1:
+            sound_pub_item = sound_items[0]
+            sound_pub_items = [sound_items[0], sound_items[0]]
+
+        elif count == 2:
+            sound_pub_item = sound_items[0]
+            sound_pub_items = [sound_items[0], sound_items[1]]
+
+        elif count > 2:
+            indexes = random.sample(range(count-1), N)
+            sound_pub_item = sound_items[indexes[0]]
+            sound_pub_items = [sound_items[indexes[i]] for i in range(0, N-1)]
+
         revisions = get_revisions(25)
         context = RequestContext(request, {
                     'page_content': pages.get_page_content(request, 'home', ignore_slash_issue=True),