mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-03-13 08:10:56 +03:00
Compare commits
3 Commits
ui-updates
...
docker-hot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4ca1abb7c | ||
|
|
d90434c240 | ||
|
|
7a8e94ee64 |
4
.github/workflows/docker-pr.yml
vendored
4
.github/workflows/docker-pr.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
|
platforms: linux/amd64,linux/arm,linux/arm64/v8
|
||||||
#platforms: linux/amd64
|
#platforms: linux/amd64
|
||||||
push: false
|
push: false
|
||||||
tags: tzahi12345/youtubedl-material:nightly-pr
|
tags: tzahi12345/youtubedl-material:nightly-pr
|
||||||
4
.github/workflows/docker-release.yml
vendored
4
.github/workflows/docker-release.yml
vendored
@@ -80,7 +80,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64/v8
|
platforms: linux/amd64,linux/arm,linux/arm64/v8
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
5
.github/workflows/docker.yml
vendored
5
.github/workflows/docker.yml
vendored
@@ -80,7 +80,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64,linux/arm64/v8
|
platforms: linux/amd64,linux/arm,linux/arm64/v8
|
||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|||||||
66
Dockerfile
66
Dockerfile
@@ -1,17 +1,15 @@
|
|||||||
# Fetching our utils
|
# Fetching our ffmpeg
|
||||||
FROM ubuntu:22.04 AS utils
|
FROM ubuntu:22.04 AS ffmpeg
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
# Use script due local build compability
|
# Use script due local build compability
|
||||||
COPY docker-utils/*.sh .
|
COPY docker-utils/ffmpeg-fetch.sh .
|
||||||
RUN chmod +x *.sh
|
RUN chmod +x ffmpeg-fetch.sh
|
||||||
RUN sh ./ffmpeg-fetch.sh
|
RUN sh ./ffmpeg-fetch.sh
|
||||||
RUN sh ./fetch-twitchdownloader.sh
|
|
||||||
|
|
||||||
|
|
||||||
# Create our Ubuntu 22.04 with node 16.14.2 (that specific version is required as per: https://stackoverflow.com/a/72855258/8088021)
|
# Create our Ubuntu 22.04 with node 16.14.2 (that specific version is required as per: https://stackoverflow.com/a/72855258/8088021)
|
||||||
# Go to 20.04
|
# Go to 20.04
|
||||||
FROM ubuntu:22.04 AS base
|
FROM ubuntu:20.04 AS base
|
||||||
ARG TARGETPLATFORM
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ENV UID=1000
|
ENV UID=1000
|
||||||
ENV GID=1000
|
ENV GID=1000
|
||||||
@@ -19,30 +17,19 @@ ENV USER=youtube
|
|||||||
ENV NO_UPDATE_NOTIFIER=true
|
ENV NO_UPDATE_NOTIFIER=true
|
||||||
ENV PM2_HOME=/app/pm2
|
ENV PM2_HOME=/app/pm2
|
||||||
ENV ALLOW_CONFIG_MUTATIONS=true
|
ENV ALLOW_CONFIG_MUTATIONS=true
|
||||||
# Directy fetch specific version
|
|
||||||
## https://deb.nodesource.com/node_16.x/pool/main/n/nodejs/nodejs_16.14.2-deb-1nodesource1_amd64.deb
|
|
||||||
RUN groupadd -g $GID $USER && useradd --system -m -g $USER --uid $UID $USER && \
|
RUN groupadd -g $GID $USER && useradd --system -m -g $USER --uid $UID $USER && \
|
||||||
apt update && \
|
apt update && \
|
||||||
apt install -y --no-install-recommends curl ca-certificates tzdata libicu70 && \
|
apt install -y --no-install-recommends curl ca-certificates tzdata && \
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
|
||||||
|
apt install -y --no-install-recommends nodejs && \
|
||||||
|
npm -g install npm n && \
|
||||||
|
n 16.14.2 && \
|
||||||
apt clean && \
|
apt clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
RUN case ${TARGETPLATFORM} in \
|
|
||||||
"linux/amd64") NODE_ARCH=amd64 ;; \
|
|
||||||
"linux/arm") NODE_ARCH=armhf ;; \
|
|
||||||
"linux/arm/v7") NODE_ARCH=armhf ;; \
|
|
||||||
"linux/arm64") NODE_ARCH=arm64 ;; \
|
|
||||||
esac \
|
|
||||||
&& curl -L https://deb.nodesource.com/node_16.x/pool/main/n/nodejs/nodejs_16.14.2-deb-1nodesource1_$NODE_ARCH.deb -o ./nodejs.deb && \
|
|
||||||
apt update && \
|
|
||||||
apt install -y ./nodejs.deb && \
|
|
||||||
apt clean && \
|
|
||||||
rm -rf /var/lib/apt/lists/* &&\
|
|
||||||
rm nodejs.deb;
|
|
||||||
|
|
||||||
|
|
||||||
# Build frontend
|
# Build frontend
|
||||||
ARG BUILDPLATFORM
|
FROM base as frontend
|
||||||
FROM --platform=${BUILDPLATFORM} node:16 as frontend
|
|
||||||
RUN npm install -g @angular/cli
|
RUN npm install -g @angular/cli
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
COPY [ "package.json", "package-lock.json", "angular.json", "tsconfig.json", "/build/" ]
|
COPY [ "package.json", "package-lock.json", "angular.json", "tsconfig.json", "/build/" ]
|
||||||
@@ -62,35 +49,32 @@ RUN npm config set strict-ssl false && \
|
|||||||
npm install --prod && \
|
npm install --prod && \
|
||||||
ls -al
|
ls -al
|
||||||
|
|
||||||
#FROM base as python
|
FROM base as python
|
||||||
# armv7 need build from source
|
WORKDIR /app
|
||||||
#WORKDIR /app
|
COPY docker-utils/GetTwitchDownloader.py .
|
||||||
#COPY docker-utils/GetTwitchDownloader.py .
|
RUN apt update && \
|
||||||
#RUN apt update && \
|
apt install -y --no-install-recommends python3-minimal python-is-python3 python3-pip python3.8-dev build-essential && \
|
||||||
# apt install -y --no-install-recommends python3-minimal python-is-python3 python3-pip python3-dev build-essential libffi-dev && \
|
apt clean && \
|
||||||
# apt clean && \
|
rm -rf /var/lib/apt/lists/*
|
||||||
# rm -rf /var/lib/apt/lists/*
|
RUN pip install PyGithub requests
|
||||||
#RUN pip install PyGithub requests
|
RUN python GetTwitchDownloader.py
|
||||||
#RUN python GetTwitchDownloader.py
|
|
||||||
|
|
||||||
# Final image
|
# Final image
|
||||||
FROM base
|
FROM base
|
||||||
RUN npm install -g pm2 && \
|
RUN npm install -g pm2 && \
|
||||||
apt update && \
|
apt update && \
|
||||||
apt install -y --no-install-recommends gosu python3-minimal python-is-python3 python3-pip atomicparsley build-essential && \
|
apt install -y --no-install-recommends gosu python3-minimal python-is-python3 python3-pip atomicparsley build-essential && \
|
||||||
pip install pycryptodomex && \
|
|
||||||
apt remove -y --purge build-essential && \
|
|
||||||
apt autoremove -y --purge && \
|
|
||||||
apt clean && \
|
apt clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
RUN pip install pycryptodomex
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
# User 1000 already exist from base image
|
# User 1000 already exist from base image
|
||||||
COPY --chown=$UID:$GID --from=utils [ "/usr/local/bin/ffmpeg", "/usr/local/bin/ffmpeg" ]
|
COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffmpeg", "/usr/local/bin/ffmpeg" ]
|
||||||
COPY --chown=$UID:$GID --from=utils [ "/usr/local/bin/ffprobe", "/usr/local/bin/ffprobe" ]
|
COPY --chown=$UID:$GID --from=ffmpeg [ "/usr/local/bin/ffprobe", "/usr/local/bin/ffprobe" ]
|
||||||
COPY --chown=$UID:$GID --from=utils [ "/usr/local/bin/TwitchDownloaderCLI", "/usr/local/bin/TwitchDownloaderCLI"]
|
|
||||||
COPY --chown=$UID:$GID --from=backend ["/app/","/app/"]
|
COPY --chown=$UID:$GID --from=backend ["/app/","/app/"]
|
||||||
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]
|
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]
|
||||||
#COPY --chown=$UID:$GID --from=python ["/app/TwitchDownloaderCLI","/usr/local/bin/TwitchDownloaderCLI"]
|
COPY --chown=$UID:$GID --from=python ["/app/TwitchDownloaderCLI","/usr/local/bin/TwitchDownloaderCLI"]
|
||||||
|
RUN chown $UID:$GID .
|
||||||
RUN chmod +x /app/fix-scripts/*.sh
|
RUN chmod +x /app/fix-scripts/*.sh
|
||||||
# Add some persistence data
|
# Add some persistence data
|
||||||
#VOLUME ["/app/appdata"]
|
#VOLUME ["/app/appdata"]
|
||||||
|
|||||||
@@ -2742,7 +2742,7 @@ components:
|
|||||||
error:
|
error:
|
||||||
type: string
|
type: string
|
||||||
schedule:
|
schedule:
|
||||||
$ref: '#/components/schemas/Schedule'
|
type: object
|
||||||
options:
|
options:
|
||||||
type: object
|
type: object
|
||||||
Schedule:
|
Schedule:
|
||||||
@@ -2877,7 +2877,6 @@ components:
|
|||||||
- sharing
|
- sharing
|
||||||
- advanced_download
|
- advanced_download
|
||||||
- downloads_manager
|
- downloads_manager
|
||||||
- tasks_manager
|
|
||||||
YesNo:
|
YesNo:
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
|
|||||||
@@ -68,7 +68,14 @@ exports.initialize = function () {
|
|||||||
const setupRoles = async () => {
|
const setupRoles = async () => {
|
||||||
const required_roles = {
|
const required_roles = {
|
||||||
admin: {
|
admin: {
|
||||||
permissions: consts.AVAILABLE_PERMISSIONS
|
permissions: [
|
||||||
|
'filemanager',
|
||||||
|
'settings',
|
||||||
|
'subscriptions',
|
||||||
|
'sharing',
|
||||||
|
'advanced_download',
|
||||||
|
'downloads_manager'
|
||||||
|
]
|
||||||
},
|
},
|
||||||
user: {
|
user: {
|
||||||
permissions: [
|
permissions: [
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
CMD="npm start && pm2 start"
|
CMD="npm start"
|
||||||
|
|
||||||
# if the first arg starts with "-" pass it to program
|
# if the first arg starts with "-" pass it to program
|
||||||
if [ "${1#-}" != "$1" ]; then
|
if [ "${1#-}" != "$1" ]; then
|
||||||
@@ -10,7 +10,7 @@ fi
|
|||||||
|
|
||||||
# chown current working directory to current user
|
# chown current working directory to current user
|
||||||
if [ "$*" = "$CMD" ] && [ "$(id -u)" = "0" ]; then
|
if [ "$*" = "$CMD" ] && [ "$(id -u)" = "0" ]; then
|
||||||
find . \! -user "$UID" -exec chown "$UID:$GID" -R '{}' + || echo "WARNING! Could not change directory ownership. If you manage permissions externally this is fine, otherwise you may experience issues when downloading or deleting videos."
|
find . \! -user "$UID" -exec chown "$UID:$GID" '{}' + || echo "WARNING! Could not change directory ownership. If you manage permissions externally this is fine, otherwise you may experience issues when downloading or deleting videos."
|
||||||
exec gosu "$UID:$GID" "$0" "$@"
|
exec gosu "$UID:$GID" "$0" "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
5
backend/package-lock.json
generated
5
backend/package-lock.json
generated
@@ -769,11 +769,6 @@
|
|||||||
"delayed-stream": "~1.0.0"
|
"delayed-stream": "~1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"command-exists": {
|
|
||||||
"version": "1.2.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
|
|
||||||
"integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
|
|
||||||
},
|
|
||||||
"compress-commons": {
|
"compress-commons": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz",
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
"async-mutex": "^0.4.0",
|
"async-mutex": "^0.4.0",
|
||||||
"axios": "^0.21.2",
|
"axios": "^0.21.2",
|
||||||
"bcryptjs": "^2.4.0",
|
"bcryptjs": "^2.4.0",
|
||||||
"command-exists": "^1.2.9",
|
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"config": "^3.2.3",
|
"config": "^3.2.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ const fs = require('fs-extra')
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { promisify } = require('util');
|
const { promisify } = require('util');
|
||||||
const child_process = require('child_process');
|
const child_process = require('child_process');
|
||||||
const commandExistsSync = require('command-exists').sync;
|
|
||||||
|
|
||||||
async function getCommentsForVOD(vodId) {
|
async function getCommentsForVOD(vodId) {
|
||||||
const exec = promisify(child_process.exec);
|
const exec = promisify(child_process.exec);
|
||||||
@@ -21,7 +20,7 @@ async function getCommentsForVOD(vodId) {
|
|||||||
const cliExt = is_windows ? '.exe' : ''
|
const cliExt = is_windows ? '.exe' : ''
|
||||||
const cliPath = `TwitchDownloaderCLI${cliExt}`
|
const cliPath = `TwitchDownloaderCLI${cliExt}`
|
||||||
|
|
||||||
if (!commandExistsSync(cliPath)) {
|
if (!fs.existsSync(cliPath)) {
|
||||||
logger.error(`${cliPath} does not exist. Twitch chat download failed! Get it here: https://github.com/lay295/TwitchDownloader`);
|
logger.error(`${cliPath} does not exist. Twitch chat download failed! Get it here: https://github.com/lay295/TwitchDownloader`);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ def getZipName():
|
|||||||
|
|
||||||
def getLatestFileInRepo(repo, search_string):
|
def getLatestFileInRepo(repo, search_string):
|
||||||
# Create an unauthenticated instance of the Github object
|
# Create an unauthenticated instance of the Github object
|
||||||
g = Github(os.environ.get('GH_TOKEN'))
|
gh_token = os.environ.get('GH_TOKEN')
|
||||||
|
g = Github(gh_token if gh_token else None) # ensure it's none if it's falsy
|
||||||
|
|
||||||
# Replace with the repository owner and name
|
# Replace with the repository owner and name
|
||||||
repo = g.get_repo(repo)
|
repo = g.get_repo(repo)
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# THANK YOU TALULAH (https://github.com/nottalulah) for your help in figuring this out
|
|
||||||
# and also optimizing some code with this commit.
|
|
||||||
# xoxo :D
|
|
||||||
|
|
||||||
case $(uname -m) in
|
|
||||||
x86_64)
|
|
||||||
ARCH=Linux-x64;;
|
|
||||||
aarch64)
|
|
||||||
ARCH=LinuxArm64;;
|
|
||||||
armhf)
|
|
||||||
ARCH=LinuxArm;;
|
|
||||||
armv7)
|
|
||||||
ARCH=LinuxArm;;
|
|
||||||
armv7l)
|
|
||||||
ARCH=LinuxArm;;
|
|
||||||
*)
|
|
||||||
echo "Unsupported architecture: $(uname -m)"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "(INFO) Architecture detected: $ARCH"
|
|
||||||
echo "(1/5) READY - Install unzip"
|
|
||||||
apt-get update && apt-get -y install unzip curl jq libicu70
|
|
||||||
VERSION=$(curl --silent "https://api.github.com/repos/lay295/TwitchDownloader/releases" | jq -r --arg arch "$ARCH" '[.[] | select(.assets | length > 0) | select(.assets[].name | contains("CLI") and contains($arch))] | max_by(.published_at) | .tag_name')
|
|
||||||
echo "(2/5) DOWNLOAD - Acquire twitchdownloader"
|
|
||||||
curl -o twitchdownloader.zip \
|
|
||||||
--connect-timeout 5 \
|
|
||||||
--max-time 120 \
|
|
||||||
--retry 5 \
|
|
||||||
--retry-delay 0 \
|
|
||||||
--retry-max-time 40 \
|
|
||||||
-L "https://github.com/lay295/TwitchDownloader/releases/download/$VERSION/TwitchDownloaderCLI-$VERSION-$ARCH.zip"
|
|
||||||
unzip twitchdownloader.zip
|
|
||||||
chmod +x TwitchDownloaderCLI
|
|
||||||
echo "(3/5) Smoke test"
|
|
||||||
./TwitchDownloaderCLI --help
|
|
||||||
cp ./TwitchDownloaderCLI /usr/local/bin/TwitchDownloaderCLI
|
|
||||||
@@ -30,7 +30,7 @@ curl -o ffmpeg.txz \
|
|||||||
--retry 5 \
|
--retry 5 \
|
||||||
--retry-delay 0 \
|
--retry-delay 0 \
|
||||||
--retry-max-time 40 \
|
--retry-max-time 40 \
|
||||||
"https://johnvansickle.com/ffmpeg/old-releases/ffmpeg-5.1.1-${ARCH}-static.tar.xz"
|
"https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-${ARCH}-static.tar.xz"
|
||||||
mkdir /tmp/ffmpeg
|
mkdir /tmp/ffmpeg
|
||||||
tar xf ffmpeg.txz -C /tmp/ffmpeg
|
tar xf ffmpeg.txz -C /tmp/ffmpeg
|
||||||
echo "(3/5) CLEANUP - Remove temp dependencies from ffmpeg obtain layer"
|
echo "(3/5) CLEANUP - Remove temp dependencies from ffmpeg obtain layer"
|
||||||
|
|||||||
@@ -5,4 +5,4 @@
|
|||||||
export type AddFileToPlaylistRequest = {
|
export type AddFileToPlaylistRequest = {
|
||||||
file_uid: string;
|
file_uid: string;
|
||||||
playlist_id: string;
|
playlist_id: string;
|
||||||
};
|
};
|
||||||
@@ -13,4 +13,4 @@ export type Archive = {
|
|||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
uid: string;
|
uid: string;
|
||||||
};
|
};
|
||||||
@@ -8,4 +8,4 @@ import type { YesNo } from './YesNo';
|
|||||||
export type BaseChangePermissionsRequest = {
|
export type BaseChangePermissionsRequest = {
|
||||||
permission: UserPermission;
|
permission: UserPermission;
|
||||||
new_value: YesNo;
|
new_value: YesNo;
|
||||||
};
|
};
|
||||||
@@ -12,4 +12,4 @@ export type Category = {
|
|||||||
* Overrides file output for downloaded files in category
|
* Overrides file output for downloaded files in category
|
||||||
*/
|
*/
|
||||||
custom_output?: string;
|
custom_output?: string;
|
||||||
};
|
};
|
||||||
@@ -22,4 +22,4 @@ export namespace CategoryRule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,4 @@ import type { BaseChangePermissionsRequest } from './BaseChangePermissionsReques
|
|||||||
|
|
||||||
export type ChangeRolePermissionsRequest = (BaseChangePermissionsRequest & {
|
export type ChangeRolePermissionsRequest = (BaseChangePermissionsRequest & {
|
||||||
role: string;
|
role: string;
|
||||||
});
|
});
|
||||||
@@ -6,4 +6,4 @@ import type { BaseChangePermissionsRequest } from './BaseChangePermissionsReques
|
|||||||
|
|
||||||
export type ChangeUserPermissionsRequest = (BaseChangePermissionsRequest & {
|
export type ChangeUserPermissionsRequest = (BaseChangePermissionsRequest & {
|
||||||
user_uid: string;
|
user_uid: string;
|
||||||
});
|
});
|
||||||
@@ -7,4 +7,4 @@ export type CheckConcurrentStreamRequest = {
|
|||||||
* UID of the concurrent stream
|
* UID of the concurrent stream
|
||||||
*/
|
*/
|
||||||
uid: string;
|
uid: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { ConcurrentStream } from './ConcurrentStream';
|
|||||||
|
|
||||||
export type CheckConcurrentStreamResponse = {
|
export type CheckConcurrentStreamResponse = {
|
||||||
stream: ConcurrentStream;
|
stream: ConcurrentStream;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ export type ClearDownloadsRequest = {
|
|||||||
clear_finished?: boolean;
|
clear_finished?: boolean;
|
||||||
clear_paused?: boolean;
|
clear_paused?: boolean;
|
||||||
clear_errors?: boolean;
|
clear_errors?: boolean;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ export type ConcurrentStream = {
|
|||||||
playback_timestamp?: number;
|
playback_timestamp?: number;
|
||||||
unix_timestamp?: number;
|
unix_timestamp?: number;
|
||||||
playing?: boolean;
|
playing?: boolean;
|
||||||
};
|
};
|
||||||
@@ -3,5 +3,5 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
export type Config = {
|
export type Config = {
|
||||||
YoutubeDLMaterial: Record<string, any>;
|
YoutubeDLMaterial: any;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { Config } from './Config';
|
|||||||
export type ConfigResponse = {
|
export type ConfigResponse = {
|
||||||
config_file: Config;
|
config_file: Config;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type CreateCategoryRequest = {
|
export type CreateCategoryRequest = {
|
||||||
name: string;
|
name: string;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { Category } from './Category';
|
|||||||
export type CreateCategoryResponse = {
|
export type CreateCategoryResponse = {
|
||||||
new_category?: Category;
|
new_category?: Category;
|
||||||
success?: boolean;
|
success?: boolean;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ export type CreatePlaylistRequest = {
|
|||||||
playlistName: string;
|
playlistName: string;
|
||||||
uids: Array<string>;
|
uids: Array<string>;
|
||||||
thumbnailURL: string;
|
thumbnailURL: string;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { Playlist } from './Playlist';
|
|||||||
export type CreatePlaylistResponse = {
|
export type CreatePlaylistResponse = {
|
||||||
new_playlist: Playlist;
|
new_playlist: Playlist;
|
||||||
success: boolean;
|
success: boolean;
|
||||||
};
|
};
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
export type CropFileSettings = {
|
export type CropFileSettings = {
|
||||||
cropFileStart: number;
|
cropFileStart: number;
|
||||||
cropFileEnd: number;
|
cropFileEnd: number;
|
||||||
};
|
};
|
||||||
@@ -17,4 +17,4 @@ export namespace DBBackup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -16,4 +16,4 @@ roles?: TableInfo;
|
|||||||
download_queue?: TableInfo;
|
download_queue?: TableInfo;
|
||||||
archives?: TableInfo;
|
archives?: TableInfo;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -42,4 +42,4 @@ export type DatabaseFile = {
|
|||||||
*/
|
*/
|
||||||
abr?: number;
|
abr?: number;
|
||||||
favorite: boolean;
|
favorite: boolean;
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type DeleteAllFilesResponse = {
|
|||||||
* Number of files removed
|
* Number of files removed
|
||||||
*/
|
*/
|
||||||
delete_count?: number;
|
delete_count?: number;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Archive } from './Archive';
|
|||||||
|
|
||||||
export type DeleteArchiveItemsRequest = {
|
export type DeleteArchiveItemsRequest = {
|
||||||
archives: Array<Archive>;
|
archives: Array<Archive>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type DeleteCategoryRequest = {
|
export type DeleteCategoryRequest = {
|
||||||
category_uid: string;
|
category_uid: string;
|
||||||
};
|
};
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
export type DeleteMp3Mp4Request = {
|
export type DeleteMp3Mp4Request = {
|
||||||
uid: string;
|
uid: string;
|
||||||
blacklistMode?: boolean;
|
blacklistMode?: boolean;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type DeleteNotificationRequest = {
|
export type DeleteNotificationRequest = {
|
||||||
uid: string;
|
uid: string;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type DeletePlaylistRequest = {
|
export type DeletePlaylistRequest = {
|
||||||
playlist_id: string;
|
playlist_id: string;
|
||||||
};
|
};
|
||||||
@@ -8,4 +8,4 @@ export type DeleteSubscriptionFileRequest = {
|
|||||||
* If true, does not remove id from archive. Only valid if youtube-dl archive is enabled in settings.
|
* If true, does not remove id from archive. Only valid if youtube-dl archive is enabled in settings.
|
||||||
*/
|
*/
|
||||||
deleteForever?: boolean;
|
deleteForever?: boolean;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type DeleteUserRequest = {
|
export type DeleteUserRequest = {
|
||||||
uid: string;
|
uid: string;
|
||||||
};
|
};
|
||||||
@@ -26,5 +26,5 @@ export type Download = {
|
|||||||
user_uid?: string;
|
user_uid?: string;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
sub_name?: string;
|
sub_name?: string;
|
||||||
prefetched_info?: Record<string, any>;
|
prefetched_info?: any;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { FileType } from './FileType';
|
|||||||
export type DownloadArchiveRequest = {
|
export type DownloadArchiveRequest = {
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type DownloadFileRequest = {
|
|||||||
playlist_id?: string;
|
playlist_id?: string;
|
||||||
url?: string;
|
url?: string;
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
};
|
};
|
||||||
@@ -49,4 +49,4 @@ export type DownloadRequest = {
|
|||||||
* If using youtube-dl archive, download will ignore it
|
* If using youtube-dl archive, download will ignore it
|
||||||
*/
|
*/
|
||||||
ignoreArchive?: boolean;
|
ignoreArchive?: boolean;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Download } from './Download';
|
|||||||
|
|
||||||
export type DownloadResponse = {
|
export type DownloadResponse = {
|
||||||
download?: Download;
|
download?: Download;
|
||||||
};
|
};
|
||||||
@@ -20,4 +20,4 @@ export type DownloadTwitchChatByVODIDRequest = {
|
|||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
sub?: Subscription;
|
sub?: Subscription;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { TwitchChatMessage } from './TwitchChatMessage';
|
|||||||
|
|
||||||
export type DownloadTwitchChatByVODIDResponse = {
|
export type DownloadTwitchChatByVODIDResponse = {
|
||||||
chat: Array<TwitchChatMessage>;
|
chat: Array<TwitchChatMessage>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type DownloadVideosForSubscriptionRequest = {
|
export type DownloadVideosForSubscriptionRequest = {
|
||||||
subID: string;
|
subID: string;
|
||||||
};
|
};
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
export enum FileType {
|
export enum FileType {
|
||||||
AUDIO = 'audio',
|
AUDIO = 'audio',
|
||||||
VIDEO = 'video',
|
VIDEO = 'video',
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,4 @@ export enum FileTypeFilter {
|
|||||||
AUDIO_ONLY = 'audio_only',
|
AUDIO_ONLY = 'audio_only',
|
||||||
VIDEO_ONLY = 'video_only',
|
VIDEO_ONLY = 'video_only',
|
||||||
BOTH = 'both',
|
BOTH = 'both',
|
||||||
}
|
}
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GenerateArgsResponse = {
|
export type GenerateArgsResponse = {
|
||||||
args?: Array<string>;
|
args?: Array<string>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GenerateNewApiKeyResponse = {
|
export type GenerateNewApiKeyResponse = {
|
||||||
new_api_key: string;
|
new_api_key: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Category } from './Category';
|
|||||||
|
|
||||||
export type GetAllCategoriesResponse = {
|
export type GetAllCategoriesResponse = {
|
||||||
categories: Array<Category>;
|
categories: Array<Category>;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ export type GetAllDownloadsRequest = {
|
|||||||
* Filters downloads with the array
|
* Filters downloads with the array
|
||||||
*/
|
*/
|
||||||
uids?: Array<string> | null;
|
uids?: Array<string> | null;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Download } from './Download';
|
|||||||
|
|
||||||
export type GetAllDownloadsResponse = {
|
export type GetAllDownloadsResponse = {
|
||||||
downloads?: Array<Download>;
|
downloads?: Array<Download>;
|
||||||
};
|
};
|
||||||
@@ -21,4 +21,4 @@ export type GetAllFilesRequest = {
|
|||||||
* Include if you want to filter by subscription
|
* Include if you want to filter by subscription
|
||||||
*/
|
*/
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type GetAllFilesResponse = {
|
|||||||
* All video playlists
|
* All video playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Subscription } from './Subscription';
|
|||||||
|
|
||||||
export type GetAllSubscriptionsResponse = {
|
export type GetAllSubscriptionsResponse = {
|
||||||
subscriptions: Array<Subscription>;
|
subscriptions: Array<Subscription>;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Task } from './Task';
|
|||||||
|
|
||||||
export type GetAllTasksResponse = {
|
export type GetAllTasksResponse = {
|
||||||
tasks?: Array<Task>;
|
tasks?: Array<Task>;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { FileType } from './FileType';
|
|||||||
export type GetArchivesRequest = {
|
export type GetArchivesRequest = {
|
||||||
type?: FileType;
|
type?: FileType;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Archive } from './Archive';
|
|||||||
|
|
||||||
export type GetArchivesResponse = {
|
export type GetArchivesResponse = {
|
||||||
archives: Array<Archive>;
|
archives: Array<Archive>;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { DBBackup } from './DBBackup';
|
|||||||
|
|
||||||
export type GetDBBackupsResponse = {
|
export type GetDBBackupsResponse = {
|
||||||
tasks?: Array<DBBackup>;
|
tasks?: Array<DBBackup>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GetDownloadRequest = {
|
export type GetDownloadRequest = {
|
||||||
download_uid: string;
|
download_uid: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Download } from './Download';
|
|||||||
|
|
||||||
export type GetDownloadResponse = {
|
export type GetDownloadResponse = {
|
||||||
download?: Download;
|
download?: Download;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GetFileFormatsRequest = {
|
export type GetFileFormatsRequest = {
|
||||||
url?: string;
|
url?: string;
|
||||||
};
|
};
|
||||||
@@ -5,6 +5,6 @@
|
|||||||
export type GetFileFormatsResponse = {
|
export type GetFileFormatsResponse = {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
result: {
|
result: {
|
||||||
formats?: Array<Record<string, any>>;
|
formats?: Array<any>;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
@@ -14,4 +14,4 @@ export type GetFileRequest = {
|
|||||||
* User UID
|
* User UID
|
||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ import type { DatabaseFile } from './DatabaseFile';
|
|||||||
export type GetFileResponse = {
|
export type GetFileResponse = {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
file?: DatabaseFile;
|
file?: DatabaseFile;
|
||||||
};
|
};
|
||||||
@@ -16,4 +16,4 @@ export type GetFullTwitchChatRequest = {
|
|||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
sub?: Subscription;
|
sub?: Subscription;
|
||||||
};
|
};
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
export type GetFullTwitchChatResponse = {
|
export type GetFullTwitchChatResponse = {
|
||||||
success: boolean;
|
success: boolean;
|
||||||
error?: string;
|
error?: string;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GetLogsRequest = {
|
export type GetLogsRequest = {
|
||||||
lines?: number;
|
lines?: number;
|
||||||
};
|
};
|
||||||
@@ -8,4 +8,4 @@ export type GetLogsResponse = {
|
|||||||
*/
|
*/
|
||||||
logs?: string;
|
logs?: string;
|
||||||
success?: boolean;
|
success?: boolean;
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type GetMp3sResponse = {
|
|||||||
* All audio playlists
|
* All audio playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type GetMp4sResponse = {
|
|||||||
* All video playlists
|
* All video playlists
|
||||||
*/
|
*/
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Notification } from './Notification';
|
|||||||
|
|
||||||
export type GetNotificationsResponse = {
|
export type GetNotificationsResponse = {
|
||||||
notifications?: Array<Notification>;
|
notifications?: Array<Notification>;
|
||||||
};
|
};
|
||||||
@@ -9,4 +9,4 @@ export type GetPlaylistRequest = {
|
|||||||
type?: FileType;
|
type?: FileType;
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
include_file_metadata?: boolean;
|
include_file_metadata?: boolean;
|
||||||
};
|
};
|
||||||
@@ -12,4 +12,4 @@ export type GetPlaylistResponse = {
|
|||||||
* File objects for every uid in the playlist's uids property, in the same order
|
* File objects for every uid in the playlist's uids property, in the same order
|
||||||
*/
|
*/
|
||||||
file_objs?: Array<DatabaseFile>;
|
file_objs?: Array<DatabaseFile>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GetPlaylistsRequest = {
|
export type GetPlaylistsRequest = {
|
||||||
include_categories?: boolean;
|
include_categories?: boolean;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Playlist } from './Playlist';
|
|||||||
|
|
||||||
export type GetPlaylistsResponse = {
|
export type GetPlaylistsResponse = {
|
||||||
playlists: Array<Playlist>;
|
playlists: Array<Playlist>;
|
||||||
};
|
};
|
||||||
@@ -13,4 +13,4 @@ user?: {
|
|||||||
permissions?: Array<UserPermission>;
|
permissions?: Array<UserPermission>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -11,4 +11,4 @@ export type GetSubscriptionRequest = {
|
|||||||
* Subscription name
|
* Subscription name
|
||||||
*/
|
*/
|
||||||
name?: string;
|
name?: string;
|
||||||
};
|
};
|
||||||
@@ -6,5 +6,5 @@ import type { Subscription } from './Subscription';
|
|||||||
|
|
||||||
export type GetSubscriptionResponse = {
|
export type GetSubscriptionResponse = {
|
||||||
subscription: Subscription;
|
subscription: Subscription;
|
||||||
files: Array<Record<string, any>>;
|
files: Array<any>;
|
||||||
};
|
};
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type GetTaskRequest = {
|
export type GetTaskRequest = {
|
||||||
task_key: string;
|
task_key: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { Task } from './Task';
|
|||||||
|
|
||||||
export type GetTaskResponse = {
|
export type GetTaskResponse = {
|
||||||
task?: Task;
|
task?: Task;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { User } from './User';
|
|||||||
|
|
||||||
export type GetUsersResponse = {
|
export type GetUsersResponse = {
|
||||||
users: Array<User>;
|
users: Array<User>;
|
||||||
};
|
};
|
||||||
@@ -8,4 +8,4 @@ export type ImportArchiveRequest = {
|
|||||||
archive: string;
|
archive: string;
|
||||||
type: FileType;
|
type: FileType;
|
||||||
sub_id?: string;
|
sub_id?: string;
|
||||||
};
|
};
|
||||||
@@ -9,4 +9,4 @@ export type IncrementViewCountRequest = {
|
|||||||
* User UID
|
* User UID
|
||||||
*/
|
*/
|
||||||
uuid?: string;
|
uuid?: string;
|
||||||
};
|
};
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
export type LoginRequest = {
|
export type LoginRequest = {
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
};
|
};
|
||||||
@@ -10,4 +10,4 @@ export type LoginResponse = {
|
|||||||
token?: string;
|
token?: string;
|
||||||
permissions?: Array<UserPermission>;
|
permissions?: Array<UserPermission>;
|
||||||
available_permissions?: Array<UserPermission>;
|
available_permissions?: Array<UserPermission>;
|
||||||
};
|
};
|
||||||
@@ -11,6 +11,6 @@ export type Notification = {
|
|||||||
user_uid?: string;
|
user_uid?: string;
|
||||||
action?: Array<NotificationAction>;
|
action?: Array<NotificationAction>;
|
||||||
read: boolean;
|
read: boolean;
|
||||||
data?: Record<string, any>;
|
data?: any;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
};
|
};
|
||||||
@@ -7,4 +7,4 @@ export enum NotificationAction {
|
|||||||
RETRY_DOWNLOAD = 'retry_download',
|
RETRY_DOWNLOAD = 'retry_download',
|
||||||
VIEW_DOWNLOAD_ERROR = 'view_download_error',
|
VIEW_DOWNLOAD_ERROR = 'view_download_error',
|
||||||
VIEW_TASKS = 'view_tasks',
|
VIEW_TASKS = 'view_tasks',
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,4 @@ export enum NotificationType {
|
|||||||
DOWNLOAD_COMPLETE = 'download_complete',
|
DOWNLOAD_COMPLETE = 'download_complete',
|
||||||
DOWNLOAD_ERROR = 'download_error',
|
DOWNLOAD_ERROR = 'download_error',
|
||||||
TASK_FINISHED = 'task_finished',
|
TASK_FINISHED = 'task_finished',
|
||||||
}
|
}
|
||||||
@@ -15,4 +15,4 @@ export type Playlist = {
|
|||||||
user_uid?: string;
|
user_uid?: string;
|
||||||
auto?: boolean;
|
auto?: boolean;
|
||||||
sharingEnabled?: boolean;
|
sharingEnabled?: boolean;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ export type RegisterRequest = {
|
|||||||
userid: string;
|
userid: string;
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { User } from './User';
|
|||||||
|
|
||||||
export type RegisterResponse = {
|
export type RegisterResponse = {
|
||||||
user?: User;
|
user?: User;
|
||||||
};
|
};
|
||||||
@@ -6,4 +6,4 @@ import type { SuccessObject } from './SuccessObject';
|
|||||||
|
|
||||||
export type RestartDownloadResponse = (SuccessObject & {
|
export type RestartDownloadResponse = (SuccessObject & {
|
||||||
new_download_uid?: string;
|
new_download_uid?: string;
|
||||||
});
|
});
|
||||||
@@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
export type RestoreDBBackupRequest = {
|
export type RestoreDBBackupRequest = {
|
||||||
file_name: string;
|
file_name: string;
|
||||||
};
|
};
|
||||||
@@ -21,4 +21,4 @@ export namespace Schedule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user