diff --git a/comic/feeds.py b/comic/feeds.py new file mode 100644 index 0000000..2e70aac --- /dev/null +++ b/comic/feeds.py @@ -0,0 +1,30 @@ +import uuid + +from django.contrib.syndication.views import Feed +from django.shortcuts import get_object_or_404 +from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode + +from .models import ComicBook, UserMisc + + +class RecentComics(Feed): + title = "CBWebReader Recent Comics" + link = "/comics/" + description = "Recently added Comics" + + def get_object(self, request, user_selector, *args, **kwargs): + user_selector = uuid.UUID(bytes=urlsafe_base64_decode(user_selector)) + return get_object_or_404(UserMisc, feed_id=user_selector) + + def items(self): + return ComicBook.objects.order_by('-date_added')[:10] + + def item_title(self, item: ComicBook): + return item.file_name + + def item_description(self, item: ComicBook): + return item.date_added.isoformat() + + # item_link is only needed if NewsItem has no get_absolute_url method. + def item_link(self, item: ComicBook): + return '/comic/read/{0}/0/'.format(urlsafe_base64_encode(item.selector.bytes).decode()) diff --git a/comic/migrations/0017_usermisc.py b/comic/migrations/0017_usermisc.py new file mode 100644 index 0000000..606b76f --- /dev/null +++ b/comic/migrations/0017_usermisc.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-01-13 15:28 +from __future__ import unicode_literals + +import uuid + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('comic', '0016_auto_20160414_1335'), + ] + + operations = [ + migrations.CreateModel( + name='UserMisc', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('feed_id', models.UUIDField(db_index=True, default=uuid.uuid4, unique=True)), + ( + 'user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/comic/migrations/0018_auto_20170113_1531.py b/comic/migrations/0018_auto_20170113_1531.py new file mode 100644 index 0000000..df2f4c8 --- /dev/null +++ b/comic/migrations/0018_auto_20170113_1531.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-01-13 15:31 +from __future__ import unicode_literals + +from django.db import migrations + + +def gen_feeds(apps, schema_editor): + user_misc = apps.get_model('comic', 'UserMisc') + User = apps.get_model('auth', 'user') + for user in User.objects.all(): + um = user_misc.objects.create(user=user) + + +class Migration(migrations.Migration): + dependencies = [ + ('comic', '0017_usermisc'), + ] + + operations = [ + migrations.RunPython(gen_feeds, reverse_code=migrations.RunPython.noop), + ] diff --git a/comic/models.py b/comic/models.py index 1c2fca8..c8bdced 100644 --- a/comic/models.py +++ b/comic/models.py @@ -316,7 +316,7 @@ class ComicPage(models.Model): class ComicStatus(models.Model): - user = models.ForeignKey(User, unique=False, null=False) + user = models.ForeignKey(User, unique=False, null=False, on_delete=models.CASCADE) comic = models.ForeignKey(ComicBook, unique=False, null=False, on_delete=models.CASCADE) last_read_page = models.IntegerField(default=0) unread = models.BooleanField(default=True) @@ -329,3 +329,8 @@ class ComicStatus(models.Model): def __str__(self): return 'C:{0} P:{1}'.format(self.comic.file_name, self.last_read_page) # TODO: add support to reference items last being read + + +class UserMisc(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + feed_id = models.UUIDField(unique=True, default=uuid.uuid4, db_index=True) diff --git a/comic/templates/comic/recent_comics.html b/comic/templates/comic/recent_comics.html index cae68ff..fec097a 100644 --- a/comic/templates/comic/recent_comics.html +++ b/comic/templates/comic/recent_comics.html @@ -6,7 +6,7 @@