mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-03-08 04:20:08 +03:00
313 lines
23 KiB
HTML
313 lines
23 KiB
HTML
<h4 i18n="Settings title" mat-dialog-title>Settings</h4>
|
|
<!-- <ng-container i18n="Allow subscriptions setting"></ng-container> -->
|
|
<mat-dialog-content>
|
|
|
|
<!-- Language
|
|
<div style="margin-bottom: 10px;">
|
|
|
|
</div> -->
|
|
|
|
<mat-tab-group>
|
|
<!-- Server -->
|
|
<mat-tab label="Main" i18n-label="Main settings label">
|
|
<ng-template matTabContent style="padding: 15px;">
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [(ngModel)]="new_config['Host']['url']" matInput placeholder="URL" i18n-placeholder="URL input placeholder" required>
|
|
<mat-hint><ng-container i18n="URL setting input hint">URL this app will be accessed from, without the port.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12 mb-4">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [(ngModel)]="new_config['Host']['port']" matInput placeholder="Port" i18n-placeholder="Port input placeholder" required>
|
|
<mat-hint><ng-container i18n="Port setting input hint">The desired port. Default is 17442.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['multi_user_mode']"><ng-container i18n="Multi user mode setting">Multi-user mode</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12 mt-3 mb-4">
|
|
<mat-form-field class="text-field">
|
|
<input [disabled]="!new_config['Advanced']['multi_user_mode']" [(ngModel)]="new_config['Users']['base_path']" matInput placeholder="Users base path" i18n-placeholder="Users base path placeholder" required>
|
|
<mat-hint><ng-container i18n="Users base path hint">Base path for users and their downloaded videos.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Encryption']['use-encryption']"><ng-container i18n="Use encryption setting">Use encryption</ng-container></mat-checkbox>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['cert-file-path']" matInput placeholder="Cert file path" i18n-placeholder="Cert file path input placeholder">
|
|
</mat-form-field>
|
|
</div>
|
|
|
|
<div class="col-12">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['Encryption']['use-encryption']" [(ngModel)]="new_config['Encryption']['key-file-path']" matInput placeholder="Key file path" i18n-placeholder="Key file path input placeholder">
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Subscriptions']['allow_subscriptions']"><ng-container i18n="Allow subscriptions setting">Allow subscriptions</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_base_path']" matInput placeholder="Subscriptions base path" i18n-placeholder="Subscriptions base path input setting placeholder">
|
|
<mat-hint><ng-container i18n="Subscriptions base path setting input hint">Base path for videos from your subscribed channels and playlists. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12 mt-5">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_check_interval']" matInput placeholder="Check interval" i18n-placeholder="Check interval input setting placeholder">
|
|
<mat-hint><ng-container i18n="Check interval setting input hint">Unit is seconds, only include numbers.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12 mt-4">
|
|
<mat-checkbox color="accent" [disabled]="!new_config['Subscriptions']['allow_subscriptions']" [(ngModel)]="new_config['Subscriptions']['subscriptions_use_youtubedl_archive']"><ng-container i18n="Use youtube-dl archive setting">Use youtube-dl archive</ng-container></mat-checkbox>
|
|
<p><a target="_blank" href="https://github.com/ytdl-org/youtube-dl/blob/master/README.md#how-do-i-download-only-new-videos-from-a-playlist"><ng-container i18n="youtube-dl archive explanation prefix link">With youtube-dl's archive</ng-container></a> <ng-container i18n="youtube-dl archive explanation middle">feature, downloaded videos from your subscriptions get recorded in a text file in the subscriptions archive sub-directory.</ng-container></p>
|
|
<p><ng-container i18n="youtube-dl archive explanation suffix">This enables the ability to permanently delete videos from your subscriptions without unsubscribing, and allows you to record which videos you downloaded in case of data loss.</ng-container></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-form-field>
|
|
<mat-label><ng-container i18n="Theme select label">Theme</ng-container></mat-label>
|
|
<mat-select color="accent" [(ngModel)]="new_config['Themes']['default_theme']">
|
|
<mat-option value="default"><ng-container i18n="Default theme label">Default</ng-container></mat-option>
|
|
<mat-option value="dark"><ng-container i18n="Dark theme label">Dark</ng-container></mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12 mb-2">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Themes']['allow_theme_change']"><ng-container i18n="Allow theme change setting">Allow theme change</ng-container></mat-checkbox>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-form-field color="accent">
|
|
<mat-label><ng-container i18n="Language select label">Language</ng-container></mat-label>
|
|
<mat-select (selectionChange)="localeSelectChanged($event.value)" [(value)]="initialLocale">
|
|
<mat-option *ngFor="let locale of supported_locales" [value]="locale">
|
|
{{all_locales[locale]['nativeName']}}
|
|
</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</ng-template>
|
|
</mat-tab>
|
|
<!-- Downloader -->
|
|
<mat-tab label="Downloader" i18n-label="Downloader settings label">
|
|
<ng-template matTabContent>
|
|
<!-- Downloader -->
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input matInput [(ngModel)]="new_config['Downloader']['path-audio']" placeholder="Audio folder path" i18n-placeholder="Audio folder path input placeholder" required>
|
|
<mat-hint><ng-container i18n="Aduio path setting input hint">Path for audio only downloads. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
|
|
<div class="col-12 mt-5">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input matInput [(ngModel)]="new_config['Downloader']['path-video']" placeholder="Video folder path" i18n-placeholder="Video folder path input placeholder" required>
|
|
<mat-hint><ng-container i18n="Video path setting input hint">Path for video downloads. It is relative to YTDL-Material's root folder.</ng-container></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
|
|
<div class="col-12 mt-5">
|
|
<mat-form-field class="text-field" style="margin-right: 12px;" color="accent">
|
|
<textarea matInput [(ngModel)]="new_config['Downloader']['custom_args']" placeholder="Custom args" i18n-placeholder="Custom args input placeholder"></textarea>
|
|
<mat-hint><ng-container i18n="Custom args setting input hint">Global custom args for downloads on the home page. Args are delimited using two commas like so: ,,</ng-container></mat-hint>
|
|
<button class="args-edit-button" (click)="openArgsModifierDialog()" mat-icon-button><mat-icon>edit</mat-icon></button>
|
|
</mat-form-field>
|
|
</div>
|
|
|
|
<div class="col-12 mt-4">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Downloader']['use_youtubedl_archive']"><ng-container i18n="Use youtubedl archive setting">Use youtube-dl archive</ng-container></mat-checkbox>
|
|
<p>Note: This setting only applies to downloads on the Home page. If you would like to use youtube-dl archive functionality in subscriptions, head down to the Subscriptions section.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</ng-template>
|
|
</mat-tab>
|
|
<!-- Extra -->
|
|
<mat-tab label="Extra" i18n-label="Extra settings label">
|
|
<ng-template matTabContent>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [(ngModel)]="new_config['Extra']['title_top']" matInput placeholder="Top title" i18n-placeholder="Top title input placeholder" required>
|
|
<mat-hint></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['file_manager_enabled']"><ng-container i18n="File manager enabled setting">File manager enabled</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['enable_downloads_manager']"><ng-container i18n="Downloads manager enabled setting">Downloads manager enabled</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_quality_select']"><ng-container i18n="Allow quality seelct setting">Allow quality select</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['download_only_mode']"><ng-container i18n="Download only mode setting">Download only mode</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Extra']['allow_multi_download_mode']"><ng-container i18n="Allow multi-download mode setting">Allow multi-download mode</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox [disabled]="new_config['Advanced']['multi_user_mode']" color="accent" [(ngModel)]="new_config['Extra']['settings_pin_required']"><ng-container i18n="Require pin for settings setting">Require pin for settings</ng-container></mat-checkbox>
|
|
<button style="margin-left: 15px; margin-bottom: 10px;" mat-stroked-button (click)="setNewPin()" [disabled]="!new_config['Extra']['settings_pin_required']"><ng-container i18n="Set new pin button">Set New Pin</ng-container></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['API']['use_API_key']"><ng-container i18n="Enable Public API key setting">Enable Public API</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12 mb-3">
|
|
<div class="enable-api-key-div">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['API']['use_API_key']" [(ngModel)]="new_config['API']['API_key']" matInput placeholder="Public API Key" i18n-placeholder="Public API Key setting placeholder" required>
|
|
<mat-hint><a target="_blank" href="https://stoplight.io/p/docs/gh/tzahi12345/youtubedl-material"><ng-container i18n="View API docs setting hint">View documentation</ng-container></a></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="api-key-div">
|
|
<button matTooltip-i18n matTooltip="This will delete your old API key!" mat-stroked-button (click)="generateAPIKey()"><ng-container i18n="Generate key button">Generate</ng-container></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['API']['use_youtube_API']"><ng-container i18n="Use YouTube API setting">Use YouTube API</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12 mb-3">
|
|
<mat-form-field class="text-field" color="accent">
|
|
<input [disabled]="!new_config['API']['use_youtube_API']" [(ngModel)]="new_config['API']['youtube_API_key']" matInput placeholder="Youtube API Key" i18n-placeholder="Youtube API Key setting placeholder" required>
|
|
<mat-hint><a target="_blank" href="https://developers.google.com/youtube/v3/getting-started"><ng-container i18n="Youtube API Key setting hint">Generating a key is easy!</ng-container></a></mat-hint>
|
|
</mat-form-field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<h6>Chrome</h6>
|
|
<p><a href="https://github.com/Tzahi12345/YoutubeDL-Material/blob/master/chrome-extension/youtubedl-material-chrome-extension.zip?raw=true"><ng-container i18n="Chrome ext click here">Click here</ng-container></a> <ng-container i18n="Chrome click here suffix">to download the official YoutubeDL-Material Chrome extension manually.</ng-container></p>
|
|
<p><ng-container i18n="Chrome setup suffix">You must manually load the extension and modify the extension's settings to set the frontend URL.</ng-container></p>
|
|
<mat-divider class="ext-divider"></mat-divider>
|
|
</div>
|
|
<div class="col-12">
|
|
<h6>Firefox</h6>
|
|
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/youtubedl-material/" target="_blank"><ng-container i18n="Firefox ext click here">Click here</ng-container></a> <ng-container i18n="Firefox click here suffix">to install the official YoutubeDL-Material Firefox extension right off the Firefox extensions page.</ng-container></p>
|
|
<p><a href="https://github.com/Tzahi12345/YoutubeDL-Material/wiki/Firefox-Extension" target="_blank"><ng-container i18n="Firefox setup prefix link">Detailed setup instructions.</ng-container></a> <ng-container i18n="Firefox setup suffix">Not much is required other than changing the extension's settings to set the frontend URL.</ng-container></p>
|
|
<mat-divider class="ext-divider"></mat-divider>
|
|
</div>
|
|
<div class="col-12">
|
|
<h6>Bookmarklet</h6>
|
|
<p><ng-container i18n="Bookmarklet instructions">Drag the link below to your bookmarks, and you're good to go! Just navigate to the YouTube video you'd like to download, and click the bookmark.</ng-container></p>
|
|
<mat-checkbox (change)="bookmarkletAudioOnlyChanged($event)"><ng-container i18n="Generate audio only bookmarklet checkbox">Generate 'audio only' bookmarklet</ng-container></mat-checkbox>
|
|
<!--<button style="margin-bottom: 5px;" mat-stroked-button color="accent" (click)="generateBookmarklet()">Generate bookmarklet</button>-->
|
|
<p><a [href]="generated_bookmarklet_code" target="_blank">YTDL-Bookmarklet</a></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</ng-template>
|
|
</mat-tab>
|
|
<!-- Advanced -->
|
|
<mat-tab label="Advanced" i18n-label="Host settings label">
|
|
<ng-template matTabContent>
|
|
<div *ngIf="new_config" class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12 mt-3">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['use_default_downloading_agent']"><ng-container i18n="Use default downloading agent setting">Use default downloading agent</ng-container></mat-checkbox>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-form-field>
|
|
<mat-label><ng-container i18n="Custom downloader select label">Select a downloader</ng-container></mat-label>
|
|
<mat-select [disabled]="new_config['Advanced']['use_default_downloading_agent']" color="accent" [(ngModel)]="new_config['Advanced']['custom_downloading_agent']">
|
|
<mat-option value="aria2c">aria2c</mat-option>
|
|
<mat-option value="avconv">avconv</mat-option>
|
|
<mat-option value="axel">axel</mat-option>
|
|
<mat-option value="curl">curl</mat-option>
|
|
<mat-option value="ffmpeg">ffmpeg</mat-option>
|
|
<mat-option value="httpie">httpie</mat-option>
|
|
<mat-option value="wget">wget</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12 mt-2 mb-1">
|
|
<mat-form-field>
|
|
<mat-label><ng-container i18n="Logger level select label">Select a downloader</ng-container></mat-label>
|
|
<mat-select color="accent" [(ngModel)]="new_config['Advanced']['logger_level']">
|
|
<mat-option value="debug">Debug</mat-option>
|
|
<mat-option value="verbose">Verbose</mat-option>
|
|
<mat-option value="info">Info</mat-option>
|
|
<mat-option value="warn">Warn</mat-option>
|
|
<mat-option value="error">Error</mat-option>
|
|
</mat-select>
|
|
</mat-form-field>
|
|
</div>
|
|
<div class="col-12">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Advanced']['allow_advanced_download']"><ng-container i18n="Allow advanced downloading setting">Allow advanced download</ng-container></mat-checkbox>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<mat-divider></mat-divider>
|
|
<div *ngIf="new_config" class="container-fluid mt-1">
|
|
<app-updater></app-updater>
|
|
</div>
|
|
</ng-template>
|
|
</mat-tab>
|
|
<mat-tab *ngIf="postsService.config && postsService.config.Advanced.multi_user_mode" label="Users" i18n-label="Users settings label">
|
|
<div style="margin-left: 48px; margin-top: 24px;">
|
|
<mat-checkbox color="accent" [(ngModel)]="new_config['Users']['allow_registration']"><ng-container i18n="Allow registration setting">Allow user registration</ng-container></mat-checkbox>
|
|
</div>
|
|
<app-modify-users></app-modify-users>
|
|
</mat-tab>
|
|
</mat-tab-group>
|
|
</mat-dialog-content>
|
|
|
|
<mat-dialog-actions>
|
|
<div style="margin-bottom: 10px;">
|
|
<button color="accent" (click)="saveSettings()" [disabled]="settingsSame()" mat-raised-button><mat-icon>done</mat-icon>
|
|
<ng-container i18n="Settings save button">Save</ng-container>
|
|
</button>
|
|
<button mat-flat-button [mat-dialog-close]="false"><mat-icon>cancel</mat-icon>
|
|
<span i18n="Settings cancel and close button">{settingsAreTheSame + "", select, true {Close} false {Cancel} other {otha}}</span>
|
|
</button>
|
|
</div>
|
|
</mat-dialog-actions> |