Commit Graph
15 Commits
Author SHA1 Message Date
4grayandClaude Fable 5 0f8f7be2fe fix(search): keep non-compound tokens as SQL constraints on compound arms
Review follow-up (Greptile P1 x2, Codex P2 x3 on #1172): for multi-token
compound terms like "A&E HD", the compound substring arms let any title
containing "a&e" into the bounded SQL candidate window (200 per-playlist /
5000 global) before scoring enforced the remaining tokens, so enough plain
"A&E" rows could push real "US: A&E HD" matches out of the window.

- title and M3U payload conditions now compose per word: each word's token
  conditions AND together, and only a compound word's own arm gains the
  intact-substring OR — every other word stays an independent constraint
- the trigram FTS supplement AND-s the non-compound tokens as contains
  LIKE conditions next to MATCH '"a&e"'
- new SearchWordPlan/getSearchWordPlans/getCompoundResidualTokenGroups
  helpers in content-search.util.ts

Verified on real SQLite: searching "A&E HD" selects "US | A&E HD" but no
longer selects plain "A&E"/"US: A&E" rows at the SQL level.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 07:39:10 +02:00
4grayandClaude Fable 5 37a66a3327 fix(search): find punctuation-joined words like "A&E" anywhere in titles
Search normalization splits "A&E" into the 1-letter tokens "a" + "e",
and short first tokens are prefix-anchored for performance (GLOB 'a*'
plus a startsWith gate in the ranking), so provider-prefixed channels
such as "US: A&E" could never match.

Words that keep internal punctuation after edge-trimming ("a&e",
"x-men", "l'equipe") are now preserved as compound words and matched as
an intact substring in addition to the existing token logic:

- global Xtream search supplements the unchanged prefix/GLOB arm with a
  trigram FTS substring lookup (MATCH '"a&e"'), deduped by content id,
  falling back to the content scan if FTS is unavailable
- the ranking gate lets multi-token phrases match as a space-bounded
  whole-word sequence anywhere in the title ("US: A&E", score 40)
  without crossing word boundaries ("Casa e Villa" stays excluded)
- per-playlist search and the M3U payload prefilter OR-in intact-word
  contains patterns

The pure search-text helpers moved out of content.operations.ts into a
new drizzle-free content-search.util.ts so they are unit-testable
without database mocks; scoreSearchTextMatch is re-exported.

Fixes #1161

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 01:11:35 +02:00
4gray e801028005 feat(epg): support playlist-scoped sources
Add playlist-scoped EPG source support for M3U playlists.
2026-06-21 22:53:07 +02:00
4gray 3d4550f6c5 Merge remote-tracking branch 'origin/master' into agent/dashboard-rail-performance
# Conflicts:
#	apps/electron-backend/src/app/database/operations/content.operations.spec.ts
#	libs/shared/interfaces/src/lib/electron-api.interface.ts
2026-06-20 23:43:04 +02:00
4gray 89916af9d8 feat(search): add workspace global search with M3U support
Moves global search into a routed workspace view, adds M3U live/radio results, lazy pagination, and DB-backed matching improvements.
2026-06-20 23:05:48 +02:00
4gray b6c5367d63 fix(dashboard): speed up startup rails 2026-06-20 21:46:42 +02:00
4gray 4847eb5241 refactor(electron): split epg event services
Split EPG IPC orchestration, worker lifecycle, and query logic into focused services. Harden clear-worker lifecycle after review with timeout/exit handling and regression coverage.
2026-05-27 22:05:40 +02:00
4gray d24c77a143 chore(nx): enforce scoped workspace boundaries (#942) 2026-05-15 09:59:06 +02:00
4gray 549bdd7a9e docs: update navigation and dashboard documentation for clarity and accuracy 2026-04-22 22:24:27 +02:00
4gray fc3db71e85 refactor: delete all playlists feature
- Updated confirmation dialog messages to provide detailed consequences of deleting playlists.
- Added backup hints and progress messages for better user experience during playlist deletion.
- Ensured consistency in language across all supported translations (de, el, en, es, fr, it, ja, ko, nl, pl, pt, ru, tr, zh, zhtw).

Entire-Checkpoint: c6e522b4276c
2026-04-21 20:09:05 +02:00
4gray ff605fc024 fix(xtream): enhance content retrieval by adding content type filtering for Xtream ID lookups #756
Entire-Checkpoint: c6e522b4276c
2026-04-19 22:33:49 +02:00
4gray d90a0a8f89 build: update CI configuration for Linux packaging targets and profiles 2026-04-13 08:46:14 +02:00
4gray b449e3796b build: update Snap packaging to use core22 base for compatibility 2026-04-13 08:06:48 +02:00
4gray e01d7caf0b feat: add tracing options for Electron freeze diagnostics 2026-04-05 23:26:38 +02:00
4gray d366672506 docs: refactor and document architecture for Stalker and Workspace components
- Moved Stalker-related components and services from apps/web to libs/portal for better modularity.
- Introduced SQLite DB Worker to handle non-EPG database operations, improving UI responsiveness.
- Updated documentation for the Workspace Dashboard and Shell, detailing current implementation and routing structure.
- Added new EPG fixture scenarios to the Xtream mock server for testing purposes.
- Enhanced the overall architecture documentation to reflect recent changes and improvements.
2026-04-05 19:05:07 +02:00