From 79fb9b09c1e27cefbfa60eba21b668d2ad3fbf32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Helle=C5=9Ben?= Date: Thu, 19 Mar 2026 19:39:27 +0100 Subject: [PATCH] Update web app manifest; fix type errors --- core/management/commands/submit_indexnow.py | 6 +- core/views.py | 65 +++++++++++--------- kick/views.py | 35 +++++++---- static/apple-touch-icon.png | Bin 6157 -> 1695 bytes static/favicon-96x96.png | Bin 0 -> 1823 bytes static/favicon.ico | Bin 15406 -> 15086 bytes static/favicon.svg | 1 + static/site.webmanifest | 29 ++++++--- static/web-app-manifest-192x192.png | Bin 0 -> 3151 bytes static/web-app-manifest-512x512.png | Bin 0 -> 15888 bytes templates/base.html | 10 +++ twitch/views.py | 61 +++++++++++------- 12 files changed, 135 insertions(+), 72 deletions(-) create mode 100644 static/favicon-96x96.png create mode 100644 static/favicon.svg create mode 100644 static/web-app-manifest-192x192.png create mode 100644 static/web-app-manifest-512x512.png diff --git a/core/management/commands/submit_indexnow.py b/core/management/commands/submit_indexnow.py index 191371b..9ff3041 100644 --- a/core/management/commands/submit_indexnow.py +++ b/core/management/commands/submit_indexnow.py @@ -30,6 +30,9 @@ def get_urls_from_sitemap(sitemap_url: str, list_of_urls: list[str]) -> list[str if parser.has_sitemaps(): sitemaps: SitemapIndex = parser.get_sitemaps() for sitemap in sitemaps: + if not sitemap.loc: + continue + list_of_urls.extend( get_urls_from_sitemap( sitemap_url=sitemap.loc, @@ -39,7 +42,7 @@ def get_urls_from_sitemap(sitemap_url: str, list_of_urls: list[str]) -> list[str elif parser.has_urls(): urls: UrlSet = parser.get_urls() - list_of_urls.extend(url.loc for url in urls) + list_of_urls.extend(url.loc for url in urls if url.loc) return list_of_urls @@ -99,6 +102,7 @@ class Command(BaseCommand): api_key_location=api_key_location, ) + status_code: int = 0 urls: list[str] = get_urls_from_sitemap(sitemap_url=sitemap, list_of_urls=[]) chucked_urls: list[list[str]] = get_chucked_urls(urls=urls) for chunk in chucked_urls: diff --git a/core/views.py b/core/views.py index c340e08..d5d2dc3 100644 --- a/core/views.py +++ b/core/views.py @@ -121,7 +121,7 @@ def _build_seo_context( # noqa: PLR0913, PLR0917 def _render_urlset_xml( - url_entries: list[dict[str, str | dict[str, str]]], + url_entries: list[dict[str, str]], ) -> str: """Render a sitemap XML string from URL entries. @@ -184,20 +184,24 @@ def sitemap_view(request: HttpRequest) -> HttpResponse: # Compute last modified per-section so search engines can more intelligently crawl. # Do not fabricate a lastmod date if the section has no data. - twitch_channels_lastmod = Channel.objects.aggregate(max=Max("updated_at"))["max"] - twitch_drops_lastmod = max( - [ + twitch_channels_lastmod: datetime.datetime | None = Channel.objects.aggregate( + max=Max("updated_at"), + )["max"] + + twitch_drops_lastmod: datetime.datetime | None = max( + ( dt for dt in [ DropCampaign.objects.aggregate(max=Max("updated_at"))["max"], RewardCampaign.objects.aggregate(max=Max("updated_at"))["max"], ] if dt is not None - ] - or [None], + ), + default=None, ) - twitch_others_lastmod = max( - [ + + twitch_others_lastmod: datetime.datetime | None = max( + ( dt for dt in [ Game.objects.aggregate(max=Max("updated_at"))["max"], @@ -205,10 +209,13 @@ def sitemap_view(request: HttpRequest) -> HttpResponse: ChatBadgeSet.objects.aggregate(max=Max("updated_at"))["max"], ] if dt is not None - ] - or [None], + ), + default=None, ) - kick_lastmod = KickDropCampaign.objects.aggregate(max=Max("updated_at"))["max"] + + kick_lastmod: datetime.datetime | None = KickDropCampaign.objects.aggregate( + max=Max("updated_at"), + )["max"] sitemap_entries: list[dict[str, str]] = [ {"loc": f"{base_url}/sitemap-static.xml"}, @@ -297,7 +304,7 @@ def sitemap_static_view(request: HttpRequest) -> HttpResponse: "youtube:index", ] - sitemap_urls: list[dict[str, str | dict[str, str]]] = [] + sitemap_urls: list[dict[str, str]] = [] for route_name in static_route_names: url = reverse(route_name) sitemap_urls.append({"url": f"{base_url}{url}"}) @@ -317,13 +324,13 @@ def sitemap_twitch_channels_view(request: HttpRequest) -> HttpResponse: HttpResponse: The rendered sitemap XML. """ base_url: str = _build_base_url(request) - sitemap_urls: list[dict[str, str | dict[str, str]]] = [] + sitemap_urls: list[dict[str, str]] = [] channels: QuerySet[Channel] = Channel.objects.all() for channel in channels: resource_url: str = reverse("twitch:channel_detail", args=[channel.twitch_id]) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str | dict[str, str]] = {"url": full_url} + entry: dict[str, str] = {"url": full_url} if channel.updated_at: entry["lastmod"] = channel.updated_at.isoformat() sitemap_urls.append(entry) @@ -343,16 +350,16 @@ def sitemap_twitch_drops_view(request: HttpRequest) -> HttpResponse: HttpResponse: The rendered sitemap XML. """ base_url: str = _build_base_url(request) - sitemap_urls: list[dict[str, str | dict[str, str]]] = [] + sitemap_urls: list[dict[str, str]] = [] campaigns: QuerySet[DropCampaign] = DropCampaign.objects.all() for campaign in campaigns: resource_url: str = reverse("twitch:campaign_detail", args=[campaign.twitch_id]) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str] = {"url": full_url} + campaign_url_entry: dict[str, str] = {"url": full_url} if campaign.updated_at: - entry["lastmod"] = campaign.updated_at.isoformat() - sitemap_urls.append(entry) + campaign_url_entry["lastmod"] = campaign.updated_at.isoformat() + sitemap_urls.append(campaign_url_entry) reward_campaigns: QuerySet[RewardCampaign] = RewardCampaign.objects.all() for reward_campaign in reward_campaigns: @@ -362,11 +369,13 @@ def sitemap_twitch_drops_view(request: HttpRequest) -> HttpResponse: ) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str | dict[str, str]] = {"url": full_url} + reward_campaign_url_entry: dict[str, str] = {"url": full_url} if reward_campaign.updated_at: - entry["lastmod"] = reward_campaign.updated_at.isoformat() + reward_campaign_url_entry["lastmod"] = ( + reward_campaign.updated_at.isoformat() + ) - sitemap_urls.append(entry) + sitemap_urls.append(reward_campaign_url_entry) xml_content: str = _render_urlset_xml(sitemap_urls) return HttpResponse(xml_content, content_type="application/xml") @@ -383,13 +392,13 @@ def sitemap_twitch_others_view(request: HttpRequest) -> HttpResponse: HttpResponse: The rendered sitemap XML. """ base_url: str = _build_base_url(request) - sitemap_urls: list[dict[str, str | dict[str, str]]] = [] + sitemap_urls: list[dict[str, str]] = [] games: QuerySet[Game] = Game.objects.all() for game in games: resource_url: str = reverse("twitch:game_detail", args=[game.twitch_id]) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str | dict[str, str]] = {"url": full_url} + entry: dict[str, str] = {"url": full_url} if game.updated_at: entry["lastmod"] = game.updated_at.isoformat() @@ -400,7 +409,7 @@ def sitemap_twitch_others_view(request: HttpRequest) -> HttpResponse: for org in orgs: resource_url: str = reverse("twitch:organization_detail", args=[org.twitch_id]) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str | dict[str, str]] = {"url": full_url} + entry: dict[str, str] = {"url": full_url} if org.updated_at: entry["lastmod"] = org.updated_at.isoformat() @@ -431,13 +440,13 @@ def sitemap_kick_view(request: HttpRequest) -> HttpResponse: HttpResponse: The rendered sitemap XML. """ base_url: str = _build_base_url(request) - sitemap_urls: list[dict[str, str | dict[str, str]]] = [] + sitemap_urls: list[dict[str, str]] = [] kick_campaigns: QuerySet[KickDropCampaign] = KickDropCampaign.objects.all() for campaign in kick_campaigns: resource_url: str = reverse("kick:campaign_detail", args=[campaign.kick_id]) full_url: str = f"{base_url}{resource_url}" - entry: dict[str, str | dict[str, str]] = {"url": full_url} + entry: dict[str, str] = {"url": full_url} if campaign.updated_at: entry["lastmod"] = campaign.updated_at.isoformat() @@ -466,7 +475,7 @@ def sitemap_youtube_view(request: HttpRequest) -> HttpResponse: """ base_url: str = _build_base_url(request) - sitemap_urls: list[dict[str, str | dict[str, str]]] = [ + sitemap_urls: list[dict[str, str]] = [ {"url": f"{base_url}{reverse('youtube:index')}"}, ] @@ -980,7 +989,7 @@ def dashboard(request: HttpRequest) -> HttpResponse: kick_campaigns_by_game[game_key]["campaigns"].append({ "campaign": campaign, "channels": list(campaign.channels.all()), - "rewards": list(campaign.rewards.all()), + "rewards": list(campaign.rewards.all()), # pyright: ignore[reportAttributeAccessIssue] }) active_reward_campaigns: QuerySet[RewardCampaign] = ( diff --git a/kick/views.py b/kick/views.py index f87fb08..474806e 100644 --- a/kick/views.py +++ b/kick/views.py @@ -56,18 +56,29 @@ def _build_seo_context( "robots_directive": "index, follow", } if seo_meta: - if seo_meta.get("page_url"): - context["page_url"] = seo_meta["page_url"] - if seo_meta.get("og_type"): - context["og_type"] = seo_meta["og_type"] - if seo_meta.get("robots_directive"): - context["robots_directive"] = seo_meta["robots_directive"] - if seo_meta.get("schema_data"): - context["schema_data"] = json.dumps(seo_meta["schema_data"]) - if seo_meta.get("published_date"): - context["published_date"] = seo_meta["published_date"] - if seo_meta.get("modified_date"): - context["modified_date"] = seo_meta["modified_date"] + page_url: str | None = seo_meta.get("page_url") + if page_url: + context["page_url"] = page_url + + og_type: str | None = seo_meta.get("og_type") + if og_type: + context["og_type"] = og_type + + robots_directive: str | None = seo_meta.get("robots_directive") + if robots_directive: + context["robots_directive"] = robots_directive + + schema_data: dict[str, Any] | None = seo_meta.get("schema_data") + if schema_data: + context["schema_data"] = json.dumps(schema_data) + + published_date: str | None = seo_meta.get("published_date") + if published_date: + context["published_date"] = published_date + + modified_date: str | None = seo_meta.get("modified_date") + if modified_date: + context["modified_date"] = modified_date return context diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png index 6085fb78cf4d94d24df0d7367f7375f746a79c02..d95e48d2417ef6f184a71dacba6d20b49c6d0932 100644 GIT binary patch literal 1695 zcmeAS@N?(olHy`uVBq!ia0y~yVAuk}9Lx+13|zwB7#J9sx&wSdTzQo0W7ockUGpY( z&Fh#ouVYrfiCO(RX7#I>Rj*=Jy^LPMXPqn5vnTK*zx z`SYmd&mxyUk6iX5a@q69WzQm)K8slTEON=yh$YV=mOPDE{4{*glki24!xlXbU-&3& z;p4CckHQu_3|;UrbpFH8c@IM8-4B`fAY|@?kU95*=iCdPeJ^PCz2I5*gJ<0hnsqm5 z=AFQqcLS#14w!x`VA^f}X}A2R-1MJv!*B9+zsc8pCtdfMc+IE(s(0U2@4hSEeV4s^ zFMIV|^6I|i*>%CQ^P+plIgj>pZf)n>TF<(*o^fqG+^PPAW9@Or+GCD2#~f;o+E*U6uRLs9cF?x;pmp(n>*BrEMf)rZ_E_fc zvCQ9Xp1sRFd#8E!4zsN7W*OT|)3=(WZ!<~TVw|$sIAxPj$|j?vO@>LE3==mPByKcJ zSZ|Q9K|gM-e#}~35L%-fy+$``wQl4poyb+%;VZSnS7?PU*9={z8MIU*Xo*JPV)cN< z>i&z={1>bFFH-YcsOq;+&3B=i?*didMJhfERJ`Y_c+FSxoU80HSIJ|plKWgG_c@Ag zvz1)uD7em2beW~#GE?4phP=~EdB+*DPSfQaXUI8BmvfjV>o85uewv*9R9XA!vi8$t z?54`tPLZ~rEM+}O+G>)N)g&p)Nm3RQBrPUNT1=2I?Grcc6F2D-Gwu~L>Jc^S7B%b< zHRu*K=n^sL64CDx*6$M0>lD`O5Z3J!*6k1ip>`pib|LLHLG3mntu{feHUZ660gYAx zjTQloW`6Z%ezhh(wI)8*CO*|hK9xpZ5NhC6Zs1j}=TUCpQEK2hrfk8$znTm3*0qd*|RM_>2+@Q>_G3A(o2^Zb;qm=H>#WG z5O-XYx7fSlhBK#yr2p~NC+%)>)Q7L0skhuNesyHs%Vlw@rpNCDnmq6jec!KXk};EO z+YX<@$5sVg-zs=0NOW0|LZeTB<@g3o-Ju#y0ARVLZ7XZXf%+svY!UAK0Lvg%o%ddi)( zGrsUa$g8QR|Ly2mtszuU?do^<#Ft%3kzTsOPrtmq6|&Xg;~p>H*C%tIZsjSv!gaJn z&a!4@l$}*E6T=15!npNHx98c&1qas#~|8;5)`^mR?OCRxk zy6iC5eud|@HUHDN%ie|umppQ0W{6pkcHsE!?7nI9fN$G)TI9tIAM>@i=EZDg_s-gxv16I&;+HWOnl2jb zTh6-p;gPGl61@Hz>v%sJsfC-|?Rr(P$LF;8*^HxGB=qH<_oUr@Qa@wWO;*Kq5YSflI=I!lMfU; zN7nOsrmx&pUbs8fb%uwiy2fd(JO9EA^Q2BOyxsitLgQ%x(dS2#t#2{Bu=vWl^KZ*( zo28i+d|n}~Io?xNNv2r(zMSP!dRrrvJ>cvzuiGKlOgvZq-q`GTFPOVx&zX9w{Ls}i pc5*T(pPPu3!$5g0b6Y(__=LGS>Wy1&GcYhPc)I$ztaD0e0sy7S688WA literal 6157 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 ATL1t6 literal 0 HcmV?d00001 diff --git a/static/favicon.ico b/static/favicon.ico index ffe57c69eb0215c61b5c4e9221a210ae1dd53285..683d2fe8a7a6b28f555b42f0d141c1978cff0ffb 100644 GIT binary patch literal 15086 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 lZ(py8z4v-;^w!sFW6DA6CEhHK=A&jgLu diff --git a/static/site.webmanifest b/static/site.webmanifest index 6c094f8..b1e0d67 100644 --- a/static/site.webmanifest +++ b/static/site.webmanifest @@ -1,19 +1,28 @@ { - "name": "ttvdrops", - "short_name": "ttvdrops", + "name": "ttvdrops.lovinator.space", + "short_name": "TTVDrops", + "description": "Track Twitch and Kick drops.", + "start_url": "/", + "scope": "/", + "display": "standalone", + "categories": [ + "games", + "utilities" + ], + "theme_color": "#0c227f", + "background_color": "#000000", "icons": [ { - "src": "/android-chrome-192x192.png", + "src": "web-app-manifest-192x192.png", "sizes": "192x192", - "type": "image/png" + "type": "image/png", + "purpose": "maskable" }, { - "src": "/android-chrome-512x512.png", + "src": "web-app-manifest-512x512.png", "sizes": "512x512", - "type": "image/png" + "type": "image/png", + "purpose": "maskable" } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" + ] } diff --git a/static/web-app-manifest-192x192.png b/static/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..289f1b8baf19aade85d57a4e3c1df783bdcfb3e6 GIT binary patch literal 3151 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 II;Vst0MlN!N&o-= literal 0 HcmV?d00001 diff --git a/templates/base.html b/templates/base.html index f5a6e1a..d274505 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,6 +5,16 @@ + + + + +