convert HIDE_COMPLETED to user preference

This commit is contained in:
FuzzyGrim
2026-02-08 15:30:40 +01:00
parent 099eac3b88
commit 1e18d557cb
7 changed files with 70 additions and 6 deletions

View File

@@ -1,7 +1,6 @@
from urllib.parse import parse_qsl, urlencode, urlparse
from django.apps import apps
from django.conf import settings
from django.contrib import messages
from django.db.models import Q
from django.http import HttpResponseRedirect
@@ -11,7 +10,6 @@ from django.utils.http import url_has_allowed_host_and_scheme
from app.models import BasicMedia, MediaTypes, Status
hide_completed = settings.HIDE_COMPLETED
def minutes_to_hhmm(total_minutes):
"""Convert total minutes to HH:MM format."""
@@ -68,7 +66,7 @@ def format_search_response(page, per_page, total_results, results):
}
def enrich_items_with_user_data(request, items, section_name = None):
def enrich_items_with_user_data(request, items, section_name=None):
"""Enrich a list of items with user tracking data."""
if not items:
return []
@@ -121,7 +119,12 @@ def enrich_items_with_user_data(request, items, section_name = None):
key = (str(item["media_id"]), item["source"])
media_item = media_lookup.get(key)
if hide_completed and section_name == "recommendations" and media_item and media_item.status == Status.COMPLETED.value:
if (
request.user.hide_completed_recommendations
and section_name == "recommendations"
and media_item
and media_item.status == Status.COMPLETED.value
):
continue
enriched_item = {

View File

@@ -343,8 +343,6 @@ IMG_NONE = "https://www.themoviedb.org/assets/2/v4/glyphicons/basic/glyphicons-b
REQUEST_TIMEOUT = 120 # seconds
PER_PAGE = 24
HIDE_COMPLETED = config("HIDE_COMPLETED", default=False, cast=bool)
TMDB_API = config(
"TMDB_API",
default=secret(

View File

@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg"
width="auto"
height="100%"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="{{ classes }}">
<circle cx="12" cy="12" r="10"/>
<path d="m9 12 2 2 4-4"/>
</svg>

After

Width:  |  Height:  |  Size: 327 B

View File

@@ -85,6 +85,29 @@
</div>
</div>
{# Hide Completed Recommendations #}
<div class="mb-5">
<div class="flex items-center justify-between p-3 bg-[#39404b] rounded-md">
<div class="flex-1">
<div class="flex items-center text-gray-200 mb-1">
{% include "app/icons/circle-check.svg" with classes="w-5 h-5 mr-2" %}
<span class="text-sm font-medium">Hide completed media in recommendations</span>
</div>
<p class="text-xs text-gray-400 ml-7">
Hide media you've already completed from the recommendations section on detail pages.
</p>
</div>
<label class="relative inline-flex items-center cursor-pointer ml-4">
<input class="sr-only peer"
type="checkbox"
name="hide_completed_recommendations"
{% if user.hide_completed_recommendations %}checked{% endif %}>
<div class="w-9 h-5 bg-gray-600 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-px after:left-0.5 after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4.5 after:w-4.5 after:transition-all peer-checked:bg-indigo-600">
</div>
</label>
</div>
</div>
{# Date Format #}
<div class="mb-5">
<div class="flex items-center justify-between p-3 bg-[#39404b] rounded-md">

View File

@@ -0,0 +1,18 @@
# Generated by Django on 2026-02-08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0047_set_progress_bar_true'),
]
operations = [
migrations.AddField(
model_name='user',
name='hide_completed_recommendations',
field=models.BooleanField(default=False, help_text='Hide completed media in recommendations'),
),
]

View File

@@ -318,6 +318,12 @@ class User(AbstractUser):
help_text="Show progress bar",
)
# Hide completed recommendations
hide_completed_recommendations = models.BooleanField(
default=False,
help_text="Hide completed media in recommendations",
)
# Calendar preferences
calendar_layout = models.CharField(
max_length=20,

View File

@@ -238,6 +238,9 @@ def preferences(request):
QuickWatchDateChoices.CURRENT_DATE,
)
request.user.progress_bar = "progress_bar" in request.POST
request.user.hide_completed_recommendations = (
"hide_completed_recommendations" in request.POST
)
request.user.date_format = request.POST.get(
"date_format",
DateFormatChoices.ISO,