diff options
22 files changed, 321 insertions, 57 deletions
diff --git a/.dockerignore b/.dockerignore index 54b0aa3a7..45e543525 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,8 @@ .git .dockerignore Dockerfile +Dockerfile.arm +Dockerfile.arm64 CONTRIBUTORS.md README.md deployment/*/dist diff --git a/.gitmodules b/.gitmodules index 7aeb94dfc..c10f5905c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "ThirdParty/taglib-sharp"] - path = ThirdParty/taglib-sharp - url = https://github.com/mono/taglib-sharp.git [submodule "MediaBrowser.WebDashboard/jellyfin-web"] path = MediaBrowser.WebDashboard/jellyfin-web url = https://github.com/jellyfin/jellyfin-web.git diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 17df49f30..8ae6c81a8 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -14,7 +14,8 @@ - [grafixeyehero](https://github.com/grafixeyehero) - [cvium](https://github.com/cvium) - [wtayl0r](https://github.com/wtayl0r) - + - [TtheCreator](https://github.com/Tthecreator) + # Emby Contributors - [LukePulverenti](https://github.com/LukePulverenti) diff --git a/Dockerfile.arm b/Dockerfile.arm index a0b3d0e1d..cf062f38a 100644 --- a/Dockerfile.arm +++ b/Dockerfile.arm @@ -1,18 +1,20 @@ ARG DOTNET_VERSION=3.0 -FROM microsoft/dotnet:${DOTNET_VERSION}-sdk as builder + +FROM microsoft/dotnet:${DOTNET_VERSION}-sdk-stretch-arm32v7 as builder WORKDIR /repo COPY . . #TODO Remove or update the sed line when we update dotnet version. RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \ - && find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \; \ - && dotnet clean \ + && dotnet clean -maxcpucount:1 \ && dotnet publish \ + -maxcpucount:1 \ --configuration release \ --output /jellyfin \ Jellyfin.Server -FROM microsoft/dotnet:${DOTNET_VERSION}-runtime + +FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm32v7 COPY --from=builder /jellyfin /jellyfin EXPOSE 8096 RUN apt-get update \ diff --git a/Dockerfile.arm64 b/Dockerfile.arm64 new file mode 100644 index 000000000..6d7aa2118 --- /dev/null +++ b/Dockerfile.arm64 @@ -0,0 +1,33 @@ +# Requires binfm_misc registration for aarch64 +# https://github.com/multiarch/qemu-user-static#binfmt_misc-register +ARG DOTNET_VERSION=3.0 + + +FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu +FROM alpine as qemu_extract +COPY --from=qemu /usr/bin qemu_user_static.tgz +RUN tar -xzvf qemu_user_static.tgz + + +FROM microsoft/dotnet:${DOTNET_VERSION}-sdk-stretch-arm64v8 as builder +COPY --from=qemu_extract qemu-* /usr/bin +WORKDIR /repo +COPY . . +#TODO Remove or update the sed line when we update dotnet version. +RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \ + && find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \; \ + && dotnet clean \ + && dotnet publish \ + --configuration release \ + --output /jellyfin \ + Jellyfin.Server + + +FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm64v8 +COPY --from=qemu_extract qemu-* /usr/bin +COPY --from=builder /jellyfin /jellyfin +EXPOSE 8096 +RUN apt-get update \ + && apt-get install -y ffmpeg +VOLUME /config /media +ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config diff --git a/Emby.Photos/Emby.Photos.csproj b/Emby.Photos/Emby.Photos.csproj index e6b445202..c9830abc5 100644 --- a/Emby.Photos/Emby.Photos.csproj +++ b/Emby.Photos/Emby.Photos.csproj @@ -3,13 +3,16 @@ <ItemGroup> <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" /> <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" /> - <ProjectReference Include="..\ThirdParty\taglib-sharp\src\taglib-sharp.csproj" /> </ItemGroup> <ItemGroup> <Compile Include="..\SharedVersion.cs" /> </ItemGroup> + <ItemGroup> + <PackageReference Include="TagLibSharp" Version="2.2.0-beta" /> + </ItemGroup> + <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 492adef6a..21294f96f 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -4712,9 +4712,21 @@ namespace Emby.Server.Implementations.Data continue; } - var paramName = "@HasAnyProviderId" + index; + // TODO this seems to be an idea for a better schema where ProviderIds are their own table + // buut this is not implemented //hasProviderIds.Add("(COALESCE((select value from ProviderIds where ItemId=Guid and Name = '" + pair.Key + "'), '') <> " + paramName + ")"); + + // TODO this is a really BAD way to do it since the pair: + // Tmdb, 1234 matches Tmdb=1234 but also Tmdb=1234567 + // and maybe even NotTmdb=1234. + + // this is a placeholder for this specific pair to correlate it in the bigger query + var paramName = "@HasAnyProviderId" + index; + + // this is a search for the placeholder hasProviderIds.Add("ProviderIds like " + paramName + ""); + + // this replaces the placeholder with a value, here: %key=val% if (statement != null) { statement.TryBind(paramName, "%" + pair.Key + "=" + pair.Value + "%"); diff --git a/Emby.Server.Implementations/Diagnostics/CommonProcess.cs b/Emby.Server.Implementations/Diagnostics/CommonProcess.cs index d8a798c46..55539eafc 100644 --- a/Emby.Server.Implementations/Diagnostics/CommonProcess.cs +++ b/Emby.Server.Implementations/Diagnostics/CommonProcess.cs @@ -105,26 +105,22 @@ namespace Emby.Server.Implementations.Diagnostics { return _process.WaitForExit(timeMs); } - + public Task<bool> WaitForExitAsync(int timeMs) { - //if (_process.WaitForExit(100)) - //{ - // return Task.FromResult(true); - //} + //Note: For this function to work correctly, the option EnableRisingEvents needs to be set to true. + + if (HasExited) + { + return Task.FromResult(true); + } - //timeMs -= 100; timeMs = Math.Max(0, timeMs); var tcs = new TaskCompletionSource<bool>(); var cancellationToken = new CancellationTokenSource(timeMs).Token; - if (HasExited) - { - return Task.FromResult(true); - } - _process.Exited += (sender, args) => tcs.TrySetResult(true); cancellationToken.Register(() => tcs.TrySetResult(HasExited)); diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index a488576da..b3099e17e 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -936,10 +936,10 @@ namespace MediaBrowser.Api.Playback.Hls var timeDeltaParam = string.Empty; - if (isEncoding && state.TargetFramerate > 0) + if (isEncoding && startNumber > 0) { - float startTime = 1 / (state.TargetFramerate.Value * 2); - timeDeltaParam = string.Format("-segment_time_delta {0}", Math.Round(startTime, 3)); + var startTime = state.SegmentLength * startNumber; + timeDeltaParam = string.Format("-segment_time_delta -{0}", startTime); } var segmentFormat = GetSegmentFileExtension(state.Request).TrimStart('.'); diff --git a/MediaBrowser.Api/Playback/MediaInfoService.cs b/MediaBrowser.Api/Playback/MediaInfoService.cs index 1c7be52f3..ab3994a63 100644 --- a/MediaBrowser.Api/Playback/MediaInfoService.cs +++ b/MediaBrowser.Api/Playback/MediaInfoService.cs @@ -74,8 +74,19 @@ namespace MediaBrowser.Api.Playback private readonly IUserManager _userManager; private readonly IJsonSerializer _json; private readonly IAuthorizationContext _authContext; - - public MediaInfoService(IMediaSourceManager mediaSourceManager, IDeviceManager deviceManager, ILibraryManager libraryManager, IServerConfigurationManager config, INetworkManager networkManager, IMediaEncoder mediaEncoder, IUserManager userManager, IJsonSerializer json, IAuthorizationContext authContext) + private readonly ILogger _logger; + + public MediaInfoService( + IMediaSourceManager mediaSourceManager, + IDeviceManager deviceManager, + ILibraryManager libraryManager, + IServerConfigurationManager config, + INetworkManager networkManager, + IMediaEncoder mediaEncoder, + IUserManager userManager, + IJsonSerializer json, + IAuthorizationContext authContext, + ILoggerFactory loggerFactory) { _mediaSourceManager = mediaSourceManager; _deviceManager = deviceManager; @@ -86,6 +97,7 @@ namespace MediaBrowser.Api.Playback _userManager = userManager; _json = json; _authContext = authContext; + _logger = loggerFactory.CreateLogger(nameof(MediaInfoService)); } public object Get(GetBitrateTestBytes request) @@ -165,7 +177,7 @@ namespace MediaBrowser.Api.Playback var profile = request.DeviceProfile; - //Logger.Info("GetPostedPlaybackInfo profile: {0}", _json.SerializeToString(profile)); + //Logger.LogInformation("GetPostedPlaybackInfo profile: {profile}", _json.SerializeToString(profile)); if (profile == null) { @@ -262,7 +274,7 @@ namespace MediaBrowser.Api.Playback catch (Exception ex) { mediaSources = new List<MediaSourceInfo>(); - // TODO Log exception + _logger.LogError(ex, "Could not find media sources for item id {id}", id); // TODO PlaybackException ?? //result.ErrorCode = ex.ErrorCode; } diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 96dc4ab4c..8d4b0cb3d 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -167,7 +167,7 @@ namespace MediaBrowser.Api.Playback public DeviceProfile DeviceProfile { get; set; } public TranscodingJob TranscodingJob; - public void ReportTranscodingProgress(TimeSpan? transcodingPosition, float? framerate, double? percentComplete, long? bytesTranscoded, int? bitRate) + public override void ReportTranscodingProgress(TimeSpan? transcodingPosition, float framerate, double? percentComplete, long bytesTranscoded, int? bitRate) { ApiEntryPoint.Instance.ReportTranscodingProgress(TranscodingJob, this, transcodingPosition, framerate, percentComplete, bytesTranscoded, bitRate); } diff --git a/MediaBrowser.Api/Playback/UniversalAudioService.cs b/MediaBrowser.Api/Playback/UniversalAudioService.cs index 1faa32ba9..1aa77792c 100644 --- a/MediaBrowser.Api/Playback/UniversalAudioService.cs +++ b/MediaBrowser.Api/Playback/UniversalAudioService.cs @@ -19,6 +19,7 @@ using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Services; using MediaBrowser.Model.System; +using Microsoft.Extensions.Logging; namespace MediaBrowser.Api.Playback { @@ -75,7 +76,24 @@ namespace MediaBrowser.Api.Playback [Authenticated] public class UniversalAudioService : BaseApiService { - public UniversalAudioService(IServerConfigurationManager serverConfigurationManager, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IFileSystem fileSystem, IDlnaManager dlnaManager, IDeviceManager deviceManager, ISubtitleEncoder subtitleEncoder, IMediaSourceManager mediaSourceManager, IZipClient zipClient, IJsonSerializer jsonSerializer, IAuthorizationContext authorizationContext, IImageProcessor imageProcessor, INetworkManager networkManager, IEnvironmentInfo environmentInfo) + public UniversalAudioService( + IServerConfigurationManager serverConfigurationManager, + IUserManager userManager, + ILibraryManager libraryManager, + IIsoManager isoManager, + IMediaEncoder mediaEncoder, + IFileSystem fileSystem, + IDlnaManager dlnaManager, + IDeviceManager deviceManager, + ISubtitleEncoder subtitleEncoder, + IMediaSourceManager mediaSourceManager, + IZipClient zipClient, + IJsonSerializer jsonSerializer, + IAuthorizationContext authorizationContext, + IImageProcessor imageProcessor, + INetworkManager networkManager, + IEnvironmentInfo environmentInfo, + ILoggerFactory loggerFactory) { ServerConfigurationManager = serverConfigurationManager; UserManager = userManager; @@ -93,6 +111,8 @@ namespace MediaBrowser.Api.Playback ImageProcessor = imageProcessor; NetworkManager = networkManager; EnvironmentInfo = environmentInfo; + _loggerFactory = loggerFactory; + _logger = loggerFactory.CreateLogger(nameof(UniversalAudioService)); } protected IServerConfigurationManager ServerConfigurationManager { get; private set; } @@ -111,6 +131,8 @@ namespace MediaBrowser.Api.Playback protected IImageProcessor ImageProcessor { get; private set; } protected INetworkManager NetworkManager { get; private set; } protected IEnvironmentInfo EnvironmentInfo { get; private set; } + private ILoggerFactory _loggerFactory; + private ILogger _logger; public Task<object> Get(GetUniversalAudioStream request) { @@ -221,7 +243,7 @@ namespace MediaBrowser.Api.Playback AuthorizationContext.GetAuthorizationInfo(Request).DeviceId = request.DeviceId; - var mediaInfoService = new MediaInfoService(MediaSourceManager, DeviceManager, LibraryManager, ServerConfigurationManager, NetworkManager, MediaEncoder, UserManager, JsonSerializer, AuthorizationContext) + var mediaInfoService = new MediaInfoService(MediaSourceManager, DeviceManager, LibraryManager, ServerConfigurationManager, NetworkManager, MediaEncoder, UserManager, JsonSerializer, AuthorizationContext, _loggerFactory) { Request = Request }; diff --git a/MediaBrowser.Api/Subtitles/SubtitleService.cs b/MediaBrowser.Api/Subtitles/SubtitleService.cs index 0552fbbd8..08aa540a5 100644 --- a/MediaBrowser.Api/Subtitles/SubtitleService.cs +++ b/MediaBrowser.Api/Subtitles/SubtitleService.cs @@ -156,14 +156,19 @@ namespace MediaBrowser.Api.Subtitles throw new ArgumentException("HLS Subtitles are not supported for this media."); } + var segmentLengthTicks = TimeSpan.FromSeconds(request.SegmentLength).Ticks; + if (segmentLengthTicks <= 0) + { + throw new ArgumentException("segmentLength was not given, or it was given incorrectly. (It should be bigger than 0)"); + } + builder.AppendLine("#EXTM3U"); builder.AppendLine("#EXT-X-TARGETDURATION:" + request.SegmentLength.ToString(CultureInfo.InvariantCulture)); builder.AppendLine("#EXT-X-VERSION:3"); builder.AppendLine("#EXT-X-MEDIA-SEQUENCE:0"); builder.AppendLine("#EXT-X-PLAYLIST-TYPE:VOD"); - long positionTicks = 0; - var segmentLengthTicks = TimeSpan.FromSeconds(request.SegmentLength).Ticks; + long positionTicks = 0; var accessToken = _authContext.GetAuthorizationInfo(Request).Token; diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index a3e05f0d2..5b2939b75 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -96,7 +96,7 @@ namespace MediaBrowser.Controller.Entities.Audio /// </summary> /// <value>The tracks.</value> [IgnoreDataMember] - public IEnumerable<BaseItem> Tracks => GetRecursiveChildren(i => i is Audio); + public IEnumerable<Audio> Tracks => GetRecursiveChildren(i => i is Audio).Cast<Audio>(); protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user) { diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 59a624433..2f9eb98ea 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -437,7 +437,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles UseShellExecute = false, FileName = _mediaEncoder.EncoderPath, Arguments = string.Format("{0} -i \"{1}\" -c:s srt \"{2}\"", encodingParam, inputPath, outputPath), - + EnableRaisingEvents = true, IsHidden = true, ErrorDialog = false }); @@ -574,7 +574,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles { CreateNoWindow = true, UseShellExecute = false, - + EnableRaisingEvents = true, FileName = _mediaEncoder.EncoderPath, Arguments = processArgs, IsHidden = true, diff --git a/MediaBrowser.WebDashboard/jellyfin-web b/MediaBrowser.WebDashboard/jellyfin-web -Subproject 4678528d0028685b45c7c6daa2e24b72a363535 +Subproject 094c1deae91c51b8bbf8ebb16a55758af110f04 diff --git a/MediaBrowser.sln b/MediaBrowser.sln index 0f0c24a25..dfaa2601f 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -42,8 +42,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emby.Notifications", "Emby. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emby.Naming", "Emby.Naming\Emby.Naming.csproj", "{E5AF7B26-2239-4CE0-B477-0AA2018EDAA2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "taglib-sharp", "ThirdParty\taglib-sharp\src\taglib-sharp.csproj", "{D45FC504-D06B-41A0-A220-C20B7E8F1304}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emby.XmlTv", "Emby.XmlTv\Emby.XmlTv\Emby.XmlTv.csproj", "{6EAFA7F0-8A82-49E6-B2FA-086C5CAEA95B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IsoMounter", "Emby.IsoMounting\IsoMounter\IsoMounter.csproj", "{9BA471D2-6DB9-4DBF-B3A0-9FB3171F94A6}" @@ -144,10 +142,6 @@ Global {E5AF7B26-2239-4CE0-B477-0AA2018EDAA2}.Debug|Any CPU.Build.0 = Debug|Any CPU {E5AF7B26-2239-4CE0-B477-0AA2018EDAA2}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5AF7B26-2239-4CE0-B477-0AA2018EDAA2}.Release|Any CPU.Build.0 = Release|Any CPU - {D45FC504-D06B-41A0-A220-C20B7E8F1304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D45FC504-D06B-41A0-A220-C20B7E8F1304}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D45FC504-D06B-41A0-A220-C20B7E8F1304}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D45FC504-D06B-41A0-A220-C20B7E8F1304}.Release|Any CPU.Build.0 = Release|Any CPU {6EAFA7F0-8A82-49E6-B2FA-086C5CAEA95B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6EAFA7F0-8A82-49E6-B2FA-086C5CAEA95B}.Debug|Any CPU.Build.0 = Debug|Any CPU {6EAFA7F0-8A82-49E6-B2FA-086C5CAEA95B}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/SharedVersion.cs b/SharedVersion.cs index a29381f63..70c309674 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("10.0.2")] -[assembly: AssemblyFileVersion("10.0.2")] +[assembly: AssemblyVersion("10.1.0")] +[assembly: AssemblyFileVersion("10.1.0")] @@ -10,7 +10,7 @@ declare -a actions=( 'build' 'package' 'sign' 'publish' ) # The list of possible platforms, based on directories under 'deployment/' declare -a platforms=( $( - find deployment/ -maxdepth 1 -mindepth 1 -type d | sed 's/deployment\///' | sort + find deployment/ -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | sort ) ) # The list of standard dependencies required by all build scripts; individual @@ -171,16 +171,27 @@ if ! git diff-index --quiet HEAD --; then fi git fetch --all -git checkout origin/${web_branch} || { - echo "ERROR: 'jellyfin-web' branch ${web_branch} is invalid." - exit 1 -} +# If this is an official branch name, fetch it from origin +official_branches_regex="^master$|^dev$|^release-.*$|^hotfix-.*$" +if [[ ${web_branch} =~ ${official_branches_regex} ]]; then + git checkout origin/${web_branch} || { + echo "ERROR: 'jellyfin-web' branch 'origin/${web_branch}' is invalid." + exit 1 + } +# Otherwise, just check out the local branch (for testing, etc.) +else + git checkout ${web_branch} || { + echo "ERROR: 'jellyfin-web' branch '${web_branch}' is invalid." + exit 1 + } +fi popd # Execute each platform and action in order, if said action is enabled pushd deployment/ for target_platform in ${platform[@]}; do echo -e "> Processing platform ${target_platform}" + date_start=$( date +%s ) pushd ${target_platform} for target_action in ${action[@]}; do echo -e ">> Processing action ${target_action}" @@ -199,6 +210,8 @@ for target_platform in ${platform[@]}; do ./clean.sh fi fi + date_end=$( date +%s ) + echo -e "> Completed platform ${target_platform} in $( expr ${date_end} - ${date_start} ) seconds." popd done popd diff --git a/bump_version b/bump_version index 06a690e19..c3f1a78d5 100755 --- a/bump_version +++ b/bump_version @@ -47,10 +47,20 @@ if ! git diff-index --quiet HEAD --; then fi git fetch --all -git checkout origin/${web_branch} || { - echo "ERROR: 'jellyfin-web' branch ${web_branch} is invalid." - exit 1 -} +# If this is an official branch name, fetch it from origin +official_branches_regex="^master$|^dev$|^release-.*$|^hotfix-.*$" +if [[ ${web_branch} =~ ${official_branches_regex} ]]; then + git checkout origin/${web_branch} || { + echo "ERROR: 'jellyfin-web' branch 'origin/${web_branch}' is invalid." + exit 1 + } +# Otherwise, just check out the local branch (for testing, etc.) +else + git checkout ${web_branch} || { + echo "ERROR: 'jellyfin-web' branch '${web_branch}' is invalid." + exit 1 + } +fi popd new_version="$1" @@ -94,7 +104,7 @@ for repo in ./ MediaBrowser.WebDashboard/jellyfin-web/; do pushd ${repo} # Find the last release commit, so we know what's happened since - last_master_branch="master-${old_version}" # TODO: Set to `release-` for next release, so we can properly parse both repos with the new branch standard + last_master_branch="release-${old_version}" last_master_merge_commit="$( git log --merges --pretty=oneline \ | grep -F "${last_master_branch}" \ @@ -150,7 +160,7 @@ echo -e "### DEBIAN PACKAGE CHANGELOG: Verify this file looks correct or edit ac jellyfin (${new_version}-1) unstable; urgency=medium ${changelog_string_deb} --- Jellyfin Packaging Team <packaging@jellyfin.org> $( date --rfc-2822 ) + -- Jellyfin Packaging Team <packaging@jellyfin.org> $( date --rfc-2822 ) " >> ${debian_changelog_temp} cat ${debian_changelog_file} >> ${debian_changelog_temp} # Edit the file to verify diff --git a/deployment/debian-package-x64/pkg-src/changelog b/deployment/debian-package-x64/pkg-src/changelog index 825412d89..7f3f12b00 100644 --- a/deployment/debian-package-x64/pkg-src/changelog +++ b/deployment/debian-package-x64/pkg-src/changelog @@ -1,3 +1,86 @@ +jellyfin (10.1.0-1) unstable; urgency=medium + + * jellyfin: + * PR335 Build scripts and build system consolidation. + * PR424 add jellyfin-web as submodule + * PR455 Cleanup some small things + * PR458 Clean up several minor issues and add TODOs + * PR506 Removing tabs and trailing whitespace + * PR508 Update internal versioning and user agents. + * PR516 Remove useless properties from IEnvironmentInfo + * PR520 Fix potential bug where aspect ratio would be incorrectly calculated + * PR534 Add linux-arm and linux-arm64 native NuGet dependency. + * PR540 Update Emby API keys to our own + * PR541 Change ItemId to Guid in ProviderManager + * PR556 Fix "Password Reset by PIN" page + * PR562 Fix error with uppercase photo extension and fix typo in a log line + * PR563 Update dev from master + * PR566 Avoid printing stacktrace when bind to port 1900 fails + * PR567 Shutdown gracefully when recieving a termination signal + * PR571 Add more NuGet metadata properties + * PR575 Reformat all C# server code to conform with code standards + * PR576 Add code analysers for debug builds + * PR580 Fix Docker build + * PR582 Replace custom image parser with Skia + * PR587 Add nuget info to Emby.Naming + * PR589 Ensure config and log folders exist + * PR596 Fix indentation for xml files + * PR598 Remove MediaBrowser.Text for license violations and hackiness + * PR606 Slim down docker image + * PR613 Update MediaEncoding + * PR616 Add Swagger documentation + * PR619 Really slim down Docker container + * PR621 Minor improvements to library scan code + * PR622 Add unified build script and bump_version script + * PR623 Replaced injections of ILogger with ILoggerFactory + * PR625 Update taglib-sharp + * PR626 Fix extra type name in parameter, add out keyword + * PR627 Use string for ApplicationVersion + * PR628 Update Product Name (User-Agent) + * PR629 Fix subtitle converter misinterpreting 0 valued endTimeTicks + * PR631 Cleanup ImageProcessor and SkiaEncoder + * PR634 Replace our TVDB key with @drakus72's which is V1 + * PR636 Allow subtitle extraction and conversion in direct streaming + * PR637 Remove unused font + * PR638 Removed XmlTv testfiles and nuget install + * PR646: Fix infinite loop bug on subtitle.m3u8 request + * PR655: Support trying local branches in submodule + * PR661: Fix NullRef from progress report + * PR666: Add cross-platform build for arm64 + * jellyfin-web: + * PR1: Change webcomponents to non-minified version + * PR4: Fix user profile regression + * PR6: Make icon into proper ico and large PNG + * PR7: Fix firefox failing to set password for users with no password set + * PR8: Remove premiere stuff and fix crashes caused by earlier removals + * PR12: Fix return from PIN reset to index.html + * PR13: Send android clients to select server before login + * PR14: Reimplement page to add server + * PR16: Fix spinning circle at the end of config wizard + * PR17: Fix directorybrower not resetting scroll + * PR19: Set union merge for CONTRIBUTORS.md + * PR20: Show album thumbnail and artist image in page itemdetail + * PR26: Make the card titles clickable + * PR27: Stop pagination and adding a library from being able to trigger multiple times + * PR28: Add transparent nav bar to BlueRadiance theme CSS + * PR29: Clean up imageuploader + * PR30: Remove iap and simplify registrationservices + * PR36: Open videos in fullscreen on android devices + * PR37: Remove broken features from web interface + * PR38: Fix inconsistent UI coloring around settings drawer + * PR39: Remove back button from dashboard and metadata manager + * PR42: Fix Home backdrop not loading + * PR43: Filter videos by audio stream language + * PR44: Remove filter from library collection type options + * PR45: Fix data-backbutton logic + * PR46: Minor changes to navbar elements + * PR48: Remove Sync code + * PR52: Fix progress color + * PR53: Fix user tabs color + * PR54: Add back button to server dashboard + + -- Jellyfin Packaging Team <packaging@jellyfin.org> Sun, 20 Jan 2019 23:19:46 -0500 + jellyfin (10.0.2-1) unstable; urgency=medium * Hotfix release diff --git a/deployment/fedora-package-x64/pkg-src/jellyfin.spec b/deployment/fedora-package-x64/pkg-src/jellyfin.spec index e304fe442..6a4a5870b 100644 --- a/deployment/fedora-package-x64/pkg-src/jellyfin.spec +++ b/deployment/fedora-package-x64/pkg-src/jellyfin.spec @@ -1,13 +1,13 @@ %global debug_package %{nil} # jellyfin tag to package -%global gittag v10.0.2 +%global gittag v10.1.0 # Taglib-sharp commit of the submodule since github archive doesn't include submodules %global taglib_commit ee5ab21742b71fd1b87ee24895582327e9e04776 %global taglib_shortcommit %(c=%{taglib_commit}; echo ${c:0:7}) AutoReq: no Name: jellyfin -Version: 10.0.2 +Version: 10.1.0 Release: 1%{?dist} Summary: The Free Software Media Browser License: GPLv2 @@ -135,5 +135,84 @@ fi %systemd_postun_with_restart jellyfin.service %changelog +* Sun Jan 20 2019 Jellyfin Packaging Team <packaging@jellyfin.org> +- jellyfin: +- PR335 Build scripts and build system consolidation. +- PR424 add jellyfin-web as submodule +- PR455 Cleanup some small things +- PR458 Clean up several minor issues and add TODOs +- PR506 Removing tabs and trailing whitespace +- PR508 Update internal versioning and user agents. +- PR516 Remove useless properties from IEnvironmentInfo +- PR520 Fix potential bug where aspect ratio would be incorrectly calculated +- PR534 Add linux-arm and linux-arm64 native NuGet dependency. +- PR540 Update Emby API keys to our own +- PR541 Change ItemId to Guid in ProviderManager +- PR556 Fix "Password Reset by PIN" page +- PR562 Fix error with uppercase photo extension and fix typo in a log line +- PR563 Update dev from master +- PR566 Avoid printing stacktrace when bind to port 1900 fails +- PR567 Shutdown gracefully when recieving a termination signal +- PR571 Add more NuGet metadata properties +- PR575 Reformat all C# server code to conform with code standards +- PR576 Add code analysers for debug builds +- PR580 Fix Docker build +- PR582 Replace custom image parser with Skia +- PR587 Add nuget info to Emby.Naming +- PR589 Ensure config and log folders exist +- PR596 Fix indentation for xml files +- PR598 Remove MediaBrowser.Text for license violations and hackiness +- PR606 Slim down docker image +- PR613 Update MediaEncoding +- PR616 Add Swagger documentation +- PR619 Really slim down Docker container +- PR621 Minor improvements to library scan code +- PR622 Add unified build script and bump_version script +- PR623 Replaced injections of ILogger with ILoggerFactory +- PR625 Update taglib-sharp +- PR626 Fix extra type name in parameter, add out keyword +- PR627 Use string for ApplicationVersion +- PR628 Update Product Name (User-Agent) +- PR629 Fix subtitle converter misinterpreting 0 valued endTimeTicks +- PR631 Cleanup ImageProcessor and SkiaEncoder +- PR634 Replace our TVDB key with @drakus72's which is V1 +- PR636 Allow subtitle extraction and conversion in direct streaming +- PR637 Remove unused font +- PR638 Removed XmlTv testfiles and nuget install +- PR646: Fix infinite loop bug on subtitle.m3u8 request +- PR655: Support trying local branches in submodule +- PR661: Fix NullRef from progress report +- PR666: Add cross-platform build for arm64 +- jellyfin-web: +- PR1: Change webcomponents to non-minified version +- PR4: Fix user profile regression +- PR6: Make icon into proper ico and large PNG +- PR7: Fix firefox failing to set password for users with no password set +- PR8: Remove premiere stuff and fix crashes caused by earlier removals +- PR12: Fix return from PIN reset to index.html +- PR13: Send android clients to select server before login +- PR14: Reimplement page to add server +- PR16: Fix spinning circle at the end of config wizard +- PR17: Fix directorybrower not resetting scroll +- PR19: Set union merge for CONTRIBUTORS.md +- PR20: Show album thumbnail and artist image in page itemdetail +- PR26: Make the card titles clickable +- PR27: Stop pagination and adding a library from being able to trigger multiple times +- PR28: Add transparent nav bar to BlueRadiance theme CSS +- PR29: Clean up imageuploader +- PR30: Remove iap and simplify registrationservices +- PR36: Open videos in fullscreen on android devices +- PR37: Remove broken features from web interface +- PR38: Fix inconsistent UI coloring around settings drawer +- PR39: Remove back button from dashboard and metadata manager +- PR42: Fix Home backdrop not loading +- PR43: Filter videos by audio stream language +- PR44: Remove filter from library collection type options +- PR45: Fix data-backbutton logic +- PR46: Minor changes to navbar elements +- PR48: Remove Sync code +- PR52: Fix progress color +- PR53: Fix user tabs color +- PR54: Add back button to server dashboard * Fri Jan 11 2019 Thomas Büttner <thomas@vergesslicher.tech> - 10.0.2-1 - TODO Changelog for 10.0.2 |
