mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-06-09 22:04:35 +00:00
Compare commits
19 Commits
add-permis
...
angular-up
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e3a552392 | ||
|
|
24475386f9 | ||
|
|
55268301f6 | ||
|
|
faa76abbbd | ||
|
|
b827f8f0cc | ||
|
|
b6b61c42d4 | ||
|
|
6af1ce4092 | ||
|
|
303d0015c6 | ||
|
|
56db43da79 | ||
|
|
64b1a9e5c0 | ||
|
|
48f0a700ab | ||
|
|
768798c6b3 | ||
|
|
c9359f172e | ||
|
|
d6dc4756a7 | ||
|
|
9bc9b17294 | ||
|
|
80d3580447 | ||
|
|
3f15f3bcaf | ||
|
|
934965720e | ||
|
|
bb4a882d19 |
@@ -9,15 +9,16 @@ RUN sh ./ffmpeg-fetch.sh
|
||||
# Create our Ubuntu 22.04 with node 16
|
||||
# Go to 20.04
|
||||
FROM ubuntu:20.04 AS base
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ENV UID=1000
|
||||
ENV GID=1000
|
||||
ENV USER=youtube
|
||||
ENV NO_UPDATE_NOTIFIER=true
|
||||
ENV PM2_HOME=/app/pm2
|
||||
ENV ALLOW_CONFIG_MUTATIONS=true
|
||||
RUN groupadd -g $GID $USER && useradd --system -m -g $USER --uid $UID $USER && \
|
||||
apt update && \
|
||||
apt install -y --no-install-recommends curl ca-certificates && \
|
||||
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 && \
|
||||
|
||||
@@ -182,7 +182,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "youtube-dl-material",
|
||||
"schematics": {
|
||||
"@schematics/angular:component": {
|
||||
"prefix": "app",
|
||||
|
||||
@@ -148,16 +148,11 @@ if (fs.existsSync('version.json')) {
|
||||
|
||||
// don't overwrite config if it already happened.. NOT
|
||||
// let alreadyWritten = db.get('configWriteFlag').value();
|
||||
let writeConfigMode = process.env.write_ytdl_config;
|
||||
|
||||
// checks if config exists, if not, a config is auto generated
|
||||
config_api.configExistsCheck();
|
||||
|
||||
if (writeConfigMode) {
|
||||
setAndLoadConfig();
|
||||
} else {
|
||||
loadConfig();
|
||||
}
|
||||
setAndLoadConfig();
|
||||
|
||||
app.use(bodyParser.urlencoded({ extended: false }));
|
||||
app.use(bodyParser.json());
|
||||
@@ -493,8 +488,9 @@ async function setAndLoadConfig() {
|
||||
}
|
||||
|
||||
async function setConfigFromEnv() {
|
||||
let config_items = getEnvConfigItems();
|
||||
let success = config_api.setConfigItems(config_items);
|
||||
const config_items = getEnvConfigItems();
|
||||
if (!config_items || config_items.length === 0) return true;
|
||||
const success = config_api.setConfigItems(config_items);
|
||||
if (success) {
|
||||
logger.info('Config items set using ENV variables.');
|
||||
await utils.wait(100);
|
||||
|
||||
@@ -198,7 +198,7 @@ async function registerFileDBManual(file_object) {
|
||||
path_object = path.parse(file_object['path']);
|
||||
file_object['path'] = path.format(path_object);
|
||||
|
||||
exports.insertRecordIntoTable('files', file_object, {path: file_object['path']})
|
||||
await exports.insertRecordIntoTable('files', file_object, {path: file_object['path']})
|
||||
|
||||
return file_object;
|
||||
}
|
||||
|
||||
@@ -203,6 +203,7 @@ async function collectInfo(download_uid) {
|
||||
options.customOutput = category['custom_output'];
|
||||
options.noRelativePath = true;
|
||||
args = await exports.generateArgs(url, type, options, download['user_uid']);
|
||||
args = utils.filterArgs(args, ['--no-simulate']);
|
||||
info = await exports.getVideoInfoByURL(url, args, download_uid);
|
||||
}
|
||||
|
||||
@@ -356,7 +357,7 @@ async function downloadQueuedFile(download_uid) {
|
||||
if (file_objs.length > 1) {
|
||||
// create playlist
|
||||
const playlist_name = file_objs.map(file_obj => file_obj.title).join(', ');
|
||||
container = await db_api.createPlaylist(playlist_name, file_objs.map(file_obj => file_obj.uid), type, download['user_uid']);
|
||||
container = await db_api.createPlaylist(playlist_name, file_objs.map(file_obj => file_obj.uid), download['user_uid']);
|
||||
} else if (file_objs.length === 1) {
|
||||
container = file_objs[0];
|
||||
} else {
|
||||
@@ -402,6 +403,8 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
||||
|
||||
// video-specific args
|
||||
const selectedHeight = options.selectedHeight;
|
||||
const maxHeight = options.maxHeight;
|
||||
const heightParam = selectedHeight || maxHeight;
|
||||
|
||||
// audio-specific args
|
||||
const maxBitrate = options.maxBitrate;
|
||||
@@ -422,8 +425,8 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
||||
} else {
|
||||
if (customQualityConfiguration) {
|
||||
qualityPath = ['-f', customQualityConfiguration, '--merge-output-format', 'mp4'];
|
||||
} else if (selectedHeight && selectedHeight !== '' && !is_audio) {
|
||||
qualityPath = ['-f', `'(mp4)[height=${selectedHeight}]`];
|
||||
} else if (heightParam && heightParam !== '' && !is_audio) {
|
||||
qualityPath = ['-f', `'(mp4)[height${maxHeight ? '<' : ''}=${heightParam}]`];
|
||||
} else if (is_audio) {
|
||||
qualityPath = ['--audio-quality', maxBitrate ? maxBitrate : '0']
|
||||
}
|
||||
@@ -506,7 +509,10 @@ exports.generateArgs = async (url, type, options, user_uid = null, simulated = f
|
||||
}
|
||||
|
||||
if (default_downloader === 'yt-dlp') {
|
||||
downloadConfig.push('--no-clean-infojson');
|
||||
downloadConfig = utils.filterArgs(downloadConfig, ['--print-json']);
|
||||
|
||||
// in yt-dlp -j --no-simulate is preferable
|
||||
downloadConfig.push('--no-clean-info-json', '-j', '--no-simulate');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -313,7 +313,7 @@ function generateOptionsForSubscriptionDownload(sub, user_uid) {
|
||||
let default_output = config_api.getConfigItem('ytdl_default_file_output') ? config_api.getConfigItem('ytdl_default_file_output') : '%(title)s';
|
||||
|
||||
const base_download_options = {
|
||||
selectedHeight: sub.maxQuality && sub.maxQuality !== 'best' ? sub.maxQuality : null,
|
||||
maxHeight: sub.maxQuality && sub.maxQuality !== 'best' ? sub.maxQuality : null,
|
||||
customFileFolderPath: getAppendedBasePath(sub, basePath),
|
||||
customOutput: sub.custom_output ? `${sub.custom_output}` : `${default_output}`,
|
||||
customArchivePath: path.join(basePath, 'archives', sub.name),
|
||||
@@ -407,7 +407,7 @@ async function generateArgsForSubscription(sub, user_uid, redownload = false, de
|
||||
|
||||
const default_downloader = utils.getCurrentDownloader() || config_api.getConfigItem('ytdl_default_downloader');
|
||||
if (default_downloader === 'yt-dlp') {
|
||||
downloadConfig.push('--no-clean-infojson');
|
||||
downloadConfig.push('--no-clean-info-json');
|
||||
}
|
||||
|
||||
downloadConfig = utils.filterArgs(downloadConfig, ['--write-comments']);
|
||||
|
||||
@@ -2,7 +2,6 @@ version: "2"
|
||||
services:
|
||||
ytdl_material:
|
||||
environment:
|
||||
ALLOW_CONFIG_MUTATIONS: 'true'
|
||||
ytdl_mongodb_connection_string: 'mongodb://ytdl-mongo-db:27017'
|
||||
ytdl_use_local_db: 'false'
|
||||
write_ytdl_config: 'true'
|
||||
@@ -20,11 +19,9 @@ services:
|
||||
image: tzahi12345/youtubedl-material:latest
|
||||
ytdl-mongo-db:
|
||||
image: mongo
|
||||
ports:
|
||||
- "27017:27017"
|
||||
logging:
|
||||
driver: "none"
|
||||
container_name: mongo-db
|
||||
restart: always
|
||||
volumes:
|
||||
- ./db/:/data/db
|
||||
- ./db/:/data/db
|
||||
|
||||
3664
package-lock.json
generated
3664
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
34
package.json
34
package.json
@@ -13,7 +13,7 @@
|
||||
"e2e": "ng e2e",
|
||||
"electron": "ng build --base-href ./ && electron .",
|
||||
"generate": "openapi --input ./\"Public API v1.yaml\" --output ./src/api-types --exportCore false --exportServices false --exportModels true",
|
||||
"i18n-source": "ng extract-i18n --output-path=src/assets/i18n"
|
||||
"i18n-source": "ng extract-i18n --output-path=src/assets/i18n --out-file=messages.en.xlf"
|
||||
},
|
||||
"engines": {
|
||||
"node": "12.3.1",
|
||||
@@ -21,18 +21,18 @@
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular-devkit/core": "^13.3.3",
|
||||
"@angular/animations": "^13.3.4",
|
||||
"@angular/cdk": "^13.3.4",
|
||||
"@angular/common": "^13.3.4",
|
||||
"@angular/compiler": "^13.3.4",
|
||||
"@angular/core": "^13.3.4",
|
||||
"@angular/forms": "^13.3.4",
|
||||
"@angular/localize": "^13.3.4",
|
||||
"@angular/material": "^13.3.4",
|
||||
"@angular/platform-browser": "^13.3.4",
|
||||
"@angular/platform-browser-dynamic": "^13.3.4",
|
||||
"@angular/router": "^13.3.4",
|
||||
"@angular-devkit/core": "^14.0.4",
|
||||
"@angular/animations": "^14.0.4",
|
||||
"@angular/cdk": "^14.0.4",
|
||||
"@angular/common": "^14.0.4",
|
||||
"@angular/compiler": "^14.0.4",
|
||||
"@angular/core": "^14.0.4",
|
||||
"@angular/forms": "^14.0.4",
|
||||
"@angular/localize": "^14.0.4",
|
||||
"@angular/material": "^14.0.4",
|
||||
"@angular/platform-browser": "^14.0.4",
|
||||
"@angular/platform-browser-dynamic": "^14.0.4",
|
||||
"@angular/router": "^14.0.4",
|
||||
"@fontsource/material-icons": "^4.5.4",
|
||||
"@ngneat/content-loader": "^5.0.0",
|
||||
"@videogular/ngx-videogular": "^5.0.1",
|
||||
@@ -55,10 +55,10 @@
|
||||
"zone.js": "~0.11.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^13.3.3",
|
||||
"@angular/cli": "^13.3.3",
|
||||
"@angular/compiler-cli": "^13.3.4",
|
||||
"@angular/language-service": "^13.3.4",
|
||||
"@angular-devkit/build-angular": "^14.0.4",
|
||||
"@angular/cli": "^14.0.4",
|
||||
"@angular/compiler-cli": "^14.0.4",
|
||||
"@angular/language-service": "^14.0.4",
|
||||
"@types/core-js": "^2.5.2",
|
||||
"@types/file-saver": "^2.0.1",
|
||||
"@types/jasmine": "~3.6.0",
|
||||
|
||||
@@ -53,9 +53,9 @@ export class CustomPlaylistsComponent implements OnInit {
|
||||
dialogRef.afterClosed().subscribe(result => {
|
||||
if (result) {
|
||||
this.getAllPlaylists();
|
||||
this.postsService.openSnackBar($localize`Successfully created playlist!', '`);
|
||||
this.postsService.openSnackBar($localize`Successfully created playlist!`);
|
||||
} else if (result === false) {
|
||||
this.postsService.openSnackBar($localize`ERROR: failed to create playlist!', '`);
|
||||
this.postsService.openSnackBar($localize`ERROR: failed to create playlist!`);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -75,6 +75,7 @@ export class CustomPlaylistsComponent implements OnInit {
|
||||
}
|
||||
} else {
|
||||
// playlist not found
|
||||
// TODO: Make translatable
|
||||
console.error(`Playlist with ID ${playlistID} not found!`);
|
||||
}
|
||||
}
|
||||
@@ -96,7 +97,7 @@ export class CustomPlaylistsComponent implements OnInit {
|
||||
this.postsService.removePlaylist(playlistID).subscribe(res => {
|
||||
if (res['success']) {
|
||||
this.playlists.splice(index, 1);
|
||||
this.postsService.openSnackBar($localize`Playlist successfully removed.', '`);
|
||||
this.postsService.openSnackBar($localize`Playlist successfully removed.`);
|
||||
}
|
||||
this.getAllPlaylists();
|
||||
});
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
</mat-tab-group>
|
||||
</div>
|
||||
|
||||
<div style="position: relative;" *ngIf="paged_data && paged_data.length > 0 && usePaginator && selectedIndex > 0">
|
||||
<div style="position: relative;" *ngIf="usePaginator && selectedIndex > 0">
|
||||
<div style="position: absolute; margin-left: 8px; margin-top: 5px; scale: 0.8">
|
||||
<mat-form-field>
|
||||
<mat-label><ng-container i18n="File type">File type</ng-container></mat-label>
|
||||
@@ -106,7 +106,7 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<mat-paginator class="paginator" #paginator *ngIf="paged_data && paged_data.length > 0" (page)="pageChangeEvent($event)" [length]="file_count"
|
||||
<mat-paginator class="paginator" #paginator (page)="pageChangeEvent($event)" [length]="file_count"
|
||||
[pageSize]="pageSize"
|
||||
[pageSizeOptions]="[5, 10, 25, 100, this.paged_data && this.paged_data.length > 100 ? this.paged_data.length : 250]">
|
||||
</mat-paginator>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Component, OnInit, Inject } from '@angular/core';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { UntypedFormControl } from '@angular/forms';
|
||||
import { PostsService } from 'app/posts.services';
|
||||
import { Playlist } from 'api-types';
|
||||
|
||||
@@ -14,7 +14,7 @@ export class CreatePlaylistComponent implements OnInit {
|
||||
|
||||
filesToSelectFrom = null;
|
||||
type = null;
|
||||
filesSelect = new FormControl();
|
||||
filesSelect = new UntypedFormControl();
|
||||
audiosToSelectFrom = null;
|
||||
videosToSelectFrom = null;
|
||||
name = '';
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Component, OnInit, Inject, Pipe, PipeTransform, ViewChild, AfterViewIni
|
||||
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';
|
||||
import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { UntypedFormControl } from '@angular/forms';
|
||||
import { args, args_info } from './youtubedl_args';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators/map';
|
||||
@@ -30,13 +30,13 @@ export class HighlightPipe implements PipeTransform {
|
||||
styleUrls: ['./arg-modifier-dialog.component.scss'],
|
||||
})
|
||||
export class ArgModifierDialogComponent implements OnInit, AfterViewInit {
|
||||
myGroup = new FormControl();
|
||||
myGroup = new UntypedFormControl();
|
||||
firstArg = '';
|
||||
secondArg = '';
|
||||
secondArgEnabled = false;
|
||||
modified_args = '';
|
||||
stateCtrl = new FormControl();
|
||||
chipCtrl = new FormControl();
|
||||
stateCtrl = new UntypedFormControl();
|
||||
chipCtrl = new UntypedFormControl();
|
||||
availableArgs = null;
|
||||
argsByCategory = null;
|
||||
argsByKey = null;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Component, OnInit, ElementRef, ViewChild, ViewChildren, QueryList } from '@angular/core';
|
||||
import {PostsService} from '../posts.services';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import {FormControl, Validators} from '@angular/forms';
|
||||
import {UntypedFormControl, Validators} from '@angular/forms';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { saveAs } from 'file-saver';
|
||||
@@ -73,7 +73,7 @@ export class MainComponent implements OnInit {
|
||||
download_uids: string[] = [];
|
||||
current_download: Download = null;
|
||||
|
||||
urlForm = new FormControl('', [Validators.required]);
|
||||
urlForm = new UntypedFormControl('', [Validators.required]);
|
||||
|
||||
qualityOptions = {
|
||||
'video': [
|
||||
@@ -306,7 +306,7 @@ export class MainComponent implements OnInit {
|
||||
this.downloadingfile = false;
|
||||
if (!this.autoplay && !this.downloadOnlyMode && !navigate_mode) {
|
||||
// do nothing
|
||||
this.reloadRecentVideos();
|
||||
this.reloadRecentVideos(is_playlist);
|
||||
} else {
|
||||
// if download only mode, just download the file. no redirect
|
||||
if (force_view === false && this.downloadOnlyMode && !this.iOS) {
|
||||
@@ -315,7 +315,7 @@ export class MainComponent implements OnInit {
|
||||
} else {
|
||||
this.downloadFileFromServer(container as DatabaseFile, type);
|
||||
}
|
||||
this.reloadRecentVideos();
|
||||
this.reloadRecentVideos(is_playlist);
|
||||
} else {
|
||||
localStorage.setItem('player_navigator', this.router.url.split(';')[0]);
|
||||
if (is_playlist) {
|
||||
@@ -780,8 +780,9 @@ export class MainComponent implements OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
reloadRecentVideos(): void {
|
||||
reloadRecentVideos(is_playlist = false): void {
|
||||
this.postsService.files_changed.next(true);
|
||||
if (is_playlist) this.postsService.playlists_changed.next(true);
|
||||
}
|
||||
|
||||
getURLArray(url_str: string): Array<string> {
|
||||
|
||||
@@ -94,25 +94,25 @@
|
||||
</context-group>
|
||||
<note priority="1" from="description">Settings menu label</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="65918861159071115" datatype="html">
|
||||
<source>Successfully created playlist!', '</source>
|
||||
<trans-unit id="39921032161993566" datatype="html">
|
||||
<source>Successfully created playlist!</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7241816854520039909" datatype="html">
|
||||
<source>ERROR: failed to create playlist!', '</source>
|
||||
<trans-unit id="2070856663109337061" datatype="html">
|
||||
<source>ERROR: failed to create playlist!</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5070854963159885174" datatype="html">
|
||||
<source>Playlist successfully removed.', '</source>
|
||||
<trans-unit id="820184305380634591" datatype="html">
|
||||
<source>Playlist successfully removed.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">99</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2f933b826a570836cab04f683970a2d22068458c" datatype="html">
|
||||
|
||||
@@ -3332,7 +3332,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="b1c08387975e6feada407c9b5f5f564261b8192b" datatype="html">
|
||||
<source>Database information could not be retrieved. Check the server logs for more information.</source>
|
||||
<target state="translated">Impossibile recuperare le informazioni del database. Controllare i registri del server per ulteriori informazioni.</target>
|
||||
<target state="translated">Impossibile recuperare le informazioni del database. Controllare il registro del server per ulteriori informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
@@ -3347,6 +3347,698 @@
|
||||
<context context-type="linenumber">48</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5070854963159885174" datatype="html">
|
||||
<source>Playlist successfully removed.', '</source>
|
||||
<target state="translated">Playlist rimossa con successo.', '</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">99</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5215119607776782829" datatype="html">
|
||||
<source>Select downloads to clear</source>
|
||||
<target state="translated">Seleziona i download da cancellare</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">132</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2723988842145709249" datatype="html">
|
||||
<source>Errored downloads</source>
|
||||
<target state="translated">Download errati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">146</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3961621815065792326" datatype="html">
|
||||
<source>Failed to clear finished downloads!</source>
|
||||
<target state="translated">Cancellazione dei download finiti non riuscita!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5823550543348347814" datatype="html">
|
||||
<source>Cleared downloads!</source>
|
||||
<target state="translated">Download cancellati!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2293081271355999967" datatype="html">
|
||||
<source>Logs successfully cleared!</source>
|
||||
<target state="translated">Registro cancellato con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4516710756538206828" datatype="html">
|
||||
<source>Failed to clear logs!</source>
|
||||
<target state="translated">Impossibile cancellare il registro!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">77</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="52e0fa8ada52c3f29774a4508582fd98250b9f93" datatype="html">
|
||||
<source>My files</source>
|
||||
<target state="translated">I miei file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">My files title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6827066f436adfc56a142d5816a8be6113d73b01" datatype="html">
|
||||
<source>No files found.</source>
|
||||
<target state="translated">Nessun file trovato.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">No files found</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5704ec2049d007c5f5fb495a5d8b607e68d58081" datatype="html">
|
||||
<source>Order</source>
|
||||
<target state="translated">Ordina</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">53</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Order</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="ae9a5141f5c6bd62cee4ce837598ea8b0904e5cf" datatype="html">
|
||||
<source>Select files</source>
|
||||
<target state="translated">Seleziona file</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.html</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Select files</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2159130950882492111" datatype="html">
|
||||
<source>Cancel</source>
|
||||
<target state="translated">Annulla</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/confirm-dialog/confirm-dialog.component.ts</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1709839462010459086" datatype="html">
|
||||
<source>Cookies successfully uploaded!</source>
|
||||
<target state="translated">Cookie caricati con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/cookies-uploader-dialog/cookies-uploader-dialog.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3480433876298276350" datatype="html">
|
||||
<source>Database successfully restored!</source>
|
||||
<target state="translated">Database ripristinato con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts</context>
|
||||
<context context-type="linenumber">39</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1946323844380374711" datatype="html">
|
||||
<source>Failed to restore database! See browser console for more info.</source>
|
||||
<target state="translated">Ripristino del database non riuscito! Guarda la console del browser per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts</context>
|
||||
<context context-type="linenumber">46</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4960870191807928282" datatype="html">
|
||||
<source>Sharing enabled.</source>
|
||||
<target state="translated">Condivisione abilitata.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">68</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2720327817780634026" datatype="html">
|
||||
<source>Failed to enable sharing.</source>
|
||||
<target state="translated">Abilitazione della condivisione non riuscita.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5397815846940616259" datatype="html">
|
||||
<source>You must specify an amount of time</source>
|
||||
<target state="translated">Devi specificare un periodo di tempo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3544790314111256717" datatype="html">
|
||||
<source>ERROR:</source>
|
||||
<target state="translated">ERRORE:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts</context>
|
||||
<context context-type="linenumber">95</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f4003b626fcbf3a871778d4dba166e109d02f87c" datatype="html">
|
||||
<source>Thumbnail URL</source>
|
||||
<target state="translated">URL della miniatura</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Thumbnail URL</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="607de17c2a755f65775881c19e276e7c933bcf94" datatype="html">
|
||||
<source>Category</source>
|
||||
<target state="translated">Categoria</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Category</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3f741a2c015bb728088b630296ca401e823c6af8" datatype="html">
|
||||
<source>View count</source>
|
||||
<target state="translated">Numero di visualizzazioni</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">View count</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="989f5aa799ee9672675d68109bff29d1d88ebd49" datatype="html">
|
||||
<source>Local view count</source>
|
||||
<target state="translated">Numero di visualizzazioni locale</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Local view count</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fa37704969eeebd496a172c5077370f569df3ae" datatype="html">
|
||||
<source>Resolution:</source>
|
||||
<target state="translated">Risoluzione:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Video resolution property</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9fc54db2830fbbd332b1adebe28e9283069107ef" datatype="html">
|
||||
<source>Audio bitrate:</source>
|
||||
<target state="translated">Bitrate audio:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Video audio bitrate property</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2734512985872312443" datatype="html">
|
||||
<source>Failed to get file information from the server.</source>
|
||||
<target state="translated">Impossibile ottenere le informazioni del file dal server.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/player/player.component.ts</context>
|
||||
<context context-type="linenumber">149</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5d78fe9ba69a8710613d3f7c35b22e9c8226e4dc" datatype="html">
|
||||
<source>Twitch Client ID</source>
|
||||
<target state="translated">ID Client Twitch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">266</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Twitch Client ID setting placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9208873922277364009" datatype="html">
|
||||
<source>Failed to update categories!</source>
|
||||
<target state="translated">Aggiornamento delle categorie non riuscito!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7180231139026789468" datatype="html">
|
||||
<source>Language successfully changed! Reload to update the page.</source>
|
||||
<target state="translated">Lingua cambiata con successo! Ricarica per aggiornare la pagina.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6123898845299902958" datatype="html">
|
||||
<source>Successfully transfered DB! Reloading info...</source>
|
||||
<target state="translated">DB trasferito con successo! Ricaricando informazioni...</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">340</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5681417617361245213" datatype="html">
|
||||
<source>Failed to transfer DB -- transfer was aborted. Error:</source>
|
||||
<target state="translated">Trasferimento del DB non riuscito -- transferimento interrotto. Errore:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">343</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6519219215739537829" datatype="html">
|
||||
<source>Connection failed! Error: Server error. See logs for more info.</source>
|
||||
<target state="translated">Connessione non riuscita! Errore: Errore server. Guarda il registro per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">363</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="65918861159071115" datatype="html">
|
||||
<source>Successfully created playlist!', '</source>
|
||||
<target state="translated">Playlist creata con successo!', '</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7114033980971410157" datatype="html">
|
||||
<source>Failed to pause download! See server logs for more info.</source>
|
||||
<target state="translated">Interruzione del download non riuscita! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8348223454028662277" datatype="html">
|
||||
<source>OK.</source>
|
||||
<target state="translated">OK.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">270</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="22bac71dbdc1ac62607135994f81cca8094cb251" datatype="html">
|
||||
<source>Upload date</source>
|
||||
<target state="translated">Data caricamento</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">20</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Upload date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1019978815798793544" datatype="html">
|
||||
<source>Failed to retrieve logs!</source>
|
||||
<target state="translated">Recupero dei registro non riuscito!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">46</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">51</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3481862581074838726" datatype="html">
|
||||
<source>VOD url for this video is not supported. VOD ID must be after "twitch.tv/videos/"</source>
|
||||
<target state="translated">L'url del VOD di questo video non è supportato. L'ID del VOD deve essere dopo "twitch.tv/videos/"</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/twitch-chat/twitch-chat.component.ts</context>
|
||||
<context context-type="linenumber">99</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7241816854520039909" datatype="html">
|
||||
<source>ERROR: failed to create playlist!', '</source>
|
||||
<target state="translated">ERRORE: creazione della playlist non riuscita!', '</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/custom-playlists/custom-playlists.component.ts</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a4a4a5f03d7d0831ccf6774094e66a9507a42b58" datatype="html">
|
||||
<source>Clear downloads</source>
|
||||
<target state="translated">Cancella i download</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Clear downloads</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3299455901271096793" datatype="html">
|
||||
<source>Clear downloads</source>
|
||||
<target state="translated">Cancella i download</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">131</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4050356167294261426" datatype="html">
|
||||
<source>Delete success!</source>
|
||||
<target state="translated">Cancellazione avvenuta con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">270</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7405156667148936748" datatype="html">
|
||||
<source>Delete failed!</source>
|
||||
<target state="translated">Cancellazione non riuscita!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">273</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8485375438204712002" datatype="html">
|
||||
<source>Finished downloads</source>
|
||||
<target state="translated">Download terminati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">138</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5223827577229167333" datatype="html">
|
||||
<source>Failed to pause all downloads! See server logs for more info.</source>
|
||||
<target state="translated">Interruzione di tutti i download non riuscita! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">178</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5801924165267871854" datatype="html">
|
||||
<source>Paused downloads</source>
|
||||
<target state="translated">Download interrotti</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7157191502004604261" datatype="html">
|
||||
<source>Chat could not be downloaded.</source>
|
||||
<target state="translated">Impossibile scaricare la chat.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/twitch-chat/twitch-chat.component.ts</context>
|
||||
<context context-type="linenumber">110</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="87406377200084623" datatype="html">
|
||||
<source>Logs copied to clipboard!</source>
|
||||
<target state="translated">Registro copiato negli appunti!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/logs-viewer/logs-viewer.component.ts</context>
|
||||
<context context-type="linenumber">56</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5456775416888155476" datatype="html">
|
||||
<source>Failed to resume download! See server logs for more info.</source>
|
||||
<target state="translated">Ripresa del download non riuscita! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6268791413935580107" datatype="html">
|
||||
<source>Failed to resume all downloads! See server logs for more info.</source>
|
||||
<target state="translated">Ripresa di tutti i download non riuscita! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="571023367671104036" datatype="html">
|
||||
<source>Failed to restart download! See server logs for more info.</source>
|
||||
<target state="translated">Riavvio del download non riuscito! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">202</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4529487534884306633" datatype="html">
|
||||
<source>Failed to cancel download! See server logs for more info.</source>
|
||||
<target state="translated">Annullamento del download non riuscito! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/downloads/downloads.component.ts</context>
|
||||
<context context-type="linenumber">210</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c1b7e6d75ff4285c7636c67e5ef259629b81725b" datatype="html">
|
||||
<source>Confirm Password</source>
|
||||
<target state="translated">Conferma password</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/login/login.component.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Confirm Password</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8937901770314883418" datatype="html">
|
||||
<source>Successfully deleted file:</source>
|
||||
<target state="translated">File eliminati con successo:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">291</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/recent-videos/recent-videos.component.ts</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e58f5716d6c08b6a841eb003c9f9774b5c5d34a9" datatype="html">
|
||||
<source>Delete and don't download again</source>
|
||||
<target state="translated">Elimina e non scaricare di nuovo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/unified-file-card/unified-file-card.component.html</context>
|
||||
<context context-type="linenumber">37</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/unified-file-card/unified-file-card.component.html</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Delete forever subscription video button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="9203653061903371757" datatype="html">
|
||||
<source>Playlist updated successfully.</source>
|
||||
<target state="translated">Playlist aggiornata con successo.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/create-playlist/create-playlist.component.ts</context>
|
||||
<context context-type="linenumber">69</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/create-playlist/create-playlist.component.ts</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="880407735794041263" datatype="html">
|
||||
<source>Download failed.</source>
|
||||
<target state="translated">Download non riuscito.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/twitch-chat/twitch-chat.component.ts</context>
|
||||
<context context-type="linenumber">106</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="643438049907907768" datatype="html">
|
||||
<source>Failed to restore database! See logs for more info.</source>
|
||||
<target state="translated">Ripristino del database non riuscito! Guarda il registro del server per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2859348955905483094" datatype="html">
|
||||
<source>Failed to enable sharing - server error.</source>
|
||||
<target state="translated">Abilitazione della condivisione non riuscita - errore server.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">74</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3561468911579213356" datatype="html">
|
||||
<source>Sharing disabled.</source>
|
||||
<target state="translated">Condivisione disabilitata.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8692976466689769553" datatype="html">
|
||||
<source>Failed to disable sharing - server error.</source>
|
||||
<target state="translated">Disabilitazione della condivisione non riuscita - errore server.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2876893175497409225" datatype="html">
|
||||
<source>Update failed. Check logs for more details.</source>
|
||||
<target state="translated">Aggiornamento non riuscito. Guarda il registro per più dettagli.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-progress-dialog/update-progress-dialog.component.ts</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3317b8688eb2cfabc4021cd7b2926b32f3864ad2" datatype="html">
|
||||
<source>Choose a date</source>
|
||||
<target state="translated">Seleziona una data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Choose a date</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7840375760456214518" datatype="html">
|
||||
<source>Failed to disable sharing.</source>
|
||||
<target state="translated">Disabilitazione della condivisione non riuscita.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/share-media-dialog/share-media-dialog.component.ts</context>
|
||||
<context context-type="linenumber">82</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8c7be184fefd6750e4e5d0c7a90e74721c58f8a" datatype="html">
|
||||
<source>Uploader</source>
|
||||
<target state="translated">Caricato da</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Uploader</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d49d5d6786b69d140e20cfddfe29690a19641a88" datatype="html">
|
||||
<source>Thumbnail path</source>
|
||||
<target state="translated">Percorso della miniatura</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dialogs/video-info-dialog/video-info-dialog.component.html</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Thumbnail path</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8314249599019746316" datatype="html">
|
||||
<source>Download failed!</source>
|
||||
<target state="translated">Download non riuscito!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">387</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/main/main.component.ts</context>
|
||||
<context context-type="linenumber">775</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6789263921624845085" datatype="html">
|
||||
<source>Failed to load playlist!</source>
|
||||
<target state="translated">Caricamento della playlist non riuscito!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/player/player.component.ts</context>
|
||||
<context context-type="linenumber">186</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/player/player.component.ts</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4c9a15ab7fb3dce1002ea7aea4ecada3c1ee12e9" datatype="html">
|
||||
<source>Generating an ID/secret is easy!</source>
|
||||
<target state="translated">Generare un ID/secret è facile!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Twitch Client ID setting hint</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="8506540da14d205ea092b4c856e242ed7f500643" datatype="html">
|
||||
<source>Twitch Client Secret</source>
|
||||
<target state="translated">Secret Client Twitch</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.html</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Twitch Client Secret setting placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4604336107574138791" datatype="html">
|
||||
<source>Chrome users must drag the 'Alternate URL' link to your bookmarks.</source>
|
||||
<target state="translated">Gli utenti di Chrome devono trascinare il link del 'Alternate URL' nei preferiti.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">237</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4257962986336738751" datatype="html">
|
||||
<source>Successfully killed all downloads!</source>
|
||||
<target state="translated">Uccisi con successo tutti i download!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1942965859829798388" datatype="html">
|
||||
<source>Restarting!</source>
|
||||
<target state="translated">Riavviando!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">307</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6224607866493148072" datatype="html">
|
||||
<source>Failed to restart the server.</source>
|
||||
<target state="translated">Riavvio del server non riuscito.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">309</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2600933489084742998" datatype="html">
|
||||
<source>Failed to kill all downloads! Check logs for details.</source>
|
||||
<target state="translated">Impossibile uccidere tutti i download! Guarda il registro per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">299</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1716030487077666916" datatype="html">
|
||||
<source>Failed to transfer DB -- API call failed. See browser logs for details.</source>
|
||||
<target state="translated">Trasferimento del DB non riuscito -- Errore chiamata API. Guarda il registro del browser per più informazioni.</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">347</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6018050954136387828" datatype="html">
|
||||
<source>Connection successful!</source>
|
||||
<target state="translated">Connessione avvenuta con successo!</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">357</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4021495815084152271" datatype="html">
|
||||
<source>Connection failed! Error:</source>
|
||||
<target state="translated">Connessione non riuscita! Errore:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/settings/settings.component.ts</context>
|
||||
<context context-type="linenumber">359</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"target": "es2019",
|
||||
"target": "es2020",
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": true,
|
||||
"typeRoots": [
|
||||
|
||||
Reference in New Issue
Block a user