Compare commits

...

974 Commits

Author SHA1 Message Date
Joshua M. Boniface
aadff77531 Merge pull request #2607 from joshuaboniface/fix-fedora
Correct BuildRequires and NodeJS for Fedora/CentOS

(cherry picked from commit ef4dfd4461)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:06:22 -04:00
dkanada
89fc5aa11a Merge pull request #2582 from Bond-009/subs
Fix subtitles

(cherry picked from commit 6960f0af67)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:05:41 -04:00
dkanada
cb91595a24 Merge pull request #2541 from joshuaboniface/fix-docker-arm
Fix curl for Jellyfin GPG key

(cherry picked from commit bf34105af3)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
2020-03-15 23:05:13 -04:00
Joshua M. Boniface
6233bae7f0 Bump version to 10.5.1 2020-03-15 23:04:07 -04:00
Joshua M. Boniface
623c0b6daa Merge pull request #2536 from dkanada/audiodb
Migrate AudioDB to use plugin interface
2020-03-08 17:06:22 -04:00
Joshua M. Boniface
d8d37671ff Merge pull request #2535 from mark-monteiro/logging-migration
Create Logging Configuration Heirarchy
2020-03-08 15:33:15 -04:00
Mark Monteiro
9e89cbbc3a Store migration names alongside Ids in configuration in order to assist with development/debugging 2020-03-08 17:40:30 +01:00
Mark Monteiro
72bf920291 Use a Guid to uniquely identify migrations instead of a string name
Also use a list instead of an array to store executed migrations in the configuration class
2020-03-08 16:05:31 +01:00
Mark Monteiro
8dbb1c9257 Use logging.json instead of logging.user.json for override settings 2020-03-08 15:46:13 +01:00
Mark Monteiro
2f0b4cc24c Clean up migration logging messages 2020-03-08 15:02:59 +01:00
Mark Monteiro
a0fdceb4bc Throw exception on migration failure to halt application
Also save migration configuration after each migration instead of at the end in case an exception is thrown part way through the list
2020-03-08 15:02:42 +01:00
sharkykh
86190aa7e9 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2020-03-08 09:01:04 -04:00
dkanada
f8b391538d update audiodb config page 2020-03-08 12:19:38 +09:00
dkanada
acf1698d2b include audiodb config page in release 2020-03-08 12:17:49 +09:00
dkanada
26c778eb16 implement option to disable audiodb for now 2020-03-08 12:10:25 +09:00
Tomi
cbd1e92486 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fi/
2020-03-07 22:03:35 -05:00
IDXK
01b51388f5 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2020-03-07 22:03:35 -05:00
Niels van Velzen
b4e81f2f0c Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2020-03-07 22:03:35 -05:00
sharkykh
d38eab50ef Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2020-03-07 22:03:35 -05:00
Leo Verto
796bdd46df Translated using Weblate (German)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/de/
2020-03-07 22:03:35 -05:00
Joshua M. Boniface
ae9948ce04 Merge branch 'master' into logging-migration 2020-03-07 21:19:24 -05:00
Joshua M. Boniface
3d563ca3a3 Merge pull request #2523 from JustAMan/logging-migration
Improve migrations so they are more maintainable
2020-03-07 21:14:14 -05:00
Mark Monteiro
1295f6c79b Documentation and log message cleanup 2020-03-07 20:26:06 +01:00
dkanada
adc3ab1991 Merge pull request #2534 from joshuaboniface/disable-ssl-default
Set EnableHttps disabled by default
2020-03-08 03:03:16 +09:00
Mark Monteiro
7ecb16a46e do not ignore exceptions during migration execution 2020-03-07 18:23:32 +01:00
Joshua M. Boniface
2610bb2cc1 Merge pull request #2532 from MrTimscampi/attachment-baseurl
Add baseURL to attachments API url
2020-03-07 12:21:01 -05:00
Joshua M. Boniface
e0381c8854 Set EnableHttps disabled by default
Prevents issues on first setup when behind a reverse proxy. Also
prevents issues saving the Networking page by default if SSL is not
fully configured.
2020-03-07 11:55:02 -05:00
MrTimscampi
e8c593f413 Add baseURL to attachments 2020-03-07 17:41:36 +01:00
Terrance M
f3db3cacf6 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2020-03-06 21:35:24 -05:00
Marcus Schelin
b373721d29 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sv/
2020-03-06 21:35:24 -05:00
Mark Monteiro
4c2b543b30 Rename IUpdater to IMigrationRoutine 2020-03-06 21:51:50 +01:00
Mark Monteiro
6660006f01 Load user logging config file into application configuration 2020-03-06 19:28:36 +01:00
Mark Monteiro
1a9908d094 Add migration to create "logging.user.json" 2020-03-06 19:11:42 +01:00
Mark Monteiro
f2fdf50b3b Create separate constants for the two logging file names 2020-03-06 19:07:34 +01:00
Vasily
5a0f1fe848 Implement review suggestion 2020-03-06 19:01:07 +03:00
Vasily
098d3538e3 Disable logging.json migration as it is not ready yet 2020-03-06 17:22:22 +03:00
Vasily
d4564d8e29 More logging, mark all migrations as applied if setup wizard is not complete 2020-03-06 13:22:44 +03:00
Anthony Lavado
b99a5843dd Merge pull request #2524 from ferferga/nsis-fixes
Replaces NSIS uninstaller icon so it's more visible
2020-03-05 13:09:38 -05:00
ferferga
e36c4de9f6 Replaces uninstaller icon so it's more visible 2020-03-05 18:53:04 +01:00
Vasily
216e425cc5 Fix comment 2020-03-05 20:52:00 +03:00
Vasily
55b429e5e8 Moved migration routines to their own directory 2020-03-05 20:40:17 +03:00
Vasily
ccafebca68 Extract "migrations" config name to a proper constant 2020-03-05 20:37:49 +03:00
Vasily
ecaa7f8014 Improve migration logic 2020-03-05 20:09:33 +03:00
Vasily
66e11879ef Shuffle migrations in a more manageable structure 2020-03-05 18:21:27 +03:00
Joshua M. Boniface
dcf3dbb250 Merge pull request #2515 from JustAMan/migration-scripts
Implement ability to run migration routines when updating Jellyfin
2020-03-05 10:03:43 -05:00
Vasily
9eef0e8ca0 Implement EnableThrottling migration for pre-10.5.0 to 10.5.0 or newer 2020-03-05 17:41:32 +03:00
Andrew Rabert
ca585f12b3 Fix Docker packages (#2499)
* Fix Vaapi Intel packages

https://github.com/jellyfin/jellyfin/issues/1901#issuecomment-593114951

Still need to compile with the packages to verify it builds properly. Arm builds probably need it too.

* Update Dockerfile

* Update Dockerfile

* Update Dockerfile.arm

* Update Dockerfile.arm

* Update Dockerfile.arm64

* Update Dockerfile.arm

* Update Dockerfile.arm

* Update Dockerfile.arm

* Update Dockerfile.arm64

* Update Dockerfile.arm64

* Update Dockerfile.arm

* Update Dockerfile

* shift from curl to git for web install

removed the necessity of curl, tar and package availability and using the source directly

* Update Dockerfile.arm

* Update Dockerfile.arm64

* Update Dockerfile

* Update Dockerfile

* Update Dockerfile.arm

* Update Dockerfile.arm64

* clean up packages and remove unnecessary ARG

* Update Dockerfile

* Update Dockerfile.arm64

* Update Dockerfile

* Update Dockerfile.arm64

* Update Dockerfile

* Update Dockerfile.arm

* Update Dockerfile.arm64

* Explainations

* Update Dockerfile.arm

* Update Dockerfile.arm64
2020-03-05 09:41:14 -05:00
Vasily
acd67c7152 Add tracking of JF version used to run this config previously 2020-03-05 16:22:15 +03:00
Vasily
e80c9bb8c6 Merge pull request #2513 from Bond-009/alpha
Improve alpha numeric sorting
2020-03-05 15:01:05 +03:00
Bond-009
375cf212dd Update AlphanumComparatorTests.cs 2020-03-05 12:24:12 +01:00
Joshua M. Boniface
434f665e81 Merge pull request #2512 from Artiume/patch-4
Update Fedora build container version
2020-03-04 20:03:02 -05:00
Bond_009
be1d4b32c6 Add speed for alpha numeric sorting 2020-03-05 00:57:24 +01:00
Bond_009
ada3f96668 Add tests for alpha numeric sorting 2020-03-05 00:54:46 +01:00
artiume
7931a7a7d0 update fedora 2020-03-04 17:43:50 -05:00
Joshua M. Boniface
a987b68f7c Merge pull request #2508 from joshuaboniface/contributors-update
Update contributors list
2020-03-03 23:27:11 -05:00
Joshua M. Boniface
3016e78aef Remove dependabotbot 2020-03-03 23:22:29 -05:00
Joshua M. Boniface
0e98d8bbad Update contributors list
Refreshes the contributors list with the data available from all merged
PRs. Includes a huge number of people who had never added themselves
manually. Going forward this is probably not needed anymore as we can
update this fairly easily.
2020-03-03 22:51:16 -05:00
Bond-009
5276c75cde Merge pull request #2500 from mark-monteiro/2498-register-logging-correctly
Register Logging Services Correctly
2020-03-03 21:53:53 +01:00
dkanada
c07e1e4f84 Merge pull request #2476 from JustAMan/playto-sort
Bring back sorting when needed to fix PlayTo
2020-03-04 01:53:26 +09:00
dkanada
2dc1a18203 Merge pull request #2501 from JustAMan/pedal-to-the-metal-from-the-get-go
Default transcoding throttling to false for new installs
2020-03-04 01:37:44 +09:00
Vasily
c1aafd2ba0 Default transcoding throttling to false for new installs 2020-03-03 19:14:31 +03:00
Bond-009
20ac3c36e2 Merge pull request #2483 from xosdy/fix-download-filename
Fix download file with non-ASCII filename
2020-03-03 14:28:48 +01:00
Bond-009
464039043d Merge pull request #2491 from mark-monteiro/2425-fix-playlists
Fix Playlist Deletion
2020-03-03 14:23:43 +01:00
Mark Monteiro
a4bf645ba5 Fix compilation error 2020-03-03 01:10:26 +01:00
Mark Monteiro
9a6c279473 Increase min log level to 'Warning' framework namespaces 2020-03-03 00:36:54 +01:00
Mark Monteiro
c376f4ca51 Register Serilog logging services correctly 2020-03-03 00:35:41 +01:00
dkanada
76e49a1eb7 migrate audiodb to plugin 2020-03-03 02:07:31 +09:00
Ilija Apostolovski
1c1484389a Translated using Weblate (Macedonian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/mk/
2020-03-02 08:05:17 -05:00
Bond-009
1c21248e2e Merge pull request #2474 from JustAMan/simplify-sorting
Simplify AlphanumericComparer, reduce code duplication
2020-03-02 12:28:31 +01:00
Vasily
13d30a0a79 Merge pull request #2436 from dkanada/music
Add config options for MusicBrainz
2020-03-02 12:54:17 +03:00
Vasily
ba8d8cede9 Replace foreach with for - MOAR SPEED 2020-03-02 12:39:34 +03:00
Vasily
9a9f2aa293 Apply suggestions from code review
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-03-02 12:36:44 +03:00
Vasily
376bbb40bd Apply code review suggestion 2020-03-02 12:34:34 +03:00
Mark Monteiro
3ab51712b8 Fix warnings in PlaylistXmlSaver 2020-03-01 18:41:17 +01:00
Mark Monteiro
1204818698 Clean up and document PlaylistResolver 2020-03-01 18:28:19 +01:00
Mark Monteiro
41a26f8ecd Correctly resolve playlists that are stored using a directory path 2020-03-01 18:28:02 +01:00
Mark Monteiro
f00356e9fe Use a constant for the default playlist file name 2020-03-01 18:23:51 +01:00
dkanada
49f6809254 fix build error 2020-03-01 22:48:41 +09:00
Ignatius Bagus
0b0c5984f9 Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/id/
2020-02-29 15:49:17 -05:00
Adam Bokor
03a294a706 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/hu/
2020-02-29 04:10:17 -05:00
dkanada
d86e5c2ab7 add code suggestions 2020-02-29 16:24:07 +09:00
dkanada
630d79fc96 prefix private fields with underscore 2020-02-29 16:22:45 +09:00
Steven Tang
2e856ad9fe Fix download file with non-ASCII filename 2020-02-29 12:11:27 +08:00
Ilija Apostolovski
6261e4e7f6 Translated using Weblate (Macedonian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/mk/
2020-02-28 13:12:32 -05:00
Ilija Apostolovski
77963c7a8c Added translation using Weblate (Macedonian) 2020-02-28 10:12:47 -05:00
Vasily
7f38af3701 Remove custom queue class as it is not needed 2020-02-28 17:27:16 +03:00
Vasily
f81cd037f0 Small speed improvement - no need to convert an array to a list to just iterate over it 2020-02-28 16:19:51 +03:00
Vasily
ae1f975b99 Implement fast sorting 2020-02-27 20:21:34 +03:00
Vasily
0f0b89f344 Trying to be more safe 2020-02-27 20:14:56 +03:00
Vasily
e125db4fe3 Bring back sorting when needed to fix PlayTo
This is partial revert of https://github.com/jellyfin/jellyfin/pull/1011
2020-02-27 20:11:40 +03:00
dkanada
e80444d11b use the custom server for external ids 2020-02-28 01:43:57 +09:00
Vasily
d1670f8180 Apply suggestions from code review
Co-Authored-By: Claus Vium <cvium@users.noreply.github.com>
2020-02-27 16:02:18 +03:00
Vasily
8e20d2e931 Simplify AlphanumericComparer, reduce code duplication 2020-02-27 14:51:34 +03:00
Bond-009
13bf5e94b3 Merge pull request #2472 from Narfinger/tests-fix3
moves shows tests to Theory and InlineData format
2020-02-27 08:52:12 +01:00
Narfinger
107974e3f8 moves shows tests to Theory and InlineData format 2020-02-27 11:35:01 +09:00
sharkykh
9d53fd0e73 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2020-02-26 14:01:46 -05:00
dkanada
fd3ee279de Merge pull request #2448 from Narfinger/tests-fix2
adds names from the episodenumber tests to path tests
2020-02-27 02:05:16 +09:00
sharkykh
6c6b5d7f28 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2020-02-25 18:29:17 -05:00
MOLOKAL
f11678ae4b Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ms/
2020-02-25 07:10:03 -05:00
Vasily
a075fefca9 Merge pull request #2160 from Artiume/master
Force Transcoding LiveTV
2020-02-25 14:40:06 +03:00
dkanada
4ae80a5d56 partially fix issue with music scans 2020-02-24 14:35:30 +09:00
Andreas Olsson
b40ac479a2 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin
Translate-URL: http://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sv/
2020-02-23 23:21:31 -05:00
R0flcopt3r
3e2f09ecf8 Translated using Weblate (Norwegian Nynorsk)
Translation: Jellyfin/Jellyfin
Translate-URL: http://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nn/
2020-02-23 23:21:31 -05:00
Daniel De Jesus
6b634026e6 Translated using Weblate (Spanish (Dominican Republic))
Translation: Jellyfin/Jellyfin
Translate-URL: http://translate.jellyfin.org/projects/jellyfin/jellyfin-core/es_DO/
2020-02-23 23:21:31 -05:00
artiume
697aee5b0c Merge pull request #21 from jellyfin/master
nightly
2020-02-23 10:57:52 -05:00
dkanada
940990708e remove unused assignment 2020-02-24 00:25:27 +09:00
dkanada
19a609a889 update musicbrainz options 2020-02-24 00:24:03 +09:00
dkanada
a34826008f update external ids 2020-02-24 00:22:23 +09:00
dkanada
0a55eb9106 Merge pull request #2444 from Narfinger/tests-fix
converted tests to inlinedata
2020-02-23 21:55:06 +09:00
dkanada
a3bb81553d Merge pull request #2176 from Bond-009/nullable2
Enable nullable reference types for Emby.Photos and Emby.Notifications
2020-02-23 21:52:46 +09:00
dkanada
de40f22a46 Merge pull request #2384 from Bond-009/warn16
Fix some warnings in Emby.Server.Implementations
2020-02-23 21:46:15 +09:00
Narfinger
496bdc65f3 adds names from the episodenumber tests to path tests 2020-02-23 19:45:29 +09:00
Narfinger
fd5f0c54a6 fixes formatting and enabling another test 2020-02-23 18:50:33 +09:00
Narfinger
b306b8b881 add todos and fixes some todo tests 2020-02-23 18:46:10 +09:00
Narfinger
4dabc50f09 fixes last tests and cleanup 2020-02-23 18:31:23 +09:00
Narfinger
c2fe628c79 removed failing tests 2020-02-23 18:19:19 +09:00
dkanada
72c98e41ca Merge pull request #2442 from Bond-009/remux
Switch remux and direct stream
2020-02-23 16:23:12 +09:00
Narfinger
21f11c600a converted tests to inlinedata 2020-02-23 12:12:48 +09:00
dkanada
6e239c52c5 Merge pull request #2291 from Bond-009/sessionmanager
Fix warnings in SessionManager
2020-02-23 10:53:44 +09:00
dkanada
6715450598 Merge pull request #2427 from Bond-009/minor
Minor improvements
2020-02-23 10:48:47 +09:00
Bond_009
ffc9eb67f0 Switch remux and direct stream 2020-02-23 00:05:28 +01:00
artiume
4becaf83dd Update MediaInfoService.cs 2020-02-22 10:03:17 -05:00
dkanada
65a9d618cc add config options for musicbrainz 2020-02-22 15:04:52 +09:00
Saksol
804ca0543b Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/is/
2020-02-21 14:29:23 -05:00
R0flcopt3r
583f171f9e Added translation using Weblate (Norwegian Nynorsk) 2020-02-21 14:29:23 -05:00
dkanada
557b165f01 Merge pull request #2434 from Bond-009/photo
Fix photo serialization
2020-02-22 00:21:34 +09:00
dkanada
4355b453d4 Merge pull request #2429 from Bond-009/episode
Fix episode parsing
2020-02-22 00:17:37 +09:00
dkanada
61015c1d0f Merge pull request #2321 from Bond-009/images
Simplify image processing by removing image enhancers
2020-02-21 12:32:54 +09:00
artiume
eb67117b83 Merge pull request #20 from jellyfin/master
nightly
2020-02-20 19:44:58 -05:00
Bond-009
b02a3a29f5 Fix photo serialization 2020-02-20 15:30:04 +01:00
Daniel De Jesus
28cc210a5e Translated using Weblate (Spanish (Dominican Republic))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/es_DO/
2020-02-20 09:18:14 -05:00
SleepyJesse
d240321e87 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant/
2020-02-20 09:18:14 -05:00
SleepyJesse
b2bf0f1796 Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2020-02-20 09:18:14 -05:00
SleepyJesse
107e43aaac Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2020-02-20 09:18:14 -05:00
Bond-009
7df6d4e7a0 Update EpisodeNumberTests.cs 2020-02-20 12:02:45 +01:00
Vasily
c73370ad92 Merge pull request #2421 from viaregio/master
#2407: Prefer episode and season numbers from the embedded MP4-metadata
2020-02-20 13:17:07 +03:00
Bond_009
adc9fc282c Minor improvements 2020-02-19 23:08:58 +01:00
Bond_009
dfd74adc15 Add test 2020-02-19 22:51:30 +01:00
Bond_009
620047ab9a Fix episode parsing 2020-02-19 22:35:40 +01:00
Bond-009
0f173e1778 Merge branch 'master' into sessionmanager 2020-02-19 21:07:09 +01:00
Bond_009
184ad29f3f Address comments 2020-02-19 21:04:28 +01:00
Ulrich Wagner
3bd7633cbf Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 19:47:03 +01:00
Ulrich Wagner
a9e744bea0 Curly braces on new lines 2020-02-19 19:41:10 +01:00
Ulrich Wagner
3d9dc59554 Omitting the parameter ExtraChapters 2020-02-19 19:03:42 +01:00
Ulrich Wagner
f4d0fa8dc8 Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 18:58:28 +01:00
Ulrich Wagner
d6971581d6 Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 17:46:50 +01:00
Ulrich Wagner
0f2ee2686d Constructor of the LibraryManager takes the mediaEncoder as parameter 2020-02-19 16:06:30 +01:00
Ulrich Wagner
b16ba7d985 Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 13:40:27 +01:00
Ulrich Wagner
7005326685 Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 13:40:06 +01:00
Ulrich Wagner
4d0ee3f6cc Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 13:39:51 +01:00
Ulrich Wagner
39b6d6586f Update Emby.Server.Implementations/Library/LibraryManager.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-19 13:37:36 +01:00
artiume
8f5ffba29f Merge pull request #19 from Artiume/Artiume-livetv-1
Update MediaInfoService.cs
2020-02-19 06:26:06 -05:00
artiume
a4e0364139 Update MediaInfoService.cs 2020-02-19 06:15:55 -05:00
artiume
b375aeb56a fix indentation
it was tabs
2020-02-19 06:07:48 -05:00
artiume
967f8c6dcd Merge pull request #18 from jellyfin/master
nightly
2020-02-19 06:02:26 -05:00
Ulrich Wagner
5fed4d10ab Only reading the result of GetMediaInfo if it completed successfully 2020-02-19 08:39:01 +01:00
Ulrich Wagner
a62196afc7 Merge pull request #1 from jellyfin/master
Up-to-date
2020-02-19 08:09:37 +01:00
artiume
cef796a5ba Update Bug Report for System Details (#2422)
* Update bug_report.md

Increase priority for system details, constantly have to ask people for their deets. also increased details that should be asked.

* Update bug_report.md

* Update bug_report.md

* Update .github/ISSUE_TEMPLATE/bug_report.md

Co-Authored-By: dkanada <dkanada@users.noreply.github.com>

* Update .github/ISSUE_TEMPLATE/bug_report.md

Co-Authored-By: telans <telans@protonmail.com>

* Update bug_report.md

* Update bug_report.md

Co-authored-by: dkanada <dkanada@users.noreply.github.com>
Co-authored-by: telans <telans@protonmail.com>
2020-02-19 13:56:02 +09:00
Protik Das
a68d4396e5 Translated using Weblate (Bengali)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bn/
2020-02-18 21:46:15 -05:00
Christian Elbrianno
b672d105b6 Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/id/
2020-02-18 21:46:15 -05:00
Kaspar Laineste
e2a36a5b14 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fi/
2020-02-18 21:46:15 -05:00
Adam Bokor
6783878711 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/hu/
2020-02-18 21:46:15 -05:00
Daniel De Jesus
b6ae5242c5 Added translation using Weblate (Spanish (Dominican Republic)) 2020-02-18 21:46:15 -05:00
Ulrich Wagner
d7f199bb1c #2407: Prefer MP4-Metadata for episodes 2020-02-17 14:57:07 +01:00
Bond-009
3bc0ce070d Merge pull request #2382 from dkanada/refactor
Refactor some API services
2020-02-17 10:41:19 +01:00
Protik Das
0387c73d64 Translated using Weblate (Bengali)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bn/
2020-02-16 03:16:09 -05:00
Pramit Biswas
ae049f7fc8 Translated using Weblate (Bengali)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bn/
2020-02-16 03:16:08 -05:00
Pramit Biswas
6b4f1f3b5b Added translation using Weblate (Bengali) 2020-02-15 12:23:53 -05:00
Adam Bokor
0591d118f9 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/hu/
2020-02-14 22:49:44 -05:00
Andrew Rabert
eff8d2466e Merge pull request #2405 from nvllsvm/fuckit
Fix arm32 built on amd64 host
2020-02-14 20:13:43 -05:00
Andrew Rabert
dcac99c1a4 Fix arm32 built on amd64 host
dotnet doesn't support building arm32 from QEMU (fuck knows why).
also change arm64 image for the sake of consistency
2020-02-13 20:03:40 -05:00
artiume
63f13df6fc Merge pull request #17 from jellyfin/master
10.5
2020-02-13 13:09:50 -05:00
dkanada
53db526667 merge branch master into refactor 2020-02-14 03:02:06 +09:00
dkanada
cf2626428c Merge pull request #2400 from Bond-009/baseurl
Another baseurl related fix
2020-02-14 01:16:52 +09:00
Bond-009
407ba755f1 Merge pull request #2258 from geilername/transcoding-throttling
Enable Throttling when transcoding without Hardware-Acceleration
2020-02-13 17:01:09 +01:00
dkanada
8ee917143f Merge pull request #2358 from Bond-009/tests
Enable TreatWarningsAsErrors and Nullable for test projects
2020-02-14 00:31:00 +09:00
artiume
40ad6f843f Merge pull request #16 from jellyfin/master
nightly
2020-02-13 05:53:23 -05:00
Bond_009
f5db4c8402 Another baseurl related fix
Baseurl always starts with a '/' (unless it's empty)
2020-02-12 20:57:34 +01:00
Bond-009
64800de29d Merge pull request #2394 from mark-monteiro/xml-documentation
Add Some XML Documentation
2020-02-12 20:43:51 +01:00
Mark Monteiro
8ffb073ccb Enable documentation warnings for fully documented files 2020-02-12 20:05:26 +01:00
Bond-009
a2490a7ae5 Merge branch 'master' into images 2020-02-12 17:41:46 +01:00
Mark Monteiro
33761c3658 Use "implement" instead of "apply" when referring to an interface 2020-02-12 14:08:06 +01:00
Vasily
e241f83ff1 Merge pull request #2398 from Artiume/patch-1
Update dockerfile to install git for new dependency
2020-02-12 14:24:19 +03:00
Vasily
a26c1ab17d Remove commented code 2020-02-12 14:19:11 +03:00
Anthony Lavado
42066ee326 Merge branch 'master' into transcoding-throttling 2020-02-12 02:01:56 -05:00
Anthony Lavado
684568e6d2 Merge pull request #2393 from DMouse10462/patch-1
Fix Fedora build
2020-02-12 01:56:12 -05:00
Johan
6813efd1a2 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fi/
2020-02-12 00:17:58 -05:00
j7johnny
a7c7d536a7 Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant/
2020-02-12 00:17:58 -05:00
Anthony Lavado
00073c162a Merge pull request #2363 from dkanada/view
Add session view endpoint
2020-02-11 23:56:47 -05:00
dkanada
662e1164c9 Merge pull request #2326 from Bond-009/dlnawarnings
Improvements to dlna server
2020-02-12 02:23:52 +09:00
artiume
fd55164410 Merge pull request #15 from Artiume/Artiume-livetv
Fix MaxBitrate
2020-02-11 12:21:43 -05:00
artiume
b5342bb7d9 Fix MaxBitrate 2020-02-11 10:57:16 -05:00
artiume
8fb86cb5ff git to arm64 2020-02-11 10:30:30 -05:00
artiume
e47185160e Add git to arm 2020-02-11 10:30:15 -05:00
artiume
8acfc264fc Update dockerfile to install git for new dependency
https://github.com/jellyfin/jellyfin-web/pull/735

I had to install git to get it to build ✌️
2020-02-11 10:29:26 -05:00
Mark Monteiro
a381eb884c add-some-xml-documentation 2020-02-10 10:26:28 +01:00
David Mouse
422c440743 Fix Fedora build
Fedora builds were broken due to dotnet-sdk-3.1 and dotnet-runtime-3.1 not being available on the @dotnet-sig/dotnet repo as well as a lack of the git package (needed for yarn when installing jellyfin/jellyfin-noto per https://github.com/jellyfin/jellyfin-web/pull/735). Replaces the outdated repo with the official repo found in Microsoft's documentation.
2020-02-10 04:12:37 -05:00
artiume
4d324046ac Merge pull request #14 from jellyfin/master
nightly
2020-02-08 21:14:45 -05:00
Bond_009
867835a474 Fix build 2020-02-08 22:25:44 +01:00
Bond_009
f96bc23c4f Merge branch 'master' into nullable2 2020-02-08 21:49:28 +01:00
diegoalrey
77428d338d Translated using Weblate (Galician)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/gl/
2020-02-08 10:17:50 -05:00
The Iiseppi
e7dcaa7d08 Translated using Weblate (Finnish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fi/
2020-02-08 10:17:50 -05:00
dkanada
75d6545145 Merge pull request #2373 from Bond-009/warn14
Fix some warnings in MediaBrowser.Model
2020-02-07 23:45:21 +09:00
artiume
81396a11cb Update CONTRIBUTORS.md 2020-02-06 17:35:47 -05:00
artiume
ab59848d92 Merge pull request #13 from Artiume/Artiume-LiveTV
Update MediaInfoService.cs
2020-02-06 17:34:04 -05:00
artiume
a73ce1d781 Update MediaInfoService.cs 2020-02-06 17:21:10 -05:00
artiume
c3f749ec66 Update MediaBrowser.Model/Users/UserPolicy.cs
Co-Authored-By: Anthony Lavado <anthonylavado@me.com>
2020-02-06 14:02:46 -05:00
Bond_009
7060934792 Fix some warnings in Emby.Server.Implementations 2020-02-06 15:21:38 +01:00
Bond-009
cefac4f886 Update Emby.Server.Implementations/Session/SessionManager.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-06 13:16:22 +01:00
Bond-009
1ae9ed6e2a Merge pull request #2381 from sebPomme/fix_readme_link
Fix quick start guide url in readme
2020-02-06 13:16:06 +01:00
Bond-009
0a43814596 Merge branch 'master' into sessionmanager 2020-02-06 13:04:07 +01:00
Bond-009
3fe84c3213 Apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-06 13:03:02 +01:00
Bond-009
22510909fb Update Jellyfin.Naming.Tests.csproj 2020-02-06 13:00:15 +01:00
dkanada
df739b5b2f Merge pull request #2325 from Bond-009/naming
Clean up Emby.Naming
2020-02-06 20:59:30 +09:00
Bond-009
d5fcca3d05 Merge branch 'master' into naming 2020-02-05 23:28:00 +01:00
dkanada
1cb51a8ac7 rename session folder 2020-02-06 00:47:50 +09:00
sebpomme
a954d5e953 Fix qui start guide url in README.md 2020-02-05 16:26:51 +01:00
dkanada
c2733ac0dc split api keys into their own service 2020-02-06 00:26:21 +09:00
dkanada
e8984ed3a9 Merge pull request #2379 from joshuaboniface/nodejs-deb
Use NodeJS 10.X for NPM builds
2020-02-05 14:06:51 +09:00
ariqfadlan
ebd0771dca Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/id/
2020-02-04 23:17:44 -05:00
Joshua M. Boniface
e3c64b9fee Use NodeJS 10.X for NPM builds 2020-02-04 22:07:01 -05:00
dkanada
9af149b02d Merge pull request #2374 from Bond-009/warn15
Fix some warnings in MediaBrowser.Controller
2020-02-05 01:23:04 +09:00
Bond-009
91707f13a8 Add endpoints back 2020-02-04 12:29:14 +01:00
Bond-009
6a6472bb8a Update MediaBrowser.Controller/Entities/PersonInfo.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-04 12:28:16 +01:00
Bond-009
ba1ffbabd3 Merge branch 'master' into nullable2 2020-02-04 12:21:42 +01:00
Bond-009
c9e11c95ee Apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-04 12:05:14 +01:00
artiume
3b6a4c3a33 Merge pull request #11 from jellyfin/master
nightly
2020-02-04 06:02:38 -05:00
Bond_009
32dcd372f4 Fix some warnings in MediaBrowser.Controller 2020-02-04 02:10:44 +01:00
Bond_009
f47ad85011 Fix warnings MediaBrowser.Model 2020-02-04 01:49:27 +01:00
Noitty
176e850973 Translated using Weblate (Catalan)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ca/
2020-02-03 16:17:42 -05:00
dkanada
f93edb7ade add code suggestions 2020-02-04 01:29:18 +09:00
Claus Vium
241e351a61 Merge branch 'master' into dlnawarnings 2020-02-03 13:51:34 +01:00
dkanada
b7a9900556 Merge pull request #2357 from Bond-009/warn13
Fix warnings
2020-02-03 17:15:03 +09:00
dkanada
fe325a6e73 Merge pull request #2359 from Bond-009/username
Allow changing capitalization of usernames
2020-02-03 17:14:50 +09:00
dkanada
ba724f158c Merge pull request #2367 from Artiume/patch-4
fix SSL issue in arm and arm64
2020-02-03 15:59:18 +09:00
dkanada
c1ecd886d9 Merge pull request #2368 from nyanmisaka/master
Fix framerate info not showing when mediasource is in H264 format.
2020-02-03 15:58:26 +09:00
Nyanmisaka
c149fcb3ee Update MediaBrowser.Controller/MediaEncoding/JobLogger.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-03 00:02:24 +08:00
Nyanmisaka
2c3b1bb8cb Update JobLogger.cs 2020-02-02 16:46:56 +08:00
Nyanmisaka
7472ae5ca9 fix fps info issue when the video is h264.
Fixed an issue that when the media source is in H264 format and the frame rate info is not displayed due to missing space characters in ffmpeg log.
2020-02-02 16:27:02 +08:00
Nyanmisaka
8eced835c0 Update JobLogger.cs 2020-02-02 15:58:29 +08:00
artiume
4302f16925 Update Dockerfile.arm64 2020-02-01 14:50:45 -05:00
artiume
78bb45e8fa fix SSL issue in arm and arm64
verified arm build on raspbian
2020-02-01 14:46:11 -05:00
Andrew Rabert
021427d881 Merge pull request #2365 from mcarlton00/docker-ssl-fix
Add root certificates to docker image
2020-02-01 12:26:49 -05:00
Matt
994481213f Add root certificates to docker image 2020-02-01 11:02:44 -05:00
dkanada
1bc8ca2542 add session view endpoint 2020-02-02 00:16:11 +09:00
dkanada
26dd67a441 change authentication flow 2020-02-02 00:09:18 +09:00
dkanada
6341d986a9 fix a few warnings 2020-02-02 00:07:46 +09:00
Bond-009
87c5047b13 Merge pull request #2362 from dkanada/tasks
Improve scan progress and fix a few bugs
2020-02-01 15:37:16 +01:00
dkanada
692a9bfdd0 update some comments
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-01 23:36:40 +09:00
dkanada
7df6f8d54e update error message
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2020-02-01 23:14:27 +09:00
dkanada
afe9ed977b improve scan progress and fix a few bugs 2020-02-01 22:44:27 +09:00
dkanada
ab2349ff3c update task names and descriptions 2020-02-01 22:27:25 +09:00
Bond-009
70bc03c795 Apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-02-01 12:54:48 +01:00
Bond_009
acc1846e3e Allow changing capitalization of usernames 2020-01-31 22:56:24 +01:00
Bond_009
71abf1d3ce Enable TreatWarningsAsErrors and Nullable for test projects 2020-01-31 22:46:10 +01:00
Bond_009
87d2479b78 Fix warnings 2020-01-31 22:26:53 +01:00
dkanada
cd13f718fb Merge pull request #2247 from Bond-009/stringhelper
Remove StringHelper functions
2020-02-01 03:29:16 +09:00
Bond-009
6cd9c84ddf Update MediaBrowser.Model/Extensions/StringHelper.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-31 18:10:15 +01:00
dkanada
b3811a9498 Merge pull request #2349 from Bond-009/deps
Update deps
2020-01-31 11:22:30 +09:00
WNotCoder
a3615dec69 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2020-01-30 13:17:32 -05:00
Bond-009
d69870680b Close xmlwriter first 2020-01-29 17:30:27 +01:00
artiume
d4470b5709 Merge pull request #9 from jellyfin/master
nightly
2020-01-28 21:41:52 -05:00
artiume
a012a4574f remove test patch 2020-01-28 21:36:51 -05:00
Bond_009
2186df8ac4 Update deps 2020-01-28 22:42:07 +01:00
mtanECECS
81fae5932b Translated using Weblate (Filipino)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fil/
2020-01-28 16:09:23 -05:00
Pooka Mustard
1ff74dd8f0 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ar/
2020-01-28 16:09:23 -05:00
diegoalrey
f7b4dfc1cb Added translation using Weblate (Galician) 2020-01-28 16:09:23 -05:00
Bond_009
6ee04855cd Style 2020-01-28 21:54:51 +01:00
Bond-009
ae9c1e29e7 My bad 2020-01-28 17:50:25 +01:00
Bond-009
acfacabf0c Merge pull request #2347 from Matt07211/fix-2255
Fix broken webserver caused by dotnet publish. Temp Fix for #2255
2020-01-28 15:01:29 +01:00
Bond-009
36d62c3093 Fix? 2020-01-28 13:19:25 +01:00
Matt07211
84fbf64867 Fix broken webserver caused by dotnet publish.
This should be considered a temp fix, as it fixes the symptom and not
the actual root cause of the issue. Why this works? I *feel like* this is
a dependency issue and this change forces it to evalute dependencys in a
different order, avoiding the bug.
2020-01-28 19:37:13 +11:00
Bond_009
6b68521bae Try again 2020-01-27 23:34:40 +01:00
Bond_009
fc578de3b3 Try possible solutions 2020-01-27 22:43:58 +01:00
Vasily
0a95c3a1c2 Merge pull request #2343 from Bond-009/spacing
Fix spacing logs
2020-01-27 19:31:42 +03:00
Bond-009
71bdcd7307 Fix spacing logs 2020-01-27 17:24:29 +01:00
Bond-009
04b9e94c7c Merge pull request #2338 from ferferga/master
Removed old 'automatic restart after update' features
2020-01-27 17:02:30 +01:00
dkanada
1ed92b05fb Merge pull request #2332 from pR0Ps/bugfix/dlna
Fix another issue with DLNA responses not properly paginating
2020-01-27 23:18:33 +09:00
Vasily
8c520160cc Merge pull request #2331 from nyanmisaka/master
fix an issue that could not correctly determine 'IsSecondaryAudio' in some cases.
2020-01-27 15:51:50 +03:00
mtanECECS
b5be0c567f Added translation using Weblate (Filipino) 2020-01-26 22:25:14 -05:00
Bond-009
bade35958a Fix 2020-01-26 17:41:34 +01:00
Bond-009
3a338c1899 Address comments 2020-01-26 17:37:47 +01:00
artiume
918df5e352 Merge remote-tracking branch 'jellyfin/master' 2020-01-26 09:33:31 -05:00
ferferga
d6786c7304 Removed old 'automatic restart after update' features' 2020-01-25 23:01:48 +01:00
dkanada
e58aa57ed7 Merge pull request #2337 from ThreeFive-O/AddTranscodingFramerate
Add transcoding framerate info
2020-01-26 01:06:28 +09:00
SaddFox
ad5081f276 Translated using Weblate (Slovenian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sl/
2020-01-25 10:17:25 -05:00
a-alshabib
eb04126473 Translated using Weblate (Arabic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ar/
2020-01-25 10:17:25 -05:00
ThreeFive-O
4f3bfd9146 Add Transcoding framerate info 2020-01-24 23:33:32 +01:00
Carey Metcalfe
d3de91dab6 Fix another issue with DLNA responses not properly paginating
The `UserRootFolder.GetItemsInternal` method now applies any sorting and
pagination requested by the `InternalItemsQuery` that was passed to it.

Previous pagination fix: #2304
Original issue #2303
2020-01-24 00:43:28 -05:00
Nyanmisaka
48e9c004b4 fix an issue about determining 'IsSecondaryAudio'
fix an issue that could not correctly determine 'IsSecondaryAudio' in some cases.
2020-01-24 00:55:14 +08:00
Vasily
8ff07e17e6 Merge pull request #2242 from Bond-009/getstream
Remove FileSystem.GetStream
2020-01-23 19:33:40 +03:00
Bond_009
c751ba9f70 Fix build 2020-01-22 22:27:03 +01:00
Bond-009
c8409d2ea1 Remove FileSystem.GetStream 2020-01-22 22:20:35 +01:00
Bond_009
dc62e436c4 Clean up Emby.Naming 2020-01-22 22:18:56 +01:00
Bond_009
82112b6788 Improvements to dlna server
* Improve response writer
* Add analyzers
* Error on warnings in release mode
* Disable doc warnings
2020-01-22 21:00:07 +01:00
Marco
6eac7f0fa7 Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/it/
2020-01-22 12:17:19 -05:00
dkanada
1dd4abebbd Merge pull request #2297 from Bond-009/asyncio
Kestrel doesn't like sync IO operations
2020-01-23 01:59:52 +09:00
Bond-009
5340eb9363 Update Emby.Dlna/Service/BaseControlHandler.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-22 17:46:26 +01:00
Bond_009
ddf9b38799 Simplify image processing by removing image enhancers 2020-01-21 20:26:30 +01:00
Bond-009
ac3b958c67 Use async methods 2020-01-21 17:59:41 +01:00
dkanada
d4de78693f Merge pull request #2184 from WiiPlayer2/bug/global-header-flag-support
Add check if output container supports "global_header" flag
2020-01-21 19:24:35 +09:00
Vasily
f23434f4f7 Merge pull request #2299 from dkanada/testing
Fix a few more tests for music and episodes
2020-01-21 13:21:24 +03:00
dkanada
4abcbc66be Merge pull request #2295 from shemanaev/patch-1
Enable path mapping in `PlaybackInfo` endpoint
2020-01-21 19:20:14 +09:00
Waldemar Tomme
ef487441d1 Remove configuration of global_header flag 2020-01-21 06:48:25 +01:00
dkanada
11c758b6be remove unsupported test cases 2020-01-21 00:20:24 +09:00
Vasily
2f8f064a23 Merge pull request #2304 from pR0Ps/master
Fix pagination for DLNA root folder list
2020-01-20 16:07:51 +03:00
Andrew Rabert
da2c998e28 Update ARM images to debian buster (#2313)
Also has the effect of updating ffmpeg to 4.1
2020-01-19 12:34:33 -05:00
Andrew Rabert
075dad8720 Fix ARM images (#2302)
Allow for native building of Docker images. Use buildx if
cross-compilation is needed.
2020-01-19 07:51:38 -05:00
Carey Metcalfe
f2eea89ff0 Fix pagination for DLNA root folder list
Previously, when responding to a DLNA "Browse" request, the
`StartingIndex` was not respected and all of the root items were
returned each time. This caused infinite loops with in DLNA clients that
ignored the `TotalMatches` data in the response and just continued
asking for the next page until they got an empty response.

This fix makes the root folder list respect the `StartingIndex` and
`RequestedCount` parameters like all other responses.

Fixes issue #2303
2020-01-19 01:37:52 -05:00
dkanada
a562a4d505 minor linting for ci files 2020-01-19 00:19:19 +09:00
dkanada
e700fc8a07 fix and remove a few more tests 2020-01-19 00:18:55 +09:00
dkanada
c618f3f8eb Merge pull request #2257 from Bond-009/cleantests
Fix a couple of tests
2020-01-19 00:08:37 +09:00
dkanada
1e65cc4695 Merge pull request #2269 from EraYaN/azp-coverlet-reports
Split CI YAML files and update code coverage collection
2020-01-18 23:53:55 +09:00
Bond_009
2610f377c0 Kestrel doesn't like sync IO operations 2020-01-18 00:09:25 +01:00
Denis
549a2d8b6d Enable path mapping in PlaybackInfo endpoint 2020-01-17 22:48:28 +03:00
4d1m
8e71046a3c Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ro/
2020-01-17 04:17:10 -05:00
artiume
73a47e934d Fix Docker Arm Nightly (#2286)
* Fix Docker Arm Nightly

Updated image base.

There was an error for libssl missing. I attempted to add libssl1.0.0 but it wasn't found so I fell back to libssl-dev.

Much more work needs to be done. ffmpeg is still debian based. I attempted to add jellyfin-ffmpeg but I was having too many issues so I'm saving it for another day, but it at least builds out successfully.

* Fix docker arm64 nightly
2020-01-17 00:35:41 -05:00
Bond_009
c601def484 Fix warnings in SessionManager 2020-01-17 00:19:58 +01:00
Bond-009
686d1ff9fb Update StringHelper.cs 2020-01-16 23:23:06 +01:00
Bond-009
47d3337124 Update StringHelper.cs 2020-01-16 23:22:42 +01:00
artiume
0cbae4a06d Tcoding
https://github.com/jellyfin/jellyfin/pull/2184
2020-01-16 12:51:34 -05:00
Vasily
bdbf7a69f6 Merge pull request #2289 from Bond-009/dvd
Add back support for DVDs copied as folders
2020-01-16 19:43:36 +03:00
Vasily
1cb142fbab Merge pull request #2290 from anthonylavado/master
Update SQLitePCL to new version
2020-01-16 18:26:44 +03:00
Anthony Lavado
dcd6ceb9a2 Update SQLitePCL to new version 2020-01-16 09:31:20 -05:00
Bond-009
f3a1729964 Address comments 2020-01-16 15:02:50 +01:00
Vasily
ad481322f6 Merge pull request #2288 from Bond-009/logging
Add brackets around thread id
2020-01-16 16:45:46 +03:00
Vasily
88d66d5f5c Merge pull request #2249 from Narfinger/docker-fix
fixes dockerfile building on recent linux installations
2020-01-16 16:40:12 +03:00
Bond-009
e882b03e81 Add back support for DVDs copied as folders 2020-01-16 13:30:38 +01:00
Bond-009
96c9af5904 Add brackets around thread id 2020-01-16 13:20:01 +01:00
dkanada
bc4c67e6fa Merge pull request #2287 from nyanmisaka/master
New upstream ffmpeg version 4.2.1 for windows nightly channel
2020-01-16 20:54:59 +09:00
Nyanmisaka
2ce16d4bb5 fix indentation 2020-01-16 18:47:54 +08:00
Nyanmisaka
0a7ea36c68 Update build-jellyfin.ps1 2020-01-16 18:10:14 +08:00
Nyanmisaka
e92e105c42 New upstream ffmpeg version 4.2.1 on windows 2020-01-16 17:57:19 +08:00
Nyanmisaka
ac0b30285e New upstream ffmpeg version 4.2.1 on windows 2020-01-16 16:32:07 +08:00
Nyanmisaka
15c52867ea New upstream ffmpeg version 4.2.1 on windows 2020-01-16 16:32:04 +08:00
4d1m
42213d94e5 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ro/
2020-01-16 02:17:12 -05:00
nextlooper42
d4745957b3 Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sk/
2020-01-16 02:17:12 -05:00
dkanada
4aa0b940e3 Merge pull request #2251 from nyanmisaka/master
add support for AMD AMF hardware encoding on Windows & Linux
2020-01-16 15:26:46 +09:00
dkanada
884c3e5614 Merge pull request #2283 from EraYaN/nsis-create-speedup
Change NSIS log verbosity and use lesser but faster compression.
2020-01-16 15:04:16 +09:00
Joshua M. Boniface
3b3718e437 Merge pull request #2275 from Artiume/patch-1
Explicitly ask for ffmpeg logs
2020-01-15 10:05:35 -05:00
artiume
2cad58e5cd Update .github/ISSUE_TEMPLATE/media_playback.md
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-15 10:02:01 -05:00
Erwin de Haan
ec8baaf48d Switch around SetCompressor arguments. Hide progress bars for powershell. 2020-01-15 12:17:42 +01:00
Nyanmisaka
2c10891b66 turn on indentation. 2020-01-15 18:45:28 +08:00
Nyanmisaka
8868ff2ffa remove useless comment 2020-01-15 18:40:58 +08:00
Erwin de Haan
67cae37308 Formatting and comment removal. 2020-01-15 11:39:47 +01:00
Erwin de Haan
1ad6f01617 Switch to slightly more verbose logging. 2020-01-15 11:37:37 +01:00
Erwin de Haan
9aa870cf24 Enable /SOLID switch for compression 2020-01-15 11:36:54 +01:00
Erwin de Haan
d3bd22d7a2 Enable Unicode
ANSI targets are deprecated
2020-01-15 11:36:22 +01:00
Vasily
3ab979c6ba Merge pull request #2264 from Bond-009/discovery
Clean up server discovery code
2020-01-15 13:34:29 +03:00
Erwin de Haan
22f408201a Less output and lesser compression. 2020-01-15 11:20:01 +01:00
Erwin de Haan
da91b4fa4c Split CI testing files
Switch to cobertura for code coverage
Switch to dotnet test for tests
Add matrix run for different platforms
Add extra variables for easier maintenance
2020-01-15 11:05:57 +01:00
Vasily
c6484c0220 Merge pull request #2181 from BnMcG/2179-authentication-tests
Test Jellyfin.Api authentication handling
2020-01-14 18:03:25 +03:00
dkanada
b1e76db21e Merge pull request #2266 from Bond-009/nullref2
Try to fix nullreff
2020-01-14 18:46:09 +09:00
dkanada
d43d39f9b8 Merge pull request #2272 from Bond-009/logging
Add thread ID and source to logging
2020-01-14 18:03:26 +09:00
Artiume
c1350f30d2 Update .github/ISSUE_TEMPLATE/media_playback.md
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-13 21:25:41 -05:00
Artiume
cd5e5cda61 Update .github/ISSUE_TEMPLATE/media_playback.md
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-13 21:25:21 -05:00
Artiume
402691b5e1 Explicitly ask for ffmpeg logs
gimme yo ffmpeg logs, yo
2020-01-13 17:16:43 -05:00
Bond-009
facbd87cfc Merge pull request #2268 from dkanada/absolute-path-fix
Fix tests for absolute paths
2020-01-13 19:58:45 +01:00
Bond-009
65fe243afb Add thread ID and source to logging 2020-01-13 19:44:17 +01:00
Slobodan Simić
138bff4327 Translated using Weblate (Serbian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sr/
2020-01-13 06:17:07 -05:00
Z Yang
ab0130e9e2 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2020-01-13 06:17:07 -05:00
Alexander Brissman
7b91df1994 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nb_NO/
2020-01-13 06:17:07 -05:00
hbo
faf898ea0d Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2020-01-13 06:17:07 -05:00
Philmo67
31347de792 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2020-01-13 06:17:07 -05:00
punkch
9c2c31b0c6 Translated using Weblate (Bulgarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bg/
2020-01-13 06:17:07 -05:00
dkanada
536237c35d move the split usage to the proper location 2020-01-13 17:37:07 +09:00
dkanada
d461f46bef ignore drive name in windows environments 2020-01-13 17:31:14 +09:00
dkanada
9eac19c75a change invariant culture to ordinal 2020-01-13 17:09:22 +09:00
Bond-009
cf13e89ad6 Update MediaBrowser.Api/Playback/MediaInfoService.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-13 09:01:14 +01:00
Bond-009
665ca5cf1f Update UdpServer.cs 2020-01-13 09:00:30 +01:00
dkanada
d00fd7ca82 switch two incorrectly used variables 2020-01-13 15:43:06 +09:00
dkanada
65e9a705d3 check operating system for absolute path test 2020-01-13 15:34:50 +09:00
dkanada
a8cd963d46 fix tests for absolute paths 2020-01-13 15:25:54 +09:00
dkanada
c3efcbf77e Merge pull request #2245 from BnMcG/1874-regression-test
Add a test to prevent a regression of absolute path generation behaviour
2020-01-13 14:18:11 +09:00
Bond_009
56f580cdf6 Add test to prevent regressions 2020-01-12 23:57:13 +01:00
Bond_009
93ab829df5 Attempt #3 2020-01-12 23:25:57 +01:00
Bond_009
84d1b12530 Attempt #2 2020-01-12 21:55:04 +01:00
Bond_009
da5893b0f1 Try to fix nullreff 2020-01-12 21:21:20 +01:00
dkanada
ce7744806c Merge pull request #2216 from gnattu/master
Let HLS fallback to mpegts in case device reports unsupported container
2020-01-13 03:43:59 +09:00
gnattu
ea075c1b48 Add reminder to remove the workaround
This will be no longer needed when ffmpeg is ready

Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-12 13:22:20 -05:00
Bond-009
ded9857f45 Clean up server discovery code 2020-01-12 18:59:10 +01:00
dkanada
d217f1614e Merge pull request #2096 from Bond-009/embytv
Clean up Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
2020-01-13 00:41:52 +09:00
Bond-009
2a09f05ff3 Fix build 2020-01-12 16:30:31 +01:00
Nyanmisaka
08c4d3797f add support for AMF hardware encoding on Linux.
1) h264_amf is now supported on linux with 'amdgpu-pro' installed and '--enable-amf' when compiling ffmpeg.
2) Using vaapi decode and h264_amf encode on linux platform can avoid some weird transcoding errors in h264_vaapi with amd gpu.
2020-01-12 21:38:28 +08:00
Maximilian Marschall
081d942d03 Enable Throttling when transcoding without Hardware-Acceleration 2020-01-12 00:33:57 +01:00
Bond_009
9f5bbb126e Fix tests 2020-01-11 22:29:46 +01:00
Bond_009
abf03f7d3a Clean up some more 2020-01-11 22:17:05 +01:00
Bond_009
ec0ef2a2c5 Remove useless statement 2020-01-11 22:17:05 +01:00
Bond_009
cd0592ea8f Improve parsers 2020-01-11 22:17:05 +01:00
Bond_009
dd254eddac Simplify CleanDateTimeParser 2020-01-11 22:17:05 +01:00
Bond_009
b1dc595be1 Fix a couple of tests 2020-01-11 22:17:05 +01:00
Bond_009
a647dc5705 Cleanup tests 2020-01-11 22:17:05 +01:00
dkanada
a272638a84 Merge pull request #2170 from Bond-009/mediainfoservice
Minor changes to MediaInfoService
2020-01-11 16:54:23 +09:00
dkanada
bca48b5d5c Merge pull request #2248 from jellyfin/azp-vstest-fix
Fix the VSTest runner
2020-01-11 15:34:22 +09:00
dkanada
d63debd008 Merge pull request #2254 from Bond-009/regex
Fix regex for movies released after 2019
2020-01-11 15:12:39 +09:00
Bond_009
801c356d66 Fix regex for movies released after 2019 2020-01-11 00:23:14 +01:00
Vasily
dd7feacd34 Merge pull request #2105 from Bond-009/namingtests
Add back all old emby tests
2020-01-11 02:11:13 +03:00
Bond_009
0d6a4c2909 Fix build 2020-01-11 00:08:47 +01:00
Vasily
aca4d678a2 Merge pull request #2136 from Bond-009/warn12
More warnings (removed)
2020-01-11 02:02:48 +03:00
Slobodan Simić
fa1aeeb18a Added translation using Weblate (Serbian) 2020-01-10 15:27:17 -05:00
Bond_009
d9ec502ff9 Address comments 2020-01-10 21:25:45 +01:00
Bond_009
bb236b9591 Merge branch 'master' into warn12 2020-01-10 21:18:16 +01:00
Bond_009
e714b9930e Merge branch 'master' into embytv 2020-01-10 21:16:46 +01:00
Nyanmisaka
e95239e281 add support for AMD h264_amf & hevc_amf 2020-01-11 01:36:25 +08:00
archon eleven
0a39e54984 Translated using Weblate (Malay)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ms/
2020-01-10 10:17:05 -05:00
Philmo67
81ae6d8afd Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2020-01-10 10:17:05 -05:00
keitaro62
0a92200c6f Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2020-01-10 10:17:05 -05:00
Narfinger
c3ff4e0b9f fixes dockerfile building on recent linux installations 2020-01-10 19:42:07 +09:00
Ben Magee
64baca9fac Renamed project and namespace 2020-01-09 22:03:57 +00:00
Bond_009
b50c4938e1 Merge branch 'master' into namingtests 2020-01-09 18:26:22 +01:00
Artiume
a40cb7bbd8 Merge pull request #7 from jellyfin/master
nightly
2020-01-09 12:14:54 -05:00
Erwin de Haan
312987aea5 Build all test projects using a wildcard 2020-01-09 17:39:17 +01:00
Erwin de Haan
654336990f Added plural glob for test assemblies 2020-01-09 17:31:44 +01:00
Erwin de Haan
d328fc51cf Apply suggestions from code review
Co-Authored-By: Bond-009 <bond.009@outlook.com>
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-09 17:28:20 +01:00
Erwin de Haan
6792fa111e Fix the test selection glob. 2020-01-09 17:27:48 +01:00
Erwin de Haan
1ea613a9bd Update Jellyfin.Api.Test to 3.1 2020-01-09 17:26:42 +01:00
Erwin de Haan
1fecb9efb2 Fix the VSTest runner 2020-01-09 17:17:52 +01:00
Bond-009
fdbb329118 Remove StringHelper functions 2020-01-09 17:07:13 +01:00
gnattu
d5204f572a Fix typo and plural 2020-01-09 02:25:05 -05:00
dkanada
162c1ac7b7 Merge pull request #2185 from Bond-009/scanerrors
Fix exceptions while scanning
2020-01-09 15:10:29 +09:00
Ben Magee
140673fcf6 Add a test case which doesn't specify the parent directory. 2020-01-08 23:03:17 +00:00
Ben Magee
43c76b48c9 Added a test to prevent a regression of the issue seen in #1874. This issue was fixed in PR#2240 2020-01-08 22:52:33 +00:00
Bond-009
b1af8a4178 Rename function 2020-01-08 18:14:01 +01:00
Bond-009
277e9d2b0b fix build 2020-01-08 18:13:11 +01:00
Bond-009
c3752b1a30 Merge branch 'master' into scanerrors 2020-01-08 18:10:17 +01:00
Andrew Rabert
124a852787 Merge pull request #2240 from anthonylavado/fix-pathfinding
Re-order the path statement to avoid file issues
2020-01-08 08:29:03 -05:00
Anthony Lavado
75f19a762c Re-order the path statement to avoid file issues
Fixes #31874.
2020-01-08 04:05:07 -05:00
dkanada
423d50e978 Merge pull request #1838 from Unhelpful/media-attachments
Add support for embedded attachments in media files
2020-01-08 11:04:21 +09:00
dkanada
73fac50e57 rename two properties based on code suggestions 2020-01-08 10:52:48 +09:00
Bond_009
8a0ef41036 Minor improvements 2020-01-08 01:24:12 +09:00
Bond_009
a253fa616d Fix build and address comments 2020-01-08 01:23:57 +09:00
dkanada
aca31457c0 merge branch master into media-attachments 2020-01-08 01:21:09 +09:00
Bond-009
9dfafb9e9f Update MediaBrowser.MediaEncoding/Probing/MediaFormatInfo.cs
Co-Authored-By: Erwin de Haan <EraYaN@users.noreply.github.com>
2020-01-07 11:13:47 +01:00
Bond-009
49fef5f09c Update MediaBrowser.MediaEncoding/Probing/MediaChapter.cs
Co-Authored-By: Erwin de Haan <EraYaN@users.noreply.github.com>
2020-01-07 11:13:11 +01:00
dkanada
534716d9c9 Merge pull request #2220 from Bond-009/unicode
Replace unicode char with its integer value
2020-01-06 21:16:22 +09:00
Bond-009
70210b47a4 Update MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2020-01-06 10:39:01 +01:00
dkanada
e5c68834a3 Merge pull request #2221 from Bond-009/baseurlfix
Fix baseurl (again)
2020-01-06 15:05:11 +09:00
dkanada
f48269a319 Merge pull request #2219 from Bond-009/subtitle
Fix JSON subtitle writer
2020-01-06 14:43:07 +09:00
samucamg
80dfc78ba5 Translated using Weblate (Portuguese)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/pt/
2020-01-05 16:47:41 -05:00
Thoscellen
a4d0e4b38e Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2020-01-05 16:47:41 -05:00
Cota Fainado
0a483c83f9 Translated using Weblate (Portuguese)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/pt/
2020-01-05 16:47:41 -05:00
Bond-009
a21645d6be Merge pull request #2230 from dkanada/update-ci
Fix dependency issue for CI
2020-01-05 21:05:29 +01:00
Erwin de Haan
21b78f44c8 Add new dotnet version to compat stage as well. 2020-01-05 19:30:32 +01:00
Erwin de Haan
65f65db8b9 Re-enable compat checks. 2020-01-05 19:25:33 +01:00
Erwin de Haan
2ca7200a05 Updated for v0.0.5 of the compat checker. 2020-01-05 19:24:24 +01:00
Artiume
5b55997984 Merge pull request #6 from jellyfin/master
nightly
2020-01-05 11:49:45 -05:00
dkanada
d599124508 manually disable compatibility check 2020-01-05 16:39:48 +09:00
dkanada
c7d5f35eb7 update display names for some ci steps 2020-01-05 16:32:24 +09:00
dkanada
303385dfa2 remove unused parameters 2020-01-05 16:08:19 +09:00
dkanada
f1008ab58d update job names 2020-01-05 16:01:42 +09:00
dkanada
e5e0166951 update dotnet version for ci 2020-01-05 15:59:31 +09:00
Constantin Matel
0b592376d5 Translated using Weblate (Romanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ro/
2020-01-04 18:01:30 -05:00
Cota Fainado
aa7aadb2b2 Added translation using Weblate (Portuguese) 2020-01-04 18:01:30 -05:00
dkanada
aac0a1ed26 Merge pull request #2206 from Bond-009/userconfig
Delete user config dir on user deletion
2020-01-04 22:55:42 +09:00
Bond-009
77a9ebf13f Merge pull request #2222 from sachk/master
Update the build script to use .NET core SDK 3.1
2020-01-04 11:30:38 +01:00
Sacha Korban
2497573b7f Update the build script to use .NET core SDK 3.1 2020-01-04 15:02:38 +11:00
shoeflydbm
5cd8338e73 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nb_NO/
2020-01-03 10:37:00 -05:00
Constantin Matel
295eaa2ccb Added translation using Weblate (Romanian) 2020-01-03 10:37:00 -05:00
Bond_009
5994328903 Fix baseurl (again) 2020-01-02 21:22:10 +01:00
Bond_009
09d1f976d9 Replace unicode char with its integer value 2020-01-02 20:19:01 +01:00
Bond-009
59cdfdc2d9 Fix JSON subtitle writer 2020-01-02 14:38:13 +01:00
dkanada
d756233f62 Merge pull request #2144 from neilsb/feature/Add-Excluded-Tags-to-SQLite-query-using-parameters
Add Excluded Tags to SQLite query using parameters
2020-01-02 15:32:25 +09:00
dkanada
653610d578 Merge pull request #2165 from Ullmie02/master
Add Tmdb as a Provider for Season Images
2020-01-02 11:27:34 +09:00
dkanada
fb61a1f882 Merge pull request #2150 from Bond-009/releaseerror
Enable TreatWarningsAsErrors for some projects
2020-01-02 10:13:57 +09:00
Joshua M. Boniface
d3bce6e380 Merge pull request #2107 from Bond-009/dotnet3.1
Move to .Net Core 3.1
2020-01-01 13:30:20 -05:00
erikasne6152
72d2b5910a Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/lt/
2020-01-01 04:16:39 -05:00
marty
c62599f873 Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/lt/
2020-01-01 04:16:39 -05:00
dkanada
529cff3920 Merge pull request #2153 from dkanada/fix-playlist
Fix playlist deletion and a few warning fixes
2020-01-01 15:00:57 +09:00
dkanada
c10cb66169 remove directory check 2020-01-01 14:45:09 +09:00
gnattu
167549f5f1 Let HLS fallback to mpegts in case device reported unsupported container 2019-12-31 22:33:14 -05:00
dkanada
e476125cf8 Merge pull request #2208 from Bond-009/todo
Fix a couple of TODOs
2019-12-31 03:03:42 -08:00
marty
f672ecbac5 Translated using Weblate (Lithuanian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/lt/
2019-12-30 11:16:34 -05:00
Bond-009
49330e3082 Fix a couple of TODOs 2019-12-30 16:03:20 +01:00
Bond_009
ab57b504fe Delete user config dir on user deletion 2019-12-29 19:32:12 +01:00
Z Yang
49ce876c2c Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2019-12-28 17:16:32 -05:00
Allan
d7164d2eb7 Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2019-12-28 17:16:32 -05:00
dkanada
b3963058db Merge pull request #1891 from stanionascu/bdinfo-uhd
Upgrade BDInfo plugin to UHD/Atmos/DTS:X support
2019-12-28 04:16:45 +09:00
Odd Stråbø
5bf0eb2b0e Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nb_NO/
2019-12-25 19:16:26 -05:00
arg2009
ef62df69df Translated using Weblate (Indonesian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/id/
2019-12-24 05:16:25 -05:00
Bond_009
a41ec5c9d4 Fix typo 2019-12-23 15:29:30 +01:00
arg2009
a22f1dabb4 Added translation using Weblate (Indonesian) 2019-12-23 04:13:48 -05:00
Ben Magee
d1461b4238 Changed cast style as suggested, improved some member names to make them less ambiguous 2019-12-22 23:21:20 +00:00
Ben Magee
00c6d392a1 Added tests for FirstTimeSetupOrElevatedHandler 2019-12-22 23:18:42 +00:00
Ben Magee
ef75455178 Test RequiresElevationHandler for all roles 2019-12-22 22:54:46 +00:00
Ben Magee
8d06d0dbdf Removed unneeded dependency 2019-12-22 22:39:29 +00:00
Ben Magee
8c4e679ff4 PR style comments 2019-12-22 22:36:11 +00:00
Bond_009
f9a454628d Preformance!!! 2019-12-22 22:21:41 +01:00
Bond_009
cf2e2a3f30 Fix exceptions while scanning
Fixes these exceptions:
```
[2019-12-22 20:48:14.779 +01:00] [ERR] Error in WaitForExit
System.InvalidOperationException: No process is associated with this object.
   at System.Diagnostics.Process.EnsureState(State state)
   at System.Diagnostics.Process.EnsureState(State state)
   at System.Diagnostics.Process.GetWaitState()
   at System.Diagnostics.Process.WaitForExitCore(Int32 milliseconds)
   at System.Diagnostics.Process.WaitForExit(Int32 milliseconds)
   at Emby.Server.Implementations.Diagnostics.CommonProcess.WaitForExit(Int32 timeMs) in /home/pi/dev/jellyfin/Emby.Server.Implementations/Diagnostics/CommonProcess.cs:line 100
   at MediaBrowser.MediaEncoding.Encoder.MediaEncoder.StopProcess(ProcessWrapper process, Int32 waitTimeMs) in /home/pi/dev/jellyfin/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs:line 785
[2019-12-22 20:48:14.790 +01:00] [INF] Killing ffmpeg process
[2019-12-22 20:48:14.795 +01:00] [ERR] Error killing process
System.InvalidOperationException: No process is associated with this object.
   at System.Diagnostics.Process.EnsureState(State state)
   at System.Diagnostics.Process.EnsureState(State state)
   at System.Diagnostics.Process.Kill()
   at Emby.Server.Implementations.Diagnostics.CommonProcess.Kill() in /home/pi/dev/jellyfin/Emby.Server.Implementations/Diagnostics/CommonProcess.cs:line 95
   at MediaBrowser.MediaEncoding.Encoder.MediaEncoder.StopProcess(ProcessWrapper process, Int32 waitTimeMs) in /home/pi/dev/jellyfin/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs:line 799
[2019-12-22 20:48:14.808 +01:00] [ERR] Error in "ffprobe"
System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: $.streams[0].start_pts | LineNumber: 32 | BytePositionInLine: 26.
 ---> System.InvalidOperationException: Cannot get the value of a token type 'Number' as a string.
   at System.Text.Json.Utf8JsonReader.GetString()
   at System.Text.Json.Serialization.Converters.JsonConverterString.Read(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options)
   at System.Text.Json.JsonPropertyInfoNotNullable`4.OnRead(JsonTokenType tokenType, ReadStack& state, Utf8JsonReader& reader)
   at System.Text.Json.JsonPropertyInfo.Read(JsonTokenType tokenType, ReadStack& state, Utf8JsonReader& reader)
   at System.Text.Json.JsonSerializer.HandleValue(JsonTokenType tokenType, JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& state)
   at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack)
   --- End of inner exception stack trace ---
   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& readStack, Utf8JsonReader& reader, Exception ex)
   at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader& reader, ReadStack& readStack)
   at System.Text.Json.JsonSerializer.ReadCore(JsonReaderState& readerState, Boolean isFinalBlock, ReadOnlySpan`1 buffer, JsonSerializerOptions options, ReadStack& readStack)
   at System.Text.Json.JsonSerializer.ReadAsync[TValue](Stream utf8Json, Type returnType, JsonSerializerOptions options, CancellationToken cancellationToken)
   at MediaBrowser.MediaEncoding.Encoder.MediaEncoder.GetMediaInfoInternal(String inputPath, String primaryPath, MediaProtocol protocol, Boolean extractChapters, String probeSizeArgument, Boolean isAudio, Nullable`1 videoType, Boolean forceEnableLogging, CancellationToken cancellationToken) in /home/pi/dev/jellyfin/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs:line 399
   at MediaBrowser.Providers.MediaInfo.FFProbeVideoInfo.ProbeVideo[T](T item, MetadataRefreshOptions options, CancellationToken cancellationToken) in /home/pi/dev/jellyfin/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs:line 122
   at MediaBrowser.Providers.Manager.MetadataService`2.RunCustomProvider(ICustomMetadataProvider`1 provider, TItemType item, String logName, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) in /home/pi/dev/jellyfin/MediaBrowser.Providers/Manager/MetadataService.cs:line 815
```
2019-12-22 22:09:09 +01:00
Waldemar Tomme
57aec873d0 Add check if output container supports "global_header" flag 2019-12-22 13:01:18 +01:00
Ben Magee
f47c7959af Wrote tests to cover CustomAuthenticationHandler 2019-12-22 09:46:09 +00:00
Artiume
c2db45bad9 Merge pull request #5 from Artiume/revert-4-server-validation
Revert "Allow valid https requests in .NET Core"
2019-12-21 00:01:54 -05:00
Artiume
1bab76d80c Revert "Allow valid https requests in .NET Core" 2019-12-21 00:01:43 -05:00
Artiume
0e920a6d5f Update MediaInfoService.cs 2019-12-20 23:40:36 -05:00
Artiume
963b69c7b2 Update MediaInfoService.cs 2019-12-20 23:17:01 -05:00
Artiume
82911c8a20 Merge pull request #4 from stevehayles/server-validation
Allow valid https requests in .NET Core
2019-12-20 23:09:35 -05:00
Bond_009
b87750d8e0 Update vs code workspace 2019-12-20 21:50:15 +01:00
Bond_009
5751d86536 Fix warnings and move to System.Text.Json 2019-12-20 21:49:16 +01:00
Bond_009
5dc3874ebd Enable nullable reference types for Emby.Photos and Emby.Notifications
* Enable TreatWarningsAsErrors for Emby.Notifications
* Add analyzers to Emby.Notifications
2019-12-20 21:30:51 +01:00
David
94d3dda324 Refactor seriesId 2019-12-20 20:10:02 +01:00
David
d720d8f356 Add requested changes 2019-12-20 20:04:27 +01:00
Bond_009
7f5a174dff Merge branch 'master' into warn12 2019-12-20 19:43:57 +01:00
Artiume
6a6e02e1ec Merge pull request #3 from jellyfin/master
nightly, big one
2019-12-19 20:51:45 -05:00
Bond-009
137db45fc7 Apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-12-19 22:01:05 +01:00
David
ce8754d052 Refactor list of RemoteImageInfo 2019-12-19 19:58:00 +01:00
David
1f323683b3 Add requested changes 2019-12-19 18:59:55 +01:00
Bond-009
bb62dd14c2 Limit size for playbacktest 2019-12-19 17:46:17 +01:00
Vasily
06dfa2e687 Merge pull request #2134 from Bond-009/dlnam3u8
Fix comparison between different types
2019-12-19 18:51:51 +03:00
Bond-009
a5cd11735c Minor changes to MediaInfoService 2019-12-19 15:54:27 +01:00
David
eb12754fc5 Add Tmdb as a Provider for Season Images
Changes to be committed:
	modified:   CONTRIBUTORS.md
	new file:   MediaBrowser.Providers/Tmdb/TV/TmdbSeasonImageProvider.cs
	modified:   MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
2019-12-18 17:27:44 +01:00
Bond-009
5c9e849b85 Enable analyzers 2019-12-18 12:03:54 +01:00
Bond-009
a1ca50fd5a Merge branch 'namingtests' of https://github.com/Bond-009/jellyfin into namingtests 2019-12-18 11:53:41 +01:00
Bond-009
8723bdbb4f Fix tests 2019-12-18 11:52:32 +01:00
dkanada
bc7cbfb21a Merge pull request #1941 from Bond-009/mediaencoding
Make probesize and analyzeduration configurable and simplify circular dependencies
2019-12-18 08:54:40 +09:00
pagaiba
0f444c21e9 Translated using Weblate (Catalan)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ca/
2019-12-17 13:16:15 -05:00
Bond_009
742d84e53f Enable analyzers for Emby.Naming 2019-12-17 17:41:12 +01:00
Bond-009
91562a4392 Merge pull request #2155 from mark-monteiro/2149-jellyfin-drawing-skia-warnings
Jellyfin.Drawing.Skia Warnings and Analyzers
2019-12-17 17:39:35 +01:00
Bond-009
6b185119aa Merge branch 'master' into namingtests 2019-12-17 17:35:27 +01:00
Artiume
d2e9ce7644 Merge pull request #2 from jellyfin/master
refresh
2019-12-16 15:48:17 -05:00
Artiume
b626508bc8 Update Dockerfile 2019-12-16 15:23:43 -05:00
Artiume
f3e7c72bac Update MediaInfoService.cs 2019-12-16 15:22:18 -05:00
Artiume
b31f4ccbc2 Update MediaInfoService.cs 2019-12-16 14:53:42 -05:00
Óskar Freyr
db61a58c39 Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/is/
2019-12-16 12:16:14 -05:00
tanto faz
dda431dff1 Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/pt_BR/
2019-12-16 12:16:14 -05:00
Roland Vet
6fb7999a14 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2019-12-16 12:16:14 -05:00
Robin
a7a4974d95 Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2019-12-16 12:16:14 -05:00
schbal
c6851bd72c Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ko/
2019-12-16 12:16:14 -05:00
Artiume
5a9e08e0de Update Dockerfile 2019-12-16 01:26:36 -05:00
Artiume
4e43c70439 Update Dockerfile 2019-12-16 01:12:50 -05:00
Artiume
c96d3c35a0 Update Dockerfile 2019-12-16 01:09:45 -05:00
Artiume
0d571b3ad1 Update Dockerfile 2019-12-16 00:59:38 -05:00
Artiume
2457e43dec Update Dockerfile 2019-12-16 00:44:10 -05:00
Artiume
46442e24f8 Update MediaInfoService.cs 2019-12-16 00:43:03 -05:00
Artiume
3fb7aabfde Update MediaInfoService.cs 2019-12-16 00:40:25 -05:00
Artiume
64c313a8fb Update MediaInfoService.cs 2019-12-16 00:27:48 -05:00
Artiume
77fc77eb82 Update UserPolicy.cs 2019-12-15 23:59:46 -05:00
Artiume
1443583a41 Merge pull request #1 from Artiume/branch1
Update MediaInfoService.cs
2019-12-15 23:57:58 -05:00
Artiume
be956dfd02 Update MediaInfoService.cs 2019-12-15 23:52:07 -05:00
dkanada
61b9845e0f Merge pull request #2099 from cryptobank/master
Fix VAAPI encoding on 10-bit hevc. Update QSV encoding and scaling to...
2019-12-15 19:54:20 +09:00
cryptobank
d063300af4 Add space
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-15 20:35:52 +10:30
Bond-009
b8c61a5c40 Merge pull request #2146 from cromefire/patch-1
Fix invalid username handling
2019-12-15 10:07:22 +01:00
Joshua M. Boniface
d79242c3c7 Remove broken Microsoft SDK image (#2158)
* Remove broken Microsoft SDK image

This was not working; for some reason the Microsoft .NET Docker image
for 3.0 still had a 2.1 binary which was wreaking havoc. Replace it with
the manual download that all the other .deb packages use.

* Install missing dependency
2019-12-15 01:55:07 -05:00
dkanada
28e922326d remove space
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-15 13:38:59 +09:00
Mark Monteiro
3924df9c51 Move CA1032 rule to correct location 2019-12-14 23:35:28 +01:00
Neil Burrows
d9c0721e3d Reformatting code 2019-12-14 17:48:30 +00:00
Mark Monteiro
47805d89fe Set CA1032 (Implement standard exception constructors) severity to info globally
This replaces the existing [SurpressMessage] attribute
2019-12-14 16:01:24 +01:00
Mark Monteiro
4c30557527 Remove commented code 2019-12-14 15:48:35 +01:00
Mark Monteiro
f7eef1aa7f Use the correct verbiage for documenting thrown exceptions 2019-12-14 15:47:35 +01:00
dkanada
623e85a9e4 add suggested changes
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 22:34:18 +09:00
Bond-009
831d1daa68 Merge pull request #2152 from dkanada/progress
Track progress for any item that supports the feature
2019-12-14 14:06:13 +01:00
Mark Monteiro
c1c1672d0f Fix remaining StyleCop warnings 2019-12-14 12:20:52 +01:00
Mark Monteiro
c05933234a Enable TreatWarningsAsErrors flag is project file 2019-12-14 11:46:25 +01:00
Mark Monteiro
2c3e1b8562 Enable StyleCop analyzer and fix existing issues 2019-12-14 11:04:22 +01:00
Mark Monteiro
b8c8d45b8d Enable Serilog and multithreading analyzer 2019-12-14 10:53:54 +01:00
Bond-009
c824c564cd Move Emby.XmlTv to a NuGet package (#2042)
* Move Emby.XmlTv to a NuGet package

* Update Emby.Server.Implementations/Emby.Server.Implementations.csproj

Co-Authored-By: Anthony Lavado <anthonylavado@me.com>
2019-12-14 00:45:29 -05:00
dkanada
1b2453b4e9 fix playlist deletion 2019-12-14 12:51:27 +09:00
dkanada
02928128b9 track progress for any item that supports the feature 2019-12-14 11:36:06 +09:00
cryptobank
bafcadbe58 Use case insensitive contains (4)
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 11:27:43 +10:30
cryptobank
d0febd6c37 Use case insensitive contains (3)
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 11:27:43 +10:30
cryptobank
802a66a9e6 Use case insensitive contains (2)
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 11:27:43 +10:30
cryptobank
867b61025d Use case insensitive contains (1)
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 11:27:43 +10:30
cryptobank
f18d3ed33b Formatting fix (3)
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-12-14 11:27:41 +10:30
Óskar Freyr
c36467c496 Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/is/
2019-12-13 18:16:10 -05:00
Mark Monteiro
0cf9e59d5a Enable FxCop Analysis and fix issues 2019-12-13 21:17:05 +01:00
Mark Monteiro
88928118eb Add missing documentation in Jellyfun.Drawing.Skia 2019-12-13 20:57:23 +01:00
Bond_009
5a8e972952 Enable TreatWarningsAsErrors for some projects
Analyzers are only run in debug build, so setting TreatWarningsAsErrors
for release build will catch the compiler warnings until we resolve all
analyzer warnings.
2019-12-13 20:11:37 +01:00
Vasily
54dbdc695a Merge pull request #2138 from mark-monteiro/fix-episode-search
Fix Tvdb Provider Episode Search
2019-12-13 19:56:41 +03:00
dkanada
dc32050a2e Merge pull request #2142 from Bond-009/livetverrormsg
Add improved error message for #2141
2019-12-13 23:33:59 +09:00
Cromefire_
7e987b9642 Remove whitespace
Co-Authored-By: Claus Vium <cvium@users.noreply.github.com>
2019-12-13 15:30:08 +01:00
Cromefire_
6231fc18ea Fixed invalid username handling 2019-12-13 15:27:12 +01:00
Neil Burrows
55317b5c74 Fixing index error & split out code for readability 2019-12-13 13:45:20 +00:00
Neil Burrows
12bb4a92eb Tidying up code 2019-12-13 11:08:19 +00:00
Neil Burrows
554c967dd6 Add Excluded Tags using SQLite parameters 2019-12-13 10:29:38 +00:00
Mark Monteiro
a2462704d1 Add self to Jellyfin contributors 2019-12-12 17:48:41 +01:00
Bond-009
a4ca259a64 Add improved error error for #2141 2019-12-12 17:25:58 +01:00
Bond-009
6464bca791 Use extension methods 2019-12-12 17:02:42 +01:00
Bond-009
2c0259f920 Replace '_' with ':' in config keys 2019-12-12 16:57:16 +01:00
Bond-009
baadb504bb Merge branch 'master' into mediaencoding 2019-12-12 16:34:34 +01:00
dkanada
96a5dda9ff Merge pull request #2109 from Bond-009/plugin
Fix plugin installation and correct api behaviour
2019-12-12 15:40:22 +09:00
Joshua M. Boniface
9744f5aee3 Merge pull request #2118 from chaosinnovator/master
Add StartIndex result to /Items API query
2019-12-11 23:42:02 -05:00
Mark Monteiro
421092b478 Clean up checks for Dictionary keys 2019-12-11 23:48:41 +01:00
Mark Monteiro
1e0967f43c Fix issue with episode search 2019-12-11 23:47:51 +01:00
Bond_009
2ef4ffd698 More warnings (removed) 2019-12-11 00:13:57 +01:00
Bond_009
0bf8bfbb0c Merge branch 'master' into mediaencoding 2019-12-10 23:00:59 +01:00
chaosinnovator
b98e25a07e Add StartIndex result to /Items API query 2019-12-10 09:30:44 -08:00
Bond-009
b20b648659 Fix comparison between different types 2019-12-10 17:25:21 +01:00
dkanada
f1fc6ef59f Merge pull request #2106 from Bond-009/docker
Fix ubuntu x64 docker build
2019-12-11 01:15:31 +09:00
dkanada
67922dff50 Merge pull request #2041 from Bond-009/warn11
Fix more warnings
2019-12-11 01:14:55 +09:00
dkanada
2a7210ca28 Merge pull request #2133 from Bond-009/loggerfix
Fix typo
2019-12-11 01:13:09 +09:00
Bond-009
19844a2c2a Fix typo 2019-12-10 17:07:23 +01:00
Bond-009
affb58ef9e Apply suggestions from code review
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-12-10 16:22:03 +01:00
dkanada
dee3076eaf Merge pull request #1923 from Bond-009/random
Don't shuffle some types by default
2019-12-10 22:28:44 +09:00
dkanada
b5d0bd0d76 Merge pull request #2020 from Bond-009/baseurl
Add support for multi segment base urls
2019-12-10 22:11:32 +09:00
gustinn
1b5da55ae5 Translated using Weblate (Icelandic)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/is/
2019-12-09 21:16:05 -05:00
Michael Berggren
f25c1e40d4 Translated using Weblate (Swedish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sv/
2019-12-09 21:16:05 -05:00
nextlooper42
cf1eb2798c Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sk/
2019-12-09 21:16:05 -05:00
translit
7d4c4c369e Translated using Weblate (Russian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ru/
2019-12-09 21:16:05 -05:00
tanto faz
f0dbcfca6e Translated using Weblate (Portuguese (Brazil))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/pt_BR/
2019-12-09 21:16:05 -05:00
Matzi24GR
52f31775fc Translated using Weblate (Greek)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/el/
2019-12-09 21:16:05 -05:00
antoniy
4fa8f9ccfe Translated using Weblate (Bulgarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bg/
2019-12-09 21:16:05 -05:00
Petr Janda
1cec41baf8 Merge remote-tracking branch 'upstream/master' 2019-12-07 20:21:24 +10:30
Bond_009
ec70f3ac75 Fix plugin installation and correct api behaviour
The `/Packages/{Name}` endpoint would return a package that had either
the corrent name or the correct guid. In reality it shoud check if both
are correct.
2019-12-06 22:06:16 +01:00
Bond_009
c8f403238e Move to .Net Core 3.1 2019-12-06 21:28:47 +01:00
cryptobank
408cf017a4 Remove newline
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-12-07 06:48:44 +10:30
cryptobank
5b5d527a09 Use string.Equals instead of of equals operator
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-12-07 06:47:57 +10:30
cryptobank
68edb9734d Add space between if statement and boolean expression
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-12-07 06:46:24 +10:30
Joshua M. Boniface
6f283d80dc Merge pull request #2104 from cvium/avoid_catastrophic_backtracking
Simplify regex to avoid catastrophic backtracking
2019-12-06 15:13:23 -05:00
Bond_009
803ec15150 Fix ubuntu x64 docker build 2019-12-06 21:08:11 +01:00
Bond_009
35151553e3 Add back all old emby tests 2019-12-06 20:41:39 +01:00
Claus Vium
8befab5b5d Simplify regex to avoid catastrophic backtracking 2019-12-06 20:21:18 +01:00
Bond-009
a2c35e6dba Merge remote-tracking branch 'upstream/master' into random 2019-12-06 12:06:13 +01:00
Bond-009
94edb5b9f9 Add else 2019-12-06 11:58:45 +01:00
Vasily
935525e77a Merge pull request #2102 from jellyfin/Bond-009-plugins
Add installed plugins to bug reports
2019-12-06 12:53:42 +03:00
Petr Janda
75426d0004 Add logging when force_key_frames is disabled 2019-12-06 17:21:24 +10:30
Petr Janda
3f43aef997 Add back code removed during testing/debugging 2019-12-06 16:04:29 +10:30
Petr Janda
535390bb64 QSV can hardware deinterlace too now 2019-12-06 06:30:09 +10:30
Petr Janda
a9766992b7 Do not force original aspect ratio to decrease, it causes bitmap subtitles to be off-centre 2019-12-06 06:08:45 +10:30
Petr Janda
9ee0804407 Move scaling filters and definitions before deinterlacing 2019-12-06 05:52:40 +10:30
Petr Janda
7d2bfabb32 Force original aspect ratio can be used for QSV subtitle scaling 2019-12-06 05:12:16 +10:30
Petr Janda
8368815788 Remove trailing spaces 2019-12-06 05:03:46 +10:30
memnos
caa57d5bda Translated using Weblate (Italian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/it/
2019-12-05 13:29:41 -05:00
gustinn
8694577c71 Added translation using Weblate (Icelandic) 2019-12-05 13:29:41 -05:00
Bond-009
8718e1ea6b Add installed plugins to bug reports 2019-12-05 18:30:56 +01:00
Bond-009
5f6bca8aeb Merge remote-tracking branch 'upstream/master' into baseurl 2019-12-05 17:49:15 +01:00
Bond-009
a6f883345f Reduce #lines 2019-12-05 17:44:46 +01:00
Vasily
e05c02263a Merge pull request #2097 from Bond-009/unused2
Remove unused fields and properties
2019-12-05 12:06:14 +03:00
Vasily
e41dd316d1 Merge pull request #2098 from Bond-009/config2
Fix GetTranscodePath function and cache path update logline
2019-12-05 12:05:46 +03:00
Petr Janda
7cde256402 Merge remote-tracking branch 'upstream/master' 2019-12-05 19:29:20 +10:30
WtK0040
82575db662 Translated using Weblate (Afrikaans)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/af/
2019-12-05 03:57:07 -05:00
Pavel Sochor
fccc90ae1a Translated using Weblate (Slovak)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/sk/
2019-12-05 03:57:07 -05:00
Yuval Pecht
fc4bbee39f Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2019-12-05 03:57:07 -05:00
bugthug
9144c84dc9 Translated using Weblate (Hebrew)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/he/
2019-12-05 03:57:07 -05:00
TheGoose
5234c686e7 Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/en_US/
2019-12-05 03:57:07 -05:00
Dominik
7d2f066cd4 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/de/
2019-12-05 03:57:07 -05:00
woodmichl
383733044f Translated using Weblate (German)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/de/
2019-12-05 03:57:07 -05:00
Petr Janda
70530e1f14 Fix formatting (2) 2019-12-05 19:20:47 +10:30
Petr Janda
3d8f3da5d6 Add comments 2019-12-05 18:39:09 +10:30
Petr Janda
78a161138f Fix formatting stuffed up by previous commit 2019-12-05 18:07:46 +10:30
Petr Janda
89605d4fb1 Fix VAAPI encoding on 10-bit hevc. Update QSV encoding and scaling to take advantage of scale_qsv and overlay_qsv 2019-12-05 17:39:36 +10:30
dkanada
a7ef1aa7ec Merge pull request #2050 from Bond-009/nullref
Fix possible nullref when updating packages
2019-12-05 15:23:48 +09:00
Bond_009
4a0df15bbd Fix GetTranscodePath function and cache path update logline
* GetTranscodePath returned an empty string after the option was left
blank in the web UI
* Unified the log style for all paths
2019-12-04 22:18:37 +01:00
Bond_009
f7d71a2bc7 Remove unused fields and properties 2019-12-04 21:53:01 +01:00
Bond_009
5cab79c839 Clean up Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs 2019-12-04 21:39:27 +01:00
Vasily
e44a7ae3f6 Merge pull request #2073 from Bond-009/networkcode
Minor improvements to network code
2019-12-04 20:03:10 +03:00
WtK0040
903752b77b Translated using Weblate (English (United States))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/en_US/
2019-12-04 02:25:32 -05:00
WtK0040
df10cf8012 Added translation using Weblate (Afrikaans) 2019-12-03 07:59:34 -05:00
Bond-009
caca2b31fe Fix build 2019-12-03 10:55:22 +01:00
Bond-009
01c5dcea77 Merge pull request #2082 from excelite/add_centralized_logging_support
added required nuget package to enable serilog based centralized logging in gelf format
2019-12-03 09:12:03 +01:00
Bond-009
7765b43eea Merge pull request #2089 from escabe/fix2088
Fix #2088
2019-12-02 14:22:26 +01:00
dkanada
203bf7b794 Merge pull request #2052 from EraYaN/azp-tag-checkout-windows
Add tag building support to Windows Web build.
2019-12-02 18:23:22 +09:00
KingsFourze
a7461f3ba7 Translated using Weblate (Chinese (Hong Kong))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant_HK/
2019-12-01 23:15:46 -05:00
EscAbe
3b7b8eba4c Fix for #2088 2019-12-01 20:50:24 +01:00
Bond-009
84c136b1f2 Update Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs
Co-Authored-By: Claus Vium <cvium@users.noreply.github.com>
2019-12-01 19:30:18 +01:00
penguinfuko
28f71b445f Translated using Weblate (Chinese (Traditional))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hant/
2019-11-30 05:15:47 -05:00
Mehmet Can Kanpolat
be14b91f23 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/tr/
2019-11-30 05:15:47 -05:00
excelite
12dd2c51a7 added required nuget package to enable serilog based centralized logging in gelf fromat 2019-11-29 23:03:59 +01:00
Vasily
8f56baf6d9 Merge pull request #2071 from excelite/add_default_values_to_logconfig
add filesize limit for logfiles and a maximum logfile count
2019-11-29 18:55:50 +03:00
Vasily
32519a5471 Merge pull request #2058 from ferferga/master
Add full Raspberry Pi hardware accelerated decoding support
2019-11-29 13:06:06 +03:00
Bond-009
6f45d95951 Minor improvements to network code 2019-11-28 17:46:06 +01:00
excelite
60691349a1 added filesize limit for logfiles and a maximum logfile count 2019-11-28 11:20:46 +01:00
Bond_009
42ffddc269 Fix more warnings 2019-11-27 16:29:56 +01:00
Vasily
f3ca4631c3 Merge pull request #2062 from Bond-009/docker
Use .Net Core 3.0 in all docker images
2019-11-27 16:20:41 +03:00
Vasily
5263aaa026 Merge pull request #1503 from cvium/webapi_v2
Move StartupWizard to ASP.NET Web Api
2019-11-27 11:50:06 +03:00
Vasily
c45d54efb2 Merge pull request #1942 from Bond-009/nullable
Enable nullable reference types for Jellyfin.Server
2019-11-27 11:48:41 +03:00
Mehmet Can Kanpolat
1606706070 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/tr/
2019-11-26 11:15:39 -05:00
Leo Verto
22f50de1fe Translated using Weblate (German)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/de/
2019-11-26 11:15:39 -05:00
dkanada
5bb6e605fa Merge pull request #2054 from jellyfin/Bond-009-dlna-getpathvalue
dlna GetPathValue
2019-11-26 18:43:49 +09:00
dkanada
3dc1bfc179 Merge pull request #2049 from jellyfin/dkanada-patch-1
Update readme
2019-11-26 18:41:01 +09:00
Claus Vium
080b106991 Update Jellyfin.Api/Auth/FirstTimeSetupOrElevatedPolicy/FirstTimeSetupOrElevatedRequirement.cs
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-11-26 10:20:45 +01:00
Bond-009
50a535e6e4 Use .Net Core 3.0 in all docker images 2019-11-26 09:47:26 +01:00
ferferga
94ef239de0 Add full Raspberry Pi hardware decoding support 2019-11-25 23:09:23 +01:00
dkanada
65ae4eb0dd fix some html tags in the readme 2019-11-26 00:32:14 +09:00
Bond-009
c6d48f51f6 Fix naming const 2019-11-25 12:29:51 +01:00
Vasily
47e6eede71 Merge pull request #2055 from Bond-009/fixbuild
Fix master build
2019-11-25 14:17:56 +03:00
Bond_009
cc5acf37f7 Make probesize and analyzeduration configurable and simplify circular
dependencies

Makes the probesize and analyzeduration configurable with env args.
(`JELLYFIN_FFmpeg_probesize` and `FFmpeg_analyzeduration`)
2019-11-25 12:07:59 +01:00
Bond_009
3221e837f9 * Add support for multi segment base urls
* Make baseurl case-insensitive
2019-11-25 11:55:24 +01:00
Bond-009
a4c2886ac0 Fix master build
I was wrong, it did break...
2019-11-25 11:04:51 +01:00
Bond-009
69d76af054 dlna GetPathValue
Forgot to update this last time, just copied the code from `MediaBrowser.Api/BaseApiService.cs`
2019-11-25 10:56:23 +01:00
Madokami
e7098f1997 Translated using Weblate (German)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/de/
2019-11-24 21:18:03 -05:00
Erwin de Haan
f12c9bf3b0 Added tag building support to Windows Web build. 2019-11-24 23:01:18 +01:00
Mehmet Can Kanpolat
afa1d6b708 Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/tr/
2019-11-24 16:15:35 -05:00
Joshua M. Boniface
48120d01dc Merge pull request #1991 from Bond-009/transtemp
Don't append transcodes to transcoding temp path
2019-11-24 15:13:50 -05:00
Bond-009
e808e8b2d2 Update MediaBrowser.Common/Configuration/EncodingConfigurationExtensions.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-11-24 20:15:53 +01:00
Joshua M. Boniface
db581c4d9b Merge pull request #2045 from Bond-009/baseurlfix2
Fix baseurl issues part 2
2019-11-24 13:25:52 -05:00
Claus Vium
47a4f2f387 Fix more review comments 2019-11-24 19:25:46 +01:00
Claus Vium
2af5922af0 Fix review comments 2019-11-24 18:25:43 +01:00
Bond_009
6a6bfa6da9 Fix possible nullref when updating packages 2019-11-24 17:23:36 +01:00
Claus Vium
27e3cf1558 Move appbuilder and service collection to Jellyfin.Server 2019-11-24 15:27:58 +01:00
dkanada
47ad21b6e3 Merge pull request #2039 from Bond-009/fixcondition
Fix always false condition
2019-11-24 21:41:19 +09:00
dkanada
6889d09cf7 Merge pull request #2040 from Bond-009/https
Validate https certificates
2019-11-24 21:41:03 +09:00
dkanada
dbda76e842 Update readme 2019-11-24 21:27:43 +09:00
Bond_009
602ebe3fdb Fix baseurl (attempt #2) 2019-11-23 22:50:37 +01:00
Claus Vium
111b46599a Remove unused reference 2019-11-23 20:46:01 +01:00
Claus Vium
c2cdbc909b Add style rules and fix it all 2019-11-23 20:31:17 +01:00
Claus Vium
c9669a0d21 Split a long line 2019-11-23 19:59:45 +01:00
Claus Vium
706739dbe6 Move API stuff to the api project 2019-11-23 19:43:30 +01:00
Claus Vium
3f651de24c Add authentication and remove versioning 2019-11-23 16:31:02 +01:00
dkanada
51cdc6ea16 Merge pull request #1926 from Bond-009/auth
Add clearer exceptions, warnings and docs
2019-11-23 01:14:32 +09:00
Bond_009
d7335f6ae6 Reword exception message 2019-11-22 17:02:28 +01:00
Vasily
7b3c394a3e Merge pull request #1967 from Bond-009/warn10
Fix some warnings
2019-11-22 18:29:17 +03:00
Bond_009
526776372e Validate https certificates 2019-11-22 16:23:42 +01:00
Bond_009
d884ed353f Fix always false condition 2019-11-22 16:19:19 +01:00
Bond_009
06596feaa7 Address comments 2019-11-22 16:15:31 +01:00
Bond-009
b477b3874e Fix some warnings 2019-11-22 16:15:31 +01:00
Vasily
7846e9cb3c Merge pull request #1977 from Bond-009/deps
Update deps
2019-11-22 15:53:34 +03:00
Vasily
ace45fb3f6 Merge pull request #1968 from Bond-009/CA1720
Disable CA1720: Identifiers should not contain type names
2019-11-22 14:14:51 +03:00
Vasily
13dd63d631 Merge pull request #2034 from Bond-009/easypass
Fix easy password
2019-11-22 11:17:24 +03:00
AdmiralAnimE
883011dd64 Translated using Weblate (Bulgarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/bg/
2019-11-21 12:15:31 -05:00
Bond-009
413ae86dbc Fix easy password 2019-11-21 17:32:29 +01:00
Bond_009
3cf9313c86 Update deps 2019-11-21 17:08:06 +01:00
Bond-009
d4b438791f Don't append transcodes to transcoding temp path 2019-11-21 16:57:49 +01:00
Bond-009
d868a8da6c Merge pull request #1934 from dkanada/transcode
Minor changes to transcode cleanup scheduled task
2019-11-21 16:18:46 +01:00
dkanada
37eed8cf1f revert settings to their old names 2019-11-21 21:55:10 +09:00
dkanada
b1f9b03b17 rename some missed variables and fix warnings 2019-11-21 21:55:10 +09:00
dkanada
f3ca37e523 minor changes to transcode cleanup scheduled task 2019-11-21 21:55:10 +09:00
Claus Vium
05b7e22808 Add SwaggerUI 2019-11-19 22:51:02 +01:00
Claus Vium
c011fa2ea8 Remove old instantiation of serviceProvider in app host 2019-11-19 21:49:20 +01:00
Claus Vium
e5d57bd82f Move StartupWizard to ASP.NET Web Api 2019-11-19 21:48:16 +01:00
Joshua M. Boniface
c0d10800ab Merge pull request #1925 from joshuaboniface/integrate-web-build-debuntu
Integrate web build into Debuntu package build steps
2019-11-19 01:37:38 -05:00
Vasily
a8c878f48c Merge pull request #2016 from joshuaboniface/stalebot-wording
Update stalebot timings and message
2019-11-18 13:59:57 +03:00
Vasily
0836241e90 Merge pull request #2019 from Bond-009/baseurlhotfix
Remove leading / from baseurl
2019-11-18 13:55:56 +03:00
Joshua M. Boniface
84009b534d Merge pull request #1937 from justinfenn/docker-entrypoint-exec
use exec form for Dockerfile entrypoint
2019-11-17 17:29:55 -05:00
Stanislav Ionascu
9989b7b68f Replace BDInfo plugin with nupkg and UHD/Atmos/DTS:X support 2019-11-17 20:56:13 +01:00
Joshua M. Boniface
78e0afae2f Merge pull request #1992 from Bond-009/namingtests
Fix naming tests
2019-11-17 13:55:27 -05:00
Bond_009
5ee070eb29 Remove leading / from baseurl 2019-11-17 19:53:12 +01:00
Joshua Boniface
6c7b592131 Update stalebot timings and message
1. Bump up the timings, since the project releases have slowed down a
   fair bit. 120 days stale with 21 days for a response still gets us
   the desired effect while loosening the timeline for issue submitters.
2. Revamp the wording to better explain what the author (or others) need
   to do, and why this bot exists.
2019-11-17 12:24:27 -05:00
dkanada
c87f459ec2 Merge pull request #2008 from Bond-009/pathvalue
Fix GetPathValue function
2019-11-16 01:25:20 +09:00
Bond-009
d161b9cbfc Fix GetPathValue function for DLNA service 2019-11-13 16:40:34 +01:00
Bond-009
aea4ef9471 Fix logic 2019-11-13 16:32:33 +01:00
Bond-009
b14d6d0417 Fix GetPathValue function 2019-11-13 16:32:33 +01:00
Andrew Mahone
dee247453e Throw InvalidOperationException when attachment extraction exits abnormally or doesn't produce output. 2019-11-13 08:52:37 -05:00
dkanada
0b02c77691 Merge pull request #1864 from Bond-009/installationmanager
Improve IInstallationManager interface
2019-11-13 21:12:52 +09:00
dkanada
f51f59d675 Merge pull request #1965 from Bond-009/dbjson
Deserialize with the correct type (and warning fixes)
2019-11-10 16:51:54 +09:00
Sander Lambrechts
522df3196d Translated using Weblate (Dutch)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nl/
2019-11-09 18:15:12 -05:00
DJSweder
92b6d84433 Translated using Weblate (Czech)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/cs/
2019-11-09 18:15:12 -05:00
Bond_009
dd749dde5f Add comment 2019-11-09 20:26:56 +01:00
Bond_009
03fe0e762d Fix typos in docs 2019-11-09 20:23:09 +01:00
Bond_009
a2df6e0e36 Fix naming tests 2019-11-08 19:59:48 +01:00
Andrew Mahone
7ea05bb86b Merge branch 'media-attachments' of github.com:Unhelpful/jellyfin into media-attachments 2019-11-07 14:30:43 -05:00
Andrew Mahone
79858eb26c Remove use of ProcessFactory, as well as arbitrary timeout in AttachmentExtractor. 2019-11-07 14:24:49 -05:00
dkanada
61b9b4046a Merge pull request #1929 from Narfinger/parser-fix4
[Draft][Help wanted] Fix parsing of certain names and adds a default season if no season was found
2019-11-08 02:14:01 +09:00
Andrew Mahone
3a9bf84e3b Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 12:00:47 -05:00
Andrew Mahone
1eb3df1d6c Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
formatting / style

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:59:54 -05:00
Andrew Mahone
380d023351 Merge branch 'media-attachments' of github.com:Unhelpful/jellyfin into media-attachments 2019-11-07 11:58:13 -05:00
Andrew Mahone
2f728fd2a1 Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:58:26 -05:00
Andrew Mahone
2338a53229 Don't user ILoggerFactory. 2019-11-07 11:55:39 -05:00
Andrew Mahone
c6855e6a2a Simplify AttachmentExtractor instantiation. 2019-11-07 11:53:39 -05:00
Andrew Mahone
743685110c Update MediaBrowser.Controller/Library/IMediaSourceManager.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:29:34 -05:00
Andrew Mahone
0fd7886a12 Update MediaBrowser.Controller/Library/IMediaSourceManager.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:28:11 -05:00
Andrew Mahone
d73f46dcda Update Emby.Server.Implementations/Library/MediaSourceManager.cs
docs

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:27:55 -05:00
Andrew Mahone
492bbc9e13 Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
String -> string

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:25:44 -05:00
Andrew Mahone
92aae268a3 Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:24:53 -05:00
Andrew Mahone
8b2d7062c4 Update Emby.Server.Implementations/Library/MediaSourceManager.cs
docs

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:24:30 -05:00
Andrew Mahone
193a1fa474 Update Emby.Server.Implementations/Library/MediaSourceManager.cs
docs

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:23:28 -05:00
Andrew Mahone
d6aa02ff09 Update Emby.Server.Implementations/Data/SqliteItemRepository.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:22:07 -05:00
Andrew Mahone
4b75e6518e Update MediaBrowser.Api/Attachments/AttachmentService.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:21:40 -05:00
Andrew Mahone
f60e9b0b62 formatting
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-07 11:20:29 -05:00
Andrew Mahone
c09eb34708 Check for attachment file before trying to remove it during cleanup. 2019-11-07 08:56:12 -05:00
Andrew Mahone
6defe80b62 Check for cancellation between each batch of MediaAttachment inserts. 2019-11-07 08:38:36 -05:00
dkanada
b103aa20c1 Merge pull request #1970 from Bond-009/nat
Use Mono.Nat Nuget package
2019-11-07 18:56:46 +09:00
Bond-009
126165080b Doc improvements 2019-11-07 10:55:02 +01:00
Bond-009
983d38a43b Merge branch 'master' into installationmanager 2019-11-07 10:50:55 +01:00
Terrance Siu
2779d9d3bc Translated using Weblate (Chinese (Simplified))
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/zh_Hans/
2019-11-07 04:15:06 -05:00
dkanada
ad852ffd9a Merge pull request #1973 from EraYaN/docs-warning-fixes
Fix the last of the docs warnings
2019-11-07 18:12:26 +09:00
Narfinger
9cd62d661f removed restriction to 3 digits in episodenumber and 4 in season numbers 2019-11-07 10:50:02 +09:00
Andrew Mahone
74fb63a898 Use block rather than local using statement. 2019-11-06 10:43:14 -05:00
Andrew Mahone
4f3b883155 Clean up handling of missing source/attachment in AttachmentExtractor. 2019-11-06 09:46:31 -05:00
Andrew Mahone
79bbf09ecb Revert "Simplify AttachmentExtractor instantiation."
This reverts commit d33e0a4e2c.
2019-11-06 08:43:49 -05:00
Andrew Mahone
8505ee9d6c Extract the prefix for MediaAttachment insertions to a static member instead of generating it per-query. 2019-11-05 14:53:46 -05:00
Andrew Mahone
cc7741efd4 Merge branch 'media-attachments' of github.com:Unhelpful/jellyfin into media-attachments 2019-11-05 08:35:42 -05:00
Andrew Mahone
3602251cf5 Update Emby.Server.Implementations/Data/SqliteItemRepository.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:36:17 -05:00
Andrew Mahone
a78aec56e3 Format attachment DeliveryURL with CultureInfo.InvariantCulture.
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:21:06 -05:00
Andrew Mahone
e5b65ed034 Update Emby.Server.Implementations/Data/SqliteItemRepository.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:19:07 -05:00
Andrew Mahone
cdc7d83c22 Merge branch 'media-attachments' of github.com:Unhelpful/jellyfin into media-attachments 2019-11-05 08:18:04 -05:00
Andrew Mahone
d33e0a4e2c Simplify AttachmentExtractor instantiation.
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:17:34 -05:00
Andrew Mahone
349310787c Update MediaBrowser.MediaEncoding/Attachments/AttachmentExtractor.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:16:46 -05:00
Andrew Mahone
25bc7b81c3 Update Emby.Server.Implementations/Data/SqliteItemRepository.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:13:35 -05:00
Andrew Mahone
24a460dc93 Update Emby.Server.Implementations/Data/SqliteItemRepository.cs
formatting

Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-11-05 08:13:22 -05:00
Andrew Mahone
b936c530aa Merge branch 'media-attachments' of github.com:Unhelpful/jellyfin into media-attachments 2019-11-05 08:13:15 -05:00
Andrew Mahone
bd4da93d1e Throw ArgumentException instead of ArgumentNullException on empty Guid. 2019-11-05 07:48:32 -05:00
Andrew Mahone
6ca252ba5c Remove check for "[0]" in codec_tag. 2019-11-05 07:09:55 -05:00
Andrew Mahone
28a6718d8e Return path of extracted attachment, which is always a file, instead of AttachmentInfo with path and protocol. 2019-11-04 14:48:28 -05:00
Andrew Mahone
04a96788f9 Convert exceptions for missing MediaSource or MediaAttachment to ResourceNotFoundException with appropriate message. 2019-11-04 14:34:21 -05:00
Andrew Mahone
154fb1fe9b AttachmentExtractor code cleanup. 2019-11-04 11:45:31 -05:00
Andrew Mahone
c7d303a6ae MediaExtractor logging cleanup. 2019-11-04 11:39:40 -05:00
Andrew Mahone
262a8f47af Remove attachment filenames from attachment URLs. 2019-11-04 11:31:41 -05:00
Andrew Mahone
9eef5f860d AttachmentExtractor logging cleanup. 2019-11-04 11:16:57 -05:00
Andrew Mahone
e9c893f07e Fail attachment extraction on non-zero exit code. 2019-11-04 10:58:56 -05:00
Andrew Mahone
bd545891c0 Indentation fix. 2019-11-04 10:38:53 -05:00
Andrew Mahone
7110069b39 Return list result directly for MediaAttachments. 2019-11-04 10:37:19 -05:00
Andrew Mahone
ad2101ce52 Rename "limit" to "insertAtOnce" in InsertMediaAttachments. 2019-11-04 10:33:50 -05:00
Andrew Mahone
c2d8f210b1 Check for cancellation in SaveMediaAttachments. 2019-11-04 10:31:32 -05:00
Andrew Mahone
0dde5e46df Flatten using connection in GetMediaAttachments/SaveMediaAttachments 2019-11-04 10:28:33 -05:00
Andrew Mahone
4573fb5301 Use ToByteArray instead of ToGuidBlob. 2019-11-04 10:19:53 -05:00
Andrew Mahone
1600d5b53f Merge remote-tracking branch 'origin/master' into media-attachments-clean 2019-11-04 10:03:18 -05:00
Andrew Mahone
90dfe729bb Add space when building query string for attachments.
Co-Authored-By: Vasily <JustAMan@users.noreply.github.com>
2019-11-04 08:48:27 -05:00
Joshua M. Boniface
9756bdb76e Merge pull request #1903 from anthonylavado/nsis-update
Update NSIS Installer
2019-11-03 14:36:56 -05:00
Joshua M. Boniface
a460814182 Merge pull request #1904 from JustAMan/hls-move-2
Switch ffmpeg to hls muxer (from segment) to fix premature stop on non-patched ffmpeg
2019-11-03 14:36:34 -05:00
Joshua M. Boniface
5d5fa55fe5 Merge pull request #1859 from joshuaboniface/copr-fix
Fix COPR build and Fedora packaging
2019-11-03 14:05:13 -05:00
Joshua Boniface
d4474d493b Remove extraneous newline 2019-11-03 12:39:45 -05:00
Erwin de Haan
f0e2f243ad Conform MovieResult.cs to the formatting standards. 2019-11-03 17:55:46 +01:00
Erwin de Haan
45a670f15b Revert the project inclusion that created a cycle. 2019-11-03 16:40:35 +01:00
Erwin de Haan
387051c409 Fix the last docs warnings. 2019-11-03 15:52:10 +01:00
Anthony Lavado
e877ef92d7 Always download the latest tray app release 2019-11-03 02:51:29 -05:00
Bond_009
210af0e73e Properly remove event handler 2019-11-02 10:31:27 +01:00
Joshua Boniface
fd4a9d13b7 Update path of SOS readme
Seems like this changed upstream as it's not our file.
2019-11-02 01:34:43 -04:00
Joshua Boniface
4fc2bd56ee Add master fallback for web build 2019-11-02 01:24:26 -04:00
Joshua Boniface
e40c82be88 REVERT-ME Update to .NET 3.0 2019-11-02 01:17:12 -04:00
Juhos István
0f769fe979 Translated using Weblate (Hungarian)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/hu/
2019-11-02 00:14:59 -04:00
Bond_009
558baeac48 Add docs 2019-11-01 21:25:37 +01:00
Bond_009
b0a25c4237 Use Mono.Nat Nuget package 2019-11-01 21:22:35 +01:00
Joshua M. Boniface
33ddca12ed Merge pull request #1969 from jellyfin/stale-bread
Add an exemption for the confirmed label
2019-11-01 16:11:17 -04:00
Anthony Lavado
3a741936c5 Add an exemption for the confirmed label
Adds an exemption we can use to keep issues open when they are confirmed/real
2019-11-01 16:06:00 -04:00
dkanada
3bfb36a67d Merge pull request #1915 from Bond-009/hex
Rewrite hex encoder/decoder
2019-11-02 04:03:36 +09:00
Bond_009
28df726c33 Disable CA1720: Identifiers should not contain type names 2019-11-01 18:45:16 +01:00
dkanada
48a99366b6 Merge pull request #1789 from Bond-009/deps
Update deps and add MultiThreading analyzer
2019-11-02 02:07:20 +09:00
Bond_009
81c135c5bb Fix PR issues 2019-11-01 17:57:19 +01:00
Bond_009
d529f81cd9 Improve IInstallationManager interface 2019-11-01 17:57:19 +01:00
Bond_009
5e0858d13f Fix xml docs 2019-11-01 17:55:44 +01:00
Bond_009
3f7836d9eb Update deps and add MultiThreading analyzer 2019-11-01 17:55:44 +01:00
Bond_009
60cb256835 Fix benches 2019-11-01 17:52:29 +01:00
Bond_009
593107e190 Multiplication is faster than bit shifting 2019-11-01 17:52:29 +01:00
Bond_009
b6627af65f Make decode even faster 2019-11-01 17:52:29 +01:00
Bond_009
a245f5a0d4 Rewrite hex encoder/decoder 2019-11-01 17:52:29 +01:00
dkanada
89a21c96c0 Merge pull request #1852 from Bond-009/warn9
Fix some more warnings
2019-11-02 01:24:44 +09:00
Bond_009
846857b60e Deserialize with the correct type (and warning fixes) 2019-11-01 17:07:42 +01:00
Bond-009
92abc202a4 Style fix 2019-11-01 16:42:47 +01:00
Bond-009
443422ddb4 Merge pull request #1931 from grafixeyehero/PersonServies
update persons service
2019-11-01 16:38:54 +01:00
Bond-009
43f51b2d90 Fix build 2019-11-01 16:35:44 +01:00
Anthony Lavado
57cf3e24f8 Use the correct file copy operation for the icon 2019-11-01 01:55:09 -04:00
Anthony Lavado
0c003feac6 Fix an incorrect argument type in build script 2019-11-01 01:25:45 -04:00
Steve Hayles
da9a59de1e Allow valid https requests in .NET Core
ServerCertificateValidationCallback on the ServicePointManager is not supported in .NET Core and outgoing https requests will fail if the certificate is not trusted.

This adds the equivalent functionality
2019-10-31 18:48:34 +00:00
Anthony Lavado
bde1af5def Add the tray app download to the build script, use it in the installer shortcuts
Adds the tray app download to build-jellyfin, adjusts the shortcuts in the installer, and adds the switch to the pipeline configuration.
2019-10-30 18:16:31 -04:00
Thomas Büttner
e6e9cd8ce2 Remove the SPEC edit hack, replace with proper repos (#7)
* Remove the SPEC edit hack, replace with proper repos

Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>

* Fix bad rpmbuild flag

Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-10-29 18:16:08 -04:00
Anthony Lavado
aca4f83333 Remove extra EndIf 2019-10-29 16:24:45 -04:00
Bond_009
d868530d1e Fix comments 2019-10-29 18:37:10 +01:00
Bond_009
10ae815bb4 Address comments 2019-10-29 17:56:06 +01:00
Bond_009
016be02cd6 More warning fixes 2019-10-29 17:56:05 +01:00
Bond_009
d9a03c9bb1 Fix more warnings 2019-10-29 17:55:16 +01:00
Bond-009
2b1e766c17 Update MediaBrowser.Controller/Library/IUserManager.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-29 17:50:09 +01:00
Bond-009
24c076eff3 Update Emby.Server.Implementations/Library/UserViewManager.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-29 17:50:01 +01:00
Bond-009
1258a3766f Update Jellyfin.Server/Program.cs
Co-Authored-By: dkanada <dkanada@users.noreply.github.com>
2019-10-29 17:49:41 +01:00
dkanada
ef623f5129 Merge pull request #1954 from LogicalPhallacy/LogicalPhallacy-patch-NSSM
Use mirror for NSSM
2019-10-29 16:22:58 +09:00
dkanada
0449d7c5e1 Merge pull request #1949 from stevehayles/master
Update to Dockerfile
2019-10-29 16:19:46 +09:00
LogicalPhallacy
9c65853ddd updates win32 build script with nssm mirror 2019-10-28 22:10:36 -07:00
LogicalPhallacy
8c0580aa24 Updating win-x64 build NSSM address 2019-10-28 22:09:46 -07:00
LogicalPhallacy
fd8d4894ca Updated build-jellyfin.ps1 to pull from my mirror
Updated it to pull from my mirror on Azure.
2019-10-28 22:07:01 -07:00
LogicalPhallacy
8edb1c49d8 Merge pull request #6 from jellyfin/master
Bringing my branch up to sync
2019-10-28 21:54:40 -07:00
Steve Hayles
b1e65c6cd4 Adding OpenSSL library
Depending on configuration the docker container may need OpenSSL to support https access
2019-10-28 08:22:59 +00:00
Steve Hayles
26ce62d318 Update Dockerfile
debian-stretch packages were missing for libva-drm2 so would not build

the base image mcr.microsoft.com/dotnet/core/sdk:${DOTNET_VERSION} is incorrectly referencing .NET Core 3-preview6 which will cause issues at runtime with library references being mismatched
2019-10-27 20:22:17 +00:00
Steve Hayles
5eb9d10287 Merge remote-tracking branch 'jellyfin/master' 2019-10-27 20:17:41 +00:00
Justin Fenn
435c30aed9 use exec form for Dockerfile entrypoint
This causes the jellyfin process to be pid 1 in the container.  It can
receive signals like SIGTERM (from "docker stop", for example) and shut
down properly.
2019-10-27 12:28:56 -07:00
Joshua M. Boniface
53ee78170a Merge branch 'master' into copr-fix 2019-10-27 13:52:08 -04:00
Joshua Boniface
2cdf5c203a Correct CentOS build for new Fedora spec 2019-10-27 13:51:32 -04:00
Vasily
8cf8c36708 Move throwing if cancelled after logging that fact 2019-10-27 16:48:42 +03:00
Vasily
dd7ae7747e Apply suggestions from code review
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-10-27 16:47:00 +03:00
Bond-009
c9f4a74af0 Merge pull request #1930 from grafixeyehero/vsc-workspace
update vsc workspace launch for net core 3
2019-10-27 11:44:16 +01:00
Bond_009
2702dca8b6 Enable nullable reference types for Jellyfin.Server 2019-10-26 23:58:23 +02:00
Joshua M. Boniface
588b554ef0 Merge pull request #6 from Wuerfelbecher/copr-fix
Fix build script
2019-10-26 16:48:38 -04:00
Joshua M. Boniface
67be3f8c9e Merge branch 'copr-fix' into copr-fix 2019-10-26 16:41:16 -04:00
Joshua M. Boniface
ee488dcb83 Merge pull request #5 from brianjmurrell/fix-copr
Fix jellyfin-web URL
2019-10-26 16:40:12 -04:00
Thomas Büttner
bf11426f7d Add comments about Source URLs and remove no longer needed dependency
Signed-off-by: Thomas Büttner <thomas@vergesslicher.tech>
2019-10-26 19:24:44 +02:00
Brian J. Murrell
d5cbfee82b Fix jellyfin-web URL 2019-10-26 13:22:52 -04:00
Andrew Rabert
873225a7f2 Merge pull request #1922 from Bond-009/docker
Use the correct dotnet runtime in Docker images
2019-10-25 12:26:18 -04:00
Bond_009
f1167ace7e Use the correct dotnet runtime in Docker images
The self contained packages already contains the dotnet runtime
No need to use the dotnet runtime base image.

This should decrease the size of the image.
2019-10-25 18:04:01 +02:00
delfino434
0add74240f Translated using Weblate (Turkish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/tr/
2019-10-24 11:14:42 -04:00
emmanuel billeaud
cb0aeeb189 Translated using Weblate (French)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/fr/
2019-10-24 11:14:42 -04:00
Joshua M. Boniface
f8556b3d89 Merge pull request #1918 from nvllsvm/dockermaster
Docker fixes
2019-10-24 09:14:20 -04:00
Bond-009
da7ba822b0 Merge pull request #1933 from cvium/autoreload_log_config
Reload logging.json on changes
2019-10-24 10:27:35 +02:00
Claus Vium
c3eac58dda Reload logging.json on changes 2019-10-23 19:52:12 +02:00
Anthony Lavado
5e90747541 More preparations for the tray app 2019-10-23 04:14:58 -04:00
Anthony Lavado
cfaf2b97fe Add the "service" argument to the service parameters
This will avoid an exception when the server cannot launch a browser process for the web interface.
2019-10-23 03:49:31 -04:00
Anthony Lavado
14a850b4a8 Change the default AppExit action to Exit
When the service should fail to launch Jellyfin, or should Jellyfin crash, the default action is changed from Restart to AppExit. This prevents the service from entering a constant restart due to a permissions issue or similar.
2019-10-23 03:34:12 -04:00
grafixeyehero
90c1eceec7 update vsc workspace launch for net core 3 2019-10-23 01:57:38 +03:00
grafixeyehero
752cf08e5c update persons service 2019-10-23 01:54:32 +03:00
Andrew Mahone
20727906c8 Use attachment filename if available. 2019-10-22 11:54:59 -04:00
Andrew Mahone
01b1c847e9 Provide delivery URLs for attachments in PlaybackInfo. 2019-10-22 11:54:59 -04:00
Andrew Mahone
8c89d89932 Attachment service. 2019-10-22 11:54:59 -04:00
Andrew Mahone
a9a85f251e Instantiate AttachmentExtractor in ApplicationHost. 2019-10-22 11:50:07 -04:00
Andrew Mahone
12f752d8b1 FFMPEG extractor for attachments. 2019-10-22 11:50:07 -04:00
Andrew Mahone
f22ca6dd9e Retrieve media attachments in BaseItem. 2019-10-22 10:36:54 -04:00
Andrew Mahone
1513c76a3e Support MediaAttachment retrieval in MediaSourceManager. 2019-10-22 10:35:00 -04:00
Andrew Mahone
03ecf57548 Store MediaAttachments in DB. 2019-10-22 10:32:40 -04:00
Andrew Mahone
321e5cba60 Add new MediaAttachment to store attachments found during media probing. 2019-10-22 10:30:55 -04:00
Anthony Lavado
94932ea216 Make installer shortcut check better
During an upgrade, only create shortcuts if the existing install was not a service install. Otherwise, do not create them.
2019-10-22 04:33:06 -04:00
Anthony Lavado
a278b380b6 Fix syntax errors, move order of upgrade checks, enhance folder check, fix shortcuts
Fixes a syntax error with the NoServiceUninstall section. Moves the detection of an existing Service and datadir further up, so it happens before we decide how the installation will happen. Removed a newline from a comment, and enhanced the existing directory check. Adds an existing folder check, as well as a prompt if the user wants to continue with it or not. Also adds the datadir property to shortcuts.
2019-10-22 04:16:08 -04:00
Narfinger
4a20260a27 add another parser case and allow parsing of seasonless
Add another parser case and we now allow parsing of seasonless series which hopefully should cover more cases of directory structure
2019-10-22 15:46:35 +09:00
Thomas Büttner
59995c20f1 Fix buildscript failure, remove unnecessary yarn repo for Fedora build 2019-10-21 23:42:54 +02:00
Vasily
3743137c31 Address Bond-009 review comments 2019-10-21 12:05:49 +03:00
Vasily
ae2b95024f Update MediaBrowser.Api/Playback/BaseStreamingService.cs
Co-Authored-By: Bond-009 <bond.009@outlook.com>
2019-10-21 11:58:04 +03:00
Joshua M. Boniface
91600b1c81 Merge pull request #1898 from Bond-009/jsonfix
Fix Json serialization error
2019-10-20 15:16:01 -04:00
Bond_009
fef35d0505 Add clearer exceptions, warnings and docs 2019-10-20 21:12:03 +02:00
Joshua Boniface
17c1de7bf2 Clean up ubuntu-armhf build steps
Installs the nodejs package via NodeSource, since the Bionic npm
package is heckin' broken.
2019-10-20 13:01:52 -04:00
Joshua Boniface
44e2d91b2f Clean up ubuntu-arm64 build steps
Installs the nodejs package via NodeSource, since the Bionic npm
package is heckin' broken.
2019-10-20 13:01:44 -04:00
Joshua Boniface
f02ab9818a Clean up ubuntu-x64 build steps
Installs the nodejs package via NodeSource, since the Bionic npm
package is heckin' broken.
2019-10-20 13:00:38 -04:00
Joshua Boniface
9a48486838 Clean up debian-armhf build steps 2019-10-20 13:00:14 -04:00
Joshua Boniface
d9f6c6f289 Clean up debian-arm64 build steps 2019-10-20 12:59:52 -04:00
Joshua Boniface
07d45e82f0 Move web-build into Debian build rules
This removes the convoluted steps in docker-build.sh in favour of
integrating the web-build sequence into the Debian rules file
explicitly. This will allow the web-build to work properly outside of
the boutique Docker container we build, thus allowing it to be build
properly directly on a target system with dpkg-buildpackage.
2019-10-20 12:58:10 -04:00
Joshua Boniface
c30866fc93 Remove web frontend build from docker-build.sh
This is now handled in the RPM spec.
2019-10-20 11:18:12 -04:00
Joshua Boniface
d57ee0b2b8 Remove spec version bump
This will be taken care of with the 10.4.1 bump in stable.
2019-10-20 11:12:45 -04:00
Bond-009
fdb0c3a1df Merge pull request #1909 from KerryRJ/FixDvdsFailingToPlay
Fix System.NullReferenceException when playing Dvds copied to HDD
2019-10-20 17:10:43 +02:00
Bond_009
bbc0875387 Don't shuffle some types by default 2019-10-20 16:08:40 +02:00
Andrew Rabert
4ace99ad76 Fix Docker ffmpeg 2019-10-19 21:01:01 -04:00
Andrew Rabert
64eca9e1c7 Update Docker containers to dotnet 3.0 2019-10-19 19:36:56 -04:00
Andrew Rabert
cd3c14961f Default to jellyfin-web master 2019-10-19 19:32:19 -04:00
schbal
e3f1f62a8b Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ko/
2019-10-19 09:14:27 -04:00
Marius Lindvall
3f16e6d947 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nb_NO/
2019-10-18 07:14:26 -04:00
schbal
f469f18756 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ko/
2019-10-18 07:14:26 -04:00
Joshua M. Boniface
e211f821c9 Merge pull request #4 from brianjmurrell/fix-copr
Support building jellyfin-web webpack
2019-10-17 09:27:13 -04:00
Brian J. Murrell
145df92265 Support buiding jellyfin-web webpack
Needs nodejs >= 8 on EL7
- from https://rpm.nodesource.com/pub_8.x/el/7/x86_64/ on EL7.
Needs yarn
- from yarnpkg.com on EL7
2019-10-17 06:22:35 -04:00
KerryJ
ef3df7baaf Fix System.NullReferenceException when playing Dvds copied to HDD 2019-10-17 11:31:11 +02:00
Vasily
6b6fede2e0 Address review comments 2019-10-16 16:13:59 +03:00
Vasily
9040ef87dc Merge pull request #1871 from Bond-009/doc
Enable `TreatWarningsAsErrors` for MediaBrowser.Common and Emby.Photos
2019-10-16 12:40:20 +03:00
Vasily
dd83784da2 Merge pull request #1887 from joshuaboniface/bump-version
Bump version to 10.5.0 for next stable release
2019-10-16 12:40:01 +03:00
Anthony Lavado
330395e8b6 Check for the presence of AppDataLocal folder before using it 2019-10-16 03:25:39 -04:00
Anthony Lavado
6f504a246b Use the registry path for datadir, don't override it here
Removes an assumption on directory if the user has a datadir from the previous install, use that
2019-10-16 03:18:34 -04:00
Anthony Lavado
63e0bd1d61 Only create/remove shortcuts on non-service install
Should only remove shortcuts if the install type was non-service. On upgrade, check if the install type was non-service, and if so, set the variables correctly and create shortcuts.
2019-10-16 03:14:12 -04:00
Anthony Lavado
5232302532 Adds icons to shortcuts, fixes nsis warning
Adds the icon as a resource file in the program folder, and uses it for the shortcuts created.
Removes an extra section from the dialog creator file, so NSIS won't show a warning for unused code.
2019-10-16 02:29:37 -04:00
Anthony Lavado
dc46620a81 Automatically creates shortcuts for non-service installs
If the user is not installing as a service, then the installer creates a Start Menu shortcut, and a desktop shortcut. Commented out future shortcuts for a tray app.
2019-10-16 02:01:26 -04:00
Anthony Lavado
f80343bf9d Fix the Setup Type dialog titles
I had put the title and subtitle in the wrong order. This corrects the issue.
2019-10-16 01:43:53 -04:00
Bond_009
5edb8159a7 Fix Json serialization error 2019-10-15 17:49:49 +02:00
Vasily
0ccbc2f374 Merge pull request #1884 from Bond-009/netcore3.0
Move to netcore3.0
2019-10-15 15:35:37 +03:00
Anthony Lavado
9ad781324e Fix up Setup Type dialog, and add logic for basic setup
Fix up the Setup Type dialog, by removing an unused function from the page.
Adds logic to the installer to check for a basic or advanced setup choice. Ensures that the service is only installed if the "advanced" method is chosen. Note - it may be possible to remove some defaults from the .onInit, considering they get set through the program now.
2019-10-15 04:24:30 -04:00
Vasily
adccc18298 Revert "yarn build" as it is fixed in master, fix typo 2019-10-14 14:07:12 +03:00
Vasily
3132280b07 * Make sure force_key_frames expression arguments are properly converted to strings
* Fore usage of keyframe cuts only in HLS
2019-10-14 13:22:53 +03:00
Vasily
1bd12083c3 Respect non-inversed setting of "enable break on non-keyframes" 2019-10-14 13:22:53 +03:00
Vasily
82f8345aa5 Log to debug all HTTP 500 response urls 2019-10-14 13:22:53 +03:00
Vasily
2f6879e869 Add limiting max keyframe interval when full transcoding 2019-10-14 13:22:53 +03:00
Vasily
986ea5c636 Fix log message - log args were swapped 2019-10-14 13:22:53 +03:00
Vasily
3740228100 Don't start waiting for a segment which doesn't exist if transcoding is not running 2019-10-14 13:22:52 +03:00
Vasily
7aea9266d0 Stop waiting for a segment to become ready if there's no alive transcode
Remove extra quotes in logging

Fix typo in comment
2019-10-14 13:22:39 +03:00
Vasily
c1f9107b8b Add more logging
Trying to fix hls muxer plus ffmpeg 4.1+ combo

Try to fix waiting for segment being ready

This is needed because hls muxer in ffmpeg >= 4.1 creates the
playlist only when it finishes transcoding.

Also cleaned up logs a bit.

Lower log level for "StartFfmpeg finished" to debug
2019-10-14 13:22:15 +03:00
Vasily
6746f708f2 Revert "Revert "Fix premature stop when streaming""
This reverts commit 575b96d03a.
2019-10-14 13:16:30 +03:00
schbal
c9851db4c7 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ko/
2019-10-13 17:14:18 -04:00
Axel Gabriel Calle Granda
aa5cd46b6c Translated using Weblate (Spanish)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/es/
2019-10-13 17:14:18 -04:00
Marius Lindvall
510c2d01c7 Translated using Weblate (Norwegian Bokmål)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/nb_NO/
2019-10-13 17:14:18 -04:00
Anthony Lavado
05fb84ba22 Make service setup an optional component, remove setuptype page config for now 2019-10-12 04:39:34 -04:00
Anthony Lavado
04c4ad731e Begin to add setup type dialog 2019-10-12 03:56:46 -04:00
Anthony Lavado
c8ffa2fb1d Set service install default to no 2019-10-12 03:03:33 -04:00
Joshua Boniface
fffc5e3a6f Bump version to 10.5.0 for next stable release 2019-10-11 20:12:52 -04:00
Bond_009
516933aab5 Move to netcore3.0 2019-10-11 18:32:13 +02:00
Bond-009
d64b43286e Delete Doxyfile (#1879) 2019-10-11 00:11:23 -04:00
Narfinger
45f906c556 added a couple more tests 2019-10-11 11:46:51 +09:00
Vasily
79f9887625 Merge pull request #1854 from Bond-009/json
Use System.Text.Json api for databases
2019-10-10 18:15:48 +03:00
Vasily
c6cb4b7cf8 Merge pull request #1840 from Bond-009/ruleset
Ignore warning CA1308 and SA1108
2019-10-10 16:53:37 +03:00
Vasily
094852ce30 Merge pull request #1861 from joshuaboniface/fix-centos-build
Use NVM to install nodejs v8 and yarn for CentOS
2019-10-10 10:35:11 +03:00
schbal
697450a619 Translated using Weblate (Korean)
Translation: Jellyfin/Jellyfin
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-core/ko/
2019-10-10 02:14:10 -04:00
Narfinger
8da012c8c5 add tests for Emby.Naming/TV/EpisodePathParser.cs
This should in the future help to detect working and non working name matchings
2019-10-10 13:22:42 +09:00
Joshua M. Boniface
b7586335a6 Merge pull request #1872 from thornbill/translate-badge
Update translate badge in README
2019-10-09 18:46:10 -04:00
Vasily
1176749f14 Merge pull request #1863 from joshuaboniface/fix-baseurl-issues
Fix inconsistent BaseUrl behavior
2019-10-09 19:24:41 +03:00
Bill Thornton
5437434339 Update translate badge in README 2019-10-09 11:47:55 -04:00
Bond_009
9d4ce82ab9 Enable TreatWarningsAsErrors for MediaBrowser.Common and Emby.Photos
Adds `#pragma warning disable CS1591` to all files in
MediaBrowser.Common containing undocumented members.
2019-10-09 17:14:15 +02:00
Joshua Boniface
345a14ff55 Use value instead of assigning baseUrl first 2019-10-09 10:52:51 -04:00
Joshua Boniface
b10e06ff45 Fix spacing issues 2019-10-09 10:40:52 -04:00
Bond-009
d8d2e52e3f Merge pull request #1870 from JustAMan/fix-http-ex1
Fix exception when handling error, log errors better
2019-10-09 16:08:50 +02:00
Joshua Boniface
b96079fee6 Make NormalizeUrlPath static 2019-10-09 09:22:55 -04:00
dkanada
8d7ac291bc Merge pull request #1855 from Bond-009/stylefixes
Minor style fixes
2019-10-09 22:21:32 +09:00
dkanada
0c329736cc Merge pull request #1853 from Bond-009/startup
Log startup time
2019-10-09 22:19:49 +09:00
Vasily
cadfd5bf3f Merge pull request #1866 from Bond-009/sqlslow
Change slow query time logging to debug
2019-10-09 15:52:29 +03:00
Vasily
03450f383f Fix template for logging 2019-10-09 14:05:32 +03:00
Vasily
8109c7eb30 Always log at least error message when error happens during request processing 2019-10-09 14:00:22 +03:00
Vasily
33b69a7099 Set response length and mime type correctly when reporting an error 2019-10-09 13:54:05 +03:00
Joshua Boniface
2a79ae0a6e Normalize baseUrl behaviour
Fully normalizes the baseUrl behaviour to better match how this sort of
feature works in other programs.

1. The baseUrl is always appended to paths, even the built-in `/emby`
and `/mediabrowser` paths.
2. The baseUrl is set statically at class instance creation, to ensure
it persists through changes until the next restart.
3. Configuration is normalized using a function when set, to ensure it's
in a standard `/mypath` format with leading `/`.
4. Cleans up the conditionals around default redirects. For sanity after
changing the URL, it will match *any* path that doesn't match the
current baseUrl and redirect it back to the main page (with baseUrl).
5. Adds a second method, NormalizeUrlPath, to avoid lots of `+ "/" +`
string manipulations which are unclean - we should always have a leading
slash.
6. Sets the default baseUrl to an empty string to avoid unexpected
behaviour, though this would be worked-around automatically.
7. Adds some debug logs whenever a URL is normalized, to help track down
issues with this code (if any arise).
2019-10-08 18:06:03 -04:00
Bond_009
ac93a5a85c Change slow query time logging to debug 2019-10-08 22:17:15 +02:00
Bond_009
e553eba31e Use System.Text.Json api 2019-10-08 20:59:53 +02:00
Vasily
531642fc53 Improve gitattributes for images 2019-10-08 16:54:41 +03:00
Vasily
aa9d7d7f04 Merge pull request #1862 from joshuaboniface/bump-version
Fix bump_version for submodule removal
2019-10-08 16:04:55 +03:00
Joshua Boniface
f20555bf4a Use NVM to install nodejs v8 and yarn
Prevents failure of the installation of jellyfin-web dependencies due
to the NodeJS version in EPEL being too old. v8 might be a little
conservative but is the earliest compatible version. Instead of using
their repo to install Yarn, use the new nvm binary to install Yarn, thus
forcing it to use the updated NodeJS version.
2019-10-07 23:34:02 -04:00
Joshua Boniface
3fc71731a3 Remove jellyfin-web submodule from bump_version 2019-10-07 22:37:19 -04:00
Joshua Boniface
218015063b Port former create_tarball into COPR Makefile
This script was removed in #1793; instead of restoring it, instead
implement its functionality directly in the COPR Makefile.
2019-10-07 22:30:23 -04:00
Bond_009
416155c35f Ignore warning SA1108 2019-10-04 20:21:47 +02:00
Bond_009
0cd2bfc428 Ignore warning CA1308 2019-10-04 19:55:14 +02:00
Bond_009
1745f0181c Log startup time 2019-09-29 00:29:28 +02:00
Bond_009
c5995af493 Some style fixes 2019-09-25 17:19:48 +02:00
LogicalPhallacy
984e415c66 Merge pull request #5 from jellyfin/master
Merge up to latest master
2019-08-06 00:26:19 -07:00
1162 changed files with 19477 additions and 25226 deletions

View File

@@ -0,0 +1,96 @@
parameters:
- name: Packages
type: object
default: {}
- name: LinuxImage
type: string
default: "ubuntu-latest"
- name: DotNetSdkVersion
type: string
default: 3.1.100
jobs:
- job: CompatibilityCheck
displayName: Compatibility Check
pool:
vmImage: "${{ parameters.LinuxImage }}"
# only execute for pull requests
condition: and(succeeded(), variables['System.PullRequest.PullRequestNumber'])
strategy:
matrix:
${{ each Package in parameters.Packages }}:
${{ Package.key }}:
NugetPackageName: ${{ Package.value.NugetPackageName }}
AssemblyFileName: ${{ Package.value.AssemblyFileName }}
maxParallel: 2
dependsOn: MainBuild
steps:
- checkout: none
- task: UseDotNet@2
displayName: "Update DotNet"
inputs:
packageType: sdk
version: ${{ parameters.DotNetSdkVersion }}
- task: DownloadPipelineArtifact@2
displayName: "Download New Assembly Build Artifact"
inputs:
source: "current"
artifact: "$(NugetPackageName)"
path: "$(System.ArtifactsDirectory)/new-artifacts"
runVersion: "latest"
- task: CopyFiles@2
displayName: "Copy New Assembly Build Artifact"
inputs:
sourceFolder: $(System.ArtifactsDirectory)/new-artifacts
contents: "**/*.dll"
targetFolder: $(System.ArtifactsDirectory)/new-release
cleanTargetFolder: true
overWrite: true
flattenFolders: true
- task: DownloadPipelineArtifact@2
displayName: "Download Reference Assembly Build Artifact"
inputs:
source: "specific"
artifact: "$(NugetPackageName)"
path: "$(System.ArtifactsDirectory)/current-artifacts"
project: "$(System.TeamProjectId)"
pipeline: "$(System.DefinitionId)"
runVersion: "latestFromBranch"
runBranch: "refs/heads/$(System.PullRequest.TargetBranch)"
- task: CopyFiles@2
displayName: "Copy Reference Assembly Build Artifact"
inputs:
sourceFolder: $(System.ArtifactsDirectory)/current-artifacts
contents: "**/*.dll"
targetFolder: $(System.ArtifactsDirectory)/current-release
cleanTargetFolder: true
overWrite: true
flattenFolders: true
- task: DownloadGitHubRelease@0
displayName: "Download ABI Compatibility Check Tool"
inputs:
connection: Jellyfin Release Download
userRepository: EraYaN/dotnet-compatibility
defaultVersionType: "latest"
itemPattern: "**-ci.zip"
downloadPath: "$(System.ArtifactsDirectory)"
- task: ExtractFiles@1
displayName: "Extract ABI Compatibility Check Tool"
inputs:
archiveFilePatterns: "$(System.ArtifactsDirectory)/*-ci.zip"
destinationFolder: $(System.ArtifactsDirectory)/tools
cleanDestinationFolder: true
# The `--warnings-only` switch will swallow the return code and not emit any errors.
- task: CmdLine@2
displayName: "Execute ABI Compatibility Check Tool"
inputs:
script: "dotnet tools/CompatibilityCheckerCLI.dll current-release/$(AssemblyFileName) new-release/$(AssemblyFileName) --azure-pipelines --warnings-only"
workingDirectory: $(System.ArtifactsDirectory)

View File

@@ -0,0 +1,101 @@
parameters:
LinuxImage: "ubuntu-latest"
RestoreBuildProjects: "Jellyfin.Server/Jellyfin.Server.csproj"
DotNetSdkVersion: 3.1.100
jobs:
- job: MainBuild
displayName: Main Build
strategy:
matrix:
Release:
BuildConfiguration: Release
Debug:
BuildConfiguration: Debug
maxParallel: 2
pool:
vmImage: "${{ parameters.LinuxImage }}"
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: true
- task: CmdLine@2
displayName: "Clone Web Client (Master, Release, or Tag)"
condition: and(succeeded(), or(contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: "git clone --single-branch --branch $(Build.SourceBranchName) --depth=1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web"
- task: CmdLine@2
displayName: "Clone Web Client (PR)"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master')), eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest'))
inputs:
script: "git clone --single-branch --branch $(System.PullRequest.TargetBranch) --depth 1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web"
- task: NodeTool@0
displayName: "Install Node"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
versionSpec: "10.x"
- task: CmdLine@2
displayName: "Build Web Client"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: yarn install
workingDirectory: $(Agent.TempDirectory)/jellyfin-web
- task: CopyFiles@2
displayName: "Copy Web Client"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
sourceFolder: $(Agent.TempDirectory)/jellyfin-web/dist
contents: "**"
targetFolder: $(Build.SourcesDirectory)/MediaBrowser.WebDashboard/jellyfin-web
cleanTargetFolder: true
overWrite: true
flattenFolders: false
- task: UseDotNet@2
displayName: "Update DotNet"
inputs:
packageType: sdk
version: ${{ parameters.DotNetSdkVersion }}
- task: DotNetCoreCLI@2
displayName: "Publish Server"
inputs:
command: publish
publishWebProjects: false
projects: "${{ parameters.RestoreBuildProjects }}"
arguments: "--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)"
zipAfterPublish: false
- task: PublishPipelineArtifact@0
displayName: "Publish Artifact Naming"
condition: and(succeeded(), eq(variables['BuildConfiguration'], 'Release'))
inputs:
targetPath: "$(build.artifactstagingdirectory)/Jellyfin.Server/Emby.Naming.dll"
artifactName: "Jellyfin.Naming"
- task: PublishPipelineArtifact@0
displayName: "Publish Artifact Controller"
condition: and(succeeded(), eq(variables['BuildConfiguration'], 'Release'))
inputs:
targetPath: "$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Controller.dll"
artifactName: "Jellyfin.Controller"
- task: PublishPipelineArtifact@0
displayName: "Publish Artifact Model"
condition: and(succeeded(), eq(variables['BuildConfiguration'], 'Release'))
inputs:
targetPath: "$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Model.dll"
artifactName: "Jellyfin.Model"
- task: PublishPipelineArtifact@0
displayName: "Publish Artifact Common"
condition: and(succeeded(), eq(variables['BuildConfiguration'], 'Release'))
inputs:
targetPath: "$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Common.dll"
artifactName: "Jellyfin.Common"

View File

@@ -0,0 +1,65 @@
parameters:
- name: ImageNames
type: object
default:
Linux: "ubuntu-latest"
Windows: "windows-latest"
macOS: "macos-latest"
- name: TestProjects
type: string
default: "tests/**/*Tests.csproj"
- name: DotNetSdkVersion
type: string
default: 3.1.100
jobs:
- job: MainTest
displayName: Main Test
strategy:
matrix:
${{ each imageName in parameters.ImageNames }}:
${{ imageName.key }}:
ImageName: ${{ imageName.value }}
maxParallel: 3
pool:
vmImage: "$(ImageName)"
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: false
- task: UseDotNet@2
displayName: "Update DotNet"
inputs:
packageType: sdk
version: ${{ parameters.DotNetSdkVersion }}
- task: DotNetCoreCLI@2
displayName: Run .NET Core CLI tests
inputs:
command: "test"
projects: ${{ parameters.TestProjects }}
arguments: '--configuration Release --collect:"XPlat Code Coverage" --settings tests/coverletArgs.runsettings --verbosity minimal "-p:GenerateDocumentationFile=False"'
publishTestResults: true
testRunTitle: $(Agent.JobName)
workingDirectory: "$(Build.SourcesDirectory)"
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
displayName: ReportGenerator (merge)
inputs:
reports: "$(Agent.TempDirectory)/**/coverage.cobertura.xml"
targetdir: "$(Agent.TempDirectory)/merged/"
reporttypes: "Cobertura"
## V2 is already in the repository but it does not work "wrong number of segments" YAML error.
- task: PublishCodeCoverageResults@1
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
displayName: Publish Code Coverage
inputs:
codeCoverageTool: "cobertura"
#summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' # !!THIS IS FOR V2
summaryFileLocation: "$(Agent.TempDirectory)/merged/**.xml"
pathToSources: $(Build.SourcesDirectory)
failIfCoverageEmpty: true

View File

@@ -0,0 +1,82 @@
parameters:
WindowsImage: "windows-latest"
TestProjects: "tests/**/*Tests.csproj"
DotNetSdkVersion: 3.1.100
jobs:
- job: PublishWindows
displayName: Publish Windows
pool:
vmImage: ${{ parameters.WindowsImage }}
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: true
- task: CmdLine@2
displayName: "Clone Web Client (Master, Release, or Tag)"
condition: and(succeeded(), or(contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master'), contains(variables['Build.SourceBranch'], 'tag')), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: "git clone --single-branch --branch $(Build.SourceBranchName) --depth=1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web"
- task: CmdLine@2
displayName: "Clone Web Client (PR)"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master')), in(variables['Build.Reason'], 'PullRequest'))
inputs:
script: "git clone --single-branch --branch $(System.PullRequest.TargetBranch) --depth 1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web"
- task: NodeTool@0
displayName: "Install Node"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
versionSpec: "10.x"
- task: CmdLine@2
displayName: "Build Web Client"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: yarn install
workingDirectory: $(Agent.TempDirectory)/jellyfin-web
- task: CopyFiles@2
displayName: "Copy Web Client"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
sourceFolder: $(Agent.TempDirectory)/jellyfin-web/dist
contents: "**"
targetFolder: $(Build.SourcesDirectory)/MediaBrowser.WebDashboard/jellyfin-web
cleanTargetFolder: true
overWrite: true
flattenFolders: false
- task: CmdLine@2
displayName: "Clone UX Repository"
inputs:
script: git clone --depth=1 https://github.com/jellyfin/jellyfin-ux $(Agent.TempDirectory)\jellyfin-ux
- task: PowerShell@2
displayName: "Build NSIS Installer"
inputs:
targetType: "filePath"
filePath: ./deployment/windows/build-jellyfin.ps1
arguments: -InstallFFMPEG -InstallNSSM -MakeNSIS -InstallTrayApp -UXLocation $(Agent.TempDirectory)\jellyfin-ux -InstallLocation $(build.artifactstagingdirectory)
errorActionPreference: "stop"
workingDirectory: $(Build.SourcesDirectory)
- task: CopyFiles@2
displayName: "Copy NSIS Installer"
inputs:
sourceFolder: $(Build.SourcesDirectory)/deployment/windows/
contents: "jellyfin*.exe"
targetFolder: $(System.ArtifactsDirectory)/setup
cleanTargetFolder: true
overWrite: true
flattenFolders: true
- task: PublishPipelineArtifact@0
displayName: "Publish Artifact Setup"
condition: succeeded()
inputs:
targetPath: "$(build.artifactstagingdirectory)/setup"
artifactName: "Jellyfin Server Setup"

View File

@@ -2,9 +2,11 @@ name: $(Date:yyyyMMdd)$(Rev:.r)
variables:
- name: TestProjects
value: 'tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj'
value: "tests/**/*Tests.csproj"
- name: RestoreBuildProjects
value: 'Jellyfin.Server/Jellyfin.Server.csproj'
value: "Jellyfin.Server/Jellyfin.Server.csproj"
- name: DotNetSdkVersion
value: 3.1.100
pr:
autoCancel: true
@@ -13,271 +15,26 @@ trigger:
batch: true
jobs:
- job: main_build
displayName: Main Build
pool:
vmImage: ubuntu-latest
strategy:
matrix:
release:
BuildConfiguration: Release
debug:
BuildConfiguration: Debug
maxParallel: 2
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: true
- template: azure-pipelines-main.yml
parameters:
LinuxImage: "ubuntu-latest"
RestoreBuildProjects: $(RestoreBuildProjects)
- task: CmdLine@2
displayName: "Check out web"
condition: and(succeeded(), or(contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: 'git clone --single-branch --branch $(Build.SourceBranchName) --depth=1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web'
- template: azure-pipelines-test.yml
parameters:
ImageNames:
Linux: "ubuntu-latest"
Windows: "windows-latest"
macOS: "macos-latest"
- task: CmdLine@2
displayName: "Check out web (PR)"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest'))
inputs:
script: 'git clone --single-branch --branch $(System.PullRequest.TargetBranch) --depth 1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web'
- template: azure-pipelines-windows.yml
parameters:
WindowsImage: "windows-latest"
TestProjects: $(TestProjects)
- task: NodeTool@0
displayName: 'Install Node.js'
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
versionSpec: '10.x'
- task: CmdLine@2
displayName: "Build Web UI"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: yarn install
workingDirectory: $(Agent.TempDirectory)/jellyfin-web
- task: CopyFiles@2
displayName: Copy the web UI
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
sourceFolder: $(Agent.TempDirectory)/jellyfin-web/dist # Optional
contents: '**'
targetFolder: $(Build.SourcesDirectory)/MediaBrowser.WebDashboard/jellyfin-web
cleanTargetFolder: true # Optional
overWrite: true # Optional
flattenFolders: false # Optional
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: false
projects: '$(RestoreBuildProjects)'
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)'
zipAfterPublish: false
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact Naming'
condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
inputs:
targetPath: '$(build.artifactstagingdirectory)/Jellyfin.Server/Emby.Naming.dll'
artifactName: 'Jellyfin.Naming'
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact Controller'
condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
inputs:
targetPath: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Controller.dll'
artifactName: 'Jellyfin.Controller'
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact Model'
condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
inputs:
targetPath: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Model.dll'
artifactName: 'Jellyfin.Model'
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact Common'
condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
inputs:
targetPath: '$(build.artifactstagingdirectory)/Jellyfin.Server/MediaBrowser.Common.dll'
artifactName: 'Jellyfin.Common'
- job: main_test
displayName: Main Test
pool:
vmImage: windows-latest
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: false
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
publishWebProjects: false
projects: '$(TestProjects)'
arguments: '--configuration $(BuildConfiguration)'
zipAfterPublish: false
- task: VisualStudioTestPlatformInstaller@1
inputs:
packageFeedSelector: 'nugetOrg' # Options: nugetOrg, customFeed, netShare
versionSelector: 'latestPreRelease' # Required when packageFeedSelector == NugetOrg || PackageFeedSelector == CustomFeed# Options: latestPreRelease, latestStable, specificVersion
- task: VSTest@2
inputs:
testSelector: 'testAssemblies' # Options: testAssemblies, testPlan, testRun
testAssemblyVer2: | # Required when testSelector == TestAssemblies
**\bin\$(BuildConfiguration)\**\*test*.dll
!**\obj\**
!**\xunit.runner.visualstudio.testadapter.dll
!**\xunit.runner.visualstudio.dotnetcore.testadapter.dll
#testPlan: # Required when testSelector == TestPlan
#testSuite: # Required when testSelector == TestPlan
#testConfiguration: # Required when testSelector == TestPlan
#tcmTestRun: '$(test.RunId)' # Optional
searchFolder: '$(System.DefaultWorkingDirectory)'
#testFiltercriteria: # Optional
#runOnlyImpactedTests: False # Optional
#runAllTestsAfterXBuilds: '50' # Optional
#uiTests: false # Optional
#vstestLocationMethod: 'version' # Optional. Options: version, location
#vsTestVersion: 'latest' # Optional. Options: latest, 16.0, 15.0, 14.0, toolsInstaller
#vstestLocation: # Optional
#runSettingsFile: # Optional
#overrideTestrunParameters: # Optional
#pathtoCustomTestAdapters: # Optional
runInParallel: True # Optional
runTestsInIsolation: True # Optional
codeCoverageEnabled: True # Optional
#otherConsoleOptions: # Optional
#distributionBatchType: 'basedOnTestCases' # Optional. Options: basedOnTestCases, basedOnExecutionTime, basedOnAssembly
#batchingBasedOnAgentsOption: 'autoBatchSize' # Optional. Options: autoBatchSize, customBatchSize
#customBatchSizeValue: '10' # Required when distributionBatchType == BasedOnTestCases && BatchingBasedOnAgentsOption == CustomBatchSize
#batchingBasedOnExecutionTimeOption: 'autoBatchSize' # Optional. Options: autoBatchSize, customTimeBatchSize
#customRunTimePerBatchValue: '60' # Required when distributionBatchType == BasedOnExecutionTime && BatchingBasedOnExecutionTimeOption == CustomTimeBatchSize
#dontDistribute: False # Optional
#testRunTitle: # Optional
#platform: # Optional
configuration: 'Debug' # Optional
publishRunAttachments: true # Optional
#diagnosticsEnabled: false # Optional
#collectDumpOn: 'onAbortOnly' # Optional. Options: onAbortOnly, always, never
#rerunFailedTests: False # Optional
#rerunType: 'basedOnTestFailurePercentage' # Optional. Options: basedOnTestFailurePercentage, basedOnTestFailureCount
#rerunFailedThreshold: '30' # Optional
#rerunFailedTestCasesMaxLimit: '5' # Optional
#rerunMaxAttempts: '3' # Optional
# - task: PublishTestResults@2
# inputs:
# testResultsFormat: 'VSTest' # Options: JUnit, NUnit, VSTest, xUnit, cTest
# testResultsFiles: '**/*.trx'
# #searchFolder: '$(System.DefaultWorkingDirectory)' # Optional
# mergeTestResults: true # Optional
# #failTaskOnFailedTests: false # Optional
# #testRunTitle: # Optional
# #buildPlatform: # Optional
# #buildConfiguration: # Optional
# #publishRunAttachments: true # Optional
- job: main_build_win
displayName: Main Build Windows
pool:
vmImage: windows-latest
strategy:
matrix:
release:
BuildConfiguration: Release
maxParallel: 2
steps:
- checkout: self
clean: true
submodules: true
persistCredentials: true
- task: CmdLine@2
displayName: "Check out web"
condition: and(succeeded(), or(contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: 'git clone --single-branch --branch $(Build.SourceBranchName) --depth=1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web'
- task: CmdLine@2
displayName: "Check out web (PR)"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest'))
inputs:
script: 'git clone --single-branch --branch $(System.PullRequest.TargetBranch) --depth 1 https://github.com/jellyfin/jellyfin-web.git $(Agent.TempDirectory)/jellyfin-web'
- task: NodeTool@0
displayName: 'Install Node.js'
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
versionSpec: '10.x'
- task: CmdLine@2
displayName: "Build Web UI"
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
script: yarn install
workingDirectory: $(Agent.TempDirectory)/jellyfin-web
- task: CopyFiles@2
displayName: Copy the web UI
condition: and(succeeded(), or(contains(variables['System.PullRequest.TargetBranch'], 'release'), contains(variables['System.PullRequest.TargetBranch'], 'master'), contains(variables['Build.SourceBranch'], 'release'), contains(variables['Build.SourceBranch'], 'master')) ,eq(variables['BuildConfiguration'], 'Release'), in(variables['Build.Reason'], 'PullRequest', 'IndividualCI', 'BatchedCI', 'BuildCompletion'))
inputs:
sourceFolder: $(Agent.TempDirectory)/jellyfin-web/dist # Optional
contents: '**'
targetFolder: $(Build.SourcesDirectory)/MediaBrowser.WebDashboard/jellyfin-web
cleanTargetFolder: true # Optional
overWrite: true # Optional
flattenFolders: false # Optional
- task: CmdLine@2
displayName: Clone the UX repository
inputs:
script: git clone --depth=1 https://github.com/jellyfin/jellyfin-ux $(Agent.TempDirectory)\jellyfin-ux
- task: PowerShell@2
displayName: Build the NSIS Installer
inputs:
targetType: 'filePath' # Optional. Options: filePath, inline
filePath: ./deployment/windows/build-jellyfin.ps1 # Required when targetType == FilePath
arguments: -InstallFFMPEG -InstallNSSM -MakeNSIS -UXLocation $(Agent.TempDirectory)\jellyfin-ux -InstallLocation $(build.artifactstagingdirectory)
#script: '# Write your PowerShell commands here.Write-Host Hello World' # Required when targetType == Inline
errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
#failOnStderr: false # Optional
#ignoreLASTEXITCODE: false # Optional
#pwsh: false # Optional
workingDirectory: $(Build.SourcesDirectory) # Optional
- task: CopyFiles@2
displayName: Copy the NSIS Installer to the artifact directory
inputs:
sourceFolder: $(Build.SourcesDirectory)/deployment/windows/ # Optional
contents: 'jellyfin*.exe'
targetFolder: $(System.ArtifactsDirectory)/setup
cleanTargetFolder: true # Optional
overWrite: true # Optional
flattenFolders: true # Optional
- task: PublishPipelineArtifact@0
displayName: 'Publish Setup Artifact'
condition: and(eq(variables['BuildConfiguration'], 'Release'), succeeded())
inputs:
targetPath: '$(build.artifactstagingdirectory)/setup'
artifactName: 'Jellyfin Server Setup'
- job: dotnet_compat
displayName: Compatibility Check
pool:
vmImage: ubuntu-latest
dependsOn: main_build
condition: and(succeeded(), variables['System.PullRequest.PullRequestNumber']) # Only execute if the pullrequest numer is defined. (So not for normal CI builds)
strategy:
matrix:
- template: azure-pipelines-compat.yml
parameters:
Packages:
Naming:
NugetPackageName: Jellyfin.Naming
AssemblyFileName: Emby.Naming.dll
@@ -290,82 +47,4 @@ jobs:
Common:
NugetPackageName: Jellyfin.Common
AssemblyFileName: MediaBrowser.Common.dll
maxParallel: 2
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download the New Assembly Build Artifact
inputs:
source: 'current' # Options: current, specific
#preferTriggeringPipeline: false # Optional
#tags: # Optional
artifact: '$(NugetPackageName)' # Optional
#patterns: '**' # Optional
path: '$(System.ArtifactsDirectory)/new-artifacts'
#project: # Required when source == Specific
#pipeline: # Required when source == Specific
runVersion: 'latest' # Required when source == Specific. Options: latest, latestFromBranch, specific
#runBranch: 'refs/heads/master' # Required when source == Specific && runVersion == LatestFromBranch
#runId: # Required when source == Specific && runVersion == Specific
- task: CopyFiles@2
displayName: Copy New Assembly to new-release folder
inputs:
sourceFolder: $(System.ArtifactsDirectory)/new-artifacts # Optional
contents: '**/*.dll'
targetFolder: $(System.ArtifactsDirectory)/new-release
cleanTargetFolder: true # Optional
overWrite: true # Optional
flattenFolders: true # Optional
- task: DownloadPipelineArtifact@2
displayName: Download the Reference Assembly Build Artifact
inputs:
source: 'specific' # Options: current, specific
#preferTriggeringPipeline: false # Optional
#tags: # Optional
artifact: '$(NugetPackageName)' # Optional
#patterns: '**' # Optional
path: '$(System.ArtifactsDirectory)/current-artifacts'
project: '$(System.TeamProjectId)' # Required when source == Specific
pipeline: '$(System.DefinitionId)' # Required when source == Specific
runVersion: 'latestFromBranch' # Required when source == Specific. Options: latest, latestFromBranch, specific
runBranch: 'refs/heads/$(System.PullRequest.TargetBranch)' # Required when source == Specific && runVersion == LatestFromBranch
#runId: # Required when source == Specific && runVersion == Specific
- task: CopyFiles@2
displayName: Copy Reference Assembly to current-release folder
inputs:
sourceFolder: $(System.ArtifactsDirectory)/current-artifacts # Optional
contents: '**/*.dll'
targetFolder: $(System.ArtifactsDirectory)/current-release
cleanTargetFolder: true # Optional
overWrite: true # Optional
flattenFolders: true # Optional
- task: DownloadGitHubRelease@0
displayName: Download ABI compatibility check tool from GitHub
inputs:
connection: Jellyfin Release Download
userRepository: EraYaN/dotnet-compatibility
defaultVersionType: 'latest' # Options: latest, specificVersion, specificTag
#version: # Required when defaultVersionType != Latest
itemPattern: '**-ci.zip' # Optional
downloadPath: '$(System.ArtifactsDirectory)'
- task: ExtractFiles@1
displayName: Extract ABI compatibility check tool
inputs:
archiveFilePatterns: '$(System.ArtifactsDirectory)/*-ci.zip'
destinationFolder: $(System.ArtifactsDirectory)/tools
cleanDestinationFolder: true
- task: CmdLine@2
displayName: Execute ABI compatibility check tool
inputs:
script: 'dotnet tools/CompatibilityCheckerCoreCLI.dll current-release/$(AssemblyFileName) new-release/$(AssemblyFileName) --azure-pipelines'
workingDirectory: $(System.ArtifactsDirectory) # Optional
#failOnStderr: false # Optional
LinuxImage: "ubuntu-latest"

View File

@@ -1,46 +0,0 @@
name: Nightly-$(date:yyyyMMdd).$(rev:r)
variables:
- name: Version
value: '1.0.0'
trigger: none
pr: none
jobs:
- job: publish_artifacts_nightly
displayName: Publish Artifacts Nightly
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download the Windows Setup Artifact
inputs:
source: 'specific' # Options: current, specific
artifact: 'Jellyfin Server Setup' # Optional
path: '$(System.ArtifactsDirectory)/win-installer'
project: '$(System.TeamProjectId)' # Required when source == Specific
pipelineId: 1 # Required when source == Specific
runVersion: 'latestFromBranch' # Required when source == Specific. Options: latest, latestFromBranch, specific
runBranch: 'refs/heads/master' # Required when source == Specific && runVersion == LatestFromBranch
- task: SSH@0
displayName: 'Create Drop directory'
inputs:
sshEndpoint: 'Jellyfin Build Server'
commands: 'mkdir -p /srv/incoming/jellyfin_$(Version)/win-installer && ln -s /srv/incoming/jellyfin_$(Version) /srv/incoming/jellyfin_nightly_azure_upload'
- task: CopyFilesOverSSH@0
displayName: 'Copy the Windows Setup to the Repo'
inputs:
sshEndpoint: 'Jellyfin Build Server'
sourceFolder: '$(System.ArtifactsDirectory)/win-installer'
contents: 'jellyfin_*.exe'
targetFolder: '/srv/incoming/jellyfin_nightly_azure_upload/win-installer'
- task: SSH@0
displayName: 'Clean up SCP symlink'
inputs:
sshEndpoint: 'Jellyfin Build Server'
commands: 'rm -f /srv/incoming/jellyfin_nightly_azure_upload'

View File

@@ -1,48 +0,0 @@
name: Release-$(Version)-$(date:yyyyMMdd).$(rev:r)
variables:
- name: Version
value: '1.0.0'
- name: UsedRunId
value: 0
trigger: none
pr: none
jobs:
- job: publish_artifacts_release
displayName: Publish Artifacts Release
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download the Windows Setup Artifact
inputs:
source: 'specific' # Options: current, specific
artifact: 'Jellyfin Server Setup' # Optional
path: '$(System.ArtifactsDirectory)/win-installer'
project: '$(System.TeamProjectId)' # Required when source == Specific
pipelineId: 1 # Required when source == Specific
runVersion: 'specific' # Required when source == Specific. Options: latest, latestFromBranch, specific
runId: $(UsedRunId)
- task: SSH@0
displayName: 'Create Drop directory'
inputs:
sshEndpoint: 'Jellyfin Build Server'
commands: 'mkdir -p /srv/incoming/jellyfin_$(Version)/win-installer && ln -s /srv/incoming/jellyfin_$(Version) /srv/incoming/jellyfin_release_azure_upload'
- task: CopyFilesOverSSH@0
displayName: 'Copy the Windows Setup to the Repo'
inputs:
sshEndpoint: 'Jellyfin Build Server'
sourceFolder: '$(System.ArtifactsDirectory)/win-installer'
contents: 'jellyfin_*.exe'
targetFolder: '/srv/incoming/jellyfin_release_azure_upload/win-installer'
- task: SSH@0
displayName: 'Clean up SCP symlink'
inputs:
sshEndpoint: 'Jellyfin Build Server'
commands: 'rm -f /srv/incoming/jellyfin_release_azure_upload'

View File

@@ -1,8 +1,59 @@
srpm:
dnf -y install git
git submodule update --init --recursive
cd deployment/fedora-package-x64; \
./create_tarball.sh; \
rpmbuild -bs pkg-src/jellyfin.spec \
--define "_sourcedir $$PWD/pkg-src/" \
--define "_srcrpmdir $(outdir)"
VERSION := $(shell sed -ne '/^Version:/s/.* *//p' \
deployment/fedora-package-x64/pkg-src/jellyfin.spec)
deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz:
curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
https://github.com/jellyfin/jellyfin-web/archive/v$(VERSION).tar.gz \
|| curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz \
srpm: deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz
cd deployment/fedora-package-x64; \
SOURCE_DIR=../.. \
WORKDIR="$${PWD}"; \
package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
pkg_src_dir="$${WORKDIR}/pkg-src"; \
GNU_TAR=1; \
tar \
--transform "s,^\.,jellyfin-$(VERSION)," \
--exclude='.git*' \
--exclude='**/.git' \
--exclude='**/.hg' \
--exclude='**/.vs' \
--exclude='**/.vscode' \
--exclude='deployment' \
--exclude='**/bin' \
--exclude='**/obj' \
--exclude='**/.nuget' \
--exclude='*.deb' \
--exclude='*.rpm' \
-czf "pkg-src/jellyfin-$(VERSION).tar.gz" \
-C $${SOURCE_DIR} ./ || GNU_TAR=0; \
if [ $${GNU_TAR} -eq 0 ]; then \
package_temporary_dir="$$(mktemp -d)"; \
mkdir -p "$${package_temporary_dir}/jellyfin"; \
tar \
--exclude='.git*' \
--exclude='**/.git' \
--exclude='**/.hg' \
--exclude='**/.vs' \
--exclude='**/.vscode' \
--exclude='deployment' \
--exclude='**/bin' \
--exclude='**/obj' \
--exclude='**/.nuget' \
--exclude='*.deb' \
--exclude='*.rpm' \
-czf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
-C $${SOURCE_DIR} ./; \
mkdir -p "$${package_temporary_dir}/jellyfin-$(VERSION)"; \
tar -xzf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
-C "$${package_temporary_dir}/jellyfin-$(VERSION); \
rm -f "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz"; \
tar -czf "$${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-$(VERSION).tar.gz" \
-C "$${package_temporary_dir}" "jellyfin-$(VERSION); \
rm -rf $${package_temporary_dir}; \
fi; \
rpmbuild -bs pkg-src/jellyfin.spec \
--define "_sourcedir $$PWD/pkg-src/" \
--define "_srcrpmdir $(outdir)"

2
.gitattributes vendored
View File

@@ -1,3 +1,5 @@
* text=auto eol=lf
*.png binary
*.jpg binary
CONTRIBUTORS.md merge=union

View File

@@ -10,6 +10,19 @@ assignees: ''
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**System (please complete the following information):**
- OS: [e.g. Debian, Windows]
- Virtualization: [e.g. Docker, KVM, LXC]
- Clients: [Browser, Android, Fire Stick, etc.]
- Browser: [e.g. Firefox 72, Chrome 80, Safari 13]
- Jellyfin Version: [e.g. 10.4.3, nightly 20191231]
- Playback: [Direct Play, Remux, Direct Stream, Transcode]
- Installed Plugins: [e.g. none, Fanart, Anime, etc.]
- Reverse Proxy: [e.g. none, nginx, apache, etc.]
- Base URL: [e.g. none, yes: /example]
- Networking: [e.g. Host, Bridge/NAT]
- Storage: [e.g. local, NFS, cloud]
**To Reproduce**
<!-- Steps to reproduce the behavior: -->
1. Go to '...'
@@ -26,11 +39,5 @@ assignees: ''
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**System (please complete the following information):**
- OS: [e.g. Docker, Debian, Windows]
- Browser: [e.g. Firefox, Chrome, Safari]
- Jellyfin Version: [e.g. 10.0.1]
- Reverse proxy: [e.g. no, nginx, apache, etc.]
**Additional context**
<!-- Add any other context about the problem here. -->

View File

@@ -11,7 +11,10 @@ assignees: ''
<!-- Use the Media Info tool (set to text format, download here: https://mediaarea.net/en/MediaInfo) or copy the info from the web ui for the file with the playback issue. -->
**Logs**
<!-- Please paste any log message from during the playback issue, for example the ffmpeg command line can be very useful. -->
<!-- Please paste any log messages from during the playback issue. -->
**FFmpeg Logs**
<!-- Please paste any FFmpeg logs if remuxing or transcoding appears to be part of the issue. -->
**Stats for Nerds Screenshots**
<!-- If available, add screenshots of the stats for nerds screen to help show the issue problem. -->
@@ -29,4 +32,3 @@ assignees: ''
- Client: [e.g. Web/Browser, webOS, Android, Android TV, Electron]
- Browser (if Web client): [e.g. Firefox, Chrome, Safari]
- Client and Browser Version: [e.g. 10.3.4 and 68.0]

13
.github/stale.yml vendored
View File

@@ -1,7 +1,7 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
daysUntilStale: 120
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 14
daysUntilClose: 21
# Issues with these labels will never be considered stale
exemptLabels:
- regression
@@ -11,12 +11,15 @@ exemptLabels:
- future
- feature
- enhancement
- confirmed
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
Issues go stale after 90d of inactivity. Mark the issue as fresh by adding a comment or commit. Stale issues close after an additional 14d of inactivity.
If this issue is safe to close now please do so.
If you have any questions you can reach us on [Matrix or Social Media](https://docs.jellyfin.org/general/getting-help.html).
This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments.
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or nightlies, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on [Matrix or Social Media](https://docs.jellyfin.org/general/getting-help.html).
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

3
.gitignore vendored
View File

@@ -268,3 +268,6 @@ doc/
# Deployment artifacts
dist
*.exe
# BenchmarkDotNet artifacts
BenchmarkDotNet.Artifacts

4
.vscode/launch.json vendored
View File

@@ -10,7 +10,7 @@
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/netcoreapp2.1/jellyfin.dll",
"program": "${workspaceFolder}/Jellyfin.Server/bin/Debug/netcoreapp3.1/jellyfin.dll",
"args": [],
"cwd": "${workspaceFolder}/Jellyfin.Server",
// For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
@@ -25,4 +25,4 @@
"processId": "${command:pickProcess}"
}
,]
}
}

View File

@@ -1,17 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<Compile Include="..\SharedVersion.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
</Project>

View File

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

View File

@@ -1,449 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using MediaBrowser.Model.IO;
namespace BDInfo
{
public class BDROM
{
public FileSystemMetadata DirectoryRoot = null;
public FileSystemMetadata DirectoryBDMV = null;
public FileSystemMetadata DirectoryBDJO = null;
public FileSystemMetadata DirectoryCLIPINF = null;
public FileSystemMetadata DirectoryPLAYLIST = null;
public FileSystemMetadata DirectorySNP = null;
public FileSystemMetadata DirectorySSIF = null;
public FileSystemMetadata DirectorySTREAM = null;
public string VolumeLabel = null;
public ulong Size = 0;
public bool IsBDPlus = false;
public bool IsBDJava = false;
public bool IsDBOX = false;
public bool IsPSP = false;
public bool Is3D = false;
public bool Is50Hz = false;
private readonly IFileSystem _fileSystem;
public Dictionary<string, TSPlaylistFile> PlaylistFiles =
new Dictionary<string, TSPlaylistFile>();
public Dictionary<string, TSStreamClipFile> StreamClipFiles =
new Dictionary<string, TSStreamClipFile>();
public Dictionary<string, TSStreamFile> StreamFiles =
new Dictionary<string, TSStreamFile>();
public Dictionary<string, TSInterleavedFile> InterleavedFiles =
new Dictionary<string, TSInterleavedFile>();
public delegate bool OnStreamClipFileScanError(
TSStreamClipFile streamClipFile, Exception ex);
public event OnStreamClipFileScanError StreamClipFileScanError;
public delegate bool OnStreamFileScanError(
TSStreamFile streamClipFile, Exception ex);
public event OnStreamFileScanError StreamFileScanError;
public delegate bool OnPlaylistFileScanError(
TSPlaylistFile playlistFile, Exception ex);
public event OnPlaylistFileScanError PlaylistFileScanError;
public BDROM(string path, IFileSystem fileSystem)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException(nameof(path));
}
_fileSystem = fileSystem;
//
// Locate BDMV directories.
//
DirectoryBDMV =
GetDirectoryBDMV(path);
if (DirectoryBDMV == null)
{
throw new Exception("Unable to locate BD structure.");
}
DirectoryRoot =
_fileSystem.GetDirectoryInfo(Path.GetDirectoryName(DirectoryBDMV.FullName));
DirectoryBDJO =
GetDirectory("BDJO", DirectoryBDMV, 0);
DirectoryCLIPINF =
GetDirectory("CLIPINF", DirectoryBDMV, 0);
DirectoryPLAYLIST =
GetDirectory("PLAYLIST", DirectoryBDMV, 0);
DirectorySNP =
GetDirectory("SNP", DirectoryRoot, 0);
DirectorySTREAM =
GetDirectory("STREAM", DirectoryBDMV, 0);
DirectorySSIF =
GetDirectory("SSIF", DirectorySTREAM, 0);
if (DirectoryCLIPINF == null
|| DirectoryPLAYLIST == null)
{
throw new Exception("Unable to locate BD structure.");
}
//
// Initialize basic disc properties.
//
VolumeLabel = GetVolumeLabel(DirectoryRoot);
Size = (ulong)GetDirectorySize(DirectoryRoot);
if (null != GetDirectory("BDSVM", DirectoryRoot, 0))
{
IsBDPlus = true;
}
if (null != GetDirectory("SLYVM", DirectoryRoot, 0))
{
IsBDPlus = true;
}
if (null != GetDirectory("ANYVM", DirectoryRoot, 0))
{
IsBDPlus = true;
}
if (DirectoryBDJO != null &&
_fileSystem.GetFilePaths(DirectoryBDJO.FullName).Any())
{
IsBDJava = true;
}
if (DirectorySNP != null &&
GetFilePaths(DirectorySNP.FullName, ".mnv").Any())
{
IsPSP = true;
}
if (DirectorySSIF != null &&
_fileSystem.GetFilePaths(DirectorySSIF.FullName).Any())
{
Is3D = true;
}
if (File.Exists(Path.Combine(DirectoryRoot.FullName, "FilmIndex.xml")))
{
IsDBOX = true;
}
//
// Initialize file lists.
//
if (DirectoryPLAYLIST != null)
{
FileSystemMetadata[] files = GetFiles(DirectoryPLAYLIST.FullName, ".mpls").ToArray();
foreach (var file in files)
{
PlaylistFiles.Add(
file.Name.ToUpper(), new TSPlaylistFile(this, file));
}
}
if (DirectorySTREAM != null)
{
FileSystemMetadata[] files = GetFiles(DirectorySTREAM.FullName, ".m2ts").ToArray();
foreach (var file in files)
{
StreamFiles.Add(
file.Name.ToUpper(), new TSStreamFile(file, _fileSystem));
}
}
if (DirectoryCLIPINF != null)
{
FileSystemMetadata[] files = GetFiles(DirectoryCLIPINF.FullName, ".clpi").ToArray();
foreach (var file in files)
{
StreamClipFiles.Add(
file.Name.ToUpper(), new TSStreamClipFile(file));
}
}
if (DirectorySSIF != null)
{
FileSystemMetadata[] files = GetFiles(DirectorySSIF.FullName, ".ssif").ToArray();
foreach (var file in files)
{
InterleavedFiles.Add(
file.Name.ToUpper(), new TSInterleavedFile(file));
}
}
}
private IEnumerable<FileSystemMetadata> GetFiles(string path, string extension)
{
return _fileSystem.GetFiles(path, new[] { extension }, false, false);
}
private IEnumerable<string> GetFilePaths(string path, string extension)
{
return _fileSystem.GetFilePaths(path, new[] { extension }, false, false);
}
public void Scan()
{
foreach (var streamClipFile in StreamClipFiles.Values)
{
try
{
streamClipFile.Scan();
}
catch (Exception ex)
{
if (StreamClipFileScanError != null)
{
if (StreamClipFileScanError(streamClipFile, ex))
{
continue;
}
else
{
break;
}
}
else throw;
}
}
foreach (var streamFile in StreamFiles.Values)
{
string ssifName = Path.GetFileNameWithoutExtension(streamFile.Name) + ".SSIF";
if (InterleavedFiles.ContainsKey(ssifName))
{
streamFile.InterleavedFile = InterleavedFiles[ssifName];
}
}
TSStreamFile[] streamFiles = new TSStreamFile[StreamFiles.Count];
StreamFiles.Values.CopyTo(streamFiles, 0);
Array.Sort(streamFiles, CompareStreamFiles);
foreach (var playlistFile in PlaylistFiles.Values)
{
try
{
playlistFile.Scan(StreamFiles, StreamClipFiles);
}
catch (Exception ex)
{
if (PlaylistFileScanError != null)
{
if (PlaylistFileScanError(playlistFile, ex))
{
continue;
}
else
{
break;
}
}
else throw;
}
}
foreach (var streamFile in streamFiles)
{
try
{
var playlists = new List<TSPlaylistFile>();
foreach (var playlist in PlaylistFiles.Values)
{
foreach (var streamClip in playlist.StreamClips)
{
if (streamClip.Name == streamFile.Name)
{
playlists.Add(playlist);
break;
}
}
}
streamFile.Scan(playlists, false);
}
catch (Exception ex)
{
if (StreamFileScanError != null)
{
if (StreamFileScanError(streamFile, ex))
{
continue;
}
else
{
break;
}
}
else throw;
}
}
foreach (var playlistFile in PlaylistFiles.Values)
{
playlistFile.Initialize();
if (!Is50Hz)
{
foreach (var videoStream in playlistFile.VideoStreams)
{
if (videoStream.FrameRate == TSFrameRate.FRAMERATE_25 ||
videoStream.FrameRate == TSFrameRate.FRAMERATE_50)
{
Is50Hz = true;
}
}
}
}
}
private FileSystemMetadata GetDirectoryBDMV(
string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException(nameof(path));
}
FileSystemMetadata dir = _fileSystem.GetDirectoryInfo(path);
while (dir != null)
{
if (string.Equals(dir.Name, "BDMV", StringComparison.OrdinalIgnoreCase))
{
return dir;
}
var parentFolder = Path.GetDirectoryName(dir.FullName);
if (string.IsNullOrEmpty(parentFolder))
{
dir = null;
}
else
{
dir = _fileSystem.GetDirectoryInfo(parentFolder);
}
}
return GetDirectory("BDMV", _fileSystem.GetDirectoryInfo(path), 0);
}
private FileSystemMetadata GetDirectory(
string name,
FileSystemMetadata dir,
int searchDepth)
{
if (dir != null)
{
FileSystemMetadata[] children = _fileSystem.GetDirectories(dir.FullName).ToArray();
foreach (var child in children)
{
if (string.Equals(child.Name, name, StringComparison.OrdinalIgnoreCase))
{
return child;
}
}
if (searchDepth > 0)
{
foreach (var child in children)
{
GetDirectory(
name, child, searchDepth - 1);
}
}
}
return null;
}
private long GetDirectorySize(FileSystemMetadata directoryInfo)
{
long size = 0;
//if (!ExcludeDirs.Contains(directoryInfo.Name.ToUpper())) // TODO: Keep?
{
FileSystemMetadata[] pathFiles = _fileSystem.GetFiles(directoryInfo.FullName).ToArray();
foreach (var pathFile in pathFiles)
{
if (pathFile.Extension.ToUpper() == ".SSIF")
{
continue;
}
size += pathFile.Length;
}
FileSystemMetadata[] pathChildren = _fileSystem.GetDirectories(directoryInfo.FullName).ToArray();
foreach (var pathChild in pathChildren)
{
size += GetDirectorySize(pathChild);
}
}
return size;
}
private string GetVolumeLabel(FileSystemMetadata dir)
{
return dir.Name;
}
public int CompareStreamFiles(
TSStreamFile x,
TSStreamFile y)
{
// TODO: Use interleaved file sizes
if ((x == null || x.FileInfo == null) && (y == null || y.FileInfo == null))
{
return 0;
}
else if ((x == null || x.FileInfo == null) && (y != null && y.FileInfo != null))
{
return 1;
}
else if ((x != null && x.FileInfo != null) && (y == null || y.FileInfo == null))
{
return -1;
}
else
{
if (x.FileInfo.Length > y.FileInfo.Length)
{
return 1;
}
else if (y.FileInfo.Length > x.FileInfo.Length)
{
return -1;
}
else
{
return 0;
}
}
}
}
}

View File

@@ -1,493 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class LanguageCodes
{
public static string GetName(string code)
{
switch (code)
{
case "abk": return "Abkhazian";
case "ace": return "Achinese";
case "ach": return "Acoli";
case "ada": return "Adangme";
case "aar": return "Afar";
case "afh": return "Afrihili";
case "afr": return "Afrikaans";
case "afa": return "Afro-Asiatic (Other)";
case "aka": return "Akan";
case "akk": return "Akkadian";
case "alb": return "Albanian";
case "sqi": return "Albanian";
case "ale": return "Aleut";
case "alg": return "Algonquian languages";
case "tut": return "Altaic (Other)";
case "amh": return "Amharic";
case "apa": return "Apache languages";
case "ara": return "Arabic";
case "arc": return "Aramaic";
case "arp": return "Arapaho";
case "arn": return "Araucanian";
case "arw": return "Arawak";
case "arm": return "Armenian";
case "hye": return "Armenian";
case "art": return "Artificial (Other)";
case "asm": return "Assamese";
case "ath": return "Athapascan languages";
case "aus": return "Australian languages";
case "map": return "Austronesian (Other)";
case "ava": return "Avaric";
case "ave": return "Avestan";
case "awa": return "Awadhi";
case "aym": return "Aymara";
case "aze": return "Azerbaijani";
case "ban": return "Balinese";
case "bat": return "Baltic (Other)";
case "bal": return "Baluchi";
case "bam": return "Bambara";
case "bai": return "Bamileke languages";
case "bad": return "Banda";
case "bnt": return "Bantu (Other)";
case "bas": return "Basa";
case "bak": return "Bashkir";
case "baq": return "Basque";
case "eus": return "Basque";
case "btk": return "Batak (Indonesia)";
case "bej": return "Beja";
case "bel": return "Belarusian";
case "bem": return "Bemba";
case "ben": return "Bengali";
case "ber": return "Berber (Other)";
case "bho": return "Bhojpuri";
case "bih": return "Bihari";
case "bik": return "Bikol";
case "bin": return "Bini";
case "bis": return "Bislama";
case "bos": return "Bosnian";
case "bra": return "Braj";
case "bre": return "Breton";
case "bug": return "Buginese";
case "bul": return "Bulgarian";
case "bua": return "Buriat";
case "bur": return "Burmese";
case "mya": return "Burmese";
case "cad": return "Caddo";
case "car": return "Carib";
case "cat": return "Catalan";
case "cau": return "Caucasian (Other)";
case "ceb": return "Cebuano";
case "cel": return "Celtic (Other)";
case "cai": return "Central American Indian (Other)";
case "chg": return "Chagatai";
case "cmc": return "Chamic languages";
case "cha": return "Chamorro";
case "che": return "Chechen";
case "chr": return "Cherokee";
case "chy": return "Cheyenne";
case "chb": return "Chibcha";
case "chi": return "Chinese";
case "zho": return "Chinese";
case "chn": return "Chinook jargon";
case "chp": return "Chipewyan";
case "cho": return "Choctaw";
case "chu": return "Church Slavic";
case "chk": return "Chuukese";
case "chv": return "Chuvash";
case "cop": return "Coptic";
case "cor": return "Cornish";
case "cos": return "Corsican";
case "cre": return "Cree";
case "mus": return "Creek";
case "crp": return "Creoles and pidgins (Other)";
case "cpe": return "Creoles and pidgins,";
case "cpf": return "Creoles and pidgins,";
case "cpp": return "Creoles and pidgins,";
case "scr": return "Croatian";
case "hrv": return "Croatian";
case "cus": return "Cushitic (Other)";
case "cze": return "Czech";
case "ces": return "Czech";
case "dak": return "Dakota";
case "dan": return "Danish";
case "day": return "Dayak";
case "del": return "Delaware";
case "din": return "Dinka";
case "div": return "Divehi";
case "doi": return "Dogri";
case "dgr": return "Dogrib";
case "dra": return "Dravidian (Other)";
case "dua": return "Duala";
case "dut": return "Dutch";
case "nld": return "Dutch";
case "dum": return "Dutch, Middle (ca. 1050-1350)";
case "dyu": return "Dyula";
case "dzo": return "Dzongkha";
case "efi": return "Efik";
case "egy": return "Egyptian (Ancient)";
case "eka": return "Ekajuk";
case "elx": return "Elamite";
case "eng": return "English";
case "enm": return "English, Middle (1100-1500)";
case "ang": return "English, Old (ca.450-1100)";
case "epo": return "Esperanto";
case "est": return "Estonian";
case "ewe": return "Ewe";
case "ewo": return "Ewondo";
case "fan": return "Fang";
case "fat": return "Fanti";
case "fao": return "Faroese";
case "fij": return "Fijian";
case "fin": return "Finnish";
case "fiu": return "Finno-Ugrian (Other)";
case "fon": return "Fon";
case "fre": return "French";
case "fra": return "French";
case "frm": return "French, Middle (ca.1400-1600)";
case "fro": return "French, Old (842-ca.1400)";
case "fry": return "Frisian";
case "fur": return "Friulian";
case "ful": return "Fulah";
case "gaa": return "Ga";
case "glg": return "Gallegan";
case "lug": return "Ganda";
case "gay": return "Gayo";
case "gba": return "Gbaya";
case "gez": return "Geez";
case "geo": return "Georgian";
case "kat": return "Georgian";
case "ger": return "German";
case "deu": return "German";
case "nds": return "Saxon";
case "gmh": return "German, Middle High (ca.1050-1500)";
case "goh": return "German, Old High (ca.750-1050)";
case "gem": return "Germanic (Other)";
case "gil": return "Gilbertese";
case "gon": return "Gondi";
case "gor": return "Gorontalo";
case "got": return "Gothic";
case "grb": return "Grebo";
case "grc": return "Greek, Ancient (to 1453)";
case "gre": return "Greek";
case "ell": return "Greek";
case "grn": return "Guarani";
case "guj": return "Gujarati";
case "gwi": return "Gwich´in";
case "hai": return "Haida";
case "hau": return "Hausa";
case "haw": return "Hawaiian";
case "heb": return "Hebrew";
case "her": return "Herero";
case "hil": return "Hiligaynon";
case "him": return "Himachali";
case "hin": return "Hindi";
case "hmo": return "Hiri Motu";
case "hit": return "Hittite";
case "hmn": return "Hmong";
case "hun": return "Hungarian";
case "hup": return "Hupa";
case "iba": return "Iban";
case "ice": return "Icelandic";
case "isl": return "Icelandic";
case "ibo": return "Igbo";
case "ijo": return "Ijo";
case "ilo": return "Iloko";
case "inc": return "Indic (Other)";
case "ine": return "Indo-European (Other)";
case "ind": return "Indonesian";
case "ina": return "Interlingua (International";
case "ile": return "Interlingue";
case "iku": return "Inuktitut";
case "ipk": return "Inupiaq";
case "ira": return "Iranian (Other)";
case "gle": return "Irish";
case "mga": return "Irish, Middle (900-1200)";
case "sga": return "Irish, Old (to 900)";
case "iro": return "Iroquoian languages";
case "ita": return "Italian";
case "jpn": return "Japanese";
case "jav": return "Javanese";
case "jrb": return "Judeo-Arabic";
case "jpr": return "Judeo-Persian";
case "kab": return "Kabyle";
case "kac": return "Kachin";
case "kal": return "Kalaallisut";
case "kam": return "Kamba";
case "kan": return "Kannada";
case "kau": return "Kanuri";
case "kaa": return "Kara-Kalpak";
case "kar": return "Karen";
case "kas": return "Kashmiri";
case "kaw": return "Kawi";
case "kaz": return "Kazakh";
case "kha": return "Khasi";
case "khm": return "Khmer";
case "khi": return "Khoisan (Other)";
case "kho": return "Khotanese";
case "kik": return "Kikuyu";
case "kmb": return "Kimbundu";
case "kin": return "Kinyarwanda";
case "kir": return "Kirghiz";
case "kom": return "Komi";
case "kon": return "Kongo";
case "kok": return "Konkani";
case "kor": return "Korean";
case "kos": return "Kosraean";
case "kpe": return "Kpelle";
case "kro": return "Kru";
case "kua": return "Kuanyama";
case "kum": return "Kumyk";
case "kur": return "Kurdish";
case "kru": return "Kurukh";
case "kut": return "Kutenai";
case "lad": return "Ladino";
case "lah": return "Lahnda";
case "lam": return "Lamba";
case "lao": return "Lao";
case "lat": return "Latin";
case "lav": return "Latvian";
case "ltz": return "Letzeburgesch";
case "lez": return "Lezghian";
case "lin": return "Lingala";
case "lit": return "Lithuanian";
case "loz": return "Lozi";
case "lub": return "Luba-Katanga";
case "lua": return "Luba-Lulua";
case "lui": return "Luiseno";
case "lun": return "Lunda";
case "luo": return "Luo (Kenya and Tanzania)";
case "lus": return "Lushai";
case "mac": return "Macedonian";
case "mkd": return "Macedonian";
case "mad": return "Madurese";
case "mag": return "Magahi";
case "mai": return "Maithili";
case "mak": return "Makasar";
case "mlg": return "Malagasy";
case "may": return "Malay";
case "msa": return "Malay";
case "mal": return "Malayalam";
case "mlt": return "Maltese";
case "mnc": return "Manchu";
case "mdr": return "Mandar";
case "man": return "Mandingo";
case "mni": return "Manipuri";
case "mno": return "Manobo languages";
case "glv": return "Manx";
case "mao": return "Maori";
case "mri": return "Maori";
case "mar": return "Marathi";
case "chm": return "Mari";
case "mah": return "Marshall";
case "mwr": return "Marwari";
case "mas": return "Masai";
case "myn": return "Mayan languages";
case "men": return "Mende";
case "mic": return "Micmac";
case "min": return "Minangkabau";
case "mis": return "Miscellaneous languages";
case "moh": return "Mohawk";
case "mol": return "Moldavian";
case "mkh": return "Mon-Khmer (Other)";
case "lol": return "Mongo";
case "mon": return "Mongolian";
case "mos": return "Mossi";
case "mul": return "Multiple languages";
case "mun": return "Munda languages";
case "nah": return "Nahuatl";
case "nau": return "Nauru";
case "nav": return "Navajo";
case "nde": return "Ndebele, North";
case "nbl": return "Ndebele, South";
case "ndo": return "Ndonga";
case "nep": return "Nepali";
case "new": return "Newari";
case "nia": return "Nias";
case "nic": return "Niger-Kordofanian (Other)";
case "ssa": return "Nilo-Saharan (Other)";
case "niu": return "Niuean";
case "non": return "Norse, Old";
case "nai": return "North American Indian (Other)";
case "sme": return "Northern Sami";
case "nor": return "Norwegian";
case "nob": return "Norwegian Bokmål";
case "nno": return "Norwegian Nynorsk";
case "nub": return "Nubian languages";
case "nym": return "Nyamwezi";
case "nya": return "Nyanja";
case "nyn": return "Nyankole";
case "nyo": return "Nyoro";
case "nzi": return "Nzima";
case "oci": return "Occitan";
case "oji": return "Ojibwa";
case "ori": return "Oriya";
case "orm": return "Oromo";
case "osa": return "Osage";
case "oss": return "Ossetian";
case "oto": return "Otomian languages";
case "pal": return "Pahlavi";
case "pau": return "Palauan";
case "pli": return "Pali";
case "pam": return "Pampanga";
case "pag": return "Pangasinan";
case "pan": return "Panjabi";
case "pap": return "Papiamento";
case "paa": return "Papuan (Other)";
case "per": return "Persian";
case "fas": return "Persian";
case "peo": return "Persian, Old (ca.600-400 B.C.)";
case "phi": return "Philippine (Other)";
case "phn": return "Phoenician";
case "pon": return "Pohnpeian";
case "pol": return "Polish";
case "por": return "Portuguese";
case "pra": return "Prakrit languages";
case "pro": return "Provençal";
case "pus": return "Pushto";
case "que": return "Quechua";
case "roh": return "Raeto-Romance";
case "raj": return "Rajasthani";
case "rap": return "Rapanui";
case "rar": return "Rarotongan";
case "roa": return "Romance (Other)";
case "rum": return "Romanian";
case "ron": return "Romanian";
case "rom": return "Romany";
case "run": return "Rundi";
case "rus": return "Russian";
case "sal": return "Salishan languages";
case "sam": return "Samaritan Aramaic";
case "smi": return "Sami languages (Other)";
case "smo": return "Samoan";
case "sad": return "Sandawe";
case "sag": return "Sango";
case "san": return "Sanskrit";
case "sat": return "Santali";
case "srd": return "Sardinian";
case "sas": return "Sasak";
case "sco": return "Scots";
case "gla": return "Gaelic";
case "sel": return "Selkup";
case "sem": return "Semitic (Other)";
case "scc": return "Serbian";
case "srp": return "Serbian";
case "srr": return "Serer";
case "shn": return "Shan";
case "sna": return "Shona";
case "sid": return "Sidamo";
case "sgn": return "Sign languages";
case "bla": return "Siksika";
case "snd": return "Sindhi";
case "sin": return "Sinhalese";
case "sit": return "Sino-Tibetan (Other)";
case "sio": return "Siouan languages";
case "den": return "Slave (Athapascan)";
case "sla": return "Slavic (Other)";
case "slo": return "Slovak";
case "slk": return "Slovak";
case "slv": return "Slovenian";
case "sog": return "Sogdian";
case "som": return "Somali";
case "son": return "Songhai";
case "snk": return "Soninke";
case "wen": return "Sorbian languages";
case "nso": return "Sotho, Northern";
case "sot": return "Sotho, Southern";
case "sai": return "South American Indian (Other)";
case "spa": return "Spanish";
case "suk": return "Sukuma";
case "sux": return "Sumerian";
case "sun": return "Sundanese";
case "sus": return "Susu";
case "swa": return "Swahili";
case "ssw": return "Swati";
case "swe": return "Swedish";
case "syr": return "Syriac";
case "tgl": return "Tagalog";
case "tah": return "Tahitian";
case "tai": return "Tai (Other)";
case "tgk": return "Tajik";
case "tmh": return "Tamashek";
case "tam": return "Tamil";
case "tat": return "Tatar";
case "tel": return "Telugu";
case "ter": return "Tereno";
case "tet": return "Tetum";
case "tha": return "Thai";
case "tib": return "Tibetan";
case "bod": return "Tibetan";
case "tig": return "Tigre";
case "tir": return "Tigrinya";
case "tem": return "Timne";
case "tiv": return "Tiv";
case "tli": return "Tlingit";
case "tpi": return "Tok Pisin";
case "tkl": return "Tokelau";
case "tog": return "Tonga (Nyasa)";
case "ton": return "Tonga (Tonga Islands)";
case "tsi": return "Tsimshian";
case "tso": return "Tsonga";
case "tsn": return "Tswana";
case "tum": return "Tumbuka";
case "tur": return "Turkish";
case "ota": return "Turkish, Ottoman (1500-1928)";
case "tuk": return "Turkmen";
case "tvl": return "Tuvalu";
case "tyv": return "Tuvinian";
case "twi": return "Twi";
case "uga": return "Ugaritic";
case "uig": return "Uighur";
case "ukr": return "Ukrainian";
case "umb": return "Umbundu";
case "und": return "Undetermined";
case "urd": return "Urdu";
case "uzb": return "Uzbek";
case "vai": return "Vai";
case "ven": return "Venda";
case "vie": return "Vietnamese";
case "vol": return "Volapük";
case "vot": return "Votic";
case "wak": return "Wakashan languages";
case "wal": return "Walamo";
case "war": return "Waray";
case "was": return "Washo";
case "wel": return "Welsh";
case "cym": return "Welsh";
case "wol": return "Wolof";
case "xho": return "Xhosa";
case "sah": return "Yakut";
case "yao": return "Yao";
case "yap": return "Yapese";
case "yid": return "Yiddish";
case "yor": return "Yoruba";
case "ypk": return "Yupik languages";
case "znd": return "Zande";
case "zap": return "Zapotec";
case "zen": return "Zenaga";
case "zha": return "Zhuang";
case "zul": return "Zulu";
case "zun": return "Zuni";
default: return code;
}
}
}
}

View File

@@ -1,21 +0,0 @@
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
// 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("Jellyfin Project")]
[assembly: AssemblyProduct("Jellyfin Server")]
[assembly: AssemblyCopyright("Copyright © 2016 CinemaSquid. Copyright © 2019 Jellyfin Contributors. Code released under the GNU General Public License")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// 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 +0,0 @@
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.

View File

@@ -1,309 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
#undef DEBUG
using System.IO;
namespace BDInfo
{
public abstract class TSCodecAC3
{
private static byte[] eac3_blocks = new byte[] { 1, 2, 3, 6 };
public static void Scan(
TSAudioStream stream,
TSStreamBuffer buffer,
ref string tag)
{
if (stream.IsInitialized) return;
byte[] sync = buffer.ReadBytes(2);
if (sync == null ||
sync[0] != 0x0B ||
sync[1] != 0x77)
{
return;
}
int sr_code = 0;
int frame_size = 0;
int frame_size_code = 0;
int channel_mode = 0;
int lfe_on = 0;
int dial_norm = 0;
int num_blocks = 0;
byte[] hdr = buffer.ReadBytes(4);
int bsid = (hdr[3] & 0xF8) >> 3;
buffer.Seek(-4, SeekOrigin.Current);
if (bsid <= 10)
{
byte[] crc = buffer.ReadBytes(2);
sr_code = buffer.ReadBits(2);
frame_size_code = buffer.ReadBits(6);
bsid = buffer.ReadBits(5);
int bsmod = buffer.ReadBits(3);
channel_mode = buffer.ReadBits(3);
int cmixlev = 0;
if (((channel_mode & 0x1) > 0) && (channel_mode != 0x1))
{
cmixlev = buffer.ReadBits(2);
}
int surmixlev = 0;
if ((channel_mode & 0x4) > 0)
{
surmixlev = buffer.ReadBits(2);
}
int dsurmod = 0;
if (channel_mode == 0x2)
{
dsurmod = buffer.ReadBits(2);
if (dsurmod == 0x2)
{
stream.AudioMode = TSAudioMode.Surround;
}
}
lfe_on = buffer.ReadBits(1);
dial_norm = buffer.ReadBits(5);
int compr = 0;
if (1 == buffer.ReadBits(1))
{
compr = buffer.ReadBits(8);
}
int langcod = 0;
if (1 == buffer.ReadBits(1))
{
langcod = buffer.ReadBits(8);
}
int mixlevel = 0;
int roomtyp = 0;
if (1 == buffer.ReadBits(1))
{
mixlevel = buffer.ReadBits(5);
roomtyp = buffer.ReadBits(2);
}
if (channel_mode == 0)
{
int dialnorm2 = buffer.ReadBits(5);
int compr2 = 0;
if (1 == buffer.ReadBits(1))
{
compr2 = buffer.ReadBits(8);
}
int langcod2 = 0;
if (1 == buffer.ReadBits(1))
{
langcod2 = buffer.ReadBits(8);
}
int mixlevel2 = 0;
int roomtyp2 = 0;
if (1 == buffer.ReadBits(1))
{
mixlevel2 = buffer.ReadBits(5);
roomtyp2 = buffer.ReadBits(2);
}
}
int copyrightb = buffer.ReadBits(1);
int origbs = buffer.ReadBits(1);
if (bsid == 6)
{
if (1 == buffer.ReadBits(1))
{
int dmixmod = buffer.ReadBits(2);
int ltrtcmixlev = buffer.ReadBits(3);
int ltrtsurmixlev = buffer.ReadBits(3);
int lorocmixlev = buffer.ReadBits(3);
int lorosurmixlev = buffer.ReadBits(3);
}
if (1 == buffer.ReadBits(1))
{
int dsurexmod = buffer.ReadBits(2);
int dheadphonmod = buffer.ReadBits(2);
if (dheadphonmod == 0x2)
{
// TODO
}
int adconvtyp = buffer.ReadBits(1);
int xbsi2 = buffer.ReadBits(8);
int encinfo = buffer.ReadBits(1);
if (dsurexmod == 2)
{
stream.AudioMode = TSAudioMode.Extended;
}
}
}
}
else
{
int frame_type = buffer.ReadBits(2);
int substreamid = buffer.ReadBits(3);
frame_size = (buffer.ReadBits(11) + 1) << 1;
sr_code = buffer.ReadBits(2);
if (sr_code == 3)
{
sr_code = buffer.ReadBits(2);
}
else
{
num_blocks = buffer.ReadBits(2);
}
channel_mode = buffer.ReadBits(3);
lfe_on = buffer.ReadBits(1);
}
switch (channel_mode)
{
case 0: // 1+1
stream.ChannelCount = 2;
if (stream.AudioMode == TSAudioMode.Unknown)
{
stream.AudioMode = TSAudioMode.DualMono;
}
break;
case 1: // 1/0
stream.ChannelCount = 1;
break;
case 2: // 2/0
stream.ChannelCount = 2;
if (stream.AudioMode == TSAudioMode.Unknown)
{
stream.AudioMode = TSAudioMode.Stereo;
}
break;
case 3: // 3/0
stream.ChannelCount = 3;
break;
case 4: // 2/1
stream.ChannelCount = 3;
break;
case 5: // 3/1
stream.ChannelCount = 4;
break;
case 6: // 2/2
stream.ChannelCount = 4;
break;
case 7: // 3/2
stream.ChannelCount = 5;
break;
default:
stream.ChannelCount = 0;
break;
}
switch (sr_code)
{
case 0:
stream.SampleRate = 48000;
break;
case 1:
stream.SampleRate = 44100;
break;
case 2:
stream.SampleRate = 32000;
break;
default:
stream.SampleRate = 0;
break;
}
if (bsid <= 10)
{
switch (frame_size_code >> 1)
{
case 18:
stream.BitRate = 640000;
break;
case 17:
stream.BitRate = 576000;
break;
case 16:
stream.BitRate = 512000;
break;
case 15:
stream.BitRate = 448000;
break;
case 14:
stream.BitRate = 384000;
break;
case 13:
stream.BitRate = 320000;
break;
case 12:
stream.BitRate = 256000;
break;
case 11:
stream.BitRate = 224000;
break;
case 10:
stream.BitRate = 192000;
break;
case 9:
stream.BitRate = 160000;
break;
case 8:
stream.BitRate = 128000;
break;
case 7:
stream.BitRate = 112000;
break;
case 6:
stream.BitRate = 96000;
break;
case 5:
stream.BitRate = 80000;
break;
case 4:
stream.BitRate = 64000;
break;
case 3:
stream.BitRate = 56000;
break;
case 2:
stream.BitRate = 48000;
break;
case 1:
stream.BitRate = 40000;
break;
case 0:
stream.BitRate = 32000;
break;
default:
stream.BitRate = 0;
break;
}
}
else
{
stream.BitRate = (long)
(4.0 * frame_size * stream.SampleRate / (num_blocks * 256));
}
stream.LFE = lfe_on;
if (stream.StreamType != TSStreamType.AC3_PLUS_AUDIO &&
stream.StreamType != TSStreamType.AC3_PLUS_SECONDARY_AUDIO)
{
stream.DialNorm = dial_norm - 31;
}
stream.IsVBR = false;
stream.IsInitialized = true;
}
}
}

View File

@@ -1,148 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecAVC
{
public static void Scan(
TSVideoStream stream,
TSStreamBuffer buffer,
ref string tag)
{
uint parse = 0;
byte accessUnitDelimiterParse = 0;
byte sequenceParameterSetParse = 0;
string profile = null;
string level = null;
byte constraintSet0Flag = 0;
byte constraintSet1Flag = 0;
byte constraintSet2Flag = 0;
byte constraintSet3Flag = 0;
for (int i = 0; i < buffer.Length; i++)
{
parse = (parse << 8) + buffer.ReadByte();
if (parse == 0x00000109)
{
accessUnitDelimiterParse = 1;
}
else if (accessUnitDelimiterParse > 0)
{
--accessUnitDelimiterParse;
if (accessUnitDelimiterParse == 0)
{
switch ((parse & 0xFF) >> 5)
{
case 0: // I
case 3: // SI
case 5: // I, SI
tag = "I";
break;
case 1: // I, P
case 4: // SI, SP
case 6: // I, SI, P, SP
tag = "P";
break;
case 2: // I, P, B
case 7: // I, SI, P, SP, B
tag = "B";
break;
}
if (stream.IsInitialized) return;
}
}
else if (parse == 0x00000127 || parse == 0x00000167)
{
sequenceParameterSetParse = 3;
}
else if (sequenceParameterSetParse > 0)
{
--sequenceParameterSetParse;
switch (sequenceParameterSetParse)
{
case 2:
switch (parse & 0xFF)
{
case 66:
profile = "Baseline Profile";
break;
case 77:
profile = "Main Profile";
break;
case 88:
profile = "Extended Profile";
break;
case 100:
profile = "High Profile";
break;
case 110:
profile = "High 10 Profile";
break;
case 122:
profile = "High 4:2:2 Profile";
break;
case 144:
profile = "High 4:4:4 Profile";
break;
default:
profile = "Unknown Profile";
break;
}
break;
case 1:
constraintSet0Flag = (byte)
((parse & 0x80) >> 7);
constraintSet1Flag = (byte)
((parse & 0x40) >> 6);
constraintSet2Flag = (byte)
((parse & 0x20) >> 5);
constraintSet3Flag = (byte)
((parse & 0x10) >> 4);
break;
case 0:
byte b = (byte)(parse & 0xFF);
if (b == 11 && constraintSet3Flag == 1)
{
level = "1b";
}
else
{
level = string.Format(
"{0:D}.{1:D}",
b / 10, (b - ((b / 10) * 10)));
}
stream.EncodingProfile = string.Format(
"{0} {1}", profile, level);
stream.IsVBR = true;
stream.IsInitialized = true;
break;
}
}
}
return;
}
}
}

View File

@@ -1,159 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecDTS
{
private static int[] dca_sample_rates =
{
0, 8000, 16000, 32000, 0, 0, 11025, 22050, 44100, 0, 0,
12000, 24000, 48000, 96000, 192000
};
private static int[] dca_bit_rates =
{
32000, 56000, 64000, 96000, 112000, 128000,
192000, 224000, 256000, 320000, 384000,
448000, 512000, 576000, 640000, 768000,
896000, 1024000, 1152000, 1280000, 1344000,
1408000, 1411200, 1472000, 1509000, 1920000,
2048000, 3072000, 3840000, 1/*open*/, 2/*variable*/, 3/*lossless*/
};
private static int[] dca_channels =
{
1, 2, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8
};
private static int[] dca_bits_per_sample =
{
16, 16, 20, 20, 0, 24, 24
};
public static void Scan(
TSAudioStream stream,
TSStreamBuffer buffer,
long bitrate,
ref string tag)
{
if (stream.IsInitialized) return;
bool syncFound = false;
uint sync = 0;
for (int i = 0; i < buffer.Length; i++)
{
sync = (sync << 8) + buffer.ReadByte();
if (sync == 0x7FFE8001)
{
syncFound = true;
break;
}
}
if (!syncFound) return;
int frame_type = buffer.ReadBits(1);
int samples_deficit = buffer.ReadBits(5);
int crc_present = buffer.ReadBits(1);
int sample_blocks = buffer.ReadBits(7);
int frame_size = buffer.ReadBits(14);
if (frame_size < 95)
{
return;
}
int amode = buffer.ReadBits(6);
int sample_rate = buffer.ReadBits(4);
if (sample_rate < 0 || sample_rate >= dca_sample_rates.Length)
{
return;
}
int bit_rate = buffer.ReadBits(5);
if (bit_rate < 0 || bit_rate >= dca_bit_rates.Length)
{
return;
}
int downmix = buffer.ReadBits(1);
int dynrange = buffer.ReadBits(1);
int timestamp = buffer.ReadBits(1);
int aux_data = buffer.ReadBits(1);
int hdcd = buffer.ReadBits(1);
int ext_descr = buffer.ReadBits(3);
int ext_coding = buffer.ReadBits(1);
int aspf = buffer.ReadBits(1);
int lfe = buffer.ReadBits(2);
int predictor_history = buffer.ReadBits(1);
if (crc_present == 1)
{
int crc = buffer.ReadBits(16);
}
int multirate_inter = buffer.ReadBits(1);
int version = buffer.ReadBits(4);
int copy_history = buffer.ReadBits(2);
int source_pcm_res = buffer.ReadBits(3);
int front_sum = buffer.ReadBits(1);
int surround_sum = buffer.ReadBits(1);
int dialog_norm = buffer.ReadBits(4);
if (source_pcm_res < 0 || source_pcm_res >= dca_bits_per_sample.Length)
{
return;
}
int subframes = buffer.ReadBits(4);
int total_channels = buffer.ReadBits(3) + 1 + ext_coding;
stream.SampleRate = dca_sample_rates[sample_rate];
stream.ChannelCount = total_channels;
stream.LFE = (lfe > 0 ? 1 : 0);
stream.BitDepth = dca_bits_per_sample[source_pcm_res];
stream.DialNorm = -dialog_norm;
if ((source_pcm_res & 0x1) == 0x1)
{
stream.AudioMode = TSAudioMode.Extended;
}
stream.BitRate = (uint)dca_bit_rates[bit_rate];
switch (stream.BitRate)
{
case 1:
if (bitrate > 0)
{
stream.BitRate = bitrate;
stream.IsVBR = false;
stream.IsInitialized = true;
}
else
{
stream.BitRate = 0;
}
break;
case 2:
case 3:
stream.IsVBR = true;
stream.IsInitialized = true;
break;
default:
stream.IsVBR = false;
stream.IsInitialized = true;
break;
}
}
}
}

View File

@@ -1,246 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecDTSHD
{
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,
long bitrate,
ref string tag)
{
if (stream.IsInitialized &&
(stream.StreamType == TSStreamType.DTS_HD_SECONDARY_AUDIO ||
(stream.CoreStream != null &&
stream.CoreStream.IsInitialized))) return;
bool syncFound = false;
uint sync = 0;
for (int i = 0; i < buffer.Length; i++)
{
sync = (sync << 8) + buffer.ReadByte();
if (sync == 0x64582025)
{
syncFound = true;
break;
}
}
if (!syncFound)
{
tag = "CORE";
if (stream.CoreStream == null)
{
stream.CoreStream = new TSAudioStream();
stream.CoreStream.StreamType = TSStreamType.DTS_AUDIO;
}
if (!stream.CoreStream.IsInitialized)
{
buffer.BeginRead();
TSCodecDTS.Scan(stream.CoreStream, buffer, bitrate, ref tag);
}
return;
}
tag = "HD";
int temp1 = buffer.ReadBits(8);
int nuSubStreamIndex = buffer.ReadBits(2);
int nuExtSSHeaderSize = 0;
int nuExtSSFSize = 0;
int bBlownUpHeader = buffer.ReadBits(1);
if (1 == bBlownUpHeader)
{
nuExtSSHeaderSize = buffer.ReadBits(12) + 1;
nuExtSSFSize = buffer.ReadBits(20) + 1;
}
else
{
nuExtSSHeaderSize = buffer.ReadBits(8) + 1;
nuExtSSFSize = buffer.ReadBits(16) + 1;
}
int nuNumAudioPresent = 1;
int nuNumAssets = 1;
int bStaticFieldsPresent = buffer.ReadBits(1);
if (1 == bStaticFieldsPresent)
{
int nuRefClockCode = buffer.ReadBits(2);
int nuExSSFrameDurationCode = buffer.ReadBits(3) + 1;
long nuTimeStamp = 0;
if (1 == buffer.ReadBits(1))
{
nuTimeStamp = (buffer.ReadBits(18) << 18) + buffer.ReadBits(18);
}
nuNumAudioPresent = buffer.ReadBits(3) + 1;
nuNumAssets = buffer.ReadBits(3) + 1;
int[] nuActiveExSSMask = new int[nuNumAudioPresent];
for (int i = 0; i < nuNumAudioPresent; i++)
{
nuActiveExSSMask[i] = buffer.ReadBits(nuSubStreamIndex + 1); //?
}
for (int i = 0; i < nuNumAudioPresent; i++)
{
for (int j = 0; j < nuSubStreamIndex + 1; j++)
{
if (((j + 1) % 2) == 1)
{
int mask = buffer.ReadBits(8);
}
}
}
if (1 == buffer.ReadBits(1))
{
int nuMixMetadataAdjLevel = buffer.ReadBits(2);
int nuBits4MixOutMask = buffer.ReadBits(2) * 4 + 4;
int nuNumMixOutConfigs = buffer.ReadBits(2) + 1;
int[] nuMixOutChMask = new int[nuNumMixOutConfigs];
for (int i = 0; i < nuNumMixOutConfigs; i++)
{
nuMixOutChMask[i] = buffer.ReadBits(nuBits4MixOutMask);
}
}
}
int[] AssetSizes = new int[nuNumAssets];
for (int i = 0; i < nuNumAssets; i++)
{
if (1 == bBlownUpHeader)
{
AssetSizes[i] = buffer.ReadBits(20) + 1;
}
else
{
AssetSizes[i] = buffer.ReadBits(16) + 1;
}
}
for (int i = 0; i < nuNumAssets; i++)
{
long bufferPosition = buffer.Position;
int nuAssetDescriptorFSIZE = buffer.ReadBits(9) + 1;
int DescriptorDataForAssetIndex = buffer.ReadBits(3);
if (1 == bStaticFieldsPresent)
{
int AssetTypeDescrPresent = buffer.ReadBits(1);
if (1 == AssetTypeDescrPresent)
{
int AssetTypeDescriptor = buffer.ReadBits(4);
}
int LanguageDescrPresent = buffer.ReadBits(1);
if (1 == LanguageDescrPresent)
{
int LanguageDescriptor = buffer.ReadBits(24);
}
int bInfoTextPresent = buffer.ReadBits(1);
if (1 == bInfoTextPresent)
{
int nuInfoTextByteSize = buffer.ReadBits(10) + 1;
int[] InfoText = new int[nuInfoTextByteSize];
for (int j = 0; j < nuInfoTextByteSize; j++)
{
InfoText[j] = buffer.ReadBits(8);
}
}
int nuBitResolution = buffer.ReadBits(5) + 1;
int nuMaxSampleRate = buffer.ReadBits(4);
int nuTotalNumChs = buffer.ReadBits(8) + 1;
int bOne2OneMapChannels2Speakers = buffer.ReadBits(1);
int nuSpkrActivityMask = 0;
if (1 == bOne2OneMapChannels2Speakers)
{
int bEmbeddedStereoFlag = 0;
if (nuTotalNumChs > 2)
{
bEmbeddedStereoFlag = buffer.ReadBits(1);
}
int bEmbeddedSixChFlag = 0;
if (nuTotalNumChs > 6)
{
bEmbeddedSixChFlag = buffer.ReadBits(1);
}
int bSpkrMaskEnabled = buffer.ReadBits(1);
int nuNumBits4SAMask = 0;
if (1 == bSpkrMaskEnabled)
{
nuNumBits4SAMask = buffer.ReadBits(2);
nuNumBits4SAMask = nuNumBits4SAMask * 4 + 4;
nuSpkrActivityMask = buffer.ReadBits(nuNumBits4SAMask);
}
// TODO...
}
stream.SampleRate = SampleRates[nuMaxSampleRate];
stream.BitDepth = nuBitResolution;
stream.LFE = 0;
if ((nuSpkrActivityMask & 0x8) == 0x8)
{
++stream.LFE;
}
if ((nuSpkrActivityMask & 0x1000) == 0x1000)
{
++stream.LFE;
}
stream.ChannelCount = nuTotalNumChs - stream.LFE;
}
if (nuNumAssets > 1)
{
// TODO...
break;
}
}
// TODO
if (stream.CoreStream != null)
{
var coreStream = (TSAudioStream)stream.CoreStream;
if (coreStream.AudioMode == TSAudioMode.Extended &&
stream.ChannelCount == 5)
{
stream.AudioMode = TSAudioMode.Extended;
}
/*
if (coreStream.DialNorm != 0)
{
stream.DialNorm = coreStream.DialNorm;
}
*/
}
if (stream.StreamType == TSStreamType.DTS_HD_MASTER_AUDIO)
{
stream.IsVBR = true;
stream.IsInitialized = true;
}
else if (bitrate > 0)
{
stream.IsVBR = false;
stream.BitRate = bitrate;
if (stream.CoreStream != null)
{
stream.BitRate += stream.CoreStream.BitRate;
stream.IsInitialized = true;
}
stream.IsInitialized = (stream.BitRate > 0 ? true : false);
}
}
}
}

View File

@@ -1,123 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecLPCM
{
public static void Scan(
TSAudioStream stream,
TSStreamBuffer buffer,
ref string tag)
{
if (stream.IsInitialized) return;
byte[] header = buffer.ReadBytes(4);
int flags = (header[2] << 8) + header[3];
switch ((flags & 0xF000) >> 12)
{
case 1: // 1/0/0
stream.ChannelCount = 1;
stream.LFE = 0;
break;
case 3: // 2/0/0
stream.ChannelCount = 2;
stream.LFE = 0;
break;
case 4: // 3/0/0
stream.ChannelCount = 3;
stream.LFE = 0;
break;
case 5: // 2/1/0
stream.ChannelCount = 3;
stream.LFE = 0;
break;
case 6: // 3/1/0
stream.ChannelCount = 4;
stream.LFE = 0;
break;
case 7: // 2/2/0
stream.ChannelCount = 4;
stream.LFE = 0;
break;
case 8: // 3/2/0
stream.ChannelCount = 5;
stream.LFE = 0;
break;
case 9: // 3/2/1
stream.ChannelCount = 5;
stream.LFE = 1;
break;
case 10: // 3/4/0
stream.ChannelCount = 7;
stream.LFE = 0;
break;
case 11: // 3/4/1
stream.ChannelCount = 7;
stream.LFE = 1;
break;
default:
stream.ChannelCount = 0;
stream.LFE = 0;
break;
}
switch ((flags & 0xC0) >> 6)
{
case 1:
stream.BitDepth = 16;
break;
case 2:
stream.BitDepth = 20;
break;
case 3:
stream.BitDepth = 24;
break;
default:
stream.BitDepth = 0;
break;
}
switch ((flags & 0xF00) >> 8)
{
case 1:
stream.SampleRate = 48000;
break;
case 4:
stream.SampleRate = 96000;
break;
case 5:
stream.SampleRate = 192000;
break;
default:
stream.SampleRate = 0;
break;
}
stream.BitRate = (uint)
(stream.SampleRate * stream.BitDepth *
(stream.ChannelCount + stream.LFE));
stream.IsVBR = false;
stream.IsInitialized = true;
}
}
}

View File

@@ -1,208 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
#undef DEBUG
namespace BDInfo
{
public abstract class TSCodecMPEG2
{
public static void Scan(
TSVideoStream stream,
TSStreamBuffer buffer,
ref string tag)
{
int parse = 0;
int pictureParse = 0;
int sequenceHeaderParse = 0;
int extensionParse = 0;
int sequenceExtensionParse = 0;
for (int i = 0; i < buffer.Length; i++)
{
parse = (parse << 8) + buffer.ReadByte();
if (parse == 0x00000100)
{
pictureParse = 2;
}
else if (parse == 0x000001B3)
{
sequenceHeaderParse = 7;
}
else if (sequenceHeaderParse > 0)
{
--sequenceHeaderParse;
switch (sequenceHeaderParse)
{
#if DEBUG
case 6:
break;
case 5:
break;
case 4:
stream.Width =
(int)((parse & 0xFFF000) >> 12);
stream.Height =
(int)(parse & 0xFFF);
break;
case 3:
stream.AspectRatio =
(TSAspectRatio)((parse & 0xF0) >> 4);
switch ((parse & 0xF0) >> 4)
{
case 0: // Forbidden
break;
case 1: // Square
break;
case 2: // 4:3
break;
case 3: // 16:9
break;
case 4: // 2.21:1
break;
default: // Reserved
break;
}
switch (parse & 0xF)
{
case 0: // Forbidden
break;
case 1: // 23.976
stream.FrameRateEnumerator = 24000;
stream.FrameRateDenominator = 1001;
break;
case 2: // 24
stream.FrameRateEnumerator = 24000;
stream.FrameRateDenominator = 1000;
break;
case 3: // 25
stream.FrameRateEnumerator = 25000;
stream.FrameRateDenominator = 1000;
break;
case 4: // 29.97
stream.FrameRateEnumerator = 30000;
stream.FrameRateDenominator = 1001;
break;
case 5: // 30
stream.FrameRateEnumerator = 30000;
stream.FrameRateDenominator = 1000;
break;
case 6: // 50
stream.FrameRateEnumerator = 50000;
stream.FrameRateDenominator = 1000;
break;
case 7: // 59.94
stream.FrameRateEnumerator = 60000;
stream.FrameRateDenominator = 1001;
break;
case 8: // 60
stream.FrameRateEnumerator = 60000;
stream.FrameRateDenominator = 1000;
break;
default: // Reserved
stream.FrameRateEnumerator = 0;
stream.FrameRateDenominator = 0;
break;
}
break;
case 2:
break;
case 1:
break;
#endif
case 0:
#if DEBUG
stream.BitRate =
(((parse & 0xFFFFC0) >> 6) * 200);
#endif
stream.IsVBR = true;
stream.IsInitialized = true;
break;
}
}
else if (pictureParse > 0)
{
--pictureParse;
if (pictureParse == 0)
{
switch ((parse & 0x38) >> 3)
{
case 1:
tag = "I";
break;
case 2:
tag = "P";
break;
case 3:
tag = "B";
break;
default:
break;
}
if (stream.IsInitialized) return;
}
}
else if (parse == 0x000001B5)
{
extensionParse = 1;
}
else if (extensionParse > 0)
{
--extensionParse;
if (extensionParse == 0)
{
if ((parse & 0xF0) == 0x10)
{
sequenceExtensionParse = 1;
}
}
}
else if (sequenceExtensionParse > 0)
{
--sequenceExtensionParse;
#if DEBUG
if (sequenceExtensionParse == 0)
{
uint sequenceExtension =
((parse & 0x8) >> 3);
if (sequenceExtension == 0)
{
stream.IsInterlaced = true;
}
else
{
stream.IsInterlaced = false;
}
}
#endif
}
}
}
}
}

View File

@@ -1,36 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
// TODO: Do something more interesting here...
public abstract class TSCodecMVC
{
public static void Scan(
TSVideoStream stream,
TSStreamBuffer buffer,
ref string tag)
{
stream.IsVBR = true;
stream.IsInitialized = true;
}
}
}

View File

@@ -1,186 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecTrueHD
{
public static void Scan(
TSAudioStream stream,
TSStreamBuffer buffer,
ref string tag)
{
if (stream.IsInitialized &&
stream.CoreStream != null &&
stream.CoreStream.IsInitialized) return;
bool syncFound = false;
uint sync = 0;
for (int i = 0; i < buffer.Length; i++)
{
sync = (sync << 8) + buffer.ReadByte();
if (sync == 0xF8726FBA)
{
syncFound = true;
break;
}
}
if (!syncFound)
{
tag = "CORE";
if (stream.CoreStream == null)
{
stream.CoreStream = new TSAudioStream();
stream.CoreStream.StreamType = TSStreamType.AC3_AUDIO;
}
if (!stream.CoreStream.IsInitialized)
{
buffer.BeginRead();
TSCodecAC3.Scan(stream.CoreStream, buffer, ref tag);
}
return;
}
tag = "HD";
int ratebits = buffer.ReadBits(4);
if (ratebits != 0xF)
{
stream.SampleRate =
(((ratebits & 8) > 0 ? 44100 : 48000) << (ratebits & 7));
}
int temp1 = buffer.ReadBits(8);
int channels_thd_stream1 = buffer.ReadBits(5);
int temp2 = buffer.ReadBits(2);
stream.ChannelCount = 0;
stream.LFE = 0;
int c_LFE2 = buffer.ReadBits(1);
if (c_LFE2 == 1)
{
stream.LFE += 1;
}
int c_Cvh = buffer.ReadBits(1);
if (c_Cvh == 1)
{
stream.ChannelCount += 1;
}
int c_LRw = buffer.ReadBits(1);
if (c_LRw == 1)
{
stream.ChannelCount += 2;
}
int c_LRsd = buffer.ReadBits(1);
if (c_LRsd == 1)
{
stream.ChannelCount += 2;
}
int c_Ts = buffer.ReadBits(1);
if (c_Ts == 1)
{
stream.ChannelCount += 1;
}
int c_Cs = buffer.ReadBits(1);
if (c_Cs == 1)
{
stream.ChannelCount += 1;
}
int c_LRrs = buffer.ReadBits(1);
if (c_LRrs == 1)
{
stream.ChannelCount += 2;
}
int c_LRc = buffer.ReadBits(1);
if (c_LRc == 1)
{
stream.ChannelCount += 2;
}
int c_LRvh = buffer.ReadBits(1);
if (c_LRvh == 1)
{
stream.ChannelCount += 2;
}
int c_LRs = buffer.ReadBits(1);
if (c_LRs == 1)
{
stream.ChannelCount += 2;
}
int c_LFE = buffer.ReadBits(1);
if (c_LFE == 1)
{
stream.LFE += 1;
}
int c_C = buffer.ReadBits(1);
if (c_C == 1)
{
stream.ChannelCount += 1;
}
int c_LR = buffer.ReadBits(1);
if (c_LR == 1)
{
stream.ChannelCount += 2;
}
int access_unit_size = 40 << (ratebits & 7);
int access_unit_size_pow2 = 64 << (ratebits & 7);
int a1 = buffer.ReadBits(16);
int a2 = buffer.ReadBits(16);
int a3 = buffer.ReadBits(16);
int is_vbr = buffer.ReadBits(1);
int peak_bitrate = buffer.ReadBits(15);
peak_bitrate = (peak_bitrate * stream.SampleRate) >> 4;
double peak_bitdepth =
(double)peak_bitrate /
(stream.ChannelCount + stream.LFE) /
stream.SampleRate;
if (peak_bitdepth > 14)
{
stream.BitDepth = 24;
}
else
{
stream.BitDepth = 16;
}
#if DEBUG
System.Diagnostics.Debug.WriteLine(string.Format(
"{0}\t{1}\t{2:F2}",
stream.PID, peak_bitrate, peak_bitdepth));
#endif
/*
// TODO: Get THD dialnorm from metadata
if (stream.CoreStream != null)
{
TSAudioStream coreStream = (TSAudioStream)stream.CoreStream;
if (coreStream.DialNorm != 0)
{
stream.DialNorm = coreStream.DialNorm;
}
}
*/
stream.IsVBR = true;
stream.IsInitialized = true;
}
}
}

View File

@@ -1,131 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
namespace BDInfo
{
public abstract class TSCodecVC1
{
public static void Scan(
TSVideoStream stream,
TSStreamBuffer buffer,
ref string tag)
{
int parse = 0;
byte frameHeaderParse = 0;
byte sequenceHeaderParse = 0;
bool isInterlaced = false;
for (int i = 0; i < buffer.Length; i++)
{
parse = (parse << 8) + buffer.ReadByte();
if (parse == 0x0000010D)
{
frameHeaderParse = 4;
}
else if (frameHeaderParse > 0)
{
--frameHeaderParse;
if (frameHeaderParse == 0)
{
uint pictureType = 0;
if (isInterlaced)
{
if ((parse & 0x80000000) == 0)
{
pictureType =
(uint)((parse & 0x78000000) >> 13);
}
else
{
pictureType =
(uint)((parse & 0x3c000000) >> 12);
}
}
else
{
pictureType =
(uint)((parse & 0xf0000000) >> 14);
}
if ((pictureType & 0x20000) == 0)
{
tag = "P";
}
else if ((pictureType & 0x10000) == 0)
{
tag = "B";
}
else if ((pictureType & 0x8000) == 0)
{
tag = "I";
}
else if ((pictureType & 0x4000) == 0)
{
tag = "BI";
}
else
{
tag = null;
}
if (stream.IsInitialized) return;
}
}
else if (parse == 0x0000010F)
{
sequenceHeaderParse = 6;
}
else if (sequenceHeaderParse > 0)
{
--sequenceHeaderParse;
switch (sequenceHeaderParse)
{
case 5:
int profileLevel = ((parse & 0x38) >> 3);
if (((parse & 0xC0) >> 6) == 3)
{
stream.EncodingProfile = string.Format(
"Advanced Profile {0}", profileLevel);
}
else
{
stream.EncodingProfile = string.Format(
"Main Profile {0}", profileLevel);
}
break;
case 0:
if (((parse & 0x40) >> 6) > 0)
{
isInterlaced = true;
}
else
{
isInterlaced = false;
}
break;
}
stream.IsVBR = true;
stream.IsInitialized = true;
}
}
}
}
}

View File

@@ -1,37 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using MediaBrowser.Model.IO;
// TODO: Do more interesting things here...
namespace BDInfo
{
public class TSInterleavedFile
{
public FileSystemMetadata FileInfo = null;
public string Name = null;
public TSInterleavedFile(FileSystemMetadata fileInfo)
{
FileInfo = fileInfo;
Name = fileInfo.Name.ToUpper();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,780 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Collections.Generic;
namespace BDInfo
{
public enum TSStreamType : byte
{
Unknown = 0,
MPEG1_VIDEO = 0x01,
MPEG2_VIDEO = 0x02,
AVC_VIDEO = 0x1b,
MVC_VIDEO = 0x20,
VC1_VIDEO = 0xea,
MPEG1_AUDIO = 0x03,
MPEG2_AUDIO = 0x04,
LPCM_AUDIO = 0x80,
AC3_AUDIO = 0x81,
AC3_PLUS_AUDIO = 0x84,
AC3_PLUS_SECONDARY_AUDIO = 0xA1,
AC3_TRUE_HD_AUDIO = 0x83,
DTS_AUDIO = 0x82,
DTS_HD_AUDIO = 0x85,
DTS_HD_SECONDARY_AUDIO = 0xA2,
DTS_HD_MASTER_AUDIO = 0x86,
PRESENTATION_GRAPHICS = 0x90,
INTERACTIVE_GRAPHICS = 0x91,
SUBTITLE = 0x92
}
public enum TSVideoFormat : byte
{
Unknown = 0,
VIDEOFORMAT_480i = 1,
VIDEOFORMAT_576i = 2,
VIDEOFORMAT_480p = 3,
VIDEOFORMAT_1080i = 4,
VIDEOFORMAT_720p = 5,
VIDEOFORMAT_1080p = 6,
VIDEOFORMAT_576p = 7,
}
public enum TSFrameRate : byte
{
Unknown = 0,
FRAMERATE_23_976 = 1,
FRAMERATE_24 = 2,
FRAMERATE_25 = 3,
FRAMERATE_29_97 = 4,
FRAMERATE_50 = 6,
FRAMERATE_59_94 = 7
}
public enum TSChannelLayout : byte
{
Unknown = 0,
CHANNELLAYOUT_MONO = 1,
CHANNELLAYOUT_STEREO = 3,
CHANNELLAYOUT_MULTI = 6,
CHANNELLAYOUT_COMBO = 12
}
public enum TSSampleRate : byte
{
Unknown = 0,
SAMPLERATE_48 = 1,
SAMPLERATE_96 = 4,
SAMPLERATE_192 = 5,
SAMPLERATE_48_192 = 12,
SAMPLERATE_48_96 = 14
}
public enum TSAspectRatio
{
Unknown = 0,
ASPECT_4_3 = 2,
ASPECT_16_9 = 3,
ASPECT_2_21 = 4
}
public class TSDescriptor
{
public byte Name;
public byte[] Value;
public TSDescriptor(byte name, byte length)
{
Name = name;
Value = new byte[length];
}
public TSDescriptor Clone()
{
var descriptor =
new TSDescriptor(Name, (byte)Value.Length);
Value.CopyTo(descriptor.Value, 0);
return descriptor;
}
}
public abstract class TSStream
{
public TSStream()
{
}
public override string ToString()
{
return string.Format("{0} ({1})", CodecShortName, PID);
}
public ushort PID;
public TSStreamType StreamType;
public List<TSDescriptor> Descriptors = null;
public long BitRate = 0;
public long ActiveBitRate = 0;
public bool IsVBR = false;
public bool IsInitialized = false;
public string LanguageName;
public bool IsHidden = false;
public ulong PayloadBytes = 0;
public ulong PacketCount = 0;
public double PacketSeconds = 0;
public int AngleIndex = 0;
public ulong PacketSize => PacketCount * 192;
private string _LanguageCode;
public string LanguageCode
{
get => _LanguageCode;
set
{
_LanguageCode = value;
LanguageName = LanguageCodes.GetName(value);
}
}
public bool IsVideoStream
{
get
{
switch (StreamType)
{
case TSStreamType.MPEG1_VIDEO:
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.AVC_VIDEO:
case TSStreamType.MVC_VIDEO:
case TSStreamType.VC1_VIDEO:
return true;
default:
return false;
}
}
}
public bool IsAudioStream
{
get
{
switch (StreamType)
{
case TSStreamType.MPEG1_AUDIO:
case TSStreamType.MPEG2_AUDIO:
case TSStreamType.LPCM_AUDIO:
case TSStreamType.AC3_AUDIO:
case TSStreamType.AC3_PLUS_AUDIO:
case TSStreamType.AC3_PLUS_SECONDARY_AUDIO:
case TSStreamType.AC3_TRUE_HD_AUDIO:
case TSStreamType.DTS_AUDIO:
case TSStreamType.DTS_HD_AUDIO:
case TSStreamType.DTS_HD_SECONDARY_AUDIO:
case TSStreamType.DTS_HD_MASTER_AUDIO:
return true;
default:
return false;
}
}
}
public bool IsGraphicsStream
{
get
{
switch (StreamType)
{
case TSStreamType.PRESENTATION_GRAPHICS:
case TSStreamType.INTERACTIVE_GRAPHICS:
return true;
default:
return false;
}
}
}
public bool IsTextStream
{
get
{
switch (StreamType)
{
case TSStreamType.SUBTITLE:
return true;
default:
return false;
}
}
}
public string CodecName
{
get
{
switch (StreamType)
{
case TSStreamType.MPEG1_VIDEO:
return "MPEG-1 Video";
case TSStreamType.MPEG2_VIDEO:
return "MPEG-2 Video";
case TSStreamType.AVC_VIDEO:
return "MPEG-4 AVC Video";
case TSStreamType.MVC_VIDEO:
return "MPEG-4 MVC Video";
case TSStreamType.VC1_VIDEO:
return "VC-1 Video";
case TSStreamType.MPEG1_AUDIO:
return "MP1 Audio";
case TSStreamType.MPEG2_AUDIO:
return "MP2 Audio";
case TSStreamType.LPCM_AUDIO:
return "LPCM Audio";
case TSStreamType.AC3_AUDIO:
if (((TSAudioStream)this).AudioMode == TSAudioMode.Extended)
return "Dolby Digital EX Audio";
else
return "Dolby Digital Audio";
case TSStreamType.AC3_PLUS_AUDIO:
case TSStreamType.AC3_PLUS_SECONDARY_AUDIO:
return "Dolby Digital Plus Audio";
case TSStreamType.AC3_TRUE_HD_AUDIO:
return "Dolby TrueHD Audio";
case TSStreamType.DTS_AUDIO:
if (((TSAudioStream)this).AudioMode == TSAudioMode.Extended)
return "DTS-ES Audio";
else
return "DTS Audio";
case TSStreamType.DTS_HD_AUDIO:
return "DTS-HD High-Res Audio";
case TSStreamType.DTS_HD_SECONDARY_AUDIO:
return "DTS Express";
case TSStreamType.DTS_HD_MASTER_AUDIO:
return "DTS-HD Master Audio";
case TSStreamType.PRESENTATION_GRAPHICS:
return "Presentation Graphics";
case TSStreamType.INTERACTIVE_GRAPHICS:
return "Interactive Graphics";
case TSStreamType.SUBTITLE:
return "Subtitle";
default:
return "UNKNOWN";
}
}
}
public string CodecAltName
{
get
{
switch (StreamType)
{
case TSStreamType.MPEG1_VIDEO:
return "MPEG-1";
case TSStreamType.MPEG2_VIDEO:
return "MPEG-2";
case TSStreamType.AVC_VIDEO:
return "AVC";
case TSStreamType.MVC_VIDEO:
return "MVC";
case TSStreamType.VC1_VIDEO:
return "VC-1";
case TSStreamType.MPEG1_AUDIO:
return "MP1";
case TSStreamType.MPEG2_AUDIO:
return "MP2";
case TSStreamType.LPCM_AUDIO:
return "LPCM";
case TSStreamType.AC3_AUDIO:
return "DD AC3";
case TSStreamType.AC3_PLUS_AUDIO:
case TSStreamType.AC3_PLUS_SECONDARY_AUDIO:
return "DD AC3+";
case TSStreamType.AC3_TRUE_HD_AUDIO:
return "Dolby TrueHD";
case TSStreamType.DTS_AUDIO:
return "DTS";
case TSStreamType.DTS_HD_AUDIO:
return "DTS-HD Hi-Res";
case TSStreamType.DTS_HD_SECONDARY_AUDIO:
return "DTS Express";
case TSStreamType.DTS_HD_MASTER_AUDIO:
return "DTS-HD Master";
case TSStreamType.PRESENTATION_GRAPHICS:
return "PGS";
case TSStreamType.INTERACTIVE_GRAPHICS:
return "IGS";
case TSStreamType.SUBTITLE:
return "SUB";
default:
return "UNKNOWN";
}
}
}
public string CodecShortName
{
get
{
switch (StreamType)
{
case TSStreamType.MPEG1_VIDEO:
return "MPEG-1";
case TSStreamType.MPEG2_VIDEO:
return "MPEG-2";
case TSStreamType.AVC_VIDEO:
return "AVC";
case TSStreamType.MVC_VIDEO:
return "MVC";
case TSStreamType.VC1_VIDEO:
return "VC-1";
case TSStreamType.MPEG1_AUDIO:
return "MP1";
case TSStreamType.MPEG2_AUDIO:
return "MP2";
case TSStreamType.LPCM_AUDIO:
return "LPCM";
case TSStreamType.AC3_AUDIO:
if (((TSAudioStream)this).AudioMode == TSAudioMode.Extended)
return "AC3-EX";
else
return "AC3";
case TSStreamType.AC3_PLUS_AUDIO:
case TSStreamType.AC3_PLUS_SECONDARY_AUDIO:
return "AC3+";
case TSStreamType.AC3_TRUE_HD_AUDIO:
return "TrueHD";
case TSStreamType.DTS_AUDIO:
if (((TSAudioStream)this).AudioMode == TSAudioMode.Extended)
return "DTS-ES";
else
return "DTS";
case TSStreamType.DTS_HD_AUDIO:
return "DTS-HD HR";
case TSStreamType.DTS_HD_SECONDARY_AUDIO:
return "DTS Express";
case TSStreamType.DTS_HD_MASTER_AUDIO:
return "DTS-HD MA";
case TSStreamType.PRESENTATION_GRAPHICS:
return "PGS";
case TSStreamType.INTERACTIVE_GRAPHICS:
return "IGS";
case TSStreamType.SUBTITLE:
return "SUB";
default:
return "UNKNOWN";
}
}
}
public virtual string Description => "";
public abstract TSStream Clone();
protected void CopyTo(TSStream stream)
{
stream.PID = PID;
stream.StreamType = StreamType;
stream.IsVBR = IsVBR;
stream.BitRate = BitRate;
stream.IsInitialized = IsInitialized;
stream.LanguageCode = _LanguageCode;
if (Descriptors != null)
{
stream.Descriptors = new List<TSDescriptor>();
foreach (var descriptor in Descriptors)
{
stream.Descriptors.Add(descriptor.Clone());
}
}
}
}
public class TSVideoStream : TSStream
{
public TSVideoStream()
{
}
public int Width;
public int Height;
public bool IsInterlaced;
public int FrameRateEnumerator;
public int FrameRateDenominator;
public TSAspectRatio AspectRatio;
public string EncodingProfile;
private TSVideoFormat _VideoFormat;
public TSVideoFormat VideoFormat
{
get => _VideoFormat;
set
{
_VideoFormat = value;
switch (value)
{
case TSVideoFormat.VIDEOFORMAT_480i:
Height = 480;
IsInterlaced = true;
break;
case TSVideoFormat.VIDEOFORMAT_480p:
Height = 480;
IsInterlaced = false;
break;
case TSVideoFormat.VIDEOFORMAT_576i:
Height = 576;
IsInterlaced = true;
break;
case TSVideoFormat.VIDEOFORMAT_576p:
Height = 576;
IsInterlaced = false;
break;
case TSVideoFormat.VIDEOFORMAT_720p:
Height = 720;
IsInterlaced = false;
break;
case TSVideoFormat.VIDEOFORMAT_1080i:
Height = 1080;
IsInterlaced = true;
break;
case TSVideoFormat.VIDEOFORMAT_1080p:
Height = 1080;
IsInterlaced = false;
break;
}
}
}
private TSFrameRate _FrameRate;
public TSFrameRate FrameRate
{
get => _FrameRate;
set
{
_FrameRate = value;
switch (value)
{
case TSFrameRate.FRAMERATE_23_976:
FrameRateEnumerator = 24000;
FrameRateDenominator = 1001;
break;
case TSFrameRate.FRAMERATE_24:
FrameRateEnumerator = 24000;
FrameRateDenominator = 1000;
break;
case TSFrameRate.FRAMERATE_25:
FrameRateEnumerator = 25000;
FrameRateDenominator = 1000;
break;
case TSFrameRate.FRAMERATE_29_97:
FrameRateEnumerator = 30000;
FrameRateDenominator = 1001;
break;
case TSFrameRate.FRAMERATE_50:
FrameRateEnumerator = 50000;
FrameRateDenominator = 1000;
break;
case TSFrameRate.FRAMERATE_59_94:
FrameRateEnumerator = 60000;
FrameRateDenominator = 1001;
break;
}
}
}
public override string Description
{
get
{
string description = "";
if (Height > 0)
{
description += string.Format("{0:D}{1} / ",
Height,
IsInterlaced ? "i" : "p");
}
if (FrameRateEnumerator > 0 &&
FrameRateDenominator > 0)
{
if (FrameRateEnumerator % FrameRateDenominator == 0)
{
description += string.Format("{0:D} fps / ",
FrameRateEnumerator / FrameRateDenominator);
}
else
{
description += string.Format("{0:F3} fps / ",
(double)FrameRateEnumerator / FrameRateDenominator);
}
}
if (AspectRatio == TSAspectRatio.ASPECT_4_3)
{
description += "4:3 / ";
}
else if (AspectRatio == TSAspectRatio.ASPECT_16_9)
{
description += "16:9 / ";
}
if (EncodingProfile != null)
{
description += EncodingProfile + " / ";
}
if (description.EndsWith(" / "))
{
description = description.Substring(0, description.Length - 3);
}
return description;
}
}
public override TSStream Clone()
{
var stream = new TSVideoStream();
CopyTo(stream);
stream.VideoFormat = _VideoFormat;
stream.FrameRate = _FrameRate;
stream.Width = Width;
stream.Height = Height;
stream.IsInterlaced = IsInterlaced;
stream.FrameRateEnumerator = FrameRateEnumerator;
stream.FrameRateDenominator = FrameRateDenominator;
stream.AspectRatio = AspectRatio;
stream.EncodingProfile = EncodingProfile;
return stream;
}
}
public enum TSAudioMode
{
Unknown,
DualMono,
Stereo,
Surround,
Extended
}
public class TSAudioStream : TSStream
{
public TSAudioStream()
{
}
public int SampleRate;
public int ChannelCount;
public int BitDepth;
public int LFE;
public int DialNorm;
public TSAudioMode AudioMode;
public TSAudioStream CoreStream;
public TSChannelLayout ChannelLayout;
public static int ConvertSampleRate(
TSSampleRate sampleRate)
{
switch (sampleRate)
{
case TSSampleRate.SAMPLERATE_48:
return 48000;
case TSSampleRate.SAMPLERATE_96:
case TSSampleRate.SAMPLERATE_48_96:
return 96000;
case TSSampleRate.SAMPLERATE_192:
case TSSampleRate.SAMPLERATE_48_192:
return 192000;
}
return 0;
}
public string ChannelDescription
{
get
{
if (ChannelLayout == TSChannelLayout.CHANNELLAYOUT_MONO &&
ChannelCount == 2)
{
}
string description = "";
if (ChannelCount > 0)
{
description += string.Format(
"{0:D}.{1:D}",
ChannelCount, LFE);
}
else
{
switch (ChannelLayout)
{
case TSChannelLayout.CHANNELLAYOUT_MONO:
description += "1.0";
break;
case TSChannelLayout.CHANNELLAYOUT_STEREO:
description += "2.0";
break;
case TSChannelLayout.CHANNELLAYOUT_MULTI:
description += "5.1";
break;
}
}
if (AudioMode == TSAudioMode.Extended)
{
if (StreamType == TSStreamType.AC3_AUDIO)
{
description += "-EX";
}
if (StreamType == TSStreamType.DTS_AUDIO ||
StreamType == TSStreamType.DTS_HD_AUDIO ||
StreamType == TSStreamType.DTS_HD_MASTER_AUDIO)
{
description += "-ES";
}
}
return description;
}
}
public override string Description
{
get
{
string description = ChannelDescription;
if (SampleRate > 0)
{
description += string.Format(
" / {0:D} kHz", SampleRate / 1000);
}
if (BitRate > 0)
{
description += string.Format(
" / {0:D} kbps", (uint)Math.Round((double)BitRate / 1000));
}
if (BitDepth > 0)
{
description += string.Format(
" / {0:D}-bit", BitDepth);
}
if (DialNorm != 0)
{
description += string.Format(
" / DN {0}dB", DialNorm);
}
if (ChannelCount == 2)
{
switch (AudioMode)
{
case TSAudioMode.DualMono:
description += " / Dual Mono";
break;
case TSAudioMode.Surround:
description += " / Dolby Surround";
break;
}
}
if (description.EndsWith(" / "))
{
description = description.Substring(0, description.Length - 3);
}
if (CoreStream != null)
{
string codec = "";
switch (CoreStream.StreamType)
{
case TSStreamType.AC3_AUDIO:
codec = "AC3 Embedded";
break;
case TSStreamType.DTS_AUDIO:
codec = "DTS Core";
break;
}
description += string.Format(
" ({0}: {1})",
codec,
CoreStream.Description);
}
return description;
}
}
public override TSStream Clone()
{
var stream = new TSAudioStream();
CopyTo(stream);
stream.SampleRate = SampleRate;
stream.ChannelLayout = ChannelLayout;
stream.ChannelCount = ChannelCount;
stream.BitDepth = BitDepth;
stream.LFE = LFE;
stream.DialNorm = DialNorm;
stream.AudioMode = AudioMode;
if (CoreStream != null)
{
stream.CoreStream = (TSAudioStream)CoreStream.Clone();
}
return stream;
}
}
public class TSGraphicsStream : TSStream
{
public TSGraphicsStream()
{
IsVBR = true;
IsInitialized = true;
}
public override TSStream Clone()
{
var stream = new TSGraphicsStream();
CopyTo(stream);
return stream;
}
}
public class TSTextStream : TSStream
{
public TSTextStream()
{
IsVBR = true;
IsInitialized = true;
}
public override TSStream Clone()
{
var stream = new TSTextStream();
CopyTo(stream);
return stream;
}
}
}

View File

@@ -1,130 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Collections.Specialized;
using System.IO;
namespace BDInfo
{
public class TSStreamBuffer
{
private MemoryStream Stream = new MemoryStream();
private int SkipBits = 0;
private byte[] Buffer;
private int BufferLength = 0;
public int TransferLength = 0;
public TSStreamBuffer()
{
Buffer = new byte[4096];
Stream = new MemoryStream(Buffer);
}
public long Length => (long)BufferLength;
public long Position => Stream.Position;
public void Add(
byte[] buffer,
int offset,
int length)
{
TransferLength += length;
if (BufferLength + length >= Buffer.Length)
{
length = Buffer.Length - BufferLength;
}
if (length > 0)
{
Array.Copy(buffer, offset, Buffer, BufferLength, length);
BufferLength += length;
}
}
public void Seek(
long offset,
SeekOrigin loc)
{
Stream.Seek(offset, loc);
}
public void Reset()
{
BufferLength = 0;
TransferLength = 0;
}
public void BeginRead()
{
SkipBits = 0;
Stream.Seek(0, SeekOrigin.Begin);
}
public void EndRead()
{
}
public byte[] ReadBytes(int bytes)
{
if (Stream.Position + bytes >= BufferLength)
{
return null;
}
byte[] value = new byte[bytes];
Stream.Read(value, 0, bytes);
return value;
}
public byte ReadByte()
{
return (byte)Stream.ReadByte();
}
public int ReadBits(int bits)
{
long pos = Stream.Position;
int shift = 24;
int data = 0;
for (int i = 0; i < 4; i++)
{
if (pos + i >= BufferLength) break;
data += (Stream.ReadByte() << shift);
shift -= 8;
}
var vector = new BitVector32(data);
int value = 0;
for (int i = SkipBits; i < SkipBits + bits; i++)
{
value <<= 1;
value += (vector[1 << (32 - i - 1)] ? 1 : 0);
}
SkipBits += bits;
Stream.Seek(pos + (SkipBits >> 3), SeekOrigin.Begin);
SkipBits = SkipBits % 8;
return value;
}
}
}

View File

@@ -1,107 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Collections.Generic;
namespace BDInfo
{
public class TSStreamClip
{
public int AngleIndex = 0;
public string Name;
public double TimeIn;
public double TimeOut;
public double RelativeTimeIn;
public double RelativeTimeOut;
public double Length;
public ulong FileSize = 0;
public ulong InterleavedFileSize = 0;
public ulong PayloadBytes = 0;
public ulong PacketCount = 0;
public double PacketSeconds = 0;
public List<double> Chapters = new List<double>();
public TSStreamFile StreamFile = null;
public TSStreamClipFile StreamClipFile = null;
public TSStreamClip(
TSStreamFile streamFile,
TSStreamClipFile streamClipFile)
{
if (streamFile != null)
{
Name = streamFile.Name;
StreamFile = streamFile;
FileSize = (ulong)StreamFile.FileInfo.Length;
if (StreamFile.InterleavedFile != null)
{
InterleavedFileSize = (ulong)StreamFile.InterleavedFile.FileInfo.Length;
}
}
StreamClipFile = streamClipFile;
}
public string DisplayName
{
get
{
if (StreamFile != null &&
StreamFile.InterleavedFile != null &&
BDInfoSettings.EnableSSIF)
{
return StreamFile.InterleavedFile.Name;
}
return Name;
}
}
public ulong PacketSize => PacketCount * 192;
public ulong PacketBitRate
{
get
{
if (PacketSeconds > 0)
{
return (ulong)Math.Round(((PacketSize * 8.0) / PacketSeconds));
}
return 0;
}
}
public bool IsCompatible(TSStreamClip clip)
{
foreach (var stream1 in StreamFile.Streams.Values)
{
if (clip.StreamFile.Streams.ContainsKey(stream1.PID))
{
var stream2 = clip.StreamFile.Streams[stream1.PID];
if (stream1.StreamType != stream2.StreamType)
{
return false;
}
}
}
return true;
}
}
}

View File

@@ -1,244 +0,0 @@
//============================================================================
// BDInfo - Blu-ray Video and Audio Analysis Tool
// Copyright © 2010 Cinema Squid
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
#undef DEBUG
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using MediaBrowser.Model.IO;
namespace BDInfo
{
public class TSStreamClipFile
{
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>();
public TSStreamClipFile(FileSystemMetadata fileInfo)
{
FileInfo = fileInfo;
Name = fileInfo.Name.ToUpper();
}
public void Scan()
{
Stream fileStream = null;
BinaryReader fileReader = null;
try
{
#if DEBUG
Debug.WriteLine(string.Format(
"Scanning {0}...", Name));
#endif
Streams.Clear();
fileStream = File.OpenRead(FileInfo.FullName);
fileReader = new BinaryReader(fileStream);
byte[] data = new byte[fileStream.Length];
fileReader.Read(data, 0, data.Length);
byte[] fileType = new byte[8];
Array.Copy(data, 0, fileType, 0, fileType.Length);
FileType = Encoding.ASCII.GetString(fileType, 0, fileType.Length);
if (FileType != "HDMV0100" &&
FileType != "HDMV0200")
{
throw new Exception(string.Format(
"Clip info file {0} has an unknown file type {1}.",
FileInfo.Name, FileType));
}
#if DEBUG
Debug.WriteLine(string.Format(
"\tFileType: {0}", FileType));
#endif
int clipIndex =
((int)data[12] << 24) +
((int)data[13] << 16) +
((int)data[14] << 8) +
((int)data[15]);
int clipLength =
((int)data[clipIndex] << 24) +
((int)data[clipIndex + 1] << 16) +
((int)data[clipIndex + 2] << 8) +
((int)data[clipIndex + 3]);
byte[] clipData = new byte[clipLength];
Array.Copy(data, clipIndex + 4, clipData, 0, clipData.Length);
int streamCount = clipData[8];
#if DEBUG
Debug.WriteLine(string.Format(
"\tStreamCount: {0}", streamCount));
#endif
int streamOffset = 10;
for (int streamIndex = 0;
streamIndex < streamCount;
streamIndex++)
{
TSStream stream = null;
ushort PID = (ushort)
((clipData[streamOffset] << 8) +
clipData[streamOffset + 1]);
streamOffset += 2;
var streamType = (TSStreamType)
clipData[streamOffset + 1];
switch (streamType)
{
case TSStreamType.MVC_VIDEO:
// TODO
break;
case TSStreamType.AVC_VIDEO:
case TSStreamType.MPEG1_VIDEO:
case TSStreamType.MPEG2_VIDEO:
case TSStreamType.VC1_VIDEO:
{
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;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2} {3} {4}",
PID,
streamType,
videoFormat,
frameRate,
aspectRatio));
#endif
}
break;
case TSStreamType.AC3_AUDIO:
case TSStreamType.AC3_PLUS_AUDIO:
case TSStreamType.AC3_PLUS_SECONDARY_AUDIO:
case TSStreamType.AC3_TRUE_HD_AUDIO:
case TSStreamType.DTS_AUDIO:
case TSStreamType.DTS_HD_AUDIO:
case TSStreamType.DTS_HD_MASTER_AUDIO:
case TSStreamType.DTS_HD_SECONDARY_AUDIO:
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 = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
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;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2} {3} {4}",
PID,
streamType,
languageCode,
channelLayout,
sampleRate));
#endif
}
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 = Encoding.ASCII.GetString(languageBytes, 0, languageBytes.Length);
stream = new TSGraphicsStream();
stream.LanguageCode = languageCode;
#if DEBUG
Debug.WriteLine(string.Format(
"\t{0} {1} {2}",
PID,
streamType,
languageCode));
#endif
}
break;
case TSStreamType.SUBTITLE:
{
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}",
PID,
streamType,
languageCode));
#endif
stream = new TSTextStream();
stream.LanguageCode = languageCode;
}
break;
}
if (stream != null)
{
stream.PID = PID;
stream.StreamType = streamType;
Streams.Add(PID, stream);
}
streamOffset += clipData[streamOffset] + 1;
}
IsValid = true;
}
finally
{
if (fileReader != null) fileReader.Dispose();
if (fileStream != null) fileStream.Dispose();
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +1,132 @@
# Jellyfin Contributors
- [JoshuaBoniface](https://github.com/joshuaboniface)
- [nvllsvm](https://github.com/nvllsvm)
- [JustAMan](https://github.com/JustAMan)
- [dcrdev](https://github.com/dcrdev)
- [EraYaN](https://github.com/EraYaN)
- [flemse](https://github.com/flemse)
- [97carmine](https://github.com/97carmine)
- [Abbe98](https://github.com/Abbe98)
- [agrenott](https://github.com/agrenott)
- [AndreCarvalho](https://github.com/AndreCarvalho)
- [anthonylavado](https://github.com/anthonylavado)
- [Artiume](https://github.com/Artiume)
- [AThomsen](https://github.com/AThomsen)
- [bilde2910](https://github.com/bilde2910)
- [bfayers](https://github.com/bfayers)
- [Bond_009](https://github.com/Bond-009)
- [AnthonyLavado](https://github.com/anthonylavado)
- [sparky8251](https://github.com/sparky8251)
- [LeoVerto](https://github.com/LeoVerto)
- [grafixeyehero](https://github.com/grafixeyehero)
- [BnMcG](https://github.com/BnMcG)
- [Bond-009](https://github.com/Bond-009)
- [brianjmurrell](https://github.com/brianjmurrell)
- [bugfixin](https://github.com/bugfixin)
- [chaosinnovator](https://github.com/chaosinnovator)
- [ckcr4lyf](https://github.com/ckcr4lyf)
- [crankdoofus](https://github.com/crankdoofus)
- [crobibero](https://github.com/crobibero)
- [cromefire](https://github.com/cromefire)
- [cryptobank](https://github.com/cryptobank)
- [cvium](https://github.com/cvium)
- [wtayl0r](https://github.com/wtayl0r)
- [TtheCreator](https://github.com/Tthecreator)
- [dannymichel](https://github.com/dannymichel)
- [DaveChild](https://github.com/DaveChild)
- [dcrdev](https://github.com/dcrdev)
- [dhartung](https://github.com/dhartung)
- [dinki](https://github.com/dinki)
- [dkanada](https://github.com/dkanada)
- [LogicalPhallacy](https://github.com/LogicalPhallacy/)
- [RazeLighter777](https://github.com/RazeLighter777)
- [WillWill56](https://github.com/WillWill56)
- [Liggy](https://github.com/Liggy)
- [fruhnow](https://github.com/fruhnow)
- [Lynxy](https://github.com/Lynxy)
- [dlahoti](https://github.com/dlahoti)
- [dmitrylyzo](https://github.com/dmitrylyzo)
- [DMouse10462](https://github.com/DMouse10462)
- [DrPandemic](https://github.com/DrPandemic)
- [EraYaN](https://github.com/EraYaN)
- [escabe](https://github.com/escabe)
- [excelite](https://github.com/excelite)
- [fasheng](https://github.com/fasheng)
- [ploughpuff](https://github.com/ploughpuff)
- [pjeanjean](https://github.com/pjeanjean)
- [DrPandemic](https://github.com/drpandemic)
- [joern-h](https://github.com/joern-h)
- [Khinenw](https://github.com/HelloWorld017)
- [ferferga](https://github.com/ferferga)
- [fhriley](https://github.com/fhriley)
- [flemse](https://github.com/flemse)
- [Froghut](https://github.com/Froghut)
- [fruhnow](https://github.com/fruhnow)
- [geilername](https://github.com/geilername)
- [gnattu](https://github.com/gnattu)
- [grafixeyehero](https://github.com/grafixeyehero)
- [h1nk](https://github.com/h1nk)
- [hawken93](https://github.com/hawken93)
- [HelloWorld017](https://github.com/HelloWorld017)
- [jftuga](https://github.com/jftuga)
- [joern-h](https://github.com/joern-h)
- [joshuaboniface](https://github.com/joshuaboniface)
- [JustAMan](https://github.com/JustAMan)
- [justinfenn](https://github.com/justinfenn)
- [KerryRJ](https://github.com/KerryRJ)
- [Larvitar](https://github.com/Larvitar)
- [LeoVerto](https://github.com/LeoVerto)
- [Liggy](https://github.com/Liggy)
- [LogicalPhallacy](https://github.com/LogicalPhallacy)
- [loli10K](https://github.com/loli10K)
- [lostmypillow](https://github.com/lostmypillow)
- [Lynxy](https://github.com/Lynxy)
- [ManfredRichthofen](https://github.com/ManfredRichthofen)
- [Marenz](https://github.com/Marenz)
- [marius-luca-87](https://github.com/marius-luca-87)
- [mark-monteiro](https://github.com/mark-monteiro)
- [Matt07211](https://github.com/Matt07211)
- [mcarlton00](https://github.com/mcarlton00)
- [mitchfizz05](https://github.com/mitchfizz05)
- [MrTimscampi](https://github.com/MrTimscampi)
- [n8225](https://github.com/n8225)
- [Narfinger](https://github.com/Narfinger)
- [NathanPickard](https://github.com/NathanPickard)
- [neilsb](https://github.com/neilsb)
- [nevado](https://github.com/nevado)
- [Nickbert7](https://github.com/Nickbert7)
- [nvllsvm](https://github.com/nvllsvm)
- [nyanmisaka](https://github.com/nyanmisaka)
- [oddstr13](https://github.com/oddstr13)
- [petermcneil](https://github.com/petermcneil)
- [Phlogi](https://github.com/Phlogi)
- [pjeanjean](https://github.com/pjeanjean)
- [ploughpuff](https://github.com/ploughpuff)
- [pR0Ps](https://github.com/pR0Ps)
- [PrplHaz4](https://github.com/PrplHaz4)
- [RazeLighter777](https://github.com/RazeLighter777)
- [redSpoutnik](https://github.com/redSpoutnik)
- [ringmatter](https://github.com/ringmatter)
- [ryan-hartzell](https://github.com/ryan-hartzell)
- [s0urcelab](https://github.com/s0urcelab)
- [sachk](https://github.com/sachk)
- [sammyrc34](https://github.com/sammyrc34)
- [samuel9554](https://github.com/samuel9554)
- [scheidleon](https://github.com/scheidleon)
- [sebPomme](https://github.com/sebPomme)
- [SenorSmartyPants](https://github.com/SenorSmartyPants)
- [shemanaev](https://github.com/shemanaev)
- [skaro13](https://github.com/skaro13)
- [sl1288](https://github.com/sl1288)
- [sorinyo2004](https://github.com/sorinyo2004)
- [sparky8251](https://github.com/sparky8251)
- [stanionascu](https://github.com/stanionascu)
- [stevehayles](https://github.com/stevehayles)
- [SuperSandro2000](https://github.com/SuperSandro2000)
- [tbraeutigam](https://github.com/tbraeutigam)
- [teacupx](https://github.com/teacupx)
- [Terror-Gene](https://github.com/Terror-Gene)
- [ThatNerdyPikachu](https://github.com/ThatNerdyPikachu)
- [ThibaultNocchi](https://github.com/ThibaultNocchi)
- [thornbill](https://github.com/thornbill)
- [ThreeFive-O](https://github.com/ThreeFive-O)
- [TrisMcC](https://github.com/TrisMcC)
- [trumblejoe](https://github.com/trumblejoe)
- [TtheCreator](https://github.com/TtheCreator)
- [twinkybot](https://github.com/twinkybot)
- [Ullmie02](https://github.com/Ullmie02)
- [Unhelpful](https://github.com/Unhelpful)
- [viaregio](https://github.com/viaregio)
- [vitorsemeano](https://github.com/vitorsemeano)
- [voodoos](https://github.com/voodoos)
- [whooo](https://github.com/whooo)
- [WiiPlayer2](https://github.com/WiiPlayer2)
- [WillWill56](https://github.com/WillWill56)
- [wtayl0r](https://github.com/wtayl0r)
- [Wuerfelbecher](https://github.com/Wuerfelbecher)
- [Wunax](https://github.com/Wunax)
- [WWWesten](https://github.com/WWWesten)
- [WX9yMOXWId](https://github.com/WX9yMOXWId)
- [xosdy](https://github.com/xosdy)
- [XVicarious](https://github.com/XVicarious)
- [YouKnowBlom](https://github.com/YouKnowBlom)
# Emby Contributors

View File

@@ -1,42 +1,64 @@
ARG DOTNET_VERSION=2.2
ARG DOTNET_VERSION=3.1
ARG FFMPEG_VERSION=latest
FROM node:alpine as web-builder
ARG JELLYFIN_WEB_VERSION=v10.4.0
RUN apk add curl \
10.5.1
RUN apk add curl git \
&& curl -L https://github.com/jellyfin/jellyfin-web/archive/${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
&& cd jellyfin-web-* \
&& yarn install \
&& yarn build \
&& mv dist /dist
FROM mcr.microsoft.com/dotnet/core/sdk:${DOTNET_VERSION} as builder
FROM mcr.microsoft.com/dotnet/core/sdk:${DOTNET_VERSION}-buster as builder
WORKDIR /repo
COPY . .
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
RUN dotnet publish Jellyfin.Server --configuration Release --output="/jellyfin" --self-contained --runtime linux-x64 "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
# because of changes in docker and systemd we need to not build in parallel at the moment
# see https://success.docker.com/article/how-to-reserve-resource-temporarily-unavailable-errors-due-to-tasksmax-setting
RUN dotnet publish Jellyfin.Server --disable-parallel --configuration Release --output="/jellyfin" --self-contained --runtime linux-x64 "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
FROM jellyfin/ffmpeg:${FFMPEG_VERSION} as ffmpeg
FROM debian:buster-slim
FROM mcr.microsoft.com/dotnet/core/runtime:${DOTNET_VERSION}
COPY --from=ffmpeg / /
# https://askubuntu.com/questions/972516/debian-frontend-environment-variable
ARG DEBIAN_FRONTEND="noninteractive"
# http://stackoverflow.com/questions/48162574/ddg#49462622
ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
# https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
COPY --from=ffmpeg /opt/ffmpeg /opt/ffmpeg
COPY --from=builder /jellyfin /jellyfin
COPY --from=web-builder /dist /jellyfin/jellyfin-web
# Install dependencies:
# libfontconfig1: needed for Skia
# libgomp1: needed for ffmpeg
# libva-drm2: needed for ffmpeg
# mesa-va-drivers: needed for VAAPI
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
libfontconfig1 mesa-va-drivers \
&& apt-get clean autoclean \
&& apt-get autoremove \
libfontconfig1 \
libgomp1 \
libva-drm2 \
mesa-va-drivers \
openssl \
ca-certificates \
vainfo \
i965-va-driver \
&& apt-get clean autoclean -y\
&& apt-get autoremove -y\
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /cache /config /media \
&& chmod 777 /cache /config /media
&& chmod 777 /cache /config /media \
&& ln -s /opt/ffmpeg/bin/ffmpeg /usr/local/bin \
&& ln -s /opt/ffmpeg/bin/ffprobe /usr/local/bin
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
EXPOSE 8096
VOLUME /cache /config /media
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
--datadir /config \
--cachedir /cache \
--ffmpeg /usr/local/bin/ffmpeg
ENTRYPOINT ["./jellyfin/jellyfin", \
"--datadir", "/config", \
"--cachedir", "/cache", \
"--ffmpeg", "/usr/local/bin/ffmpeg"]

View File

@@ -1,11 +1,13 @@
# DESIGNED FOR BUILDING ON AMD64 ONLY
#####################################
# Requires binfm_misc registration
# https://github.com/multiarch/qemu-user-static#binfmt_misc-register
ARG DOTNET_VERSION=3.0
ARG DOTNET_VERSION=3.1
FROM node:alpine as web-builder
ARG JELLYFIN_WEB_VERSION=v10.4.0
RUN apk add curl \
10.5.1
RUN apk add curl git \
&& curl -L https://github.com/jellyfin/jellyfin-web/archive/${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
&& cd jellyfin-web-* \
&& yarn install \
@@ -17,8 +19,6 @@ FROM mcr.microsoft.com/dotnet/core/sdk:${DOTNET_VERSION} as builder
WORKDIR /repo
COPY . .
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
# TODO Remove or update the sed line when we update dotnet version.
RUN find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \;
# Discard objs - may cause failures if exists
RUN find . -type d -name obj | xargs -r rm -r
# Build
@@ -26,19 +26,47 @@ RUN dotnet publish Jellyfin.Server --configuration Release --output="/jellyfin"
FROM multiarch/qemu-user-static:x86_64-arm as qemu
FROM mcr.microsoft.com/dotnet/core/runtime:${DOTNET_VERSION}-stretch-slim-arm32v7
FROM arm32v7/debian:buster-slim
# https://askubuntu.com/questions/972516/debian-frontend-environment-variable
ARG DEBIAN_FRONTEND="noninteractive"
# http://stackoverflow.com/questions/48162574/ddg#49462622
ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
# https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg \
&& apt-get install --no-install-recommends --no-install-suggests -y ca-certificates gnupg curl && \
curl -ks https://repo.jellyfin.org/debian/jellyfin_team.gpg.key | apt-key add - && \
curl -s https://keyserver.ubuntu.com/pks/lookup?op=get\&search=0x6587ffd6536b8826e88a62547876ae518cbcf2f2 | apt-key add - && \
echo 'deb [arch=armhf] https://repo.jellyfin.org/debian buster main' > /etc/apt/sources.list.d/jellyfin.list && \
echo "deb http://ppa.launchpad.net/ubuntu-raspi2/ppa/ubuntu bionic main">> /etc/apt/sources.list.d/raspbins.list && \
apt-get update && \
apt-get install --no-install-recommends --no-install-suggests -y \
jellyfin-ffmpeg \
libssl-dev \
libfontconfig1 \
libfreetype6 \
libomxil-bellagio0 \
libomxil-bellagio-bin \
libraspberrypi0 \
vainfo \
libva2 \
&& apt-get remove curl gnupg -y \
&& apt-get clean autoclean -y \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /cache /config /media \
&& chmod 777 /cache /config /media
COPY --from=builder /jellyfin /jellyfin
COPY --from=web-builder /dist /jellyfin/jellyfin-web
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
EXPOSE 8096
VOLUME /cache /config /media
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
--datadir /config \
--cachedir /cache \
--ffmpeg /usr/bin/ffmpeg
ENTRYPOINT ["./jellyfin/jellyfin", \
"--datadir", "/config", \
"--cachedir", "/cache", \
"--ffmpeg", "/usr/lib/jellyfin-ffmpeg"]

View File

@@ -1,11 +1,13 @@
# DESIGNED FOR BUILDING ON AMD64 ONLY
#####################################
# Requires binfm_misc registration
# https://github.com/multiarch/qemu-user-static#binfmt_misc-register
ARG DOTNET_VERSION=3.0
ARG DOTNET_VERSION=3.1
FROM node:alpine as web-builder
ARG JELLYFIN_WEB_VERSION=v10.4.0
RUN apk add curl \
10.5.1
RUN apk add curl git \
&& curl -L https://github.com/jellyfin/jellyfin-web/archive/${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
&& cd jellyfin-web-* \
&& yarn install \
@@ -17,28 +19,43 @@ FROM mcr.microsoft.com/dotnet/core/sdk:${DOTNET_VERSION} as builder
WORKDIR /repo
COPY . .
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
# TODO Remove or update the sed line when we update dotnet version.
RUN find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \;
# Discard objs - may cause failures if exists
RUN find . -type d -name obj | xargs -r rm -r
# Build
RUN dotnet publish Jellyfin.Server --configuration Release --output="/jellyfin" --self-contained --runtime linux-arm64 "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
FROM multiarch/qemu-user-static:x86_64-aarch64 as qemu
FROM mcr.microsoft.com/dotnet/core/runtime:${DOTNET_VERSION}-stretch-slim-arm64v8
FROM arm64v8/debian:buster-slim
# https://askubuntu.com/questions/972516/debian-frontend-environment-variable
ARG DEBIAN_FRONTEND="noninteractive"
# http://stackoverflow.com/questions/48162574/ddg#49462622
ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
# https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
COPY --from=qemu /usr/bin/qemu-aarch64-static /usr/bin
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg \
RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
ffmpeg \
libssl-dev \
ca-certificates \
libfontconfig1 \
libfreetype6 \
libomxil-bellagio0 \
libomxil-bellagio-bin \
&& apt-get clean autoclean -y \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /cache /config /media \
&& chmod 777 /cache /config /media
COPY --from=builder /jellyfin /jellyfin
COPY --from=web-builder /dist /jellyfin/jellyfin-web
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
EXPOSE 8096
VOLUME /cache /config /media
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
--datadir /config \
--cachedir /cache \
--ffmpeg /usr/bin/ffmpeg
ENTRYPOINT ["./jellyfin/jellyfin", \
"--datadir", "/config", \
"--cachedir", "/cache", \
"--ffmpeg", "/usr/bin/ffmpeg"]

2565
Doxyfile

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
</ItemGroup>
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

View File

@@ -42,7 +42,7 @@ namespace DvdLib.Ifo
}
else
{
using (var vmgFs = _fileSystem.GetFileStream(vmgPath.FullName, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
using (var vmgFs = new FileStream(vmgPath.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var vmgRead = new BigEndianBinaryReader(vmgFs))
{
@@ -95,7 +95,7 @@ namespace DvdLib.Ifo
{
VTSPaths[vtsNum] = vtsPath;
using (var vtsFs = _fileSystem.GetFileStream(vtsPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
using (var vtsFs = new FileStream(vtsPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var vtsRead = new BigEndianBinaryReader(vtsFs))
{

View File

@@ -1,11 +1,13 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emby.Dlna.Main;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Services;
@@ -108,12 +110,13 @@ namespace Emby.Dlna.Api
public class DlnaServerService : IService, IRequiresRequest
{
private readonly IDlnaManager _dlnaManager;
private const string XMLContentType = "text/xml; charset=UTF-8";
private readonly IDlnaManager _dlnaManager;
private readonly IHttpResultFactory _resultFactory;
private readonly IServerConfigurationManager _configurationManager;
public IRequest Request { get; set; }
private IHttpResultFactory _resultFactory;
private IContentDirectory ContentDirectory => DlnaEntryPoint.Current.ContentDirectory;
@@ -121,10 +124,14 @@ namespace Emby.Dlna.Api
private IMediaReceiverRegistrar MediaReceiverRegistrar => DlnaEntryPoint.Current.MediaReceiverRegistrar;
public DlnaServerService(IDlnaManager dlnaManager, IHttpResultFactory httpResultFactory)
public DlnaServerService(
IDlnaManager dlnaManager,
IHttpResultFactory httpResultFactory,
IServerConfigurationManager configurationManager)
{
_dlnaManager = dlnaManager;
_resultFactory = httpResultFactory;
_configurationManager = configurationManager;
}
private string GetHeader(string name)
@@ -166,32 +173,32 @@ namespace Emby.Dlna.Api
return _resultFactory.GetResult(Request, xml, XMLContentType);
}
public object Post(ProcessMediaReceiverRegistrarControlRequest request)
public async Task<object> Post(ProcessMediaReceiverRegistrarControlRequest request)
{
var response = PostAsync(request.RequestStream, MediaReceiverRegistrar);
var response = await PostAsync(request.RequestStream, MediaReceiverRegistrar).ConfigureAwait(false);
return _resultFactory.GetResult(Request, response.Xml, XMLContentType);
}
public object Post(ProcessContentDirectoryControlRequest request)
public async Task<object> Post(ProcessContentDirectoryControlRequest request)
{
var response = PostAsync(request.RequestStream, ContentDirectory);
var response = await PostAsync(request.RequestStream, ContentDirectory).ConfigureAwait(false);
return _resultFactory.GetResult(Request, response.Xml, XMLContentType);
}
public object Post(ProcessConnectionManagerControlRequest request)
public async Task<object> Post(ProcessConnectionManagerControlRequest request)
{
var response = PostAsync(request.RequestStream, ConnectionManager);
var response = await PostAsync(request.RequestStream, ConnectionManager).ConfigureAwait(false);
return _resultFactory.GetResult(Request, response.Xml, XMLContentType);
}
private ControlResponse PostAsync(Stream requestStream, IUpnpService service)
private Task<ControlResponse> PostAsync(Stream requestStream, IUpnpService service)
{
var id = GetPathValue(2);
var id = GetPathValue(2).ToString();
return service.ProcessControlRequest(new ControlRequest
return service.ProcessControlRequestAsync(new ControlRequest
{
Headers = Request.Headers,
InputXml = requestStream,
@@ -200,38 +207,99 @@ namespace Emby.Dlna.Api
});
}
protected string GetPathValue(int index)
// Copied from MediaBrowser.Api/BaseApiService.cs
// TODO: Remove code duplication
/// <summary>
/// Gets the path segment at the specified index.
/// </summary>
/// <param name="index">The index of the path segment.</param>
/// <returns>The path segment at the specified index.</returns>
/// <exception cref="IndexOutOfRangeException" >Path doesn't contain enough segments.</exception>
/// <exception cref="InvalidDataException" >Path doesn't start with the base url.</exception>
protected internal ReadOnlySpan<char> GetPathValue(int index)
{
var pathInfo = Parse(Request.PathInfo);
var first = pathInfo[0];
static void ThrowIndexOutOfRangeException()
=> throw new IndexOutOfRangeException("Path doesn't contain enough segments.");
// backwards compatibility
// 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))
static void ThrowInvalidDataException()
=> throw new InvalidDataException("Path doesn't start with the base url.");
ReadOnlySpan<char> path = Request.PathInfo;
// Remove the protocol part from the url
int pos = path.LastIndexOf("://");
if (pos != -1)
{
index++;
path = path.Slice(pos + 3);
}
return pathInfo[index];
}
private List<string> Parse(string pathUri)
{
var actionParts = pathUri.Split(new[] { "://" }, StringSplitOptions.None);
var pathInfo = actionParts[actionParts.Length - 1];
var optionsPos = pathInfo.LastIndexOf('?');
if (optionsPos != -1)
// Remove the query string
pos = path.LastIndexOf('?');
if (pos != -1)
{
pathInfo = pathInfo.Substring(0, optionsPos);
path = path.Slice(0, pos);
}
var args = pathInfo.Split('/');
// Remove the domain
pos = path.IndexOf('/');
if (pos != -1)
{
path = path.Slice(pos);
}
return args.Skip(1).ToList();
// Remove base url
string baseUrl = _configurationManager.Configuration.BaseUrl;
int baseUrlLen = baseUrl.Length;
if (baseUrlLen != 0)
{
if (path.StartsWith(baseUrl, StringComparison.OrdinalIgnoreCase))
{
path = path.Slice(baseUrlLen);
}
else
{
// The path doesn't start with the base url,
// how did we get here?
ThrowInvalidDataException();
}
}
// Remove leading /
path = path.Slice(1);
// Backwards compatibility
const string Emby = "emby/";
if (path.StartsWith(Emby, StringComparison.OrdinalIgnoreCase))
{
path = path.Slice(Emby.Length);
}
const string MediaBrowser = "mediabrowser/";
if (path.StartsWith(MediaBrowser, StringComparison.OrdinalIgnoreCase))
{
path = path.Slice(MediaBrowser.Length);
}
// Skip segments until we are at the right index
for (int i = 0; i < index; i++)
{
pos = path.IndexOf('/');
if (pos == -1)
{
ThrowIndexOutOfRangeException();
}
path = path.Slice(pos + 1);
}
// Remove the rest
pos = path.IndexOf('/');
if (pos != -1)
{
path = path.Slice(0, pos);
}
return path;
}
public object Get(GetIcon request)

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Linq;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Net;

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna.Common
{

View File

@@ -1,3 +1,7 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Globalization;
namespace Emby.Dlna.Common
{
@@ -13,9 +17,14 @@ namespace Emby.Dlna.Common
public string Depth { get; set; }
/// <inheritdoc />
public override string ToString()
{
return string.Format("{0}x{1}", Height, Width);
return string.Format(
CultureInfo.InvariantCulture,
"{0}x{1}",
Height,
Width);
}
}
}

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna.Common
{
@@ -13,9 +15,8 @@ namespace Emby.Dlna.Common
public string EventSubUrl { get; set; }
/// <inheritdoc />
public override string ToString()
{
return string.Format("{0}", ServiceId);
}
=> ServiceId;
}
}

View File

@@ -1,21 +1,25 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
namespace Emby.Dlna.Common
{
public class ServiceAction
{
public string Name { get; set; }
public List<Argument> ArgumentList { get; set; }
public override string ToString()
{
return Name;
}
public ServiceAction()
{
ArgumentList = new List<Argument>();
}
public string Name { get; set; }
public List<Argument> ArgumentList { get; set; }
/// <inheritdoc />
public override string ToString()
{
return Name;
}
}
}

View File

@@ -1,9 +1,17 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.Common
{
public class StateVariable
{
public StateVariable()
{
AllowedValues = Array.Empty<string>();
}
public string Name { get; set; }
public string DataType { get; set; }
@@ -12,14 +20,8 @@ namespace Emby.Dlna.Common
public string[] AllowedValues { get; set; }
/// <inheritdoc />
public override string ToString()
{
return Name;
}
public StateVariable()
{
AllowedValues = Array.Empty<string>();
}
=> Name;
}
}

View File

@@ -1,17 +1,10 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna.Configuration
{
public class DlnaOptions
{
public bool EnablePlayTo { get; set; }
public bool EnableServer { get; set; }
public bool EnableDebugLog { get; set; }
public bool BlastAliveMessages { get; set; }
public bool SendOnlyMatchedHost { get; set; }
public int ClientDiscoveryIntervalSeconds { get; set; }
public int BlastAliveMessageIntervalSeconds { get; set; }
public string DefaultUserId { get; set; }
public DlnaOptions()
{
EnablePlayTo = true;
@@ -21,5 +14,21 @@ namespace Emby.Dlna.Configuration
ClientDiscoveryIntervalSeconds = 60;
BlastAliveMessageIntervalSeconds = 1800;
}
public bool EnablePlayTo { get; set; }
public bool EnableServer { get; set; }
public bool EnableDebugLog { get; set; }
public bool BlastAliveMessages { get; set; }
public bool SendOnlyMatchedHost { get; set; }
public int ClientDiscoveryIntervalSeconds { get; set; }
public int BlastAliveMessageIntervalSeconds { get; set; }
public string DefaultUserId { get; set; }
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Configuration;
using MediaBrowser.Common.Configuration;

View File

@@ -1,3 +1,7 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Threading.Tasks;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
@@ -20,17 +24,19 @@ namespace Emby.Dlna.ConnectionManager
_logger = logger;
}
/// <inheritdoc />
public string GetServiceXml()
{
return new ConnectionManagerXmlBuilder().GetXml();
}
public ControlResponse ProcessControlRequest(ControlRequest request)
/// <inheritdoc />
public Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request)
{
var profile = _dlna.GetProfile(request.Headers) ??
_dlna.GetDefaultProfile();
return new ControlHandler(_config, _logger, profile).ProcessControlRequest(request);
return new ControlHandler(_config, _logger, profile).ProcessControlRequestAsync(request);
}
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;

View File

@@ -1,5 +1,9 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Xml;
using Emby.Dlna.Service;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
@@ -12,29 +16,28 @@ namespace Emby.Dlna.ConnectionManager
{
private readonly DeviceProfile _profile;
protected override IEnumerable<KeyValuePair<string, string>> GetResult(string methodName, IDictionary<string, string> methodParams)
{
if (string.Equals(methodName, "GetProtocolInfo", StringComparison.OrdinalIgnoreCase))
{
return HandleGetProtocolInfo();
}
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private IEnumerable<KeyValuePair<string, string>> HandleGetProtocolInfo()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "Source", _profile.ProtocolInfo },
{ "Sink", "" }
};
}
public ControlHandler(IServerConfigurationManager config, ILogger logger, DeviceProfile profile)
: base(config, logger)
{
_profile = profile;
}
/// <inheritdoc />
protected override void WriteResult(string methodName, IDictionary<string, string> methodParams, XmlWriter xmlWriter)
{
if (string.Equals(methodName, "GetProtocolInfo", StringComparison.OrdinalIgnoreCase))
{
HandleGetProtocolInfo(xmlWriter);
return;
}
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private void HandleGetProtocolInfo(XmlWriter xmlWriter)
{
xmlWriter.WriteElementString("Source", _profile.ProtocolInfo);
xmlWriter.WriteElementString("Sink", string.Empty);
}
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;

View File

@@ -1,5 +1,8 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
@@ -67,12 +70,14 @@ namespace Emby.Dlna.ContentDirectory
}
}
/// <inheritdoc />
public string GetServiceXml()
{
return new ContentDirectoryXmlBuilder().GetXml();
}
public ControlResponse ProcessControlRequest(ControlRequest request)
/// <inheritdoc />
public Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request)
{
var profile = _dlna.GetProfile(request.Headers) ??
_dlna.GetDefaultProfile();
@@ -97,14 +102,14 @@ namespace Emby.Dlna.ContentDirectory
_userViewManager,
_mediaEncoder,
_tvSeriesManager)
.ProcessControlRequest(request);
.ProcessControlRequestAsync(request);
}
private User GetUser(DeviceProfile profile)
{
if (!string.IsNullOrEmpty(profile.UserId))
{
var user = _userManager.GetUserById(profile.UserId);
var user = _userManager.GetUserById(Guid.Parse(profile.UserId));
if (user != null)
{
@@ -116,7 +121,7 @@ namespace Emby.Dlna.ContentDirectory
if (!string.IsNullOrEmpty(userId))
{
var user = _userManager.GetUserById(userId);
var user = _userManager.GetUserById(Guid.Parse(userId));
if (user != null)
{

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -44,7 +47,6 @@ namespace Emby.Dlna.ContentDirectory
private const string NS_UPNP = "urn:schemas-upnp-org:metadata-1-0/upnp/";
private readonly int _systemUpdateId;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private readonly DidlBuilder _didlBuilder;
@@ -58,7 +60,8 @@ namespace Emby.Dlna.ContentDirectory
string accessToken,
IImageProcessor imageProcessor,
IUserDataManager userDataManager,
User user, int systemUpdateId,
User user,
int systemUpdateId,
IServerConfigurationManager config,
ILocalizationManager localization,
IMediaSourceManager mediaSourceManager,
@@ -76,117 +79,132 @@ namespace Emby.Dlna.ContentDirectory
_profile = profile;
_config = config;
_didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, accessToken, userDataManager, localization, mediaSourceManager, _logger, mediaEncoder);
_didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, accessToken, userDataManager, localization, mediaSourceManager, Logger, mediaEncoder);
}
protected override IEnumerable<KeyValuePair<string, string>> GetResult(string methodName, IDictionary<string, string> methodParams)
/// <inheritdoc />
protected override void WriteResult(string methodName, IDictionary<string, string> methodParams, XmlWriter xmlWriter)
{
var deviceId = "test";
var user = _user;
const string DeviceId = "test";
if (string.Equals(methodName, "GetSearchCapabilities", StringComparison.OrdinalIgnoreCase))
return HandleGetSearchCapabilities();
{
HandleGetSearchCapabilities(xmlWriter);
return;
}
if (string.Equals(methodName, "GetSortCapabilities", StringComparison.OrdinalIgnoreCase))
return HandleGetSortCapabilities();
{
HandleGetSortCapabilities(xmlWriter);
return;
}
if (string.Equals(methodName, "GetSortExtensionCapabilities", StringComparison.OrdinalIgnoreCase))
return HandleGetSortExtensionCapabilities();
{
HandleGetSortExtensionCapabilities(xmlWriter);
return;
}
if (string.Equals(methodName, "GetSystemUpdateID", StringComparison.OrdinalIgnoreCase))
return HandleGetSystemUpdateID();
{
HandleGetSystemUpdateID(xmlWriter);
return;
}
if (string.Equals(methodName, "Browse", StringComparison.OrdinalIgnoreCase))
return HandleBrowse(methodParams, user, deviceId);
{
HandleBrowse(xmlWriter, methodParams, DeviceId);
return;
}
if (string.Equals(methodName, "X_GetFeatureList", StringComparison.OrdinalIgnoreCase))
return HandleXGetFeatureList();
{
HandleXGetFeatureList(xmlWriter);
return;
}
if (string.Equals(methodName, "GetFeatureList", StringComparison.OrdinalIgnoreCase))
return HandleGetFeatureList();
{
HandleGetFeatureList(xmlWriter);
return;
}
if (string.Equals(methodName, "X_SetBookmark", StringComparison.OrdinalIgnoreCase))
return HandleXSetBookmark(methodParams, user);
{
HandleXSetBookmark(methodParams);
return;
}
if (string.Equals(methodName, "Search", StringComparison.OrdinalIgnoreCase))
return HandleSearch(methodParams, user, deviceId);
{
HandleSearch(xmlWriter, methodParams, DeviceId);
return;
}
if (string.Equals(methodName, "X_BrowseByLetter", StringComparison.OrdinalIgnoreCase))
return HandleX_BrowseByLetter(methodParams, user, deviceId);
{
HandleXBrowseByLetter(xmlWriter, methodParams, DeviceId);
return;
}
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private IEnumerable<KeyValuePair<string, string>> HandleXSetBookmark(IDictionary<string, string> sparams, User user)
private void HandleXSetBookmark(IDictionary<string, string> sparams)
{
var id = sparams["ObjectID"];
var serverItem = GetItemFromObjectId(id, user);
var serverItem = GetItemFromObjectId(id, _user);
var item = serverItem.Item;
var newbookmark = int.Parse(sparams["PosSecond"], _usCulture);
var newbookmark = int.Parse(sparams["PosSecond"], CultureInfo.InvariantCulture);
var userdata = _userDataManager.GetUserData(user, item);
var userdata = _userDataManager.GetUserData(_user, item);
userdata.PlaybackPositionTicks = TimeSpan.FromSeconds(newbookmark).Ticks;
_userDataManager.SaveUserData(user, item, userdata, UserDataSaveReason.TogglePlayed,
_userDataManager.SaveUserData(_user, item, userdata, UserDataSaveReason.TogglePlayed,
CancellationToken.None);
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
private IEnumerable<KeyValuePair<string, string>> HandleGetSearchCapabilities()
private void HandleGetSearchCapabilities(XmlWriter xmlWriter)
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "SearchCaps", "res@resolution,res@size,res@duration,dc:title,dc:creator,upnp:actor,upnp:artist,upnp:genre,upnp:album,dc:date,upnp:class,@id,@refID,@protocolInfo,upnp:author,dc:description,pv:avKeywords" }
};
xmlWriter.WriteElementString(
"SearchCaps",
"res@resolution,res@size,res@duration,dc:title,dc:creator,upnp:actor,upnp:artist,upnp:genre,upnp:album,dc:date,upnp:class,@id,@refID,@protocolInfo,upnp:author,dc:description,pv:avKeywords");
}
private IEnumerable<KeyValuePair<string, string>> HandleGetSortCapabilities()
private void HandleGetSortCapabilities(XmlWriter xmlWriter)
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "SortCaps", "res@duration,res@size,res@bitrate,dc:date,dc:title,dc:size,upnp:album,upnp:artist,upnp:albumArtist,upnp:episodeNumber,upnp:genre,upnp:originalTrackNumber,upnp:rating" }
};
xmlWriter.WriteElementString(
"SortCaps",
"res@duration,res@size,res@bitrate,dc:date,dc:title,dc:size,upnp:album,upnp:artist,upnp:albumArtist,upnp:episodeNumber,upnp:genre,upnp:originalTrackNumber,upnp:rating");
}
private IEnumerable<KeyValuePair<string, string>> HandleGetSortExtensionCapabilities()
private void HandleGetSortExtensionCapabilities(XmlWriter xmlWriter)
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "SortExtensionCaps", "res@duration,res@size,res@bitrate,dc:date,dc:title,dc:size,upnp:album,upnp:artist,upnp:albumArtist,upnp:episodeNumber,upnp:genre,upnp:originalTrackNumber,upnp:rating" }
};
xmlWriter.WriteElementString(
"SortExtensionCaps",
"res@duration,res@size,res@bitrate,dc:date,dc:title,dc:size,upnp:album,upnp:artist,upnp:albumArtist,upnp:episodeNumber,upnp:genre,upnp:originalTrackNumber,upnp:rating");
}
private IEnumerable<KeyValuePair<string, string>> HandleGetSystemUpdateID()
private void HandleGetSystemUpdateID(XmlWriter xmlWriter)
{
var headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
headers.Add("Id", _systemUpdateId.ToString(_usCulture));
return headers;
xmlWriter.WriteElementString("Id", _systemUpdateId.ToString(CultureInfo.InvariantCulture));
}
private IEnumerable<KeyValuePair<string, string>> HandleGetFeatureList()
private void HandleGetFeatureList(XmlWriter xmlWriter)
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "FeatureList", GetFeatureListXml() }
};
xmlWriter.WriteElementString("FeatureList", WriteFeatureListXml());
}
private IEnumerable<KeyValuePair<string, string>> HandleXGetFeatureList()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "FeatureList", GetFeatureListXml() }
};
}
private void HandleXGetFeatureList(XmlWriter xmlWriter)
=> HandleGetFeatureList(xmlWriter);
private string GetFeatureListXml()
private string WriteFeatureListXml()
{
// TODO: clean this up
var builder = new StringBuilder();
builder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
@@ -213,7 +231,7 @@ namespace Emby.Dlna.ContentDirectory
return defaultValue;
}
private IEnumerable<KeyValuePair<string, string>> HandleBrowse(IDictionary<string, string> sparams, User user, string deviceId)
private void HandleBrowse(XmlWriter xmlWriter, IDictionary<string, string> sparams, string deviceId)
{
var id = sparams["ObjectID"];
var flag = sparams["BrowseFlag"];
@@ -237,101 +255,95 @@ namespace Emby.Dlna.ContentDirectory
start = startVal;
}
var settings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
CloseOutput = false,
OmitXmlDeclaration = true,
ConformanceLevel = ConformanceLevel.Fragment
};
StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8);
int totalCount;
var dlnaOptions = _config.GetDlnaConfiguration();
using (var writer = XmlWriter.Create(builder, settings))
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
{
//writer.WriteStartDocument();
writer.WriteStartElement(string.Empty, "DIDL-Lite", NS_DIDL);
writer.WriteAttributeString("xmlns", "dc", null, NS_DC);
writer.WriteAttributeString("xmlns", "dlna", null, NS_DLNA);
writer.WriteAttributeString("xmlns", "upnp", null, NS_UPNP);
//didl.SetAttribute("xmlns:sec", NS_SEC);
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(id, user);
var item = serverItem.Item;
if (string.Equals(flag, "BrowseMetadata"))
var settings = new XmlWriterSettings()
{
totalCount = 1;
Encoding = Encoding.UTF8,
CloseOutput = false,
OmitXmlDeclaration = true,
ConformanceLevel = ConformanceLevel.Fragment
};
if (item.IsDisplayedAsFolder || serverItem.StubType.HasValue)
{
var childrenResult = GetUserItems(item, serverItem.StubType, user, sortCriteria, start, requestedCount);
_didlBuilder.WriteFolderElement(writer, item, serverItem.StubType, null, childrenResult.TotalRecordCount, filter, id);
}
else
{
_didlBuilder.WriteItemElement(dlnaOptions, writer, item, user, null, null, deviceId, filter);
}
provided++;
}
else
using (var writer = XmlWriter.Create(builder, settings))
{
var childrenResult = GetUserItems(item, serverItem.StubType, user, sortCriteria, start, requestedCount);
totalCount = childrenResult.TotalRecordCount;
writer.WriteStartElement(string.Empty, "DIDL-Lite", NS_DIDL);
provided = childrenResult.Items.Count;
writer.WriteAttributeString("xmlns", "dc", null, NS_DC);
writer.WriteAttributeString("xmlns", "dlna", null, NS_DLNA);
writer.WriteAttributeString("xmlns", "upnp", null, NS_UPNP);
foreach (var i in childrenResult.Items)
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(id, _user);
var item = serverItem.Item;
if (string.Equals(flag, "BrowseMetadata", StringComparison.Ordinal))
{
var childItem = i.Item;
var displayStubType = i.StubType;
totalCount = 1;
if (childItem.IsDisplayedAsFolder || displayStubType.HasValue)
if (item.IsDisplayedAsFolder || serverItem.StubType.HasValue)
{
var childCount = (GetUserItems(childItem, displayStubType, user, sortCriteria, null, 0))
.TotalRecordCount;
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
_didlBuilder.WriteFolderElement(writer, childItem, displayStubType, item, childCount, filter);
_didlBuilder.WriteFolderElement(writer, item, serverItem.StubType, null, childrenResult.TotalRecordCount, filter, id);
}
else
{
_didlBuilder.WriteItemElement(dlnaOptions, writer, childItem, user, item, serverItem.StubType, deviceId, filter);
var dlnaOptions = _config.GetDlnaConfiguration();
_didlBuilder.WriteItemElement(dlnaOptions, writer, item, _user, null, null, deviceId, filter);
}
provided++;
}
else
{
var childrenResult = GetUserItems(item, serverItem.StubType, _user, sortCriteria, start, requestedCount);
totalCount = childrenResult.TotalRecordCount;
provided = childrenResult.Items.Count;
var dlnaOptions = _config.GetDlnaConfiguration();
foreach (var i in childrenResult.Items)
{
var childItem = i.Item;
var displayStubType = i.StubType;
if (childItem.IsDisplayedAsFolder || displayStubType.HasValue)
{
var childCount = GetUserItems(childItem, displayStubType, _user, sortCriteria, null, 0)
.TotalRecordCount;
_didlBuilder.WriteFolderElement(writer, childItem, displayStubType, item, childCount, filter);
}
else
{
_didlBuilder.WriteItemElement(dlnaOptions, writer, childItem, _user, item, serverItem.StubType, deviceId, filter);
}
}
}
writer.WriteFullEndElement();
}
writer.WriteFullEndElement();
//writer.WriteEndDocument();
xmlWriter.WriteElementString("Result", builder.ToString());
}
var resXML = builder.ToString();
return new[]
{
new KeyValuePair<string,string>("Result", resXML),
new KeyValuePair<string,string>("NumberReturned", provided.ToString(_usCulture)),
new KeyValuePair<string,string>("TotalMatches", totalCount.ToString(_usCulture)),
new KeyValuePair<string,string>("UpdateID", _systemUpdateId.ToString(_usCulture))
};
xmlWriter.WriteElementString("NumberReturned", provided.ToString(CultureInfo.InvariantCulture));
xmlWriter.WriteElementString("TotalMatches", totalCount.ToString(CultureInfo.InvariantCulture));
xmlWriter.WriteElementString("UpdateID", _systemUpdateId.ToString(CultureInfo.InvariantCulture));
}
private IEnumerable<KeyValuePair<string, string>> HandleX_BrowseByLetter(IDictionary<string, string> sparams, User user, string deviceId)
private void HandleXBrowseByLetter(XmlWriter xmlWriter, IDictionary<string, string> sparams, string deviceId)
{
// TODO: Implement this method
return HandleSearch(sparams, user, deviceId);
HandleSearch(xmlWriter, sparams, deviceId);
}
private IEnumerable<KeyValuePair<string, string>> HandleSearch(IDictionary<string, string> sparams, User user, string deviceId)
private void HandleSearch(XmlWriter xmlWriter, IDictionary<string, string> sparams, string deviceId)
{
var searchCriteria = new SearchCriteria(GetValueOrDefault(sparams, "SearchCriteria", ""));
var sortCriteria = new SortCriteria(GetValueOrDefault(sparams, "SortCriteria", ""));
@@ -354,99 +366,86 @@ namespace Emby.Dlna.ContentDirectory
start = startVal;
}
var settings = new XmlWriterSettings
QueryResult<BaseItem> childrenResult;
using (StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8))
{
Encoding = Encoding.UTF8,
CloseOutput = false,
OmitXmlDeclaration = true,
ConformanceLevel = ConformanceLevel.Fragment
};
StringWriter builder = new StringWriterWithEncoding(Encoding.UTF8);
int totalCount = 0;
int provided = 0;
using (var writer = XmlWriter.Create(builder, settings))
{
//writer.WriteStartDocument();
writer.WriteStartElement(string.Empty, "DIDL-Lite", NS_DIDL);
writer.WriteAttributeString("xmlns", "dc", null, NS_DC);
writer.WriteAttributeString("xmlns", "dlna", null, NS_DLNA);
writer.WriteAttributeString("xmlns", "upnp", null, NS_UPNP);
//didl.SetAttribute("xmlns:sec", NS_SEC);
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(sparams["ContainerID"], user);
var item = serverItem.Item;
var childrenResult = (GetChildrenSorted(item, user, searchCriteria, sortCriteria, start, requestedCount));
totalCount = childrenResult.TotalRecordCount;
provided = childrenResult.Items.Count;
var dlnaOptions = _config.GetDlnaConfiguration();
foreach (var i in childrenResult.Items)
var settings = new XmlWriterSettings()
{
if (i.IsDisplayedAsFolder)
{
var childCount = (GetChildrenSorted(i, user, searchCriteria, sortCriteria, null, 0))
.TotalRecordCount;
Encoding = Encoding.UTF8,
CloseOutput = false,
OmitXmlDeclaration = true,
ConformanceLevel = ConformanceLevel.Fragment
};
_didlBuilder.WriteFolderElement(writer, i, null, item, childCount, filter);
}
else
using (var writer = XmlWriter.Create(builder, settings))
{
writer.WriteStartElement(string.Empty, "DIDL-Lite", NS_DIDL);
writer.WriteAttributeString("xmlns", "dc", null, NS_DC);
writer.WriteAttributeString("xmlns", "dlna", null, NS_DLNA);
writer.WriteAttributeString("xmlns", "upnp", null, NS_UPNP);
DidlBuilder.WriteXmlRootAttributes(_profile, writer);
var serverItem = GetItemFromObjectId(sparams["ContainerID"], _user);
var item = serverItem.Item;
childrenResult = GetChildrenSorted(item, _user, searchCriteria, sortCriteria, start, requestedCount);
var dlnaOptions = _config.GetDlnaConfiguration();
foreach (var i in childrenResult.Items)
{
_didlBuilder.WriteItemElement(dlnaOptions, writer, i, user, item, serverItem.StubType, deviceId, filter);
if (i.IsDisplayedAsFolder)
{
var childCount = GetChildrenSorted(i, _user, searchCriteria, sortCriteria, null, 0)
.TotalRecordCount;
_didlBuilder.WriteFolderElement(writer, i, null, item, childCount, filter);
}
else
{
_didlBuilder.WriteItemElement(dlnaOptions, writer, i, _user, item, serverItem.StubType, deviceId, filter);
}
}
writer.WriteFullEndElement();
}
writer.WriteFullEndElement();
//writer.WriteEndDocument();
xmlWriter.WriteElementString("Result", builder.ToString());
}
var resXML = builder.ToString();
return new List<KeyValuePair<string, string>>
{
new KeyValuePair<string,string>("Result", resXML),
new KeyValuePair<string,string>("NumberReturned", provided.ToString(_usCulture)),
new KeyValuePair<string,string>("TotalMatches", totalCount.ToString(_usCulture)),
new KeyValuePair<string,string>("UpdateID", _systemUpdateId.ToString(_usCulture))
};
xmlWriter.WriteElementString("NumberReturned", childrenResult.Items.Count.ToString(CultureInfo.InvariantCulture));
xmlWriter.WriteElementString("TotalMatches", childrenResult.TotalRecordCount.ToString(CultureInfo.InvariantCulture));
xmlWriter.WriteElementString("UpdateID", _systemUpdateId.ToString(CultureInfo.InvariantCulture));
}
private QueryResult<BaseItem> GetChildrenSorted(BaseItem item, User user, SearchCriteria search, SortCriteria sort, int? startIndex, int? limit)
{
var folder = (Folder)item;
var sortOrders = new List<string>();
if (!folder.IsPreSorted)
{
sortOrders.Add(ItemSortBy.SortName);
}
var sortOrders = folder.IsPreSorted
? Array.Empty<(string, SortOrder)>()
: new[] { (ItemSortBy.SortName, sort.SortOrder) };
var mediaTypes = new List<string>();
string[] mediaTypes = Array.Empty<string>();
bool? isFolder = null;
if (search.SearchType == SearchType.Audio)
{
mediaTypes.Add(MediaType.Audio);
mediaTypes = new[] { MediaType.Audio };
isFolder = false;
}
else if (search.SearchType == SearchType.Video)
{
mediaTypes.Add(MediaType.Video);
mediaTypes = new[] { MediaType.Video };
isFolder = false;
}
else if (search.SearchType == SearchType.Image)
{
mediaTypes.Add(MediaType.Photo);
mediaTypes = new[] { MediaType.Photo };
isFolder = false;
}
else if (search.SearchType == SearchType.Playlist)
@@ -464,13 +463,13 @@ namespace Emby.Dlna.ContentDirectory
{
Limit = limit,
StartIndex = startIndex,
OrderBy = sortOrders.Select(i => new ValueTuple<string, SortOrder>(i, sort.SortOrder)).ToArray(),
OrderBy = sortOrders,
User = user,
Recursive = true,
IsMissing = false,
ExcludeItemTypes = new[] { typeof(Book).Name },
IsFolder = isFolder,
MediaTypes = mediaTypes.ToArray(),
MediaTypes = mediaTypes,
DtoOptions = GetDtoOptions()
});
}
@@ -771,11 +770,11 @@ namespace Emby.Dlna.ContentDirectory
})
.ToArray();
return new QueryResult<ServerItem>
return ApplyPaging(new QueryResult<ServerItem>
{
Items = folders,
TotalRecordCount = folders.Length
};
}, startIndex, limit);
}
private QueryResult<ServerItem> GetTvFolders(BaseItem item, User user, StubType? stubType, SortCriteria sort, int? startIndex, int? limit)
@@ -872,10 +871,10 @@ namespace Emby.Dlna.ContentDirectory
query.Parent = parent;
query.SetUser(user);
query.OrderBy = new ValueTuple<string, SortOrder>[]
query.OrderBy = new[]
{
new ValueTuple<string, SortOrder> (ItemSortBy.DatePlayed, SortOrder.Descending),
new ValueTuple<string, SortOrder> (ItemSortBy.SortName, SortOrder.Ascending)
(ItemSortBy.DatePlayed, SortOrder.Descending),
(ItemSortBy.SortName, SortOrder.Ascending)
};
query.IsResumable = true;
@@ -1121,7 +1120,7 @@ namespace Emby.Dlna.ContentDirectory
private QueryResult<ServerItem> GetMusicLatest(BaseItem parent, User user, InternalItemsQuery query)
{
query.OrderBy = new ValueTuple<string, SortOrder>[] { };
query.OrderBy = Array.Empty<(string, SortOrder)>();
var items = _userViewManager.GetLatestItems(new LatestItemsQuery
{
@@ -1138,7 +1137,7 @@ namespace Emby.Dlna.ContentDirectory
private QueryResult<ServerItem> GetNextUp(BaseItem parent, User user, InternalItemsQuery query)
{
query.OrderBy = new ValueTuple<string, SortOrder>[] { };
query.OrderBy = Array.Empty<(string, SortOrder)>();
var result = _tvSeriesManager.GetNextUp(new NextUpQuery
{
@@ -1153,7 +1152,7 @@ namespace Emby.Dlna.ContentDirectory
private QueryResult<ServerItem> GetTvLatest(BaseItem parent, User user, InternalItemsQuery query)
{
query.OrderBy = new ValueTuple<string, SortOrder>[] { };
query.OrderBy = Array.Empty<(string, SortOrder)>();
var items = _userViewManager.GetLatestItems(new LatestItemsQuery
{
@@ -1170,7 +1169,7 @@ namespace Emby.Dlna.ContentDirectory
private QueryResult<ServerItem> GetMovieLatest(BaseItem parent, User user, InternalItemsQuery query)
{
query.OrderBy = new ValueTuple<string, SortOrder>[] { };
query.OrderBy = Array.Empty<(string, SortOrder)>();
var items = _userViewManager.GetLatestItems(new LatestItemsQuery
{
@@ -1274,13 +1273,14 @@ namespace Emby.Dlna.ContentDirectory
private void SetSorting(InternalItemsQuery query, SortCriteria sort, bool isPreSorted)
{
var sortOrders = new List<string>();
if (!isPreSorted)
if (isPreSorted)
{
sortOrders.Add(ItemSortBy.SortName);
query.OrderBy = Array.Empty<(string, SortOrder)>();
}
else
{
query.OrderBy = new[] { (ItemSortBy.SortName, sort.SortOrder) };
}
query.OrderBy = sortOrders.Select(i => new ValueTuple<string, SortOrder>(i, sort.SortOrder)).ToArray();
}
private QueryResult<ServerItem> ApplyPaging(QueryResult<ServerItem> result, int? startIndex, int? limit)
@@ -1303,11 +1303,11 @@ namespace Emby.Dlna.ContentDirectory
StubType? stubType = null;
// After using PlayTo, MediaMonkey sends a request to the server trying to get item info
const string paramsSrch = "Params=";
var paramsIndex = id.IndexOf(paramsSrch, StringComparison.OrdinalIgnoreCase);
const string ParamsSrch = "Params=";
var paramsIndex = id.IndexOf(ParamsSrch, StringComparison.OrdinalIgnoreCase);
if (paramsIndex != -1)
{
id = id.Substring(paramsIndex + paramsSrch.Length);
id = id.Substring(paramsIndex + ParamsSrch.Length);
var parts = id.Split(';');
id = parts[23];
@@ -1335,7 +1335,7 @@ namespace Emby.Dlna.ContentDirectory
};
}
_logger.LogError("Error parsing item Id: {id}. Returning user root folder.", id);
Logger.LogError("Error parsing item Id: {id}. Returning user root folder.", id);
return new ServerItem(_libraryManager.GetUserRootFolder());
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.IO;
using Microsoft.AspNetCore.Http;

View File

@@ -1,18 +1,21 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
namespace Emby.Dlna
{
public class ControlResponse
{
public ControlResponse()
{
Headers = new Dictionary<string, string>();
}
public IDictionary<string, string> Headers { get; set; }
public string Xml { get; set; }
public bool IsSuccessful { get; set; }
public ControlResponse()
{
Headers = new Dictionary<string, string>();
}
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Globalization;
using System.IO;
@@ -18,7 +21,6 @@ using MediaBrowser.Controller.Playlists;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Net;
using Microsoft.Extensions.Logging;
@@ -632,7 +634,7 @@ namespace Emby.Dlna.Didl
{
if (item.PremiereDate.HasValue)
{
AddValue(writer, "dc", "date", item.PremiereDate.Value.ToString("o"), NS_DC);
AddValue(writer, "dc", "date", item.PremiereDate.Value.ToString("o", CultureInfo.InvariantCulture), NS_DC);
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using MediaBrowser.Model.Extensions;
@@ -16,7 +19,7 @@ namespace Emby.Dlna.Didl
public Filter(string filter)
{
_all = StringHelper.EqualsIgnoreCase(filter, "*");
_all = string.Equals(filter, "*", StringComparison.OrdinalIgnoreCase);
_fields = (filter ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.IO;
using System.Text;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -385,7 +388,7 @@ namespace Emby.Dlna
{
Directory.CreateDirectory(systemProfilesPath);
using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
await stream.CopyToAsync(fileStream);
}

View File

@@ -12,9 +12,22 @@
</ItemGroup>
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<TreatWarningsAsErrors Condition=" '$(Configuration)' == 'Release'" >true</TreatWarningsAsErrors>
</PropertyGroup>
<!-- Code Analyzers-->
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
</ItemGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<CodeAnalysisRuleSet>../jellyfin.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>

View File

@@ -1,17 +1,21 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
namespace Emby.Dlna
{
public class EventSubscriptionResponse
{
public string Content { get; set; }
public string ContentType { get; set; }
public Dictionary<string, string> Headers { get; set; }
public EventSubscriptionResponse()
{
Headers = new Dictionary<string, string>();
}
public string Content { get; set; }
public string ContentType { get; set; }
public Dictionary<string, string> Headers { get; set; }
}
}

View File

@@ -1,8 +1,12 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
@@ -29,25 +33,15 @@ namespace Emby.Dlna.Eventing
{
var subscription = GetSubscription(subscriptionId, false);
int timeoutSeconds;
subscription.TimeoutSeconds = ParseTimeout(requestedTimeoutString) ?? 300;
int timeoutSeconds = subscription.TimeoutSeconds;
subscription.SubscriptionTime = DateTime.UtcNow;
// Remove logging for now because some devices are sending this very frequently
// TODO re-enable with dlna debug logging setting
//_logger.LogDebug("Renewing event subscription for {0} with timeout of {1} to {2}",
// subscription.NotificationType,
// timeout,
// subscription.CallbackUrl);
if (subscription != null)
{
subscription.TimeoutSeconds = ParseTimeout(requestedTimeoutString) ?? 300;
timeoutSeconds = subscription.TimeoutSeconds;
subscription.SubscriptionTime = DateTime.UtcNow;
}
else
{
timeoutSeconds = 300;
}
_logger.LogDebug(
"Renewing event subscription for {0} with timeout of {1} to {2}",
subscription.NotificationType,
timeoutSeconds,
subscription.CallbackUrl);
return GetEventSubscriptionResponse(subscriptionId, requestedTimeoutString, timeoutSeconds);
}
@@ -57,12 +51,10 @@ namespace Emby.Dlna.Eventing
var timeout = ParseTimeout(requestedTimeoutString) ?? 300;
var id = "uuid:" + Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
// Remove logging for now because some devices are sending this very frequently
// TODO re-enable with dlna debug logging setting
//_logger.LogDebug("Creating event subscription for {0} with timeout of {1} to {2}",
// notificationType,
// timeout,
// callbackUrl);
_logger.LogDebug("Creating event subscription for {0} with timeout of {1} to {2}",
notificationType,
timeout,
callbackUrl);
_subscriptions.TryAdd(id, new EventSubscription
{
@@ -176,7 +168,7 @@ namespace Emby.Dlna.Eventing
try
{
using (await _httpClient.SendAsync(options, "NOTIFY").ConfigureAwait(false))
using (await _httpClient.SendAsync(options, new HttpMethod("NOTIFY")).ConfigureAwait(false))
{
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.Eventing
@@ -13,6 +16,8 @@ namespace Emby.Dlna.Eventing
public long TriggerCount { get; set; }
public bool IsExpired => SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
public void IncrementTriggerCount()
{
if (TriggerCount == long.MaxValue)
@@ -22,7 +27,5 @@ namespace Emby.Dlna.Eventing
TriggerCount++;
}
public bool IsExpired => SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow;
}
}

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna
{

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna
{

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna
{

View File

@@ -1,3 +1,5 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna
{

View File

@@ -1,3 +1,8 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Threading.Tasks;
namespace Emby.Dlna
{
public interface IUpnpService
@@ -13,6 +18,6 @@ namespace Emby.Dlna
/// </summary>
/// <param name="request">The request.</param>
/// <returns>ControlResponse.</returns>
ControlResponse ProcessControlRequest(ControlRequest request);
Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request);
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Net.Sockets;
using System.Globalization;

View File

@@ -1,5 +1,9 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Xml;
using Emby.Dlna.Service;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
@@ -9,35 +13,33 @@ namespace Emby.Dlna.MediaReceiverRegistrar
{
public class ControlHandler : BaseControlHandler
{
protected override IEnumerable<KeyValuePair<string, string>> GetResult(string methodName, IDictionary<string, string> methodParams)
{
if (string.Equals(methodName, "IsAuthorized", StringComparison.OrdinalIgnoreCase))
return HandleIsAuthorized();
if (string.Equals(methodName, "IsValidated", StringComparison.OrdinalIgnoreCase))
return HandleIsValidated();
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private static IEnumerable<KeyValuePair<string, string>> HandleIsAuthorized()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "Result", "1" }
};
}
private static IEnumerable<KeyValuePair<string, string>> HandleIsValidated()
{
return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{ "Result", "1" }
};
}
public ControlHandler(IServerConfigurationManager config, ILogger logger)
: base(config, logger)
{
}
/// <inheritdoc />
protected override void WriteResult(string methodName, IDictionary<string, string> methodParams, XmlWriter xmlWriter)
{
if (string.Equals(methodName, "IsAuthorized", StringComparison.OrdinalIgnoreCase))
{
HandleIsAuthorized(xmlWriter);
return;
}
if (string.Equals(methodName, "IsValidated", StringComparison.OrdinalIgnoreCase))
{
HandleIsValidated(xmlWriter);
return;
}
throw new ResourceNotFoundException("Unexpected control request name: " + methodName);
}
private static void HandleIsAuthorized(XmlWriter xmlWriter)
=> xmlWriter.WriteElementString("Result", "1");
private static void HandleIsValidated(XmlWriter xmlWriter)
=> xmlWriter.WriteElementString("Result", "1");
}
}

View File

@@ -1,3 +1,7 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Threading.Tasks;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
@@ -15,17 +19,19 @@ namespace Emby.Dlna.MediaReceiverRegistrar
_config = config;
}
/// <inheritdoc />
public string GetServiceXml()
{
return new MediaReceiverRegistrarXmlBuilder().GetXml();
}
public ControlResponse ProcessControlRequest(ControlRequest request)
/// <inheritdoc />
public Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request)
{
return new ControlHandler(
_config,
Logger)
.ProcessControlRequest(request);
.ProcessControlRequestAsync(request);
}
}
}

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;
using Emby.Dlna.Service;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -221,7 +224,7 @@ namespace Emby.Dlna.PlayTo
_logger.LogDebug("Setting mute");
var value = mute ? 1 : 0;
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType, value))
await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType, value))
.ConfigureAwait(false);
IsMuted = mute;
@@ -251,7 +254,7 @@ namespace Emby.Dlna.PlayTo
// Remote control will perform better
Volume = value;
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType, value))
await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType, value))
.ConfigureAwait(false);
}
@@ -270,7 +273,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).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);
@@ -302,7 +305,7 @@ namespace Emby.Dlna.PlayTo
}
var post = avCommands.BuildPost(command, service.ServiceType, url, dictionary);
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, post, header: header)
await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, post, header: header)
.ConfigureAwait(false);
await Task.Delay(50).ConfigureAwait(false);
@@ -344,7 +347,7 @@ namespace Emby.Dlna.PlayTo
throw new InvalidOperationException("Unable to find service");
}
return new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1));
return new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1));
}
public async Task SetPlay(CancellationToken cancellationToken)
@@ -368,7 +371,7 @@ namespace Emby.Dlna.PlayTo
var service = GetAvTransportService();
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1))
await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1))
.ConfigureAwait(false);
RestartTimer(true);
@@ -386,7 +389,7 @@ namespace Emby.Dlna.PlayTo
var service = GetAvTransportService();
await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1))
await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, 1))
.ConfigureAwait(false);
TransportState = TRANSPORTSTATE.PAUSED;
@@ -513,7 +516,7 @@ namespace Emby.Dlna.PlayTo
return;
}
var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), true)
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), true)
.ConfigureAwait(false);
if (result == null || result.Document == null)
@@ -559,7 +562,7 @@ namespace Emby.Dlna.PlayTo
return;
}
var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), true)
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), true)
.ConfigureAwait(false);
if (result == null || result.Document == null)
@@ -586,7 +589,7 @@ namespace Emby.Dlna.PlayTo
return null;
}
var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType), false)
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType), false)
.ConfigureAwait(false);
if (result == null || result.Document == null)
@@ -624,7 +627,7 @@ namespace Emby.Dlna.PlayTo
var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), false)
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), false)
.ConfigureAwait(false);
if (result == null || result.Document == null)
@@ -687,7 +690,7 @@ namespace Emby.Dlna.PlayTo
var rendererCommands = await GetRenderingProtocolAsync(cancellationToken).ConfigureAwait(false);
var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), false)
var result = await new SsdpHttpClient(_httpClient).SendCommandAsync(Properties.BaseUrl, service, command.Name, rendererCommands.BuildPost(command, service.ServiceType), false)
.ConfigureAwait(false);
if (result == null || result.Document == null)
@@ -868,7 +871,7 @@ namespace Emby.Dlna.PlayTo
string url = NormalizeUrl(Properties.BaseUrl, avService.ScpdUrl);
var httpClient = new SsdpHttpClient(_httpClient, _config);
var httpClient = new SsdpHttpClient(_httpClient);
var document = await httpClient.GetDataAsync(url, cancellationToken).ConfigureAwait(false);
@@ -896,7 +899,7 @@ namespace Emby.Dlna.PlayTo
string url = NormalizeUrl(Properties.BaseUrl, avService.ScpdUrl);
var httpClient = new SsdpHttpClient(_httpClient, _config);
var httpClient = new SsdpHttpClient(_httpClient);
_logger.LogDebug("Dlna Device.GetRenderingProtocolAsync");
var document = await httpClient.GetDataAsync(url, cancellationToken).ConfigureAwait(false);
@@ -931,7 +934,7 @@ namespace Emby.Dlna.PlayTo
public static async Task<Device> CreateuPnpDeviceAsync(Uri url, IHttpClient httpClient, IServerConfigurationManager config, ILogger logger, CancellationToken cancellationToken)
{
var ssdpHttpClient = new SsdpHttpClient(httpClient, config);
var ssdpHttpClient = new SsdpHttpClient(httpClient);
var document = await ssdpHttpClient.GetDataAsync(url.ToString(), cancellationToken).ConfigureAwait(false);

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Collections.Generic;
using Emby.Dlna.Common;
using MediaBrowser.Model.Dlna;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -6,7 +9,6 @@ using System.Threading;
using System.Threading.Tasks;
using Emby.Dlna.Didl;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Globalization;
using System.Linq;
@@ -21,7 +24,7 @@ using Microsoft.Extensions.Logging;
namespace Emby.Dlna.PlayTo
{
class PlayToManager : IDisposable
public class PlayToManager : IDisposable
{
private readonly ILogger _logger;
private readonly ISessionManager _sessionManager;
@@ -64,10 +67,10 @@ namespace Emby.Dlna.PlayTo
public void Start()
{
_deviceDiscovery.DeviceDiscovered += _deviceDiscovery_DeviceDiscovered;
_deviceDiscovery.DeviceDiscovered += OnDeviceDiscoveryDeviceDiscovered;
}
async void _deviceDiscovery_DeviceDiscovered(object sender, GenericEventArgs<UpnpDeviceInfo> e)
private async void OnDeviceDiscoveryDeviceDiscovered(object sender, GenericEventArgs<UpnpDeviceInfo> e)
{
if (_disposed)
{
@@ -160,7 +163,7 @@ namespace Emby.Dlna.PlayTo
uuid = location.GetMD5().ToString("N", CultureInfo.InvariantCulture);
}
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersion, uuid, null, uri.OriginalString, null);
var sessionInfo = _sessionManager.LogSessionActivity("DLNA", _appHost.ApplicationVersionString, uuid, null, uri.OriginalString, null);
var controller = sessionInfo.SessionControllers.OfType<PlayToController>().FirstOrDefault();
@@ -231,7 +234,7 @@ namespace Emby.Dlna.PlayTo
public void Dispose()
{
_deviceDiscovery.DeviceDiscovered -= _deviceDiscovery_DeviceDiscovered;
_deviceDiscovery.DeviceDiscovered -= OnDeviceDiscoveryDeviceDiscovered;
try
{

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.PlayTo

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.PlayTo

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.PlayTo

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.PlayTo

View File

@@ -1,4 +1,6 @@
using System.Globalization;
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.IO;
using System.Linq;
using MediaBrowser.Controller.Entities;

View File

@@ -1,13 +1,16 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Globalization;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
using Emby.Dlna.Common;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
namespace Emby.Dlna.PlayTo
{
@@ -19,12 +22,10 @@ namespace Emby.Dlna.PlayTo
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private readonly IHttpClient _httpClient;
private readonly IServerConfigurationManager _config;
public SsdpHttpClient(IHttpClient httpClient, IServerConfigurationManager config)
public SsdpHttpClient(IHttpClient httpClient)
{
_httpClient = httpClient;
_config = config;
}
public async Task<XDocument> SendCommandAsync(
@@ -64,7 +65,9 @@ namespace Emby.Dlna.PlayTo
}
if (!serviceUrl.StartsWith("/"))
{
serviceUrl = "/" + serviceUrl;
}
return baseUrl + serviceUrl;
}
@@ -90,7 +93,7 @@ namespace Emby.Dlna.PlayTo
options.RequestHeaders["NT"] = "upnp:event";
options.RequestHeaders["TIMEOUT"] = "Second-" + timeOut.ToString(_usCulture);
using (await _httpClient.SendAsync(options, "SUBSCRIBE").ConfigureAwait(false))
using (await _httpClient.SendAsync(options, new HttpMethod("SUBSCRIBE")).ConfigureAwait(false))
{
}
@@ -110,7 +113,7 @@ namespace Emby.Dlna.PlayTo
options.RequestHeaders["FriendlyName.DLNA.ORG"] = FriendlyName;
using (var response = await _httpClient.SendAsync(options, "GET").ConfigureAwait(false))
using (var response = await _httpClient.SendAsync(options, HttpMethod.Get).ConfigureAwait(false))
using (var stream = response.Content)
using (var reader = new StreamReader(stream, Encoding.UTF8))
{

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
namespace Emby.Dlna.PlayTo
{
public enum TRANSPORTSTATE

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Collections.Generic;
using System.Linq;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
using System.Xml.Linq;
using Emby.Dlna.Ssdp;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System;
namespace Emby.Dlna.PlayTo

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Xml.Linq;
namespace Emby.Dlna.PlayTo

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using System.Linq;
using MediaBrowser.Model.Dlna;

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.Profiles

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.Profiles

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.Profiles

View File

@@ -1,3 +1,6 @@
#pragma warning disable CS1591
#pragma warning disable SA1600
using MediaBrowser.Model.Dlna;
namespace Emby.Dlna.Profiles

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