Files
iptvnator/package.json
T
4grayandClaude Opus 4.5 7c44541721 feat: add download manager for VOD and series episodes
Add comprehensive download functionality for Xtream and Stalker portals:

Backend (Electron):
- Add downloads table schema with foreign key to playlists
- Create downloads.events.ts with IPC handlers for download operations
- Support download start, cancel, retry, remove, and status queries
- Auto-create playlist entries for Stalker portals to satisfy FK constraints
- Add download folder selection and file reveal/play functionality

Frontend (Angular):
- Create DownloadsService with reactive signal-based state management
- Add DownloadsComponent with queue management UI
- Implement download buttons with three states: download, downloading, play local
- Support both Xtream and Stalker modes with proper playlist ID handling
- Add download progress indicators and status badges

UI Components:
- Update VodDetailsComponent with download/play-local buttons
- Update SeasonContainerComponent with episode download buttons
- Add navigation link to downloads page
- Style download buttons and progress indicators

Stalker Portal Support:
- Resolve stream URLs via fetchLinkToPlay API before downloading
- Handle both vod-series and regular-series episode types
- Use playlist._id for Stalker (vs portalId for Xtream)
- Pass playlist info for auto-creation in database

Translations:
- Add download-related strings for en, de, es, fr

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 09:22:30 +01:00

165 lines
5.9 KiB
JSON

{
"name": "iptvnator",
"version": "0.18.0",
"license": "MIT",
"description": "IPTV player application.",
"homepage": "https://github.com/4gray/iptvnator",
"author": {
"name": "4gray",
"email": "fourgray@proton.me"
},
"keywords": [
"angular",
"electron",
"typescript",
"m3u",
"m3u8",
"player",
"iptv",
"video",
"tv"
],
"scripts": {
"postinstall": "electron-builder install-app-deps",
"build:frontend": "nx build web",
"build:frontend:pwa": "nx build web --configuration=pwa",
"build:backend": "nx build electron-backend --configuration=production",
"serve:frontend": "nx serve web --no-tui",
"serve:frontend:pwa": "nx serve web --configuration=pwa --no-tui",
"serve:backend": "nx serve electron-backend",
"test:frontend": "nx test web",
"test:backend": "nx test electron-backend",
"package:app": "nx run electron-backend:make --prepackageOnly",
"make:app": "nx run electron-backend:make"
},
"private": true,
"dependencies": {
"@angular/animations": "^20.3.10",
"@angular/cdk": "^20.2.12",
"@angular/common": "~20.3.10",
"@angular/compiler": "~20.3.10",
"@angular/core": "~20.3.10",
"@angular/forms": "~20.3.10",
"@angular/material": "^20.2.12",
"@angular/platform-browser": "~20.3.10",
"@angular/platform-browser-dynamic": "~20.3.10",
"@angular/router": "~20.3.10",
"@ngrx/component-store": "20.0.0",
"@ngrx/effects": "20.0.0",
"@ngrx/entity": "20.0.0",
"@ngrx/router-store": "20.0.0",
"@ngrx/signals": "20.0.0",
"@ngrx/store": "20.0.0",
"@ngrx/store-devtools": "20.0.0",
"@ngx-pwa/local-storage": "20.0.0",
"@rx-angular/cdk": "20.0.0",
"@rx-angular/template": "20.0.0",
"@videojs/http-streaming": "2.15.0",
"@yangkghjh/videojs-aspect-ratio-panel": "0.0.1",
"angularx-qrcode": "21.0.4",
"artplayer": "5.3.0",
"axios": "1.12.2",
"better-sqlite3": "^12.5.0",
"date-fns": "4.1.0",
"drizzle-orm": "0.44.6",
"electron-builder-sandbox-fix": "1.1.1",
"electron-conf": "1.3.0",
"electron-dl": "4.0.0",
"fix-path": "5.0.0",
"hls.js": "1.6.13",
"iptv-playlist-parser": "github:4gray/iptv-playlist-parser",
"lodash": "4.17.21",
"moment": "2.30.1",
"ngx-indexed-db": "21.0.0",
"ngx-skeleton-loader": "11.3.0",
"rxjs": "7.8.2",
"saxes": "6.0.0",
"semver": "7.7.3",
"uuid": "9.0.0",
"video.js": "8.23.4",
"videojs-contrib-quality-levels": "4.1.0",
"videojs-quality-selector-hls": "1.1.1",
"zone.js": "~0.15.1"
},
"devDependencies": {
"@angular-devkit/core": "~20.3.9",
"@angular-devkit/schematics": "~20.3.9",
"@angular-eslint/builder": "20.5.2",
"@angular-eslint/eslint-plugin": "20.5.2",
"@angular-eslint/eslint-plugin-template": "20.5.2",
"@angular-eslint/schematics": "20.5.2",
"@angular-eslint/template-parser": "20.5.2",
"@angular/build": "~20.3.9",
"@angular/cli": "~20.3.9",
"@angular/common": "20.3.10",
"@angular/compiler": "20.3.10",
"@angular/compiler-cli": "~20.3.10",
"@angular/core": "20.3.10",
"@angular/forms": "20.3.10",
"@angular/language-service": "~20.3.10",
"@angular/platform-browser": "20.3.10",
"@angular/platform-browser-dynamic": "20.3.10",
"@angular/router": "20.3.10",
"@angular/service-worker": "20.3.10",
"@eslint/eslintrc": "3.3.1",
"@eslint/js": "^9.38.0",
"@ngrx/eslint-plugin": "^20.0.0",
"@ngx-translate/core": "16.0.4",
"@ngx-translate/http-loader": "16.0.1",
"@nx/angular": "22.3.3",
"@nx/devkit": "22.3.3",
"@nx/eslint": "22.3.3",
"@nx/eslint-plugin": "22.3.3",
"@nx/jest": "22.3.3",
"@nx/js": "22.3.3",
"@nx/playwright": "22.3.3",
"@nx/web": "22.3.3",
"@nx/workspace": "22.3.3",
"@playwright/test": "^1.36.0",
"@schematics/angular": "~20.1.0",
"@semantic-release/changelog": "6.0.3",
"@semantic-release/git": "10.0.1",
"@semantic-release/npm": "12.0.1",
"@swc-node/register": "~1.9.1",
"@swc/core": "~1.5.7",
"@swc/helpers": "~0.5.11",
"@types/better-sqlite3": "^7.6.12",
"@types/jest": "^30.0.0",
"@types/lodash": "4.17.20",
"@types/mocha": "9.0.0",
"@types/node": "20.19.9",
"@types/uuid": "^10.0.0",
"@types/video.js": "7.3.29",
"@typescript-eslint/eslint-plugin": "^8.46.2",
"@typescript-eslint/parser": "^8.46.2",
"@typescript-eslint/utils": "^8.46.2",
"angular-eslint": "20.5.2",
"conventional-changelog-cli": "5.0.0",
"drizzle-kit": "0.31.5",
"electron": "^39.0.0",
"electron-builder": "^26.0.12",
"electron-playwright-helpers": "1.8.2",
"esbuild": "0.27.0",
"eslint": "^9.8.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-playwright": "^1.6.2",
"globals": "15.9.0",
"jest": "^30.0.2",
"jest-environment-jsdom": "^30.0.2",
"jest-environment-node": "^30.0.2",
"jest-preset-angular": "~15.0.0",
"jest-util": "^30.0.2",
"jsonc-eslint-parser": "^2.1.0",
"ng-mocks": "14.14.0",
"nx": "22.3.3",
"nx-electron": "^21.0.1",
"prettier": "^3.6.2",
"semantic-release": "24.2.9",
"ts-jest": "^29.4.5",
"ts-node": "10.9.2",
"tslib": "^2.8.1",
"typescript": "5.9.3",
"typescript-eslint": "^8.46.2"
}
}