mirror of
https://github.com/Qortal/q-tube.git
synced 2025-12-12 15:52:59 +00:00
changes
This commit is contained in:
365
package-lock.json
generated
365
package-lock.json
generated
@@ -19,6 +19,7 @@
|
||||
"dompurify": "^3.2.3",
|
||||
"jotai": "^2.12.4",
|
||||
"localforage": "^1.10.0",
|
||||
"mediainfo.js": "^0.3.5",
|
||||
"moment": "^2.30.1",
|
||||
"qapp-core": "^1.0.29",
|
||||
"quill": "^2.0.2",
|
||||
@@ -34,10 +35,10 @@
|
||||
"react-router-dom": "^7.1.1",
|
||||
"react-toastify": "^11.0.2",
|
||||
"redux-persist": "^6.0.0",
|
||||
"short-unique-id": "^5.2.0",
|
||||
"ts-key-enum": "^2.0.13"
|
||||
"short-unique-id": "^5.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.0.0",
|
||||
"@types/react": "^19.0.2",
|
||||
"@types/react-dom": "^19.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^8.18.2",
|
||||
@@ -48,7 +49,8 @@
|
||||
"eslint-plugin-react-refresh": "^0.4.16",
|
||||
"prettier": "^3.4.2",
|
||||
"typescript": "^5.7.2",
|
||||
"vite": "^6.3.5"
|
||||
"vite": "^6.3.5",
|
||||
"vite-plugin-static-copy": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
@@ -1899,6 +1901,16 @@
|
||||
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz",
|
||||
"integrity": "sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~7.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/parse-json": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
|
||||
@@ -2191,11 +2203,19 @@
|
||||
"url": "https://github.com/sponsors/epoberezkin"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
@@ -2206,6 +2226,20 @@
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
@@ -2267,6 +2301,19 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/binary-extensions": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/bloom-filters": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/bloom-filters/-/bloom-filters-3.0.4.tgz",
|
||||
@@ -2454,6 +2501,58 @@
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
||||
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.10.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar/node_modules/glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"is-glob": "^4.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
||||
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.1",
|
||||
"wrap-ansi": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/clone": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
|
||||
@@ -2474,7 +2573,6 @@
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
@@ -2485,8 +2583,7 @@
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"node_modules/compressorjs": {
|
||||
"version": "1.2.1",
|
||||
@@ -2688,6 +2785,12 @@
|
||||
"integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/error-ex": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||
@@ -2768,7 +2871,6 @@
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@@ -3142,6 +3244,21 @@
|
||||
"integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fs-extra": {
|
||||
"version": "11.3.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
|
||||
"integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.14"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
@@ -3182,6 +3299,15 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-caller-file": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": "6.* || 8.* || >= 10.*"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.2.6",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz",
|
||||
@@ -3244,6 +3370,13 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/graphemer": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
|
||||
@@ -3405,6 +3538,19 @@
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
|
||||
},
|
||||
"node_modules/is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-blob": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz",
|
||||
@@ -3476,6 +3622,15 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-glob": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
||||
@@ -3604,6 +3759,19 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/keyv": {
|
||||
"version": "4.5.4",
|
||||
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
|
||||
@@ -3721,6 +3889,21 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mediainfo.js": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/mediainfo.js/-/mediainfo.js-0.3.5.tgz",
|
||||
"integrity": "sha512-frLJzKOoAUC0sbPzmg9VOR+WFbNj5CarbTuOzXeH9cOl33haU/CGcyXUTWK00HPXCVS2N5eT0o0dirVxaPIOIw==",
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"yargs": "^17.7.2"
|
||||
},
|
||||
"bin": {
|
||||
"mediainfo.js": "dist/esm/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/merge2": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||
@@ -3802,6 +3985,16 @@
|
||||
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
@@ -3880,6 +4073,19 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/p-map": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
|
||||
"integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/parchment": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz",
|
||||
@@ -4410,6 +4616,19 @@
|
||||
"react-dom": ">=16.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/redux": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
|
||||
@@ -4453,6 +4672,15 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/reselect": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
|
||||
@@ -4663,6 +4891,32 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/strip-ansi": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-regex": "^5.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/strip-json-comments": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
@@ -4772,11 +5026,6 @@
|
||||
"typescript": ">=4.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ts-key-enum": {
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.13.tgz",
|
||||
"integrity": "sha512-zixs6j8+NhzazLUQ1SiFrlo1EFWG/DbqLuUGcWWZ5zhwjRT7kbi1hBlofxdqel+h28zrby2It5TrOyKp04kvqw=="
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
@@ -4812,6 +5061,23 @@
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
|
||||
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
|
||||
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
|
||||
@@ -4934,6 +5200,26 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/vite-plugin-static-copy": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.0.0.tgz",
|
||||
"integrity": "sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chokidar": "^3.5.3",
|
||||
"fs-extra": "^11.3.0",
|
||||
"p-map": "^7.0.3",
|
||||
"picocolors": "^1.1.1",
|
||||
"tinyglobby": "^0.2.13"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.0.0 || >=20.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": "^5.0.0 || ^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vite/node_modules/fdir": {
|
||||
"version": "6.4.4",
|
||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
|
||||
@@ -4986,6 +5272,23 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/xxhashjs": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
||||
@@ -4994,6 +5297,15 @@
|
||||
"cuint": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/y18n": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
@@ -5014,6 +5326,33 @@
|
||||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/yargs": {
|
||||
"version": "17.7.2",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
||||
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cliui": "^8.0.1",
|
||||
"escalade": "^3.1.1",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"require-directory": "^2.1.1",
|
||||
"string-width": "^4.2.3",
|
||||
"y18n": "^5.0.5",
|
||||
"yargs-parser": "^21.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/yargs-parser": {
|
||||
"version": "21.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
||||
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/yocto-queue": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||
|
||||
10
package.json
10
package.json
@@ -5,7 +5,7 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc && vite build",
|
||||
"build": "vite build",
|
||||
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
@@ -21,6 +21,7 @@
|
||||
"dompurify": "^3.2.3",
|
||||
"jotai": "^2.12.4",
|
||||
"localforage": "^1.10.0",
|
||||
"mediainfo.js": "^0.3.5",
|
||||
"moment": "^2.30.1",
|
||||
"qapp-core": "^1.0.29",
|
||||
"quill": "^2.0.2",
|
||||
@@ -36,10 +37,10 @@
|
||||
"react-router-dom": "^7.1.1",
|
||||
"react-toastify": "^11.0.2",
|
||||
"redux-persist": "^6.0.0",
|
||||
"short-unique-id": "^5.2.0",
|
||||
"ts-key-enum": "^2.0.13"
|
||||
"short-unique-id": "^5.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.0.0",
|
||||
"@types/react": "^19.0.2",
|
||||
"@types/react-dom": "^19.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^8.18.2",
|
||||
@@ -50,6 +51,7 @@
|
||||
"eslint-plugin-react-refresh": "^0.4.16",
|
||||
"prettier": "^3.4.2",
|
||||
"typescript": "^5.7.2",
|
||||
"vite": "^6.3.5"
|
||||
"vite": "^6.3.5",
|
||||
"vite-plugin-static-copy": "^3.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import { GlobalProvider } from 'qapp-core'
|
||||
import { useSelector } from 'react-redux';
|
||||
import { RootState } from './state/store';
|
||||
import { useLocation, useNavigate } from 'react-router-dom';
|
||||
|
||||
export const QappCoreWrapper = ({children}) => {
|
||||
const { user } = useSelector((state: RootState) => state.auth);
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
|
||||
return (
|
||||
<GlobalProvider
|
||||
config={{
|
||||
@@ -17,6 +21,8 @@ export const QappCoreWrapper = ({children}) => {
|
||||
publicSalt: "usVbeM9YpjGCbLrTcc78YJS0ap1AxDkHAOMZrp3+wDY=",
|
||||
appName: "Q-Tube",
|
||||
}}
|
||||
navigate={navigate}
|
||||
location={location}
|
||||
>
|
||||
{children}
|
||||
</GlobalProvider>
|
||||
|
||||
@@ -53,6 +53,7 @@ import {
|
||||
NewCrowdfundTitle,
|
||||
TimesIcon,
|
||||
} from "./EditVideo-styles.tsx";
|
||||
import { usePublish } from "qapp-core";
|
||||
|
||||
const uid = new ShortUniqueId();
|
||||
const shortuid = new ShortUniqueId({ length: 5 });
|
||||
@@ -71,7 +72,8 @@ export const EditVideo = () => {
|
||||
const [isOpenMultiplePublish, setIsOpenMultiplePublish] = useState(false);
|
||||
const [videoPropertiesToSetToRedux, setVideoPropertiesToSetToRedux] =
|
||||
useState(null);
|
||||
|
||||
const publishFromLibrary = usePublish()
|
||||
|
||||
const [title, setTitle] = useState<string>("");
|
||||
const [description, setDescription] = useState<string>("");
|
||||
const [coverImage, setCoverImage] = useState<string>("");
|
||||
@@ -318,30 +320,34 @@ export const EditVideo = () => {
|
||||
action: "PUBLISH_MULTIPLE_QDN_RESOURCES",
|
||||
resources: [...listOfPublishes],
|
||||
};
|
||||
setPublishes(multiplePublish);
|
||||
setIsOpenMultiplePublish(true);
|
||||
// setPublishes(multiplePublish);
|
||||
// setIsOpenMultiplePublish(true);
|
||||
setVideoPropertiesToSetToRedux({
|
||||
...editVideoProperties,
|
||||
...videoObject,
|
||||
});
|
||||
const success = await publishFromLibrary.publishMultipleResources(listOfPublishes)
|
||||
console.log('success', success)
|
||||
setIsOpenMultiplePublish(false);
|
||||
const clonedCopy = structuredClone({
|
||||
...editVideoProperties,
|
||||
...videoObject,
|
||||
});
|
||||
dispatch(updateVideo(clonedCopy));
|
||||
dispatch(updateInHashMap(clonedCopy));
|
||||
dispatch(
|
||||
setNotification({
|
||||
msg: "Video updated",
|
||||
alertType: "success",
|
||||
})
|
||||
);
|
||||
onClose();
|
||||
} catch (error: any) {
|
||||
let notificationObj: any = null;
|
||||
if (typeof error === "string") {
|
||||
notificationObj = {
|
||||
msg: error || "Failed to publish update",
|
||||
alertType: "error",
|
||||
};
|
||||
} else if (typeof error?.error === "string") {
|
||||
notificationObj = {
|
||||
msg: error?.error || "Failed to publish update",
|
||||
alertType: "error",
|
||||
};
|
||||
} else {
|
||||
notificationObj = {
|
||||
notificationObj = {
|
||||
msg: error?.message || "Failed to publish update",
|
||||
alertType: "error",
|
||||
};
|
||||
}
|
||||
if (!notificationObj) return;
|
||||
dispatch(setNotification(notificationObj));
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ import React, { useCallback, useEffect, useState, useRef } from "react";
|
||||
import { CircleSVG } from "../../../assets/svgs/CircleSVG.tsx";
|
||||
import { EmptyCircleSVG } from "../../../assets/svgs/EmptyCircleSVG.tsx";
|
||||
import { styled } from "@mui/system";
|
||||
import { useAtomValue } from "jotai";
|
||||
import { usePublish } from "qapp-core";
|
||||
|
||||
interface Publish {
|
||||
resources: any[];
|
||||
@@ -30,6 +32,7 @@ export const MultiplePublish = ({
|
||||
onError,
|
||||
}: MultiplePublishProps) => {
|
||||
const theme = useTheme();
|
||||
const publishFromLibrary = usePublish()
|
||||
const listOfSuccessfulPublishesRef = useRef([]);
|
||||
const [listOfSuccessfulPublishes, setListOfSuccessfulPublishes] = useState<
|
||||
any[]
|
||||
@@ -41,7 +44,7 @@ export const MultiplePublish = ({
|
||||
const publish = useCallback(async (pub: any) => {
|
||||
const lengthOfResources = pub?.resources?.length;
|
||||
const lengthOfTimeout = lengthOfResources * 1200000; // Time out in QR, Seconds = 20 Minutes
|
||||
return await qortalRequestWithTimeout(pub, lengthOfTimeout);
|
||||
return await publishFromLibrary.publishMultipleResources(pub.resources)
|
||||
}, []);
|
||||
const [isPublishing, setIsPublishing] = useState(true);
|
||||
|
||||
@@ -123,9 +126,12 @@ export const MultiplePublish = ({
|
||||
const unpublished = listOfUnsuccessfulPublishes.map(
|
||||
item => item?.identifier
|
||||
);
|
||||
const key = `${publish?.service}-${publish?.name}-${publish?.identifier}`
|
||||
|
||||
return (
|
||||
<Box key={key}>
|
||||
<Box
|
||||
key={publish?.identifier}
|
||||
|
||||
sx={{
|
||||
display: "flex",
|
||||
gap: "20px",
|
||||
@@ -154,6 +160,8 @@ export const MultiplePublish = ({
|
||||
<CircularProgress size={16} color="secondary" />
|
||||
)}
|
||||
</Box>
|
||||
|
||||
</Box>
|
||||
);
|
||||
})}
|
||||
{!isPublishing && listOfUnsuccessfulPublishes.length > 0 && (
|
||||
|
||||
@@ -482,7 +482,7 @@ export const PublishVideo = ({
|
||||
throw new Error("cannot get playlist data");
|
||||
}
|
||||
}
|
||||
|
||||
console.log('listOfPublishes', listOfPublishes)
|
||||
const multiplePublish = {
|
||||
action: "PUBLISH_MULTIPLE_QDN_RESOURCES",
|
||||
resources: [...listOfPublishes],
|
||||
|
||||
@@ -4,7 +4,7 @@ import { useSignalEffect, useSignals } from "@preact/signals-react/runtime";
|
||||
import { useEffect } from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { Key } from "ts-key-enum";
|
||||
// import { Key } from "ts-key-enum";
|
||||
import { setVideoPlaying } from "../../../../state/features/globalSlice.ts";
|
||||
import { RootState } from "../../../../state/store.ts";
|
||||
import { useVideoPlayerState } from "../VideoPlayer-State.ts";
|
||||
@@ -229,110 +229,110 @@ export const useVideoControlsState = (
|
||||
e.preventDefault();
|
||||
// console.log("hotkey is: ", '"' + e.key + '"');
|
||||
|
||||
switch (e.key) {
|
||||
case "o":
|
||||
toggleObjectFit();
|
||||
break;
|
||||
case "c":
|
||||
toggleAlwaysShowControls();
|
||||
break;
|
||||
case Key.Add:
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
case "+":
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
case ">":
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
// switch (e.key) {
|
||||
// case "o":
|
||||
// toggleObjectFit();
|
||||
// break;
|
||||
// case "c":
|
||||
// toggleAlwaysShowControls();
|
||||
// break;
|
||||
// case Key.Add:
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
// case "+":
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
// case ">":
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
|
||||
case Key.Subtract:
|
||||
decreaseSpeed();
|
||||
break;
|
||||
case "-":
|
||||
decreaseSpeed();
|
||||
break;
|
||||
case "<":
|
||||
decreaseSpeed();
|
||||
break;
|
||||
// case Key.Subtract:
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
// case "-":
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
// case "<":
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
|
||||
case Key.ArrowLeft:
|
||||
{
|
||||
if (e.shiftKey) setProgressRelative(-300);
|
||||
else if (e.ctrlKey) setProgressRelative(-60);
|
||||
else if (e.altKey) setProgressRelative(-10);
|
||||
else setProgressRelative(-5);
|
||||
}
|
||||
break;
|
||||
// case Key.ArrowLeft:
|
||||
// {
|
||||
// if (e.shiftKey) setProgressRelative(-300);
|
||||
// else if (e.ctrlKey) setProgressRelative(-60);
|
||||
// else if (e.altKey) setProgressRelative(-10);
|
||||
// else setProgressRelative(-5);
|
||||
// }
|
||||
// break;
|
||||
|
||||
case Key.ArrowRight:
|
||||
{
|
||||
if (e.shiftKey) setProgressRelative(300);
|
||||
else if (e.ctrlKey) setProgressRelative(60);
|
||||
else if (e.altKey) setProgressRelative(10);
|
||||
else setProgressRelative(5);
|
||||
}
|
||||
break;
|
||||
// case Key.ArrowRight:
|
||||
// {
|
||||
// if (e.shiftKey) setProgressRelative(300);
|
||||
// else if (e.ctrlKey) setProgressRelative(60);
|
||||
// else if (e.altKey) setProgressRelative(10);
|
||||
// else setProgressRelative(5);
|
||||
// }
|
||||
// break;
|
||||
|
||||
case Key.ArrowDown:
|
||||
changeVolume(-0.05);
|
||||
break;
|
||||
case Key.ArrowUp:
|
||||
changeVolume(0.05);
|
||||
break;
|
||||
case " ":
|
||||
togglePlay();
|
||||
break;
|
||||
case "m":
|
||||
toggleMute();
|
||||
break;
|
||||
// case Key.ArrowDown:
|
||||
// changeVolume(-0.05);
|
||||
// break;
|
||||
// case Key.ArrowUp:
|
||||
// changeVolume(0.05);
|
||||
// break;
|
||||
// case " ":
|
||||
// togglePlay();
|
||||
// break;
|
||||
// case "m":
|
||||
// toggleMute();
|
||||
// break;
|
||||
|
||||
case "f":
|
||||
toggleFullscreen();
|
||||
break;
|
||||
case Key.Escape:
|
||||
exitFullscreen();
|
||||
break;
|
||||
// case "f":
|
||||
// toggleFullscreen();
|
||||
// break;
|
||||
// case Key.Escape:
|
||||
// exitFullscreen();
|
||||
// break;
|
||||
|
||||
case "r":
|
||||
reloadVideo();
|
||||
break;
|
||||
// case "r":
|
||||
// reloadVideo();
|
||||
// break;
|
||||
|
||||
case "p":
|
||||
togglePictureInPicture();
|
||||
break;
|
||||
// case "p":
|
||||
// togglePictureInPicture();
|
||||
// break;
|
||||
|
||||
case "0":
|
||||
setProgressAbsolute(0);
|
||||
break;
|
||||
case "1":
|
||||
setProgressAbsolute(10);
|
||||
break;
|
||||
case "2":
|
||||
setProgressAbsolute(20);
|
||||
break;
|
||||
case "3":
|
||||
setProgressAbsolute(30);
|
||||
break;
|
||||
case "4":
|
||||
setProgressAbsolute(40);
|
||||
break;
|
||||
case "5":
|
||||
setProgressAbsolute(50);
|
||||
break;
|
||||
case "6":
|
||||
setProgressAbsolute(60);
|
||||
break;
|
||||
case "7":
|
||||
setProgressAbsolute(70);
|
||||
break;
|
||||
case "8":
|
||||
setProgressAbsolute(80);
|
||||
break;
|
||||
case "9":
|
||||
setProgressAbsolute(90);
|
||||
break;
|
||||
}
|
||||
// case "0":
|
||||
// setProgressAbsolute(0);
|
||||
// break;
|
||||
// case "1":
|
||||
// setProgressAbsolute(10);
|
||||
// break;
|
||||
// case "2":
|
||||
// setProgressAbsolute(20);
|
||||
// break;
|
||||
// case "3":
|
||||
// setProgressAbsolute(30);
|
||||
// break;
|
||||
// case "4":
|
||||
// setProgressAbsolute(40);
|
||||
// break;
|
||||
// case "5":
|
||||
// setProgressAbsolute(50);
|
||||
// break;
|
||||
// case "6":
|
||||
// setProgressAbsolute(60);
|
||||
// break;
|
||||
// case "7":
|
||||
// setProgressAbsolute(70);
|
||||
// break;
|
||||
// case "8":
|
||||
// setProgressAbsolute(80);
|
||||
// break;
|
||||
// case "9":
|
||||
// setProgressAbsolute(90);
|
||||
// break;
|
||||
// }
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import CSS from "csstype";
|
||||
import { forwardRef } from "react";
|
||||
import { forwardRef, useCallback, useMemo, useRef } from "react";
|
||||
import useIdleTimeout from "../../../hooks/useIdleTimeout.ts";
|
||||
import { LoadingVideo } from "./Components/LoadingVideo.tsx";
|
||||
import { useContextData, VideoContext } from "./Components/VideoContext.ts";
|
||||
import { VideoControlsBar } from "./Components/VideoControlsBar.tsx";
|
||||
import { VideoContainer, VideoElement } from "./VideoPlayer-styles.ts";
|
||||
|
||||
import {VideoPlayer as QappVideoPlayer, Service, TimelineAction} from 'qapp-core'
|
||||
import { Box } from "@mui/material";
|
||||
export interface VideoStyles {
|
||||
videoContainer?: CSS.Properties;
|
||||
video?: CSS.Properties;
|
||||
@@ -35,91 +36,116 @@ export type videoRefType = {
|
||||
};
|
||||
export const VideoPlayer = forwardRef<videoRefType, VideoPlayerProps>(
|
||||
(props: VideoPlayerProps, ref) => {
|
||||
const contextData = useContextData(props, ref);
|
||||
const videoRef = useRef(null)
|
||||
// const contextData = useContextData(props, ref);
|
||||
|
||||
const {
|
||||
keyboardShortcuts,
|
||||
from,
|
||||
videoStyles,
|
||||
containerRef,
|
||||
resourceStatus,
|
||||
src,
|
||||
togglePlay,
|
||||
identifier,
|
||||
videoRef,
|
||||
poster,
|
||||
updateProgress,
|
||||
autoplay,
|
||||
handleEnded,
|
||||
handleCanPlay,
|
||||
startPlay,
|
||||
videoObjectFit,
|
||||
showControlsFullScreen,
|
||||
isFullscreen,
|
||||
alwaysShowControls,
|
||||
} = contextData;
|
||||
// const {
|
||||
// keyboardShortcuts,
|
||||
// from,
|
||||
// videoStyles,
|
||||
// containerRef,
|
||||
// resourceStatus,
|
||||
// src,
|
||||
// togglePlay,
|
||||
// identifier,
|
||||
// videoRef,
|
||||
// poster,
|
||||
// updateProgress,
|
||||
// autoplay,
|
||||
// handleEnded,
|
||||
// handleCanPlay,
|
||||
// startPlay,
|
||||
// videoObjectFit,
|
||||
// showControlsFullScreen,
|
||||
// isFullscreen,
|
||||
// alwaysShowControls,
|
||||
// } = contextData;
|
||||
|
||||
const showControls =
|
||||
!isFullscreen.value ||
|
||||
(isFullscreen.value && showControlsFullScreen.value) ||
|
||||
alwaysShowControls.value;
|
||||
// const showControls =
|
||||
// !isFullscreen.value ||
|
||||
// (isFullscreen.value && showControlsFullScreen.value) ||
|
||||
// alwaysShowControls.value;
|
||||
|
||||
const idleTime = 5000; // Time in milliseconds
|
||||
useIdleTimeout({
|
||||
onIdle: () => (showControlsFullScreen.value = false),
|
||||
onActive: () => (showControlsFullScreen.value = true),
|
||||
idleTime,
|
||||
});
|
||||
// const idleTime = 5000; // Time in milliseconds
|
||||
// useIdleTimeout({
|
||||
// onIdle: () => (showControlsFullScreen.value = false),
|
||||
// onActive: () => (showControlsFullScreen.value = true),
|
||||
// idleTime,
|
||||
// });
|
||||
|
||||
const timelineActions: TimelineAction[] = useMemo(()=> {
|
||||
return [{
|
||||
label: "Skip intro",
|
||||
type: 'SEEK',
|
||||
duration: 10,
|
||||
time: 60,
|
||||
seekToTime: 3600,
|
||||
placement: 'BOTTOM-RIGHT'
|
||||
}, {
|
||||
label: "Skip intro",
|
||||
type: 'SEEK',
|
||||
duration: 10,
|
||||
time: 3610,
|
||||
seekToTime: 7200,
|
||||
placement: 'TOP-RIGHT'
|
||||
}]
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<VideoContext.Provider value={contextData}>
|
||||
<VideoContainer
|
||||
tabIndex={0}
|
||||
onKeyDown={keyboardShortcuts}
|
||||
style={{
|
||||
padding: from === "create" ? "8px" : 0,
|
||||
cursor:
|
||||
!showControlsFullScreen.value && isFullscreen.value
|
||||
? "none"
|
||||
: "auto",
|
||||
...videoStyles?.videoContainer,
|
||||
}}
|
||||
onMouseEnter={e => {
|
||||
showControlsFullScreen.value = true;
|
||||
}}
|
||||
onMouseLeave={e => {
|
||||
showControlsFullScreen.value = false;
|
||||
}}
|
||||
ref={containerRef}
|
||||
>
|
||||
<LoadingVideo />
|
||||
<VideoElement
|
||||
id={identifier}
|
||||
ref={videoRef}
|
||||
src={
|
||||
resourceStatus?.status === "READY" && startPlay.value ? src : null
|
||||
}
|
||||
poster={startPlay.value ? "" : poster}
|
||||
onTimeUpdate={updateProgress}
|
||||
autoPlay={autoplay}
|
||||
onClick={() => togglePlay()}
|
||||
onEnded={handleEnded}
|
||||
// onLoadedMetadata={handleLoadedMetadata}
|
||||
onCanPlay={handleCanPlay}
|
||||
preload="metadata"
|
||||
style={{
|
||||
...videoStyles?.video,
|
||||
objectFit: videoObjectFit.value,
|
||||
backgroundColor: "#000000",
|
||||
height:
|
||||
isFullscreen.value && showControls
|
||||
? "calc(100vh - 40px)"
|
||||
: "100%",
|
||||
}}
|
||||
/>
|
||||
{showControls && <VideoControlsBar />}
|
||||
</VideoContainer>
|
||||
</VideoContext.Provider>
|
||||
// <VideoContext.Provider value={contextData}>
|
||||
<Box sx={{
|
||||
width: '100%',
|
||||
height: '70vh'
|
||||
}}>
|
||||
<QappVideoPlayer timelineActions={timelineActions} poster={props.poster} videoRef={videoRef} qortalVideoResource={{name: props.name, service: props.service as Service, identifier: props.identifier}} />
|
||||
</Box>
|
||||
// <VideoContainer
|
||||
// tabIndex={0}
|
||||
// onKeyDown={keyboardShortcuts}
|
||||
// style={{
|
||||
// padding: from === "create" ? "8px" : 0,
|
||||
// cursor:
|
||||
// !showControlsFullScreen.value && isFullscreen.value
|
||||
// ? "none"
|
||||
// : "auto",
|
||||
// ...videoStyles?.videoContainer,
|
||||
// }}
|
||||
// onMouseEnter={e => {
|
||||
// showControlsFullScreen.value = true;
|
||||
// }}
|
||||
// onMouseLeave={e => {
|
||||
// showControlsFullScreen.value = false;
|
||||
// }}
|
||||
// ref={containerRef}
|
||||
// >
|
||||
// <LoadingVideo />
|
||||
// <VideoElement
|
||||
// id={identifier}
|
||||
// ref={videoRef}
|
||||
// src={
|
||||
// resourceStatus?.status === "READY" && startPlay.value ? src : null
|
||||
// }
|
||||
// poster={startPlay.value ? "" : poster}
|
||||
// onTimeUpdate={updateProgress}
|
||||
// autoPlay={autoplay}
|
||||
// onClick={() => togglePlay()}
|
||||
// onEnded={handleEnded}
|
||||
// // onLoadedMetadata={handleLoadedMetadata}
|
||||
// onCanPlay={handleCanPlay}
|
||||
// preload="metadata"
|
||||
// style={{
|
||||
// ...videoStyles?.video,
|
||||
// objectFit: videoObjectFit.value,
|
||||
// backgroundColor: "#000000",
|
||||
// height:
|
||||
// isFullscreen.value && showControls
|
||||
// ? "calc(100vh - 40px)"
|
||||
// : "100%",
|
||||
// }}
|
||||
// />
|
||||
// {showControls && <VideoControlsBar />}
|
||||
// </VideoContainer>
|
||||
// </VideoContext.Provider>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -21,7 +21,7 @@ import {
|
||||
import { styled } from "@mui/system";
|
||||
import React, { useContext, useEffect, useMemo, useRef, useState } from "react";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { Key } from "ts-key-enum";
|
||||
// import { Key } from "ts-key-enum";
|
||||
import { setVideoPlaying } from "../../../state/features/globalSlice.ts";
|
||||
import { RootState } from "../../../state/store.ts";
|
||||
import { formatTime } from "../../../utils/numberFunctions.ts";
|
||||
@@ -346,103 +346,103 @@ export const VideoPlayerGlobal: React.FC<VideoPlayerProps> = ({
|
||||
const keyboardShortcutsDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
||||
e.preventDefault();
|
||||
|
||||
switch (e.key) {
|
||||
case Key.Add:
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
case "+":
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
case ">":
|
||||
increaseSpeed(false);
|
||||
break;
|
||||
// switch (e.key) {
|
||||
// case Key.Add:
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
// case "+":
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
// case ">":
|
||||
// increaseSpeed(false);
|
||||
// break;
|
||||
|
||||
case Key.Subtract:
|
||||
decreaseSpeed();
|
||||
break;
|
||||
case "-":
|
||||
decreaseSpeed();
|
||||
break;
|
||||
case "<":
|
||||
decreaseSpeed();
|
||||
break;
|
||||
// case Key.Subtract:
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
// case "-":
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
// case "<":
|
||||
// decreaseSpeed();
|
||||
// break;
|
||||
|
||||
case Key.ArrowLeft:
|
||||
{
|
||||
if (e.shiftKey) setProgressRelative(-300);
|
||||
else if (e.ctrlKey) setProgressRelative(-60);
|
||||
else if (e.altKey) setProgressRelative(-10);
|
||||
else setProgressRelative(-5);
|
||||
}
|
||||
break;
|
||||
// case Key.ArrowLeft:
|
||||
// {
|
||||
// if (e.shiftKey) setProgressRelative(-300);
|
||||
// else if (e.ctrlKey) setProgressRelative(-60);
|
||||
// else if (e.altKey) setProgressRelative(-10);
|
||||
// else setProgressRelative(-5);
|
||||
// }
|
||||
// break;
|
||||
|
||||
case Key.ArrowRight:
|
||||
{
|
||||
if (e.shiftKey) setProgressRelative(300);
|
||||
else if (e.ctrlKey) setProgressRelative(60);
|
||||
else if (e.altKey) setProgressRelative(10);
|
||||
else setProgressRelative(5);
|
||||
}
|
||||
break;
|
||||
// case Key.ArrowRight:
|
||||
// {
|
||||
// if (e.shiftKey) setProgressRelative(300);
|
||||
// else if (e.ctrlKey) setProgressRelative(60);
|
||||
// else if (e.altKey) setProgressRelative(10);
|
||||
// else setProgressRelative(5);
|
||||
// }
|
||||
// break;
|
||||
|
||||
case Key.ArrowDown:
|
||||
changeVolume(-0.05);
|
||||
break;
|
||||
case Key.ArrowUp:
|
||||
changeVolume(0.05);
|
||||
break;
|
||||
}
|
||||
// case Key.ArrowDown:
|
||||
// changeVolume(-0.05);
|
||||
// break;
|
||||
// case Key.ArrowUp:
|
||||
// changeVolume(0.05);
|
||||
// break;
|
||||
// }
|
||||
};
|
||||
|
||||
const keyboardShortcutsUp = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
||||
e.preventDefault();
|
||||
|
||||
switch (e.key) {
|
||||
case " ":
|
||||
togglePlay();
|
||||
break;
|
||||
case "m":
|
||||
toggleMute();
|
||||
break;
|
||||
// switch (e.key) {
|
||||
// case " ":
|
||||
// togglePlay();
|
||||
// break;
|
||||
// case "m":
|
||||
// toggleMute();
|
||||
// break;
|
||||
|
||||
case "f":
|
||||
enterFullscreen();
|
||||
break;
|
||||
case Key.Escape:
|
||||
exitFullscreen();
|
||||
break;
|
||||
// case "f":
|
||||
// enterFullscreen();
|
||||
// break;
|
||||
// case Key.Escape:
|
||||
// exitFullscreen();
|
||||
// break;
|
||||
|
||||
case "0":
|
||||
setProgressAbsolute(0);
|
||||
break;
|
||||
case "1":
|
||||
setProgressAbsolute(10);
|
||||
break;
|
||||
case "2":
|
||||
setProgressAbsolute(20);
|
||||
break;
|
||||
case "3":
|
||||
setProgressAbsolute(30);
|
||||
break;
|
||||
case "4":
|
||||
setProgressAbsolute(40);
|
||||
break;
|
||||
case "5":
|
||||
setProgressAbsolute(50);
|
||||
break;
|
||||
case "6":
|
||||
setProgressAbsolute(60);
|
||||
break;
|
||||
case "7":
|
||||
setProgressAbsolute(70);
|
||||
break;
|
||||
case "8":
|
||||
setProgressAbsolute(80);
|
||||
break;
|
||||
case "9":
|
||||
setProgressAbsolute(90);
|
||||
break;
|
||||
}
|
||||
// case "0":
|
||||
// setProgressAbsolute(0);
|
||||
// break;
|
||||
// case "1":
|
||||
// setProgressAbsolute(10);
|
||||
// break;
|
||||
// case "2":
|
||||
// setProgressAbsolute(20);
|
||||
// break;
|
||||
// case "3":
|
||||
// setProgressAbsolute(30);
|
||||
// break;
|
||||
// case "4":
|
||||
// setProgressAbsolute(40);
|
||||
// break;
|
||||
// case "5":
|
||||
// setProgressAbsolute(50);
|
||||
// break;
|
||||
// case "6":
|
||||
// setProgressAbsolute(60);
|
||||
// break;
|
||||
// case "7":
|
||||
// setProgressAbsolute(70);
|
||||
// break;
|
||||
// case "8":
|
||||
// setProgressAbsolute(80);
|
||||
// break;
|
||||
// case "9":
|
||||
// setProgressAbsolute(90);
|
||||
// break;
|
||||
// }
|
||||
};
|
||||
|
||||
// useEffect(() => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export const useTestIdentifiers = false;
|
||||
export const useTestIdentifiers = true;
|
||||
export const QTUBE_VIDEO_BASE = useTestIdentifiers
|
||||
? "MYTEST2_vid_"
|
||||
: "qtube_vid_";
|
||||
|
||||
@@ -5,7 +5,7 @@ export const useIframe = () => {
|
||||
const navigate = useNavigate();
|
||||
useEffect(() => {
|
||||
function handleNavigation(event) {
|
||||
if (event.data?.action === "NAVIGATE_TO_PATH" && event.data.path) {
|
||||
if (event.data?.action === "NAVIGATE_TO_PATH" && event.data.path) {
|
||||
console.log("Navigating to path within React app:", event.data.path);
|
||||
navigate(event.data.path); // Navigate directly to the specified path
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ export const VideoActionsBar = ({
|
||||
setSuperLikeList,
|
||||
sx,
|
||||
}: VideoActionsBarProps) => {
|
||||
console.log('videoDatalike', videoData)
|
||||
const calculateAmountSuperlike = useMemo(() => {
|
||||
const totalQort = superLikeList?.reduce((acc, curr) => {
|
||||
if (curr?.amount && !isNaN(parseFloat(curr.amount)))
|
||||
|
||||
@@ -72,7 +72,8 @@ export const VideoContent = () => {
|
||||
sx={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
padding: `0px 0px 0px ${isScreenSmall ? "0px" : "2%"}`,
|
||||
// padding: `0px 0px 0px ${isScreenSmall ? "0px" : "2%"}`,
|
||||
padding: '10px',
|
||||
width: "100%",
|
||||
}}
|
||||
onClick={focusVideo}
|
||||
@@ -80,8 +81,8 @@ export const VideoContent = () => {
|
||||
{videoReference ? (
|
||||
<VideoPlayerContainer
|
||||
sx={{
|
||||
width: `${videoWidth}%`,
|
||||
marginLeft: "0%",
|
||||
// width: `${videoWidth}%`,
|
||||
// marginLeft: "0%",
|
||||
}}
|
||||
>
|
||||
<VideoPlayer
|
||||
|
||||
@@ -64,16 +64,18 @@ export const Home = ({ mode }: HomeProps) => {
|
||||
|
||||
console.log('filterName', filterName)
|
||||
const searchParameters: QortalSearchParams = useMemo(()=> {
|
||||
let description = ""
|
||||
let query = ""
|
||||
const searchOptions: {
|
||||
description?: string
|
||||
query?: string
|
||||
} = {}
|
||||
if (selectedCategoryVideos) {
|
||||
description = `category:${selectedCategoryVideos.id};`;
|
||||
searchOptions.description = `category:${selectedCategoryVideos.id};`;
|
||||
|
||||
if (selectedSubCategoryVideos)
|
||||
description += `subcategory:${selectedSubCategoryVideos.id}`;
|
||||
searchOptions.description += `subcategory:${selectedSubCategoryVideos.id}`;
|
||||
}
|
||||
if(filterSearch){
|
||||
query = filterSearch
|
||||
searchOptions.query = filterSearch
|
||||
}
|
||||
return {
|
||||
identifier:
|
||||
@@ -84,9 +86,8 @@ const searchParameters: QortalSearchParams = useMemo(()=> {
|
||||
limit: 20,
|
||||
excludeBlocked: true,
|
||||
name: filterName || "",
|
||||
description,
|
||||
query,
|
||||
mode: 'LATEST'
|
||||
...searchOptions,
|
||||
mode: 'ALL'
|
||||
};
|
||||
}, [filterType, filterName, selectedSubCategoryVideos, selectedCategoryVideos, filterSearch])
|
||||
console.log('searchParameters', searchParameters)
|
||||
|
||||
@@ -20,7 +20,7 @@ import {
|
||||
setSuperlikesAll,
|
||||
setUserAvatarHash,
|
||||
} from "../state/features/globalSlice";
|
||||
import { VideoPlayerGlobal } from "../components/common/VideoPlayer/VideoPlayerGlobal.tsx";
|
||||
// import { VideoPlayerGlobal } from "../components/common/VideoPlayer/VideoPlayerGlobal.tsx";
|
||||
import { Rnd } from "react-rnd";
|
||||
import { RequestQueue } from "../utils/queue";
|
||||
import { EditVideo } from "../components/Publish/EditVideo/EditVideo";
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
"noUnusedParameters": false,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"strictNullChecks": false,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["src"],
|
||||
"references": [{ "path": "./tsconfig.node.json" }]
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"skipLibCheck": true,
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"allowSyntheticDefaultImports": true
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
||||
|
||||
@@ -1,10 +1,30 @@
|
||||
import { defineConfig } from "vite";
|
||||
import react from "@vitejs/plugin-react";
|
||||
import { viteStaticCopy } from 'vite-plugin-static-copy';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
import path from 'path';
|
||||
|
||||
|
||||
// const __filename = fileURLToPath(import.meta.url);
|
||||
// const __dirname = path.dirname(__filename);
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
plugins: [react(), viteStaticCopy({
|
||||
targets: [
|
||||
{
|
||||
src: path.join(
|
||||
__dirname,
|
||||
'node_modules',
|
||||
'mediainfo.js',
|
||||
'dist',
|
||||
'MediaInfoModule.wasm'
|
||||
),
|
||||
dest: '', // copies to root of /dist → served at /MediaInfoModule.wasm
|
||||
},
|
||||
],
|
||||
}),],
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
port: 5174
|
||||
|
||||
Reference in New Issue
Block a user