- Run Prettier to fix code style in 7 files
- Auto-fix ESLint errors with --fix flag
- Replace ++ with += 1 in commandTracking.ts
- Add eslint-disable comments for intentional console.error usage
- Fix destructuring, array types, and template literals
- Remove trivial type annotations
Major performance improvement: Replace manual history aggregation with
Tautulli's built-in stats APIs. This eliminates the need to fetch and
process thousands of history records on every page load.
Changes:
- useTautulliStats composable completely rewritten:
- Use get_home_stats for overall watch statistics (pre-aggregated)
- Use get_plays_by_date for daily activity (already grouped by day)
- Use get_plays_by_dayofweek for weekly patterns (pre-calculated)
- Use get_plays_by_hourofday for hourly distribution (pre-calculated)
- Remove fetchUserHistory() and manual aggregation functions
- ActivityPage updates:
- Fetch all data in parallel with Promise.all for faster loading
- Use user_id instead of username for better API performance
- Simplified data processing since API returns pre-aggregated data
Benefits:
- 10-100x faster data loading (no need to fetch/process full history)
- Reduced network bandwidth (smaller API responses)
- Less client-side computation (no manual aggregation)
- Better scalability for large time ranges (365+ days)
- Consistent with Tautulli's internal calculations
- TorrentTable: Condense to 2 columns on mobile (title+meta, actions)
- Title shown on first line, size/seeders on second line
- Hide separate seed/size columns on mobile (desktop only)
- Improved spacing and readability for mobile screens
- Standardize page layouts to match ActivityPage:
- TorrentsPage: Update header style, padding, and container structure
- GenPasswordPage: Align header and content layout with other pages
- Consistent 3rem desktop padding, 0.75rem mobile padding
- Unified h1 styling: 2rem desktop, 1.5rem mobile, font-weight 300
- Minor improvements:
- Remove console.log statements from usePlexApi
- Fix duration unit handling in useTautulliStats
- Adjust AdminStats label font sizing
- Reduce Graph.vue point radius for cleaner charts
Create useTautulliStats composable (247 lines):
- fetchUserHistory() - Get watch history from Tautulli API
- calculateWatchStats() - Total hours, plays by media type
- groupByDay() - Daily activity (plays & duration)
- groupByDayOfWeek() - Weekly patterns by media type
- getTopContent() - Most watched content ranking
- getHourlyDistribution() - Watch patterns by hour of day
Update ActivityPage.vue with new visualizations:
- Stats overview cards (4 metrics: plays, hours, movies, episodes)
- Activity per day line chart (plays or duration)
- Activity by media type stacked bar chart (movies/shows/music)
- NEW: Hourly distribution chart
- NEW: Top 10 most watched content list
Features:
- Direct Tautulli API integration (no backend needed)
- Real-time data from Plex watch history
- Configurable time range (days filter)
- Toggle between plays count and watch duration
- Responsive grid layout for stats cards
- Styled top content ranking with hover effects
Benefits:
- Rich visualization of actual watch patterns
- See viewing habits by time of day
- Identify most rewatched content
- Compare movie vs TV viewing
- All data from authoritative source (Tautulli)
ActivityPage now provides comprehensive watch analytics! 📊