Feature: JellyStat Importing (#18)
-
Add joinedAt column to serverUsers table
-
Add Jellystat types, schemas, and export progress event
-
Add getItems method to Jellyfin/Emby clients for media enrichment
-
Add Jellystat backup import service
-
Add Jellystat job handling to import queue
-
Add Jellystat import API endpoints
-
Wire up joinedAt field and add multipart form parser
-
Add Jellystat import UI to Settings page
-
Add comprehensive tests for Jellystat import service
-
Fix multipart form field parsing for Jellystat import
The field extraction was assuming a simpler structure than what
@fastify/multipart actually returns. Added proper handling for
the MultipartValue structure with array support.
- Fix Jellystat import form field parsing
- Reorder FormData fields before file (multipart stops parsing after file)
- Improve skipped users warning to be human-readable
- Optimize Jellystat import performance and clean up Import Settings UI
- Batch dedup queries instead of loading all sessions into memory
- Bigger batch sizes for faster inserts (500) and enrichment (200)
- New reusable FileDropzone and ImportProgressCard components
- Tabs layout for cleaner Plex vs Jellyfin/Emby separation
- Added info cards explaining why records get skipped
- Fixed Jellystat instructions (Activity Backup, not Full Backup)
-
Fix integer overflow in Jellystat import by using bigint columns
-
Fix CI failures: migration hypertable check and ESLint path alias
- Migration: Check if sessions is a hypertable before using TimescaleDB
commands. Fresh databases (like in CI) don't have hypertables until
app startup, so they now get a simple ALTER COLUMN instead. - ESLint: Add @/* path alias to tsconfig.eslint.json so the web app's
imports can be properly resolved during linting. - Clean up unused imports in Settings.tsx and unnecessary type assertion
in useServers.ts
-
Add joined_at column to server_users table
-
Clean up formatting and lint warnings
-
Fix unhandled promise in infinite scroll
-
Extract shared import utilities from Tautulli and Jellystat importers
Pull out common functionality into reusable modules:
- Batch processing with configurable sizes
- Progress tracking with throttled updates
- User ID mapping between external and internal systems
- Session deduplication logic
Simplify both importers by using these shared utilities.
Clean up verbose comments and streamline the code.
- Restore corrupted migration snapshot
0018 was incorrectly regenerated with joined_at column that
belongs in 0023.
-
Account for alt transcode payload
-
Fix test to match new trancode support