Librarian in regular requirements.
[redakcja.git] / apps / catalogue / models / listeners.py
index 532f1e7..1cfac27 100755 (executable)
@@ -5,7 +5,8 @@
 #
 from django.contrib.auth.models import User
 from django.db import models
-from catalogue.models import Book, Chunk
+from catalogue.models import (Book, Chunk, Image, BookPublishRecord,
+        ImagePublishRecord)
 from catalogue.signals import post_publish
 from dvcs.signals import post_publishable
 
@@ -23,7 +24,15 @@ def chunk_changed(sender, instance, created, **kwargs):
 models.signals.post_save.connect(chunk_changed, sender=Chunk)
 
 
+def image_changed(sender, instance, created, **kwargs):
+    instance.touch()
+models.signals.post_save.connect(image_changed, sender=Image)
+
+
 def user_changed(sender, instance, *args, **kwargs):
+    if 'last_login' in (kwargs.get('update_fields') or {}):
+        # Quick hack - this change seems to result from logging user in so just ignore it.
+        return
     books = set()
     for c in instance.chunk_set.all():
         books.add(c.book)
@@ -34,16 +43,24 @@ models.signals.post_save.connect(user_changed, sender=User)
 
 
 def publish_listener(sender, *args, **kwargs):
-    sender.book.touch()
-    for c in sender.book:
-        c.touch()
+    if isinstance(sender, BookPublishRecord):
+        sender.book.touch()
+        for c in sender.book:
+            c.touch()
+    elif isinstance(sender, ImagePublishRecord):
+        sender.image.touch()
 post_publish.connect(publish_listener)
 
 
+def chunk_publishable_listener(sender, *args, **kwargs):
+    sender.tree.touch()
+    if isinstance(sender.tree, Chunk):
+        sender.tree.book.touch()
+post_publishable.connect(chunk_publishable_listener)
+
 def publishable_listener(sender, *args, **kwargs):
     sender.tree.touch()
-    sender.tree.book.touch()
-post_publishable.connect(publishable_listener)
+post_publishable.connect(publishable_listener, sender=Image)
 
 
 def listener_create(sender, instance, created, **kwargs):