From 5a4cdd848ff785d4067f1b6bcaca13f35ed0347c Mon Sep 17 00:00:00 2001 From: Serkan Date: Wed, 9 Oct 2024 01:18:37 +0300 Subject: [PATCH] feat: added remote-control server code and template --- .gitignore | 1 + electron/main.ts | 2 + electron/remote-control/index.sqrl | 85 ++++++++++++++++++++++++++++++ electron/server.ts | 58 ++++++++++++++++++++ package-lock.json | 13 +++++ package.json | 1 + src/assets/i18n/en.json | 9 +++- 7 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 electron/remote-control/index.sqrl create mode 100644 electron/server.ts diff --git a/.gitignore b/.gitignore index 112be1b34..8632844de 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ preload.js shared/*.js playwright-report .nx +server.js # dependencies /node_modules diff --git a/electron/main.ts b/electron/main.ts index 380c4ccd5..07c5c1aa4 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -4,6 +4,7 @@ import * as path from 'path'; import * as url from 'url'; import { Api } from './api'; import { AppMenu } from './menu'; +import { Server } from './server'; const fixPath = require('fix-path'); const { @@ -120,6 +121,7 @@ try { const menu = new AppMenu(win); Menu.setApplicationMenu(menu.getMenu()); api.setMainWindow(win); + new Server(3000, api); // create hidden window for epg worker createEpgWorkerWindow(); diff --git a/electron/remote-control/index.sqrl b/electron/remote-control/index.sqrl new file mode 100644 index 000000000..233f4ce3e --- /dev/null +++ b/electron/remote-control/index.sqrl @@ -0,0 +1,85 @@ + + + {{it.title}} + + + + + +
+

{{it.headerText}}

+
+ +
+ + +
+ + + + diff --git a/electron/server.ts b/electron/server.ts new file mode 100644 index 000000000..2c55d787f --- /dev/null +++ b/electron/server.ts @@ -0,0 +1,58 @@ +import { IncomingMessage, ServerResponse } from "http"; + +const http = require('http'); +const Sqrl = require('squirrelly'); +const fs = require('fs'); +const path = require('path'); + +export class Server { + /** Server instance */ + server: any; + /** Port number */ + port: number; + /** Api instance */ + api: any; + + /** + * Creates a new server instance + * @param port port number + * @param api application instance + */ + constructor(_port: number, _api: any) { + this.api = _api; + this.port = _port; + this.server = http.createServer(this.requestListener.bind(this)); + this.server.listen(this.port); + } + + async requestListener(request: IncomingMessage, response: ServerResponse) { + const currentPage = request.url?.split('?')[0]?.split('/').splice(-1)[0]; + console.log(this.api.store); + switch (currentPage) { + case '': { + const indexFile = await fs.promises.readFile(path.join(__dirname, './remote-control/', 'index.sqrl'), 'utf-8'); + const renderedHtml = Sqrl.render(indexFile, { + headerText: 'My Dynamic Header', + upChannelText: 'Up Channel', + downChannelText: 'Down Channel', + upChannelUrl: '/upChannel', + downChannelUrl: '/downChannel', + title: 'IPTVNator' + }); + response.writeHead(200, { 'Content-Type': 'text/html' }); + response.end(renderedHtml); + break; + } + case 'upChannel': { + // this.api.upChannel(); + response.writeHead(200, { 'Content-Type': 'text/html' }); + response.end('Up Channel'); + break; + } + default: + response.writeHead(404, { 'Content-Type': 'text/html' }); + response.end('404'); + break; + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index dbd33261b..288dcf614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "node-mpv": "github:4gray/Node-MPV", "rxjs": "7.8.1", "semver": "7.5.2", + "squirrelly": "9.1.0", "uuid": "9.0.0", "video.js": "7.20.3", "videojs-contrib-quality-levels": "2.2.0", @@ -30680,6 +30681,18 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, + "node_modules/squirrelly": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/squirrelly/-/squirrelly-9.1.0.tgz", + "integrity": "sha512-kvjFqb7qzC4gX4lkqSaU8QPvUHhDLMiDpxpz7a66vjTH0JtjLJqAXbPrc7ST61EefuuuW05sne2rjGskunrF2A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" + } + }, "node_modules/ssri": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", diff --git a/package.json b/package.json index 9cd7ff07c..02d9d53b0 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "node-mpv": "github:4gray/Node-MPV", "rxjs": "7.8.1", "semver": "7.5.2", + "squirrelly": "9.1.0", "uuid": "9.0.0", "video.js": "7.20.3", "videojs-contrib-quality-levels": "2.2.0", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index b87b9840a..50690f96b 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -283,5 +283,12 @@ "STREAM_URL_COPIED": "Stream URL copied to clipboard", "COPY_STREAM_URL": "Copy Stream URL" }, - "INFORMATION": "Information" + "INFORMATION": "Information", + "REMOTE_CONTROL": { + "TITLE": "Remote control", + "UP_CHANNEL": "Up channel", + "DOWN_CHANNEL": "Down channel", + "HEADER": "IPTVNator Remote Control", + "FOOTER": "IPTVNator Remote Control" + } }