diff --git a/backend/app.js b/backend/app.js
index 60ff1a7..224e05b 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -1411,9 +1411,9 @@ async function generateArgs(url, type, options) {
downloadConfig = customArgs.split(' ');
} else {
if (customQualityConfiguration) {
- qualityPath = customQualityConfiguration;
+ qualityPath = `-f ${customQualityConfiguration}`;
} else if (selectedHeight && selectedHeight !== '' && !is_audio) {
- qualityPath = `-f bestvideo[height=${selectedHeight}]+bestaudio/best[height=${selectedHeight}]`;
+ qualityPath = `-f '(mp4)[height=${selectedHeight}]'`;
} else if (maxBitrate && is_audio) {
qualityPath = `--audio-quality ${maxBitrate}`
}
@@ -1783,7 +1783,7 @@ app.post('/api/tomp4', optionalJwt, async function(req, res) {
const is_playlist = url.includes('playlist');
let result_obj = null;
- if (is_playlist)
+ if (is_playlist || options.customQualityConfiguration)
result_obj = await downloadFileByURL_exec(url, 'video', options, req.query.sessionID);
else
result_obj = await downloadFileByURL_normal(url, 'video', options, req.query.sessionID);
diff --git a/src/app/dialogs/user-profile-dialog/user-profile-dialog.component.html b/src/app/dialogs/user-profile-dialog/user-profile-dialog.component.html
index 26b621c..fd9be71 100644
--- a/src/app/dialogs/user-profile-dialog/user-profile-dialog.component.html
+++ b/src/app/dialogs/user-profile-dialog/user-profile-dialog.component.html
@@ -11,8 +11,7 @@
Created: {{postsService.user.created ? postsService.user.created : 'N/A'}}
-
@@ -21,3 +20,12 @@
+
+
+
+
diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts
index 00f02e0..d188006 100644
--- a/src/app/posts.services.ts
+++ b/src/app/posts.services.ts
@@ -33,6 +33,11 @@ export class PostsService implements CanActivate {
isLoggedIn = false;
token = null;
user = null;
+
+ reload_config = new BehaviorSubject(false);
+ config_reloaded = new BehaviorSubject(false);
+
+ config = null;
constructor(private http: HttpClient, private router: Router, @Inject(DOCUMENT) private document: Document,
public snackBar: MatSnackBar) {
console.log('PostsService Initialized...');
@@ -53,17 +58,25 @@ export class PostsService implements CanActivate {
}),
};
- // login stuff
-
- if (localStorage.getItem('jwt_token')) {
- this.token = localStorage.getItem('jwt_token');
- this.httpOptions = {
- params: new HttpParams({
- fromString: `apiKey=${this.auth_token}&sessionID=${this.session_id}&jwt=${this.token}`
- }),
- };
- this.jwtAuth();
- }
+ // get config
+ this.loadNavItems().subscribe(res => {
+ const result = !this.debugMode ? res['config_file'] : res;
+ if (result) {
+ this.config = result['YoutubeDLMaterial'];
+ if (this.config['Advanced']['multi_user_mode']) {
+ // login stuff
+ if (localStorage.getItem('jwt_token')) {
+ this.token = localStorage.getItem('jwt_token');
+ this.httpOptions = {
+ params: new HttpParams({
+ fromString: `apiKey=${this.auth_token}&sessionID=${this.session_id}&jwt=${this.token}`
+ }),
+ };
+ this.jwtAuth();
+ }
+ }
+ }
+ });
}
canActivate(route, state): Promise {
return new Promise(resolve => {
@@ -85,6 +98,15 @@ export class PostsService implements CanActivate {
return this.http.get(url + 'geturl');
}
+ reloadConfig() {
+ this.loadNavItems().subscribe(res => {
+ const result = !this.debugMode ? res['config_file'] : res;
+ if (result) {
+ this.config = result['YoutubeDLMaterial'];
+ }
+ });
+ }
+
getVideoFolder() {
return this.http.get(this.startPath + 'videofolder');
}
diff --git a/src/app/settings/settings.component.html b/src/app/settings/settings.component.html
index 2335182..e2e9102 100644
--- a/src/app/settings/settings.component.html
+++ b/src/app/settings/settings.component.html
@@ -166,7 +166,7 @@
Allow multi-download mode
- Require pin for settings
+ Require pin for settings
@@ -252,9 +252,12 @@
-
+
Allow advanced download
+
+ Multi-user mode
+