Compare commits

...

292 Commits

Author SHA1 Message Date
Vasily
52c399d4d1 Add back taglib-sharp submodule
This fixes v10.1.0 build
2019-01-25 23:46:25 +03:00
Andrew Rabert
e05e002b8b Merge pull request #677 from nvllsvm/fixdocker
Fix arm32 Docker
2019-01-22 20:11:30 -05:00
Andrew Rabert
ede0439b12 Fix arm32 Docker 2019-01-22 20:04:40 -05:00
Andrew Rabert
28483bdb54 Merge pull request #651 from jellyfin/release-10.1.0
Release 10.1.0
2019-01-22 18:13:47 -05:00
Joshua Boniface
8106c8393b Update jellyfin-web submodule to 10.1.0 2019-01-22 13:16:42 -05:00
Joshua Boniface
411139cd78 Update changelogs to add #666 2019-01-21 23:56:02 -05:00
Anthony Lavado
29f3330091 Merge pull request #666 from nvllsvm/cross-platform
Add cross-platform build for arm64
2019-01-21 23:55:17 -05:00
Andrew Rabert
8108e295dc Add Dockerfile.arm64 docs 2019-01-21 23:43:13 -05:00
Andrew Rabert
aa25dd1a0b Update to .NETCore 3.0 2019-01-21 23:17:56 -05:00
Andrew Rabert
23c52c3fb9 Disable cross-platform build for arm32v7
https://github.com/jellyfin/jellyfin/issues/665
2019-01-21 23:17:30 -05:00
Andrew Rabert
a5aa482b6c Update arm/arm64 images to build cross-platform
These Dockerfiles can not be built natively - must be built on x86_64
2019-01-21 22:47:51 -05:00
Joshua Boniface
8d298e0e36 Update changelogs to remove #639, add #661, #54 2019-01-21 21:24:28 -05:00
Andrew Rabert
13f1ea2c19 Merge pull request #664 from jellyfin/revert-639-ffmpeg4.1
Revert "Fix segment_time_delta for ffmpeg 4.1"
2019-01-21 20:21:36 -05:00
Andrew Rabert
9ad182502f Merge pull request #661 from Bond-009/streamstate
Fix NullRef from progress report
2019-01-21 20:05:43 -05:00
Joshua M. Boniface
b2767eceff Revert "Fix segment_time_delta for ffmpeg 4.1" 2019-01-21 19:29:47 -05:00
Bond_009
73df5bdbe9 Fix NullRef 2019-01-21 23:50:47 +01:00
Joshua Boniface
e6b95db132 Add jellyfin-web#53 to changelogs 2019-01-21 16:34:53 -05:00
Joshua Boniface
e30cf63aef Add helpful time text around platform builds 2019-01-21 16:34:53 -05:00
Joshua M. Boniface
571afa4fe2 Merge pull request #655 from joshuaboniface/local-web-branch
Support trying local branches in submodule
2019-01-21 13:28:40 -05:00
Joshua Boniface
42f2799d66 Add jellyfin-web#52 to changelogs 2019-01-21 13:25:26 -05:00
Joshua Boniface
384f867228 Update changelogs to include this PR 2019-01-21 12:57:46 -05:00
Joshua Boniface
cf85e2327e Support trying local branches in submodule 2019-01-21 12:48:27 -05:00
Joshua Boniface
0dab69b551 Use basename for cross-platform operation
Trying to sed out the deployment/ failed on MacOS, so use the
basename command instead for the same effect.
2019-01-21 01:42:25 -05:00
Joshua Boniface
ff4cbfc6df Fix inconsistencies in changelogs 2019-01-21 00:02:56 -05:00
Joshua Boniface
c72144111e Correct bad signature line 2019-01-21 00:02:56 -05:00
Joshua M. Boniface
3518400b22 Merge branch 'master' into release-10.1.0 2019-01-20 23:48:23 -05:00
Joshua Boniface
adf037c44c Complete and remove todo from bump_version 2019-01-20 23:41:37 -05:00
Joshua Boniface
73038ee3f7 Bump version to 10.1.0 2019-01-20 23:39:55 -05:00
Andrew Rabert
920c39454c Merge pull request #646 from Tthecreator/master
Fix infinite loop bug on subtitle.m3u8 request
2019-01-20 21:16:28 -05:00
Andrew Rabert
edcfd8b565 Merge pull request #631 from Bond-009/imagesize
Cleanup ImageProcessor and SkiaEncoder
2019-01-20 20:49:51 -05:00
Andrew Rabert
7327bb91a3 Fix func name 2019-01-20 20:48:24 -05:00
Andrew Rabert
6a5488c651 Formatting 2019-01-20 20:47:02 -05:00
Andrew Rabert
1cf1e9bfa1 Update appPaths position 2019-01-20 20:46:40 -05:00
Andrew Rabert
7469ed4e6e Update logger position 2019-01-20 20:46:00 -05:00
Andrew Rabert
c7f648f86a Merge branch 'dev' into imagesize 2019-01-20 20:45:06 -05:00
Tthecreator
3069c749b4 Added myself to contributers 2019-01-21 00:40:59 +01:00
Tthecreator
d02642bf7b Fixed bug where the server would eat up ram with subtitles request 2019-01-21 00:38:01 +01:00
Andrew Rabert
803bf563d7 Merge pull request #621 from Bond-009/perf
Minor improvements to library scan code
2019-01-20 18:13:49 -05:00
Andrew Rabert
d16f38dbe1 Merge pull request #623 from wtayl0r/inject-logger-factories
Replaced injections of ILogger with ILoggerFactory
2019-01-20 18:12:50 -05:00
Andrew Rabert
e8813ced3c Merge pull request #638 from EraYaN/clean-test-files
Removed XmlTv testfiles and nuget install
2019-01-20 18:12:10 -05:00
Andrew Rabert
a1fcf4ea0d Merge pull request #613 from MatMaul/mediaencoding-dev
Update MediaEncoding
2019-01-20 18:11:51 -05:00
Andrew Rabert
c8dd72886b Merge pull request #636 from cvium/fix_subtitle_conversion_direct_streaming
Allow subtitle extraction and conversion in direct streaming
2019-01-20 16:59:16 -05:00
Andrew Rabert
c64cc733d2 Merge pull request #639 from Bond-009/ffmpeg4.1
Fix segment_time_delta for ffmpeg 4.1
2019-01-20 16:55:45 -05:00
William Taylor
190bc46c1b Removed unused parameters from Program.getImageEncoder 2019-01-20 21:54:07 +00:00
Mathieu Velten
ae73f7b3e3 Fix transcoding bitrate 2019-01-20 22:50:17 +01:00
Mathieu Velten
060eb98cc5 Fix encoding profile handling for vaapi 2019-01-20 22:50:17 +01:00
Mathieu Velten
da16de48aa Revert back to 10e57ce8d21b4516733894075001819f3cd6db6b for MediaEncoding
Remove some duplicate code that were causing warnings
2019-01-20 22:50:09 +01:00
William Taylor
e62198650e Updated param name 2019-01-20 21:05:12 +00:00
William Taylor
88f13492c7 Added myself to contributors.md 2019-01-20 21:05:12 +00:00
William Taylor
65cd3ed597 Replaced injections of ILogger with ILoggerFactory
This makes resolving dependencies from the container much easier as
you cannot resolve with primitives parameters in a way that is any
more readable.

The aim of this commit is to change as little as possible with the end
result, loggers that were newed up for the parent object were given the same
name. Objects that used the base or app loggers, were given a new logger with
an appropriate name.

Also removed some unused dependencies.
2019-01-20 21:05:12 +00:00
Bond_009
c27aff1c63 Fix segment_time_delta for ffmpeg 4.1 2019-01-20 21:56:50 +01:00
Vasily
0586598d33 Merge pull request #637 from Bond-009/font
Remove unused font
2019-01-20 23:16:42 +03:00
Claus Vium
e8cf72e925 Change CanExtractSubtitles to true to allow conversion during direct streaming 2019-01-20 21:03:18 +01:00
Bond_009
fc7c211025 Remove unused font 2019-01-20 20:32:15 +01:00
Anthony Lavado
3d441d4a73 Merge pull request #634 from joshuaboniface/replace-tvdbkey
Replace our TVDB key with @drakus72's which is V1
2019-01-20 13:48:18 -05:00
Bond_009
35d97dc949 Minor improvements to library scan code 2019-01-20 19:40:37 +01:00
Joshua M. Boniface
18189644e3 Merge pull request #622 from joshuaboniface/unified-build
Add unified build script and bump_version script
2019-01-20 13:28:39 -05:00
Joshua Boniface
56365e9237 Bail out if web branch is unclean like build does 2019-01-20 13:19:50 -05:00
Joshua Boniface
9da5d3acc2 Replace our TVDB key with @drakus72's which is V1 2019-01-20 12:59:22 -05:00
Joshua Boniface
3320d4feeb Move dotnet to a per-platform dependency 2019-01-20 12:34:52 -05:00
Joshua Boniface
90b9a95619 Use LANG=C for date in Yum changelog 2019-01-20 12:23:36 -05:00
Andrew Rabert
3a6624f701 Merge pull request #629 from cvium/fix_subtitleencoder
Fix subtitle converter misinterpreting 0 valued endTimeTicks
2019-01-20 11:35:20 -05:00
Claus Vium
2b47006662 Remove unneeded variable 2019-01-20 17:06:40 +01:00
Andrew Rabert
acb9afd908 Merge pull request #598 from cvium/remove_textencoding
Remove MediaBrowser.Text for license violations and hackiness
2019-01-20 10:33:59 -05:00
Bond_009
7e4cc9f513 Touchup 2019-01-20 14:39:05 +01:00
Bond_009
ca910325f3 Remove unneeded fields 2019-01-20 14:25:13 +01:00
Bond_009
8fc8fc0622 Cleanup ImageProcessor 2019-01-20 14:18:37 +01:00
Claus Vium
2dc14aa85d Remove CodePages from csproj 2019-01-20 11:41:33 +01:00
Claus Vium
26e20d1cd5 Fix subtitle converter misinterpreting 0 valued endTimeTicks 2019-01-20 08:17:31 +01:00
Claus Vium
217d35ee74 Fix missing imports after rebase 2019-01-20 06:33:33 +01:00
cvium
790266d314 Add package ref for codepages 2019-01-20 06:30:52 +01:00
cvium
eba1f05c03 Remove embedded resource from csproj 2019-01-20 06:30:52 +01:00
cvium
b35dcbb9f0 Remove MediaBrowser.Text since it violates licenses and is overall hacky 2019-01-20 06:30:50 +01:00
Joshua M. Boniface
3a5e3ade01 Merge pull request #628 from nvllsvm/name
Update Product Name (User-Agent)
2019-01-20 00:01:02 -05:00
Andrew Rabert
fbc82c88be Update product name to Jellyfin Server 2019-01-19 23:53:23 -05:00
Andrew Rabert
9eada88545 Use AssmeblyProduct for Name 2019-01-19 23:52:40 -05:00
Andrew Rabert
6561021926 Merge pull request #582 from nvllsvm/image
Replace custom image parser with Skia
2019-01-19 22:42:46 -05:00
Andrew Rabert
d72d0fb865 Merge pull request #627 from nvllsvm/version
Use string for ApplicationVersion
2019-01-19 22:39:20 -05:00
Andrew Rabert
875392c77f Combine Emby.Drawing and Emby.Drawing.Skia 2019-01-19 22:38:41 -05:00
Andrew Rabert
449dd1a6a2 Remove allowSlowMethods from image processing 2019-01-19 22:33:55 -05:00
Andrew Rabert
9a7a5ef50e Replace custom image parser with Skia 2019-01-19 22:30:16 -05:00
Joshua Boniface
bc18d5341c Make help and usage setup standards-compliant 2019-01-19 22:05:41 -05:00
Joshua Boniface
99dfb8549f Use the same branch for web by default 2019-01-19 21:57:29 -05:00
Joshua Boniface
4f14b479bb Bashify all variable references 2019-01-19 21:56:00 -05:00
Andrew Rabert
f229c641a1 Remove redundant GetDefaultUserAgent 2019-01-19 21:48:38 -05:00
Andrew Rabert
235125df57 Fix ApplicationUserAgent documentation 2019-01-19 21:41:48 -05:00
Andrew Rabert
d7da475aad Fix User-Agent 2019-01-19 21:38:42 -05:00
Andrew Rabert
8de4eb7d19 Rename ApplicationSemanticVersion to ApplicationVersion 2019-01-19 21:35:33 -05:00
Andrew Rabert
8a5198e6a3 Remove ApplicationVersion 2019-01-19 21:34:47 -05:00
Joshua Boniface
85966b54fb Small formatting consistency tweak 2019-01-19 21:19:42 -05:00
Andrew Rabert
469590c9c5 Merge pull request #508 from EraYaN/api-version-reporting
Update internal versioning and user agents.
2019-01-19 21:08:35 -05:00
Erwin de Haan
e066a02403 Removed useless method, Name => Jellyfin Server 2019-01-20 01:20:58 +01:00
Erwin de Haan
924ec0c191 Revert Jellyfin.Versioning, Update all versions and user agents. 2019-01-20 01:12:44 +01:00
Joshua Boniface
daaa007fea Update YUM spec version 2019-01-19 18:57:14 -05:00
Joshua Boniface
0addc9ef46 Add mention of dependencies file per platform 2019-01-19 18:48:48 -05:00
Joshua Boniface
9f8b716f40 Add dependencies.txt entries for Docker builds 2019-01-19 18:45:29 -05:00
Joshua Boniface
edfd950aad Add bump_version script 2019-01-19 18:37:05 -05:00
Erwin de Haan
bb8df8dfa0 Updates reported version in System/Info* set of endpoints.
Added ProductName and ServerVersion to API.

Added build version and build step. Addressed issues wtih indentation.

Made the BuildVersion an actual object. This lets up link to the github page of that commit.

Fixed class method type and styled link.

Fixed languages and split out the information in the UI.

Moved update-version script and gave it executable permissions. Windows correctly finds the .bat file. And linux takes the one without extension.

Removed tempfiles from replace sessions from csproj.

Updated version generation scripts. Will also work with pre existing version files. (Source tarballs etc.)

Added simple replace for ssh github links.

Add execute rights to update-version.

Wrapped long line in ApplicationHost.cs

Fixed some small issues.

Fixed some small issues, and flipped some if's around.

Converted parameter names to camelBack casing.

Sealed the attribute class.

Removed MPLv2 license.

Fixed file headers.

Added newline.

Moved links in *.csproj files as well.

Fix issues caused by rebase auto merging.

Removed default constructor and added init values to properties, also hid the Remote value form API.
2019-01-20 00:28:48 +01:00
Joshua Boniface
f952988fb3 Add new centralized build script and README 2019-01-19 18:10:54 -05:00
Vasily
97639e5c85 Merge pull request #534 from EraYaN/skia-native-arm
Add linux-arm and linux-arm64 native NuGet dependency.
2019-01-20 01:44:35 +03:00
Joshua Boniface
d42ef36bf9 Correct invalid changelog entry 2019-01-19 16:44:55 -05:00
Joshua M. Boniface
1bd477e2e5 Merge pull request #626 from EraYaN/m3uparser-syntax-fix
Fix extra type name in parameter, add out keyword
2019-01-19 16:11:27 -05:00
Erwin de Haan
949393043d Fixed missing out keyword. 2019-01-19 22:07:48 +01:00
Andrew Rabert
55538764fa Merge pull request #575 from EraYaN/reformat
Reformat all C# server code to conform with code standards
2019-01-19 15:11:50 -05:00
Andrew Rabert
3b52035ee0 Merge pull request #616 from nvllsvm/swagger
Add Swagger documentation
2019-01-19 15:09:20 -05:00
Erwin de Haan
c5430f86b0 Fixed csproj and xml identation. 2019-01-19 15:01:16 +01:00
Erwin de Haan
1e94023927 Merge branch 'dev' into reformat 2019-01-19 14:45:02 +01:00
Vasily
a00c0defa8 Merge pull request #596 from Bond-009/editorconfig
Fix indentation for xml files
2019-01-19 16:35:38 +03:00
Erwin de Haan
e63b18f17d Reformat JustAMan review second pass changes. 2019-01-19 14:30:23 +01:00
Andrew Rabert
72ab479d1f Merge pull request #619 from sparky8251/really-slimdown-docker-image
Really slim down Docker container
2019-01-18 21:49:23 -05:00
Joshua M. Boniface
bf7d8fdf4a Merge pull request #589 from ploughpuff/patch-1
Ensure config and log folders exist
2019-01-18 14:32:09 -05:00
PloughPuff
582226c133 Cause exception if empty string used for config or log folders 2019-01-18 18:11:42 +00:00
PloughPuff
529d804414 Modify to use correct logic before creating directory
Address review comments.
2019-01-18 17:22:14 +00:00
Erwin de Haan
d116efe1f7 Merge branch 'dev' into reformat 2019-01-18 17:04:01 +01:00
Erwin de Haan
c1f76eb8ab Reformat JustAMan review pt3 changes 2019-01-18 16:48:01 +01:00
Sparky
d00e43735f Really slim down Docker container
#606 didn't actually run the new commands due to the comments position.

This fixes the comment location.
2019-01-18 10:26:02 -05:00
PloughPuff
04d03c5cf9 Ensure all folders are created before running app 2019-01-18 10:10:45 +00:00
Andrew Rabert
e9e152d2fc Adapt SwaggerService for Jellyfin 2019-01-18 00:55:33 -05:00
Andrew Rabert
cfd5d1a4f2 Restore SwaggerService from 7aa573d4e0fc231932ad3da4cdf15199cf97709a 2019-01-18 00:40:33 -05:00
Andrew Rabert
440350a3f6 Merge pull request #606 from sparky8251/docker-update
Slim down docker image
2019-01-17 20:54:08 -05:00
Sparky
fe4c3fddb4 Slim down docker image
After installing, remove package caches and clean up after installation of stuff.
2019-01-17 18:59:52 -05:00
Erwin de Haan
38f96af079 Reformat JustAMan review pt2 changes
Refs #575
2019-01-17 20:24:39 +01:00
Erwin de Haan
321c440739 Reformat JustAMan review pt1 changes
Refs #575
2019-01-17 20:24:01 +01:00
Erwin de Haan
e241589969 Merge branch 'dev' into skia-native-arm 2019-01-17 17:48:01 +01:00
Erwin de Haan
47f08fbb12 Remove Musl build. dotnet is not yet ready (icu-libs still require libstdc++). 2019-01-17 17:45:34 +01:00
Erwin de Haan
a0195420df Added Musl dep and switched package names. 2019-01-16 23:30:29 +01:00
Joshua M. Boniface
7aa975325a Merge pull request #455 from Bond-009/cleanup
Cleanup some small things
2019-01-16 13:17:39 -05:00
Bond-009
d0980f0da5 Update HttpListenerHost.cs 2019-01-16 19:13:13 +01:00
Bond-009
900dc851e6 Merge branch 'dev' into cleanup 2019-01-16 19:10:42 +01:00
Joshua M. Boniface
933ef43889 Merge pull request #587 from Bond-009/naming
Add nuget info to Emby.Naming
2019-01-16 11:52:24 -05:00
Joshua M. Boniface
2b1e3aa45f Merge pull request #567 from Bond-009/term
Shutdown gracefully when recieving a termination signal
2019-01-16 11:49:53 -05:00
Bond_009
67465c6e10 Fix indentation for xml files 2019-01-16 16:30:01 +01:00
Joshua M. Boniface
5b1f36ef27 Merge pull request #520 from hawken93/fix_aspect
Fix potential bug where aspect ratio would be incorrectly calculated
2019-01-15 22:37:01 -05:00
Joshua Boniface
b30d702782 Merge branch 'master' into dev 2019-01-15 22:29:22 -05:00
hawken
bddfca6215 Fix potential problem where aspect ratio would be incorrectly calculated 2019-01-15 20:10:26 +00:00
Erwin de Haan
a358631040 Extra formatting on the merged code. 2019-01-15 17:35:33 +01:00
Erwin de Haan
49b61f238e Merge branch 'dev' into reformat
# Conflicts:
#	Emby.Server.Implementations/ApplicationHost.cs
#	Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
#	Emby.Server.Implementations/LiveTv/LiveTvManager.cs
#	Emby.Server.Implementations/Security/MBLicenseFile.cs
#	Emby.Server.Implementations/Security/PluginSecurityManager.cs
#	Emby.Server.Implementations/Security/RegRecord.cs
#	MediaBrowser.Api/PluginService.cs
#	MediaBrowser.Api/System/SystemService.cs
#	MediaBrowser.Common/Security/IRequiresRegistration.cs
#	MediaBrowser.Common/Security/ISecurityManager.cs
#	MediaBrowser.Common/Security/PaymentRequiredException.cs
#	MediaBrowser.Model/Entities/MBRegistrationRecord.cs
#	MediaBrowser.Model/Entities/PluginSecurityInfo.cs
#	deployment/win-generic/build-jellyfin.ps1
2019-01-15 17:34:39 +01:00
Claus Vium
99acf83dfa Add cvium to CONTRIBUTORS 2019-01-15 16:48:21 +01:00
cvium
e5ffa45dbe more descriptive TODO 2019-01-15 16:48:21 +01:00
cvium
22a64f37f5 More cleaning 2019-01-15 16:48:21 +01:00
cvium
0e422a33d6 Some code style clean up 2019-01-15 16:48:21 +01:00
Claus Vium
256e6dc195 removed more dead code 2019-01-15 16:48:21 +01:00
Claus Vium
e0e5a487c3 removed commented code 2019-01-15 16:48:21 +01:00
Claus Vium
801726ce38 readded some registration endpoints 2019-01-15 16:48:21 +01:00
hawken
19319e8eb6 Remove MBLicenseFile 2019-01-15 16:48:21 +01:00
Claus Vium
d707e969fa Added some todos 2019-01-15 16:48:21 +01:00
Claus Vium
4a03ac4022 mock the registration endpoint since livetv etc. still uses it 2019-01-15 16:48:21 +01:00
Claus Vium
eca3c099d9 removed a bunch of validation, security, registration, premiere, whatever bs 2019-01-15 16:48:21 +01:00
Andrew Rabert
8ea0c72070 Merge pull request #335 from EraYaN/build-system-consolidation
Build scripts and build system consolidation.
2019-01-14 20:06:28 -05:00
Bond-009
351bac44c5 Add nuget info to Emby.Naming 2019-01-14 22:02:51 +01:00
Erwin de Haan
9c4239af01 Updated MediaBrowser.Tests AssemblyInfo.cs 2019-01-14 08:32:31 +01:00
Erwin de Haan
9b224d7080 Merged the two ARM platforms. To be split apart when a binary ffmpeg is required. 2019-01-13 23:43:12 +01:00
Erwin de Haan
ca320ba7ac Sudo fix for debian and fedora. 2019-01-13 23:34:40 +01:00
Erwin de Haan
ae0732136f Merge remote-tracking branch 'upstream/dev' into build-system-consolidation 2019-01-13 23:28:05 +01:00
Erwin de Haan
d7b7be395b Moved ARM dockerfiles back to root. 2019-01-13 23:24:43 +01:00
Erwin de Haan
9d0a08571e Merge branch 'dev' into reformat 2019-01-13 21:59:37 +01:00
Joshua M. Boniface
f8dd182e42 Merge pull request #562 from hawken93/misc_fix
Fix error with uppercase photo extension and fix typo in a log line
2019-01-13 15:49:05 -05:00
Erwin de Haan
23f5c1d90b ReSharper format: 'out' parameter inlining 2019-01-13 21:48:18 +01:00
Erwin de Haan
e867446437 ReSharper format: conform inline 'out' parameters. 2019-01-13 21:46:33 +01:00
Andrew Rabert
f50a997e40 Merge pull request #580 from nvllsvm/fixbuild
Fix Docker build
2019-01-13 20:39:42 +00:00
Andrew Rabert
006e81588a Merge pull request #576 from Bond-009/analysers
Add code analysers for debug builds
2019-01-13 20:38:08 +00:00
Erwin de Haan
65bd052f3e ReSharper conform to 'var' settings 2019-01-13 21:37:13 +01:00
Andrew Rabert
17c60f46db Fix build 2019-01-13 15:35:15 -05:00
Erwin de Haan
a36658f6f0 ReSharper Reformat: Properties to expression bodied form. 2019-01-13 21:31:14 +01:00
Andrew Rabert
f11a4368bb Reformat args 2019-01-13 15:30:30 -05:00
Erwin de Haan
9fa60ec934 Find+Sed BOM removal all toher files, except test files. 2019-01-13 21:20:44 +01:00
Erwin de Haan
089ad8e7c2 Find+Sed BOM removal *.xml,*.csproj,*,json,*.sln,*.txt 2019-01-13 21:10:15 +01:00
Erwin de Haan
b062577d81 Find+Sed BOM removal *.cs: MediaBrowser.Providers-SocketHttpListener 2019-01-13 21:03:10 +01:00
Erwin de Haan
8f41ba4d3a Find+Sed BOM removal *.cs: MediaBrowser.LocalMetadata-MediaBrowser.Model 2019-01-13 21:02:23 +01:00
Erwin de Haan
ba610b5094 Find+Sed BOM removal *.cs: Jellyfin.Server-MediaBrowser.Controller 2019-01-13 21:01:16 +01:00
Erwin de Haan
e566d9a231 Find+Sed BOM removal *.cs: BDInfo-Emby.XmlTv 2019-01-13 20:54:44 +01:00
Erwin de Haan
742bef5b5f EditorConfig reformat: Non-CS files. 2019-01-13 20:45:51 +01:00
Erwin de Haan
aacafee1de EditorConfig reformat: MediaBrowser.Providers, MediaBrowser.Tests, SocketHttpListener 2019-01-13 20:31:48 +01:00
Erwin de Haan
382e8699a2 EditorConfig reformat: MediaBrowser.Model 2019-01-13 20:31:15 +01:00
Erwin de Haan
3ed6f37030 EditorConfig reformat: MediaBrowser.Controller 2019-01-13 20:30:58 +01:00
Erwin de Haan
51ed47f4c4 EditorConfig reformat: Emby.XmlTv, Jellyfin.Server. MediaBrowser.Api, MediaBrowser.Common 2019-01-13 20:30:41 +01:00
Erwin de Haan
5b3d8a6d76 EditorConfig reformat: Emby.IsoMounting, Emby.Server.Implementations 2019-01-13 20:30:03 +01:00
Erwin de Haan
cc719fd77c EditorConfig reformat: BDInfo, DvdLib, Emby.Dlna 2019-01-13 20:29:23 +01:00
Erwin de Haan
8fd0bc63b9 Visual Studio Reformat: SocketHttpListener 2019-01-13 20:27:29 +01:00
Erwin de Haan
9014e16037 Visual Studio Reformat: OpenSubtitlesHandler 2019-01-13 20:27:11 +01:00
Erwin de Haan
9741817af4 Visual Studio Reformat: MediaBrowser.XbmcMetadata 2019-01-13 20:26:56 +01:00
Erwin de Haan
f4ae36b2a8 Visual Studio Reformat: MediaBrowser.WebDashboard 2019-01-13 20:26:44 +01:00
Erwin de Haan
587bb85b41 Visual Studio Reformat: MediaBrowser.Providers 2019-01-13 20:26:31 +01:00
Erwin de Haan
1a4b271314 Visual Studio Reformat: MediaBrowser.Model 2019-01-13 20:26:15 +01:00
Erwin de Haan
f2e50f50bd Visual Studio Reformat: MediaBrowser.MediaEncoding 2019-01-13 20:26:04 +01:00
Erwin de Haan
22879a603e Visual Studio Reformat: MediaBrowser.LocalMetadata 2019-01-13 20:25:45 +01:00
Erwin de Haan
26ca4b607b Visual Studio Reformat: MediaBrowser.Controller 2019-01-13 20:25:32 +01:00
Erwin de Haan
106d1d18ed Visual Studio Reformat: MediaBrowser.Common 2019-01-13 20:25:11 +01:00
Erwin de Haan
b67c1b933e Visual Studio Reformat: MediaBrowser.Api 2019-01-13 20:24:58 +01:00
Erwin de Haan
f0acc0446c Visual Studio Reformat: Jellyfin.Server 2019-01-13 20:24:27 +01:00
Erwin de Haan
80691e53b0 Visual Studio Reformat: Emby.XmlTv 2019-01-13 20:24:14 +01:00
Erwin de Haan
d655283ef0 Visual Studio Reformat: Emby.Server.Implementations Part U-U & Root 2019-01-13 20:23:38 +01:00
Erwin de Haan
25f0315e91 Visual Studio Reformat: Emby.Server.Implementations Part T-T 2019-01-13 20:22:56 +01:00
Erwin de Haan
0efc699e3d Visual Studio Reformat: Emby.Server.Implementations Part S-S 2019-01-13 20:22:24 +01:00
Erwin de Haan
39ef1106d7 Visual Studio Reformat: Emby.Server.Implementations Part Liv-P 2019-01-13 20:22:00 +01:00
Erwin de Haan
58b582bdcb Visual Studio Reformat: Emby.Server.Implementations Part I-Lib 2019-01-13 20:21:32 +01:00
Erwin de Haan
c5c7a3c4ee Visual Studio Reformat: Emby.Server.Implementations Part De-H 2019-01-13 20:20:41 +01:00
Erwin de Haan
a5288115a8 Visual Studio Reformat: Emby.Server.Implementations Part A-Da 2019-01-13 20:20:16 +01:00
Erwin de Haan
dd15c808cb Visual Studio Reformat: Emby.Photos 2019-01-13 20:18:28 +01:00
Erwin de Haan
decc475f7c Visual Studio Reformat: Emby.Notifications 2019-01-13 20:18:07 +01:00
Erwin de Haan
5665933849 Visual Studio Reformat: Emby.Naming 2019-01-13 20:17:29 +01:00
Erwin de Haan
25a428373c Visual Studio Reformat: Emby.IsoMounting 2019-01-13 20:17:15 +01:00
Erwin de Haan
009c95d972 Visual Studio Reformat: Emby.Drawing 2019-01-13 20:17:02 +01:00
Erwin de Haan
9d37fd96f1 Visual Studio Reformat: Emby.Drawing.Skia 2019-01-13 20:16:43 +01:00
Erwin de Haan
8bfb54a41b Visual Studio Reformat: Emby.Dlna 2019-01-13 20:16:19 +01:00
Erwin de Haan
17703c8bd2 Visual Studio Reformat: DvdLib 2019-01-13 20:15:33 +01:00
Erwin de Haan
1077570ca8 Visual Studio Reformat: BDInfo 2019-01-13 20:15:15 +01:00
Andrew Rabert
e8d93b3485 Merge pull request #566 from Bond-009/dlna
Avoid printing stacktrace when bind to port 1900 fails
2019-01-13 19:02:40 +00:00
Bond_009
56de8c893a Add code analysers for debug builds 2019-01-13 19:16:22 +01:00
Joshua M. Boniface
9dcaafe700 Merge pull request #458 from EraYaN/code-cleanup
Clean up several minor issues and add TODOs
2019-01-13 12:14:53 -05:00
Anthony Lavado
17d8de4962 Merge pull request #571 from Bond-009/nuget
Add more NuGet metadata properties
2019-01-13 11:37:49 -05:00
Erwin de Haan
b936c43932 Pull in change from build system, to fix the drone build once and for all. 2019-01-13 16:32:54 +01:00
hawken
c8e3c1737a Fix small logging typo with the "name (path) will be refreshed" message 2019-01-13 11:59:24 +00:00
hawken
f2dae8ee51 Make image header extension matching case insensitive 2019-01-13 11:59:24 +00:00
Bond_009
3a2a0fbfe8 Add more NuGet metadata properties
Remove old nuspec files
2019-01-13 11:57:33 +01:00
Bond-009
81475e361b Add exception message to log.
Output will be something line: `Failed to bind to port 1900: Address already in use. DLNA will be unavailable`
2019-01-13 01:31:55 +01:00
Bond_009
50c127fd9a Add proper exit codes 2019-01-13 01:05:25 +01:00
Bond_009
bf4de012da Catch exception instead of masking it 2019-01-13 00:55:37 +01:00
Bond_009
debb8e56fd Handle Ctrl+C and Ctrl+Break 2019-01-13 00:49:11 +01:00
Erwin de Haan
ddc18a1ca7 Updated package. 2019-01-13 00:28:40 +01:00
Bond_009
0abdfbb526 Shutdown gracefully when recieving a termination signal 2019-01-12 23:31:45 +01:00
Erwin de Haan
e9519de07d Fixed removed start tag of XMLComment. 2019-01-12 22:54:47 +01:00
Bond_009
783e74d9c9 Don't print stacktrace when failing to bind to 1900 2019-01-12 22:25:55 +01:00
Joshua M. Boniface
78a5d999f4 Delete CODEOWNERS from dev branch
This was removed from master but wasn't transitioned with that merge because of GitHub being annoying and treating CODEOWNERS differently in each branch.
2019-01-12 16:10:51 -05:00
Erwin de Haan
846456b41e Reformatted the files with notes. 2019-01-12 21:41:08 +01:00
Joshua M. Boniface
41343b9220 Merge pull request #563 from jellyfin/master
Update dev from master
2019-01-12 15:23:48 -05:00
Joshua M. Boniface
016bad1ea3 Merge pull request #556 from grafixeyehero/dev
Fix "Password Reset by PIN" page
2019-01-12 13:44:09 -05:00
Joshua Boniface
e04f652eff Add Master codeowners
In conjunction with branch protection rules, this will require
approval from the Org owners (myself or @nvllsvm) before a merge
can be accepted.
2019-01-12 13:41:37 -05:00
Joshua M. Boniface
03ec62e478 Add link to our contributing docs as well 2019-01-12 13:41:37 -05:00
Vasily
dadd6e11b1 Add link to writing good messages article
Co-Authored-By: joshuaboniface <joshua@boniface.me>
2019-01-12 13:41:37 -05:00
Vasily
c28283aa7c Be explcit about what the version is
Co-Authored-By: joshuaboniface <joshua@boniface.me>
2019-01-12 13:41:37 -05:00
Joshua M. Boniface
2e53f4c2e9 Add blurb about title 2019-01-12 13:41:37 -05:00
Joshua M. Boniface
f1d6f04572 Consistent formatting for System fields 2019-01-12 13:41:37 -05:00
Joshua M. Boniface
f818053a43 Update bug_report.md
Add section about log files.
2019-01-12 13:41:37 -05:00
Joshua Boniface
874a6bf38b Update pull request template 2019-01-12 13:41:37 -05:00
Joshua M. Boniface
deb9d97d37 Update issue templates
Adds issue templates for Bugs, Features, and Enhancements.
2019-01-12 13:41:37 -05:00
Erwin de Haan
672013c23d Add TODO for netcore version upgrade. 2019-01-12 16:34:13 +01:00
Erwin de Haan
b73d081bd2 Updated docker build script. 2019-01-12 15:56:06 +01:00
Erwin de Haan
ba671569b4 Moved main docker file. 2019-01-12 15:54:52 +01:00
Erwin de Haan
2c65fe53f2 Enabled update-version in anticipation of the versioning PR. 2019-01-12 03:09:38 +01:00
Erwin de Haan
2c62f8dbd5 Renamed main script to be more correct for what it does. 2019-01-12 03:07:16 +01:00
Erwin de Haan
4b00b0cc87 Fixed fedora rpm build unexpected dependency on liblttng-ust. Fixed the docker builds and added manifest generation. 2019-01-12 03:04:36 +01:00
Erwin de Haan
74507099ad Added git submodules command. Converted RPM to build from local tree. Added all the execution bits to the build scripts. 2019-01-12 01:49:46 +01:00
Erwin de Haan
0bb08b3f8d Added debian bin folder. 2019-01-11 23:35:14 +01:00
Erwin de Haan
21098eb861 Moved rpm package and edited the package slightly, to build the project correctly. 2019-01-11 23:22:50 +01:00
Erwin de Haan
94933722c4 Merge branch 'rpm-package' into build-system-consolidation 2019-01-11 23:12:19 +01:00
Thomas Büttner
3f9b005885 Fix typo 2019-01-11 20:21:40 +01:00
Thomas Büttner
559ecb2afc Fix permissions for the main binary.
The /usr/lib64/jellyfin/jellyfin binary has 0744 permission after build by dotnet so set explicit permission to 0755 in .spec
2019-01-11 20:06:08 +01:00
grafixeyehero
862fe1a290 add grafixeyehero to CONTRIBUTORS 2019-01-11 19:52:26 +03:00
Thomas Büttner
5ffea816a1 Change EnvironmentFile path to /etc/sysconfig 2019-01-11 17:43:42 +01:00
Thomas Büttner
7bda212958 Bump spec version to 10.0.2
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 17:05:28 +01:00
Thomas Büttner
101f47b6d4 Fix typo
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 17:02:52 +01:00
Thomas Büttner
b6c0e5d472 Also remove DB mirgration part from README
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 17:01:22 +01:00
Thomas Büttner
40e509588e Remove explicit permissions for files who don't need them.
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 16:58:41 +01:00
Thomas Büttner
fa01c4f02e Remove DB migration script also from %files.
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 16:44:18 +01:00
Thomas Büttner
cb328e4b6f Remove DB migration script.
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 16:42:26 +01:00
Thomas Büttner
8eb2fe1b58 Remove references to Debian package
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-11 16:15:06 +01:00
Joshua M. Boniface
c888879599 Merge pull request #541 from cvium/fix_providermanager_guid
Change ItemId to Guid in ProviderManager
2019-01-11 09:17:25 -05:00
Erwin de Haan
e2751d42e8 Merge branch 'dev' into code-cleanup 2019-01-11 12:50:36 +01:00
Andrew Rabert
e5c2dbdf23 Merge pull request #540 from joshuaboniface/api-keys
Update Emby API keys to our own
2019-01-10 23:02:29 -05:00
Joshua M. Boniface
15c89d281e Merge pull request #506 from hawken93/linting
Removing tabs and trailing whitespace
2019-01-10 19:54:18 -05:00
grafixeyehero
9659decef0 fix the forgotpasswordpin
fix passwordreset.txt print
2019-01-11 01:15:00 +03:00
Joshua Boniface
fddd72a3bd Update Fanart commented-out API key to our own 2019-01-10 15:17:08 -05:00
Joshua Boniface
8489febcc7 Update Omdb API key to our own 2019-01-10 15:17:07 -05:00
Erwin de Haan
ec1f5dc317 Mayor code cleanup
Add Argument*Exceptions now use proper nameof operators.

Added exception messages to quite a few Argument*Exceptions.

Fixed rethorwing to be proper syntax.

Added a ton of null checkes. (This is only a start, there are about 500 places that need proper null handling)

Added some TODOs to log certain exceptions.

Fix sln again.

Fixed all AssemblyInfo's and added proper copyright (where I could find them)

We live in *current year*.

Fixed the use of braces.

Fixed a ton of properties, and made a fair amount of functions static that should be and can be static.

Made more Methods that should be static static.

You can now use static to find bad functions!

Removed unused variable. And added one more proper XML comment.
2019-01-10 20:38:53 +01:00
Erwin de Haan
47e36b6791 Add linux-arm and linux-arm64 native. 2019-01-10 20:18:39 +01:00
Erwin de Haan
399a079dd4 Build scripts and build system consolidation.
Squashed commit.
2019-01-10 19:45:30 +01:00
Anthony Lavado
5900ab8c68 Update OpenSubtitles User Agent to our own 2019-01-10 13:26:52 -05:00
cvium
0abe5b6ec3 Change ItemId to Guid like all the others 2019-01-10 15:30:26 +01:00
Andrew Rabert
3d867c2c46 Merge pull request #516 from Bond-009/env
Remove useless properties from IEnvironmentInfo
2019-01-09 22:08:58 -05:00
Andrew Rabert
7a832045d6 Merge pull request #424 from dkanada/submodule
add jellyfin-web as submodule
2019-01-09 22:05:11 -05:00
Joshua Boniface
7603b8d0fe Update TheTVDB API key to our own 2019-01-09 12:44:48 -05:00
Joshua Boniface
04ab1daa02 Update FanArt API key to our own 2019-01-09 12:24:16 -05:00
Joshua Boniface
41da58206f Update TheAudioDB API key to our own 2019-01-09 12:19:10 -05:00
Joshua Boniface
909409bb6d Update TheMovieDB API key to our own 2019-01-09 12:11:42 -05:00
Bond-009
f454b753f2 separate path with comma
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-01-10 00:23:44 +09:00
dkanada
9de66e9e87 add jellyfin-web as submodule 2019-01-09 23:35:05 +09:00
Thomas Büttner
4e7f475491 Also symlink logs to /var/log, changed changelog to lastest entry of the debian package
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-08 19:44:51 +01:00
Thomas Büttner
ad36f9ec89 Add rpm build script for fedora and update README
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-08 19:04:52 +01:00
Thomas Büttner
7f4a073b05 Add %post script to move exitsting config to /etc/jellyfin and symlink it.
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-08 18:56:55 +01:00
Bond_009
f520ddc966 Remove useless properties from IEnvironmentInfo 2019-01-08 17:35:56 +01:00
hawken
bd169e4fd4 remove trailing whitespace 2019-01-07 23:27:46 +00:00
hawken
ba1794f64b Remove tabs and trailing whitespace 2019-01-07 23:24:34 +00:00
Thomas Büttner
0e455b0f62 fixed restart.sh permissions
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-07 19:28:04 +01:00
Thomas Büttner
cbff18edb5 Add logging and config directories
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-07 18:51:37 +01:00
Bond_009
07a8e49c4b Cleanup some small things 2019-01-06 20:35:36 +01:00
Thomas Büttner
79229fe3ae bump to 10.0.0 and use simple version scheme
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-05 22:44:46 +01:00
Thomas Büttner
90ab6a40fc add Firewalld serivce.xml
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-05 22:06:10 +01:00
Thomas Büttner
b3de385d5b Re-add sudo policy for in-app service restart.
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-01-05 21:30:45 +01:00
Thomas Büttner
0eafc3fd11 Update update-db.sh 2019-01-05 17:47:57 +01:00
Thomas Büttner
a968913e9f CentOS Build fails since it has no Recommends: tag
Signed-off-by: Thomas Büttner <thomas@tartaros.tech>
2019-01-05 11:22:03 +01:00
Thomas Büttner
a2c1ec0de3 Add RPM package spec
Signed-off-by: Thomas Büttner <thomas@tartaros.tech>
2019-01-05 11:14:24 +01:00
1795 changed files with 18184 additions and 34998 deletions

View File

@@ -1,5 +1,10 @@
.git
.dockerignore
Dockerfile
Dockerfile.arm
Dockerfile.arm64
CONTRIBUTORS.md
README.md
deployment/*/dist
deployment/*/pkg-dist
deployment/collect-dist/

View File

@@ -9,4 +9,4 @@ steps:
- name: build
image: microsoft/dotnet:2-sdk
commands:
- dotnet publish --configuration release --output /release
- dotnet publish --configuration release --output /release Jellyfin.Server

View File

@@ -1,13 +1,13 @@
# With more recent updates Visual Studio 2017 supports EditorConfig files out of the box
# Visual Studio Code needs an extension: https://github.com/editorconfig/editorconfig-vscode
# For emacs, vim, np++ and other editors, see here: https://github.com/editorconfig
###############################
# Core EditorConfig Options #
###############################
# All files
[*]
indent_style = space
###############################
# Core EditorConfig Options #
###############################
root = true
# All files
[*]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
@@ -15,119 +15,117 @@ insert_final_newline = true
end_of_line = lf
max_line_length = null
# Code files
[*.{cs,csx,vb,vbx}]
indent_size = 4
insert_final_newline = true
charset = utf-8
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
# Organize usings
dotnet_sort_system_directives_first = true
# this. preferences
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_style_readonly_field = true:suggestion
# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent
dotnet_prefer_inferred_tuple_names = true:suggestion
dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
###############################
# Naming Conventions #
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# Use PascalCase for constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
###############################
# C# Coding Conventions #
###############################
[*.cs]
# var preferences
csharp_style_var_for_built_in_types = true:silent
csharp_style_var_when_type_is_apparent = true:silent
csharp_style_var_elsewhere = true:silent
# Expression-bodied members
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
# Pattern matching preferences
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Null-checking preferences
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Expression-level preferences
csharp_prefer_braces = true:silent
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
###############################
# C# Formatting Rules #
###############################
# New line preferences
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
# Space preferences
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
# Wrapping preferences
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
###############################
# VB Coding Conventions #
###############################
[*.vb]
# Modifier preferences
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion
# XML indentation
[*.{csproj,xml}]
indent_size = 2
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
# Organize usings
dotnet_sort_system_directives_first = true
# this. preferences
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_style_readonly_field = true:suggestion
# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent
dotnet_prefer_inferred_tuple_names = true:suggestion
dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
###############################
# Naming Conventions #
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# Use PascalCase for constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
###############################
# C# Coding Conventions #
###############################
[*.cs]
# var preferences
csharp_style_var_for_built_in_types = true:silent
csharp_style_var_when_type_is_apparent = true:silent
csharp_style_var_elsewhere = true:silent
# Expression-bodied members
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
# Pattern matching preferences
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Null-checking preferences
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Expression-level preferences
csharp_prefer_braces = true:silent
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
###############################
# C# Formatting Rules #
###############################
# New line preferences
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = flush_left
# Space preferences
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
# Wrapping preferences
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
###############################
# VB Coding Conventions #
###############################
[*.vb]
# Modifier preferences
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion

37
.gitignore vendored
View File

@@ -1,5 +1,3 @@
!*
.directory
#################
@@ -49,6 +47,8 @@ ProgramData-UI*/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
.vs/
# User-specific files
*.suo
*.user
@@ -204,7 +204,6 @@ $RECYCLE.BIN/
# Mac crap
.DS_Store
#############
## Python
#############
@@ -234,24 +233,34 @@ pip-log.txt
#Mr Developer
.mr.developer.cfg
MediaBrowser.WebDashboard/dashboard-ui/.idea/
/.vs
##########
# Rider
##########
.idea/
##########
# Visual Studio Code
##########
.vscode/
#########################
# Debian build artifacts
# Build artifacts
#########################
debian/.debhelper/
debian/*.debhelper
debian/debhelper-build-stamp
debian/files
debian/jellyfin.substvars
debian/jellyfin/
# Artifacts for debian-x64
deployment/debian-package-x64/pkg-src/.debhelper/
deployment/debian-package-x64/pkg-src/*.debhelper
deployment/debian-package-x64/pkg-src/debhelper-build-stamp
deployment/debian-package-x64/pkg-src/files
deployment/debian-package-x64/pkg-src/jellyfin.substvars
deployment/debian-package-x64/pkg-src/jellyfin/
# Don't ignore the debian/bin folder
!debian/bin/
!deployment/debian-package-x64/pkg-src/bin/
deployment/**/dist/
deployment/**/pkg-dist/
deployment/**/pkg-dist-tmp/
deployment/collect-dist/
jellyfin_version.ini

5
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "ThirdParty/taglib-sharp"]
path = ThirdParty/taglib-sharp
url = https://github.com/mono/taglib-sharp.git
url = https://github.com/mono/taglib-sharp
[submodule "MediaBrowser.WebDashboard/jellyfin-web"]
path = MediaBrowser.WebDashboard/jellyfin-web
url = https://github.com/jellyfin/jellyfin-web.git

View File

@@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Compile Include="..\SharedVersion.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />

View File

@@ -1,105 +1,33 @@

namespace BDInfo
{
class BDInfoSettings
{
public static bool GenerateStreamDiagnostics
{
get
{
return true;
}
}
public static bool GenerateStreamDiagnostics => true;
public static bool EnableSSIF
{
get
{
return true;
}
}
public static bool EnableSSIF => true;
public static bool AutosaveReport
{
get
{
return false;
}
}
public static bool AutosaveReport => false;
public static bool GenerateFrameDataFile
{
get
{
return false;
}
}
public static bool GenerateFrameDataFile => false;
public static bool FilterLoopingPlaylists
{
get
{
return true;
}
}
public static bool FilterLoopingPlaylists => true;
public static bool FilterShortPlaylists
{
get
{
return false;
}
}
public static bool FilterShortPlaylists => false;
public static int FilterShortPlaylistsValue
{
get
{
return 0;
}
}
public static int FilterShortPlaylistsValue => 0;
public static bool UseImagePrefix
{
get
{
return false;
}
}
public static bool UseImagePrefix => false;
public static string UseImagePrefixValue
{
get
{
return null;
}
}
public static string UseImagePrefixValue => null;
/// <summary>
/// Setting this to false throws an IComparer error on some discs.
/// </summary>
public static bool KeepStreamOrder
{
get
{
return true;
}
}
public static bool KeepStreamOrder => true;
public static bool GenerateTextSummary
{
get
{
return false;
}
}
public static bool GenerateTextSummary => false;
public static string LastPath
{
get
{
return string.Empty;
}
}
public static string LastPath => string.Empty;
}
}

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -22,7 +22,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Text;
namespace BDInfo
{
@@ -72,12 +71,11 @@ namespace BDInfo
public event OnPlaylistFileScanError PlaylistFileScanError;
public BDROM(
string path, IFileSystem fileSystem, ITextEncoding textEncoding)
public BDROM(string path, IFileSystem fileSystem)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
throw new ArgumentNullException(nameof(path));
}
_fileSystem = fileSystem;
@@ -164,17 +162,17 @@ namespace BDInfo
if (DirectoryPLAYLIST != null)
{
FileSystemMetadata[] files = GetFiles(DirectoryPLAYLIST.FullName, ".mpls").ToArray();
foreach (FileSystemMetadata file in files)
foreach (var file in files)
{
PlaylistFiles.Add(
file.Name.ToUpper(), new TSPlaylistFile(this, file, _fileSystem, textEncoding));
file.Name.ToUpper(), new TSPlaylistFile(this, file, _fileSystem));
}
}
if (DirectorySTREAM != null)
{
FileSystemMetadata[] files = GetFiles(DirectorySTREAM.FullName, ".m2ts").ToArray();
foreach (FileSystemMetadata file in files)
foreach (var file in files)
{
StreamFiles.Add(
file.Name.ToUpper(), new TSStreamFile(file, _fileSystem));
@@ -184,17 +182,17 @@ namespace BDInfo
if (DirectoryCLIPINF != null)
{
FileSystemMetadata[] files = GetFiles(DirectoryCLIPINF.FullName, ".clpi").ToArray();
foreach (FileSystemMetadata file in files)
foreach (var file in files)
{
StreamClipFiles.Add(
file.Name.ToUpper(), new TSStreamClipFile(file, _fileSystem, textEncoding));
file.Name.ToUpper(), new TSStreamClipFile(file, _fileSystem));
}
}
if (DirectorySSIF != null)
{
FileSystemMetadata[] files = GetFiles(DirectorySSIF.FullName, ".ssif").ToArray();
foreach (FileSystemMetadata file in files)
foreach (var file in files)
{
InterleavedFiles.Add(
file.Name.ToUpper(), new TSInterleavedFile(file));
@@ -214,8 +212,8 @@ namespace BDInfo
public void Scan()
{
List<TSStreamClipFile> errorStreamClipFiles = new List<TSStreamClipFile>();
foreach (TSStreamClipFile streamClipFile in StreamClipFiles.Values)
var errorStreamClipFiles = new List<TSStreamClipFile>();
foreach (var streamClipFile in StreamClipFiles.Values)
{
try
{
@@ -235,11 +233,11 @@ namespace BDInfo
break;
}
}
else throw ex;
else throw;
}
}
foreach (TSStreamFile streamFile in StreamFiles.Values)
foreach (var streamFile in StreamFiles.Values)
{
string ssifName = Path.GetFileNameWithoutExtension(streamFile.Name) + ".SSIF";
if (InterleavedFiles.ContainsKey(ssifName))
@@ -252,8 +250,8 @@ namespace BDInfo
StreamFiles.Values.CopyTo(streamFiles, 0);
Array.Sort(streamFiles, CompareStreamFiles);
List<TSPlaylistFile> errorPlaylistFiles = new List<TSPlaylistFile>();
foreach (TSPlaylistFile playlistFile in PlaylistFiles.Values)
var errorPlaylistFiles = new List<TSPlaylistFile>();
foreach (var playlistFile in PlaylistFiles.Values)
{
try
{
@@ -273,19 +271,19 @@ namespace BDInfo
break;
}
}
else throw ex;
else throw;
}
}
List<TSStreamFile> errorStreamFiles = new List<TSStreamFile>();
foreach (TSStreamFile streamFile in streamFiles)
var errorStreamFiles = new List<TSStreamFile>();
foreach (var streamFile in streamFiles)
{
try
{
List<TSPlaylistFile> playlists = new List<TSPlaylistFile>();
foreach (TSPlaylistFile playlist in PlaylistFiles.Values)
var playlists = new List<TSPlaylistFile>();
foreach (var playlist in PlaylistFiles.Values)
{
foreach (TSStreamClip streamClip in playlist.StreamClips)
foreach (var streamClip in playlist.StreamClips)
{
if (streamClip.Name == streamFile.Name)
{
@@ -310,16 +308,16 @@ namespace BDInfo
break;
}
}
else throw ex;
else throw;
}
}
foreach (TSPlaylistFile playlistFile in PlaylistFiles.Values)
foreach (var playlistFile in PlaylistFiles.Values)
{
playlistFile.Initialize();
if (!Is50Hz)
{
foreach (TSVideoStream videoStream in playlistFile.VideoStreams)
foreach (var videoStream in playlistFile.VideoStreams)
{
if (videoStream.FrameRate == TSFrameRate.FRAMERATE_25 ||
videoStream.FrameRate == TSFrameRate.FRAMERATE_50)
@@ -336,7 +334,7 @@ namespace BDInfo
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException("path");
throw new ArgumentNullException(nameof(path));
}
FileSystemMetadata dir = _fileSystem.GetDirectoryInfo(path);
@@ -369,7 +367,7 @@ namespace BDInfo
if (dir != null)
{
FileSystemMetadata[] children = _fileSystem.GetDirectories(dir.FullName).ToArray();
foreach (FileSystemMetadata child in children)
foreach (var child in children)
{
if (string.Equals(child.Name, name, StringComparison.OrdinalIgnoreCase))
{
@@ -378,7 +376,7 @@ namespace BDInfo
}
if (searchDepth > 0)
{
foreach (FileSystemMetadata child in children)
foreach (var child in children)
{
GetDirectory(
name, child, searchDepth - 1);
@@ -395,7 +393,7 @@ namespace BDInfo
//if (!ExcludeDirs.Contains(directoryInfo.Name.ToUpper())) // TODO: Keep?
{
FileSystemMetadata[] pathFiles = _fileSystem.GetFiles(directoryInfo.FullName).ToArray();
foreach (FileSystemMetadata pathFile in pathFiles)
foreach (var pathFile in pathFiles)
{
if (pathFile.Extension.ToUpper() == ".SSIF")
{
@@ -405,7 +403,7 @@ namespace BDInfo
}
FileSystemMetadata[] pathChildren = _fileSystem.GetDirectories(directoryInfo.FullName).ToArray();
foreach (FileSystemMetadata pathChild in pathChildren)
foreach (var pathChild in pathChildren)
{
size += GetDirectorySize(pathChild);
}

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//

View File

@@ -1,29 +1,21 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Resources;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("BDInfo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BDInfo")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyCompany("Jellyfin Project")]
[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
[assembly: AssemblyCopyright("Copyright © 2016 CinemaSquid. Copyright © 2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.1")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

View File

@@ -1,5 +1,5 @@
The source is taken from the BDRom folder of this project:
The source is taken from the BDRom folder of this project:
http://www.cinemasquid.com/blu-ray/tools/bdinfo
BDInfoSettings was taken from the FormSettings class, and changed so that the settings all return defaults.
BDInfoSettings was taken from the FormSettings class, and changed so that the settings all return defaults.

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -24,7 +24,7 @@ namespace BDInfo
{
public abstract class TSCodecAC3
{
private static byte[] eac3_blocks = new byte[] { 1, 2, 3, 6 };
private static byte[] eac3_blocks = new byte[] { 1, 2, 3, 6 };
public static void Scan(
TSAudioStream stream,

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -148,7 +148,7 @@ namespace BDInfo
stream.IsVBR = true;
stream.IsInitialized = true;
break;
default:
stream.IsVBR = false;
stream.IsInitialized = true;

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -22,9 +22,9 @@ namespace BDInfo
{
public abstract class TSCodecDTSHD
{
private static int[] SampleRates = new int[]
private static int[] SampleRates = new int[]
{ 0x1F40, 0x3E80, 0x7D00, 0x0FA00, 0x1F400, 0x5622, 0x0AC44, 0x15888, 0x2B110, 0x56220, 0x2EE0, 0x5DC0, 0x0BB80, 0x17700, 0x2EE00, 0x5DC00 };
public static void Scan(
TSAudioStream stream,
TSStreamBuffer buffer,
@@ -131,7 +131,7 @@ namespace BDInfo
else
{
AssetSizes[i] = buffer.ReadBits(16) + 1;
}
}
}
for (int i = 0; i < nuNumAssets; i++)
{
@@ -189,7 +189,7 @@ namespace BDInfo
}
stream.SampleRate = SampleRates[nuMaxSampleRate];
stream.BitDepth = nuBitResolution;
stream.LFE = 0;
if ((nuSpkrActivityMask & 0x8) == 0x8)
{
@@ -211,7 +211,7 @@ namespace BDInfo
// TODO
if (stream.CoreStream != null)
{
TSAudioStream coreStream = (TSAudioStream)stream.CoreStream;
var coreStream = (TSAudioStream)stream.CoreStream;
if (coreStream.AudioMode == TSAudioMode.Extended &&
stream.ChannelCount == 5)
{
@@ -240,7 +240,7 @@ namespace BDInfo
stream.IsInitialized = true;
}
stream.IsInitialized = (stream.BitRate > 0 ? true : false);
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -33,7 +33,7 @@ namespace BDInfo
int pictureParse = 0;
int sequenceHeaderParse = 0;
int extensionParse = 0;
int sequenceExtensionParse = 0;
int sequenceExtensionParse = 0;
for (int i = 0; i < buffer.Length; i++)
{
@@ -189,7 +189,7 @@ namespace BDInfo
#if DEBUG
if (sequenceExtensionParse == 0)
{
uint sequenceExtension =
uint sequenceExtension =
((parse & 0x8) >> 3);
if (sequenceExtension == 0)
{

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -36,7 +36,7 @@ namespace BDInfo
for (int i = 0; i < buffer.Length; i++)
{
sync = (sync << 8) + buffer.ReadByte();
if (sync == 0xF8726FBA)
if (sync == 0xF8726FBA)
{
syncFound = true;
break;
@@ -63,7 +63,7 @@ namespace BDInfo
int ratebits = buffer.ReadBits(4);
if (ratebits != 0xF)
{
stream.SampleRate =
stream.SampleRate =
(((ratebits & 8) > 0 ? 44100 : 48000) << (ratebits & 7));
}
int temp1 = buffer.ReadBits(8);
@@ -149,9 +149,9 @@ namespace BDInfo
int peak_bitrate = buffer.ReadBits(15);
peak_bitrate = (peak_bitrate * stream.SampleRate) >> 4;
double peak_bitdepth =
(double)peak_bitrate /
(stream.ChannelCount + stream.LFE) /
double peak_bitdepth =
(double)peak_bitrate /
(stream.ChannelCount + stream.LFE) /
stream.SampleRate;
if (peak_bitdepth > 14)
{
@@ -164,7 +164,7 @@ namespace BDInfo
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format(
"{0}\t{1}\t{2:F2}",
"{0}\t{1}\t{2:F2}",
stream.PID, peak_bitrate, peak_bitdepth));
#endif
/*

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -50,18 +50,18 @@ namespace BDInfo
{
if ((parse & 0x80000000) == 0)
{
pictureType =
pictureType =
(uint)((parse & 0x78000000) >> 13);
}
else
{
pictureType =
pictureType =
(uint)((parse & 0x3c000000) >> 12);
}
}
else
{
pictureType =
pictureType =
(uint)((parse & 0xf0000000) >> 14);
}

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -17,7 +17,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System.IO;
using MediaBrowser.Model.IO;
// TODO: Do more interesting things here...

View File

@@ -23,14 +23,12 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Text;
namespace BDInfo
{
public class TSPlaylistFile
{
private readonly IFileSystem _fileSystem;
private readonly ITextEncoding _textEncoding;
private FileSystemMetadata FileInfo = null;
public string FileType = null;
public bool IsInitialized = false;
@@ -42,7 +40,7 @@ namespace BDInfo
public List<double> Chapters = new List<double>();
public Dictionary<ushort, TSStream> Streams =
public Dictionary<ushort, TSStream> Streams =
new Dictionary<ushort, TSStream>();
public Dictionary<ushort, TSStream> PlaylistStreams =
new Dictionary<ushort, TSStream>();
@@ -50,45 +48,41 @@ namespace BDInfo
new List<TSStreamClip>();
public List<Dictionary<ushort, TSStream>> AngleStreams =
new List<Dictionary<ushort, TSStream>>();
public List<Dictionary<double, TSStreamClip>> AngleClips =
public List<Dictionary<double, TSStreamClip>> AngleClips =
new List<Dictionary<double, TSStreamClip>>();
public int AngleCount = 0;
public List<TSStream> SortedStreams =
public List<TSStream> SortedStreams =
new List<TSStream>();
public List<TSVideoStream> VideoStreams =
public List<TSVideoStream> VideoStreams =
new List<TSVideoStream>();
public List<TSAudioStream> AudioStreams =
public List<TSAudioStream> AudioStreams =
new List<TSAudioStream>();
public List<TSTextStream> TextStreams =
public List<TSTextStream> TextStreams =
new List<TSTextStream>();
public List<TSGraphicsStream> GraphicsStreams =
public List<TSGraphicsStream> GraphicsStreams =
new List<TSGraphicsStream>();
public TSPlaylistFile(
BDROM bdrom,
FileSystemMetadata fileInfo, IFileSystem fileSystem, ITextEncoding textEncoding)
public TSPlaylistFile(BDROM bdrom,
FileSystemMetadata fileInfo, IFileSystem fileSystem)
{
BDROM = bdrom;
FileInfo = fileInfo;
_fileSystem = fileSystem;
_textEncoding = textEncoding;
Name = fileInfo.Name.ToUpper();
}
public TSPlaylistFile(
BDROM bdrom,
public TSPlaylistFile(BDROM bdrom,
string name,
List<TSStreamClip> clips, IFileSystem fileSystem, ITextEncoding textEncoding)
List<TSStreamClip> clips, IFileSystem fileSystem)
{
BDROM = bdrom;
Name = name;
_fileSystem = fileSystem;
_textEncoding = textEncoding;
IsCustom = true;
foreach (TSStreamClip clip in clips)
foreach (var clip in clips)
{
TSStreamClip newClip = new TSStreamClip(
var newClip = new TSStreamClip(
clip.StreamFile, clip.StreamClipFile);
newClip.Name = clip.Name;
@@ -124,7 +118,7 @@ namespace BDInfo
get
{
ulong size = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
size += clip.InterleavedFileSize;
}
@@ -136,7 +130,7 @@ namespace BDInfo
get
{
ulong size = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
size += clip.FileSize;
}
@@ -148,7 +142,7 @@ namespace BDInfo
get
{
double length = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
if (clip.AngleIndex == 0)
{
@@ -164,7 +158,7 @@ namespace BDInfo
get
{
double length = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
length += clip.Length;
}
@@ -177,7 +171,7 @@ namespace BDInfo
get
{
ulong size = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
if (clip.AngleIndex == 0)
{
@@ -193,7 +187,7 @@ namespace BDInfo
get
{
ulong size = 0;
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
size += clip.PacketSize;
}
@@ -264,7 +258,7 @@ namespace BDInfo
int itemCount = ReadInt16(data, ref pos);
int subitemCount = ReadInt16(data, ref pos);
List<TSStreamClip> chapterClips = new List<TSStreamClip>();
var chapterClips = new List<TSStreamClip>();
for (int itemIndex = 0; itemIndex < itemCount; itemIndex++)
{
int itemStart = pos;
@@ -311,7 +305,7 @@ namespace BDInfo
if (outTime < 0) outTime &= 0x7FFFFFFF;
double timeOut = (double)outTime / 45000;
TSStreamClip streamClip = new TSStreamClip(
var streamClip = new TSStreamClip(
streamFile, streamClipFile);
streamClip.Name = streamFileName; //TODO
@@ -362,7 +356,7 @@ namespace BDInfo
FileInfo.Name, angleClipFileName));
}
TSStreamClip angleClip =
var angleClip =
new TSStreamClip(angleFile, angleClipFile);
angleClip.AngleIndex = angle + 1;
angleClip.TimeIn = streamClip.TimeIn;
@@ -388,46 +382,46 @@ namespace BDInfo
#if DEBUG
Debug.WriteLine(string.Format(
"{0} : {1} -> V:{2} A:{3} PG:{4} IG:{5} 2A:{6} 2V:{7} PIP:{8}",
Name, streamFileName, streamCountVideo, streamCountAudio, streamCountPG, streamCountIG,
"{0} : {1} -> V:{2} A:{3} PG:{4} IG:{5} 2A:{6} 2V:{7} PIP:{8}",
Name, streamFileName, streamCountVideo, streamCountAudio, streamCountPG, streamCountIG,
streamCountSecondaryAudio, streamCountSecondaryVideo, streamCountPIP));
#endif
for (int i = 0; i < streamCountVideo; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
}
for (int i = 0; i < streamCountAudio; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
}
for (int i = 0; i < streamCountPG; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
}
for (int i = 0; i < streamCountIG; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
}
for (int i = 0; i < streamCountSecondaryAudio; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
pos += 2;
}
for (int i = 0; i < streamCountSecondaryVideo; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
var stream = CreatePlaylistStream(data, ref pos);
if (stream != null) PlaylistStreams[stream.PID] = stream;
pos += 6;
}
/*
* TODO
*
*
for (int i = 0; i < streamCountPIP; i++)
{
TSStream stream = CreatePlaylistStream(data, ref pos);
@@ -446,7 +440,7 @@ namespace BDInfo
chapterIndex < chapterCount;
chapterIndex++)
{
int chapterType = data[pos+1];
int chapterType = data[pos + 1];
if (chapterType == 1)
{
@@ -459,7 +453,7 @@ namespace BDInfo
((long)data[pos + 6] << 8) +
((long)data[pos + 7]);
TSStreamClip streamClip = chapterClips[streamFileIndex];
var streamClip = chapterClips[streamFileIndex];
double chapterSeconds = (double)chapterTime / 45000;
@@ -499,8 +493,8 @@ namespace BDInfo
{
LoadStreamClips();
Dictionary<string, List<double>> clipTimes = new Dictionary<string, List<double>>();
foreach (TSStreamClip clip in StreamClips)
var clipTimes = new Dictionary<string, List<double>>();
foreach (var clip in StreamClips)
{
if (clip.AngleIndex == 0)
{
@@ -568,7 +562,7 @@ namespace BDInfo
int streamLength = data[pos++];
int streamPos = pos;
TSStreamType streamType = (TSStreamType)data[pos++];
var streamType = (TSStreamType)data[pos++];
switch (streamType)
{
case TSStreamType.MVC_VIDEO:
@@ -580,11 +574,11 @@ namespace BDInfo
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.VC1_VIDEO:
TSVideoFormat videoFormat = (TSVideoFormat)
var videoFormat = (TSVideoFormat)
(data[pos] >> 4);
TSFrameRate frameRate = (TSFrameRate)
var frameRate = (TSFrameRate)
(data[pos] & 0xF);
TSAspectRatio aspectRatio = (TSAspectRatio)
var aspectRatio = (TSAspectRatio)
(data[pos + 1] >> 4);
stream = new TSVideoStream();
@@ -618,9 +612,9 @@ namespace BDInfo
int audioFormat = ReadByte(data, ref pos);
TSChannelLayout channelLayout = (TSChannelLayout)
var channelLayout = (TSChannelLayout)
(audioFormat >> 4);
TSSampleRate sampleRate = (TSSampleRate)
var sampleRate = (TSSampleRate)
(audioFormat & 0xF);
string audioLanguage = ReadString(data, 3, ref pos);
@@ -713,7 +707,7 @@ namespace BDInfo
{
referenceClip = StreamClips[0];
}
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
if (clip.StreamClipFile.Streams.Count > referenceClip.StreamClipFile.Streams.Count)
{
@@ -739,12 +733,12 @@ namespace BDInfo
}
}
foreach (TSStream clipStream
foreach (var clipStream
in referenceClip.StreamClipFile.Streams.Values)
{
if (!Streams.ContainsKey(clipStream.PID))
{
TSStream stream = clipStream.Clone();
var stream = clipStream.Clone();
Streams[clipStream.PID] = stream;
if (!IsCustom && !PlaylistStreams.ContainsKey(stream.PID))
@@ -780,7 +774,7 @@ namespace BDInfo
referenceClip.StreamFile.Streams.ContainsKey(4114) &&
!Streams.ContainsKey(4114))
{
TSStream stream = referenceClip.StreamFile.Streams[4114].Clone();
var stream = referenceClip.StreamFile.Streams[4114].Clone();
Streams[4114] = stream;
if (stream.IsVideoStream)
{
@@ -788,12 +782,12 @@ namespace BDInfo
}
}
foreach (TSStream clipStream
foreach (var clipStream
in referenceClip.StreamFile.Streams.Values)
{
if (Streams.ContainsKey(clipStream.PID))
{
TSStream stream = Streams[clipStream.PID];
var stream = Streams[clipStream.PID];
if (stream.StreamType != clipStream.StreamType) continue;
@@ -812,8 +806,8 @@ namespace BDInfo
else if (stream.IsAudioStream &&
clipStream.IsAudioStream)
{
TSAudioStream audioStream = (TSAudioStream)stream;
TSAudioStream clipAudioStream = (TSAudioStream)clipStream;
var audioStream = (TSAudioStream)stream;
var clipAudioStream = (TSAudioStream)clipStream;
if (clipAudioStream.ChannelCount > audioStream.ChannelCount)
{
@@ -864,7 +858,7 @@ namespace BDInfo
SortedStreams.Add(stream);
for (int i = 0; i < AngleCount; i++)
{
TSStream angleStream = stream.Clone();
var angleStream = stream.Clone();
angleStream.AngleIndex = i + 1;
AngleStreams[i][angleStream.PID] = angleStream;
SortedStreams.Add(angleStream);
@@ -901,7 +895,7 @@ namespace BDInfo
public void ClearBitrates()
{
foreach (TSStreamClip clip in StreamClips)
foreach (var clip in StreamClips)
{
clip.PayloadBytes = 0;
clip.PacketCount = 0;
@@ -909,7 +903,7 @@ namespace BDInfo
if (clip.StreamFile != null)
{
foreach (TSStream stream in clip.StreamFile.Streams.Values)
foreach (var stream in clip.StreamFile.Streams.Values)
{
stream.PayloadBytes = 0;
stream.PacketCount = 0;
@@ -924,7 +918,7 @@ namespace BDInfo
}
}
foreach (TSStream stream in SortedStreams)
foreach (var stream in SortedStreams)
{
stream.PayloadBytes = 0;
stream.PacketCount = 0;
@@ -955,7 +949,7 @@ namespace BDInfo
}
public int CompareVideoStreams(
TSVideoStream x,
TSVideoStream x,
TSVideoStream y)
{
if (x == null && y == null)
@@ -996,7 +990,7 @@ namespace BDInfo
}
public int CompareAudioStreams(
TSAudioStream x,
TSAudioStream x,
TSAudioStream y)
{
if (x == y)
@@ -1246,8 +1240,7 @@ namespace BDInfo
int count,
ref int pos)
{
string val =
_textEncoding.GetASCIIEncoding().GetString(data, pos, count);
string val = Encoding.ASCII.GetString(data, pos, count);
pos += count;

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -109,7 +109,7 @@ namespace BDInfo
public TSDescriptor Clone()
{
TSDescriptor descriptor =
var descriptor =
new TSDescriptor(Name, (byte)Value.Length);
Value.CopyTo(descriptor.Value, 0);
return descriptor;
@@ -142,26 +142,17 @@ namespace BDInfo
public double PacketSeconds = 0;
public int AngleIndex = 0;
public ulong PacketSize
{
get
{
return PacketCount * 192;
}
}
public ulong PacketSize => PacketCount * 192;
private string _LanguageCode;
public string LanguageCode
{
get
{
return _LanguageCode;
}
set
get => _LanguageCode;
set
{
_LanguageCode = value;
LanguageName = LanguageCodes.GetName(value);
}
}
}
public bool IsVideoStream
@@ -398,16 +389,10 @@ namespace BDInfo
}
}
public virtual string Description
{
get
{
return "";
}
}
public virtual string Description => "";
public abstract TSStream Clone();
protected void CopyTo(TSStream stream)
{
stream.PID = PID;
@@ -419,7 +404,7 @@ namespace BDInfo
if (Descriptors != null)
{
stream.Descriptors = new List<TSDescriptor>();
foreach (TSDescriptor descriptor in Descriptors)
foreach (var descriptor in Descriptors)
{
stream.Descriptors.Add(descriptor.Clone());
}
@@ -435,7 +420,7 @@ namespace BDInfo
public int Width;
public int Height;
public bool IsInterlaced;
public bool IsInterlaced;
public int FrameRateEnumerator;
public int FrameRateDenominator;
public TSAspectRatio AspectRatio;
@@ -444,10 +429,7 @@ namespace BDInfo
private TSVideoFormat _VideoFormat;
public TSVideoFormat VideoFormat
{
get
{
return _VideoFormat;
}
get => _VideoFormat;
set
{
_VideoFormat = value;
@@ -488,10 +470,7 @@ namespace BDInfo
private TSFrameRate _FrameRate;
public TSFrameRate FrameRate
{
get
{
return _FrameRate;
}
get => _FrameRate;
set
{
_FrameRate = value;
@@ -574,14 +553,14 @@ namespace BDInfo
public override TSStream Clone()
{
TSVideoStream stream = new TSVideoStream();
var stream = new TSVideoStream();
CopyTo(stream);
stream.VideoFormat = _VideoFormat;
stream.FrameRate = _FrameRate;
stream.Width = Width;
stream.Height = Height;
stream.IsInterlaced = IsInterlaced;
stream.IsInterlaced = IsInterlaced;
stream.FrameRateEnumerator = FrameRateEnumerator;
stream.FrameRateDenominator = FrameRateDenominator;
stream.AspectRatio = AspectRatio;
@@ -748,7 +727,7 @@ namespace BDInfo
public override TSStream Clone()
{
TSAudioStream stream = new TSAudioStream();
var stream = new TSAudioStream();
CopyTo(stream);
stream.SampleRate = SampleRate;
@@ -777,7 +756,7 @@ namespace BDInfo
public override TSStream Clone()
{
TSGraphicsStream stream = new TSGraphicsStream();
var stream = new TSGraphicsStream();
CopyTo(stream);
return stream;
}
@@ -793,7 +772,7 @@ namespace BDInfo
public override TSStream Clone()
{
TSTextStream stream = new TSTextStream();
var stream = new TSTextStream();
CopyTo(stream);
return stream;
}

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -37,21 +37,9 @@ namespace BDInfo
Stream = new MemoryStream(Buffer);
}
public long Length
{
get
{
return (long)BufferLength;
}
}
public long Length => (long)BufferLength;
public long Position
{
get
{
return Stream.Position;
}
}
public long Position => Stream.Position;
public void Add(
byte[] buffer,
@@ -123,7 +111,7 @@ namespace BDInfo
data += (Stream.ReadByte() << shift);
shift -= 8;
}
BitVector32 vector = new BitVector32(data);
var vector = new BitVector32(data);
int value = 0;
for (int i = SkipBits; i < SkipBits + bits; i++)

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -74,13 +74,7 @@ namespace BDInfo
}
}
public ulong PacketSize
{
get
{
return PacketCount * 192;
}
}
public ulong PacketSize => PacketCount * 192;
public ulong PacketBitRate
{
@@ -96,11 +90,11 @@ namespace BDInfo
public bool IsCompatible(TSStreamClip clip)
{
foreach (TSStream stream1 in StreamFile.Streams.Values)
foreach (var stream1 in StreamFile.Streams.Values)
{
if (clip.StreamFile.Streams.ContainsKey(stream1.PID))
{
TSStream stream2 = clip.StreamFile.Streams[stream1.PID];
var stream2 = clip.StreamFile.Streams[stream1.PID];
if (stream1.StreamType != stream2.StreamType)
{
return false;

View File

@@ -23,28 +23,24 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Text;
namespace BDInfo
{
public class TSStreamClipFile
{
private readonly IFileSystem _fileSystem;
private readonly ITextEncoding _textEncoding;
public FileSystemMetadata FileInfo = null;
public string FileType = null;
public bool IsValid = false;
public string Name = null;
public Dictionary<ushort, TSStream> Streams =
new Dictionary<ushort,TSStream>();
new Dictionary<ushort, TSStream>();
public TSStreamClipFile(
FileSystemMetadata fileInfo, IFileSystem fileSystem, ITextEncoding textEncoding)
public TSStreamClipFile(FileSystemMetadata fileInfo, IFileSystem fileSystem)
{
FileInfo = fileInfo;
_fileSystem = fileSystem;
_textEncoding = textEncoding;
Name = fileInfo.Name.ToUpper();
}
@@ -69,8 +65,8 @@ namespace BDInfo
byte[] fileType = new byte[8];
Array.Copy(data, 0, fileType, 0, fileType.Length);
FileType = _textEncoding.GetASCIIEncoding().GetString(fileType, 0, fileType.Length);
FileType = Encoding.ASCII.GetString(fileType, 0, fileType.Length);
if (FileType != "HDMV0100" &&
FileType != "HDMV0200")
{
@@ -78,7 +74,7 @@ namespace BDInfo
"Clip info file {0} has an unknown file type {1}.",
FileInfo.Name, FileType));
}
#if DEBUG
#if DEBUG
Debug.WriteLine(string.Format(
"\tFileType: {0}", FileType));
#endif
@@ -110,12 +106,12 @@ namespace BDInfo
TSStream stream = null;
ushort PID = (ushort)
((clipData[streamOffset] << 8) +
((clipData[streamOffset] << 8) +
clipData[streamOffset + 1]);
streamOffset += 2;
TSStreamType streamType = (TSStreamType)
var streamType = (TSStreamType)
clipData[streamOffset + 1];
switch (streamType)
{
@@ -127,18 +123,18 @@ namespace BDInfo
case TSStreamType.MPEG1_VIDEO:
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.VC1_VIDEO:
{
TSVideoFormat videoFormat = (TSVideoFormat)
(clipData[streamOffset + 2] >> 4);
TSFrameRate frameRate = (TSFrameRate)
(clipData[streamOffset + 2] & 0xF);
TSAspectRatio aspectRatio = (TSAspectRatio)
(clipData[streamOffset + 3] >> 4);
{
var videoFormat = (TSVideoFormat)
(clipData[streamOffset + 2] >> 4);
var frameRate = (TSFrameRate)
(clipData[streamOffset + 2] & 0xF);
var aspectRatio = (TSAspectRatio)
(clipData[streamOffset + 3] >> 4);
stream = new TSVideoStream();
((TSVideoStream)stream).VideoFormat = videoFormat;
((TSVideoStream)stream).AspectRatio = aspectRatio;
((TSVideoStream)stream).FrameRate = frameRate;
stream = new TSVideoStream();
((TSVideoStream)stream).VideoFormat = videoFormat;
((TSVideoStream)stream).AspectRatio = aspectRatio;
((TSVideoStream)stream).FrameRate = frameRate;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2} {3} {4}",
@@ -148,8 +144,8 @@ namespace BDInfo
frameRate,
aspectRatio));
#endif
}
break;
}
break;
case TSStreamType.AC3_AUDIO:
case TSStreamType.AC3_PLUS_AUDIO:
@@ -162,23 +158,22 @@ namespace BDInfo
case TSStreamType.LPCM_AUDIO:
case TSStreamType.MPEG1_AUDIO:
case TSStreamType.MPEG2_AUDIO:
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 3,
languageBytes, 0, languageBytes.Length);
string languageCode =
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 3,
languageBytes, 0, languageBytes.Length);
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
TSChannelLayout channelLayout = (TSChannelLayout)
(clipData[streamOffset + 2] >> 4);
TSSampleRate sampleRate = (TSSampleRate)
(clipData[streamOffset + 2] & 0xF);
var channelLayout = (TSChannelLayout)
(clipData[streamOffset + 2] >> 4);
var sampleRate = (TSSampleRate)
(clipData[streamOffset + 2] & 0xF);
stream = new TSAudioStream();
((TSAudioStream)stream).LanguageCode = languageCode;
((TSAudioStream)stream).ChannelLayout = channelLayout;
((TSAudioStream)stream).SampleRate = TSAudioStream.ConvertSampleRate(sampleRate);
((TSAudioStream)stream).LanguageCode = languageCode;
stream = new TSAudioStream();
((TSAudioStream)stream).LanguageCode = languageCode;
((TSAudioStream)stream).ChannelLayout = channelLayout;
((TSAudioStream)stream).SampleRate = TSAudioStream.ConvertSampleRate(sampleRate);
((TSAudioStream)stream).LanguageCode = languageCode;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2} {3} {4}",
@@ -188,20 +183,19 @@ namespace BDInfo
channelLayout,
sampleRate));
#endif
}
break;
}
break;
case TSStreamType.INTERACTIVE_GRAPHICS:
case TSStreamType.PRESENTATION_GRAPHICS:
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 2,
languageBytes, 0, languageBytes.Length);
string languageCode =
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 2,
languageBytes, 0, languageBytes.Length);
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
stream = new TSGraphicsStream();
stream.LanguageCode = languageCode;
stream.LanguageCode = languageCode;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2}",
@@ -209,16 +203,15 @@ namespace BDInfo
streamType,
languageCode));
#endif
}
break;
}
break;
case TSStreamType.SUBTITLE:
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 3,
languageBytes, 0, languageBytes.Length);
string languageCode =
_textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length);
{
byte[] languageBytes = new byte[3];
Array.Copy(clipData, streamOffset + 3,
languageBytes, 0, languageBytes.Length);
string languageCode = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2}",
@@ -227,9 +220,9 @@ namespace BDInfo
languageCode));
#endif
stream = new TSTextStream();
stream.LanguageCode = languageCode;
}
break;
stream.LanguageCode = languageCode;
}
break;
}
if (stream != null)
@@ -240,7 +233,7 @@ namespace BDInfo
}
streamOffset += clipData[streamOffset] + 1;
}
}
IsValid = true;
}
finally

View File

@@ -1,4 +1,4 @@
//============================================================================
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
@@ -283,7 +283,7 @@ namespace BDInfo
bool isAVC = false;
bool isMVC = false;
foreach (TSStream finishedStream in Streams.Values)
foreach (var finishedStream in Streams.Values)
{
if (!finishedStream.IsInitialized)
{
@@ -327,10 +327,10 @@ namespace BDInfo
UpdateStreamBitrate(PID, PTSPID, PTS, PTSDiff);
}
foreach (TSPlaylistFile playlist in Playlists)
foreach (var playlist in Playlists)
{
double packetSeconds = 0;
foreach (TSStreamClip clip in playlist.StreamClips)
foreach (var clip in playlist.StreamClips)
{
if (clip.AngleIndex == 0)
{
@@ -339,7 +339,7 @@ namespace BDInfo
}
if (packetSeconds > 0)
{
foreach (TSStream playlistStream in playlist.SortedStreams)
foreach (var playlistStream in playlist.SortedStreams)
{
if (playlistStream.IsVBR)
{
@@ -366,14 +366,14 @@ namespace BDInfo
{
if (Playlists == null) return;
TSStreamState streamState = StreamStates[PID];
var streamState = StreamStates[PID];
double streamTime = (double)PTS / 90000;
double streamInterval = (double)PTSDiff / 90000;
double streamOffset = streamTime + streamInterval;
foreach (TSPlaylistFile playlist in Playlists)
foreach (var playlist in Playlists)
{
foreach (TSStreamClip clip in playlist.StreamClips)
foreach (var clip in playlist.StreamClips)
{
if (clip.Name != this.Name) continue;
@@ -390,15 +390,15 @@ namespace BDInfo
clip.PacketSeconds = streamOffset - clip.TimeIn;
}
Dictionary<ushort, TSStream> playlistStreams = playlist.Streams;
if (clip.AngleIndex > 0 &&
var playlistStreams = playlist.Streams;
if (clip.AngleIndex > 0 &&
clip.AngleIndex < playlist.AngleStreams.Count + 1)
{
playlistStreams = playlist.AngleStreams[clip.AngleIndex - 1];
}
if (playlistStreams.ContainsKey(PID))
{
TSStream stream = playlistStreams[PID];
var stream = playlistStreams[PID];
stream.PayloadBytes += streamState.WindowBytes;
stream.PacketCount += streamState.WindowPackets;
@@ -425,13 +425,13 @@ namespace BDInfo
if (Streams.ContainsKey(PID))
{
TSStream stream = Streams[PID];
var stream = Streams[PID];
stream.PayloadBytes += streamState.WindowBytes;
stream.PacketCount += streamState.WindowPackets;
if (stream.IsVideoStream)
{
TSStreamDiagnostics diag = new TSStreamDiagnostics();
var diag = new TSStreamDiagnostics();
diag.Marker = (double)PTS / 90000;
diag.Interval = (double)PTSDiff / 90000;
diag.Bytes = streamState.WindowBytes;
@@ -457,7 +457,7 @@ namespace BDInfo
int dataSize = 16384;
Stream fileStream = null;
try
{
{
string fileName;
if (BDInfoSettings.EnableSSIF &&
InterleavedFile != null)
@@ -482,13 +482,13 @@ namespace BDInfo
StreamStates.Clear();
StreamDiagnostics.Clear();
TSPacketParser parser =
var parser =
new TSPacketParser();
long fileLength = (uint)fileStream.Length;
byte[] buffer = new byte[dataSize];
int bufferLength = 0;
while ((bufferLength =
while ((bufferLength =
fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
int offset = 0;
@@ -536,80 +536,80 @@ namespace BDInfo
switch (parser.HeaderParse)
{
case 2:
{
parser.TransportErrorIndicator =
(byte)((buffer[i] >> 7) & 0x1);
parser.PayloadUnitStartIndicator =
(byte)((buffer[i] >> 6) & 0x1);
parser.TransportPriority =
(byte)((buffer[i] >> 5) & 0x1);
parser.PID =
(ushort)((buffer[i] & 0x1f) << 8);
}
break;
{
parser.TransportErrorIndicator =
(byte)((buffer[i] >> 7) & 0x1);
parser.PayloadUnitStartIndicator =
(byte)((buffer[i] >> 6) & 0x1);
parser.TransportPriority =
(byte)((buffer[i] >> 5) & 0x1);
parser.PID =
(ushort)((buffer[i] & 0x1f) << 8);
}
break;
case 1:
{
parser.PID |= (ushort)buffer[i];
if (Streams.ContainsKey(parser.PID))
{
parser.Stream = Streams[parser.PID];
parser.PID |= (ushort)buffer[i];
if (Streams.ContainsKey(parser.PID))
{
parser.Stream = Streams[parser.PID];
}
else
{
parser.Stream = null;
}
if (!StreamStates.ContainsKey(parser.PID))
{
StreamStates[parser.PID] = new TSStreamState();
}
parser.StreamState = StreamStates[parser.PID];
parser.StreamState.TotalPackets++;
parser.StreamState.WindowPackets++;
parser.TotalPackets++;
}
else
{
parser.Stream = null;
}
if (!StreamStates.ContainsKey(parser.PID))
{
StreamStates[parser.PID] = new TSStreamState();
}
parser.StreamState = StreamStates[parser.PID];
parser.StreamState.TotalPackets++;
parser.StreamState.WindowPackets++;
parser.TotalPackets++;
}
break;
break;
case 0:
{
parser.TransportScramblingControl =
(byte)((buffer[i] >> 6) & 0x3);
parser.AdaptionFieldControl =
(byte)((buffer[i] >> 4) & 0x3);
if ((parser.AdaptionFieldControl & 0x2) == 0x2)
{
parser.AdaptionFieldState = true;
}
if (parser.PayloadUnitStartIndicator == 1)
{
if (parser.PID == 0)
{
parser.PATSectionStart = true;
}
else if (parser.PID == parser.PMTPID)
{
parser.PMTSectionStart = true;
}
else if (parser.StreamState != null &&
parser.StreamState.TransferState)
{
parser.StreamState.TransferState = false;
parser.StreamState.TransferCount++;
parser.TransportScramblingControl =
(byte)((buffer[i] >> 6) & 0x3);
parser.AdaptionFieldControl =
(byte)((buffer[i] >> 4) & 0x3);
bool isFinished = ScanStream(
parser.Stream,
parser.StreamState,
parser.StreamState.StreamBuffer);
if (!isFullScan && isFinished)
if ((parser.AdaptionFieldControl & 0x2) == 0x2)
{
parser.AdaptionFieldState = true;
}
if (parser.PayloadUnitStartIndicator == 1)
{
if (parser.PID == 0)
{
return;
parser.PATSectionStart = true;
}
else if (parser.PID == parser.PMTPID)
{
parser.PMTSectionStart = true;
}
else if (parser.StreamState != null &&
parser.StreamState.TransferState)
{
parser.StreamState.TransferState = false;
parser.StreamState.TransferCount++;
bool isFinished = ScanStream(
parser.Stream,
parser.StreamState,
parser.StreamState.StreamBuffer);
if (!isFullScan && isFinished)
{
return;
}
}
}
}
}
break;
break;
}
}
else if (parser.AdaptionFieldState)
@@ -670,7 +670,8 @@ namespace BDInfo
parser.PAT[parser.PATOffset++] = buffer[i++];
parser.PATSectionLength--;
parser.PacketLength--;
} --i;
}
--i;
if (parser.PATSectionLength == 0)
{
@@ -680,10 +681,10 @@ namespace BDInfo
for (int k = 0; k < (parser.PATOffset - 4); k += 4)
{
uint programNumber = (uint)
((parser.PAT[k] << 8) +
((parser.PAT[k] << 8) +
parser.PAT[k + 1]);
ushort programPID = (ushort)
ushort programPID = (ushort)
(((parser.PAT[k + 2] & 0x1F) << 8) +
parser.PAT[k + 3]);
@@ -801,7 +802,8 @@ namespace BDInfo
PMT[parser.PMTOffset++] = buffer[i++];
--parser.PMTSectionLength;
--parser.PacketLength;
} --i;
}
--i;
if (parser.PMTSectionLength == 0)
{
@@ -837,7 +839,7 @@ namespace BDInfo
if (!Streams.ContainsKey(streamPID))
{
List<TSDescriptor> streamDescriptors =
var streamDescriptors =
new List<TSDescriptor>();
/*
@@ -985,7 +987,7 @@ namespace BDInfo
parser.PMTProgramDescriptorLength = buffer[i];
parser.PMTProgramDescriptors.Add(
new TSDescriptor(
parser.PMTProgramDescriptor,
parser.PMTProgramDescriptor,
parser.PMTProgramDescriptorLength));
break;
}
@@ -994,11 +996,11 @@ namespace BDInfo
{
--parser.PMTProgramDescriptorLength;
TSDescriptor descriptor = parser.PMTProgramDescriptors[
var descriptor = parser.PMTProgramDescriptors[
parser.PMTProgramDescriptors.Count - 1];
int valueIndex =
descriptor.Value.Length -
descriptor.Value.Length -
parser.PMTProgramDescriptorLength - 1;
descriptor.Value[valueIndex] = buffer[i];
@@ -1020,19 +1022,19 @@ namespace BDInfo
parser.SyncState = false;
}
}
else if (parser.Stream != null &&
parser.StreamState != null &&
else if (parser.Stream != null &&
parser.StreamState != null &&
parser.TransportScramblingControl == 0)
{
TSStream stream = parser.Stream;
TSStreamState streamState = parser.StreamState;
var stream = parser.Stream;
var streamState = parser.StreamState;
streamState.Parse =
(streamState.Parse << 8) + buffer[i];
if (streamState.TransferState)
{
if ((bufferLength - i) >= streamState.PacketLength &&
if ((bufferLength - i) >= streamState.PacketLength &&
streamState.PacketLength > 0)
{
offset = streamState.PacketLength;
@@ -1085,7 +1087,7 @@ namespace BDInfo
--parser.PacketLength;
bool headerFound = false;
if (stream.IsVideoStream &&
if (stream.IsVideoStream &&
streamState.Parse == 0x000001FD)
{
headerFound = true;
@@ -1170,18 +1172,18 @@ namespace BDInfo
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 1:
streamState.PESHeaderFlags =
streamState.PESHeaderFlags =
(byte)(streamState.Parse & 0xFF);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 0:
streamState.PESHeaderLength =
streamState.PESHeaderLength =
(byte)(streamState.Parse & 0xFF);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
@@ -1211,48 +1213,48 @@ namespace BDInfo
switch (streamState.PTSParse)
{
case 4:
streamState.PTSTemp =
streamState.PTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
case 3:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 2:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 1:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 0:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
#endif
streamState.PTS = streamState.PTSTemp;
if (streamState.PTS > streamState.PTSLast)
@@ -1260,13 +1262,13 @@ namespace BDInfo
if (streamState.PTSLast > 0)
{
streamState.PTSTransfer = (streamState.PTS - streamState.PTSLast);
}
}
streamState.PTSLast = streamState.PTS;
}
streamState.PTSDiff = streamState.PTS - streamState.DTSPrev;
if (streamState.PTSCount > 0 &&
if (streamState.PTSCount > 0 &&
stream.IsVideoStream)
{
UpdateStreamBitrates(stream.PID, streamState.PTS, streamState.PTSDiff);
@@ -1280,7 +1282,7 @@ namespace BDInfo
}
Length = (double)(parser.PTSLast - parser.PTSFirst) / 90000;
}
streamState.DTSPrev = streamState.PTS;
streamState.PTSCount++;
if (streamState.PESHeaderLength == 0)
@@ -1299,46 +1301,46 @@ namespace BDInfo
switch (streamState.DTSParse)
{
case 9:
streamState.PTSTemp =
streamState.PTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 8:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 7:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
case 6:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 5:
streamState.PTSTemp |=
streamState.PTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
streamState.PTS = streamState.PTSTemp;
@@ -1347,48 +1349,48 @@ namespace BDInfo
streamState.PTSLast = streamState.PTS;
}
break;
case 4:
streamState.DTSTemp =
streamState.DTSTemp =
((streamState.Parse & 0xE) << 29);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
case 3:
streamState.DTSTemp |=
streamState.DTSTemp |=
((streamState.Parse & 0xFF) << 22);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
case 2:
streamState.DTSTemp |=
streamState.DTSTemp |=
((streamState.Parse & 0xFE) << 14);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
break;
case 1:
streamState.DTSTemp |=
streamState.DTSTemp |=
((streamState.Parse & 0xFF) << 7);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xFF);
#endif
break;
case 0:
streamState.DTSTemp |=
streamState.DTSTemp |=
((streamState.Parse & 0xFE) >> 1);
#if DEBUG
streamState.PESHeader[streamState.PESHeaderIndex++] =
streamState.PESHeader[streamState.PESHeaderIndex++] =
(byte)(streamState.Parse & 0xff);
#endif
streamState.PTSDiff = streamState.DTSTemp - streamState.DTSPrev;
@@ -1459,7 +1461,7 @@ namespace BDInfo
ulong PTSLast = 0;
ulong PTSDiff = 0;
foreach (TSStream stream in Streams.Values)
foreach (var stream in Streams.Values)
{
if (!stream.IsVideoStream) continue;
@@ -1482,8 +1484,8 @@ namespace BDInfo
}
private TSStream CreateStream(
ushort streamPID,
byte streamType,
ushort streamPID,
byte streamType,
List<TSDescriptor> streamDescriptors)
{
TSStream stream = null;
@@ -1495,10 +1497,10 @@ namespace BDInfo
case TSStreamType.MPEG1_VIDEO:
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.VC1_VIDEO:
{
stream = new TSVideoStream();
}
break;
{
stream = new TSVideoStream();
}
break;
case TSStreamType.AC3_AUDIO:
case TSStreamType.AC3_PLUS_AUDIO:
@@ -1511,23 +1513,23 @@ namespace BDInfo
case TSStreamType.LPCM_AUDIO:
case TSStreamType.MPEG1_AUDIO:
case TSStreamType.MPEG2_AUDIO:
{
stream = new TSAudioStream();
}
break;
{
stream = new TSAudioStream();
}
break;
case TSStreamType.INTERACTIVE_GRAPHICS:
case TSStreamType.PRESENTATION_GRAPHICS:
{
stream = new TSGraphicsStream();
}
break;
{
stream = new TSGraphicsStream();
}
break;
case TSStreamType.SUBTITLE:
{
stream = new TSTextStream();
}
break;
{
stream = new TSTextStream();
}
break;
default:
break;
@@ -1548,6 +1550,6 @@ namespace BDInfo
}
return stream;
}
}
}
}

View File

@@ -11,6 +11,10 @@
- [AnthonyLavado](https://github.com/anthonylavado)
- [sparky8251](https://github.com/sparky8251)
- [LeoVerto](https://github.com/LeoVerto)
- [grafixeyehero](https://github.com/grafixeyehero)
- [cvium](https://github.com/cvium)
- [wtayl0r](https://github.com/wtayl0r)
- [TtheCreator](https://github.com/Tthecreator)
# Emby Contributors

View File

@@ -15,7 +15,10 @@ WORKDIR /repo
COPY . .
RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
&& dotnet clean \
&& dotnet publish --configuration release --output /jellyfin
&& dotnet publish \
--configuration release \
--output /jellyfin \
Jellyfin.Server
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
@@ -23,6 +26,12 @@ COPY --from=builder /jellyfin /jellyfin
COPY --from=ffmpeg /ffmpeg-bin/* /usr/bin/
EXPOSE 8096
VOLUME /config /media
RUN apt update \
&& apt install -y libfontconfig1 # needed for Skia
# libfontconfig1 is required for Skia
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
libfontconfig1 \
&& apt-get clean autoclean \
&& apt-get autoremove \
&& rm -rf /var/lib/{apt,dpkg,cache,log}
ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config

View File

@@ -1,17 +0,0 @@
ARG DOTNET_VERSION=3.0
FROM microsoft/dotnet:${DOTNET_VERSION}-sdk as builder
WORKDIR /repo
COPY . .
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
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
COPY --from=builder /jellyfin /jellyfin
EXPOSE 8096
RUN apt update \
&& apt install -y ffmpeg
VOLUME /config /media
ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config

24
Dockerfile.arm Normal file
View File

@@ -0,0 +1,24 @@
ARG DOTNET_VERSION=3.0
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 -maxcpucount:1 \
&& dotnet publish \
-maxcpucount:1 \
--configuration release \
--output /jellyfin \
Jellyfin.Server
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm32v7
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

33
Dockerfile.arm64 Normal file
View File

@@ -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

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.IO;
namespace DvdLib

View File

@@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Compile Include="..\SharedVersion.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />

View File

@@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DvdLib.Ifo
{
public enum AudioCodec

View File

@@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DvdLib.Ifo

View File

@@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DvdLib.Ifo

View File

@@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DvdLib.Ifo

View File

@@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DvdLib.Ifo
{
public class Chapter

View File

@@ -1,9 +1,7 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Linq;
using MediaBrowser.Model.IO;
namespace DvdLib.Ifo
@@ -33,10 +31,9 @@ namespace DvdLib.Ifo
foreach (var ifo in allIfos)
{
var num = ifo.Name.Split('_').ElementAtOrDefault(1);
ushort ifoNumber;
var numbersRead = new List<ushort>();
if (!string.IsNullOrEmpty(num) && ushort.TryParse(num, out ifoNumber) && !numbersRead.Contains(ifoNumber))
if (!string.IsNullOrEmpty(num) && ushort.TryParse(num, out var ifoNumber) && !numbersRead.Contains(ifoNumber))
{
ReadVTS(ifoNumber, ifo.FullName);
numbersRead.Add(ifoNumber);
@@ -47,7 +44,7 @@ namespace DvdLib.Ifo
{
using (var vmgFs = _fileSystem.GetFileStream(vmgPath.FullName, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
using (BigEndianBinaryReader vmgRead = new BigEndianBinaryReader(vmgFs))
using (var vmgRead = new BigEndianBinaryReader(vmgFs))
{
vmgFs.Seek(0x3E, SeekOrigin.Begin);
_titleSetCount = vmgRead.ReadUInt16();
@@ -73,7 +70,7 @@ namespace DvdLib.Ifo
read.BaseStream.Seek(6, SeekOrigin.Current);
for (uint titleNum = 1; titleNum <= _titleCount; titleNum++)
{
Title t = new Title(titleNum);
var t = new Title(titleNum);
t.ParseTT_SRPT(read);
Titles.Add(t);
}
@@ -81,7 +78,7 @@ namespace DvdLib.Ifo
private void ReadVTS(ushort vtsNum, List<FileSystemMetadata> allFiles)
{
var filename = String.Format("VTS_{0:00}_0.IFO", vtsNum);
var filename = string.Format("VTS_{0:00}_0.IFO", vtsNum);
var vtsPath = allFiles.FirstOrDefault(i => string.Equals(i.Name, filename, StringComparison.OrdinalIgnoreCase)) ??
allFiles.FirstOrDefault(i => string.Equals(i.Name, Path.ChangeExtension(filename, ".bup"), StringComparison.OrdinalIgnoreCase));
@@ -100,7 +97,7 @@ namespace DvdLib.Ifo
using (var vtsFs = _fileSystem.GetFileStream(vtsPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
using (BigEndianBinaryReader vtsRead = new BigEndianBinaryReader(vtsFs))
using (var vtsRead = new BigEndianBinaryReader(vtsFs))
{
// Read VTS_PTT_SRPT
vtsFs.Seek(0xC8, SeekOrigin.Begin);
@@ -121,7 +118,7 @@ namespace DvdLib.Ifo
{
uint chapNum = 1;
vtsFs.Seek(baseAddr + offsets[titleNum], SeekOrigin.Begin);
Title t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum + 1));
var t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum + 1));
if (t == null) continue;
do
@@ -151,11 +148,11 @@ namespace DvdLib.Ifo
vtsFs.Seek(3, SeekOrigin.Current);
uint vtsPgcOffset = vtsRead.ReadUInt32();
Title t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum));
var t = Titles.FirstOrDefault(vtst => vtst.IsVTSTitle(vtsNum, titleNum));
if (t != null) t.AddPgc(vtsRead, startByte + vtsPgcOffset, entryPgc, pgcNum);
}
}
}
}
}
}
}

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
namespace DvdLib.Ifo
{
@@ -20,7 +17,7 @@ namespace DvdLib.Ifo
else if ((data[3] & 0x40) != 0) FrameRate = 25;
}
private byte GetBCDValue(byte data)
private static byte GetBCDValue(byte data)
{
return (byte)((((data & 0xF0) >> 4) * 10) + (data & 0x0F));
}

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DvdLib.Ifo
{

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DvdLib.Ifo
{

View File

@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Linq;
namespace DvdLib.Ifo
{
@@ -68,7 +66,7 @@ namespace DvdLib.Ifo
ProhibitedUserOperations = (UserOperation)br.ReadUInt32();
AudioStreamControl = br.ReadBytes(16);
SubpictureStreamControl = br.ReadBytes(128);
_nextProgramNumber = br.ReadUInt16();
_prevProgramNumber = br.ReadUInt16();
_goupProgramNumber = br.ReadUInt16();
@@ -89,7 +87,7 @@ namespace DvdLib.Ifo
br.BaseStream.Seek(startPos + _cellPositionOffset, SeekOrigin.Begin);
for (int cellNum = 0; cellNum < _cellCount; cellNum++)
{
Cell c = new Cell();
var c = new Cell();
c.ParsePosition(br);
Cells.Add(c);
}
@@ -101,12 +99,12 @@ namespace DvdLib.Ifo
}
br.BaseStream.Seek(startPos + _programMapOffset, SeekOrigin.Begin);
List<int> cellNumbers = new List<int>();
var cellNumbers = new List<int>();
for (int progNum = 0; progNum < _programCount; progNum++) cellNumbers.Add(br.ReadByte() - 1);
for (int i = 0; i < cellNumbers.Count; i++)
{
int max = (i + 1 == cellNumbers.Count) ? _cellCount : cellNumbers[i+1];
int max = (i + 1 == cellNumbers.Count) ? _cellCount : cellNumbers[i + 1];
Programs.Add(new Program(Cells.Where((c, idx) => idx >= cellNumbers[i] && idx < max).ToList()));
}
}

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace DvdLib.Ifo
@@ -20,7 +17,7 @@ namespace DvdLib.Ifo
public ProgramChain EntryProgramChain { get; private set; }
public readonly List<ProgramChain> ProgramChains;
public readonly List<Chapter> Chapters;
public readonly List<Chapter> Chapters;
public Title(uint titleNum)
{
@@ -53,7 +50,7 @@ namespace DvdLib.Ifo
long curPos = br.BaseStream.Position;
br.BaseStream.Seek(startByte, SeekOrigin.Begin);
ProgramChain pgc = new ProgramChain(pgcNum);
var pgc = new ProgramChain(pgcNum);
pgc.ParseHeader(br);
ProgramChains.Add(pgc);
if (entryPgc) EntryProgramChain = pgc;

View File

@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
namespace DvdLib.Ifo
{

View File

@@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DvdLib.Ifo
{
public enum VideoCodec

View File

@@ -1,29 +1,21 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Resources;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DvdLib")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DvdLib")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyCompany("Jellyfin Project")]
[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
[assembly: AssemblyCopyright("Copyright © 2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.1")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

View File

@@ -1,14 +1,14 @@
using MediaBrowser.Controller.Dlna;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using MediaBrowser.Model.Services;
using MediaBrowser.Common.Extensions;
using System.Text;
using MediaBrowser.Controller.Net;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emby.Dlna.Main;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Services;
namespace Emby.Dlna.Api
{
@@ -115,29 +115,11 @@ namespace Emby.Dlna.Api
public IRequest Request { get; set; }
private IHttpResultFactory _resultFactory;
private IContentDirectory ContentDirectory
{
get
{
return DlnaEntryPoint.Current.ContentDirectory;
}
}
private IContentDirectory ContentDirectory => DlnaEntryPoint.Current.ContentDirectory;
private IConnectionManager ConnectionManager
{
get
{
return DlnaEntryPoint.Current.ConnectionManager;
}
}
private IConnectionManager ConnectionManager => DlnaEntryPoint.Current.ConnectionManager;
private IMediaReceiverRegistrar MediaReceiverRegistrar
{
get
{
return DlnaEntryPoint.Current.MediaReceiverRegistrar;
}
}
private IMediaReceiverRegistrar MediaReceiverRegistrar => DlnaEntryPoint.Current.MediaReceiverRegistrar;
public DlnaServerService(IDlnaManager dlnaManager, IHttpResultFactory httpResultFactory)
{
@@ -227,7 +209,7 @@ namespace Emby.Dlna.Api
// TODO: Work out what this is doing.
if (string.Equals(first, "mediabrowser", StringComparison.OrdinalIgnoreCase) ||
string.Equals(first, "emby", StringComparison.OrdinalIgnoreCase) ||
string.Equals(first, "jellyfin", StringComparison.OrdinalIgnoreCase ))
string.Equals(first, "jellyfin", StringComparison.OrdinalIgnoreCase))
{
index++;
}
@@ -259,7 +241,7 @@ namespace Emby.Dlna.Api
var cacheLength = TimeSpan.FromDays(365);
var cacheKey = Request.RawUrl.GetMD5();
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, contentType, () => Task.FromResult<Stream>(_dlnaManager.GetIcon(request.Filename).Stream));
return _resultFactory.GetStaticResult(Request, cacheKey, null, cacheLength, contentType, () => Task.FromResult(_dlnaManager.GetIcon(request.Filename).Stream));
}
public object Subscribe(ProcessContentDirectoryEventRequest request)

View File

@@ -1,4 +1,4 @@
using System.Linq;
using System.Linq;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Dlna;
@@ -80,4 +80,4 @@ namespace Emby.Dlna.Api
_dlnaManager.CreateProfile(request);
}
}
}
}

View File

@@ -1,12 +1,12 @@

namespace Emby.Dlna.Common
{
{
public class Argument
{
public string Name { get; set; }
public string Name { get; set; }
public string Direction { get; set; }
public string Direction { get; set; }
public string RelatedStateVariable { get; set; }
public string RelatedStateVariable { get; set; }
}
}

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna.Common
{
public class DeviceIcon

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna.Common
{
public class DeviceService

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
namespace Emby.Dlna.Common
{

View File

@@ -1,4 +1,3 @@
using System.Collections.Generic;
using System;
namespace Emby.Dlna.Common

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna.Configuration
{
public class DlnaOptions

View File

@@ -1,6 +1,6 @@
using MediaBrowser.Common.Configuration;
using Emby.Dlna.Configuration;
using System.Collections.Generic;
using Emby.Dlna.Configuration;
using MediaBrowser.Common.Configuration;
namespace Emby.Dlna
{

View File

@@ -1,8 +1,8 @@
using MediaBrowser.Common.Net;
using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using Emby.Dlna.Service;
using System.Collections.Generic;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;

View File

@@ -1,6 +1,6 @@
using Emby.Dlna.Common;
using Emby.Dlna.Service;
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;
namespace Emby.Dlna.ConnectionManager
{
@@ -11,7 +11,7 @@ namespace Emby.Dlna.ConnectionManager
return new ServiceXmlBuilder().GetXml(new ServiceActionListBuilder().GetActions(), GetStateVariables());
}
private IEnumerable<StateVariable> GetStateVariables()
private static IEnumerable<StateVariable> GetStateVariables()
{
var list = new List<StateVariable>();

View File

@@ -1,12 +1,11 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using Emby.Dlna.Server;
using Emby.Dlna.Service;
using MediaBrowser.Model.Dlna;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.ConnectionManager
{

View File

@@ -1,5 +1,5 @@
using Emby.Dlna.Common;
using System.Collections.Generic;
using Emby.Dlna.Common;
namespace Emby.Dlna.ConnectionManager
{
@@ -19,7 +19,7 @@ namespace Emby.Dlna.ConnectionManager
return list;
}
private ServiceAction PrepareForConnection()
private static ServiceAction PrepareForConnection()
{
var action = new ServiceAction
{
@@ -77,8 +77,8 @@ namespace Emby.Dlna.ConnectionManager
return action;
}
private ServiceAction GetCurrentConnectionInfo()
private static ServiceAction GetCurrentConnectionInfo()
{
var action = new ServiceAction
{

View File

@@ -1,18 +1,18 @@
using MediaBrowser.Common.Net;
using System;
using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using Emby.Dlna.Service;
using MediaBrowser.Model.Dlna;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.ContentDirectory
{

View File

@@ -1,6 +1,6 @@
using Emby.Dlna.Common;
using Emby.Dlna.Service;
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;
namespace Emby.Dlna.ContentDirectory
{
@@ -8,11 +8,11 @@ namespace Emby.Dlna.ContentDirectory
{
public string GetXml()
{
return new ServiceXmlBuilder().GetXml(new ServiceActionListBuilder().GetActions(),
return new ServiceXmlBuilder().GetXml(new ServiceActionListBuilder().GetActions(),
GetStateVariables());
}
private IEnumerable<StateVariable> GetStateVariables()
private static IEnumerable<StateVariable> GetStateVariables()
{
var list = new List<StateVariable>();

View File

@@ -1,19 +1,3 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using Emby.Dlna.Didl;
using Emby.Dlna.Server;
using Emby.Dlna.Service;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Entities;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Querying;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -21,17 +5,28 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using Emby.Dlna.Didl;
using Emby.Dlna.Service;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Xml;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Controller.LiveTv;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.ContentDirectory
{
@@ -197,9 +192,7 @@ namespace Emby.Dlna.ContentDirectory
public string GetValueOrDefault(IDictionary<string, string> sparams, string key, string defaultValue)
{
string val;
if (sparams.TryGetValue(key, out val))
if (sparams.TryGetValue(key, out string val))
{
return val;
}
@@ -221,14 +214,12 @@ namespace Emby.Dlna.ContentDirectory
int? requestedCount = null;
int? start = 0;
int requestedVal;
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0)
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out var requestedVal) && requestedVal > 0)
{
requestedCount = requestedVal;
}
int startVal;
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0)
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out var startVal) && startVal > 0)
{
start = startVal;
}
@@ -247,7 +238,7 @@ namespace Emby.Dlna.ContentDirectory
var dlnaOptions = _config.GetDlnaConfiguration();
using (XmlWriter writer = XmlWriter.Create(builder, settings))
using (var writer = XmlWriter.Create(builder, settings))
{
//writer.WriteStartDocument();
@@ -311,7 +302,7 @@ namespace Emby.Dlna.ContentDirectory
var resXML = builder.ToString();
return new []
return new[]
{
new KeyValuePair<string,string>("Result", resXML),
new KeyValuePair<string,string>("NumberReturned", provided.ToString(_usCulture)),
@@ -339,14 +330,12 @@ namespace Emby.Dlna.ContentDirectory
int? requestedCount = null;
int? start = 0;
int requestedVal;
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0)
if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out var requestedVal) && requestedVal > 0)
{
requestedCount = requestedVal;
}
int startVal;
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0)
if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out var startVal) && startVal > 0)
{
start = startVal;
}
@@ -363,7 +352,7 @@ namespace Emby.Dlna.ContentDirectory
int totalCount = 0;
int provided = 0;
using (XmlWriter writer = XmlWriter.Create(builder, settings))
using (var writer = XmlWriter.Create(builder, settings))
{
//writer.WriteStartDocument();
@@ -1144,7 +1133,7 @@ namespace Emby.Dlna.ContentDirectory
StartIndex = query.StartIndex,
UserId = query.User.Id
}, new [] { parent }, query.DtoOptions);
}, new[] { parent }, query.DtoOptions);
return ToResult(result);
}
@@ -1298,7 +1287,6 @@ namespace Emby.Dlna.ContentDirectory
private ServerItem ParseItemId(string id, User user)
{
Guid itemId;
StubType? stubType = null;
// After using PlayTo, MediaMonkey sends a request to the server trying to get item info
@@ -1324,7 +1312,7 @@ namespace Emby.Dlna.ContentDirectory
}
}
if (Guid.TryParse(id, out itemId))
if (Guid.TryParse(id, out var itemId))
{
var item = _libraryManager.GetItemById(itemId);

View File

@@ -1,5 +1,5 @@
using Emby.Dlna.Common;
using System.Collections.Generic;
using Emby.Dlna.Common;
namespace Emby.Dlna.ContentDirectory
{
@@ -7,7 +7,7 @@ namespace Emby.Dlna.ContentDirectory
{
public IEnumerable<ServiceAction> GetActions()
{
return new []
return new[]
{
GetSearchCapabilitiesAction(),
GetSortCapabilitiesAction(),
@@ -20,7 +20,7 @@ namespace Emby.Dlna.ContentDirectory
};
}
private ServiceAction GetGetSystemUpdateIDAction()
private static ServiceAction GetGetSystemUpdateIDAction()
{
var action = new ServiceAction
{
@@ -37,7 +37,7 @@ namespace Emby.Dlna.ContentDirectory
return action;
}
private ServiceAction GetSearchCapabilitiesAction()
private static ServiceAction GetSearchCapabilitiesAction()
{
var action = new ServiceAction
{
@@ -54,7 +54,7 @@ namespace Emby.Dlna.ContentDirectory
return action;
}
private ServiceAction GetSortCapabilitiesAction()
private static ServiceAction GetSortCapabilitiesAction()
{
var action = new ServiceAction
{
@@ -71,7 +71,7 @@ namespace Emby.Dlna.ContentDirectory
return action;
}
private ServiceAction GetX_GetFeatureListAction()
private static ServiceAction GetX_GetFeatureListAction()
{
var action = new ServiceAction
{
@@ -88,7 +88,7 @@ namespace Emby.Dlna.ContentDirectory
return action;
}
private ServiceAction GetSearchAction()
private static ServiceAction GetSearchAction()
{
var action = new ServiceAction
{
@@ -334,7 +334,7 @@ namespace Emby.Dlna.ContentDirectory
return action;
}
private ServiceAction GetXSetBookmarkAction()
{
var action = new ServiceAction

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.IO;
namespace Emby.Dlna

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
namespace Emby.Dlna
{
@@ -15,4 +15,4 @@ namespace Emby.Dlna
Headers = new Dictionary<string, string>();
}
}
}
}

View File

@@ -1,4 +1,11 @@
using MediaBrowser.Model.Extensions;
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using Emby.Dlna.Configuration;
using Emby.Dlna.ContentDirectory;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
@@ -6,23 +13,15 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Playlists;
using Emby.Dlna.ContentDirectory;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using MediaBrowser.Controller.MediaEncoding;
using Emby.Dlna.Configuration;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Net;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.Didl
{
@@ -79,7 +78,7 @@ namespace Emby.Dlna.Didl
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
{
using (XmlWriter writer = XmlWriter.Create(builder, settings))
using (var writer = XmlWriter.Create(builder, settings))
{
//writer.WriteStartDocument();
@@ -375,7 +374,7 @@ namespace Emby.Dlna.Didl
? GetMimeType(filename)
: mediaProfile.MimeType;
writer.WriteAttributeString("protocolInfo", String.Format(
writer.WriteAttributeString("protocolInfo", string.Format(
"http-get:*:{0}:{1}",
mimeType,
contentFeatures
@@ -573,7 +572,7 @@ namespace Emby.Dlna.Didl
streamInfo.RunTimeTicks ?? 0,
streamInfo.TranscodeSeekInfo);
writer.WriteAttributeString("protocolInfo", String.Format(
writer.WriteAttributeString("protocolInfo", string.Format(
"http-get:*:{0}:{1}",
mimeType,
contentFeatures
@@ -1017,7 +1016,7 @@ namespace Emby.Dlna.Didl
var contentFeatures = new ContentFeatureBuilder(_profile)
.BuildImageHeader(format, width, height, imageInfo.IsDirectStream, org_Pn);
writer.WriteAttributeString("protocolInfo", String.Format(
writer.WriteAttributeString("protocolInfo", string.Format(
"http-get:*:{0}:{1}",
GetMimeType("file." + format),
contentFeatures

View File

@@ -1,6 +1,5 @@
using MediaBrowser.Model.Extensions;
using System;
using System.Collections.Generic;
using MediaBrowser.Model.Extensions;
namespace Emby.Dlna.Didl
{

View File

@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace Emby.Dlna.Didl
{
@@ -53,9 +51,6 @@ namespace Emby.Dlna.Didl
_encoding = encoding;
}
public override Encoding Encoding
{
get { return (null == _encoding) ? base.Encoding : _encoding; }
}
public override Encoding Encoding => (null == _encoding) ? base.Encoding : _encoding;
}
}

View File

@@ -1,24 +1,22 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Plugins;
using Emby.Dlna.Profiles;
using Emby.Dlna.Server;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Drawing;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Emby.Dlna.Profiles;
using Emby.Dlna.Server;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Reflection;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Serialization;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna
{
@@ -34,16 +32,17 @@ namespace Emby.Dlna
private readonly Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>> _profiles = new Dictionary<string, Tuple<InternalProfileInfo, DeviceProfile>>(StringComparer.Ordinal);
public DlnaManager(IXmlSerializer xmlSerializer,
public DlnaManager(
IXmlSerializer xmlSerializer,
IFileSystem fileSystem,
IApplicationPaths appPaths,
ILogger logger,
ILoggerFactory loggerFactory,
IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IAssemblyInfo assemblyInfo)
{
_xmlSerializer = xmlSerializer;
_fileSystem = fileSystem;
_appPaths = appPaths;
_logger = logger;
_logger = loggerFactory.CreateLogger("Dlna");
_jsonSerializer = jsonSerializer;
_appHost = appHost;
_assemblyInfo = assemblyInfo;
@@ -95,7 +94,7 @@ namespace Emby.Dlna
{
if (deviceInfo == null)
{
throw new ArgumentNullException("deviceInfo");
throw new ArgumentNullException(nameof(deviceInfo));
}
var profile = GetProfiles()
@@ -207,7 +206,7 @@ namespace Emby.Dlna
{
if (headers == null)
{
throw new ArgumentNullException("headers");
throw new ArgumentNullException(nameof(headers));
}
// Convert to case insensitive
@@ -241,9 +240,7 @@ namespace Emby.Dlna
return false;
}
string value;
if (headers.TryGetValue(header.Name, out value))
if (headers.TryGetValue(header.Name, out string value))
{
switch (header.Match)
{
@@ -263,21 +260,9 @@ namespace Emby.Dlna
return false;
}
private string UserProfilesPath
{
get
{
return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "user");
}
}
private string UserProfilesPath => Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "user");
private string SystemProfilesPath
{
get
{
return Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "system");
}
}
private string SystemProfilesPath => Path.Combine(_appPaths.ConfigurationDirectoryPath, "dlna", "system");
private IEnumerable<DeviceProfile> GetProfiles(string path, DeviceProfileType type)
{
@@ -302,8 +287,7 @@ namespace Emby.Dlna
{
lock (_profiles)
{
Tuple<InternalProfileInfo, DeviceProfile> profileTuple;
if (_profiles.TryGetValue(path, out profileTuple))
if (_profiles.TryGetValue(path, out Tuple<InternalProfileInfo, DeviceProfile> profileTuple))
{
return profileTuple.Item2;
}
@@ -335,7 +319,7 @@ namespace Emby.Dlna
{
if (string.IsNullOrEmpty(id))
{
throw new ArgumentNullException("id");
throw new ArgumentNullException(nameof(id));
}
var info = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, id, StringComparison.OrdinalIgnoreCase));

View File

@@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Compile Include="..\SharedVersion.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
namespace Emby.Dlna
{

View File

@@ -1,7 +1,3 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Dlna;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -9,6 +5,9 @@ using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.Eventing
{
@@ -83,9 +82,7 @@ namespace Emby.Dlna.Eventing
// Starts with SECOND-
header = header.Split('-').Last();
int val;
if (int.TryParse(header, NumberStyles.Integer, _usCulture, out val))
if (int.TryParse(header, NumberStyles.Integer, _usCulture, out var val))
{
return val;
}
@@ -98,8 +95,7 @@ namespace Emby.Dlna.Eventing
{
_logger.LogDebug("Cancelling event subscription {0}", subscriptionId);
EventSubscription sub;
_subscriptions.TryRemove(subscriptionId, out sub);
_subscriptions.TryRemove(subscriptionId, out EventSubscription sub);
return new EventSubscriptionResponse
{
@@ -130,9 +126,7 @@ namespace Emby.Dlna.Eventing
private EventSubscription GetSubscription(string id, bool throwOnMissing)
{
EventSubscription e;
if (!_subscriptions.TryGetValue(id, out e) && throwOnMissing)
if (!_subscriptions.TryGetValue(id, out EventSubscription e) && throwOnMissing)
{
throw new ResourceNotFoundException("Event with Id " + id + " not found.");
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace Emby.Dlna.Eventing
{
@@ -23,12 +23,6 @@ namespace Emby.Dlna.Eventing
TriggerCount++;
}
public bool IsExpired
{
get
{
return SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
}
}
public bool IsExpired => SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
}
}

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna
{
public interface IConnectionManager : IEventManager, IUpnpService

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna
{
public interface IContentDirectory : IEventManager, IUpnpService

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna
{
public interface IEventManager

View File

@@ -1,4 +1,4 @@

namespace Emby.Dlna
{
public interface IMediaReceiverRegistrar : IEventManager, IUpnpService

View File

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
namespace Emby.Dlna
{
@@ -10,7 +10,7 @@ namespace Emby.Dlna
/// <param name="headers">The headers.</param>
/// <returns>System.String.</returns>
string GetServiceXml(IDictionary<string, string> headers);
/// <summary>
/// Processes the control request.
/// </summary>

View File

@@ -1,4 +1,10 @@
using MediaBrowser.Common.Configuration;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Emby.Dlna.PlayTo;
using Emby.Dlna.Ssdp;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
@@ -6,25 +12,19 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.TV;
using Emby.Dlna.PlayTo;
using Emby.Dlna.Ssdp;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Threading.Tasks;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Threading;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;
using Rssdp;
using Rssdp.Infrastructure;
using System.Threading;
namespace Emby.Dlna.Main
{
@@ -75,11 +75,11 @@ namespace Emby.Dlna.Main
IUserDataManager userDataManager,
ILocalizationManager localizationManager,
IMediaSourceManager mediaSourceManager,
IDeviceDiscovery deviceDiscovery,
IMediaEncoder mediaEncoder,
ISocketFactory socketFactory,
ITimerFactory timerFactory,
IEnvironmentInfo environmentInfo,
IDeviceDiscovery deviceDiscovery,
IMediaEncoder mediaEncoder,
ISocketFactory socketFactory,
ITimerFactory timerFactory,
IEnvironmentInfo environmentInfo,
INetworkManager networkManager,
IUserViewManager userViewManager,
IXmlReaderSettingsFactory xmlReaderSettingsFactory,
@@ -104,19 +104,19 @@ namespace Emby.Dlna.Main
_networkManager = networkManager;
_logger = loggerFactory.CreateLogger("Dlna");
ContentDirectory = new ContentDirectory.ContentDirectory(dlnaManager,
userDataManager,
imageProcessor,
libraryManager,
config,
userManager,
_logger,
httpClient,
localizationManager,
mediaSourceManager,
ContentDirectory = new ContentDirectory.ContentDirectory(dlnaManager,
userDataManager,
imageProcessor,
libraryManager,
config,
userManager,
_logger,
httpClient,
localizationManager,
mediaSourceManager,
userViewManager,
mediaEncoder,
xmlReaderSettingsFactory,
mediaEncoder,
xmlReaderSettingsFactory,
tvSeriesManager);
ConnectionManager = new ConnectionManager.ConnectionManager(dlnaManager, config, _logger, httpClient, xmlReaderSettingsFactory);
@@ -271,18 +271,18 @@ namespace Emby.Dlna.Main
var device = new SsdpRootDevice
{
CacheLifetime = TimeSpan.FromSeconds(1800), //How long SSDP clients can cache this info.
Location = uri, // Must point to the URL that serves your devices UPnP description document.
Location = uri, // Must point to the URL that serves your devices UPnP description document.
FriendlyName = "Jellyfin",
Manufacturer = "Jellyfin",
ModelName = "Jellyfin Server",
Uuid = udn
// This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
// This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
};
SetProperies(device, fullService);
_Publisher.AddDevice(device);
var embeddedDevices = new []
var embeddedDevices = new[]
{
"urn:schemas-upnp-org:service:ContentDirectory:1",
"urn:schemas-upnp-org:service:ConnectionManager:1",
@@ -297,7 +297,7 @@ namespace Emby.Dlna.Main
Manufacturer = device.Manufacturer,
ModelName = device.ModelName,
Uuid = udn
// This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
// This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
};
SetProperies(embeddedDevice, subDevice);
@@ -308,8 +308,7 @@ namespace Emby.Dlna.Main
private string CreateUuid(string text)
{
Guid guid;
if (!Guid.TryParse(text, out guid))
if (!Guid.TryParse(text, out var guid))
{
guid = text.GetMD5();
}

View File

@@ -1,11 +1,10 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using Emby.Dlna.Server;
using Emby.Dlna.Service;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.MediaReceiverRegistrar
{
@@ -21,7 +20,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private IEnumerable<KeyValuePair<string, string>> HandleIsAuthorized()
private static IEnumerable<KeyValuePair<string, string>> HandleIsAuthorized()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
@@ -29,7 +28,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
};
}
private IEnumerable<KeyValuePair<string, string>> HandleIsValidated()
private static IEnumerable<KeyValuePair<string, string>> HandleIsValidated()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{

View File

@@ -1,11 +1,9 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using Emby.Dlna.Service;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Xml;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.MediaReceiverRegistrar
{

View File

@@ -1,6 +1,6 @@
using Emby.Dlna.Common;
using Emby.Dlna.Service;
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;
namespace Emby.Dlna.MediaReceiverRegistrar
{
@@ -12,7 +12,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
GetStateVariables());
}
private IEnumerable<StateVariable> GetStateVariables()
private static IEnumerable<StateVariable> GetStateVariables()
{
var list = new List<StateVariable>();

View File

@@ -1,5 +1,5 @@
using Emby.Dlna.Common;
using System.Collections.Generic;
using Emby.Dlna.Common;
namespace Emby.Dlna.MediaReceiverRegistrar
{
@@ -7,7 +7,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
{
public IEnumerable<ServiceAction> GetActions()
{
return new []
return new[]
{
GetIsValidated(),
GetIsAuthorized(),
@@ -19,7 +19,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
};
}
private ServiceAction GetIsValidated()
private static ServiceAction GetIsValidated()
{
var action = new ServiceAction
{
@@ -41,7 +41,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
return action;
}
private ServiceAction GetIsAuthorized()
private static ServiceAction GetIsAuthorized()
{
var action = new ServiceAction
{
@@ -63,7 +63,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
return action;
}
private ServiceAction GetRegisterDevice()
private static ServiceAction GetRegisterDevice()
{
var action = new ServiceAction
{
@@ -85,7 +85,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
return action;
}
private ServiceAction GetGetValidationSucceededUpdateID()
private static ServiceAction GetGetValidationSucceededUpdateID()
{
var action = new ServiceAction
{

View File

@@ -1,9 +1,9 @@
using System;
using System;
namespace Emby.Dlna.PlayTo
{
public class CurrentIdEventArgs : EventArgs
{
public string Id { get; set; }
public string Id { get; set; }
}
}

View File

@@ -1,21 +1,17 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using Emby.Dlna.Common;
using Emby.Dlna.Ssdp;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Security;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using Emby.Dlna.Common;
using Emby.Dlna.Server;
using Emby.Dlna.Ssdp;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Threading;
using MediaBrowser.Model.Extensions;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.PlayTo
{
@@ -39,10 +35,7 @@ namespace Emby.Dlna.PlayTo
RefreshVolumeIfNeeded();
return _volume;
}
set
{
_volume = value;
}
set => _volume = value;
}
public TimeSpan? Duration { get; set; }
@@ -50,41 +43,17 @@ namespace Emby.Dlna.PlayTo
private TimeSpan _position = TimeSpan.FromSeconds(0);
public TimeSpan Position
{
get
{
return _position;
}
set
{
_position = value;
}
get => _position;
set => _position = value;
}
public TRANSPORTSTATE TransportState { get; private set; }
public bool IsPlaying
{
get
{
return TransportState == TRANSPORTSTATE.PLAYING;
}
}
public bool IsPlaying => TransportState == TRANSPORTSTATE.PLAYING;
public bool IsPaused
{
get
{
return TransportState == TRANSPORTSTATE.PAUSED || TransportState == TRANSPORTSTATE.PAUSED_PLAYBACK;
}
}
public bool IsPaused => TransportState == TRANSPORTSTATE.PAUSED || TransportState == TRANSPORTSTATE.PAUSED_PLAYBACK;
public bool IsStopped
{
get
{
return TransportState == TRANSPORTSTATE.STOPPED;
}
}
public bool IsStopped => TransportState == TRANSPORTSTATE.STOPPED;
#endregion
@@ -311,7 +280,7 @@ namespace Emby.Dlna.PlayTo
throw new InvalidOperationException("Unable to find service");
}
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, String.Format("{0:hh}:{0:mm}:{0:ss}", value), "REL_TIME"))
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, string.Format("{0:hh}:{0:mm}:{0:ss}", value), "REL_TIME"))
.ConfigureAwait(false);
RestartTimer(true);
@@ -364,7 +333,7 @@ namespace Emby.Dlna.PlayTo
private string CreateDidlMeta(string value)
{
if (string.IsNullOrEmpty(value))
return String.Empty;
return string.Empty;
return DescriptionXmlBuilder.Escape(value);
}
@@ -620,9 +589,7 @@ namespace Emby.Dlna.PlayTo
if (transportStateValue != null)
{
TRANSPORTSTATE state;
if (Enum.TryParse(transportStateValue, true, out state))
if (Enum.TryParse(transportStateValue, true, out TRANSPORTSTATE state))
{
return state;
}
@@ -739,7 +706,7 @@ namespace Emby.Dlna.PlayTo
if (track == null)
{
//If track is null, some vendors do this, use GetMediaInfo instead
//If track is null, some vendors do this, use GetMediaInfo instead
return new Tuple<bool, uBaseObject>(true, null);
}
@@ -783,7 +750,7 @@ namespace Emby.Dlna.PlayTo
{
if (container == null)
{
throw new ArgumentNullException("container");
throw new ArgumentNullException(nameof(container));
}
var url = container.GetValue(uPnpNamespaces.Res);
@@ -810,7 +777,7 @@ namespace Emby.Dlna.PlayTo
{
if (container == null)
{
throw new ArgumentNullException("container");
throw new ArgumentNullException(nameof(container));
}
var resElement = container.Element(uPnpNamespaces.Res);
@@ -979,7 +946,7 @@ namespace Emby.Dlna.PlayTo
if (modelDescription != null)
deviceProperties.ModelDescription = modelDescription.Value;
deviceProperties.BaseUrl = String.Format("http://{0}:{1}", url.Host, url.Port);
deviceProperties.BaseUrl = string.Format("http://{0}:{1}", url.Host, url.Port);
var icon = document.Descendants(uPnpNamespaces.ud.GetName("icon")).FirstOrDefault();
@@ -1021,7 +988,7 @@ namespace Emby.Dlna.PlayTo
{
if (element == null)
{
throw new ArgumentNullException("element");
throw new ArgumentNullException(nameof(element));
}
var mimeType = element.GetDescendantValue(uPnpNamespaces.ud.GetName("mimetype"));
@@ -1173,7 +1140,7 @@ namespace Emby.Dlna.PlayTo
public override string ToString()
{
return String.Format("{0} - {1}", Properties.Name, Properties.BaseUrl);
return string.Format("{0} - {1}", Properties.Name, Properties.BaseUrl);
}
}
}

View File

@@ -1,6 +1,6 @@
using Emby.Dlna.Common;
using MediaBrowser.Model.Dlna;
using System.Collections.Generic;
using Emby.Dlna.Common;
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.PlayTo
{
@@ -34,26 +34,14 @@ namespace Emby.Dlna.PlayTo
private string _baseUrl = string.Empty;
public string BaseUrl
{
get
{
return _baseUrl;
}
set
{
_baseUrl = value;
}
get => _baseUrl;
set => _baseUrl = value;
}
public DeviceIcon Icon { get; set; }
private readonly List<DeviceService> _services = new List<DeviceService>();
public List<DeviceService> Services
{
get
{
return _services;
}
}
public List<DeviceService> Services => _services;
public DeviceIdentification ToDeviceIdentification()
{

View File

@@ -1,28 +1,25 @@
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using Emby.Dlna.Didl;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Session;
using MediaBrowser.Model.System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Emby.Dlna.Didl;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Extensions;
using System.Net.Http;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Session;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.PlayTo
{
@@ -47,18 +44,9 @@ namespace Emby.Dlna.PlayTo
private readonly string _accessToken;
private readonly DateTime _creationTime;
public bool IsSessionActive
{
get
{
return !_disposed && _device != null;
}
}
public bool IsSessionActive => !_disposed && _device != null;
public bool SupportsMediaControl
{
get { return IsSessionActive; }
}
public bool SupportsMediaControl => IsSessionActive;
public PlayToController(SessionInfo session, ISessionManager sessionManager, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, IDeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager, IConfigurationManager config, IMediaEncoder mediaEncoder)
{
@@ -110,14 +98,11 @@ namespace Emby.Dlna.PlayTo
{
var info = e.Argument;
string nts;
info.Headers.TryGetValue("NTS", out nts);
info.Headers.TryGetValue("NTS", out string nts);
string usn;
if (!info.Headers.TryGetValue("USN", out usn)) usn = String.Empty;
if (!info.Headers.TryGetValue("USN", out string usn)) usn = string.Empty;
string nt;
if (!info.Headers.TryGetValue("NT", out nt)) nt = String.Empty;
if (!info.Headers.TryGetValue("NT", out string nt)) nt = string.Empty;
if (usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 &&
!_disposed)
@@ -439,13 +424,7 @@ namespace Emby.Dlna.PlayTo
private int _currentPlaylistIndex;
private readonly List<PlaylistItem> _playlist = new List<PlaylistItem>();
private List<PlaylistItem> Playlist
{
get
{
return _playlist;
}
}
private List<PlaylistItem> Playlist => _playlist;
private void AddItemFromId(Guid id, List<BaseItem> list)
{
@@ -641,9 +620,7 @@ namespace Emby.Dlna.PlayTo
private Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)
{
GeneralCommandType commandType;
if (Enum.TryParse(command.Name, true, out commandType))
if (Enum.TryParse(command.Name, true, out GeneralCommandType commandType))
{
switch (commandType)
{
@@ -659,13 +636,9 @@ namespace Emby.Dlna.PlayTo
return _device.ToggleMute(cancellationToken);
case GeneralCommandType.SetAudioStreamIndex:
{
string arg;
if (command.Arguments.TryGetValue("Index", out arg))
if (command.Arguments.TryGetValue("Index", out string arg))
{
int val;
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out val))
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var val))
{
return SetAudioStreamIndex(val);
}
@@ -677,13 +650,9 @@ namespace Emby.Dlna.PlayTo
}
case GeneralCommandType.SetSubtitleStreamIndex:
{
string arg;
if (command.Arguments.TryGetValue("Index", out arg))
if (command.Arguments.TryGetValue("Index", out string arg))
{
int val;
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out val))
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var val))
{
return SetSubtitleStreamIndex(val);
}
@@ -695,13 +664,9 @@ namespace Emby.Dlna.PlayTo
}
case GeneralCommandType.SetVolume:
{
string arg;
if (command.Arguments.TryGetValue("Volume", out arg))
if (command.Arguments.TryGetValue("Volume", out string arg))
{
int volume;
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out volume))
if (int.TryParse(arg, NumberStyles.Integer, _usCulture, out var volume))
{
return _device.SetVolume(volume, cancellationToken);
}
@@ -829,7 +794,7 @@ namespace Emby.Dlna.PlayTo
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
throw new ArgumentNullException(nameof(url));
}
var parts = url.Split('/');
@@ -855,7 +820,7 @@ namespace Emby.Dlna.PlayTo
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
throw new ArgumentNullException(nameof(url));
}
var request = new StreamParams
@@ -896,8 +861,7 @@ namespace Emby.Dlna.PlayTo
{
var value = values.Get(name);
int result;
if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
{
return result;
}
@@ -909,8 +873,7 @@ namespace Emby.Dlna.PlayTo
{
var value = values.Get(name);
long result;
if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result))
{
return result;
}

View File

@@ -1,26 +1,23 @@
using MediaBrowser.Common.Net;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Session;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Session;
using MediaBrowser.Model.Threading;
using System.Threading;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Devices;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.PlayTo
{
@@ -81,11 +78,9 @@ namespace Emby.Dlna.PlayTo
var info = e.Argument;
string usn;
if (!info.Headers.TryGetValue("USN", out usn)) usn = string.Empty;
if (!info.Headers.TryGetValue("USN", out string usn)) usn = string.Empty;
string nt;
if (!info.Headers.TryGetValue("NT", out nt)) nt = string.Empty;
if (!info.Headers.TryGetValue("NT", out string nt)) nt = string.Empty;
string location = info.Location.ToString();
@@ -158,8 +153,7 @@ namespace Emby.Dlna.PlayTo
_logger.LogDebug("Attempting to create PlayToController from location {0}", location);
_logger.LogDebug("Logging session activity from location {0}", location);
string uuid;
if (info.Headers.TryGetValue("USN", out uuid))
if (info.Headers.TryGetValue("USN", out string uuid))
{
uuid = GetUuid(uuid);
}
@@ -170,7 +164,7 @@ namespace Emby.Dlna.PlayTo
string deviceName = null;
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersion.ToString(), uuid, deviceName, uri.OriginalString, null);
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersion, uuid, deviceName, uri.OriginalString, null);
var controller = sessionInfo.SessionControllers.OfType<PlayToController>().FirstOrDefault();

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace Emby.Dlna.PlayTo
{
@@ -6,4 +6,4 @@ namespace Emby.Dlna.PlayTo
{
public uBaseObject MediaInfo { get; set; }
}
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace Emby.Dlna.PlayTo
{

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace Emby.Dlna.PlayTo
{
@@ -12,4 +12,4 @@ namespace Emby.Dlna.PlayTo
public uBaseObject OldMediaInfo { get; set; }
public uBaseObject NewMediaInfo { get; set; }
}
}
}

View File

@@ -1,4 +1,4 @@
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.PlayTo
{
@@ -12,4 +12,4 @@ namespace Emby.Dlna.PlayTo
public DeviceProfile Profile { get; set; }
}
}
}

View File

@@ -1,10 +1,9 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Session;
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Session;
namespace Emby.Dlna.PlayTo
{
@@ -49,7 +48,7 @@ namespace Emby.Dlna.PlayTo
return playlistItem;
}
private bool IsSupported(DirectPlayProfile profile, Photo item)
private static bool IsSupported(DirectPlayProfile profile, Photo item)
{
var mediaPath = item.Path;

View File

@@ -1,13 +1,13 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using Emby.Dlna.Common;
using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Threading;
using Emby.Dlna.Common;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
namespace Emby.Dlna.PlayTo
{
@@ -25,10 +25,10 @@ namespace Emby.Dlna.PlayTo
_config = config;
}
public async Task<XDocument> SendCommandAsync(string baseUrl,
DeviceService service,
string command,
string postData,
public async Task<XDocument> SendCommandAsync(string baseUrl,
DeviceService service,
string command,
string postData,
bool logRequest = true,
string header = null)
{
@@ -47,7 +47,7 @@ namespace Emby.Dlna.PlayTo
}
}
private string NormalizeServiceUrl(string baseUrl, string serviceUrl)
private static string NormalizeServiceUrl(string baseUrl, string serviceUrl)
{
// If it's already a complete url, don't stick anything onto the front of it
if (serviceUrl.StartsWith("http", StringComparison.OrdinalIgnoreCase))
@@ -62,12 +62,12 @@ namespace Emby.Dlna.PlayTo
}
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
public async Task SubscribeAsync(string url,
string ip,
int port,
string localIp,
int eventport,
public async Task SubscribeAsync(string url,
string ip,
int port,
string localIp,
int eventport,
int timeOut = 3600)
{
var options = new HttpRequestOptions
@@ -121,9 +121,9 @@ namespace Emby.Dlna.PlayTo
}
}
private Task<HttpResponseInfo> PostSoapDataAsync(string url,
string soapAction,
string postData,
private Task<HttpResponseInfo> PostSoapDataAsync(string url,
string soapAction,
string postData,
string header,
bool logRequest,
CancellationToken cancellationToken)

View File

@@ -1,4 +1,4 @@
namespace Emby.Dlna.PlayTo
namespace Emby.Dlna.PlayTo
{
public enum TRANSPORTSTATE
{
@@ -8,4 +8,4 @@
PAUSED_PLAYBACK,
PAUSED
}
}
}

View File

@@ -1,8 +1,8 @@
using System;
using Emby.Dlna.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Emby.Dlna.Common;
using Emby.Dlna.Ssdp;
namespace Emby.Dlna.PlayTo
@@ -12,27 +12,15 @@ namespace Emby.Dlna.PlayTo
private List<StateVariable> _stateVariables = new List<StateVariable>();
public List<StateVariable> StateVariables
{
get
{
return _stateVariables;
}
set
{
_stateVariables = value;
}
get => _stateVariables;
set => _stateVariables = value;
}
private List<ServiceAction> _serviceActions = new List<ServiceAction>();
public List<ServiceAction> ServiceActions
{
get
{
return _serviceActions;
}
set
{
_serviceActions = value;
}
get => _serviceActions;
set => _serviceActions = value;
}
public static TransportCommands Create(XDocument document)
@@ -80,7 +68,7 @@ namespace Emby.Dlna.PlayTo
{
if (container == null)
{
throw new ArgumentNullException("container");
throw new ArgumentNullException(nameof(container));
}
return new Argument
@@ -171,7 +159,7 @@ namespace Emby.Dlna.PlayTo
if (state != null)
{
var sendValue = state.AllowedValues.FirstOrDefault(a => string.Equals(a, commandParameter, StringComparison.OrdinalIgnoreCase)) ??
state.AllowedValues.FirstOrDefault() ??
state.AllowedValues.FirstOrDefault() ??
value;
return string.Format("<{0} xmlns:dt=\"urn:schemas-microsoft-com:datatypes\" dt:dt=\"{1}\">{2}</{0}>", argument.Name, state.DataType ?? "string", sendValue);

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace Emby.Dlna.PlayTo
{

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Xml.Linq;
using Emby.Dlna.Ssdp;
@@ -10,7 +10,7 @@ namespace Emby.Dlna.PlayTo
{
if (container == null)
{
throw new ArgumentNullException("container");
throw new ArgumentNullException(nameof(container));
}
return new uBaseObject

Some files were not shown because too many files have changed in this diff Show More