Compare commits

...

44 Commits

Author SHA1 Message Date
Isaac Abadi
a36761e96a Fixed frontend build error 2022-05-01 23:24:15 -04:00
Isaac Abadi
88c16d7195 All setIntervals on the frontend are now properly destroyed 2022-05-01 23:23:19 -04:00
Isaac Abadi
8a323f028d Fixed bug where subscription avatars were missing 2022-05-01 23:15:09 -04:00
Isaac Abadi
a68726e7cb Removed deprecated armhf.Dockerfile 2022-05-01 23:13:11 -04:00
Isaac Abadi
dab0b7a8b6 Updated Angular version in readme 2022-05-01 23:13:00 -04:00
Isaac Abadi
9f9054ed9d Removed secrets from docker-pr.yml 2022-05-01 22:59:55 -04:00
Isaac Abadi
4c06c430eb Converted docker-compose build to docker build for docker-pr GH action 2022-05-01 21:21:39 -04:00
Isaac Abadi
2981f843c3 Added docker build PR check 2022-05-01 21:11:21 -04:00
Isaac Abadi
3a48ff2d50 docker build and push action now uses secrets for DockerHub username, repo, and tag 2022-05-01 21:11:01 -04:00
Glassed Silver
ac2c3dc8a1 Merge pull request #588 from GlassedSilver/master
removing strict SSL from npm config
2022-05-02 03:00:39 +02:00
GlassedSilver
0abe252d1e we need to find a different build check solution 2022-05-02 02:59:25 +02:00
GlassedSilver
f5f00e1732 fix name 2022-05-02 02:12:10 +02:00
GlassedSilver
c309e41a91 Merge branch 'master' of https://github.com/GlassedSilver/YoutubeDL-Material into master 2022-05-02 02:09:44 +02:00
GlassedSilver
754d837059 adding docker-pr-check.yml 2022-05-02 02:09:37 +02:00
Glassed Silver
d5626f1dae Dockerfile: wget not needed 2022-05-01 23:29:51 +02:00
GlassedSilver
9c0733453a removing strict SSL from npm config 2022-05-01 23:00:01 +02:00
Glassed Silver
2a41028253 Update Dockerfile 2022-05-01 20:42:45 +02:00
Glassed Silver
67b2e480f8 Merge pull request #586 from dejan995/master
Clean up docker image
2022-05-01 19:38:39 +02:00
dejan.petrov@dapmn.com
2cdc1cee98 Fix for #585
Added the DEBIAN_FRONTEND=noninteractive variable to all stages. This should stop the build from failing.
Also added --no-install-recommends to install only the requested packages.
This might break stuff, but I'm not sure though.
2022-05-01 18:14:27 +02:00
dejan.petrov@dapmn.com
bd1ed2b705 Clean up docker image
Added some commands to clean up the image after apt-get does its thing.
It should shave off a couple of megabytes, nothing to big though.
2022-05-01 18:02:46 +02:00
Glassed Silver
33ca0f0817 Merge pull request #584 from GlassedSilver/master
wow that was a bunch of work, but...
2022-05-01 12:30:49 +02:00
GlassedSilver
d5ab0d7b96 I'm getting sleepy, why am I still pushing through 2022-05-01 11:54:19 +02:00
GlassedSilver
777aebe508 apparently we still need npm in the last stretch.. 2022-05-01 11:52:35 +02:00
GlassedSilver
efaecaa059 use yarn in apt installs instead of npm 2022-05-01 11:48:12 +02:00
GlassedSilver
39ddefab5c fix dependencies needed for our apt packages 2022-05-01 11:37:39 +02:00
GlassedSilver
60f2ab449f yea 2022-05-01 11:31:53 +02:00
GlassedSilver
958f80e200 the good? I learn a lot about Docker building 2022-05-01 11:28:34 +02:00
GlassedSilver
7aa5c1bf7f syyyyntax 2022-05-01 11:21:45 +02:00
GlassedSilver
3bcbe0d3e7 fix dependency node-gyp (>= 3.6.2~) needed 2022-05-01 11:04:59 +02:00
GlassedSilver
80fcecdaea it's a learning experience 2022-05-01 10:57:21 +02:00
GlassedSilver
0329cd9718 don't think we need to install curl twice lol 2022-05-01 10:51:20 +02:00
GlassedSilver
493e876a97 syntax fixes are fun 2022-05-01 10:48:27 +02:00
Glassed Silver
574edd74ab Merge pull request #583 from GlassedSilver/master
I did warn you I will test docker builds this way
2022-05-01 10:41:10 +02:00
GlassedSilver
fe91484f24 I did warn you I will test docker builds this way 2022-05-01 10:40:19 +02:00
Glassed Silver
dda6e40a42 Merge pull request #582 from GlassedSilver/master
fix docker-build.sh for ubuntu, what a ride
2022-05-01 10:16:03 +02:00
GlassedSilver
c0fb838931 fix docker-build.sh for ubuntu, what a ride 2022-05-01 10:11:32 +02:00
Glassed Silver
28924cc7a0 Merge pull request #581 from GlassedSilver/master
fix pipefail MIA in ubuntu without specifying bash
2022-05-01 09:36:27 +02:00
GlassedSilver
2527051eab fix pipefail MIA in ubuntu without specifying bash 2022-05-01 09:35:04 +02:00
Glassed Silver
fcf7d14f46 Merge pull request #580 from GlassedSilver/master
Fix for #480 - existing DLs still getting queued
2022-05-01 09:21:48 +02:00
GlassedSilver
0a8aba54d2 Fix for #480 - existing DLs still getting queued 2022-05-01 09:17:23 +02:00
Glassed Silver
2c6485acb2 Merge pull request #577 from GlassedSilver/master
Dockerfile uses Ubuntu 20.04, fix obtain ffmpeg
2022-05-01 09:14:13 +02:00
GlassedSilver
aea4f52267 revert postbuild.mjs file-extension change 2022-05-01 07:12:00 +02:00
GlassedSilver
5ac5fca482 adapt postbuild.mjs to postbuild.js 2022-05-01 06:37:12 +02:00
GlassedSilver
7874f1b71a curl is in fact missing in focal, my bad 2022-05-01 06:29:54 +02:00
11 changed files with 84 additions and 68 deletions

27
.github/workflows/docker-pr.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: docker-pr
on:
pull_request:
branches: [master]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: checkout code
uses: actions/checkout@v2
- name: Set hash
id: vars
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: create-json
id: create-json
uses: jsdaniell/create-json@1.1.2
with:
name: "version.json"
json: '{"type": "docker", "tag": "nightly", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
dir: 'backend/'
- name: Build docker images
run: docker build . -t tzahi12345/youtubedl-material:nightly-pr

View File

@@ -21,7 +21,7 @@ jobs:
uses: jsdaniell/create-json@1.1.2
with:
name: "version.json"
json: '{"type": "docker", "tag": "nightly", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
json: '{"type": "docker", "tag": "${{secrets.DOCKERHUB_MASTER_TAG}}", "commit": "${{ steps.vars.outputs.sha_short }}", "date": "${{ steps.date.outputs.date }}"}'
dir: 'backend/'
- name: setup platform emulator
uses: docker/setup-qemu-action@v1
@@ -39,4 +39,8 @@ jobs:
file: ./Dockerfile
platforms: linux/amd64,linux/arm,linux/arm64/v8
push: true
tags: tzahi12345/youtubedl-material:nightly
# Defaults:
# DOCKERHUB_USERNAME : tzahi12345
# DOCKERHUB_REPO : youtubedl-material
# DOCKERHUB_MASTER_TAG: nightly
tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPO }}:${{secrets.DOCKERHUB_MASTER_TAG}}

View File

@@ -1,5 +1,7 @@
FROM ubuntu:20.04 AS ffmpeg
ENV DEBIAN_FRONTEND=noninteractive
COPY docker-build.sh .
RUN sh ./docker-build.sh
@@ -7,12 +9,16 @@ FROM ubuntu:20.04 as frontend
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install \
wget \
curl \
gnupg && \
curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
apt-get -y install \
nodejs \
npm && \
# YARN: brings along npm, solves dependency conflicts,
# spares us this spaghetti approach: https://stackoverflow.com/a/60547197
yarn && \
apt-get install -f && \
npm config set strict-ssl false && \
npm install -g @angular/cli
WORKDIR /build
@@ -32,21 +38,29 @@ ENV UID=1000 \
USER=youtube \
NO_UPDATE_NOTIFIER=true
ENV DEBIAN_FRONTEND=noninteractive
RUN groupadd -g $GID $USER && useradd --system -g $USER --uid $UID $USER
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
apt-get update && apt-get -y install \
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get update && apt-get -y install \
npm \
python2 \
python3 \
atomicparsley
atomicparsley && \
apt-get install -f && \
apt-get autoremove --purge && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt
WORKDIR /app
COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/ffmpeg
COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/ffprobe
COPY --chown=$UID:$GID [ "backend/package.json", "backend/package-lock.json", "/app/" ]
ENV PM2_HOME=/app/pm2
RUN npm install pm2 -g && \
RUN npm config set strict-ssl false && \
npm install pm2 -g && \
npm install && chown -R $UID:$GID ./
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]

View File

@@ -6,7 +6,7 @@
[![GitHub issues badge](https://img.shields.io/github/issues/Tzahi12345/YoutubeDL-Material)](https://github.com/Tzahi12345/YoutubeDL-Material/issues)
[![License badge](https://img.shields.io/github/license/Tzahi12345/YoutubeDL-Material)](https://github.com/Tzahi12345/YoutubeDL-Material/blob/master/LICENSE.md)
YoutubeDL-Material is a Material Design frontend for [youtube-dl](https://rg3.github.io/youtube-dl/). It's coded using [Angular 11](https://angular.io/) for the frontend, and [Node.js](https://nodejs.org/) on the backend.
YoutubeDL-Material is a Material Design frontend for [youtube-dl](https://rg3.github.io/youtube-dl/). It's coded using [Angular 13](https://angular.io/) for the frontend, and [Node.js](https://nodejs.org/) on the backend.
Now with [Docker](#Docker) support!

View File

@@ -1,49 +0,0 @@
FROM alpine:3.12 as frontend
RUN apk add --no-cache \
npm \
curl
RUN npm install -g @angular/cli
WORKDIR /build
RUN curl -L https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz | tar zxvf - -C . && mv qemu-3.0.0+resin-arm/qemu-arm-static .
COPY [ "package.json", "package-lock.json", "/build/" ]
RUN npm install
COPY [ "angular.json", "tsconfig.json", "/build/" ]
COPY [ "src/", "/build/src/" ]
RUN ng build --prod
#--------------#
FROM arm32v7/alpine:3.12
COPY --from=frontend /build/qemu-arm-static /usr/bin
ENV UID=1000 \
GID=1000 \
USER=youtube
RUN addgroup -S $USER -g $GID && adduser -D -S $USER -G $USER -u $UID
RUN apk add --no-cache \
ffmpeg \
npm \
python2 \
su-exec \
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
atomicparsley
WORKDIR /app
COPY --chown=$UID:$GID [ "backend/package.json", "backend/package-lock.json", "/app/" ]
RUN npm install && chown -R $UID:$GID ./
COPY --chown=$UID:$GID --from=frontend [ "/build/backend/public/", "/app/public/" ]
COPY --chown=$UID:$GID [ "/backend/", "/app/" ]
EXPOSE 17442
ENTRYPOINT [ "/app/entrypoint.sh" ]
CMD [ "node", "app.js" ]

View File

@@ -141,6 +141,7 @@ async function unsubscribe(sub, deleteMode, user_uid = null) {
if (sub.archive && (await fs.pathExists(sub.archive))) {
const archive_file_path = path.join(sub.archive, 'archive.txt');
// deletes archive if it exists
// TODO: Keep entries in blacklist_video.txt by moving them to a global blacklist
if (await fs.pathExists(archive_file_path)) {
await fs.unlink(archive_file_path);
}
@@ -379,7 +380,11 @@ async function generateArgsForSubscription(sub, user_uid, redownload = false, de
if (useArchive && !redownload) {
if (sub.archive) {
archive_dir = sub.archive;
archive_path = path.join(archive_dir, 'archive.txt')
if (sub.type && sub.type === 'audio') {
archive_path = path.join(archive_dir, 'merged_audio.txt');
} else {
archive_path = path.join(archive_dir, 'merged_video.txt');
}
}
downloadConfig.push('--download-archive', archive_path);
}

View File

@@ -4,8 +4,6 @@
# and also optimizing some code with this commit.
# xoxo :D
set -xeuo pipefail
case $(uname -m) in
x86_64)
ARCH=amd64;;
@@ -22,15 +20,24 @@ case $(uname -m) in
exit 1
esac
echo "Architecture: $ARCH"
curl --connect-timeout 5 \
echo "(INFO) Architecture detected: $ARCH"
echo "(1/5) READY - Acquire temp dependencies in ffmpeg obtain layer"
apt-get update && apt-get -y install curl xz-utils
echo "(2/5) DOWNLOAD - Acquire latest ffmpeg and ffprobe from John van Sickle's master-sourced builds in ffmpeg obtain layer"
curl -o ffmpeg.txz \
--connect-timeout 5 \
--max-time 10 \
--retry 5 \
--retry-delay 0 \
--retry-max-time 40 \
"https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-${ARCH}-static.tar.xz" -o ffmpeg.txz
"https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-${ARCH}-static.tar.xz"
mkdir /tmp/ffmpeg
tar xf ffmpeg.txz -C /tmp/ffmpeg
echo "(3/5) CLEANUP - Remove temp dependencies from ffmpeg obtain layer"
apt-get -y remove curl xz-utils
apt-get -y autoremove
echo "(4/5) PROVISION - Provide ffmpeg and ffprobe from ffmpeg obtain layer"
cp /tmp/ffmpeg/*/ffmpeg /usr/local/bin/ffmpeg
cp /tmp/ffmpeg/*/ffprobe /usr/local/bin/ffprobe
echo "(5/5) CLEANUP - Remove temporary downloads from ffmpeg obtain layer"
rm -rf /tmp/ffmpeg ffmpeg.txz

View File

@@ -51,7 +51,7 @@
</ng-container>
<ng-container *ngIf="postsService.config && allowSubscriptions && postsService.subscriptions && postsService.hasPermission('subscriptions')">
<mat-divider *ngIf="postsService.subscriptions.length > 0"></mat-divider>
<a *ngFor="let subscription of postsService.subscriptions" mat-list-item (click)="postsService.sidepanel_mode === 'over' ? sidenav.close() : null" [routerLink]="['/subscription', { id: subscription.id }]"><ngx-avatar [style.margin-right]="'10px'" size="32" [name]="subscription.name"></ngx-avatar>{{subscription.name}}</a>
<a *ngFor="let subscription of postsService.subscriptions" mat-list-item (click)="postsService.sidepanel_mode === 'over' ? sidenav.close() : null" [routerLink]="['/subscription', { id: subscription.id }]"><ngx-avatars [style.margin-right]="'10px'" size="32" [name]="subscription.name"></ngx-avatars>{{subscription.name}}</a>
</ng-container>
</mat-nav-list>
</mat-sidenav>

View File

@@ -42,6 +42,11 @@ export class ConcurrentStreamComponent implements OnInit {
}
ngOnDestroy(): void {
if (this.check_timeout) { clearInterval(this.check_timeout); }
if (this.update_timeout) { clearInterval(this.update_timeout); }
}
startServer() {
this.started = true;
this.server_started = true;

View File

@@ -1,4 +1,4 @@
import { AfterViewInit, Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';
import { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';
import { PostsService } from 'app/posts.services';
@Component({
@@ -6,7 +6,7 @@ import { PostsService } from 'app/posts.services';
templateUrl: './twitch-chat.component.html',
styleUrls: ['./twitch-chat.component.scss']
})
export class TwitchChatComponent implements OnInit, AfterViewInit {
export class TwitchChatComponent implements OnInit, OnDestroy {
full_chat = null;
visible_chat = null;
@@ -33,7 +33,8 @@ export class TwitchChatComponent implements OnInit, AfterViewInit {
this.getFullChat();
}
ngAfterViewInit() {
ngOnDestroy(): void {
if (this.chat_check_interval_obj) { clearInterval(this.chat_check_interval_obj); }
}
private isUserNearBottom(): boolean {

View File

@@ -52,6 +52,8 @@ export class SubscriptionComponent implements OnInit, OnDestroy {
this.route.params.subscribe(params => {
this.id = params['id'];
if (this.sub_interval) { clearInterval(this.sub_interval); }
this.postsService.service_initialized.subscribe(init => {
if (init) {
this.getConfig();