mirror of
https://github.com/FuzzyGrim/Yamtrack.git
synced 2026-03-03 02:27:01 +00:00
convert HIDE_COMPLETED to user preference
This commit is contained in:
@@ -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 = {
|
||||
|
||||
@@ -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(
|
||||
|
||||
13
src/templates/app/icons/circle-check.svg
Normal file
13
src/templates/app/icons/circle-check.svg
Normal 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 |
@@ -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">
|
||||
|
||||
@@ -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'),
|
||||
),
|
||||
]
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user