2537a5bbea08ebdff5e034f068907b26a8e32efb
[redakcja.git] / src / catalogue / models / listeners.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 from django.contrib.auth.models import User
7 from django.db import models
8 from catalogue.models import (Book, Chunk, Image, BookPublishRecord,
9         ImagePublishRecord)
10 from catalogue.signals import post_publish
11 from dvcs.signals import post_publishable
12
13
14 def book_changed(sender, instance, created, **kwargs):
15     instance.touch()
16     for c in instance:
17         c.touch()
18 models.signals.post_save.connect(book_changed, sender=Book)
19
20
21 def chunk_changed(sender, instance, created, **kwargs):
22     instance.book.touch()
23     instance.touch()
24 models.signals.post_save.connect(chunk_changed, sender=Chunk)
25
26
27 def image_changed(sender, instance, created, **kwargs):
28     instance.touch()
29 models.signals.post_save.connect(image_changed, sender=Image)
30
31
32 def publish_listener(sender, *args, **kwargs):
33     if isinstance(sender, BookPublishRecord):
34         sender.book.touch()
35         for c in sender.book:
36             c.touch()
37     elif isinstance(sender, ImagePublishRecord):
38         sender.image.touch()
39 post_publish.connect(publish_listener)
40
41
42 def chunk_publishable_listener(sender, *args, **kwargs):
43     sender.tree.touch()
44     if isinstance(sender.tree, Chunk):
45         sender.tree.book.touch()
46 post_publishable.connect(chunk_publishable_listener)
47
48 def publishable_listener(sender, *args, **kwargs):
49     sender.tree.touch()
50 post_publishable.connect(publishable_listener, sender=Image)
51
52
53 def listener_create(sender, instance, created, **kwargs):
54     if created:
55         instance.chunk_set.create(number=1, slug='1')
56 models.signals.post_save.connect(listener_create, sender=Book)
57