commit
63be65dd91
@ -0,0 +1,72 @@
|
|||||||
|
parameters:
|
||||||
|
- name: LinuxImage
|
||||||
|
type: string
|
||||||
|
default: "ubuntu-latest"
|
||||||
|
- name: GeneratorVersion
|
||||||
|
type: string
|
||||||
|
default: "5.0.0-beta2"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- job: GenerateApiClients
|
||||||
|
displayName: 'Generate Api Clients'
|
||||||
|
dependsOn: Test
|
||||||
|
|
||||||
|
pool:
|
||||||
|
vmImage: "${{ parameters.LinuxImage }}"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- task: DownloadPipelineArtifact@2
|
||||||
|
displayName: 'Download OpenAPI Spec Artifact'
|
||||||
|
inputs:
|
||||||
|
source: 'current'
|
||||||
|
artifact: "OpenAPI Spec"
|
||||||
|
path: "$(System.ArtifactsDirectory)/openapispec"
|
||||||
|
runVersion: "latest"
|
||||||
|
|
||||||
|
- task: CmdLine@2
|
||||||
|
displayName: 'Download OpenApi Generator'
|
||||||
|
inputs:
|
||||||
|
script: "wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${{ parameters.GeneratorVersion }}/openapi-generator-cli-${{ parameters.GeneratorVersion }}.jar -O openapi-generator-cli.jar"
|
||||||
|
|
||||||
|
## Generate npm api client
|
||||||
|
# Unstable
|
||||||
|
- task: CmdLine@2
|
||||||
|
displayName: 'Build unstable typescript axios client'
|
||||||
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
|
||||||
|
inputs:
|
||||||
|
script: "bash ./apiclient/templates/typescript/axios/generate.sh $(System.ArtifactsDirectory) $(Build.BuildNumber)"
|
||||||
|
|
||||||
|
# Stable
|
||||||
|
- task: CmdLine@2
|
||||||
|
displayName: 'Build stable typescript axios client'
|
||||||
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
|
||||||
|
inputs:
|
||||||
|
script: "bash ./apiclient/templates/typescript/axios/generate.sh $(System.ArtifactsDirectory)"
|
||||||
|
|
||||||
|
## Run npm install
|
||||||
|
- task: Npm@1
|
||||||
|
displayName: 'Install npm dependencies'
|
||||||
|
inputs:
|
||||||
|
command: install
|
||||||
|
workingDir: ./apiclient/generated/typescript/axios
|
||||||
|
|
||||||
|
## Publish npm packages
|
||||||
|
# Unstable
|
||||||
|
- task: Npm@1
|
||||||
|
displayName: 'Publish unstable typescript axios client'
|
||||||
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
|
||||||
|
inputs:
|
||||||
|
command: publish
|
||||||
|
publishRegistry: useFeed
|
||||||
|
publishFeed: 'jellyfin/unstable'
|
||||||
|
workingDir: ./apiclient/generated/typescript/axios
|
||||||
|
|
||||||
|
# Stable
|
||||||
|
- task: Npm@1
|
||||||
|
displayName: 'Publish stable typescript axios client'
|
||||||
|
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
|
||||||
|
inputs:
|
||||||
|
command: publish
|
||||||
|
publishRegistry: useExternalRegistry
|
||||||
|
publishEndpoint: 'jellyfin-bot for NPM'
|
||||||
|
workingDir: ./apiclient/generated/typescript/axios
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 278 B |
@ -1,51 +0,0 @@
|
|||||||
using System;
|
|
||||||
using MediaBrowser.Controller;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Browser
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Assists in opening application URLs in an external browser.
|
|
||||||
/// </summary>
|
|
||||||
public static class BrowserLauncher
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the home page of the web client.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="appHost">The app host.</param>
|
|
||||||
public static void OpenWebApp(IServerApplicationHost appHost)
|
|
||||||
{
|
|
||||||
TryOpenUrl(appHost, "/web/index.html");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the swagger API page.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="appHost">The app host.</param>
|
|
||||||
public static void OpenSwaggerPage(IServerApplicationHost appHost)
|
|
||||||
{
|
|
||||||
TryOpenUrl(appHost, "/api-docs/swagger");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Opens the specified URL in an external browser window. Any exceptions will be logged, but ignored.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="appHost">The application host.</param>
|
|
||||||
/// <param name="relativeUrl">The URL to open, relative to the server base URL.</param>
|
|
||||||
private static void TryOpenUrl(IServerApplicationHost appHost, string relativeUrl)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string baseUrl = appHost.GetLocalApiUrl("localhost");
|
|
||||||
appHost.LaunchUrl(baseUrl + relativeUrl);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var logger = appHost.Resolve<ILogger<IServerApplicationHost>>();
|
|
||||||
logger?.LogError(ex, "Failed to open browser window with URL {URL}", relativeUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
using System.Threading.Tasks;
|
|
||||||
using Emby.Server.Implementations.Browser;
|
|
||||||
using MediaBrowser.Controller;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
|
||||||
using MediaBrowser.Controller.Extensions;
|
|
||||||
using MediaBrowser.Controller.Plugins;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.EntryPoints
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Class StartupWizard.
|
|
||||||
/// </summary>
|
|
||||||
public sealed class StartupWizard : IServerEntryPoint
|
|
||||||
{
|
|
||||||
private readonly IServerApplicationHost _appHost;
|
|
||||||
private readonly IConfiguration _appConfig;
|
|
||||||
private readonly IServerConfigurationManager _config;
|
|
||||||
private readonly IStartupOptions _startupOptions;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="StartupWizard"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="appHost">The application host.</param>
|
|
||||||
/// <param name="appConfig">The application configuration.</param>
|
|
||||||
/// <param name="config">The configuration manager.</param>
|
|
||||||
/// <param name="startupOptions">The application startup options.</param>
|
|
||||||
public StartupWizard(
|
|
||||||
IServerApplicationHost appHost,
|
|
||||||
IConfiguration appConfig,
|
|
||||||
IServerConfigurationManager config,
|
|
||||||
IStartupOptions startupOptions)
|
|
||||||
{
|
|
||||||
_appHost = appHost;
|
|
||||||
_appConfig = appConfig;
|
|
||||||
_config = config;
|
|
||||||
_startupOptions = startupOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public Task RunAsync()
|
|
||||||
{
|
|
||||||
Run();
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Run()
|
|
||||||
{
|
|
||||||
if (!_appHost.CanLaunchWebBrowser)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always launch the startup wizard if possible when it has not been completed
|
|
||||||
if (!_config.Configuration.IsStartupWizardCompleted && _appConfig.HostWebClient())
|
|
||||||
{
|
|
||||||
BrowserLauncher.OpenWebApp(_appHost);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do nothing if the web app is configured to not run automatically
|
|
||||||
if (!_config.Configuration.AutoRunWebApp || _startupOptions.NoAutoRunWebApp)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Launch the swagger page if the web client is not hosted, otherwise open the web client
|
|
||||||
if (_appConfig.HostWebClient())
|
|
||||||
{
|
|
||||||
BrowserLauncher.OpenWebApp(_appHost);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BrowserLauncher.OpenSwaggerPage(_appHost);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +1,11 @@
|
|||||||
{
|
{
|
||||||
"Albums": "Álbumes"
|
"Albums": "Álbumes",
|
||||||
|
"Collections": "Colecións",
|
||||||
|
"ChapterNameValue": "Capítulos {0}",
|
||||||
|
"Channels": "Canles",
|
||||||
|
"CameraImageUploadedFrom": "Cargouse unha nova imaxe da cámara desde {0}",
|
||||||
|
"Books": "Libros",
|
||||||
|
"AuthenticationSucceededWithUserName": "{0} autenticouse correctamente",
|
||||||
|
"Artists": "Artistas",
|
||||||
|
"Application": "Aplicativo"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"MessageApplicationUpdatedTo": "Serveri Jellyfin u përditesua në versionin {0}",
|
||||||
|
"Inherit": "Trashgimi",
|
||||||
|
"TaskDownloadMissingSubtitlesDescription": "Kërkon në internet për titra që mungojnë bazuar tek konfigurimi i metadata-ve.",
|
||||||
|
"TaskDownloadMissingSubtitles": "Shkarko titra që mungojnë",
|
||||||
|
"TaskRefreshChannelsDescription": "Rifreskon informacionin e kanaleve të internetit.",
|
||||||
|
"TaskRefreshChannels": "Rifresko Kanalet",
|
||||||
|
"TaskCleanTranscodeDescription": "Fshin skedarët e transkodimit që janë më të vjetër se një ditë.",
|
||||||
|
"TaskCleanTranscode": "Fshi dosjen e transkodimit",
|
||||||
|
"TaskUpdatePluginsDescription": "Shkarkon dhe instalon përditësimi për plugin që janë konfiguruar të përditësohen automatikisht.",
|
||||||
|
"TaskUpdatePlugins": "Përditëso Plugin",
|
||||||
|
"TaskRefreshPeopleDescription": "Përditëson metadata të aktorëve dhe regjizorëve në librarinë tuaj.",
|
||||||
|
"TaskRefreshPeople": "Rifresko aktorët",
|
||||||
|
"TaskCleanLogsDescription": "Fshin skëdarët log që janë më të vjetër se {0} ditë.",
|
||||||
|
"TaskCleanLogs": "Fshi dosjen Log",
|
||||||
|
"TaskRefreshLibraryDescription": "Skanon librarinë media për skedarë të rinj dhe rifreskon metadata.",
|
||||||
|
"TaskRefreshLibrary": "Skano librarinë media",
|
||||||
|
"TaskRefreshChapterImagesDescription": "Krijon imazh për videot që kanë kapituj.",
|
||||||
|
"TaskRefreshChapterImages": "Ekstrakto Imazhet e Kapitullit",
|
||||||
|
"TaskCleanCacheDescription": "Fshi skedarët e cache-s që nuk i duhen më sistemit.",
|
||||||
|
"TaskCleanCache": "Pastro memorjen cache",
|
||||||
|
"TasksChannelsCategory": "Kanalet nga interneti",
|
||||||
|
"TasksApplicationCategory": "Aplikacioni",
|
||||||
|
"TasksLibraryCategory": "Libraria",
|
||||||
|
"TasksMaintenanceCategory": "Mirëmbajtje",
|
||||||
|
"VersionNumber": "Versioni {0}",
|
||||||
|
"ValueSpecialEpisodeName": "Speciale - {0}",
|
||||||
|
"ValueHasBeenAddedToLibrary": "{0} u shtua tek libraria juaj",
|
||||||
|
"UserStoppedPlayingItemWithValues": "{0} mbaroi së shikuari {1} tek {2}",
|
||||||
|
"UserStartedPlayingItemWithValues": "{0} po shikon {1} tek {2}",
|
||||||
|
"UserPolicyUpdatedWithName": "Politika e përdoruesit u përditësua për {0}",
|
||||||
|
"UserPasswordChangedWithName": "Fjalëkalimi u ndryshua për përdoruesin {0}",
|
||||||
|
"UserOnlineFromDevice": "{0} është në linjë nga {1}",
|
||||||
|
"UserOfflineFromDevice": "{0} u shkëput nga {1}",
|
||||||
|
"UserLockedOutWithName": "Përdoruesi {0} u përjashtua",
|
||||||
|
"UserDownloadingItemWithValues": "{0} po shkarkon {1}",
|
||||||
|
"UserDeletedWithName": "Përdoruesi {0} u fshi",
|
||||||
|
"UserCreatedWithName": "Përdoruesi {0} u krijua",
|
||||||
|
"User": "Përdoruesi",
|
||||||
|
"TvShows": "Seriale TV",
|
||||||
|
"System": "Sistemi",
|
||||||
|
"Sync": "Sinkronizo",
|
||||||
|
"SubtitleDownloadFailureFromForItem": "Titrat deshtuan të shkarkohen nga {0} për {1}",
|
||||||
|
"StartupEmbyServerIsLoading": "Serveri Jellyfin po ngarkohet. Ju lutemi provoni përseri pas pak.",
|
||||||
|
"Songs": "Këngë",
|
||||||
|
"Shows": "Seriale",
|
||||||
|
"ServerNameNeedsToBeRestarted": "{0} duhet të ristartoj",
|
||||||
|
"ScheduledTaskStartedWithName": "{0} filloi",
|
||||||
|
"ScheduledTaskFailedWithName": "{0} dështoi",
|
||||||
|
"ProviderValue": "Ofruesi: {0}",
|
||||||
|
"PluginUpdatedWithName": "{0} u përditësua",
|
||||||
|
"PluginUninstalledWithName": "{0} u çinstalua",
|
||||||
|
"PluginInstalledWithName": "{0} u instalua",
|
||||||
|
"Plugin": "Plugin",
|
||||||
|
"Playlists": "Listat për luajtje",
|
||||||
|
"Photos": "Fotografitë",
|
||||||
|
"NotificationOptionVideoPlaybackStopped": "Luajtja e videos ndaloi",
|
||||||
|
"NotificationOptionVideoPlayback": "Luajtja e videos filloi",
|
||||||
|
"NotificationOptionUserLockedOut": "Përdoruesi u përjashtua",
|
||||||
|
"NotificationOptionTaskFailed": "Ushtrimi i planifikuar dështoi",
|
||||||
|
"NotificationOptionServerRestartRequired": "Kërkohet ristartim i serverit",
|
||||||
|
"NotificationOptionPluginUpdateInstalled": "Përditësimi i plugin u instalua",
|
||||||
|
"NotificationOptionPluginUninstalled": "Plugin u çinstalua",
|
||||||
|
"NotificationOptionPluginInstalled": "Plugin u instalua",
|
||||||
|
"NotificationOptionPluginError": "Plugin dështoi",
|
||||||
|
"NotificationOptionNewLibraryContent": "Një përmbajtje e re u shtua",
|
||||||
|
"NotificationOptionInstallationFailed": "Instalimi dështoi",
|
||||||
|
"NotificationOptionCameraImageUploaded": "Fotoja nga kamera u ngarkua",
|
||||||
|
"NotificationOptionAudioPlaybackStopped": "Luajtja e audios ndaloi",
|
||||||
|
"NotificationOptionAudioPlayback": "Luajtja e audios filloi",
|
||||||
|
"NotificationOptionApplicationUpdateInstalled": "Përditësimi i aplikacionit u instalua",
|
||||||
|
"NotificationOptionApplicationUpdateAvailable": "Një perditësim i aplikacionit është gati",
|
||||||
|
"NewVersionIsAvailable": "Një version i ri i Jellyfin është gati për tu shkarkuar.",
|
||||||
|
"NameSeasonUnknown": "Sezon i panjohur",
|
||||||
|
"NameSeasonNumber": "Sezoni {0}",
|
||||||
|
"NameInstallFailed": "Instalimi i {0} dështoi",
|
||||||
|
"MusicVideos": "Video muzikore",
|
||||||
|
"Music": "Muzikë",
|
||||||
|
"Movies": "Filma",
|
||||||
|
"MixedContent": "Përmbajtje e përzier",
|
||||||
|
"MessageServerConfigurationUpdated": "Konfigurimet e serverit u përditësuan",
|
||||||
|
"MessageNamedServerConfigurationUpdatedWithValue": "Seksioni i konfigurimit të serverit {0} u përditësua",
|
||||||
|
"MessageApplicationUpdated": "Serveri Jellyfin u përditësua",
|
||||||
|
"Latest": "Të fundit",
|
||||||
|
"LabelRunningTimeValue": "Kohëzgjatja: {0}",
|
||||||
|
"LabelIpAddressValue": "Adresa IP: {0}",
|
||||||
|
"ItemRemovedWithName": "{0} u fshi nga libraria",
|
||||||
|
"ItemAddedWithName": "{0} u shtua tek libraria",
|
||||||
|
"HomeVideos": "Video personale",
|
||||||
|
"HeaderRecordingGroups": "Grupet e regjistrimit",
|
||||||
|
"HeaderNextUp": "Në vazhdim",
|
||||||
|
"HeaderLiveTV": "TV Live",
|
||||||
|
"HeaderFavoriteSongs": "Kënget e preferuara",
|
||||||
|
"HeaderFavoriteShows": "Serialet e preferuar",
|
||||||
|
"HeaderFavoriteEpisodes": "Episodet e preferuar",
|
||||||
|
"HeaderFavoriteArtists": "Artistët e preferuar",
|
||||||
|
"HeaderFavoriteAlbums": "Albumet e preferuar",
|
||||||
|
"HeaderContinueWatching": "Vazhdo të shikosh",
|
||||||
|
"HeaderAlbumArtists": "Artistët e albumeve",
|
||||||
|
"Genres": "Zhanre",
|
||||||
|
"Folders": "Dosje",
|
||||||
|
"Favorites": "Të preferuara",
|
||||||
|
"FailedLoginAttemptWithUserName": "Përpjekja për hyrje dështoi nga {0}",
|
||||||
|
"DeviceOnlineWithName": "{0} u lidh",
|
||||||
|
"DeviceOfflineWithName": "{0} u shkëput",
|
||||||
|
"Collections": "Koleksione",
|
||||||
|
"ChapterNameValue": "Kapituj",
|
||||||
|
"Channels": "Kanale",
|
||||||
|
"CameraImageUploadedFrom": "Një foto e re nga kamera u ngarkua nga {0}",
|
||||||
|
"Books": "Libra",
|
||||||
|
"AuthenticationSucceededWithUserName": "{0} u identifikua me sukses",
|
||||||
|
"Artists": "Artistë",
|
||||||
|
"Application": "Aplikacioni",
|
||||||
|
"AppDeviceValues": "Aplikacioni: {0}, Pajisja: {1}",
|
||||||
|
"Albums": "Albumet"
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue