78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
from django.contrib.syndication.views import Feed
|
|
from django.urls import reverse
|
|
|
|
from twitch.models import DropCampaign, Game, Organization
|
|
|
|
|
|
class OrganizationFeed(Feed):
|
|
"""RSS feed for latest organizations."""
|
|
|
|
title = "TTVDrops Organizations"
|
|
link = "/organizations/"
|
|
description = "Latest organizations on TTVDrops"
|
|
|
|
def items(self) -> list[Organization]:
|
|
"""Return the latest 100 organizations."""
|
|
return list(Organization.objects.order_by("-id")[:100])
|
|
|
|
def item_title(self, item: Organization) -> str:
|
|
"""Return the organization name as the item title."""
|
|
return item.name
|
|
|
|
def item_description(self, item: Organization) -> str:
|
|
"""Return a description of the organization."""
|
|
return f"Organization {item.name}"
|
|
|
|
def item_link(self, item: Organization) -> str:
|
|
"""Return the link to the organization detail."""
|
|
return reverse("twitch:organization_detail", args=[item.pk])
|
|
|
|
|
|
class GameFeed(Feed):
|
|
"""RSS feed for latest games."""
|
|
|
|
title = "TTVDrops Games"
|
|
link = "/games/"
|
|
description = "Latest games on TTVDrops"
|
|
|
|
def items(self) -> list[Game]:
|
|
"""Return the latest 100 games."""
|
|
return list(Game.objects.order_by("-id")[:100])
|
|
|
|
def item_title(self, item: Game) -> str:
|
|
"""Return the game name as the item title."""
|
|
return str(item)
|
|
|
|
def item_description(self, item: Game) -> str:
|
|
"""Return a description of the game."""
|
|
return f"Game {item.display_name}"
|
|
|
|
def item_link(self, item: Game) -> str:
|
|
"""Return the link to the game detail."""
|
|
return reverse("twitch:game_detail", args=[item.pk])
|
|
|
|
|
|
class DropCampaignFeed(Feed):
|
|
"""RSS feed for latest drop campaigns."""
|
|
|
|
title = "TTVDrops Drop Campaigns"
|
|
link = "/campaigns/"
|
|
description = "Latest drop campaigns on TTVDrops"
|
|
|
|
def items(self) -> list[DropCampaign]:
|
|
"""Return the latest 100 drop campaigns."""
|
|
return list(DropCampaign.objects.order_by("-added_at")[:100])
|
|
|
|
def item_title(self, item: DropCampaign) -> str:
|
|
"""Return the campaign name as the item title."""
|
|
return item.name
|
|
|
|
def item_description(self, item: DropCampaign) -> str:
|
|
"""Return a description of the campaign."""
|
|
return item.description or f"Campaign {item.name}"
|
|
|
|
def item_link(self, item: DropCampaign) -> str:
|
|
"""Return the link to the campaign detail."""
|
|
return reverse("twitch:campaign_detail", args=[item.pk])
|