- Shorts: confirm via youtube.com/shorts/<id> probe (SOCS cookie bypasses the consent redirect) instead of a 60s heuristic; concurrent probing, shorts_probed flag, scheduled refinement (migration 0005) - Search: match title + channel name only (descriptions caused noisy results) - Faceted tag filtering: AND across categories (language AND topic narrows), OR within a category; any/all toggle applies to topics - Language detection: majority vote over individual titles (fixes misdetections like multipoleguy -> English; drops bogus Polish/Romanian) - Login: drop forced consent so returning sign-in is quick (select_account) - Feed cards: clickable channel name (opens channel), persistent saved badge, undo toast on hide, Hidden view to restore; tag chips show counts in tooltip
28 lines
777 B
Python
28 lines
777 B
Python
"""add videos.shorts_probed
|
|
|
|
Revision ID: 0005_shorts_probed
|
|
Revises: 0004_feed_state_prefs
|
|
Create Date: 2026-06-11
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
revision: str = "0005_shorts_probed"
|
|
down_revision: Union[str, None] = "0004_feed_state_prefs"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"videos",
|
|
sa.Column("shorts_probed", sa.Boolean(), nullable=False, server_default="false"),
|
|
)
|
|
op.create_index("ix_videos_shorts_probed", "videos", ["shorts_probed"])
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_videos_shorts_probed", table_name="videos")
|
|
op.drop_column("videos", "shorts_probed")
|