commit
4398b30b38
22 changed files with 9488 additions and 7619 deletions
46
.github/workflows/main.yml
vendored
46
.github/workflows/main.yml
vendored
|
|
@ -46,6 +46,8 @@ env:
|
|||
DOCKERHUB_SLUG: arabcoders/ytptube
|
||||
GHCR_SLUG: ghcr.io/arabcoders/ytptube
|
||||
PLATFORMS: linux/amd64
|
||||
PNPM_VERSION: 10
|
||||
NODE_VERSION: 20
|
||||
|
||||
jobs:
|
||||
build-pr:
|
||||
|
|
@ -55,17 +57,23 @@ jobs:
|
|||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install frontend dependencies
|
||||
uses: bahmutov/npm-install@v1
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
working-directory: ui
|
||||
install-command: yarn --production --prefer-offline --frozen-lockfile
|
||||
version: ${{ env.PNPM_VERSION }}
|
||||
|
||||
- name: Build frontend
|
||||
uses: bahmutov/npm-install@v1
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
working-directory: ui
|
||||
install-command: yarn run generate
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: pnpm
|
||||
cache-dependency-path: 'ui/pnpm-lock.yaml'
|
||||
|
||||
- name: Install frontend dependencies & Build
|
||||
working-directory: ui
|
||||
run: |
|
||||
pnpm install --production --prefer-offline --frozen-lockfile
|
||||
pnpm run generate
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
|
@ -92,17 +100,23 @@ jobs:
|
|||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install frontend dependencies
|
||||
uses: bahmutov/npm-install@v1
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
working-directory: ui
|
||||
install-command: yarn --production --prefer-offline --frozen-lockfile
|
||||
version: ${{ env.PNPM_VERSION }}
|
||||
|
||||
- name: Build frontend
|
||||
uses: bahmutov/npm-install@v1
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
working-directory: ui
|
||||
install-command: yarn run generate
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: pnpm
|
||||
cache-dependency-path: 'ui/pnpm-lock.yaml'
|
||||
|
||||
- name: Install frontend dependencies & Build
|
||||
working-directory: ui
|
||||
run: |
|
||||
pnpm install --production --prefer-offline --frozen-lockfile
|
||||
pnpm run generate
|
||||
|
||||
- name: Update Version File
|
||||
uses: ArabCoders/write-version-to-file@master
|
||||
|
|
|
|||
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
|
|
@ -13,7 +13,7 @@
|
|||
"--port",
|
||||
"8082"
|
||||
],
|
||||
"runtimeExecutable": "yarn",
|
||||
"runtimeExecutable": "pnpm",
|
||||
"type": "node",
|
||||
"cwd": "${workspaceFolder}/ui",
|
||||
"env": {
|
||||
|
|
@ -45,7 +45,7 @@
|
|||
"run",
|
||||
"generate"
|
||||
],
|
||||
"runtimeExecutable": "yarn",
|
||||
"runtimeExecutable": "pnpm",
|
||||
"type": "node",
|
||||
"cwd": "${workspaceFolder}/ui",
|
||||
"console": "internalConsole",
|
||||
|
|
|
|||
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
|
|
@ -37,6 +37,7 @@
|
|||
"libcurl",
|
||||
"libx",
|
||||
"matroska",
|
||||
"mbed",
|
||||
"Microformat",
|
||||
"microformats",
|
||||
"mkvtoolsnix",
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ FROM node:lts-alpine AS node_builder
|
|||
|
||||
WORKDIR /app
|
||||
COPY ui ./
|
||||
RUN if [ ! -f "/app/exported/index.html" ]; then yarn install --production --prefer-offline --frozen-lockfile && yarn run generate; else echo "Skipping UI build, already built."; fi
|
||||
RUN if [ ! -f "/app/exported/index.html" ]; then pnpm install --production --prefer-offline --frozen-lockfile && pnpm run generate; else echo "Skipping UI build, already built."; fi
|
||||
|
||||
FROM python:3.11-alpine AS python_builder
|
||||
FROM python:3.13-alpine AS python_builder
|
||||
|
||||
ENV LANG=C.UTF-8
|
||||
ENV LC_ALL=C.UTF-8
|
||||
|
|
@ -21,7 +21,7 @@ ARG PIPENV_FLAGS="--deploy"
|
|||
COPY ./Pipfile* .
|
||||
RUN PIPENV_VENV_IN_PROJECT=1 pipenv install ${PIPENV_FLAGS}
|
||||
|
||||
FROM python:3.11-alpine
|
||||
FROM python:3.13-alpine
|
||||
|
||||
ARG TZ=UTC
|
||||
ARG USER_ID=1000
|
||||
|
|
@ -72,5 +72,4 @@ HEALTHCHECK --interval=10s --timeout=20s --start-period=10s --retries=3 CMD [ "/
|
|||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
|
||||
CMD ["/opt/python/bin/python", "/app/app/upgrader.py", "--run", "--ytptube-mp"]
|
||||
CMD ["/opt/python/bin/python", "/app/app/main.py", "--ytp-process"]
|
||||
|
|
|
|||
2
Pipfile
2
Pipfile
|
|
@ -28,4 +28,4 @@ yt-dlp = "*"
|
|||
[dev-packages]
|
||||
|
||||
[requires]
|
||||
python_version = "3.11"
|
||||
python_version = "*"
|
||||
|
|
|
|||
548
Pipfile.lock
generated
548
Pipfile.lock
generated
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "5cff673a1115f2ebff5a501564e11b7388af390c2a098bef13a189ea460c7bc6"
|
||||
"sha256": "48fcd9e2b5944d90ebb226668ac120414836e416bea2685411b1c0184f29d7df"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
"python_version": "3.11"
|
||||
"python_version": "*"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
|
|
@ -637,113 +637,113 @@
|
|||
},
|
||||
"multidict": {
|
||||
"hashes": [
|
||||
"sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756",
|
||||
"sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8",
|
||||
"sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef",
|
||||
"sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c",
|
||||
"sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5",
|
||||
"sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8",
|
||||
"sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db",
|
||||
"sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713",
|
||||
"sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44",
|
||||
"sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378",
|
||||
"sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5",
|
||||
"sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676",
|
||||
"sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08",
|
||||
"sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea",
|
||||
"sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9",
|
||||
"sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9",
|
||||
"sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e",
|
||||
"sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b",
|
||||
"sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508",
|
||||
"sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1",
|
||||
"sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852",
|
||||
"sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac",
|
||||
"sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde",
|
||||
"sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8",
|
||||
"sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504",
|
||||
"sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5",
|
||||
"sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02",
|
||||
"sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4",
|
||||
"sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec",
|
||||
"sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a",
|
||||
"sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666",
|
||||
"sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc",
|
||||
"sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf",
|
||||
"sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790",
|
||||
"sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8",
|
||||
"sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589",
|
||||
"sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d",
|
||||
"sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07",
|
||||
"sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56",
|
||||
"sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21",
|
||||
"sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7",
|
||||
"sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9",
|
||||
"sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343",
|
||||
"sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9",
|
||||
"sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4",
|
||||
"sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a",
|
||||
"sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427",
|
||||
"sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459",
|
||||
"sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6",
|
||||
"sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208",
|
||||
"sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229",
|
||||
"sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0",
|
||||
"sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474",
|
||||
"sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817",
|
||||
"sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd",
|
||||
"sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618",
|
||||
"sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5",
|
||||
"sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3",
|
||||
"sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124",
|
||||
"sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1",
|
||||
"sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb",
|
||||
"sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7",
|
||||
"sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3",
|
||||
"sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375",
|
||||
"sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39",
|
||||
"sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752",
|
||||
"sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0",
|
||||
"sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188",
|
||||
"sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451",
|
||||
"sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078",
|
||||
"sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7",
|
||||
"sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7",
|
||||
"sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f",
|
||||
"sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b",
|
||||
"sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f",
|
||||
"sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c",
|
||||
"sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291",
|
||||
"sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897",
|
||||
"sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887",
|
||||
"sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1",
|
||||
"sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685",
|
||||
"sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf",
|
||||
"sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6",
|
||||
"sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731",
|
||||
"sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507",
|
||||
"sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b",
|
||||
"sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae",
|
||||
"sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777",
|
||||
"sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7",
|
||||
"sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be",
|
||||
"sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df",
|
||||
"sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054",
|
||||
"sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2",
|
||||
"sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124",
|
||||
"sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c",
|
||||
"sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840",
|
||||
"sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8",
|
||||
"sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd",
|
||||
"sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8",
|
||||
"sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3",
|
||||
"sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e",
|
||||
"sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2",
|
||||
"sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1",
|
||||
"sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"
|
||||
"sha256:0327ad2c747a6600e4797d115d3c38a220fdb28e54983abe8964fd17e95ae83c",
|
||||
"sha256:058cc59b9e9b143cc56715e59e22941a5d868c322242278d28123a5d09cdf6b0",
|
||||
"sha256:0d2b9712211b860d123815a80b859075d86a4d54787e247d7fbee9db6832cf1c",
|
||||
"sha256:0e05c39962baa0bb19a6b210e9b1422c35c093b651d64246b6c2e1a7e242d9fd",
|
||||
"sha256:0f14ea68d29b43a9bf37953881b1e3eb75b2739e896ba4a6aa4ad4c5b9ffa145",
|
||||
"sha256:169c4ba7858176b797fe551d6e99040c531c775d2d57b31bcf4de6d7a669847f",
|
||||
"sha256:19d08b4f22eae45bb018b9f06e2838c1e4b853c67628ef8ae126d99de0da6395",
|
||||
"sha256:1d0121ccce8c812047d8d43d691a1ad7641f72c4f730474878a5aeae1b8ead8c",
|
||||
"sha256:232b7237e57ec3c09be97206bfb83a0aa1c5d7d377faa019c68a210fa35831f1",
|
||||
"sha256:2e543a40e4946cf70a88a3be87837a3ae0aebd9058ba49e91cacb0b2cd631e2b",
|
||||
"sha256:329ae97fc2f56f44d91bc47fe0972b1f52d21c4b7a2ac97040da02577e2daca2",
|
||||
"sha256:3312f63261b9df49be9d57aaa6abf53a6ad96d93b24f9cc16cf979956355ce6e",
|
||||
"sha256:33a12ebac9f380714c298cbfd3e5b9c0c4e89c75fe612ae496512ee51028915f",
|
||||
"sha256:343892a27d1a04d6ae455ecece12904d242d299ada01633d94c4f431d68a8c49",
|
||||
"sha256:3e9f1cd61a0ab857154205fb0b1f3d3ace88d27ebd1409ab7af5096e409614cd",
|
||||
"sha256:3ef4e9096ff86dfdcbd4a78253090ba13b1d183daa11b973e842465d94ae1772",
|
||||
"sha256:4219390fb5bf8e548e77b428bb36a21d9382960db5321b74d9d9987148074d6b",
|
||||
"sha256:496bcf01c76a70a31c3d746fd39383aad8d685ce6331e4c709e9af4ced5fa221",
|
||||
"sha256:49a29d7133b1fc214e818bbe025a77cc6025ed9a4f407d2850373ddde07fd04a",
|
||||
"sha256:4d7b50b673ffb4ff4366e7ab43cf1f0aef4bd3608735c5fbdf0bdb6f690da411",
|
||||
"sha256:4efc31dfef8c4eeb95b6b17d799eedad88c4902daba39ce637e23a17ea078915",
|
||||
"sha256:4f5f29794ac0e73d2a06ac03fd18870adc0135a9d384f4a306a951188ed02f95",
|
||||
"sha256:4ffc3c6a37e048b5395ee235e4a2a0d639c2349dffa32d9367a42fc20d399772",
|
||||
"sha256:50855d03e9e4d66eab6947ba688ffb714616f985838077bc4b490e769e48da51",
|
||||
"sha256:51d662c072579f63137919d7bb8fc250655ce79f00c82ecf11cab678f335062e",
|
||||
"sha256:530d86827a2df6504526106b4c104ba19044594f8722d3e87714e847c74a0275",
|
||||
"sha256:5363f9b2a7f3910e5c87d8b1855c478c05a2dc559ac57308117424dfaad6805c",
|
||||
"sha256:55ae0721c1513e5e3210bca4fc98456b980b0c2c016679d3d723119b6b202c42",
|
||||
"sha256:5883d6ee0fd9d8a48e9174df47540b7545909841ac82354c7ae4cbe9952603bd",
|
||||
"sha256:5bce06b83be23225be1905dcdb6b789064fae92499fbc458f59a8c0e68718601",
|
||||
"sha256:5e0ba18a9afd495f17c351d08ebbc4284e9c9f7971d715f196b79636a4d0de44",
|
||||
"sha256:5e2bcda30d5009996ff439e02a9f2b5c3d64a20151d34898c000a6281faa3781",
|
||||
"sha256:603f39bd1cf85705c6c1ba59644b480dfe495e6ee2b877908de93322705ad7cf",
|
||||
"sha256:60d849912350da557fe7de20aa8cf394aada6980d0052cc829eeda4a0db1c1db",
|
||||
"sha256:622f26ea6a7e19b7c48dd9228071f571b2fbbd57a8cd71c061e848f281550e6b",
|
||||
"sha256:632a3bf8f1787f7ef7d3c2f68a7bde5be2f702906f8b5842ad6da9d974d0aab3",
|
||||
"sha256:66ed0731f8e5dfd8369a883b6e564aca085fb9289aacabd9decd70568b9a30de",
|
||||
"sha256:69133376bc9a03f8c47343d33f91f74a99c339e8b58cea90433d8e24bb298031",
|
||||
"sha256:69ee9e6ba214b5245031b76233dd95408a0fd57fdb019ddcc1ead4790932a8e8",
|
||||
"sha256:6a2f58a66fe2c22615ad26156354005391e26a2f3721c3621504cd87c1ea87bf",
|
||||
"sha256:6a602151dbf177be2450ef38966f4be3467d41a86c6a845070d12e17c858a156",
|
||||
"sha256:6ed5ae5605d4ad5a049fad2a28bb7193400700ce2f4ae484ab702d1e3749c3f9",
|
||||
"sha256:73484a94f55359780c0f458bbd3c39cb9cf9c182552177d2136e828269dee529",
|
||||
"sha256:75493f28dbadecdbb59130e74fe935288813301a8554dc32f0c631b6bdcdf8b0",
|
||||
"sha256:7cf3bd54c56aa16fdb40028d545eaa8d051402b61533c21e84046e05513d5780",
|
||||
"sha256:7e23f2f841fcb3ebd4724a40032d32e0892fbba4143e43d2a9e7695c5e50e6bd",
|
||||
"sha256:7f3d3b3c34867579ea47cbd6c1f2ce23fbfd20a273b6f9e3177e256584f1eacc",
|
||||
"sha256:82ffabefc8d84c2742ad19c37f02cde5ec2a1ee172d19944d380f920a340e4b9",
|
||||
"sha256:83ec4967114295b8afd120a8eec579920c882831a3e4c3331d591a8e5bfbbc0f",
|
||||
"sha256:87a728af265e08f96b6318ebe3c0f68b9335131f461efab2fc64cc84a44aa6ed",
|
||||
"sha256:87cb72263946b301570b0f63855569a24ee8758aaae2cd182aae7d95fbc92ca7",
|
||||
"sha256:8adee3ac041145ffe4488ea73fa0a622b464cc25340d98be76924d0cda8545ff",
|
||||
"sha256:8cc403092a49509e8ef2d2fd636a8ecefc4698cc57bbe894606b14579bc2a955",
|
||||
"sha256:8cd8f81f1310182362fb0c7898145ea9c9b08a71081c5963b40ee3e3cac589b1",
|
||||
"sha256:8ffb40b74400e4455785c2fa37eba434269149ec525fc8329858c862e4b35373",
|
||||
"sha256:93ec84488a384cd7b8a29c2c7f467137d8a73f6fe38bb810ecf29d1ade011a7c",
|
||||
"sha256:941f1bec2f5dbd51feeb40aea654c2747f811ab01bdd3422a48a4e4576b7d76a",
|
||||
"sha256:98af87593a666f739d9dba5d0ae86e01b0e1a9cfcd2e30d2d361fbbbd1a9162d",
|
||||
"sha256:995f985e2e268deaf17867801b859a282e0448633f1310e3704b30616d269d69",
|
||||
"sha256:9abcf56a9511653fa1d052bfc55fbe53dbee8f34e68bd6a5a038731b0ca42d15",
|
||||
"sha256:9bbf7bd39822fd07e3609b6b4467af4c404dd2b88ee314837ad1830a7f4a8299",
|
||||
"sha256:9c17341ee04545fd962ae07330cb5a39977294c883485c8d74634669b1f7fe04",
|
||||
"sha256:9f193eeda1857f8e8d3079a4abd258f42ef4a4bc87388452ed1e1c4d2b0c8740",
|
||||
"sha256:9faf1b1dcaadf9f900d23a0e6d6c8eadd6a95795a0e57fcca73acce0eb912065",
|
||||
"sha256:9fcad2945b1b91c29ef2b4050f590bfcb68d8ac8e0995a74e659aa57e8d78e01",
|
||||
"sha256:a145c550900deb7540973c5cdb183b0d24bed6b80bf7bddf33ed8f569082535e",
|
||||
"sha256:a4d1cb1327c6082c4fce4e2a438483390964c02213bc6b8d782cf782c9b1471f",
|
||||
"sha256:a887b77f51d3d41e6e1a63cf3bc7ddf24de5939d9ff69441387dfefa58ac2e26",
|
||||
"sha256:a920f9cf2abdf6e493c519492d892c362007f113c94da4c239ae88429835bad1",
|
||||
"sha256:aff4cafea2d120327d55eadd6b7f1136a8e5a0ecf6fb3b6863e8aca32cd8e50a",
|
||||
"sha256:b0f1987787f5f1e2076b59692352ab29a955b09ccc433c1f6b8e8e18666f608b",
|
||||
"sha256:b308402608493638763abc95f9dc0030bbd6ac6aff784512e8ac3da73a88af08",
|
||||
"sha256:b61e98c3e2a861035aaccd207da585bdcacef65fe01d7a0d07478efac005e028",
|
||||
"sha256:b9eb4c59c54421a32b3273d4239865cb14ead53a606db066d7130ac80cc8ec93",
|
||||
"sha256:ba852168d814b2c73333073e1c7116d9395bea69575a01b0b3c89d2d5a87c8fb",
|
||||
"sha256:bb5ac9e5bfce0e6282e7f59ff7b7b9a74aa8e5c60d38186a4637f5aa764046ad",
|
||||
"sha256:bb61ffd3ab8310d93427e460f565322c44ef12769f51f77277b4abad7b6f7223",
|
||||
"sha256:bbfcb60396f9bcfa63e017a180c3105b8c123a63e9d1428a36544e7d37ca9e20",
|
||||
"sha256:bd4557071b561a8b3b6075c3ce93cf9bfb6182cb241805c3d66ced3b75eff4ac",
|
||||
"sha256:be06e73c06415199200e9a2324a11252a3d62030319919cde5e6950ffeccf72e",
|
||||
"sha256:c04157266344158ebd57b7120d9b0b35812285d26d0e78193e17ef57bfe2979a",
|
||||
"sha256:c10d17371bff801af0daf8b073c30b6cf14215784dc08cd5c43ab5b7b8029bbc",
|
||||
"sha256:c27e5dcf520923d6474d98b96749e6805f7677e93aaaf62656005b8643f907ab",
|
||||
"sha256:c93a6fb06cc8e5d3628b2b5fda215a5db01e8f08fc15fadd65662d9b857acbe4",
|
||||
"sha256:cbebaa076aaecad3d4bb4c008ecc73b09274c952cf6a1b78ccfd689e51f5a5b0",
|
||||
"sha256:cc5d83c6619ca5c9672cb78b39ed8542f1975a803dee2cda114ff73cbb076edd",
|
||||
"sha256:d1a20707492db9719a05fc62ee215fd2c29b22b47c1b1ba347f9abc831e26683",
|
||||
"sha256:d1f7cbd4f1f44ddf5fd86a8675b7679176eae770f2fc88115d6dddb6cefb59bc",
|
||||
"sha256:d21c1212171cf7da703c5b0b7a0e85be23b720818aef502ad187d627316d5645",
|
||||
"sha256:d2fa86af59f8fc1972e121ade052145f6da22758f6996a197d69bb52f8204e7e",
|
||||
"sha256:d5b1cc3ab8c31d9ebf0faa6e3540fb91257590da330ffe6d2393d4208e638925",
|
||||
"sha256:d693307856d1ef08041e8b6ff01d5b4618715007d288490ce2c7e29013c12b9a",
|
||||
"sha256:d6b15c55721b1b115c5ba178c77104123745b1417527ad9641a4c5e2047450f0",
|
||||
"sha256:d832c608f94b9f92a0ec8b7e949be7792a642b6e535fcf32f3e28fab69eeb046",
|
||||
"sha256:d83f18315b9fca5db2452d1881ef20f79593c4aa824095b62cb280019ef7aa3d",
|
||||
"sha256:d877447e7368c7320832acb7159557e49b21ea10ffeb135c1077dbbc0816b598",
|
||||
"sha256:dc388f75a1c00000824bf28b7633e40854f4127ede80512b44c3cfeeea1839a2",
|
||||
"sha256:dc8c9736d8574b560634775ac0def6bdc1661fc63fa27ffdfc7264c565bcb4f2",
|
||||
"sha256:e32053d6d3a8b0dfe49fde05b496731a0e6099a4df92154641c00aa76786aef5",
|
||||
"sha256:e5f8a146184da7ea12910a4cec51ef85e44f6268467fb489c3caf0cd512f29c2",
|
||||
"sha256:ecde56ea2439b96ed8a8d826b50c57364612ddac0438c39e473fafad7ae1c23b",
|
||||
"sha256:f682c42003c7264134bfe886376299db4cc0c6cd06a3295b41b347044bcb5482",
|
||||
"sha256:fad6daaed41021934917f4fb03ca2db8d8a4d79bf89b17ebe77228eb6710c003",
|
||||
"sha256:fc60f91c02e11dfbe3ff4e1219c085695c339af72d1641800fe6075b91850c8f"
|
||||
],
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==6.4.3"
|
||||
"version": "==6.4.4"
|
||||
},
|
||||
"mutagen": {
|
||||
"hashes": [
|
||||
|
|
@ -868,169 +868,181 @@
|
|||
},
|
||||
"pycryptodome": {
|
||||
"hashes": [
|
||||
"sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6",
|
||||
"sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89",
|
||||
"sha256:2988ffcd5137dc2d27eb51cd18c0f0f68e5b009d5fec56fbccb638f90934f333",
|
||||
"sha256:37ddcd18284e6b36b0a71ea495a4c4dca35bb09ccc9bfd5b91bfaf2321f131c1",
|
||||
"sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00",
|
||||
"sha256:56c6f9342fcb6c74e205fbd2fee568ec4cdbdaa6165c8fde55dbc4ba5f584464",
|
||||
"sha256:87a88dc543b62b5c669895caf6c5a958ac7abc8863919e94b7a6cafd2f64064f",
|
||||
"sha256:8f4f6f47a7f411f2c157e77bbbda289e0c9f9e1e9944caa73c1c2e33f3f92d6e",
|
||||
"sha256:96e73527c9185a3d9b4c6d1cfb4494f6ced418573150be170f6580cb975a7f5a",
|
||||
"sha256:98fd9da809d5675f3a65dcd9ed384b9dc67edab6a4cda150c5870a8122ec961d",
|
||||
"sha256:9dbb749cef71c28271484cbef684f9b5b19962153487735411e1020ca3f59cb1",
|
||||
"sha256:9e1bb165ea1dc83a11e5dbbe00ef2c378d148f3a2d3834fb5ba4e0f6fd0afe4b",
|
||||
"sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d",
|
||||
"sha256:a26bcfee1293b7257c83b0bd13235a4ee58165352be4f8c45db851ba46996dc6",
|
||||
"sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc",
|
||||
"sha256:a6cf9553b29624961cab0785a3177a333e09e37ba62ad22314ebdbb01ca79840",
|
||||
"sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8",
|
||||
"sha256:b4bdce34af16c1dcc7f8c66185684be15f5818afd2a82b75a4ce6b55f9783e13",
|
||||
"sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627",
|
||||
"sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772",
|
||||
"sha256:d4d1174677855c266eed5c4b4e25daa4225ad0c9ffe7584bb1816767892545d0",
|
||||
"sha256:e653519dedcd1532788547f00eeb6108cc7ce9efdf5cc9996abce0d53f95d5a9",
|
||||
"sha256:e7514a1aebee8e85802d154fdb261381f1cb9b7c5a54594545145b8ec3056ae6",
|
||||
"sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb",
|
||||
"sha256:f1ae7beb64d4fc4903a6a6cca80f1f448e7a8a95b77d106f8a29f2eb44d17547",
|
||||
"sha256:f5810bc7494e4ac12a4afef5a32218129e7d3890ce3f2b5ec520cc69eb1102ad",
|
||||
"sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5",
|
||||
"sha256:f7a683bc9fa585c0dfec7fa4801c96a48d30b30b096e3297f9374f40c2fedafc",
|
||||
"sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723"
|
||||
"sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4",
|
||||
"sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c",
|
||||
"sha256:14e15c081e912c4b0d75632acd8382dfce45b258667aa3c67caf7a4d4c13f630",
|
||||
"sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f",
|
||||
"sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27",
|
||||
"sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a",
|
||||
"sha256:350ebc1eba1da729b35ab7627a833a1a355ee4e852d8ba0447fafe7b14504d56",
|
||||
"sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef",
|
||||
"sha256:45c69ad715ca1a94f778215a11e66b7ff989d792a4d63b68dc586a1da1392ff5",
|
||||
"sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477",
|
||||
"sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886",
|
||||
"sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a",
|
||||
"sha256:573a0b3017e06f2cffd27d92ef22e46aa3be87a2d317a5abf7cc0e84e321bd75",
|
||||
"sha256:63dad881b99ca653302b2c7191998dd677226222a3f2ea79999aa51ce695f720",
|
||||
"sha256:64093fc334c1eccfd3933c134c4457c34eaca235eeae49d69449dc4728079339",
|
||||
"sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625",
|
||||
"sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490",
|
||||
"sha256:6fe8258e2039eceb74dfec66b3672552b6b7d2c235b2dfecc05d16b8921649a8",
|
||||
"sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b",
|
||||
"sha256:7ac1080a8da569bde76c0a104589c4f414b8ba296c0b3738cf39a466a9fb1818",
|
||||
"sha256:865d83c906b0fc6a59b510deceee656b6bc1c4fa0d82176e2b77e97a420a996a",
|
||||
"sha256:89d4d56153efc4d81defe8b65fd0821ef8b2d5ddf8ed19df31ba2f00872b8002",
|
||||
"sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae",
|
||||
"sha256:93837e379a3e5fd2bb00302a47aee9fdf7940d83595be3915752c74033d17ca7",
|
||||
"sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d",
|
||||
"sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265",
|
||||
"sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39",
|
||||
"sha256:a176b79c49af27d7f6c12e4b178b0824626f40a7b9fed08f712291b6d54bf566",
|
||||
"sha256:a7fc76bf273353dc7e5207d172b83f569540fc9a28d63171061c42e361d22353",
|
||||
"sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b",
|
||||
"sha256:b34e8e11d97889df57166eda1e1ddd7676da5fcd4d71a0062a760e75060514b4",
|
||||
"sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2",
|
||||
"sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575",
|
||||
"sha256:ce64e84a962b63a47a592690bdc16a7eaf709d2c2697ababf24a0def566899a6",
|
||||
"sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843",
|
||||
"sha256:d8e95564beb8782abfd9e431c974e14563a794a4944c29d6d3b7b5ea042110b4",
|
||||
"sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446",
|
||||
"sha256:ddb95b49df036ddd264a0ad246d1be5b672000f12d6961ea2c267083a5e19379",
|
||||
"sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa",
|
||||
"sha256:e3f2d0aaf8080bda0587d58fc9fe4766e012441e2eed4269a77de6aea981c8be",
|
||||
"sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'",
|
||||
"version": "==3.22.0"
|
||||
"version": "==3.23.0"
|
||||
},
|
||||
"pyjson5": {
|
||||
"hashes": [
|
||||
"sha256:00361a0aaabc3162992087d83bc067517c95c35810b631d9a40b80732003066e",
|
||||
"sha256:052ed8ee6b9d9631db66ca29799f9d37ee8c3ce77ca7b44d169495149eefd893",
|
||||
"sha256:06b857a5a36f2bad52267d1a57a880cd62c3b0d3f3a719ab8599a1d5465e2417",
|
||||
"sha256:0a2c476a829a5dc823fb381154be6532355588db1d13df9b2e524b022faf14d7",
|
||||
"sha256:0c75758dd26d233f6bea4c6479a933c5092b15b6dc706cf14dc94218089285a9",
|
||||
"sha256:0e39d7414ea02439bbd4f7d0c9fb2607a4cda1061eeee853bb046b2df39f0b26",
|
||||
"sha256:0fac0c9137785ceabd7ec48bfdd4b87eb11e186c495fd02c1a6e0e0af24a0979",
|
||||
"sha256:10688e75fd9f18e34dddd111cafd87cca6727837469b8bfb61f2d2685490f976",
|
||||
"sha256:1550dc70199401056f80acfc503da36de2df70dd4364a0efb654ffe7e9246ac6",
|
||||
"sha256:16aadc503f247428988cba0e71f83bbd426383ba4b3658b1ca68df80783bba73",
|
||||
"sha256:19636485a5799a33ee4e9d1eabc5097d25c16ae08be340ee5a2c9d548d33297d",
|
||||
"sha256:1abe62fa9cc8cad77a52979a17aa092fe55630c7dd5b37156e64f4fb278aebc9",
|
||||
"sha256:1aed6425a5645b74d93f99ec56e6412e843c252c40e647a8c7856c3e8e828819",
|
||||
"sha256:1fa2bcdfbeac1d3c1220b1fd53edc6db0fdb9e7f71410161d3a26a9f29580839",
|
||||
"sha256:1fa3b0a34920615c555958b7656e450fc682bdf61410814495b7947168ca529b",
|
||||
"sha256:208b8bf374c42f4ce7ca0a735da8ad508285f7c36268eab7ecb01e1e66fbb309",
|
||||
"sha256:24c6206f508c169034fd851eb87af3aec893d2eca3bf14df65eecc520da16883",
|
||||
"sha256:25ab666bd4a400a7060d6aa508d84674f8c2dd6c15ca04ccdf524aa02ae96fff",
|
||||
"sha256:260b6f2d7148f5fa23d817b82e9960a75a44678116d6a5513bed4e88d6697343",
|
||||
"sha256:2ae856525e4d178a05771c4c593c8ec5625480d916cd81e544f5abd9376e929c",
|
||||
"sha256:2b7f692b6454d78ddfca8450e294631299d8cb0ab80d90bffdac88da0803ad8d",
|
||||
"sha256:2bbfdeeb531f79730899ef674d80dd6b6bc7c29fe3789660115f0ba66eef834f",
|
||||
"sha256:2d682d4e0dfdeb76c950fa7dd61139b70b0309d3908ef6e7dd1a75e2ef166365",
|
||||
"sha256:2dea723f88e89dba1d4a6542c5527cac7ecff6755291ad2eb60e1c2f578bb69f",
|
||||
"sha256:32857cec9deb18fa4edb9dccf261066f7d5b2b4fadc901cbe99938d553ae5bfa",
|
||||
"sha256:339e0813957c9ca0950c30b72e366a00f48a233051cedb5e1a77c3004d95428a",
|
||||
"sha256:344bda09e56492ecb7b7180ef27fa3a6664105f4b27a77ac9933076eac3a2afd",
|
||||
"sha256:357e861d1dd0906d8233e2c18fc77ebda6eee3e2ca460fafc443c9df9eb0a5e7",
|
||||
"sha256:3948742ff2d2f222ab87cc77d8c6ce8a9ef063fe2904f8fa88309611a128147a",
|
||||
"sha256:3e8807fbb37eab3de4ebf2584e1b94677311a9adc17202ca36945f1d5976e747",
|
||||
"sha256:3fd513eaffba7b72d56bd5b26a92e2edb3694602adcaf3414a9f7d6c4c5d9be7",
|
||||
"sha256:3ff32694ff70d8ebe80c8989a670d6a42561b20cb3fff9b7db41b5b460e4fd4e",
|
||||
"sha256:404a227befcb3a18736869b89bb0269de102ce1f671bfd0b7deb8c23f345f71b",
|
||||
"sha256:40e840b4e7ec92b944ba03654b2f94b4509f6c77c4b5d74348830983ea711873",
|
||||
"sha256:46173d6d66ed1a9e3173f489132535a5387116d54954ac527e2244b067cc9296",
|
||||
"sha256:4958a06958e9f50cc5f60af76236b9ce256b4ab655e3d50d166e8598aafefe43",
|
||||
"sha256:4a58185b9ac3adfed0adf539be7293d76fe0f7c515b6f9982b225c8084027255",
|
||||
"sha256:4f057998f98de42644dac09c10e69c4e283724bde581e516c2e3ace6e4f5d248",
|
||||
"sha256:4fe4971ff95058bf25b9eb2928ee01b63ff89dff3625baeb1ba414b42f09017a",
|
||||
"sha256:515c89e7063100bcc7c67292559bdd926da19b59fe00281e9dd2fa83f30747f1",
|
||||
"sha256:51d8ef9626ceb75352fa0bc2a99c173de493c910e5b0de9dfeee2680c4eeafd4",
|
||||
"sha256:54b680e763acb81d67b98faa817c197451bdb44d53198aff32703d542c6465fe",
|
||||
"sha256:571534c8b64116b411a66ab50cb04e9c7f0b574cbfefacd5bc31f97d5395965a",
|
||||
"sha256:57b9bf670c8d524e213fac1065cd90b168d7c7e5fc9fbad7219a2de70b9d6761",
|
||||
"sha256:59c261624e93e2da0752b91234df1c222a1ef1cc1e5a708bb7661aee974920a8",
|
||||
"sha256:5a1391adcf78a52004d48a80fa82f950e8a0983b773a7bedfddcea8dfa442eb8",
|
||||
"sha256:5a379911161545aa57bd6cd97f249cabcfe5990688f4dff9a8f328f5f6f231d3",
|
||||
"sha256:5e7f5b92460dc69ce27814d4ab546e3bae84b9b2e26f29701ad7fab637e6bf2f",
|
||||
"sha256:628188b3882edac2a3171e52959348834bf166683ba2f0ed41086a6556523cd5",
|
||||
"sha256:65a8dc57f815dd935a5bf3006a58d00892b8d2d2168c4e3b382104a9fc762752",
|
||||
"sha256:65f2922cc8fd6b1e9cc8ff7e5fe975f7bf111c03eb06ed9b2ee793e6870d3212",
|
||||
"sha256:660f58321f3c8e06f62b83ffd9867e2721916e1c87b1a7e936314226cfc0803c",
|
||||
"sha256:671f9e68c54db7f894808ca9921d638fc92a2d7e6fcf67ac030c9ec6ff7add34",
|
||||
"sha256:681e52df0705056dc39cf7d7bec4161e2769437fdf89f55084a4b060e9bbbfc9",
|
||||
"sha256:6894bb4558dab2989f75cf816eb49020765015830a95ddd2a48c20c2d4fbc859",
|
||||
"sha256:6bda3c48c5eb1ac4daee5dd5204e38e6751f74ad23840a8d98f25582578a3852",
|
||||
"sha256:701db0660e434fae000e5d4d49efc0b80fbeedf938cbcc8b6d72c229d395feca",
|
||||
"sha256:7296e0d2e1b2a9fd63cdc95b5dc2c9cd8098a60449fc93e802d23855383b6ea4",
|
||||
"sha256:72fa22291149e8731c4bbc225cf75a41a049a54903018ca670c849658c1edc04",
|
||||
"sha256:7489387590db81b7acba0b0ca5703173689745bf3b98b8386b912e125bf92595",
|
||||
"sha256:748f2db601c8347acd27be01cb27e18c151a16c307f4951712c2e93f92fd91b3",
|
||||
"sha256:77005662014809a7b8b78f984131a3751295ff102f4c62b452bbdac946360166",
|
||||
"sha256:77f4724dcb646c2d40ad45d5aa7a5af86d54dc38c78e27b795418ecca23248bb",
|
||||
"sha256:78bd729b58d590e2c0892c6c33d555e93d16bf86e38c296ff0525278973ae4d2",
|
||||
"sha256:7a11d3cd6114de90364c24876f1cd47dcecaffb47184ffffb01eb585c8810f4b",
|
||||
"sha256:7c4de1cde04573cd220a042006d088b0d4a042b5270cb9e8ca0a3c16cfacf5e9",
|
||||
"sha256:7da4839a6a42fd4351bb7a9794651835fb7d8a55ced25c8781d31ccff15fec80",
|
||||
"sha256:85a5a88d23e9fe54f452ea751720a153c199923c44b0cb61dd4ff20e0b3decbd",
|
||||
"sha256:89eeb08b5e77f59ac9040bbd93be637a8ea829c06173316756e2e9026dcf2393",
|
||||
"sha256:8fe8ba077a6ef01e6493696c27455eeae64e39ff4bd71a1a7bb66af40be7232c",
|
||||
"sha256:94e1b9d219f40bebbb6285840b094eca523481cf199cd46154044dae333d492d",
|
||||
"sha256:95295503ee7fa7a9428425da22e88ae2513f8e353fd25b653c58248ab706e2e1",
|
||||
"sha256:962bd6a2e8c295d21713f4262b4d680f4ba5ae4194b1a37222440c75a8140ade",
|
||||
"sha256:970345b95004f12b5e7694b954c6c734497cfd52195e3cd36b8f44c81b858683",
|
||||
"sha256:9912aed5a76998867a27379b652883166051cd60522b643611a559a1021b7cf5",
|
||||
"sha256:9ae405a054886d544fbbd909f66dcfb5ae5a86a377c70d43799aa4691ac6e9ef",
|
||||
"sha256:9ee2f077cf05daa9aaf3c750b63cce5b5671cf8fa848b29beaf1030a08d94fda",
|
||||
"sha256:9f3e3c4ae939d478597e2c60c0fc7d4662c3ebeae7b11e05435a67d8b2d3e8a8",
|
||||
"sha256:a4577a18545f3f4461df46d3d38d85659b16a77ca8975289ef6f21e1c228f7bf",
|
||||
"sha256:a60abd461ff8776a01852cdbafc2b9016c4fbdcfb3a3c563745e5b31c074e227",
|
||||
"sha256:a7bd59c9000a413ffa794d5feebd54475dffd2c65a5b0fa11e18fa084caa4146",
|
||||
"sha256:a903d111e4f0cf383a6e09e2c1e85152a2aa9d25b364c813025f6a947a10db60",
|
||||
"sha256:ab07960def3b195e013d97d7ba66fc15109c3481c1f66abf6e4dd5b27d15a0da",
|
||||
"sha256:ade16f3c6fecced58f8274626fdc5c71fcf5f9ef6401d4a87b02a0c1b889ba86",
|
||||
"sha256:aebdd4c5a878f125fea8b192244b1e64532561a315725502eee8d7629598882f",
|
||||
"sha256:af3d0bdeecb19e9bbf62c70ba4ee54664c986ccaadea2a6edf7552f2c700d4d5",
|
||||
"sha256:b0cd98871646bfb2236cfdc0ae87f8ae8f1f631133b99fef5e74307248c4ae8d",
|
||||
"sha256:b302cadffc93c936a6e81f02e1dc526d5fe17e2aa82f4d6f3034223b178d9d50",
|
||||
"sha256:b3ecee050a8a4b03cc4f1a7e9a0c478be757b46578fda1ea0f16ac8a24ba8e7a",
|
||||
"sha256:b77c94296cd0763bc2d7d276cb53dbc97edeacfbc50c02103521d586ca91ff37",
|
||||
"sha256:b7f48ec8a4dd01a4eddff56f654b4ad40ae9fdfff24834aada830b92de884027",
|
||||
"sha256:b802b1231aa102f5e404ec52eabf2118863146ef6e002c76da7b9af58d68e9e1",
|
||||
"sha256:b945ab6795423eff3c129628a910dfae7ac9009e300471436d4d405de27dfd15",
|
||||
"sha256:bff832aebd269867deedae1b906b9b233ad909197debd747d28b4fbb509518e9",
|
||||
"sha256:c1c4313379c2faf9f7eaa9d3ecdf6bd19fec32c9b9b5b4ea18b63de4520dc8ce",
|
||||
"sha256:c2342007fcf4ed52260c2b7512ae3ec9694dbf72ec4990e43c69ab4d7646dc14",
|
||||
"sha256:c32d633aef62fd8faef22b8a1f90eedeb139b6900cc5abaf12d6bd69e11a62f6",
|
||||
"sha256:c64b0cdc979c8e5f328ea9e3c3c9ad26dd47c6b037abcd9a3d83a13624539c86",
|
||||
"sha256:c7e9cec9c9e9c2ad3561df2cebedbd4a7348b73ebb8a665ea99e3ce145beffbf",
|
||||
"sha256:cc414b6ab28ed75d761c825f1150c19dd9a8f9b2268ee6af0173d148f018a8c5",
|
||||
"sha256:cc81e47e99558b61e96b9feb4822e959d8260c5f3757681e375f42b57fe8550c",
|
||||
"sha256:d0a669c4f54721c938aae42320fe5cc93e77ed79eac8247e66abc624dd9fe4e4",
|
||||
"sha256:d27f71da8a9d5de12e1c2c7ea060b029778efc5c0611de6401c1c3142991038d",
|
||||
"sha256:d622733cf671c8104a2936b3ff589903fa4e2fec5db4e2679297219446d944a7",
|
||||
"sha256:d6eee32d88c810c4cfb53cc6762ef3ac3c70d5e7bd76648d93c5e0ee103d3526",
|
||||
"sha256:d7b4a4b36a8748011c7586d4bba3eb403d82bdb62605e7478f2c8b11c7e01711",
|
||||
"sha256:d83e0bc87d94baa39703c1d7139c5ce7ff025a53a34251762128713a294cf147",
|
||||
"sha256:d8d3229287ff78ead13493b0613566473d0f4298dd3c827f91242bab9184133c",
|
||||
"sha256:db7df506cf28addb35f508aa0ea19485a188de7708e2760f3cca29750773ad0a",
|
||||
"sha256:de914ea1dd7a49862e7395206bb8d92c65e60defb8eb4b86e3d24f973db5132f",
|
||||
"sha256:e3aee51ef5feb4409ff36713f70251265b04c18c8322bc91d2578759225e918d",
|
||||
"sha256:eebe950815df3d0206722c89ffc73f79fb11c202132d1ec08ebabb5d1f73433c",
|
||||
"sha256:f02e405ec6b8d6255b2e6fec05526e71d254fe1345e1d428a7aa397e42d75761",
|
||||
"sha256:f3bc501e35ac49b4df950d7e14e5a53a5618e2ba36c6364be0733cc65800c80a",
|
||||
"sha256:f5d9086a74246412e61a0263f81fdad4cac6ce89b03924a601ea115a7d803d52",
|
||||
"sha256:f7c5d5a7af14bbe064cec79ca180da7cbe079316ea56994fbe657d083e02cfa2",
|
||||
"sha256:f89dfaf06fccbefcbca50f6a435b70cd47a46612be17114cac8fb6f85e65d0b2",
|
||||
"sha256:f8d5a208b8954758c75f8e8ae28d195bac3fae24ce9b51f6261b401e4ccce116",
|
||||
"sha256:f984d06902b2096206d15bcbc6f0c75c024de295294ca04c8c11aedc871e2da0",
|
||||
"sha256:fa7b84f9dc01cac5ac2e25d25af56911dda8d8ba3d4217c768431ba39ce4248d",
|
||||
"sha256:fd074295f9771eba2fd68843ed28c58d9835012dc7ebd48687649d9d92da9ee7",
|
||||
"sha256:fd21ce9dd4733347b6a426f4f943dd20547befbd6ef502b7480944c84a1425a3",
|
||||
"sha256:fe03568ca61050f00c951501d70aaf68064ab5fecb3d84961ce743102cc81036"
|
||||
"sha256:001440b986f226e65237179a2a9721f0e78d6e75a7779d9941d0f10522fce12c",
|
||||
"sha256:0014adf743c4093df511934a6bca5b1e3592b36b96ff86bd74b0c4de05beafe1",
|
||||
"sha256:03742b454bede9a61c2003574b74c8ba5de5d8363b0630f89a164d17bb7562a8",
|
||||
"sha256:09cbd1dc018bf5d3ec34128635df0545f2074bb019c00e37b885a03a454eef00",
|
||||
"sha256:0ad9c24d20ce825df70701361c7b7da04f703f8f5ff3cf565b156ff02e24db02",
|
||||
"sha256:0ae55ee48ffb5a7f9fc22c135d38f31fc2db43b8dfc69b1285476123fe641697",
|
||||
"sha256:10412ccc4fffbcd07187e4b0016bbedb1a22adf7bcd8eb4c78823a7e3cf32b9f",
|
||||
"sha256:1442d68d81b5fd61e98fbb19be1bf6fe845bc0550fc37660d415f7f7bd7cfe27",
|
||||
"sha256:1f1f9bf8a097f3c2436028be563ba6fbce75cb48c1a7142c67e935fd8b63ae07",
|
||||
"sha256:20c2333f45497452adf803dbc24aedd471303d22942cc26b3806bbd7ca668608",
|
||||
"sha256:21d7687a9377b05d112580f13f6b03555a2da1555e44c592902026bc14a98989",
|
||||
"sha256:22dc2201250b665771669093894311991d6517f92a78efb2d63dae2353132180",
|
||||
"sha256:27488b7a015077ccf800db536fc52d0fd870c7493f92db7f5f27e3150ac4c3f9",
|
||||
"sha256:28bce6656db6552ae05d6d1117793ee19113b23923a47586f684d9b0a13da0e8",
|
||||
"sha256:2ba2866a42a31b0aaab292f141f6b535cca47983786ed38f0ab7e128c0c70d27",
|
||||
"sha256:2bbb2bb8af94128cb05361c6d8dd3cdca240e8c02920d6723e93b7d8c127b9d7",
|
||||
"sha256:2f0096855d931023c23846537b53c1af3f070ac2cb71a44a516fb80550516167",
|
||||
"sha256:30cf465a427d0264e2e71b8cb75d606eca00090b4eeadf9ac18f691e032b89c7",
|
||||
"sha256:3541f78103dab48a43326c4fe47a6175c21b76cf8104f58d8a9822fc6f54fd6d",
|
||||
"sha256:364372ebcc1770abd35c6a67e0716d3419117d536e1383baed45de364ecfaace",
|
||||
"sha256:384ce0c40ae635f6cb9f3b653bbf6e93f10207a98d51301805a37a0a47d168da",
|
||||
"sha256:39b0e9641ca70efa6f7ff725afda83e3eb4a84b1a97d0c38aa13abe5622c4e1d",
|
||||
"sha256:406eaf4bb7e5354f5d3f5e1d34f7afd1d971696798cba88e65a53971b5d557e7",
|
||||
"sha256:429256f888ce0d61066f070ad696ded9c6d62a8570aef6b683356f9ca0d8f9c0",
|
||||
"sha256:452ddb98b1ccf738dc722d3ce7fa7640c8f7345d68dc077c383fb141e35b88da",
|
||||
"sha256:46841aed0b414aabbedc9d0df4d0568833c5c6c29d58a4550575a4a4b6365206",
|
||||
"sha256:469abb3e01556e608f4931bf4217af575c51fbf2e3b05067b6ab2f24ae59015b",
|
||||
"sha256:5382de2408dc5e66cf397558f47fa99c19c0b52082453350d952ae371150b8f1",
|
||||
"sha256:55f299cc8ee717951cb5ba866d85ab2d6c083965d47f4568b340591a2145136c",
|
||||
"sha256:5797c32db7acc41402b0c999f4f0cf1ed7ffdd9df2b2d84bc754e59c644999d0",
|
||||
"sha256:58020a57d49c6baf142c6891fc932cdc7474020841eb624918ab3a5af4694a47",
|
||||
"sha256:5809a30c8bdb68831cc7c00cc260b3a3e8185b04516058394717f90d9f00f428",
|
||||
"sha256:594ceb310e99d9fe0d3e74361841cc535561ef52a79c0aaa8b6d640d11f43eb2",
|
||||
"sha256:5c589dc2bb48e6229f6fddf0f86634534b24f19960273475429e3ba690118a96",
|
||||
"sha256:5c91a06dad5cb73127b0ef4e1befff836f65244278372a94751367dfb0a80af5",
|
||||
"sha256:5e334220158e3789fb1c7e67ca200ade1d17c70ddd1373dc1d39d5808645905f",
|
||||
"sha256:5efd518c27b63f74c59f79aa9e3892f6d18cef9fc400be3bb05a12b90896a97e",
|
||||
"sha256:632d331ba0de878e5a8a4fe4a3bc7a68225dcd87ba87a429ee92434535d057ca",
|
||||
"sha256:64d04cc1fd7cc2e02e770db9f9ddde69d95f6385a17f135642a1d9b15d6ca326",
|
||||
"sha256:6a307e7bc6df85f3b1b54f62ce0dc2f784115b839d8d2d949705a11e2b0ad517",
|
||||
"sha256:6aea9a2bf0c66ca9a966c9198949c1efdf6a61c4e00d42cb4f3047d4b3b0eb3e",
|
||||
"sha256:6f568fd0b0adc4f152aaa58493ab88543289ee30a2b5a1d20cbc63cae12fe3c5",
|
||||
"sha256:70910ffadb8f10e69a9a379cd4712ab41785957f6b739cfe3c9c14146eae1fcd",
|
||||
"sha256:7112cf79212c5634f6af1e15e26998690cd6e4393243fd62570702efb224dc54",
|
||||
"sha256:74cb4e173de02d78bca5e21e0ed433df880f4e976104e49a559ee430545f6bbb",
|
||||
"sha256:759a6742b72045cfdf188d3af7058dc8a8d63e47b265c344a2a68dc40d156bf3",
|
||||
"sha256:7709c097d60518d0be59504020b4549694ffd01c2bccb583bf489a3de8f54da8",
|
||||
"sha256:7bd659d782bb5b5ef84fbfcd57cdef19c4178a4c83bb0dc82b5e7d5157d17d15",
|
||||
"sha256:81248399ee082aecaa6b5c5019063826c5bd80c6bbb39a67952f7cbeffa24fd9",
|
||||
"sha256:82eff8cecd2744c5c9becc0c60fd15b8d96f272e358dcb27c993d138ff09e650",
|
||||
"sha256:82fdeb5754a772d8ed7d67982a3f64fb9b1eb0b3fb6daf7a061921eefba23326",
|
||||
"sha256:8524228411e312f19afb417d3dae4e34a2f4f7094fb992aa93b9413111fd1765",
|
||||
"sha256:86650998b4d0d08795429ee1814342833896989d65d8dc1deb9a544cd2d38434",
|
||||
"sha256:88e784397d44c14c70af472e7e0d5e141d8ec67a406aaa1e465ed0e0a0b62dd1",
|
||||
"sha256:897f8534a384ab10e11140c0852f1397af2d8d7c064b50eb41a1c6973da95a2a",
|
||||
"sha256:8b1c159806c6967c8e2d32bb2d9f99f610071777f84133be5479ce1b318330b7",
|
||||
"sha256:8b9e409f0eca16f3fbbf31f0d6e50b1779a88c8b8c550acc92604b2e3bca1450",
|
||||
"sha256:8fb78a9da81674b13df0ebf7b299897b0aa734a944028b639743225c6aa4caac",
|
||||
"sha256:90adaebc95819ed5fdb84881ae9083867cc5fd646c665433fd19459eb1ef1f7c",
|
||||
"sha256:90c6ba0134a9217ee6dfed91a0020aa9d0366d27b1bbee63e6ed8b1f46ee813f",
|
||||
"sha256:92a80fce259648ba939c4783064c0245ad841881d73db9da9c4877d6c6ccc4e7",
|
||||
"sha256:9398dfc696cdc45a9dcdd1c50051c5e259014d99482857ebea164201fafdbad0",
|
||||
"sha256:93c3f8feb95e599d1a1b87291b0c14693775512bdda4bf95dcef83c5d80e9c69",
|
||||
"sha256:9444ae9f8982b584ae2dbbecdd510189de577e879f794619afc62b5ea9109d26",
|
||||
"sha256:94e6005e98ef5defb6c7aa3d7010723cb8faf3cf878b919241c9a857f95ad7e3",
|
||||
"sha256:950f4d162338f3c6223875d8eeb097b8ca76a5716664777594ef3b755bfdb936",
|
||||
"sha256:9676a20a7fa05463e143bb6c2a479f0c4530ef9f81c0d1af764452f0ee3640c3",
|
||||
"sha256:96ea440ff46d5f05d79e09582007b4d887111dcbf971900a9c40e8de83e48d2d",
|
||||
"sha256:97401f7465dcba52da29d63718b2b69e2ca9b51cee64bdf0ae79279ebf100250",
|
||||
"sha256:9aff233d66cb08f5fb4bab34bffc6007b71acff508607e723ebea3d0ec78236e",
|
||||
"sha256:a4cf7e9f9a2f1194178864de70c7e152b0f07fa23ea3a8dcbcf35e8399403477",
|
||||
"sha256:a5ee5b7eddc642595b648edf0ee9af5f997ded3e5cda4345b2a8de01766ccdb6",
|
||||
"sha256:a719b276cacea63b28ab1d5de0f136a26732a7bedc7b5ef1a0c5a5747d852b42",
|
||||
"sha256:a7c6fb7a1f1ffcd266ededfe3dec5bf68989ada9fedb238a3260d020386ea81c",
|
||||
"sha256:a8ee704fee7e60767bcc91ac510a87ee551e2eb85e01a1353e67d8c3add0ce2a",
|
||||
"sha256:aac39b8f1a9d0eea4e275ab2c4c45afc8221718b06444b12fc3ee4acb65ff7ce",
|
||||
"sha256:ab3c9783fb8a1b4362a6e7ce242e3c0a0e9ba4f372a678ad1802bb6199864d74",
|
||||
"sha256:b1b7909ca28e332979006692af9e3079e0e6fe883f0726201b67271e45f7871a",
|
||||
"sha256:b1e71df87ee24b45b1e680d6efa75cacafc488d861285a983adf348576d264e7",
|
||||
"sha256:b4355d5f9edba434ef2a474d3fbfd91821be54e86b959ab12ccb1b48c9a872fe",
|
||||
"sha256:b7441803def1be9cf6e1f42d550f2ec37b459aa854cea4da5ecc8e03a9b52ed8",
|
||||
"sha256:b8525cd88dba52b55ce5a4efaaaa05378c596ff6ec1ee7a500cca9fac12a001d",
|
||||
"sha256:bd7453845bfcb5e3af55206184da28af2a5beb8eaf5196dc2da81a7ba90fc12c",
|
||||
"sha256:bd84d94e8422e14292f1acc8edcc7deaee313eb7475c113ba77a16c0ac384160",
|
||||
"sha256:beb673830e1c8db01861cab2df06af51480091d69063d028d6f77557fa58eb05",
|
||||
"sha256:c04a350059667d5fa6768e0f2b2ae874ccf402309d8132dceacdf8a92f9a5bd9",
|
||||
"sha256:c39c6bc7a502778d860b5f8b09fe72c4c9d75a073233ffc5dee96df3290d9d16",
|
||||
"sha256:c5e6b7fcbcaa08a8b59ff6b17162fde443d61ede8f8165bd67fa5719032ecd5e",
|
||||
"sha256:c626104ecf59907976ccccc8d47f0e07e3c2b1c45b21efcc84c71f96643b0f81",
|
||||
"sha256:c89596795f24d9e3041867e8d801caeb46f0cf94e858f1820d71c185818c10ab",
|
||||
"sha256:c94a85e46b3b9039d630bfcf8f0656dd205e921cad285d483940a2b0e79eabea",
|
||||
"sha256:cc2715ddadd685f674329a7aa48e5fdbbb96346d6f61981027e1cf4c70632067",
|
||||
"sha256:ced7da1c042fe086674bcd28817516fb858617af5a547862621f94827fe70d2f",
|
||||
"sha256:d16dd99a8c8ca55e446633c6346fc4de30a4eff5eaf0d8376db95965e5acaf8f",
|
||||
"sha256:d2420b2ee2d68ce56f4c22fb471f738006ec0977e3666a21a9aaf441d963c38c",
|
||||
"sha256:d36ec72d063c4f1ea46b1d83f2fcdf63ba18c201a128f552e06d5f385f80e6f2",
|
||||
"sha256:d442b6575a1e002adfb1c99ae3002632ab2fdb4859150fdac1414974805e5fb7",
|
||||
"sha256:d55001960b1d9a6455e81804fbf6542b3d57b92c91166e55549eda52da9f3af0",
|
||||
"sha256:d5c93042513df889a4fe05c9dbf5c47c7a5a05c54cc8a0094d685a9199efbd39",
|
||||
"sha256:d6e678a71f8125bade49683ad60fa9798f8502d35eef2a93f13a5684bfe534b4",
|
||||
"sha256:d71eae5c6c72f003e1303ce73f76f7a765e5d5cd216a4aae1c2e7711ba4c0dd2",
|
||||
"sha256:d9330aed86005d00339e65aca95cfe388e0d5b91a0fe063da8032be51b083130",
|
||||
"sha256:dbfeee33abe68c7c0952c3d9076e31056aba9a0877339dd85683dd63742f5e95",
|
||||
"sha256:dc918fc4d88643763304f18a9742cbdff45b9163dc5e4cb3a38e2accedb67c5e",
|
||||
"sha256:df4f548fed26561c53cc0a8a19432b0f74e0837484b4b06bbe5eb951abbb4c06",
|
||||
"sha256:e0c37d6ab63df496d01ecadf957a74879285ed7a7f6500af3c14e09c073a2c9b",
|
||||
"sha256:e22567f2533350f5d7ddafb76b5f5449867a44d8bbc85fb82cf27dde08f05eee",
|
||||
"sha256:e229fddb8e5dc7696a438cf72e279540ea281c2dae56b93c7c91bae14d812a93",
|
||||
"sha256:e3468a3b8509648cf4d92ebc05fe94261330829137f225621b4778796b067c68",
|
||||
"sha256:e6f670d9df62fa3b3fe724ee837950d855929617a854348846a9b5975096eb7d",
|
||||
"sha256:e859101d682399a72cd1d96b0cfcb7110c054b870f0389d86e014161a21cdcdd",
|
||||
"sha256:e85cd01a583a02e5bda920e69d7dd425eba0ac9a6ff5be5c40abff8c2aa3b0fa",
|
||||
"sha256:e8e6c4025878cd3e97af3eecfabfa088a17798cf8dbf42b60b57c81f494586a3",
|
||||
"sha256:f4a3215d5ecab101e0e9752d4aec6935ab45a82f6f0282283307bbab495c9677",
|
||||
"sha256:f4f6dc39723048aa6d4816bb52e8ed50b5886b5ae92c3d6b4a7d62e6cf544779",
|
||||
"sha256:f51de3798f4f056a9dc27d8a845fcf1b317fa7eb30b33753e0b3190208b68a57",
|
||||
"sha256:f5d48146117c3f6e16a0d4da0a4607a3d148894cc248ab6af4bd1832c6d4eac6",
|
||||
"sha256:f77023f210edf75764b3392d5b58736bfe42c80546e3f1b8e7bad182fdc4685d",
|
||||
"sha256:f93192935e2cef0cc4eb675c2b2a0ec8e68a8efac890259351c8d7802a7193fe",
|
||||
"sha256:f9411294f7bb8d842c348aae59aa5b33ad8e76ce4a3a4ad9665d8fd04e018c0a",
|
||||
"sha256:fcb910e843e119bbe90f3898d5a95d1d0f452bb88b29614f76015b9b15fa5753",
|
||||
"sha256:fed7cf6605bbdb310395d81cc8abb4403ed88ae1f3c37256445e9c01ea073eab",
|
||||
"sha256:ffd652318c2b483b4321a06c74ffe9281d8b795c996abcf6d6010129729f652e"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.6.8"
|
||||
"markers": "python_version ~= '3.7'",
|
||||
"version": "==1.6.9"
|
||||
},
|
||||
"pysubs2": {
|
||||
"hashes": [
|
||||
|
|
@ -1060,11 +1072,11 @@
|
|||
},
|
||||
"python-engineio": {
|
||||
"hashes": [
|
||||
"sha256:a0c47c129c39777e8ebc6d18011efd50db2144e4e8f08983acae8a3614626535",
|
||||
"sha256:f42a36a868d7063aa10ddccf6bd6117a169b6bd00d7ca53999772093b62014f9"
|
||||
"sha256:9ec20d7900def0886fb9621f86fd1f05140d407f8d4e6a51bef0cfba2d112ff7",
|
||||
"sha256:9f2b5a645c416208a9c727254316d487252493de52bee0ff70dc29ca9210397e"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==4.12.0"
|
||||
"version": "==4.12.1"
|
||||
},
|
||||
"python-magic": {
|
||||
"hashes": [
|
||||
|
|
@ -1345,12 +1357,12 @@
|
|||
},
|
||||
"yt-dlp": {
|
||||
"hashes": [
|
||||
"sha256:53cd82bf13f12a1fe9c564b0004e001156b153c9247fa3cef14d1400ab359150",
|
||||
"sha256:d01367d0c3ae94e35cb1e2eccb7a7c70e181c4ca448f4ee2374f26489d263603"
|
||||
"sha256:a49c4b76afeaded6254c3e2b759d8d5a13271aa963d5fccb51fe059d1c313151",
|
||||
"sha256:ea73854c5dabc124f29a35a8fae9bc5d422ef3231bebeea2bdfa82ac191a9c29"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.9'",
|
||||
"version": "==2025.4.30"
|
||||
"version": "==2025.5.22"
|
||||
}
|
||||
},
|
||||
"develop": {}
|
||||
|
|
|
|||
|
|
@ -132,8 +132,9 @@ The engine which powers the actual video downloads in YTPTube is [yt-dlp](https:
|
|||
sites regularly change their layouts, frequent updates of yt-dlp are required to keep up.
|
||||
|
||||
We have added `YTP_YTDLP_AUTO_UPDATE` environment, which allows you to automatically update yt-dlp to the latest version.
|
||||
To get latest version, simply set the environment variable to `true` and restart the container. Now, whenever you restart
|
||||
the container, it will check for the latest version of yt-dlp and update it if a new version is available.
|
||||
To get latest version, It's enabled by default and whenever you start the container, it will check for the latest
|
||||
version of yt-dlp and update it if a new version is available. To disable this feature, set the environment variable
|
||||
`YTP_YTDLP_AUTO_UPDATE` to `false`.
|
||||
|
||||
We will no longer release new versions of YTPTube for every new version of yt-dlp.
|
||||
|
||||
|
|
@ -288,5 +289,5 @@ Certain configuration values can be set via environment variables, using the `-e
|
|||
| YTP_BASIC_MODE | Whether to run WebUI in basic mode | `false` |
|
||||
| YTP_PICTURES_BACKENDS | A comma separated list of pictures urls to use. | `empty string` |
|
||||
| YTP_BROWSER_ENABLED | Whether to enable the file browser | `false` |
|
||||
| YTP_YTDLP_AUTO_UPDATE | Whether to enable the auto update for yt-dlp | `false` |
|
||||
| YTP_YTDLP_AUTO_UPDATE | Whether to enable the auto update for yt-dlp | `true` |
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ from .Utils import (
|
|||
get_file_sidecar,
|
||||
get_files,
|
||||
get_mime_type,
|
||||
load_cookies,
|
||||
read_logfile,
|
||||
validate_url,
|
||||
validate_uuid,
|
||||
|
|
@ -1698,103 +1697,6 @@ class HttpAPI(Common):
|
|||
LOG.exception(e)
|
||||
return web.json_response(data={"error": str(e)}, status=web.HTTPInternalServerError.status_code)
|
||||
|
||||
@route("GET", "api/youtube/auth")
|
||||
async def is_authenticated(self, _: Request) -> Response:
|
||||
"""
|
||||
Check if the user cookies are valid.
|
||||
|
||||
Args:
|
||||
request (Request): The request object.
|
||||
|
||||
Returns:
|
||||
Response: The response object
|
||||
|
||||
"""
|
||||
ytdlp_args = self.config.get_ytdlp_args()
|
||||
|
||||
c_request = {}
|
||||
c_request_file = os.path.join(self.config.config_path, "check_cookie_request.json")
|
||||
if os.path.exists(c_request_file):
|
||||
async with await anyio.open_file(c_request_file, "r", encoding="utf-8") as f:
|
||||
try:
|
||||
c_request = json.loads(await f.read())
|
||||
except json.JSONDecodeError as e:
|
||||
LOG.error(f"Failed to load '{c_request_file}'. '{e!s}'.")
|
||||
LOG.exception(e)
|
||||
return web.json_response(
|
||||
data={"message": "Failed to load cookie request file. Check logs for more details."},
|
||||
status=web.HTTPInternalServerError.status_code,
|
||||
)
|
||||
|
||||
cookie_file = c_request.get("cookie_file", None)
|
||||
if not cookie_file:
|
||||
cookie_file = ytdlp_args.get("cookiefile", None)
|
||||
if not cookie_file:
|
||||
return web.json_response(
|
||||
data={"message": "No cookie file provided."}, status=web.HTTPNotFound.status_code
|
||||
)
|
||||
|
||||
if not os.path.exists(cookie_file):
|
||||
return web.json_response(
|
||||
data={"message": f"Cookie file '{cookie_file}' does not exist."}, status=web.HTTPNotFound.status_code
|
||||
)
|
||||
|
||||
try:
|
||||
_, cookies = load_cookies(cookie_file)
|
||||
except ValueError as e:
|
||||
LOG.error(f"Failed to load cookies from '{cookie_file}'. '{e!s}'.")
|
||||
LOG.exception(e)
|
||||
return web.json_response(
|
||||
data={"message": "Failed to load cookies. Check logs for more details."},
|
||||
status=web.HTTPInternalServerError.status_code,
|
||||
)
|
||||
|
||||
url = c_request.get("url", "https://www.youtube.com/paid_memberships")
|
||||
|
||||
try:
|
||||
opts = {}
|
||||
if c_request.get("proxy"):
|
||||
opts["proxy"] = c_request.get("proxy")
|
||||
|
||||
try:
|
||||
c_status = c_request.get("status", [200])
|
||||
if isinstance(c_status, int):
|
||||
c_status = [c_status]
|
||||
if not isinstance(c_status, list):
|
||||
c_status = [200]
|
||||
except Exception:
|
||||
c_status = [200]
|
||||
|
||||
async with httpx.AsyncClient(**opts) as client:
|
||||
if "user-agent" in client.headers:
|
||||
client.headers.pop("user-agent")
|
||||
|
||||
LOG.info(f"Checking '{url}' to validate if cookies are valid.")
|
||||
response = await client.request(
|
||||
method=c_request.get("method", "GET"),
|
||||
url=url,
|
||||
data=c_request.get("data", None),
|
||||
json=c_request.get("json", None),
|
||||
params=c_request.get("params", None),
|
||||
headers=c_request.get("headers", None),
|
||||
cookies=cookies,
|
||||
follow_redirects=bool(c_request.get("follow_redirects", False)),
|
||||
)
|
||||
|
||||
valid = response.status_code in c_status
|
||||
|
||||
return web.json_response(
|
||||
data={"message": "Authenticated." if valid else "Not authenticated."},
|
||||
status=web.HTTPOk.status_code if valid else web.HTTPUnauthorized.status_code,
|
||||
)
|
||||
except Exception as e:
|
||||
LOG.error(f"Failed to request '{url}'. '{e!s}'.")
|
||||
LOG.exception(e)
|
||||
return web.json_response(
|
||||
data={"message": "Failed to check cookies status. Check logs for more details."},
|
||||
status=web.HTTPInternalServerError.status_code,
|
||||
)
|
||||
|
||||
@route("GET", "api/notifications")
|
||||
async def notifications(self, _: Request) -> Response:
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ class Preset:
|
|||
name: str
|
||||
"""The name of the preset."""
|
||||
|
||||
description: str = ""
|
||||
"""The description of the preset."""
|
||||
|
||||
folder: str = ""
|
||||
"""The default download folder to use if non is given."""
|
||||
|
||||
|
|
@ -37,6 +40,7 @@ class Preset:
|
|||
"""yt-dlp cli command line arguments."""
|
||||
|
||||
default: bool = False
|
||||
"""If True, the preset is a default preset."""
|
||||
|
||||
def serialize(self) -> dict:
|
||||
return self.__dict__
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ class Config:
|
|||
browser_enabled: bool = False
|
||||
"Enable file browser access."
|
||||
|
||||
ytdlp_auto_update: bool = False
|
||||
ytdlp_auto_update: bool = True
|
||||
"""Enable in-place auto update of yt-dlp package."""
|
||||
|
||||
ytdlp_cli: str = ""
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
{
|
||||
"id": "3e163c6c-64eb-4448-924f-814b629b3810",
|
||||
"name": "default",
|
||||
"description": "",
|
||||
"folder": "",
|
||||
"template": "",
|
||||
"cookies": "",
|
||||
|
|
@ -11,6 +12,7 @@
|
|||
{
|
||||
"id": "5bf9c42b-8852-468a-99f5-915622dfba25",
|
||||
"name": "Best video and audio",
|
||||
"description": "",
|
||||
"folder": "",
|
||||
"template": "",
|
||||
"cookies": "",
|
||||
|
|
@ -20,6 +22,7 @@
|
|||
{
|
||||
"id": "441675ed-b739-40f0-a0b0-1ecfcb9dc48b",
|
||||
"name": "1080p H264/m4a or best available",
|
||||
"description": "",
|
||||
"folder": "",
|
||||
"template": "",
|
||||
"cookies": "",
|
||||
|
|
@ -29,6 +32,7 @@
|
|||
{
|
||||
"id": "9719fcc3-4cf2-4d88-b1e4-74dff3dba00e",
|
||||
"name": "720p h264/m4a or best available",
|
||||
"description": "",
|
||||
"folder": "",
|
||||
"template": "",
|
||||
"cookies": "",
|
||||
|
|
@ -38,10 +42,21 @@
|
|||
{
|
||||
"id": "a6fd4b25-2b3e-458d-bb57-b75e41cc4330",
|
||||
"name": "Audio only",
|
||||
"description": "",
|
||||
"folder": "",
|
||||
"template": "",
|
||||
"cookies": "",
|
||||
"cli": "--extract-audio --add-chapters --embed-metadata --embed-thumbnail --format 'bestaudio/best'",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"id": "2ade2c28-cad4-4a06-b7eb-2439fdf46f60",
|
||||
"name": "ytdlp-info-reader",
|
||||
"description": "This preset generate specific filename format and metadata to work with yt-dlp info reader plugins for jellyfin/emby and plex and to make play state sync work for WatchState.\n\nThere is one more step you need to do via Other > Terminal if you have it enabled or directly from container shell\n\nyt-dlp -I0 --write-info-json --write-thumbnail --convert-thumbnails jpg --paths /downloads/youtube -o \"%(channel|Unknown_title)s [%(channel_id|Unknown_id)s]/%(title).180B [%(channel_id|Unknown_id)s].%(ext)s\" -- https://www.youtube.com/channel/UCClfFsWcT3N2I7VTXXyt84A\n\nChange the url to the channel you want to download.\n\nFor more information please visit \nhttps://github.com/arabcoders/watchstate/blob/master/FAQ.md#how-to-get-watchstate-working-with-youtube-contentlibrary",
|
||||
"folder": "youtube",
|
||||
"template": "%(channel)s %(channel_id|Unknown_id)s/Season %(release_date>%Y,upload_date>%Y|Unknown)s/%(release_date>%Y%m%d,upload_date>%Y%m%d)s - %(title).180B [%(extractor)s-%(id)s].%(ext)s",
|
||||
"cookies": "",
|
||||
"cli": "--windows-filenames --write-info-json --embed-info-json \n--convert-thumbnails jpg --write-thumbnail --embed-metadata",
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class Upgrader:
|
|||
|
||||
pkg_installer = PackageInstaller()
|
||||
|
||||
ytdlp_auto_update: bool = os.environ.get("YTP_YTDLP_AUTO_UPDATE", "false").strip().lower() == "true"
|
||||
ytdlp_auto_update: bool = os.environ.get("YTP_YTDLP_AUTO_UPDATE", "true").strip().lower() == "true"
|
||||
|
||||
if ytdlp_auto_update:
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -317,3 +317,15 @@ hr {
|
|||
.is-full-height {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.is-ellipsis {
|
||||
max-width: calc(100% - 10px);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
.is-max-width {
|
||||
max-width: calc(100% - 10px);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<main class="columns mt-2">
|
||||
<div class="column">
|
||||
<div class="column is-12">
|
||||
<form autocomplete="off" @submit.prevent="addDownload">
|
||||
<div class="box">
|
||||
<div class="columns is-multiline is-mobile">
|
||||
|
|
@ -76,6 +76,13 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column is-12" v-if="get_preset(form.preset)?.description">
|
||||
<div class="is-overflow-auto" style="max-height: 150px;">
|
||||
<div class="is-ellipsis is-clickable" @click="expand_description">
|
||||
<span class="icon"><i class="fa-solid fa-info" /></span> {{ get_preset(form.preset)?.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns is-multiline is-mobile" v-if="showAdvanced && !config.app.basic_mode">
|
||||
<div class="column is-12">
|
||||
<div class="field">
|
||||
|
|
@ -324,4 +331,7 @@ const hasFormatInConfig = computed(() => {
|
|||
})
|
||||
|
||||
const filter_presets = (flag = true) => config.presets.filter(item => item.default === flag)
|
||||
const get_preset = name => config.presets.find(item => item.name === name)
|
||||
const expand_description = e => toggleClass(e.target, ['is-ellipsis', 'is-pre-wrap'])
|
||||
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-12">
|
||||
<div class="column is-6-tablet is-12-mobile">
|
||||
<div class="field">
|
||||
<label class="label is-inline" for="folder">
|
||||
<span class="icon"><i class="fa-solid fa-folder" /></span>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-12">
|
||||
<div class="column is-6-tablet is-12-mobile">
|
||||
<div class="field">
|
||||
<label class="label is-inline" for="output_template">
|
||||
<span class="icon"><i class="fa-solid fa-file" /></span>
|
||||
|
|
@ -104,7 +104,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-12">
|
||||
<div class="column is-6-tablet is-12-mobile">
|
||||
<div class="field">
|
||||
<label class="label is-inline" for="cli_options">
|
||||
<span class="icon"><i class="fa-solid fa-terminal" /></span>
|
||||
|
|
@ -125,7 +125,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-12">
|
||||
<div class="column is-6-tablet is-12-mobile">
|
||||
<div class="field">
|
||||
<label class="label is-inline" for="cookies" v-tooltip="'Netscape HTTP Cookie format.'">
|
||||
<span class="icon"><i class="fa-solid fa-cookie" /></span>
|
||||
|
|
@ -146,6 +146,22 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column">
|
||||
<div class="field">
|
||||
<label class="label is-inline" for="description">
|
||||
<span class="icon"><i class="fa-solid fa-comment" /></span>
|
||||
Description
|
||||
</label>
|
||||
<div class="control">
|
||||
<textarea class="textarea" id="description" v-model="form.description" :disabled="addInProgress"
|
||||
placeholder="Extras instructions for users to follow" />
|
||||
</div>
|
||||
<span class="help">
|
||||
<span class="icon"><i class="fa-solid fa-info" /></span>
|
||||
<span>Use this field to help users to understand how to use this preset.</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -342,11 +358,15 @@ const importItem = async () => {
|
|||
form.folder = item.folder
|
||||
}
|
||||
|
||||
if (item.description) {
|
||||
form.description = item.description
|
||||
}
|
||||
|
||||
import_string.value = ''
|
||||
showImport.value = false
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
toast.error(`Failed to parse string. ${e.message}`)
|
||||
toast.error(`Failed to parse. ${e.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@
|
|||
"web-types": "./web-types.json",
|
||||
"dependencies": {
|
||||
"@pinia/nuxt": "^0.11.0",
|
||||
"@sentry/nuxt": "^9.17.0",
|
||||
"@vueuse/core": "^13.1.0",
|
||||
"@vueuse/nuxt": "^13.1.0",
|
||||
"@sentry/nuxt": "^9.22.0",
|
||||
"@vueuse/core": "^13.2.0",
|
||||
"@vueuse/nuxt": "^13.2.0",
|
||||
"@xterm/addon-fit": "^0.10.0",
|
||||
"@xterm/xterm": "^5.5.0",
|
||||
"cron-parser": "^5.2.0",
|
||||
|
|
@ -22,12 +22,11 @@
|
|||
"floating-vue": "^5.2.2",
|
||||
"hls.js": "^1.6.2",
|
||||
"moment": "^2.30.1",
|
||||
"nuxt": "^3.17.2",
|
||||
"nuxt": "^3.17.4",
|
||||
"pinia": "^3.0.2",
|
||||
"socket.io-client": "^4.7.2",
|
||||
"vue": "^3.4",
|
||||
"socket.io-client": "^4.8.1",
|
||||
"vue": "^3.5.14",
|
||||
"vue-router": "^4.5.1",
|
||||
"vue-toastification": "^2.0.0-rc.5"
|
||||
},
|
||||
"devDependencies": {}
|
||||
"vue-toastification": "2.0.0-rc.5"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,14 +11,7 @@
|
|||
|
||||
<div class="is-pulled-right" v-if="socket.isConnected && false === config.app.basic_mode">
|
||||
<div class="field is-grouped">
|
||||
<p class="control" v-if="config.app.has_cookies">
|
||||
<button class="button is-purple" @click="checkCookies" v-tooltip.bottom="'Check youtube cookies status.'"
|
||||
:disabled="isChecking">
|
||||
<span class="icon"><i class="fas fa-cookie" :class="{ 'is-loading': isChecking }" /></span>
|
||||
</button>
|
||||
</p>
|
||||
|
||||
<p class="control">
|
||||
<p class="control" v-if="!config.app.basic_mode">
|
||||
<button class="button is-warning" @click="pauseDownload" v-if="false === config.paused"
|
||||
v-tooltip.bottom="'Pause non-active downloads.'">
|
||||
<span class="icon"><i class="fas fa-pause" /></span>
|
||||
|
|
@ -63,15 +56,12 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { request } from '~/utils/index'
|
||||
import { useStorage } from '@vueuse/core'
|
||||
|
||||
const emitter = defineEmits(['getInfo'])
|
||||
const config = useConfigStore()
|
||||
const stateStore = useStateStore()
|
||||
const socket = useSocketStore()
|
||||
const toast = useToast()
|
||||
const isChecking = ref(false)
|
||||
const get_info = ref('')
|
||||
const bg_enable = useStorage('random_bg', true)
|
||||
const bg_opacity = useStorage('random_bg_opacity', 0.85)
|
||||
|
|
@ -100,31 +90,6 @@ watch(() => stateStore.queue, () => {
|
|||
useHead({ title: `YTPTube: ( ${Object.keys(stateStore.queue).length || 0}/${config.app.max_workers} | ${Object.keys(stateStore.history).length || 0} )` })
|
||||
}, { deep: true })
|
||||
|
||||
const checkCookies = async () => {
|
||||
if (true === isChecking.value) {
|
||||
return
|
||||
}
|
||||
|
||||
if (false === confirm(`Check for cookies status?`)) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
isChecking.value = true
|
||||
const response = await request('/api/youtube/auth')
|
||||
const data = await response.json()
|
||||
if (response.ok) {
|
||||
toast.success('Succuss. ' + data.message)
|
||||
} else {
|
||||
toast.error('Failed. ' + data.message)
|
||||
}
|
||||
} catch (e) {
|
||||
toast.error('Failed to check cookies state. ' + e.message)
|
||||
} finally {
|
||||
isChecking.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const pauseDownload = () => {
|
||||
if (false === confirm('Are you sure you want to pause all non-active downloads?')) {
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -58,9 +58,9 @@ div.is-centered {
|
|||
<header class="card-header">
|
||||
<div class="card-header-title is-text-overflow is-block" v-text="item.name" />
|
||||
<div class="card-header-icon">
|
||||
<a class="has-text-primary" v-tooltip="'Export preset.'" @click.prevent="exportItem(item)">
|
||||
<button class="has-text-primary" v-tooltip="'Export preset.'" @click="exportItem(item)">
|
||||
<span class="icon"><i class="fa-solid fa-file-export" /></span>
|
||||
</a>
|
||||
</button>
|
||||
<button @click="item.raw = !item.raw">
|
||||
<span class="icon"><i class="fa-solid" :class="{
|
||||
'fa-arrow-down': !item?.raw,
|
||||
|
|
@ -87,11 +87,24 @@ div.is-centered {
|
|||
<span class="icon"><i class="fa-solid fa-cookie" /></span>
|
||||
<span>Has cookies</span>
|
||||
</p>
|
||||
<button @click="item.toggle_description = !item.toggle_description" v-if="item.description">
|
||||
<span class="icon"><i class="fa-solid"
|
||||
:class="{ 'fa-arrow-down': !item?.raw, 'fa-arrow-up': item?.raw, }" /></span>
|
||||
<span>{{ !item.toggle_description ? 'Show' : 'Hide' }} Description</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-content" v-if="item?.raw">
|
||||
<div class="content">
|
||||
<div class="card-content content m-1 p-1 is-overflow-auto" style="max-height: 300px;"
|
||||
v-if="item?.toggle_description">
|
||||
<div class="is-pre-wrap">{{ item.description }}</div>
|
||||
</div>
|
||||
<div class="card-content content is-overflow-auto m-0 p-0" v-if="item?.raw" style="max-height: 300px;">
|
||||
<div class="is-position-relative">
|
||||
<pre><code>{{ filterItem(item) }}</code></pre>
|
||||
<button class="button is-small is-primary is-position-absolute" style="top:0; right:0"
|
||||
@click="copyText(filterItem(item))">
|
||||
<span class="icon"><i class="fa-solid fa-copy" /></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer mt-auto">
|
||||
|
|
@ -276,13 +289,16 @@ const updateItem = async ({ reference, preset }) => {
|
|||
resetForm(true)
|
||||
}
|
||||
|
||||
const filterItem = (item) => {
|
||||
const { raw, ...rest } = item
|
||||
const filterItem = item => {
|
||||
const { raw, toggle_description, ...rest } = item
|
||||
if ("default" in rest) {
|
||||
delete rest.default
|
||||
}
|
||||
return JSON.stringify(rest, null, 2)
|
||||
}
|
||||
|
||||
const editItem = (item) => {
|
||||
preset.value = item
|
||||
const editItem = item => {
|
||||
preset.value = JSON.parse(filterItem(item))
|
||||
presetRef.value = item.id
|
||||
toggleForm.value = true
|
||||
}
|
||||
|
|
@ -291,7 +307,7 @@ onMounted(async () => (socket.isConnected ? await reloadContent(true) : ""))
|
|||
|
||||
const exportItem = item => {
|
||||
let data = JSON.parse(JSON.stringify(item))
|
||||
const keys = ["id", "default", "raw", "cookies"]
|
||||
const keys = ["id", "default", "raw", "cookies", "toggle_description"]
|
||||
keys.forEach(key => {
|
||||
if (key in data) {
|
||||
delete data[key]
|
||||
|
|
|
|||
9017
ui/pnpm-lock.yaml
Normal file
9017
ui/pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -2,57 +2,62 @@ const sources = [
|
|||
{
|
||||
name: 'youtube',
|
||||
url: 'https://www.youtube-nocookie.com/embed/',
|
||||
regex: /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:shorts\/|[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/,
|
||||
regex: /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:shorts\/|[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)(?<id>[a-zA-Z0-9_-]{11})/,
|
||||
},
|
||||
{
|
||||
name: "instagram",
|
||||
name: "instagram_post",
|
||||
url: "https://www.instagram.com/p/",
|
||||
regex: /https?:\/\/(?:www\.)?instagram\.com\/p\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:www\.)?instagram\.com\/p\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "instagram_story",
|
||||
url: "https://www.instagram.com/stories/highlights/",
|
||||
regex: /https?:\/\/(?:www\.)?instagram\.com\/stories\/highlights\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "twitter",
|
||||
url: "https://twitter.com/i/status/",
|
||||
regex: /https?:\/\/(?:www\.)?twitter\.com\/i\/status\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:www\.)?(twitter\.com|x\.com)\/.+?\/status\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "facebook",
|
||||
url: "https://www.facebook.com/plugins/post.php?href=",
|
||||
regex: /https?:\/\/(?:www\.)?facebook\.com\/(?:[^/?#&]+)\/posts\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:www\.)?facebook\.com\/(?:[^/?#&]+)\/posts\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "tiktok",
|
||||
url: "https://www.tiktok.com/embed/",
|
||||
regex: /https?:\/\/(?:www\.)?tiktok\.com\/(?:[^/?#&]+)\/video\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:www\.)?tiktok\.com\/(?:[^/?#&]+)\/video\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "vimeo",
|
||||
url: "https://player.vimeo.com/video/",
|
||||
regex: /https?:\/\/(?:www\.)?vimeo\.com\/(?:[^/?#&]+)\/([^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "soundcloud",
|
||||
url: "https://w.soundcloud.com/player/?url=",
|
||||
regex: /https?:\/\/(?:www\.)?soundcloud\.com\/(?:[^/?#&]+)\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:www\.)?vimeo\.com(?:\/[^/?#&]+)?\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "spotify",
|
||||
url: "https://open.spotify.com/embed/",
|
||||
regex: /https?:\/\/(?:open\.)?spotify\.com\/(?:[^/?#&]+)\/([^/?#&]+)/,
|
||||
regex: /https?:\/\/(?:open\.)?spotify\.com\/(?:[^/?#&]+)\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "twitch",
|
||||
url: "https://player.twitch.tv/?channel=",
|
||||
regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/([^/?#&]+)/,
|
||||
name: "twitch_vod",
|
||||
url: "https://player.twitch.tv/?parent={origin}&video=",
|
||||
regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "mixcloud",
|
||||
url: "https://www.mixcloud.com/widget/iframe/",
|
||||
regex: /https?:\/\/(?:www\.)?mixcloud\.com\/(?:[^/?#&]+)\/([^/?#&]+)/,
|
||||
name: "twitch_clip",
|
||||
url: "https://clips.twitch.tv/embed?parent={origin}&clip=",
|
||||
regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/clip\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "twitch_channel",
|
||||
url: "https://player.twitch.tv/?parent={origin}&channel=",
|
||||
regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "dailymotion",
|
||||
url: "https://www.dailymotion.com/embed/video/",
|
||||
regex: /https?:\/\/(?:www\.)?dailymotion\.com\/(?:[^/?#&]+)\/video\/([^/?#&]+)/,
|
||||
regex: /^.+dailymotion.com\/(video|hub)\/(?<id>[^_]+)[^#]*(#video=([^_&]+))?/,
|
||||
},
|
||||
]
|
||||
|
||||
|
|
@ -62,8 +67,13 @@ const isEmbedable = url => {
|
|||
|
||||
const getEmbedable = url => {
|
||||
const source = sources.find(source => source.regex.test(url));
|
||||
const id = source.regex.exec(url)[1];
|
||||
return source.url + id;
|
||||
if (!source) {
|
||||
return null;
|
||||
}
|
||||
|
||||
source.url.replace(/\{origin\}/g, window.location.origin);
|
||||
|
||||
return source.url + source.regex.exec(url)['groups'].id;
|
||||
}
|
||||
|
||||
export { isEmbedable, getEmbedable };
|
||||
|
|
|
|||
|
|
@ -460,6 +460,19 @@ const has_data = item => {
|
|||
return false
|
||||
}
|
||||
|
||||
const toggleClass = (target, className) => {
|
||||
if (Array.isArray(className)) {
|
||||
className.forEach(name => toggleClass(target, name))
|
||||
return;
|
||||
}
|
||||
|
||||
if (target.classList.contains(className)) {
|
||||
target.classList.remove(className)
|
||||
return;
|
||||
}
|
||||
target.classList.add(className)
|
||||
}
|
||||
|
||||
export {
|
||||
ag_set,
|
||||
ag,
|
||||
|
|
@ -485,4 +498,5 @@ export {
|
|||
base64UrlEncode,
|
||||
base64UrlDecode,
|
||||
has_data,
|
||||
toggleClass,
|
||||
}
|
||||
|
|
|
|||
7142
ui/yarn.lock
7142
ui/yarn.lock
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue