diff --git a/Dockerfile b/Dockerfile index ed018ac..27ae8d5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ 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 @@ -18,7 +18,7 @@ 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 && \ diff --git a/backend/app.js b/backend/app.js index ed1823b..48c0b95 100644 --- a/backend/app.js +++ b/backend/app.js @@ -68,7 +68,8 @@ db.defaults( configWriteFlag: false, downloads: {}, subscriptions: [], - files_to_db_migration_complete: false + files_to_db_migration_complete: false, + tasks_manager_role_migration_complete: false }).write(); users_db.defaults( @@ -189,6 +190,15 @@ async function checkMigrations() { else { logger.error('Migration failed: 4.2->4.3+'); } } + const tasks_manager_role_migration_complete = db.get('tasks_manager_role_migration_complete').value(); + if (!tasks_manager_role_migration_complete) { + logger.info('Checking if tasks manager role permissions exist for admin user...'); + const success = await auth_api.changeRolePermissions('admin', 'tasks_manager', 'yes'); + if (success) logger.info('Task manager permissions check complete!'); + else logger.error('Failed to auto add tasks manager permissions to admin role!'); + db.set('tasks_manager_role_migration_complete', true).write(); + } + return true; } diff --git a/backend/authentication/auth.js b/backend/authentication/auth.js index e6fa23c..92740d1 100644 --- a/backend/authentication/auth.js +++ b/backend/authentication/auth.js @@ -361,7 +361,6 @@ exports.userHasPermission = async function(user_uid, permission) { logger.error('Invalid role ' + role); return false; } - const role_permissions = (await db_api.getRecords('roles'))['permissions']; const user_has_explicit_permission = user_obj['permissions'].includes(permission); const permission_in_overrides = user_obj['permission_overrides'].includes(permission); @@ -376,7 +375,8 @@ exports.userHasPermission = async function(user_uid, permission) { } // no overrides, let's check if the role has the permission - if (role_permissions.includes(permission)) { + const role_has_permission = await exports.roleHasPermissions(role, permission); + if (role_has_permission) { return true; } else { logger.verbose(`User ${user_uid} failed to get permission ${permission}`); @@ -384,6 +384,16 @@ exports.userHasPermission = async function(user_uid, permission) { } } +exports.roleHasPermissions = async function(role, permission) { + const role_obj = await db_api.getRecord('roles', {key: role}) + if (!role) { + logger.error(`Role ${role} does not exist!`); + } + const role_permissions = role_obj['permissions']; + if (role_permissions && role_permissions.includes(permission)) return true; + else return false; +} + exports.userPermissions = async function(user_uid) { let user_permissions = []; const user_obj = await db_api.getRecord('users', ({uid: user_uid})); diff --git a/backend/consts.js b/backend/consts.js index f473e07..bf1ed47 100644 --- a/backend/consts.js +++ b/backend/consts.js @@ -221,7 +221,8 @@ exports.AVAILABLE_PERMISSIONS = [ 'subscriptions', 'sharing', 'advanced_download', - 'downloads_manager' + 'downloads_manager', + 'tasks_manager' ]; exports.DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details' diff --git a/backend/utils.js b/backend/utils.js index 3aac116..78d02f1 100644 --- a/backend/utils.js +++ b/backend/utils.js @@ -172,7 +172,7 @@ function getExpectedFileSize(input_info_jsons) { const formats = info_json['format_id'].split('+'); let individual_expected_filesize = 0; formats.forEach(format_id => { - if(info_json.formats !== undefined) { + if (info_json.formats !== undefined) { info_json.formats.forEach(available_format => { if (available_format.format_id === format_id && (available_format.filesize || available_format.filesize_approx)) { individual_expected_filesize += (available_format.filesize ? available_format.filesize : available_format.filesize_approx); diff --git a/docker-compose.yml b/docker-compose.yml index 3ab792a..0a9133d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,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 \ No newline at end of file + - ./db/:/data/db diff --git a/src/app/app.component.html b/src/app/app.component.html index 278b8fe..c2d79a2 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -44,7 +44,7 @@ Login Subscriptions Downloads - Tasks + Tasks Settings diff --git a/src/app/components/manage-role/manage-role.component.ts b/src/app/components/manage-role/manage-role.component.ts index dbe2511..2f13e0a 100644 --- a/src/app/components/manage-role/manage-role.component.ts +++ b/src/app/components/manage-role/manage-role.component.ts @@ -14,12 +14,13 @@ export class ManageRoleComponent implements OnInit { permissions = null; permissionToLabel = { - 'filemanager': 'File manager', - 'settings': 'Settings access', - 'subscriptions': 'Subscriptions', - 'sharing': 'Share files', - 'advanced_download': 'Use advanced download mode', - 'downloads_manager': 'Use downloads manager' + 'filemanager': $localize`File manager`, + 'settings': $localize`Settings access`, + 'subscriptions': $localize`Subscriptions`, + 'sharing': $localize`Share files`, + 'advanced_download': $localize`Use advanced download mode`, + 'downloads_manager': $localize`Use downloads manager`, + 'tasks_manager': $localize`Use tasks manager`, } constructor(public postsService: PostsService, private dialogRef: MatDialogRef, diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts index 9115437..8e74bed 100644 --- a/src/app/posts.services.ts +++ b/src/app/posts.services.ts @@ -4,7 +4,7 @@ import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observable/throw'; import { THEMES_CONFIG } from '../themes'; -import { Router, CanActivate } from '@angular/router'; +import { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router'; import { DOCUMENT } from '@angular/common'; import { BehaviorSubject } from 'rxjs'; import { MatSnackBar } from '@angular/material/snack-bar'; @@ -229,12 +229,15 @@ export class PostsService implements CanActivate { } } - canActivate(route, state): Promise { - return new Promise(resolve => { - resolve(true); - }) - console.log(route); - throw new Error('Method not implemented.'); + canActivate(route: ActivatedRouteSnapshot, state): Promise { + const PATH_TO_REQUIRED_PERM = { + settings: 'settings', + subscriptions: 'subscriptions', + downloads: 'downloads_manager', + tasks: 'tasks_manager' + } + const required_perm = PATH_TO_REQUIRED_PERM[route.routeConfig.path]; + return required_perm ? this.hasPermission(required_perm) : true; } setTheme(theme) { diff --git a/src/assets/i18n/messages.en.xlf b/src/assets/i18n/messages.en.xlf index e561642..99b9861 100644 --- a/src/assets/i18n/messages.en.xlf +++ b/src/assets/i18n/messages.en.xlf @@ -645,6 +645,55 @@ Close + + File manager + + src/app/components/manage-role/manage-role.component.ts + 17 + + + + Settings access + + src/app/components/manage-role/manage-role.component.ts + 18 + + + + Subscriptions + + src/app/components/manage-role/manage-role.component.ts + 19 + + + + Share files + + src/app/components/manage-role/manage-role.component.ts + 20 + + + + Use advanced download mode + + src/app/components/manage-role/manage-role.component.ts + 21 + + + + Use downloads manager + + src/app/components/manage-role/manage-role.component.ts + 22 + + + + Use tasks manager + + src/app/components/manage-role/manage-role.component.ts + 23 + + Manage user diff --git a/src/assets/i18n/messages.it.xlf b/src/assets/i18n/messages.it.xlf index d02bf02..076bc0f 100644 --- a/src/assets/i18n/messages.it.xlf +++ b/src/assets/i18n/messages.it.xlf @@ -3332,7 +3332,7 @@ Database information could not be retrieved. Check the server logs for more information. - Impossibile recuperare le informazioni del database. Controllare i registri del server per ulteriori informazioni. + Impossibile recuperare le informazioni del database. Controllare il registro del server per ulteriori informazioni. src/app/settings/settings.component.html 333 @@ -3347,6 +3347,698 @@ 48 + + Playlist successfully removed.', ' + Playlist rimossa con successo.', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 99 + + + + Select downloads to clear + Seleziona i download da cancellare + + src/app/components/downloads/downloads.component.ts + 132 + + + + Errored downloads + Download errati + + src/app/components/downloads/downloads.component.ts + 146 + + + + Failed to clear finished downloads! + Cancellazione dei download finiti non riuscita! + + src/app/components/downloads/downloads.component.ts + 157 + + + + Cleared downloads! + Download cancellati! + + src/app/components/downloads/downloads.component.ts + 159 + + + + Logs successfully cleared! + Registro cancellato con successo! + + src/app/components/logs-viewer/logs-viewer.component.ts + 75 + + + + Failed to clear logs! + Impossibile cancellare il registro! + + src/app/components/logs-viewer/logs-viewer.component.ts + 77 + + + src/app/components/logs-viewer/logs-viewer.component.ts + 80 + + + + My files + I miei file + + src/app/components/recent-videos/recent-videos.component.html + 20 + + My files title + + + No files found. + Nessun file trovato. + + src/app/components/recent-videos/recent-videos.component.html + 40 + + No files found + + + Order + Ordina + + src/app/components/recent-videos/recent-videos.component.html + 53 + + Order + + + Select files + Seleziona file + + src/app/components/recent-videos/recent-videos.component.html + 71 + + Select files + + + Cancel + Annulla + + src/app/dialogs/confirm-dialog/confirm-dialog.component.ts + 15 + + + + Cookies successfully uploaded! + Cookie caricati con successo! + + src/app/dialogs/cookies-uploader-dialog/cookies-uploader-dialog.component.ts + 42 + + + + Database successfully restored! + Database ripristinato con successo! + + src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts + 39 + + + + Failed to restore database! See browser console for more info. + Ripristino del database non riuscito! Guarda la console del browser per più informazioni. + + src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts + 46 + + + + Sharing enabled. + Condivisione abilitata. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 68 + + + + Failed to enable sharing. + Abilitazione della condivisione non riuscita. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 71 + + + + You must specify an amount of time + Devi specificare un periodo di tempo + + src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts + 79 + + + + ERROR: + ERRORE: + + src/app/dialogs/subscribe-dialog/subscribe-dialog.component.ts + 95 + + + + Thumbnail URL + URL della miniatura + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 29 + + Thumbnail URL + + + Category + Categoria + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 32 + + Category + + + View count + Numero di visualizzazioni + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 42 + + View count + + + Local view count + Numero di visualizzazioni locale + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 45 + + Local view count + + + Resolution: + Risoluzione: + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 51 + + Video resolution property + + + Audio bitrate: + Bitrate audio: + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 55 + + Video audio bitrate property + + + Failed to get file information from the server. + Impossibile ottenere le informazioni del file dal server. + + src/app/player/player.component.ts + 149 + + + + Twitch Client ID + ID Client Twitch + + src/app/settings/settings.component.html + 266 + + Twitch Client ID setting placeholder + + + Failed to update categories! + Aggiornamento delle categorie non riuscito! + + src/app/settings/settings.component.ts + 134 + + + + Language successfully changed! Reload to update the page. + Lingua cambiata con successo! Ricarica per aggiornare la pagina. + + src/app/settings/settings.component.ts + 209 + + + + Successfully transfered DB! Reloading info... + DB trasferito con successo! Ricaricando informazioni... + + src/app/settings/settings.component.ts + 340 + + + + Failed to transfer DB -- transfer was aborted. Error: + Trasferimento del DB non riuscito -- transferimento interrotto. Errore: + + src/app/settings/settings.component.ts + 343 + + + + Connection failed! Error: Server error. See logs for more info. + Connessione non riuscita! Errore: Errore server. Guarda il registro per più informazioni. + + src/app/settings/settings.component.ts + 363 + + + + Successfully created playlist!', ' + Playlist creata con successo!', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 56 + + + + Failed to pause download! See server logs for more info. + Interruzione del download non riuscita! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 170 + + + src/app/components/downloads/downloads.component.ts + 218 + + + + OK. + OK. + + src/app/components/recent-videos/recent-videos.component.ts + 270 + + + src/app/components/recent-videos/recent-videos.component.ts + 273 + + + src/app/components/recent-videos/recent-videos.component.ts + 276 + + + + Upload date + Data caricamento + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 20 + + Upload date + + + Failed to retrieve logs! + Recupero dei registro non riuscito! + + src/app/components/logs-viewer/logs-viewer.component.ts + 46 + + + src/app/components/logs-viewer/logs-viewer.component.ts + 51 + + + + VOD url for this video is not supported. VOD ID must be after "twitch.tv/videos/" + L'url del VOD di questo video non è supportato. L'ID del VOD deve essere dopo "twitch.tv/videos/" + + src/app/components/twitch-chat/twitch-chat.component.ts + 99 + + + + ERROR: failed to create playlist!', ' + ERRORE: creazione della playlist non riuscita!', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 58 + + + + Clear downloads + Cancella i download + + src/app/components/downloads/downloads.component.html + 85 + + Clear downloads + + + Clear downloads + Cancella i download + + src/app/components/downloads/downloads.component.ts + 131 + + + + Delete success! + Cancellazione avvenuta con successo! + + src/app/components/recent-videos/recent-videos.component.ts + 270 + + + + Delete failed! + Cancellazione non riuscita! + + src/app/components/recent-videos/recent-videos.component.ts + 273 + + + src/app/components/recent-videos/recent-videos.component.ts + 276 + + + + Finished downloads + Download terminati + + src/app/components/downloads/downloads.component.ts + 138 + + + + Failed to pause all downloads! See server logs for more info. + Interruzione di tutti i download non riuscita! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 178 + + + + Paused downloads + Download interrotti + + src/app/components/downloads/downloads.component.ts + 142 + + + + Chat could not be downloaded. + Impossibile scaricare la chat. + + src/app/components/twitch-chat/twitch-chat.component.ts + 110 + + + + Logs copied to clipboard! + Registro copiato negli appunti! + + src/app/components/logs-viewer/logs-viewer.component.ts + 56 + + + + Failed to resume download! See server logs for more info. + Ripresa del download non riuscita! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 186 + + + + Failed to resume all downloads! See server logs for more info. + Ripresa di tutti i download non riuscita! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 194 + + + + Failed to restart download! See server logs for more info. + Riavvio del download non riuscito! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 202 + + + + Failed to cancel download! See server logs for more info. + Annullamento del download non riuscito! Guarda il registro del server per più informazioni. + + src/app/components/downloads/downloads.component.ts + 210 + + + + Confirm Password + Conferma password + + src/app/components/login/login.component.html + 28 + + Confirm Password + + + Successfully deleted file: + File eliminati con successo: + + src/app/components/recent-videos/recent-videos.component.ts + 291 + + + src/app/components/recent-videos/recent-videos.component.ts + 299 + + + + Delete and don't download again + Elimina e non scaricare di nuovo + + src/app/components/unified-file-card/unified-file-card.component.html + 37 + + + src/app/components/unified-file-card/unified-file-card.component.html + 40 + + Delete forever subscription video button + + + Playlist updated successfully. + Playlist aggiornata con successo. + + src/app/create-playlist/create-playlist.component.ts + 69 + + + src/app/create-playlist/create-playlist.component.ts + 75 + + + + Download failed. + Download non riuscito. + + src/app/components/twitch-chat/twitch-chat.component.ts + 106 + + + + Failed to restore database! See logs for more info. + Ripristino del database non riuscito! Guarda il registro del server per più informazioni. + + src/app/dialogs/restore-db-dialog/restore-db-dialog.component.ts + 42 + + + + Failed to enable sharing - server error. + Abilitazione della condivisione non riuscita - errore server. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 74 + + + + Sharing disabled. + Condivisione disabilitata. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 79 + + + + Failed to disable sharing - server error. + Disabilitazione della condivisione non riuscita - errore server. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 85 + + + + Update failed. Check logs for more details. + Aggiornamento non riuscito. Guarda il registro per più dettagli. + + src/app/dialogs/update-progress-dialog/update-progress-dialog.component.ts + 30 + + + + Choose a date + Seleziona una data + + src/app/dialogs/update-task-schedule-dialog/update-task-schedule-dialog.component.html + 22 + + Choose a date + + + Failed to disable sharing. + Disabilitazione della condivisione non riuscita. + + src/app/dialogs/share-media-dialog/share-media-dialog.component.ts + 82 + + + + Uploader + Caricato da + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 17 + + Uploader + + + Thumbnail path + Percorso della miniatura + + src/app/dialogs/video-info-dialog/video-info-dialog.component.html + 26 + + Thumbnail path + + + Download failed! + Download non riuscito! + + src/app/main/main.component.ts + 387 + + + src/app/main/main.component.ts + 775 + + + + Failed to load playlist! + Caricamento della playlist non riuscito! + + src/app/player/player.component.ts + 186 + + + src/app/player/player.component.ts + 189 + + + + Generating an ID/secret is easy! + Generare un ID/secret è facile! + + src/app/settings/settings.component.html + 267 + + Twitch Client ID setting hint + + + Twitch Client Secret + Secret Client Twitch + + src/app/settings/settings.component.html + 272 + + Twitch Client Secret setting placeholder + + + Chrome users must drag the 'Alternate URL' link to your bookmarks. + Gli utenti di Chrome devono trascinare il link del 'Alternate URL' nei preferiti. + + src/app/settings/settings.component.ts + 237 + + + + Successfully killed all downloads! + Uccisi con successo tutti i download! + + src/app/settings/settings.component.ts + 292 + + + + Restarting! + Riavviando! + + src/app/settings/settings.component.ts + 307 + + + + Failed to restart the server. + Riavvio del server non riuscito. + + src/app/settings/settings.component.ts + 309 + + + + Failed to kill all downloads! Check logs for details. + Impossibile uccidere tutti i download! Guarda il registro per più informazioni. + + src/app/settings/settings.component.ts + 295 + + + src/app/settings/settings.component.ts + 299 + + + + Failed to transfer DB -- API call failed. See browser logs for details. + Trasferimento del DB non riuscito -- Errore chiamata API. Guarda il registro del browser per più informazioni. + + src/app/settings/settings.component.ts + 347 + + + + Connection successful! + Connessione avvenuta con successo! + + src/app/settings/settings.component.ts + 357 + + + + Connection failed! Error: + Connessione non riuscita! Errore: + + src/app/settings/settings.component.ts + 359 + + diff --git a/src/assets/i18n/messages.sv.xlf b/src/assets/i18n/messages.sv.xlf index cc963f4..5f3f45c 100644 --- a/src/assets/i18n/messages.sv.xlf +++ b/src/assets/i18n/messages.sv.xlf @@ -4,6 +4,7 @@ Profile + Profil src/app/app.component.html 19 @@ -12,6 +13,7 @@ Dark + Mörk src/app/app.component.html 23 @@ -24,6 +26,7 @@ About + Om src/app/app.component.html 32 @@ -32,6 +35,7 @@ Home + Hem src/app/app.component.html 43 @@ -40,6 +44,7 @@ Login + Logga in src/app/app.component.html 44 @@ -56,6 +61,7 @@ Subscriptions + Prenumerationer src/app/app.component.html 45 @@ -64,6 +70,7 @@ Downloads + Nedladdningar src/app/app.component.html 46 @@ -72,6 +79,7 @@ Tasks + Uppgifter src/app/app.component.html 47 @@ -80,6 +88,7 @@ Settings + Inställningar src/app/app.component.html 50 @@ -92,6 +101,7 @@ Date + Datum src/app/components/downloads/downloads.component.html 7 @@ -100,6 +110,7 @@ Title + Titel src/app/components/downloads/downloads.component.html 13 @@ -112,6 +123,7 @@ Subscription + Prenumeration src/app/components/downloads/downloads.component.html 23 @@ -120,6 +132,7 @@ Stage + Etapp src/app/components/downloads/downloads.component.html 36 @@ -128,6 +141,7 @@ Progress + Förlopp src/app/components/downloads/downloads.component.html 42 @@ -136,6 +150,7 @@ Actions + Åtgärder src/app/components/downloads/downloads.component.html 55 @@ -148,6 +163,7 @@ Pause + Paus src/app/components/downloads/downloads.component.html 59 @@ -156,6 +172,7 @@ Resume + Återuppta src/app/components/downloads/downloads.component.html 60 @@ -164,6 +181,7 @@ Cancel + Avbryt src/app/components/downloads/downloads.component.html 61 @@ -208,6 +226,7 @@ Watch content + Spela innehåll src/app/components/downloads/downloads.component.html 64 @@ -216,6 +235,7 @@ Show error + Visa fel src/app/components/downloads/downloads.component.html 65 @@ -224,6 +244,7 @@ Restart + Starta om src/app/components/downloads/downloads.component.html 66 @@ -232,6 +253,7 @@ Clear + Rensa src/app/components/downloads/downloads.component.html 68 @@ -240,6 +262,7 @@ Pause all downloads + Pausa alla nedladdningar src/app/components/downloads/downloads.component.html 83 @@ -248,6 +271,7 @@ Resume all downloads + Återuppta alla nedladdningar src/app/components/downloads/downloads.component.html 84 @@ -264,6 +288,7 @@ No downloads available! + Inga nedladdningar tillgängliga! src/app/components/downloads/downloads.component.html 90 @@ -272,6 +297,7 @@ Creating download + Skapar nedladdning src/app/components/downloads/downloads.component.ts 58 @@ -279,6 +305,7 @@ Getting info + Hämtar info src/app/components/downloads/downloads.component.ts 59 @@ -286,6 +313,7 @@ Downloading file + Hämtar fil src/app/components/downloads/downloads.component.ts 60 @@ -293,6 +321,7 @@ Complete + Färdig src/app/components/downloads/downloads.component.ts 61 @@ -314,6 +343,7 @@ Clear + Rensa src/app/components/downloads/downloads.component.ts 131 @@ -321,6 +351,7 @@ Error for + Fel för src/app/components/downloads/downloads.component.ts 238 @@ -328,6 +359,7 @@ Copy to clipboard + Kopiera till urklipp src/app/components/downloads/downloads.component.ts 240 @@ -335,6 +367,7 @@ Close + Stäng src/app/components/downloads/downloads.component.ts 241 @@ -342,6 +375,7 @@ Copied to clipboard! + Kopierad till urklipp! src/app/components/downloads/downloads.component.ts 249 @@ -349,6 +383,7 @@ Register + Registrera src/app/components/login/login.component.html 38 @@ -361,6 +396,7 @@ Lines: + Rader: src/app/components/logs-viewer/logs-viewer.component.html 22 @@ -369,6 +405,7 @@ Clear logs + Rensa loggar src/app/components/logs-viewer/logs-viewer.component.html 34 @@ -377,6 +414,7 @@ Manage role + Hantera roll src/app/components/manage-role/manage-role.component.html 1 @@ -385,6 +423,7 @@ Yes + Ja src/app/components/manage-role/manage-role.component.html 9 @@ -397,6 +436,7 @@ No + Nej src/app/components/manage-role/manage-role.component.html 10 @@ -409,6 +449,7 @@ Close + Stäng src/app/components/manage-role/manage-role.component.html 18 @@ -453,6 +494,7 @@ Manage user + Hantera användare src/app/components/manage-user/manage-user.component.html 1 @@ -465,6 +507,7 @@ User UID: + Användar-UID: src/app/components/manage-user/manage-user.component.html 4 @@ -473,6 +516,7 @@ New password + Nytt lösenord src/app/components/manage-user/manage-user.component.html 8 @@ -481,6 +525,7 @@ Set new password + Välj nytt lösenord src/app/components/manage-user/manage-user.component.html 10 @@ -489,6 +534,7 @@ Use role default + Använd förvald roll src/app/components/manage-user/manage-user.component.html 19 @@ -497,6 +543,7 @@ Search + Sök src/app/components/modify-users/modify-users.component.html 7 @@ -512,7 +559,8 @@ search field description - User name + User name + Användarnamn src/app/components/modify-users/modify-users.component.html 17 @@ -520,7 +568,8 @@ Username users table header - Role + Role + Roll src/app/components/modify-users/modify-users.component.html 35 @@ -528,7 +577,8 @@ Role users table header - Actions + Actions + Åtgärder src/app/components/modify-users/modify-users.component.html 55 @@ -537,6 +587,7 @@ Save + Spara src/app/components/modify-users/modify-users.component.html 58 @@ -561,6 +612,7 @@ Edit user + Ändra användare src/app/components/modify-users/modify-users.component.html 66 @@ -569,6 +621,7 @@ Delete user + Radera användare src/app/components/modify-users/modify-users.component.html 73 @@ -577,6 +630,7 @@ Add Users + Lägg till användare src/app/components/modify-users/modify-users.component.html 90 @@ -585,6 +639,7 @@ Edit Role + Ändra roll src/app/components/modify-users/modify-users.component.html 95 @@ -609,6 +664,7 @@ File type + Filtyp src/app/components/recent-videos/recent-videos.component.html 52 @@ -617,6 +673,7 @@ Both + Båda src/app/components/recent-videos/recent-videos.component.html 54 @@ -625,6 +682,7 @@ Video only + Enbart video src/app/components/recent-videos/recent-videos.component.html 55 @@ -633,6 +691,7 @@ Audio only + Enbart ljud src/app/components/recent-videos/recent-videos.component.html 56 @@ -640,7 +699,8 @@ Audio only - See more. + See more. + Visa mer. src/app/components/see-more/see-more.component.html 4,6 @@ -648,7 +708,8 @@ See more - See less. + See less. + Visa mindre. src/app/components/see-more/see-more.component.html 7,9 @@ -657,6 +718,7 @@ Skip ad + Hoppa över reklam src/app/components/skip-ad-button/skip-ad-button.component.html 1 @@ -665,6 +727,7 @@ Last ran + Senaste körning src/app/components/tasks/tasks.component.html 16 @@ -673,6 +736,7 @@ N/A + N/A src/app/components/tasks/tasks.component.html 19 @@ -685,6 +749,7 @@ Last confirmed + Senast bekräftad src/app/components/tasks/tasks.component.html 25 @@ -693,6 +758,7 @@ Status + Status src/app/components/tasks/tasks.component.html 34 @@ -701,6 +767,7 @@ Busy + Upptagen src/app/components/tasks/tasks.component.html 36 @@ -709,6 +776,7 @@ Scheduled for + Schemalagd till src/app/components/tasks/tasks.component.html 38 @@ -717,6 +785,7 @@ Not scheduled + Inte schemalagd src/app/components/tasks/tasks.component.html 42 @@ -725,6 +794,7 @@ Clear missing files from DB: + Rensa saknade filer från databas: src/app/components/tasks/tasks.component.html 57 @@ -733,6 +803,7 @@ Clear duplicate files from DB: + Rensa fildubletter från databas: src/app/components/tasks/tasks.component.html 60 @@ -741,6 +812,7 @@ Update binary to: + Uppdatera binär till: src/app/components/tasks/tasks.component.html 63 @@ -749,6 +821,7 @@ Run + Kör src/app/components/tasks/tasks.component.html 69 @@ -757,6 +830,7 @@ Schedule + Schema src/app/components/tasks/tasks.component.html 72 @@ -765,6 +839,7 @@ Restore DB from backup + Återställ databas från backup src/app/components/tasks/tasks.component.html 89 @@ -777,6 +852,7 @@ Reset tasks + Återställ uppgifter src/app/components/tasks/tasks.component.html 90 @@ -785,6 +861,7 @@ No tasks available! + Inga uppgifter tillgängliga! src/app/components/tasks/tasks.component.html 94 @@ -793,6 +870,7 @@ Successfully ran task! + Lyckades köra uppgift! src/app/components/tasks/tasks.component.ts 78 @@ -800,6 +878,7 @@ Failed to run task! + Misslyckades köra uppgift! src/app/components/tasks/tasks.component.ts 79 @@ -811,6 +890,7 @@ Successfully confirmed task! + Lyckades bekräfta uppgift! src/app/components/tasks/tasks.component.ts 89 @@ -818,6 +898,7 @@ Failed to confirm task! + Misslyckades bekräfta uppgift! src/app/components/tasks/tasks.component.ts 90 @@ -829,6 +910,7 @@ Reset tasks + Återställ uppgifter src/app/components/tasks/tasks.component.ts 132 @@ -836,6 +918,7 @@ Would you like to reset your tasks? All your schedules will be removed as well. + Vill du återställa dina uppgifter? Alla schemaläggningar kommer också att raderas. src/app/components/tasks/tasks.component.ts 133 @@ -843,6 +926,7 @@ Reset + Återställ src/app/components/tasks/tasks.component.ts 134 @@ -850,6 +934,7 @@ Tasks successfully reset! + Lyckades återställa uppgift! src/app/components/tasks/tasks.component.ts 142 @@ -857,6 +942,7 @@ Failed to reset tasks! + Misslyckades återställa uppgift! src/app/components/tasks/tasks.component.ts 144 @@ -1176,6 +1262,7 @@ User name + Användarnamn src/app/dialogs/add-user-dialog/add-user-dialog.component.html 6 @@ -1184,6 +1271,7 @@ Password + Lösenord src/app/dialogs/add-user-dialog/add-user-dialog.component.html 11 @@ -1515,7 +1603,8 @@ Randomize order when playing checkbox label - Normal order  + Normal order + Normal ordning src/app/dialogs/modify-playlist/modify-playlist.component.html 18 @@ -1523,7 +1612,8 @@ Normal order - Reverse order  + Reverse order + Omvänd ordning src/app/dialogs/modify-playlist/modify-playlist.component.html 19 @@ -1847,7 +1937,7 @@ Category property - Quality + Quality src/app/main/main.component.html 19,20 @@ -1863,7 +1953,7 @@ YT search Use URL button for searched video - View + View src/app/main/main.component.html 55,57 @@ -1871,7 +1961,7 @@ YT search View button for searched video - Only Audio + Only Audio src/app/main/main.component.html 65,67 @@ -1879,7 +1969,7 @@ Only Audio checkbox - Autoplay + Autoplay src/app/main/main.component.html 70,72 @@ -1887,7 +1977,7 @@ Autoplay checkbox - Download + Download src/app/main/main.component.html 79,82 @@ -1895,7 +1985,7 @@ Main download button - Cancel + Cancel src/app/main/main.component.html 84,87 @@ -1903,7 +1993,7 @@ Cancel download button - Advanced + Advanced src/app/main/main.component.html 96,99 @@ -1911,7 +2001,7 @@ Advanced download mode panel - Simulated command: + Simulated command: src/app/main/main.component.html 102,104 @@ -1919,7 +2009,7 @@ Simulated command label - Use custom args + Use custom args src/app/main/main.component.html 110,112 @@ -1927,7 +2017,7 @@ Use custom args checkbox - Replace args + Replace args src/app/main/main.component.html 116,118 @@ -1935,7 +2025,7 @@ Replace args - No need to include URL, just everything after. Args are delimited using two commas like so: ,, + No need to include URL, just everything after. Args are delimited using two commas like so: ,, src/app/main/main.component.html 123,125 @@ -1943,7 +2033,7 @@ Custom Args input hint - Use custom output + Use custom output src/app/main/main.component.html 131,133 @@ -1959,7 +2049,7 @@ Custom output placeholder - Use authentication + Use authentication src/app/main/main.component.html 145,147 @@ -1975,7 +2065,7 @@ YT Username placeholder - Crop file + Crop file src/app/main/main.component.html 160,162 @@ -2610,7 +2700,7 @@ Test connection string button - Transfer DB to + Transfer DB to src/app/settings/settings.component.html 329 @@ -2872,6 +2962,280 @@ Select a version + + ERROR: failed to create playlist!', ' + FEL: misslyckades med att skapa spellista!', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 58 + + + + Playlist successfully removed.', ' + Spellista togs bort.', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 99 + + + + Clear downloads + Rensa nedladdningar + + src/app/components/downloads/downloads.component.html + 85 + + Clear downloads + + + Clear downloads + Rensa nedladdningar + + src/app/components/downloads/downloads.component.ts + 131 + + + + Select downloads to clear + Välj hämtningar att rensa + + src/app/components/downloads/downloads.component.ts + 132 + + + + Errored downloads + Hämtningar med fel + + src/app/components/downloads/downloads.component.ts + 146 + + + + Cleared downloads! + Rensade nedladdningar! + + src/app/components/downloads/downloads.component.ts + 159 + + + + Failed to pause download! See server logs for more info. + Misslyckades att pausa nedladdning! Se serverloggar för mer information. + + src/app/components/downloads/downloads.component.ts + 170 + + + src/app/components/downloads/downloads.component.ts + 218 + + + + Failed to restart download! See server logs for more info. + Misslyckades att starta om nedladdning! Se serverloggar för mer information. + + src/app/components/downloads/downloads.component.ts + 202 + + + + Failed to cancel download! See server logs for more info. + Misslyckades att avbryta nedladdning! Se serverloggar för mer information. + + src/app/components/downloads/downloads.component.ts + 210 + + + + Confirm Password + Bekräfta lösenord + + src/app/components/login/login.component.html + 28 + + Confirm Password + + + Failed to retrieve logs! + Misslyckades att hämta loggar! + + src/app/components/logs-viewer/logs-viewer.component.ts + 46 + + + src/app/components/logs-viewer/logs-viewer.component.ts + 51 + + + + Failed to clear logs! + Misslyckades att rensa loggar! + + src/app/components/logs-viewer/logs-viewer.component.ts + 77 + + + src/app/components/logs-viewer/logs-viewer.component.ts + 80 + + + + My files + Mina filer + + src/app/components/recent-videos/recent-videos.component.html + 20 + + My files title + + + No files found. + Inga filer funna. + + src/app/components/recent-videos/recent-videos.component.html + 40 + + No files found + + + Order + Ordning + + src/app/components/recent-videos/recent-videos.component.html + 53 + + Order + + + Select files + Välj filer + + src/app/components/recent-videos/recent-videos.component.html + 71 + + Select files + + + Delete success! + Radering lyckad! + + src/app/components/recent-videos/recent-videos.component.ts + 270 + + + + OK. + OK. + + src/app/components/recent-videos/recent-videos.component.ts + 270 + + + src/app/components/recent-videos/recent-videos.component.ts + 273 + + + src/app/components/recent-videos/recent-videos.component.ts + 276 + + + + Delete failed! + Radering misslyckad! + + src/app/components/recent-videos/recent-videos.component.ts + 273 + + + src/app/components/recent-videos/recent-videos.component.ts + 276 + + + + Successfully deleted file: + Lyckades radera fil: + + src/app/components/recent-videos/recent-videos.component.ts + 291 + + + src/app/components/recent-videos/recent-videos.component.ts + 299 + + + + Successfully created playlist!', ' + Lyckades skapa spellista!', ' + + src/app/components/custom-playlists/custom-playlists.component.ts + 56 + + + + Finished downloads + Färdiga nedladdningar + + src/app/components/downloads/downloads.component.ts + 138 + + + + Paused downloads + Pausade hämtningar + + src/app/components/downloads/downloads.component.ts + 142 + + + + Failed to clear finished downloads! + Misslyckades att rensa färdiga hämtningar! + + src/app/components/downloads/downloads.component.ts + 157 + + + + Failed to pause all downloads! See server logs for more info. + Misslyckades att pausa alla nedladdning! Se serverloggar för mer info. + + src/app/components/downloads/downloads.component.ts + 178 + + + + Failed to resume download! See server logs for more info. + Misslyckades att återuppta nedladdning! See serverloggar för mer information. + + src/app/components/downloads/downloads.component.ts + 186 + + + + Failed to resume all downloads! See server logs for more info. + Misslyckades att återuppta alla nedladdningar! Se serverloggar för mer information. + + src/app/components/downloads/downloads.component.ts + 194 + + + + Logs copied to clipboard! + Loggar kopierat till urklipp! + + src/app/components/logs-viewer/logs-viewer.component.ts + 56 + + + + Logs successfully cleared! + Lyckades rensa loggar! + + src/app/components/logs-viewer/logs-viewer.component.ts + 75 + +