From a9b69aa9dc34fcec50848d0bcc491b4a52df2c7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Lachapelle?= Date: Mon, 6 Apr 2026 12:46:38 -0400 Subject: [PATCH] add copyurl --- package-lock.json | 37 +++++++++++++++++-- .../channel-tile/channel-tile.component.html | 7 +++- .../channel-tile/channel-tile.component.ts | 11 ++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3db7594..bf8a4eab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-tv", - "version": "1.8.3", + "version": "1.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-tv", - "version": "1.8.3", + "version": "1.9.1", "dependencies": { "@angular/animations": "^17.3.0", "@angular/cdk": "^17.3.10", @@ -277,6 +277,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.12.tgz", "integrity": "sha512-9hsdWF4gRRcVJtPcCcYLaX1CIyM9wUu6r+xRl6zU5hq8qhl35hig6ounz7CXFAzLf0WDBdM16bPHouVGaG76lg==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -291,6 +292,7 @@ "version": "17.3.10", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.10.tgz", "integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -341,6 +343,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.12.tgz", "integrity": "sha512-vabJzvrx76XXFrm1RJZ6o/CyG32piTB/1sfFfKHdlH1QrmArb8It4gyk9oEjZ1IkAD0HvBWlfWmn+T6Vx3pdUw==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -356,6 +359,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.12.tgz", "integrity": "sha512-vwI8oOL/gM+wPnptOVeBbMfZYwzRxQsovojZf+Zol9szl0k3SZ3FycWlxxXZGFu3VIEfrP6pXplTmyODS/Lt1w==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -375,6 +379,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.12.tgz", "integrity": "sha512-1F8M7nWfChzurb7obbvuE7mJXlHtY1UG58pcwcomVtpPb+kPavgAO8OEvJHYBMV+bzSxkXt5UIwL9lt9jHUxZA==", + "peer": true, "dependencies": { "@babel/core": "7.23.9", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -444,6 +449,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.12.tgz", "integrity": "sha512-MuFt5yKi161JmauUta4Dh0m8ofwoq6Ino+KoOtkYMBGsSx+A7dSm+DUxxNwdj7+DNyg3LjVGCFgBFnq4g8z06A==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -459,6 +465,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.12.tgz", "integrity": "sha512-tV6r12Q3yEUlXwpVko4E+XscunTIpPkLbaiDn/MTL3Vxi2LZnsLgHyd/i38HaHN+e/H3B0a1ToSOhV5wf3ay4Q==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -476,6 +483,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.3.12.tgz", "integrity": "sha512-b7J7zY/CgJhFVPtmu/pEjefU5SHuTy7lQgX6kTrJPaUSJ5i578R17xr4SwrWe7G4jzQwO6GXZZd17a62uNRyOA==", + "peer": true, "dependencies": { "@babel/core": "7.23.9", "@types/babel__core": "7.20.5", @@ -605,6 +613,7 @@ "version": "17.3.12", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.12.tgz", "integrity": "sha512-DYY04ptWh/ulMHzd+y52WCE8QnEYGeIiW3hEIFjCN8z0kbIdFdUtEB0IK5vjNL3ejyhUmphcpeT5PYf3YXtqWQ==", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -680,6 +689,7 @@ "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -4109,6 +4119,7 @@ "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -4914,6 +4925,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", "dev": true, + "peer": true, "dependencies": { "undici-types": "~6.11.1" } @@ -5196,6 +5208,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5269,6 +5282,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5718,6 +5732,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001640", "electron-to-chromium": "^1.4.820", @@ -8556,7 +8571,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jest-worker": { "version": "27.5.1", @@ -8695,6 +8711,7 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", "dev": true, + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -8934,6 +8951,7 @@ "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -10671,6 +10689,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -11342,6 +11361,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -11382,6 +11402,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dev": true, + "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12232,6 +12253,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12284,6 +12306,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12451,6 +12474,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12683,6 +12707,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", "dev": true, + "peer": true, "dependencies": { "esbuild": "^0.19.3", "postcss": "^8.4.35", @@ -13184,6 +13209,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", @@ -13259,6 +13285,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, + "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -13385,6 +13412,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13654,7 +13682,8 @@ "node_modules/zone.js": { "version": "0.14.8", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.8.tgz", - "integrity": "sha512-48uh7MnVp4/OQDuCHeFdXw5d8xwPqFTvlHgPJ1LBFb5GaustLSZV+YUH0to5ygNyGpqTsjpbpt141U/j3pCfqQ==" + "integrity": "sha512-48uh7MnVp4/OQDuCHeFdXw5d8xwPqFTvlHgPJ1LBFb5GaustLSZV+YUH0to5ygNyGpqTsjpbpt141U/j3pCfqQ==", + "peer": true } } } diff --git a/src/app/channel-tile/channel-tile.component.html b/src/app/channel-tile/channel-tile.component.html index 3d6a1b66..0742023b 100644 --- a/src/app/channel-tile/channel-tile.component.html +++ b/src/app/channel-tile/channel-tile.component.html @@ -1,5 +1,5 @@ -
@@ -57,6 +57,9 @@ + \ No newline at end of file diff --git a/src/app/channel-tile/channel-tile.component.ts b/src/app/channel-tile/channel-tile.component.ts index c0ebe09b..3614a4e2 100644 --- a/src/app/channel-tile/channel-tile.component.ts +++ b/src/app/channel-tile/channel-tile.component.ts @@ -30,6 +30,7 @@ import { getDateFormatted, getExtension, sanitizeFileName } from "../utils"; import { NodeType, fromMediaType } from "../models/nodeType"; import { ViewMode } from "../models/viewMode"; +import { writeText } from "@tauri-apps/plugin-clipboard-manager"; @Component({ selector: "app-channel-tile", @@ -435,6 +436,16 @@ export class ChannelTileComponent implements OnDestroy, AfterViewInit { ); } + async copyURL() { + try { + await writeText(this.channel?.url ?? ""); + this.error.success("Copied channel URL"); + } + catch (e) { + this.error.handleError(e); + } + } + ngOnDestroy() { this.subscriptions.forEach((x) => x.unsubscribe()); }