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}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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"
+ }
}