[3.2] - 2025-01
バックエンド
機能
- WebAuthn Passkeyパスワードレスログインサポートを追加
- Passkeyクレデンシャルの登録、認証、管理
- マルチデバイスクレデンシャルバックアップ検出(iCloud Keychainなど)
- クローン攻撃保護(sign_count検証)
- パスワードとPasskeyログインインターフェースを統合する認証戦略パターン
- 検出可能なクレデンシャル(レジデントキー)によるユーザー名なしログインサポート
- シーズン/エピソードオフセットの自動検出を追加
- TMDBエピソード放送日を分析して「仮想シーズン」を検出(例:フリーレンS1が2つのパートに分割)
- 放送ギャップが6ヶ月を超える場合に異なるパートを自動識別
- エピソードオフセットを計算(例:RSSがS2E1を表示 → TMDB S1E29)
- バックグラウンドスキャンスレッドが既存の購読のオフセット問題を自動検出
- 新しいAPIエンドポイント:
POST /bangumi/detect-offset、PATCH /bangumi/dismiss-review/{id}
- 番組アーカイブ機能を追加
- 手動アーカイブ/アーカイブ解除サポート
- 完結シリーズの自動アーカイブ
- 新しいAPIエンドポイント:
PATCH /bangumi/archive/{id}、PATCH /bangumi/unarchive/{id}、GET /bangumi/refresh/metadata
- 検索プロバイダー設定APIを追加
GET /search/provider/config- 検索プロバイダー設定を取得PUT /search/provider/config- 検索プロバイダー設定を更新
- RSS接続ステータス追跡を追加
- 各リフレッシュ後に
connection_status(healthy/error)、last_checked_at、last_errorを記録
- 各リフレッシュ後に
- 初回実行セットアップウィザードを追加
- 7ステップのガイド付き設定:アカウント、ダウンローダー、RSSソース、メディアパス、通知
- ダウンローダー接続テスト、RSSソース検証
- オプションのステップはスキップして後で設定で構成可能
- センチネルファイルメカニズム(
config/.setup_complete)で再トリガーを防止 - 認証不要のセットアップAPI(初回実行時のみ利用可能、完了後は403を返す)
- Bangumi.tv放送スケジュール連携付きカレンダービューを追加
- ダウンローダーAPIと管理インターフェースを追加
- 完全な非同期移行
- データベースレイヤーの非同期サポート(aiosqlite)でPasskey操作のノンブロッキングI/O
UserDatabaseは後方互換性のためsync/asyncの両モードをサポートDatabaseコンテキストマネージャーはwith(sync)とasync with(async)の両方をサポート- RSSエンジン、ダウンローダー、チェッカー、パーサーを完全に非同期に変換
- ネットワークリクエストを
requestsからhttpx(AsyncClient)に移行
- バックエンドを
uvパッケージマネージャーに移行(pyproject.toml + uv.lock) - サーバー起動がバックグラウンドタスクを使用してブロッキングを回避(#891、#929を修正)
- データベースマイグレーションがNULL値をモデルデフォルトで自動埋め
- データベースにオフセット検出用の
needs_reviewとneeds_review_reasonフィールドを追加
パフォーマンス
- 共有HTTPクライアント接続プール、TCP/SSL接続を再利用
- RSSリフレッシュが並行(
asyncio.gather)、複数ソースで約10倍高速化 - トレントファイルダウンロードが並行、複数トレントで約5倍高速化
- リネームモジュールのファイルリスト取得が並行、約20倍高速化
- 通知送信が並行、2秒のハードコードされた遅延を削除
- TMDBとMikanパーサー結果のキャッシュを追加して重複API呼び出しを回避
Torrent.url、Torrent.rss_id、Bangumi.title_raw、Bangumi.deleted、RSSItem.urlにデータベースインデックスを追加- RSSの一括有効化/無効化がアイテムごとのコミットではなく単一トランザクションを使用
- トレント名解析とフィルターマッチング用にプリコンパイルされた正規表現パターン
SeasonCollectorがループ外で作成され、単一の認証を再利用- RSS解析の重複排除がO(n²)のリストルックアップからO(1)のセットルックアップに変更
Episode/SeasonInfoデータクラスがメモリフットプリント削減のため__slots__を使用
変更
- WebAuthn依存関係をpy_webauthn 2.7.0にアップグレード
_get_webauthn_from_requestがブラウザのOriginヘッダーを優先、クロスポート開発環境での検証問題を修正auth_userとupdate_user_infoを非同期関数に変換TitleParser.tmdb_parserを非同期関数に変換RSSEngineメソッドを完全に非同期化(pull_rss、refresh_rss、download_bangumi、add_rss)Checker.check_downloaderを非同期関数に変換ProgramStatusがthreadingからasyncioに移行(Event、Lock)
バグ修正
- 最大リトライ制限付きダウンローダー接続チェックを修正
- トレント追加時の一時的なネットワークエラーをリトライロジックで修正
- 検索と購読フローの複数の問題を修正
- トレント取得の信頼性とエラー処理を改善
aaguid型エラーを修正(py_webauthn 2.7.0ではstr、bytesではない)- 欠落していた
credential_backup_eligibleフィールドを修正(credential_device_typeに置換) verify_authentication_responseが無効なcredential_idパラメータを受け取りTypeErrorを引き起こす問題を修正- プログラム起動がサーバーをブロックする問題を修正(#891、#929、#886、#917、#946を修正)
- 検索インターフェースのエクスポートがコンポーネントの期待と一致しない問題を修正
- ポスターエンドポイントのパスチェックがすべてのリクエストを誤ってインターセプトする問題を修正(#933、#934を修正)
- OpenAIパーサーのセキュリティ問題を修正
- 非同期セッションを使用するデータベーステストと同期コードの不一致を修正
- 3.1.xから3.2へのアップグレード時の設定フィールドの競合による設定喪失を修正(#956を修正)
program.sleep_time/program.timesがrss_time/rename_timeに自動移行- 非推奨の
rss_parserフィールド(type、custom_url、token、enable_tmdb)を削除 ENV_TO_ATTR環境変数マッピングが存在しないモデルフィールドを指す問題を修正DEFAULT_SETTINGSと現在の設定モデルの不整合を修正
- バージョンアップグレードマイグレーションロジックエラーを修正(すべてのアップグレードが3.0→3.1マイグレーションを呼び出していた)
- ソースバージョンに基づくバージョン対応マイグレーションディスパッチを追加
- データベーススキーマ変更用の
from_31_to_32()マイグレーション関数を追加
フロントエンド
機能
- 完全なUIデザインシステムの再設計
- 統一されたデザイントークン(色、フォント、間隔、シャドウ、アニメーション)
- ライト/ダークテーマ切り替えサポート
- 包括的なアクセシビリティサポート(ARIA、キーボードナビゲーション、フォーカス管理)
- モバイルデバイス用レスポンシブレイアウト
- 初回実行セットアップウィザードページを追加
- マルチステップウィザードコンポーネント(プログレスバー + ステップナビゲーション)
- ルートガードの自動検出とセットアップページへのリダイレクト
- ダウンローダー/RSS/通知接続テストフィードバック
- 中国語と英語のi18nサポート
- Passkey管理パネルを追加(設定ページ)
- WebAuthnブラウザサポート検出
- 自動デバイス名識別
- Passkeyリスト表示と削除
- ログインページにPasskey指紋ログインボタンを追加(ユーザー名なしログインをサポート)
- カレンダービューページを追加
- ダウンローダー管理ページを追加
- 番組カードホバーオーバーレイを追加(タイトルとタグを表示)
- 外部URLとローカルパス処理を統一する
resolvePosterUrlユーティリティ関数を追加(#934を修正) - モーダルとフィルターシステムで検索パネルを再設計
- モダンなグラスモーフィズムスタイルでログインパネルを再設計
- ログビューにログレベルフィルターを追加
- LLM設定パネルを再設計(#938を修正)
- 設定、ダウンローダー、プレーヤー、ログページのスタイルを再設計
- 検索プロバイダー設定パネルを追加
- UIで検索ソースの表示、追加、編集、削除
- デフォルトソース(mikan、nyaa、dmhy)は削除不可
- URLテンプレート検証で
%sプレースホルダーを確認
- iOSスタイルの通知バッジシステムを追加
- レビューが必要な購読に黄色バッジ + 紫の枠線
- 組み合わせ表示サポート(例:警告 + 複数ルールに
! | 2) - 注意が必要なカードに黄色のグローアニメーション
- ワンクリック自動検出と却下機能付きの編集モーダル警告バナー
- ルール選択モーダルで警告のあるルールをハイライト
- カレンダーページの番組グループ化:複数ルールの同じアニメをマージ、クリックで特定のルールを選択
- 番組リストページに折りたたみ可能な「アーカイブ済み」セクション
- 番組リストページにスケルトンローディングアニメーション
- ルールエディターのエピソードオフセットフィールドに「自動検出」ボタン
- RSS管理ページの接続ステータスラベル:正常時は緑の「接続済み」、エラー時は赤で詳細ツールチップ
- 新しいモバイルファーストレスポンシブデザイン
- 3層ブレークポイントシステム:モバイル(<640px)、タブレット(640-1023px)、デスクトップ(≥1024px)
- モバイル下部ナビゲーションバー(アイコンとテキストラベル付き)
- タブレットミニサイドバー(56pxアイコンナビゲーション)
- モバイルポップアップが自動的にボトムシートに切り替わる
- プルトゥリフレッシュサポート
- 水平スワイプコンテナサポート
- モバイルカードリストがデータテーブルを置き換え(RSSページ)
- CSSグリッドレスポンシブレイアウト(番組カードグリッド)
- モバイルでフォームラベルが垂直にスタック、入力がフル幅
- タッチターゲット最小44px、アクセシビリティ標準を満たす
- セーフエリアサポート(ノッチデバイス)
100dvh動的ビューポート高さ(モバイルブラウザアドレスバー問題を修正)- フルスクリーンデバイス用
viewport-fit=cover
新しいコンポーネント
ab-bottom-sheet— タッチ駆動のボトムシートコンポーネント(ドラッグで閉じる、最大高さ制限)ab-adaptive-modal— アダプティブモーダル(モバイルでボトムシート / デスクトップで中央ダイアログ)ab-pull-refresh— プルトゥリフレッシュラッパーコンポーネントab-swipe-container— 水平スワイプコンテナ(CSSスクロールスナップ)ab-data-list— モバイルフレンドリーなカードリスト(NDataTableを置き換え)ab-mobile-nav— 強化された下部ナビゲーションバー(アイコン + ラベル + アクティブインジケーター)useSafeArea— セーフエリアコンポーザブル
パフォーマンス
- ダウンローダーストアが大規模配列でのディープリアクティブプロキシを回避するため
refの代わりにshallowRefを使用 - テーブル列定義を
computedに移動して各レンダリングでの再構築を回避 - RSSテーブル列をデータから分離、データ変更時に列設定を再構築しない
- カレンダーページの重複した
getAll()呼び出しを削除 ab-selectのwatchEffectをwatchに変更、マウント時の無効なemitを排除useClipboardをストアトップレベルに引き上げ、各copy()での新しいインスタンス作成を回避setIntervalを自動ライフサイクル管理のためuseIntervalFnに置換
変更
- 検索ロジックをリファクタリング、rxjs依存関係を削除
- 検索ストアエクスポートをコンポーネントの期待に一致するようリファクタリング
- フロントエンド依存関係をアップグレード
- ブレークポイントシステムを単一の1024pxから640px + 1024pxの2層に拡張
useBreakpointQueryにisTablet、isMobileOrTablet、isTabletOrPCを追加media-query.vueに#tabletスロットを追加(#mobileにフォールバック)- UnoCSSに
sm: 640pxブレークポイントを追加 ab-inputのモバイルフル幅 + タッチターゲット増加スタイリング- レイアウトが
vh単位の代わりにdvh単位を使用、safe-area-insetをサポート - カレンダーページの不明な列幅を修正
- ダウンローダーページのアクションバーボタンサイズを統一
CI/インフラ
- CIがPRオープン時にビルドテストを追加(devブランチからmainへのPRが自動的にビルドをトリガー)
- CIが
actions/upload-artifactとactions/download-artifactをv4にアップグレード - Dockerビルドから
linux/arm/v7プラットフォームを削除(uvイメージがサポートしていない) - CLAUDE.md開発ガイドを追加