Przeglądaj źródła

Merge branch 'dev' into skia-native-arm

Erwin de Haan 6 lat temu
rodzic
commit
e241589969
100 zmienionych plików z 617 dodań i 640 usunięć
  1. 3 0
      .dockerignore
  2. 1 1
      .drone.yml
  3. 2 2
      .editorconfig
  4. 35 0
      .github/ISSUE_TEMPLATE/bug_report.md
  5. 20 0
      .github/ISSUE_TEMPLATE/enhancement-request.md
  6. 14 0
      .github/ISSUE_TEMPLATE/feature_request.md
  7. 9 0
      .github/pull_request_template.md
  8. 22 13
      .gitignore
  9. 4 0
      BDInfo/BDInfo.csproj
  10. 5 5
      BDInfo/BDROM.cs
  11. 9 17
      BDInfo/Properties/AssemblyInfo.cs
  12. 1 1
      BDInfo/TSCodecDTS.cs
  13. 5 5
      BDInfo/TSCodecDTSHD.cs
  14. 2 2
      BDInfo/TSCodecMPEG2.cs
  15. 6 6
      BDInfo/TSCodecTrueHD.cs
  16. 3 3
      BDInfo/TSCodecVC1.cs
  17. 12 12
      BDInfo/TSPlaylistFile.cs
  18. 8 8
      BDInfo/TSStream.cs
  19. 5 5
      BDInfo/TSStreamClipFile.cs
  20. 70 70
      BDInfo/TSStreamFile.cs
  21. 3 1
      CONTRIBUTORS.md
  22. 6 3
      Dockerfile
  23. 7 3
      Dockerfile.arm
  24. 4 0
      DvdLib/DvdLib.csproj
  25. 1 1
      DvdLib/Ifo/Dvd.cs
  26. 2 2
      DvdLib/Ifo/DvdTime.cs
  27. 1 1
      DvdLib/Ifo/ProgramChain.cs
  28. 1 1
      DvdLib/Ifo/Title.cs
  29. 9 17
      DvdLib/Properties/AssemblyInfo.cs
  30. 1 1
      Emby.Dlna/Common/Argument.cs
  31. 2 2
      Emby.Dlna/ConnectionManager/ConnectionManagerXmlBuilder.cs
  32. 4 4
      Emby.Dlna/ConnectionManager/ServiceActionListBuilder.cs
  33. 3 3
      Emby.Dlna/ContentDirectory/ContentDirectoryXmlBuilder.cs
  34. 7 7
      Emby.Dlna/ContentDirectory/ServiceActionListBuilder.cs
  35. 3 3
      Emby.Dlna/Didl/DidlBuilder.cs
  36. 3 3
      Emby.Dlna/DlnaManager.cs
  37. 4 0
      Emby.Dlna/Emby.Dlna.csproj
  38. 1 1
      Emby.Dlna/IUpnpService.cs
  39. 20 20
      Emby.Dlna/Main/DlnaEntryPoint.cs
  40. 3 3
      Emby.Dlna/MediaReceiverRegistrar/ControlHandler.cs
  41. 2 2
      Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrarXmlBuilder.cs
  42. 5 5
      Emby.Dlna/MediaReceiverRegistrar/ServiceActionListBuilder.cs
  43. 8 8
      Emby.Dlna/PlayTo/Device.cs
  44. 4 4
      Emby.Dlna/PlayTo/PlayToController.cs
  45. 2 2
      Emby.Dlna/PlayTo/PlaylistItemFactory.cs
  46. 15 15
      Emby.Dlna/PlayTo/SsdpHttpClient.cs
  47. 2 2
      Emby.Dlna/PlayTo/TransportCommands.cs
  48. 1 1
      Emby.Dlna/PlayTo/UpnpContainer.cs
  49. 2 2
      Emby.Dlna/PlayTo/uBaseObject.cs
  50. 2 2
      Emby.Dlna/PlayTo/uParser.cs
  51. 1 1
      Emby.Dlna/Profiles/SonyBravia2010Profile.cs
  52. 8 11
      Emby.Dlna/Properties/AssemblyInfo.cs
  53. 4 7
      Emby.Dlna/Server/DescriptionXmlBuilder.cs
  54. 1 1
      Emby.Dlna/Service/BaseService.cs
  55. 1 1
      Emby.Dlna/Service/ControlErrorHandler.cs
  56. 3 3
      Emby.Dlna/Service/ServiceXmlBuilder.cs
  57. 2 2
      Emby.Dlna/Ssdp/DeviceDiscovery.cs
  58. 9 13
      Emby.Drawing.Skia/Properties/AssemblyInfo.cs
  59. 5 5
      Emby.Drawing.Skia/SkiaEncoder.cs
  60. 6 1
      Emby.Drawing.Skia/StripCollageBuilder.cs
  61. 6 5
      Emby.Drawing/Common/ImageHeader.cs
  62. 11 11
      Emby.Drawing/ImageProcessor.cs
  63. 9 9
      Emby.Drawing/Properties/AssemblyInfo.cs
  64. 4 0
      Emby.IsoMounting/IsoMounter/IsoMounter.csproj
  65. 3 3
      Emby.IsoMounting/IsoMounter/LinuxIsoManager.cs
  66. 1 1
      Emby.IsoMounting/IsoMounter/LinuxMount.cs
  67. 21 0
      Emby.IsoMounting/IsoMounter/Properties/AssemblyInfo.cs
  68. 1 1
      Emby.Naming/AudioBook/AudioBookInfo.cs
  69. 2 2
      Emby.Naming/AudioBook/AudioBookResolver.cs
  70. 1 1
      Emby.Naming/Common/NamingOptions.cs
  71. 13 2
      Emby.Naming/Emby.Naming.csproj
  72. 21 0
      Emby.Naming/Properties/AssemblyInfo.cs
  73. 2 2
      Emby.Naming/Subtitles/SubtitleParser.cs
  74. 2 2
      Emby.Naming/TV/EpisodePathParser.cs
  75. 2 2
      Emby.Naming/TV/EpisodeResolver.cs
  76. 3 3
      Emby.Naming/Video/CleanDateTimeParser.cs
  77. 2 2
      Emby.Naming/Video/CleanStringParser.cs
  78. 1 1
      Emby.Naming/Video/FlagParser.cs
  79. 2 2
      Emby.Naming/Video/Format3DParser.cs
  80. 1 1
      Emby.Naming/Video/StackResolver.cs
  81. 1 1
      Emby.Naming/Video/StubResolver.cs
  82. 1 1
      Emby.Naming/Video/VideoFileInfo.cs
  83. 1 1
      Emby.Naming/Video/VideoInfo.cs
  84. 4 4
      Emby.Naming/Video/VideoListResolver.cs
  85. 1 1
      Emby.Naming/Video/VideoResolver.cs
  86. 4 0
      Emby.Notifications/Emby.Notifications.csproj
  87. 6 21
      Emby.Notifications/Properties/AssemblyInfo.cs
  88. 9 22
      Emby.Photos/Properties/AssemblyInfo.cs
  89. 4 4
      Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
  90. 4 4
      Emby.Server.Implementations/Activity/ActivityRepository.cs
  91. 10 61
      Emby.Server.Implementations/AppBase/BaseApplicationPaths.cs
  92. 3 2
      Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs
  93. 2 1
      Emby.Server.Implementations/AppBase/ConfigurationHelper.cs
  94. 22 82
      Emby.Server.Implementations/ApplicationHost.cs
  95. 9 9
      Emby.Server.Implementations/Archiving/ZipClient.cs
  96. 1 1
      Emby.Server.Implementations/Browser/BrowserLauncher.cs
  97. 1 4
      Emby.Server.Implementations/Channels/ChannelImageProvider.cs
  98. 10 15
      Emby.Server.Implementations/Channels/ChannelManager.cs
  99. 9 30
      Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs
  100. 3 12
      Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs

+ 3 - 0
.dockerignore

@@ -3,3 +3,6 @@
 Dockerfile
 CONTRIBUTORS.md
 README.md
+deployment/*/dist
+deployment/*/pkg-dist
+deployment/collect-dist/

+ 1 - 1
.drone.yml

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

+ 2 - 2
.editorconfig

@@ -3,11 +3,11 @@
 # For emacs, vim, np++ and other editors, see here: https://github.com/editorconfig
 ############################### 
 # Core EditorConfig Options   # 
-############################### 
+###############################
+root = true
 # All files 
 [*] 
 indent_style = space 
-root = true
 indent_size = 4
 charset = utf-8
 trim_trailing_whitespace = true

+ 35 - 0
.github/ISSUE_TEMPLATE/bug_report.md

@@ -0,0 +1,35 @@
+---
+name: Bug report
+about: Create a bug report
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Logs**
+Please paste any log errors.
+
+**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]
+
+**Additional context**
+Add any other context about the problem here.

+ 20 - 0
.github/ISSUE_TEMPLATE/enhancement-request.md

@@ -0,0 +1,20 @@
+---
+name: Enhancement request
+about: Suggest an modification to an existing feature
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.

+ 14 - 0
.github/ISSUE_TEMPLATE/feature_request.md

@@ -0,0 +1,14 @@
+---
+name: Feature request
+about: Suggest a new feature
+title: ''
+labels: feature
+assignees: ''
+
+---
+
+**Describe the feature you'd like**
+A clear and concise description of what you want to happen.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.

+ 9 - 0
.github/pull_request_template.md

@@ -0,0 +1,9 @@
+Ensure your title is short, descriptive, and in the imperative mood (Fix X, Change Y, instead of Fixed X, Changed Y).
+For a good inspiration of what to write in commit messages and PRs please review https://chris.beams.io/posts/git-commit/ and our https://jellyfin.readthedocs.io/en/latest/developer-docs/contributing/ page.
+
+**Changes**
+Describe your changes here in 1-5 sentences.
+
+**Issues**
+Tag any issues that this PR solves here.
+Fixes #

+ 22 - 13
.gitignore

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

+ 4 - 0
BDInfo/BDInfo.csproj

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

+ 5 - 5
BDInfo/BDROM.cs

@@ -77,7 +77,7 @@ namespace BDInfo
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             _fileSystem = fileSystem;
@@ -235,7 +235,7 @@ namespace BDInfo
                             break;
                         }
                     }
-                    else throw ex;
+                    else throw;
                 }
             }
 
@@ -273,7 +273,7 @@ namespace BDInfo
                             break;
                         }
                     }
-                    else throw ex;
+                    else throw;
                 }
             }
 
@@ -310,7 +310,7 @@ namespace BDInfo
                             break;
                         }
                     }
-                    else throw ex;
+                    else throw;
                 }
             }
 
@@ -336,7 +336,7 @@ namespace BDInfo
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             FileSystemMetadata dir = _fileSystem.GetDirectoryInfo(path);

+ 9 - 17
BDInfo/Properties/AssemblyInfo.cs

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

+ 1 - 1
BDInfo/TSCodecDTS.cs

@@ -148,7 +148,7 @@ namespace BDInfo
                     stream.IsVBR = true;
                     stream.IsInitialized = true;
                     break;
-                
+
                 default:
                     stream.IsVBR = false;
                     stream.IsInitialized = true;

+ 5 - 5
BDInfo/TSCodecDTSHD.cs

@@ -22,9 +22,9 @@ namespace BDInfo
 {
     public abstract class TSCodecDTSHD
     {
-        private static int[] SampleRates = new int[] 
+        private static int[] SampleRates = new int[]
         { 0x1F40, 0x3E80, 0x7D00, 0x0FA00, 0x1F400, 0x5622, 0x0AC44, 0x15888, 0x2B110, 0x56220, 0x2EE0, 0x5DC0, 0x0BB80, 0x17700, 0x2EE00, 0x5DC00 };
-        
+
         public static void Scan(
             TSAudioStream stream,
             TSStreamBuffer buffer,
@@ -131,7 +131,7 @@ namespace BDInfo
                 else
                 {
                     AssetSizes[i] = buffer.ReadBits(16) + 1;
-                }                
+                }
             }
             for (int i = 0; i < nuNumAssets; i++)
             {
@@ -189,7 +189,7 @@ namespace BDInfo
                     }
                     stream.SampleRate = SampleRates[nuMaxSampleRate];
                     stream.BitDepth = nuBitResolution;
-                    
+
                     stream.LFE = 0;
                     if ((nuSpkrActivityMask & 0x8) == 0x8)
                     {
@@ -240,7 +240,7 @@ namespace BDInfo
                     stream.IsInitialized = true;
                 }
                 stream.IsInitialized = (stream.BitRate > 0 ? true : false);
-            }            
+            }
         }
     }
 }

+ 2 - 2
BDInfo/TSCodecMPEG2.cs

@@ -33,7 +33,7 @@ namespace BDInfo
             int pictureParse = 0;
             int sequenceHeaderParse = 0;
             int extensionParse = 0;
-            int sequenceExtensionParse = 0;            
+            int sequenceExtensionParse = 0;
 
             for (int i = 0; i < buffer.Length; i++)
             {
@@ -189,7 +189,7 @@ namespace BDInfo
 #if DEBUG
                     if (sequenceExtensionParse == 0)
                     {
-                        uint sequenceExtension = 
+                        uint sequenceExtension =
                             ((parse & 0x8) >> 3);
                         if (sequenceExtension == 0)
                         {

+ 6 - 6
BDInfo/TSCodecTrueHD.cs

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

+ 3 - 3
BDInfo/TSCodecVC1.cs

@@ -50,18 +50,18 @@ namespace BDInfo
                         {
                             if ((parse & 0x80000000) == 0)
                             {
-                                pictureType = 
+                                pictureType =
                                     (uint)((parse & 0x78000000) >> 13);
                             }
                             else
                             {
-                                pictureType = 
+                                pictureType =
                                     (uint)((parse & 0x3c000000) >> 12);
                             }
                         }
                         else
                         {
-                            pictureType = 
+                            pictureType =
                                 (uint)((parse & 0xf0000000) >> 14);
                         }
 

+ 12 - 12
BDInfo/TSPlaylistFile.cs

@@ -42,7 +42,7 @@ namespace BDInfo
 
         public List<double> Chapters = new List<double>();
 
-        public Dictionary<ushort, TSStream> Streams = 
+        public Dictionary<ushort, TSStream> Streams =
             new Dictionary<ushort, TSStream>();
         public Dictionary<ushort, TSStream> PlaylistStreams =
             new Dictionary<ushort, TSStream>();
@@ -50,19 +50,19 @@ namespace BDInfo
             new List<TSStreamClip>();
         public List<Dictionary<ushort, TSStream>> AngleStreams =
             new List<Dictionary<ushort, TSStream>>();
-        public List<Dictionary<double, TSStreamClip>> AngleClips = 
+        public List<Dictionary<double, TSStreamClip>> AngleClips =
             new List<Dictionary<double, TSStreamClip>>();
         public int AngleCount = 0;
 
-        public List<TSStream> SortedStreams = 
+        public List<TSStream> SortedStreams =
             new List<TSStream>();
-        public List<TSVideoStream> VideoStreams = 
+        public List<TSVideoStream> VideoStreams =
             new List<TSVideoStream>();
-        public List<TSAudioStream> AudioStreams = 
+        public List<TSAudioStream> AudioStreams =
             new List<TSAudioStream>();
-        public List<TSTextStream> TextStreams = 
+        public List<TSTextStream> TextStreams =
             new List<TSTextStream>();
-        public List<TSGraphicsStream> GraphicsStreams = 
+        public List<TSGraphicsStream> GraphicsStreams =
             new List<TSGraphicsStream>();
 
         public TSPlaylistFile(
@@ -388,8 +388,8 @@ namespace BDInfo
 
 #if DEBUG
                     Debug.WriteLine(string.Format(
-                        "{0} : {1} -> V:{2} A:{3} PG:{4} IG:{5} 2A:{6} 2V:{7} PIP:{8}", 
-                        Name, streamFileName, streamCountVideo, streamCountAudio, streamCountPG, streamCountIG, 
+                        "{0} : {1} -> V:{2} A:{3} PG:{4} IG:{5} 2A:{6} 2V:{7} PIP:{8}",
+                        Name, streamFileName, streamCountVideo, streamCountAudio, streamCountPG, streamCountIG,
                         streamCountSecondaryAudio, streamCountSecondaryVideo, streamCountPIP));
 #endif
 
@@ -427,7 +427,7 @@ namespace BDInfo
                     }
                     /*
                      * TODO
-                     * 
+                     *
                     for (int i = 0; i < streamCountPIP; i++)
                     {
                         TSStream stream = CreatePlaylistStream(data, ref pos);
@@ -955,7 +955,7 @@ namespace BDInfo
         }
 
         public int CompareVideoStreams(
-            TSVideoStream x, 
+            TSVideoStream x,
             TSVideoStream y)
         {
             if (x == null && y == null)
@@ -996,7 +996,7 @@ namespace BDInfo
         }
 
         public int CompareAudioStreams(
-            TSAudioStream x, 
+            TSAudioStream x,
             TSAudioStream y)
         {
             if (x == y)

+ 8 - 8
BDInfo/TSStream.cs

@@ -109,7 +109,7 @@ namespace BDInfo
 
         public TSDescriptor Clone()
         {
-            TSDescriptor descriptor = 
+            TSDescriptor descriptor =
                 new TSDescriptor(Name, (byte)Value.Length);
             Value.CopyTo(descriptor.Value, 0);
             return descriptor;
@@ -153,15 +153,15 @@ namespace BDInfo
         private string _LanguageCode;
         public string LanguageCode
         {
-            get 
+            get
             {
-                return _LanguageCode; 
+                return _LanguageCode;
             }
-            set 
+            set
             {
                 _LanguageCode = value;
                 LanguageName = LanguageCodes.GetName(value);
-            } 
+            }
         }
 
         public bool IsVideoStream
@@ -407,7 +407,7 @@ namespace BDInfo
         }
 
         public abstract TSStream Clone();
-        
+
         protected void CopyTo(TSStream stream)
         {
             stream.PID = PID;
@@ -435,7 +435,7 @@ namespace BDInfo
 
         public int Width;
         public int Height;
-        public bool IsInterlaced;        
+        public bool IsInterlaced;
         public int FrameRateEnumerator;
         public int FrameRateDenominator;
         public TSAspectRatio AspectRatio;
@@ -581,7 +581,7 @@ namespace BDInfo
             stream.FrameRate = _FrameRate;
             stream.Width = Width;
             stream.Height = Height;
-            stream.IsInterlaced = IsInterlaced;        
+            stream.IsInterlaced = IsInterlaced;
             stream.FrameRateEnumerator = FrameRateEnumerator;
             stream.FrameRateDenominator = FrameRateDenominator;
             stream.AspectRatio = AspectRatio;

+ 5 - 5
BDInfo/TSStreamClipFile.cs

@@ -69,7 +69,7 @@ namespace BDInfo
 
                 byte[] fileType = new byte[8];
                 Array.Copy(data, 0, fileType, 0, fileType.Length);
-                
+
                 FileType = _textEncoding.GetASCIIEncoding().GetString(fileType, 0, fileType.Length);
                 if (FileType != "HDMV0100" &&
                     FileType != "HDMV0200")
@@ -78,7 +78,7 @@ namespace BDInfo
                         "Clip info file {0} has an unknown file type {1}.",
                         FileInfo.Name, FileType));
                 }
-#if DEBUG                
+#if DEBUG
                 Debug.WriteLine(string.Format(
                     "\tFileType: {0}", FileType));
 #endif
@@ -110,9 +110,9 @@ namespace BDInfo
                     TSStream stream = null;
 
                     ushort PID = (ushort)
-                        ((clipData[streamOffset] << 8) + 
+                        ((clipData[streamOffset] << 8) +
                           clipData[streamOffset + 1]);
-                    
+
                     streamOffset += 2;
 
                     TSStreamType streamType = (TSStreamType)
@@ -240,7 +240,7 @@ namespace BDInfo
                     }
 
                     streamOffset += clipData[streamOffset] + 1;
-                }                
+                }
                 IsValid = true;
             }
             finally

+ 70 - 70
BDInfo/TSStreamFile.cs

@@ -391,7 +391,7 @@ namespace BDInfo
                         }
 
                         Dictionary<ushort, TSStream> playlistStreams = playlist.Streams;
-                        if (clip.AngleIndex > 0 && 
+                        if (clip.AngleIndex > 0 &&
                             clip.AngleIndex < playlist.AngleStreams.Count + 1)
                         {
                             playlistStreams = playlist.AngleStreams[clip.AngleIndex - 1];
@@ -428,7 +428,7 @@ namespace BDInfo
                 TSStream stream = Streams[PID];
                 stream.PayloadBytes += streamState.WindowBytes;
                 stream.PacketCount += streamState.WindowPackets;
-                
+
                 if (stream.IsVideoStream)
                 {
                     TSStreamDiagnostics diag = new TSStreamDiagnostics();
@@ -457,7 +457,7 @@ namespace BDInfo
             int dataSize = 16384;
             Stream fileStream = null;
             try
-            {                
+            {
                 string fileName;
                 if (BDInfoSettings.EnableSSIF &&
                     InterleavedFile != null)
@@ -482,13 +482,13 @@ namespace BDInfo
                 StreamStates.Clear();
                 StreamDiagnostics.Clear();
 
-                TSPacketParser parser = 
+                TSPacketParser parser =
                     new TSPacketParser();
-                
+
                 long fileLength = (uint)fileStream.Length;
                 byte[] buffer = new byte[dataSize];
                 int bufferLength = 0;
-                while ((bufferLength = 
+                while ((bufferLength =
                     fileStream.Read(buffer, 0, buffer.Length)) > 0)
                 {
                     int offset = 0;
@@ -598,8 +598,8 @@ namespace BDInfo
                                             parser.StreamState.TransferCount++;
 
                                             bool isFinished = ScanStream(
-                                                parser.Stream, 
-                                                parser.StreamState, 
+                                                parser.Stream,
+                                                parser.StreamState,
                                                 parser.StreamState.StreamBuffer);
 
                                             if (!isFullScan && isFinished)
@@ -680,10 +680,10 @@ namespace BDInfo
                                         for (int k = 0; k < (parser.PATOffset - 4); k += 4)
                                         {
                                             uint programNumber = (uint)
-                                                ((parser.PAT[k] << 8) +  
+                                                ((parser.PAT[k] << 8) +
                                                   parser.PAT[k + 1]);
 
-                                            ushort programPID = (ushort)                                                 
+                                            ushort programPID = (ushort)
                                                 (((parser.PAT[k + 2] & 0x1F) << 8) +
                                                    parser.PAT[k + 3]);
 
@@ -985,7 +985,7 @@ namespace BDInfo
                                                 parser.PMTProgramDescriptorLength = buffer[i];
                                                 parser.PMTProgramDescriptors.Add(
                                                     new TSDescriptor(
-                                                        parser.PMTProgramDescriptor, 
+                                                        parser.PMTProgramDescriptor,
                                                         parser.PMTProgramDescriptorLength));
                                                 break;
                                         }
@@ -998,7 +998,7 @@ namespace BDInfo
                                             parser.PMTProgramDescriptors.Count - 1];
 
                                         int valueIndex =
-                                            descriptor.Value.Length - 
+                                            descriptor.Value.Length -
                                             parser.PMTProgramDescriptorLength - 1;
 
                                         descriptor.Value[valueIndex] = buffer[i];
@@ -1020,8 +1020,8 @@ namespace BDInfo
                                 parser.SyncState = false;
                             }
                         }
-                        else if (parser.Stream != null && 
-                            parser.StreamState != null && 
+                        else if (parser.Stream != null &&
+                            parser.StreamState != null &&
                             parser.TransportScramblingControl == 0)
                         {
                             TSStream stream = parser.Stream;
@@ -1032,7 +1032,7 @@ namespace BDInfo
 
                             if (streamState.TransferState)
                             {
-                                if ((bufferLength - i) >= streamState.PacketLength && 
+                                if ((bufferLength - i) >= streamState.PacketLength &&
                                     streamState.PacketLength > 0)
                                 {
                                     offset = streamState.PacketLength;
@@ -1085,7 +1085,7 @@ namespace BDInfo
                                 --parser.PacketLength;
 
                                 bool headerFound = false;
-                                if (stream.IsVideoStream && 
+                                if (stream.IsVideoStream &&
                                     streamState.Parse == 0x000001FD)
                                 {
                                     headerFound = true;
@@ -1170,18 +1170,18 @@ namespace BDInfo
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 1:
-                                            streamState.PESHeaderFlags = 
+                                            streamState.PESHeaderFlags =
                                                 (byte)(streamState.Parse & 0xFF);
 #if DEBUG
                                             streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 0:
-                                            streamState.PESHeaderLength = 
+                                            streamState.PESHeaderLength =
                                                 (byte)(streamState.Parse & 0xFF);
 #if DEBUG
                                             streamState.PESHeader[streamState.PESHeaderIndex++] =
@@ -1211,48 +1211,48 @@ namespace BDInfo
                                     switch (streamState.PTSParse)
                                     {
                                         case 4:
-                                            streamState.PTSTemp = 
+                                            streamState.PTSTemp =
                                                 ((streamState.Parse & 0xE) << 29);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             break;
-                                        
+
                                         case 3:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 22);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 2:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFE) << 14);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 1:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 7);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 0:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFE) >> 1);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
-#endif                                        
+#endif
                                             streamState.PTS = streamState.PTSTemp;
 
                                             if (streamState.PTS > streamState.PTSLast)
@@ -1260,13 +1260,13 @@ namespace BDInfo
                                                 if (streamState.PTSLast > 0)
                                                 {
                                                     streamState.PTSTransfer = (streamState.PTS - streamState.PTSLast);
-                                                }                                                
+                                                }
                                                 streamState.PTSLast = streamState.PTS;
                                             }
 
                                             streamState.PTSDiff = streamState.PTS - streamState.DTSPrev;
 
-                                            if (streamState.PTSCount > 0 && 
+                                            if (streamState.PTSCount > 0 &&
                                                 stream.IsVideoStream)
                                             {
                                                 UpdateStreamBitrates(stream.PID, streamState.PTS, streamState.PTSDiff);
@@ -1280,7 +1280,7 @@ namespace BDInfo
                                                 }
                                                 Length = (double)(parser.PTSLast - parser.PTSFirst) / 90000;
                                             }
-                                            
+
                                             streamState.DTSPrev = streamState.PTS;
                                             streamState.PTSCount++;
                                             if (streamState.PESHeaderLength == 0)
@@ -1299,46 +1299,46 @@ namespace BDInfo
                                     switch (streamState.DTSParse)
                                     {
                                         case 9:
-                                            streamState.PTSTemp = 
+                                            streamState.PTSTemp =
                                                 ((streamState.Parse & 0xE) << 29);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 8:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 22);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 7:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFE) << 14);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             break;
-                                        
+
                                         case 6:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 7);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 5:
-                                            streamState.PTSTemp |= 
+                                            streamState.PTSTemp |=
                                                 ((streamState.Parse & 0xFE) >> 1);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             streamState.PTS = streamState.PTSTemp;
@@ -1347,48 +1347,48 @@ namespace BDInfo
                                                 streamState.PTSLast = streamState.PTS;
                                             }
                                             break;
-                                        
+
                                         case 4:
-                                            streamState.DTSTemp = 
+                                            streamState.DTSTemp =
                                                 ((streamState.Parse & 0xE) << 29);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             break;
-                                        
+
                                         case 3:
-                                            streamState.DTSTemp |= 
+                                            streamState.DTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 22);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             break;
-                                        
+
                                         case 2:
-                                            streamState.DTSTemp |= 
+                                            streamState.DTSTemp |=
                                                 ((streamState.Parse & 0xFE) << 14);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             break;
-                                        
+
                                         case 1:
-                                            streamState.DTSTemp |= 
+                                            streamState.DTSTemp |=
                                                 ((streamState.Parse & 0xFF) << 7);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xFF);
 #endif
                                             break;
-                                        
+
                                         case 0:
-                                            streamState.DTSTemp |= 
+                                            streamState.DTSTemp |=
                                                 ((streamState.Parse & 0xFE) >> 1);
 #if DEBUG
-                                            streamState.PESHeader[streamState.PESHeaderIndex++] = 
+                                            streamState.PESHeader[streamState.PESHeaderIndex++] =
                                                 (byte)(streamState.Parse & 0xff);
 #endif
                                             streamState.PTSDiff = streamState.DTSTemp - streamState.DTSPrev;
@@ -1482,8 +1482,8 @@ namespace BDInfo
         }
 
         private TSStream CreateStream(
-            ushort streamPID, 
-            byte streamType, 
+            ushort streamPID,
+            byte streamType,
             List<TSDescriptor> streamDescriptors)
         {
             TSStream stream = null;
@@ -1548,6 +1548,6 @@ namespace BDInfo
             }
 
             return stream;
-        } 
+        }
     }
 }

+ 3 - 1
CONTRIBUTORS.md

@@ -11,7 +11,9 @@
  - [AnthonyLavado](https://github.com/anthonylavado)
  - [sparky8251](https://github.com/sparky8251)
  - [LeoVerto](https://github.com/LeoVerto)
-
+ - [grafixeyehero](https://github.com/grafixeyehero)
+ - [cvium](https://github.com/cvium)
+ 
 # Emby Contributors
 
  - [LukePulverenti](https://github.com/LukePulverenti)

+ 6 - 3
Dockerfile

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

+ 7 - 3
Dockerfile.aarch64 → Dockerfile.arm

@@ -3,15 +3,19 @@ ARG DOTNET_VERSION=3.0
 FROM microsoft/dotnet:${DOTNET_VERSION}-sdk as builder
 WORKDIR /repo
 COPY . .
+#TODO Remove or update the sed line when we update dotnet version.
 RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
  && find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \; \
  && dotnet clean \
- && dotnet publish --configuration release --output /jellyfin
+ && dotnet publish \
+    --configuration release \
+    --output /jellyfin \
+    Jellyfin.Server
 
 FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
 COPY --from=builder /jellyfin /jellyfin
 EXPOSE 8096
-RUN apt update \
- && apt install -y ffmpeg
+RUN apt-get update \
+ && apt-get install -y ffmpeg
 VOLUME /config /media
 ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config

+ 4 - 0
DvdLib/DvdLib.csproj

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

+ 1 - 1
DvdLib/Ifo/Dvd.cs

@@ -81,7 +81,7 @@ namespace DvdLib.Ifo
 
         private void ReadVTS(ushort vtsNum, List<FileSystemMetadata> allFiles)
         {
-            var filename = String.Format("VTS_{0:00}_0.IFO", vtsNum);
+            var filename = string.Format("VTS_{0:00}_0.IFO", vtsNum);
 
             var vtsPath = allFiles.FirstOrDefault(i => string.Equals(i.Name, filename, StringComparison.OrdinalIgnoreCase)) ??
                 allFiles.FirstOrDefault(i => string.Equals(i.Name, Path.ChangeExtension(filename, ".bup"), StringComparison.OrdinalIgnoreCase));

+ 2 - 2
DvdLib/Ifo/DvdTime.cs

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

+ 1 - 1
DvdLib/Ifo/ProgramChain.cs

@@ -68,7 +68,7 @@ namespace DvdLib.Ifo
             ProhibitedUserOperations = (UserOperation)br.ReadUInt32();
             AudioStreamControl = br.ReadBytes(16);
             SubpictureStreamControl = br.ReadBytes(128);
-            
+
             _nextProgramNumber = br.ReadUInt16();
             _prevProgramNumber = br.ReadUInt16();
             _goupProgramNumber = br.ReadUInt16();

+ 1 - 1
DvdLib/Ifo/Title.cs

@@ -20,7 +20,7 @@ namespace DvdLib.Ifo
         public ProgramChain EntryProgramChain { get; private set; }
         public readonly List<ProgramChain> ProgramChains;
 
-        public readonly List<Chapter> Chapters;        
+        public readonly List<Chapter> Chapters;
 
         public Title(uint titleNum)
         {

+ 9 - 17
DvdLib/Properties/AssemblyInfo.cs

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

+ 1 - 1
Emby.Dlna/Common/Argument.cs

@@ -1,6 +1,6 @@
 
 namespace Emby.Dlna.Common
-{  
+{
     public class Argument
     {
         public string Name { get;  set; }

+ 2 - 2
Emby.Dlna/ConnectionManager/ConnectionManagerXmlBuilder.cs

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

+ 4 - 4
Emby.Dlna/ConnectionManager/ServiceActionListBuilder.cs

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

+ 3 - 3
Emby.Dlna/ContentDirectory/ContentDirectoryXmlBuilder.cs

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

+ 7 - 7
Emby.Dlna/ContentDirectory/ServiceActionListBuilder.cs

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

+ 3 - 3
Emby.Dlna/Didl/DidlBuilder.cs

@@ -375,7 +375,7 @@ namespace Emby.Dlna.Didl
                ? GetMimeType(filename)
                : mediaProfile.MimeType;
 
-            writer.WriteAttributeString("protocolInfo", String.Format(
+            writer.WriteAttributeString("protocolInfo", string.Format(
                 "http-get:*:{0}:{1}",
                 mimeType,
                 contentFeatures
@@ -573,7 +573,7 @@ namespace Emby.Dlna.Didl
                 streamInfo.RunTimeTicks ?? 0,
                 streamInfo.TranscodeSeekInfo);
 
-            writer.WriteAttributeString("protocolInfo", String.Format(
+            writer.WriteAttributeString("protocolInfo", string.Format(
                 "http-get:*:{0}:{1}",
                 mimeType,
                 contentFeatures
@@ -1017,7 +1017,7 @@ namespace Emby.Dlna.Didl
             var contentFeatures = new ContentFeatureBuilder(_profile)
                 .BuildImageHeader(format, width, height, imageInfo.IsDirectStream, org_Pn);
 
-            writer.WriteAttributeString("protocolInfo", String.Format(
+            writer.WriteAttributeString("protocolInfo", string.Format(
                 "http-get:*:{0}:{1}",
                 GetMimeType("file." + format),
                 contentFeatures

+ 3 - 3
Emby.Dlna/DlnaManager.cs

@@ -95,7 +95,7 @@ namespace Emby.Dlna
         {
             if (deviceInfo == null)
             {
-                throw new ArgumentNullException("deviceInfo");
+                throw new ArgumentNullException(nameof(deviceInfo));
             }
 
             var profile = GetProfiles()
@@ -207,7 +207,7 @@ namespace Emby.Dlna
         {
             if (headers == null)
             {
-                throw new ArgumentNullException("headers");
+                throw new ArgumentNullException(nameof(headers));
             }
 
             // Convert to case insensitive
@@ -335,7 +335,7 @@ namespace Emby.Dlna
         {
             if (string.IsNullOrEmpty(id))
             {
-                throw new ArgumentNullException("id");
+                throw new ArgumentNullException(nameof(id));
             }
 
             var info = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, id, StringComparison.OrdinalIgnoreCase));

+ 4 - 0
Emby.Dlna/Emby.Dlna.csproj

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

+ 1 - 1
Emby.Dlna/IUpnpService.cs

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

+ 20 - 20
Emby.Dlna/Main/DlnaEntryPoint.cs

@@ -75,11 +75,11 @@ namespace Emby.Dlna.Main
             IUserDataManager userDataManager,
             ILocalizationManager localizationManager,
             IMediaSourceManager mediaSourceManager,
-            IDeviceDiscovery deviceDiscovery, 
-            IMediaEncoder mediaEncoder, 
-            ISocketFactory socketFactory, 
-            ITimerFactory timerFactory, 
-            IEnvironmentInfo environmentInfo, 
+            IDeviceDiscovery deviceDiscovery,
+            IMediaEncoder mediaEncoder,
+            ISocketFactory socketFactory,
+            ITimerFactory timerFactory,
+            IEnvironmentInfo environmentInfo,
             INetworkManager networkManager,
             IUserViewManager userViewManager,
             IXmlReaderSettingsFactory xmlReaderSettingsFactory,
@@ -104,19 +104,19 @@ namespace Emby.Dlna.Main
             _networkManager = networkManager;
             _logger = loggerFactory.CreateLogger("Dlna");
 
-            ContentDirectory = new ContentDirectory.ContentDirectory(dlnaManager, 
-                userDataManager, 
-                imageProcessor, 
-                libraryManager, 
-                config, 
-                userManager, 
-                _logger, 
-                httpClient, 
-                localizationManager, 
-                mediaSourceManager, 
+            ContentDirectory = new ContentDirectory.ContentDirectory(dlnaManager,
+                userDataManager,
+                imageProcessor,
+                libraryManager,
+                config,
+                userManager,
+                _logger,
+                httpClient,
+                localizationManager,
+                mediaSourceManager,
                 userViewManager,
-                mediaEncoder, 
-                xmlReaderSettingsFactory, 
+                mediaEncoder,
+                xmlReaderSettingsFactory,
                 tvSeriesManager);
 
             ConnectionManager = new ConnectionManager.ConnectionManager(dlnaManager, config, _logger, httpClient, xmlReaderSettingsFactory);
@@ -271,12 +271,12 @@ namespace Emby.Dlna.Main
                 var device = new SsdpRootDevice
                 {
                     CacheLifetime = TimeSpan.FromSeconds(1800), //How long SSDP clients can cache this info.
-                    Location = uri, // Must point to the URL that serves your devices UPnP description document. 
+                    Location = uri, // Must point to the URL that serves your devices UPnP description document.
                     FriendlyName = "Jellyfin",
                     Manufacturer = "Jellyfin",
                     ModelName = "Jellyfin Server",
                     Uuid = udn
-                    // This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.                
+                    // This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
                 };
 
                 SetProperies(device, fullService);
@@ -297,7 +297,7 @@ namespace Emby.Dlna.Main
                         Manufacturer = device.Manufacturer,
                         ModelName = device.ModelName,
                         Uuid = udn
-                        // This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.                
+                        // This must be a globally unique value that survives reboots etc. Get from storage or embedded hardware etc.
                     };
 
                     SetProperies(embeddedDevice, subDevice);

+ 3 - 3
Emby.Dlna/MediaReceiverRegistrar/ControlHandler.cs

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

+ 2 - 2
Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrarXmlBuilder.cs

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

+ 5 - 5
Emby.Dlna/MediaReceiverRegistrar/ServiceActionListBuilder.cs

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

+ 8 - 8
Emby.Dlna/PlayTo/Device.cs

@@ -311,7 +311,7 @@ namespace Emby.Dlna.PlayTo
                 throw new InvalidOperationException("Unable to find service");
             }
 
-            await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, String.Format("{0:hh}:{0:mm}:{0:ss}", value), "REL_TIME"))
+            await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, avCommands.BuildPost(command, service.ServiceType, string.Format("{0:hh}:{0:mm}:{0:ss}", value), "REL_TIME"))
                 .ConfigureAwait(false);
 
             RestartTimer(true);
@@ -364,7 +364,7 @@ namespace Emby.Dlna.PlayTo
         private string CreateDidlMeta(string value)
         {
             if (string.IsNullOrEmpty(value))
-                return String.Empty;
+                return string.Empty;
 
             return DescriptionXmlBuilder.Escape(value);
         }
@@ -739,7 +739,7 @@ namespace Emby.Dlna.PlayTo
 
             if (track == null)
             {
-                //If track is null, some vendors do this, use GetMediaInfo instead                    
+                //If track is null, some vendors do this, use GetMediaInfo instead
                 return new Tuple<bool, uBaseObject>(true, null);
             }
 
@@ -783,7 +783,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (container == null)
             {
-                throw new ArgumentNullException("container");
+                throw new ArgumentNullException(nameof(container));
             }
 
             var url = container.GetValue(uPnpNamespaces.Res);
@@ -810,7 +810,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (container == null)
             {
-                throw new ArgumentNullException("container");
+                throw new ArgumentNullException(nameof(container));
             }
 
             var resElement = container.Element(uPnpNamespaces.Res);
@@ -979,7 +979,7 @@ namespace Emby.Dlna.PlayTo
             if (modelDescription != null)
                 deviceProperties.ModelDescription = modelDescription.Value;
 
-            deviceProperties.BaseUrl = String.Format("http://{0}:{1}", url.Host, url.Port);
+            deviceProperties.BaseUrl = string.Format("http://{0}:{1}", url.Host, url.Port);
 
             var icon = document.Descendants(uPnpNamespaces.ud.GetName("icon")).FirstOrDefault();
 
@@ -1021,7 +1021,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (element == null)
             {
-                throw new ArgumentNullException("element");
+                throw new ArgumentNullException(nameof(element));
             }
 
             var mimeType = element.GetDescendantValue(uPnpNamespaces.ud.GetName("mimetype"));
@@ -1173,7 +1173,7 @@ namespace Emby.Dlna.PlayTo
 
         public override string ToString()
         {
-            return String.Format("{0} - {1}", Properties.Name, Properties.BaseUrl);
+            return string.Format("{0} - {1}", Properties.Name, Properties.BaseUrl);
         }
     }
 }

+ 4 - 4
Emby.Dlna/PlayTo/PlayToController.cs

@@ -114,10 +114,10 @@ namespace Emby.Dlna.PlayTo
             info.Headers.TryGetValue("NTS", out nts);
 
             string usn;
-            if (!info.Headers.TryGetValue("USN", out usn)) usn = String.Empty;
+            if (!info.Headers.TryGetValue("USN", out usn)) usn = string.Empty;
 
             string nt;
-            if (!info.Headers.TryGetValue("NT", out nt)) nt = String.Empty;
+            if (!info.Headers.TryGetValue("NT", out nt)) nt = string.Empty;
 
             if (usn.IndexOf(_device.Properties.UUID, StringComparison.OrdinalIgnoreCase) != -1 &&
                 !_disposed)
@@ -829,7 +829,7 @@ namespace Emby.Dlna.PlayTo
             {
                 if (string.IsNullOrEmpty(url))
                 {
-                    throw new ArgumentNullException("url");
+                    throw new ArgumentNullException(nameof(url));
                 }
 
                 var parts = url.Split('/');
@@ -855,7 +855,7 @@ namespace Emby.Dlna.PlayTo
             {
                 if (string.IsNullOrEmpty(url))
                 {
-                    throw new ArgumentNullException("url");
+                    throw new ArgumentNullException(nameof(url));
                 }
 
                 var request = new StreamParams

+ 2 - 2
Emby.Dlna/PlayTo/PlaylistItemFactory.cs

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

+ 15 - 15
Emby.Dlna/PlayTo/SsdpHttpClient.cs

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

+ 2 - 2
Emby.Dlna/PlayTo/TransportCommands.cs

@@ -80,7 +80,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (container == null)
             {
-                throw new ArgumentNullException("container");
+                throw new ArgumentNullException(nameof(container));
             }
 
             return new Argument
@@ -171,7 +171,7 @@ namespace Emby.Dlna.PlayTo
             if (state != null)
             {
                 var sendValue = state.AllowedValues.FirstOrDefault(a => string.Equals(a, commandParameter, StringComparison.OrdinalIgnoreCase)) ??
-                                 state.AllowedValues.FirstOrDefault() ?? 
+                                 state.AllowedValues.FirstOrDefault() ??
                                  value;
 
                 return string.Format("<{0} xmlns:dt=\"urn:schemas-microsoft-com:datatypes\" dt:dt=\"{1}\">{2}</{0}>", argument.Name, state.DataType ?? "string", sendValue);

+ 1 - 1
Emby.Dlna/PlayTo/UpnpContainer.cs

@@ -10,7 +10,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (container == null)
             {
-                throw new ArgumentNullException("container");
+                throw new ArgumentNullException(nameof(container));
             }
 
             return new uBaseObject

+ 2 - 2
Emby.Dlna/PlayTo/uBaseObject.cs

@@ -2,7 +2,7 @@
 
 namespace Emby.Dlna.PlayTo
 {
-    public class uBaseObject 
+    public class uBaseObject
     {
         public string Id { get; set; }
 
@@ -26,7 +26,7 @@ namespace Emby.Dlna.PlayTo
         {
             if (obj == null)
             {
-                throw new ArgumentNullException("obj");
+                throw new ArgumentNullException(nameof(obj));
             }
 
             return string.Equals(Id, obj.Id);

+ 2 - 2
Emby.Dlna/PlayTo/uParser.cs

@@ -20,13 +20,13 @@ namespace Emby.Dlna.PlayTo
 
             if (document == null)
                 return list;
-            
+
             var item = (from result in document.Descendants("Result") select result).FirstOrDefault();
 
             if (item == null)
                 return list;
 
-            var uPnpResponse = XElement.Parse((String)item);
+            var uPnpResponse = XElement.Parse((string)item);
 
             var uObjects = from container in uPnpResponse.Elements(uPnpNamespaces.containers)
                            select new uParserObject { Element = container };

+ 1 - 1
Emby.Dlna/Profiles/SonyBravia2010Profile.cs

@@ -41,7 +41,7 @@ namespace Emby.Dlna.Profiles
 
             EnableSingleAlbumArtLimit = true;
             EnableAlbumArtInDidl = true;
-            
+
             TranscodingProfiles = new[]
             {
                 new TranscodingProfile

+ 8 - 11
Emby.Dlna/Properties/AssemblyInfo.cs

@@ -1,17 +1,16 @@
-using System.Resources;
+using System.Resources;
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
-// General Information about an assembly is controlled through the following 
+// General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("Emby.Dlna2")]
+[assembly: AssemblyTitle("Emby.Dlna")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Emby.Dlna2")]
-[assembly: AssemblyCopyright("Copyright ©  2016")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 [assembly: NeutralResourcesLanguage("en")]
@@ -19,12 +18,10 @@ using System.Runtime.InteropServices;
 // Version information for an assembly consists of the following four values:
 //
 //      Major Version
-//      Minor Version 
+//      Minor Version
 //      Build Number
 //      Revision
 //
-// You can specify all the values or you can default the Build and Revision Numbers 
+// You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

+ 4 - 7
Emby.Dlna/Server/DescriptionXmlBuilder.cs

@@ -1,4 +1,4 @@
-using Emby.Dlna.Common;
+using Emby.Dlna.Common;
 using MediaBrowser.Model.Dlna;
 using MediaBrowser.Model.Extensions;
 using System;
@@ -24,12 +24,12 @@ namespace Emby.Dlna.Server
         {
             if (string.IsNullOrEmpty(serverUdn))
             {
-                throw new ArgumentNullException("serverUdn");
+                throw new ArgumentNullException(nameof(serverUdn));
             }
 
             if (string.IsNullOrEmpty(serverAddress))
             {
-                throw new ArgumentNullException("serverAddress");
+                throw new ArgumentNullException(nameof(serverAddress));
             }
 
             _profile = profile;
@@ -39,10 +39,7 @@ namespace Emby.Dlna.Server
             _serverId = serverId;
         }
 
-        private bool EnableAbsoluteUrls
-        {
-            get { return false; }
-        }
+        private static bool EnableAbsoluteUrls => false;
 
         public string GetXml()
         {

+ 1 - 1
Emby.Dlna/Service/BaseService.cs

@@ -14,7 +14,7 @@ namespace Emby.Dlna.Service
         protected BaseService(ILogger logger, IHttpClient httpClient)
         {
             Logger = logger;
-            HttpClient = httpClient;  
+            HttpClient = httpClient;
 
             EventManager = new EventManager(Logger, HttpClient);
         }

+ 1 - 1
Emby.Dlna/Service/ControlErrorHandler.cs

@@ -10,7 +10,7 @@ namespace Emby.Dlna.Service
     public class ControlErrorHandler
     {
         private const string NS_SOAPENV = "http://schemas.xmlsoap.org/soap/envelope/";
-        
+
         public ControlResponse GetResponse(Exception ex)
         {
             var settings = new XmlWriterSettings

+ 3 - 3
Emby.Dlna/Service/ServiceXmlBuilder.cs

@@ -1,4 +1,4 @@
-using Emby.Dlna.Common;
+using Emby.Dlna.Common;
 using System.Collections.Generic;
 using System.Security;
 using System.Text;
@@ -28,7 +28,7 @@ namespace Emby.Dlna.Service
             return builder.ToString();
         }
 
-        private void AppendActionList(StringBuilder builder, IEnumerable<ServiceAction> actions)
+        private static void AppendActionList(StringBuilder builder, IEnumerable<ServiceAction> actions)
         {
             builder.Append("<actionList>");
 
@@ -59,7 +59,7 @@ namespace Emby.Dlna.Service
             builder.Append("</actionList>");
         }
 
-        private void AppendServiceStateTable(StringBuilder builder, IEnumerable<StateVariable> stateVariables)
+        private static void AppendServiceStateTable(StringBuilder builder, IEnumerable<StateVariable> stateVariables)
         {
             builder.Append("<serviceStateTable>");
 

+ 2 - 2
Emby.Dlna/Ssdp/DeviceDiscovery.cs

@@ -83,8 +83,8 @@ namespace Emby.Dlna.Ssdp
                 {
                     _deviceLocator = new SsdpDeviceLocator(_commsServer, _timerFactory);
 
-                    // (Optional) Set the filter so we only see notifications for devices we care about 
-                    // (can be any search target value i.e device type, uuid value etc - any value that appears in the 
+                    // (Optional) Set the filter so we only see notifications for devices we care about
+                    // (can be any search target value i.e device type, uuid value etc - any value that appears in the
                     // DiscoverdSsdpDevice.NotificationType property or that is used with the searchTarget parameter of the Search method).
                     //_DeviceLocator.NotificationFilter = "upnp:rootdevice";
 

+ 9 - 13
Emby.Drawing.Skia/Properties/AssemblyInfo.cs

@@ -1,25 +1,21 @@
-using System.Resources;
 using System.Reflection;
-using System.Runtime.CompilerServices;
+using System.Resources;
 using System.Runtime.InteropServices;
 
-// General Information about an assembly is controlled through the following 
+// General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 [assembly: AssemblyTitle("Emby.Drawing.Skia")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Emby.Drawing.Skia")]
-[assembly: AssemblyCopyright("Copyright ©  2017")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 [assembly: NeutralResourcesLanguage("en")]
 
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
+// 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)]

+ 5 - 5
Emby.Drawing.Skia/SkiaEncoder.cs

@@ -197,7 +197,7 @@ namespace Emby.Drawing.Skia
 
         private static bool HasDiacritics(string text)
         {
-            return !String.Equals(text, text.RemoveDiacritics(), StringComparison.Ordinal);
+            return !string.Equals(text, text.RemoveDiacritics(), StringComparison.Ordinal);
         }
 
         private static bool RequiresSpecialCharacterHack(string path)
@@ -509,11 +509,11 @@ namespace Emby.Drawing.Skia
         {
             if (string.IsNullOrWhiteSpace(inputPath))
             {
-                throw new ArgumentNullException("inputPath");
+                throw new ArgumentNullException(nameof(inputPath));
             }
             if (string.IsNullOrWhiteSpace(inputPath))
             {
-                throw new ArgumentNullException("outputPath");
+                throw new ArgumentNullException(nameof(outputPath));
             }
 
             var skiaOutputFormat = GetImageFormat(selectedOutputFormat);
@@ -594,12 +594,12 @@ namespace Emby.Drawing.Skia
                         // If foreground layer present then draw
                         if (hasForegroundColor)
                         {
-                            if (!Double.TryParse(options.ForegroundLayer, out double opacity))
+                            if (!double.TryParse(options.ForegroundLayer, out double opacity))
                             {
                                 opacity = .4;
                             }
 
-                            canvas.DrawColor(new SKColor(0, 0, 0, (Byte)((1 - opacity) * 0xFF)), SKBlendMode.SrcOver);
+                            canvas.DrawColor(new SKColor(0, 0, 0, (byte)((1 - opacity) * 0xFF)), SKBlendMode.SrcOver);
                         }
 
                         if (hasIndicator)

+ 6 - 1
Emby.Drawing.Skia/StripCollageBuilder.cs

@@ -1,4 +1,4 @@
-using SkiaSharp;
+using SkiaSharp;
 using MediaBrowser.Common.Configuration;
 using System;
 using System.IO;
@@ -20,6 +20,11 @@ namespace Emby.Drawing.Skia
 
         public static SKEncodedImageFormat GetEncodedFormat(string outputPath)
         {
+            if (outputPath == null)
+            {
+                throw new ArgumentNullException(nameof(outputPath));
+            }
+
             var ext = Path.GetExtension(outputPath).ToLower();
 
             if (ext == ".jpg" || ext == ".jpeg")

+ 6 - 5
Emby.Drawing/Common/ImageHeader.cs

@@ -50,12 +50,13 @@ namespace Emby.Drawing.Common
         /// <exception cref="ArgumentException">The image was of an unrecognised format.</exception>
         public static ImageSize GetDimensions(string path, ILogger logger, IFileSystem fileSystem)
         {
-            var extension = Path.GetExtension(path);
-
-            if (string.IsNullOrEmpty(extension))
+            if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentException("ImageHeader doesn't support image file");
+                throw new ArgumentNullException(nameof(path));
             }
+
+            string extension = Path.GetExtension(path).ToLower();
+
             if (!SupportedExtensions.Contains(extension))
             {
                 throw new ArgumentException("ImageHeader doesn't support " + extension);
@@ -94,7 +95,7 @@ namespace Emby.Drawing.Common
                 }
             }
 
-            throw new ArgumentException(ErrorMessage, "binaryReader");
+            throw new ArgumentException(ErrorMessage, nameof(binaryReader));
         }
 
         /// <summary>

+ 11 - 11
Emby.Drawing/ImageProcessor.cs

@@ -80,7 +80,7 @@ namespace Emby.Drawing
             {
                 if (value == null)
                 {
-                    throw new ArgumentNullException("value");
+                    throw new ArgumentNullException(nameof(value));
                 }
 
                 _imageEncoder = value;
@@ -103,7 +103,7 @@ namespace Emby.Drawing
                     "crw",
 
                     // Remove until supported
-                    //"nef", 
+                    //"nef",
                     "orf",
                     "pef",
                     "arw",
@@ -179,7 +179,7 @@ namespace Emby.Drawing
         {
             if (options == null)
             {
-                throw new ArgumentNullException("options");
+                throw new ArgumentNullException(nameof(options));
             }
 
             var originalImage = options.Image;
@@ -491,7 +491,7 @@ namespace Emby.Drawing
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             try
@@ -691,12 +691,12 @@ namespace Emby.Drawing
         {
             if (string.IsNullOrEmpty(originalImagePath))
             {
-                throw new ArgumentNullException("originalImagePath");
+                throw new ArgumentNullException(nameof(originalImagePath));
             }
 
             if (item == null)
             {
-                throw new ArgumentNullException("item");
+                throw new ArgumentNullException(nameof(item));
             }
 
             var treatmentRequiresTransparency = false;
@@ -779,16 +779,16 @@ namespace Emby.Drawing
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
             if (string.IsNullOrEmpty(uniqueName))
             {
-                throw new ArgumentNullException("uniqueName");
+                throw new ArgumentNullException(nameof(uniqueName));
             }
 
             if (string.IsNullOrEmpty(fileExtension))
             {
-                throw new ArgumentNullException("fileExtension");
+                throw new ArgumentNullException(nameof(fileExtension));
             }
 
             var filename = uniqueName.GetMD5() + fileExtension;
@@ -811,11 +811,11 @@ namespace Emby.Drawing
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
             if (string.IsNullOrEmpty(filename))
             {
-                throw new ArgumentNullException("filename");
+                throw new ArgumentNullException(nameof(filename));
             }
 
             var prefix = filename.Substring(0, 1);

+ 9 - 9
Emby.Drawing/Properties/AssemblyInfo.cs

@@ -1,20 +1,20 @@
-using System.Reflection;
+using System.Reflection;
 using System.Runtime.InteropServices;
 
-// General Information about an assembly is controlled through the following 
+// General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 [assembly: AssemblyTitle("Emby.Drawing")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Emby.Drawing")]
-[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
-// 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 
+// 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)]
 
@@ -24,7 +24,7 @@ using System.Runtime.InteropServices;
 // Version information for an assembly consists of the following four values:
 //
 //      Major Version
-//      Minor Version 
+//      Minor Version
 //      Build Number
 //      Revision
-//
+//

+ 4 - 0
Emby.IsoMounting/IsoMounter/IsoMounter.csproj

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

+ 3 - 3
Emby.IsoMounting/IsoMounter/LinuxIsoManager.cs

@@ -87,7 +87,7 @@ namespace IsoMounter
                 UmountCommand
             );
 
-            if (!String.IsNullOrEmpty(SudoCommand) && !String.IsNullOrEmpty(MountCommand) && !String.IsNullOrEmpty(UmountCommand)) {
+            if (!string.IsNullOrEmpty(SudoCommand) && !string.IsNullOrEmpty(MountCommand) && !string.IsNullOrEmpty(UmountCommand)) {
                 ExecutablesAvailable = true;
             } else {
                 ExecutablesAvailable = false;
@@ -152,7 +152,7 @@ namespace IsoMounter
                 return Task.FromResult<IIsoMount>(mountedISO);
             }
             else {
-                throw new IOException(String.Format(
+                throw new IOException(string.Format(
                     "An error occurred trying to mount image [$0].",
                     isoPath
                 ));
@@ -217,7 +217,7 @@ namespace IsoMounter
             {
                 string path = test.Trim();
 
-                if (!String.IsNullOrEmpty(path) && FileSystem.FileExists(path = Path.Combine(path, name))) {
+                if (!string.IsNullOrEmpty(path) && FileSystem.FileExists(path = Path.Combine(path, name))) {
                     return FileSystem.GetFullPath(path);
                 }
             }

+ 1 - 1
Emby.IsoMounting/IsoMounter/LinuxMount.cs

@@ -48,7 +48,7 @@ namespace IsoMounter
             if (disposed) {
                 return;
             }
-            
+
             if (disposing) {
 
                 //

+ 21 - 0
Emby.IsoMounting/IsoMounter/Properties/AssemblyInfo.cs

@@ -0,0 +1,21 @@
+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("IsoMounter")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// 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)]

+ 1 - 1
Emby.Naming/AudioBook/AudioBookInfo.cs

@@ -29,7 +29,7 @@ namespace Emby.Naming.AudioBook
         /// </summary>
         /// <value>The alternate versions.</value>
         public List<AudioBookFileInfo> AlternateVersions { get; set; }
-        
+
         public AudioBookInfo()
         {
             Files = new List<AudioBookFileInfo>();

+ 2 - 2
Emby.Naming/AudioBook/AudioBookResolver.cs

@@ -30,7 +30,7 @@ namespace Emby.Naming.AudioBook
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
             if (IsDirectory)
                 return null;
@@ -46,7 +46,7 @@ namespace Emby.Naming.AudioBook
 
             var parsingResult = new AudioBookFilePathParser(_options)
                 .Parse(path, IsDirectory);
-            
+
             return new AudioBookFileInfo
             {
                 Path = path,

+ 1 - 1
Emby.Naming/Common/NamingOptions.cs

@@ -282,7 +282,7 @@ namespace Emby.Naming.Common
                 new EpisodeExpression(@".*(\\|\/)(?<seriesname>((?![Ss]([0-9]+)[][ ._-]*[Ee]([0-9]+))[^\\\/])*)?[Ss](?<seasonnumber>[0-9]+)[][ ._-]*[Ee](?<epnumber>[0-9]+)([^\\/]*)$")
                 {
                     IsNamed = true
-                }, 
+                },
                 // <!-- foo.ep01, foo.EP_01 -->
                 new EpisodeExpression(@"[\._ -]()[Ee][Pp]_?([0-9]+)([^\\/]*)$"),
                 new EpisodeExpression("([0-9]{4})[\\.-]([0-9]{2})[\\.-]([0-9]{2})", true)

+ 13 - 2
Emby.Naming/Emby.Naming.csproj

@@ -4,9 +4,20 @@
     <TargetFramework>netstandard2.0</TargetFramework>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
-  
+
+  <PropertyGroup>
+    <Authors>Jellyfin Contributors</Authors>
+    <PackageId>Jellyfin.Naming</PackageId>
+    <PackageLicenseUrl>https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt</PackageLicenseUrl>
+    <RepositoryUrl>https://github.com/jellyfin/jellyfin</RepositoryUrl>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="..\SharedVersion.cs" Link="SharedVersion.cs" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj" />
   </ItemGroup>
-    
+
 </Project>

+ 21 - 0
Emby.Naming/Properties/AssemblyInfo.cs

@@ -0,0 +1,21 @@
+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("Emby.Naming")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// 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)]

+ 2 - 2
Emby.Naming/Subtitles/SubtitleParser.cs

@@ -18,7 +18,7 @@ namespace Emby.Naming.Subtitles
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             var extension = Path.GetExtension(path);
@@ -52,7 +52,7 @@ namespace Emby.Naming.Subtitles
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             // Note: the tags need be be surrounded be either a space ( ), hyphen -, dot . or underscore _.

+ 2 - 2
Emby.Naming/TV/EpisodePathParser.cs

@@ -1,4 +1,4 @@
-using Emby.Naming.Common;
+using Emby.Naming.Common;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
@@ -74,7 +74,7 @@ namespace Emby.Naming.TV
             return result ?? new EpisodePathParserResult();
         }
 
-        private EpisodePathParserResult Parse(string name, EpisodeExpression expression)
+        private static EpisodePathParserResult Parse(string name, EpisodeExpression expression)
         {
             var result = new EpisodePathParserResult();
 

+ 2 - 2
Emby.Naming/TV/EpisodeResolver.cs

@@ -19,7 +19,7 @@ namespace Emby.Naming.TV
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             var isStub = false;
@@ -53,7 +53,7 @@ namespace Emby.Naming.TV
 
             var parsingResult = new EpisodePathParser(_options)
                 .Parse(path, IsDirectory, isNamed, isOptimistic, supportsAbsoluteNumbers, fillExtendedInfo);
-            
+
             return new EpisodeInfo
             {
                 Path = path,

+ 3 - 3
Emby.Naming/Video/CleanDateTimeParser.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using Emby.Naming.Common;
 using System.Globalization;
 using System.IO;
@@ -38,7 +38,7 @@ namespace Emby.Naming.Video
             }
             catch (ArgumentException)
             {
-                
+
             }
 
             var result = _options.CleanDateTimeRegexes.Select(i => Clean(name, i))
@@ -63,7 +63,7 @@ namespace Emby.Naming.Video
                 result;
         }
 
-        private CleanDateTimeResult Clean(string name, Regex expression)
+        private static CleanDateTimeResult Clean(string name, Regex expression)
         {
             var result = new CleanDateTimeResult();
 

+ 2 - 2
Emby.Naming/Video/CleanStringParser.cs

@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.Text.RegularExpressions;
 
 namespace Emby.Naming.Video
@@ -30,7 +30,7 @@ namespace Emby.Naming.Video
             };
         }
 
-        private CleanStringResult Clean(string name, Regex expression)
+        private static CleanStringResult Clean(string name, Regex expression)
         {
             var result = new CleanStringResult();
 

+ 1 - 1
Emby.Naming/Video/FlagParser.cs

@@ -22,7 +22,7 @@ namespace Emby.Naming.Video
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             // Note: the tags need be be surrounded be either a space ( ), hyphen -, dot . or underscore _.

+ 2 - 2
Emby.Naming/Video/Format3DParser.cs

@@ -1,4 +1,4 @@
-using Emby.Naming.Common;
+using Emby.Naming.Common;
 using System;
 using System.Linq;
 
@@ -36,7 +36,7 @@ namespace Emby.Naming.Video
             return new Format3DResult();
         }
 
-        private Format3DResult Parse(string[] videoFlags, Format3DRule rule)
+        private static Format3DResult Parse(string[] videoFlags, Format3DRule rule)
         {
             var result = new Format3DResult();
 

+ 1 - 1
Emby.Naming/Video/StackResolver.cs

@@ -126,7 +126,7 @@ namespace Emby.Naming.Video
                                             }
                                             stack.Files.Add(file2.FullName);
                                         }
-                                        else 
+                                        else
                                         {
                                             // Sequel
                                             offset = 0;

+ 1 - 1
Emby.Naming/Video/StubResolver.cs

@@ -18,7 +18,7 @@ namespace Emby.Naming.Video
         {
             var result = new StubResult();
             var extension = Path.GetExtension(path) ?? string.Empty;
-            
+
             if (_options.StubFileExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase))
             {
                 result.IsStub = true;

+ 1 - 1
Emby.Naming/Video/VideoFileInfo.cs

@@ -55,7 +55,7 @@ namespace Emby.Naming.Video
         /// Gets or sets the type of the stub.
         /// </summary>
         /// <value>The type of the stub.</value>
-        public string StubType { get; set; }        
+        public string StubType { get; set; }
         /// <summary>
         /// Gets or sets the type.
         /// </summary>

+ 1 - 1
Emby.Naming/Video/VideoInfo.cs

@@ -32,7 +32,7 @@ namespace Emby.Naming.Video
         /// </summary>
         /// <value>The alternate versions.</value>
         public List<VideoFileInfo> AlternateVersions { get; set; }
-        
+
         public VideoInfo()
         {
             Files = new List<VideoFileInfo>();

+ 4 - 4
Emby.Naming/Video/VideoListResolver.cs

@@ -1,4 +1,4 @@
-using Emby.Naming.Common;
+using Emby.Naming.Common;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -55,9 +55,9 @@ namespace Emby.Naming.Video
 
                 info.Year = info.Files.First().Year;
 
-                var extraBaseNames = new List<string> 
+                var extraBaseNames = new List<string>
                 {
-                    stack.Name, 
+                    stack.Name,
                     Path.GetFileNameWithoutExtension(stack.Files[0])
                 };
 
@@ -236,7 +236,7 @@ namespace Emby.Naming.Video
             if (testFilename.StartsWith(folderName, StringComparison.OrdinalIgnoreCase))
             {
                 testFilename = testFilename.Substring(folderName.Length).Trim();
-                return testFilename.StartsWith("-", StringComparison.OrdinalIgnoreCase)||Regex.Replace(testFilename, @"\[([^]]*)\]", "").Trim() == String.Empty;
+                return testFilename.StartsWith("-", StringComparison.OrdinalIgnoreCase) || Regex.Replace(testFilename, @"\[([^]]*)\]", "").Trim() == string.Empty;
             }
 
             return false;

+ 1 - 1
Emby.Naming/Video/VideoResolver.cs

@@ -45,7 +45,7 @@ namespace Emby.Naming.Video
         {
             if (string.IsNullOrEmpty(path))
             {
-                throw new ArgumentNullException("path");
+                throw new ArgumentNullException(nameof(path));
             }
 
             var isStub = false;

+ 4 - 0
Emby.Notifications/Emby.Notifications.csproj

@@ -5,6 +5,10 @@
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
 
+  <ItemGroup>
+    <Compile Include="..\SharedVersion.cs" Link="SharedVersion.cs" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj" />
     <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj" />

+ 6 - 21
Emby.Notifications/Properties/AssemblyInfo.cs

@@ -1,5 +1,5 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
+using System.Reflection;
+using System.Resources;
 using System.Runtime.InteropServices;
 
 // General Information about an assembly is controlled through the following
@@ -8,29 +8,14 @@ using System.Runtime.InteropServices;
 [assembly: AssemblyTitle("Emby.Notifications")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Emby.Notifications")]
-[assembly: AssemblyCopyright("Copyright ©  2018")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
 
 // 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)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("4d1d313b-60bb-4e11-acf9-cda6745266ef")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

+ 9 - 22
Emby.Photos/Properties/AssemblyInfo.cs

@@ -1,34 +1,21 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
+using System.Reflection;
+using System.Resources;
 using System.Runtime.InteropServices;
 
-// General Information about an assembly is controlled through the following 
+// General Information about an assembly is controlled through the following
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 [assembly: AssemblyTitle("Emby.Photos")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Emby.Photos")]
-[assembly: AssemblyCopyright("Copyright ©  2016")]
+[assembly: AssemblyCompany("Jellyfin Project")]
+[assembly: AssemblyProduct("Jellyfin: The Free Software Media System")]
+[assembly: AssemblyCopyright("Copyright ©  2019 Jellyfin Contributors. Code released under the GNU General Public License Version 2")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
 
-// 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 
+// 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)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("89ab4548-770d-41fd-a891-8daff44f452c")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version 
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers 
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]

+ 4 - 4
Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs

@@ -202,7 +202,7 @@ namespace Emby.Server.Implementations.Activity
             return name;
         }
 
-        private string GetPlaybackNotificationType(string mediaType)
+        private static string GetPlaybackNotificationType(string mediaType)
         {
             if (string.Equals(mediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase))
             {
@@ -220,7 +220,7 @@ namespace Emby.Server.Implementations.Activity
             return null;
         }
 
-        private string GetPlaybackStoppedNotificationType(string mediaType)
+        private static string GetPlaybackStoppedNotificationType(string mediaType)
         {
             if (string.Equals(mediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase))
             {
@@ -577,8 +577,8 @@ namespace Emby.Server.Implementations.Activity
         /// <param name="description">The name of this item (singular form)</param>
         private static string CreateValueString(int value, string description)
         {
-            return String.Format("{0:#,##0} {1}",
-                value, value == 1 ? description : String.Format("{0}s", description));
+            return string.Format("{0:#,##0} {1}",
+                value, value == 1 ? description : string.Format("{0}s", description));
         }
     }
 }

+ 4 - 4
Emby.Server.Implementations/Activity/ActivityRepository.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
@@ -83,7 +83,7 @@ namespace Emby.Server.Implementations.Activity
         {
             if (entry == null)
             {
-                throw new ArgumentNullException("entry");
+                throw new ArgumentNullException(nameof(entry));
             }
 
             using (WriteLock.Write())
@@ -122,7 +122,7 @@ namespace Emby.Server.Implementations.Activity
         {
             if (entry == null)
             {
-                throw new ArgumentNullException("entry");
+                throw new ArgumentNullException(nameof(entry));
             }
 
             using (WriteLock.Write())
@@ -251,7 +251,7 @@ namespace Emby.Server.Implementations.Activity
             }
         }
 
-        private ActivityLogEntry GetEntry(IReadOnlyList<IResultSetValue> reader)
+        private static ActivityLogEntry GetEntry(IReadOnlyList<IResultSetValue> reader)
         {
             var index = 0;
 

+ 10 - 61
Emby.Server.Implementations/AppBase/BaseApplicationPaths.cs

@@ -55,61 +55,31 @@ namespace Emby.Server.Implementations.AppBase
         }
 
         private const string _virtualDataPath = "%AppDataPath%";
-        public string VirtualDataPath
-        {
-            get
-            {
-                return _virtualDataPath;
-            }
-        }
+        public string VirtualDataPath => _virtualDataPath;
 
         /// <summary>
         /// Gets the image cache path.
         /// </summary>
         /// <value>The image cache path.</value>
-        public string ImageCachePath
-        {
-            get
-            {
-                return Path.Combine(CachePath, "images");
-            }
-        }
+        public string ImageCachePath => Path.Combine(CachePath, "images");
 
         /// <summary>
         /// Gets the path to the plugin directory
         /// </summary>
         /// <value>The plugins path.</value>
-        public string PluginsPath
-        {
-            get
-            {
-                return Path.Combine(ProgramDataPath, "plugins");
-            }
-        }
+        public string PluginsPath => Path.Combine(ProgramDataPath, "plugins");
 
         /// <summary>
         /// Gets the path to the plugin configurations directory
         /// </summary>
         /// <value>The plugin configurations path.</value>
-        public string PluginConfigurationsPath
-        {
-            get
-            {
-                return Path.Combine(PluginsPath, "configurations");
-            }
-        }
+        public string PluginConfigurationsPath => Path.Combine(PluginsPath, "configurations");
 
         /// <summary>
         /// Gets the path to where temporary update files will be stored
         /// </summary>
         /// <value>The plugin configurations path.</value>
-        public string TempUpdatePath
-        {
-            get
-            {
-                return Path.Combine(ProgramDataPath, "updates");
-            }
-        }
+        public string TempUpdatePath => Path.Combine(ProgramDataPath, "updates");
 
         /// <summary>
         /// The _log directory
@@ -133,10 +103,7 @@ namespace Emby.Server.Implementations.AppBase
 
                 return _logDirectoryPath;
             }
-            set
-            {
-                _logDirectoryPath = value;
-            }
+            set => _logDirectoryPath = value;
         }
 
         /// <summary>
@@ -161,23 +128,14 @@ namespace Emby.Server.Implementations.AppBase
 
                 return _configurationDirectoryPath;
             }
-            set
-            {
-                _configurationDirectoryPath = value;
-            }
+            set => _configurationDirectoryPath = value;
         }
 
         /// <summary>
         /// Gets the path to the system configuration file
         /// </summary>
         /// <value>The system configuration file path.</value>
-        public string SystemConfigurationFilePath
-        {
-            get
-            {
-                return Path.Combine(ConfigurationDirectoryPath, "system.xml");
-            }
-        }
+        public string SystemConfigurationFilePath => Path.Combine(ConfigurationDirectoryPath, "system.xml");
 
         /// <summary>
         /// The _cache directory
@@ -200,22 +158,13 @@ namespace Emby.Server.Implementations.AppBase
 
                 return _cachePath;
             }
-            set
-            {
-                _cachePath = value;
-            }
+            set => _cachePath = value;
         }
 
         /// <summary>
         /// Gets the folder path to the temp directory within the cache folder
         /// </summary>
         /// <value>The temp directory.</value>
-        public string TempDirectory
-        {
-            get
-            {
-                return Path.Combine(CachePath, "temp");
-            }
-        }
+        public string TempDirectory => Path.Combine(CachePath, "temp");
     }
 }

+ 3 - 2
Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.IO;
@@ -99,6 +99,7 @@ namespace Emby.Server.Implementations.AppBase
         /// <param name="applicationPaths">The application paths.</param>
         /// <param name="loggerFactory">The logger factory.</param>
         /// <param name="xmlSerializer">The XML serializer.</param>
+        /// <param name="fileSystem">The file system</param>
         protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
         {
             CommonApplicationPaths = applicationPaths;
@@ -155,7 +156,7 @@ namespace Emby.Server.Implementations.AppBase
         {
             if (newConfiguration == null)
             {
-                throw new ArgumentNullException("newConfiguration");
+                throw new ArgumentNullException(nameof(newConfiguration));
             }
 
             ValidateCachePath(newConfiguration);

+ 2 - 1
Emby.Server.Implementations/AppBase/ConfigurationHelper.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.IO;
 using System.Linq;
 using MediaBrowser.Model.IO;
@@ -18,6 +18,7 @@ namespace Emby.Server.Implementations.AppBase
         /// <param name="type">The type.</param>
         /// <param name="path">The path.</param>
         /// <param name="xmlSerializer">The XML serializer.</param>
+        /// <param name="fileSystem">The file system</param>
         /// <returns>System.Object.</returns>
         public static object GetXmlConfiguration(Type type, string path, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
         {

+ 22 - 82
Emby.Server.Implementations/ApplicationHost.cs

@@ -1,4 +1,4 @@
-using Emby.Common.Implementations.Serialization;
+using Emby.Common.Implementations.Serialization;
 using Emby.Drawing;
 using Emby.Photos;
 using Emby.Dlna;
@@ -41,7 +41,6 @@ using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Common.Plugins;
 using MediaBrowser.Model.Extensions;
-using MediaBrowser.Common.Security;
 using MediaBrowser.Common.Updates;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller.Channels;
@@ -132,13 +131,7 @@ namespace Emby.Server.Implementations
         /// Gets or sets a value indicating whether this instance can self update.
         /// </summary>
         /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value>
-        public virtual bool CanSelfUpdate
-        {
-            get
-            {
-                return false;
-            }
-        }
+        public virtual bool CanSelfUpdate => false;
 
         public virtual bool CanLaunchWebBrowser
         {
@@ -237,7 +230,6 @@ namespace Emby.Server.Implementations
         {
             get
             {
-
 #if BETA
                 return PackageVersionClass.Beta;
 #endif
@@ -245,10 +237,7 @@ namespace Emby.Server.Implementations
             }
         }
 
-        public virtual string OperatingSystemDisplayName
-        {
-            get { return EnvironmentInfo.OperatingSystemName; }
-        }
+        public virtual string OperatingSystemDisplayName => EnvironmentInfo.OperatingSystemName;
 
         /// <summary>
         /// The container
@@ -261,10 +250,7 @@ namespace Emby.Server.Implementations
         /// Gets the server configuration manager.
         /// </summary>
         /// <value>The server configuration manager.</value>
-        public IServerConfigurationManager ServerConfigurationManager
-        {
-            get { return (IServerConfigurationManager)ConfigurationManager; }
-        }
+        public IServerConfigurationManager ServerConfigurationManager => (IServerConfigurationManager)ConfigurationManager;
 
         /// <summary>
         /// Gets the configuration manager.
@@ -352,11 +338,6 @@ namespace Emby.Server.Implementations
         /// </summary>
         /// <value>The installation manager.</value>
         protected IInstallationManager InstallationManager { get; private set; }
-        /// <summary>
-        /// Gets the security manager.
-        /// </summary>
-        /// <value>The security manager.</value>
-        protected ISecurityManager SecurityManager { get; private set; }
 
         /// <summary>
         /// Gets or sets the zip client.
@@ -453,13 +434,7 @@ namespace Emby.Server.Implementations
         /// Gets the current application version
         /// </summary>
         /// <value>The application version.</value>
-        public Version ApplicationVersion
-        {
-            get
-            {
-                return _version ?? (_version = typeof(ApplicationHost).Assembly.GetName().Version);
-            }
-        }
+        public Version ApplicationVersion => _version ?? (_version = typeof(ApplicationHost).Assembly.GetName().Version);
 
         private DeviceId _deviceId;
         public string SystemId
@@ -479,15 +454,9 @@ namespace Emby.Server.Implementations
         /// Gets the name.
         /// </summary>
         /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return "Emby Server";
-            }
-        }
+        public string Name => "Emby Server";
 
-        private Tuple<Assembly, string> GetAssembly(Type type)
+        private static Tuple<Assembly, string> GetAssembly(Type type)
         {
             var assembly = type.GetTypeInfo().Assembly;
             string path = null;
@@ -513,7 +482,7 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// Creates the instance safe.
         /// </summary>
-        /// <param name="type">The type.</param>
+        /// <param name="typeInfo">The type information.</param>
         /// <returns>System.Object.</returns>
         protected object CreateInstanceSafe(Tuple<Type, string> typeInfo)
         {
@@ -540,7 +509,7 @@ namespace Emby.Server.Implementations
         protected void RegisterSingleInstance<T>(T obj, bool manageLifetime = true)
             where T : class
         {
-            Container.RegisterSingleton(obj);
+            Container.RegisterInstance<T>(obj);
 
             if (manageLifetime)
             {
@@ -605,7 +574,7 @@ namespace Emby.Server.Implementations
             }
             catch (Exception ex)
             {
-                Logger.LogError(ex, "Error loading assembly {file}", file);
+                Logger.LogError(ex, "Error loading assembly {File}", file);
                 return null;
             }
         }
@@ -828,10 +797,7 @@ namespace Emby.Server.Implementations
             SocketFactory = new SocketFactory(LoggerFactory.CreateLogger("SocketFactory"));
             RegisterSingleInstance(SocketFactory);
 
-            SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths, LoggerFactory, FileSystemManager, CryptographyProvider);
-            RegisterSingleInstance(SecurityManager);
-
-            InstallationManager = new InstallationManager(LoggerFactory.CreateLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, SecurityManager, ServerConfigurationManager, FileSystemManager, CryptographyProvider, PackageRuntime);
+            InstallationManager = new InstallationManager(LoggerFactory.CreateLogger("InstallationManager"), this, ApplicationPaths, HttpClient, JsonSerializer, ServerConfigurationManager, FileSystemManager, CryptographyProvider, PackageRuntime);
             RegisterSingleInstance(InstallationManager);
 
             ZipClient = new ZipClient(FileSystemManager);
@@ -946,7 +912,7 @@ namespace Emby.Server.Implementations
             PlaylistManager = new PlaylistManager(LibraryManager, FileSystemManager, LibraryMonitor, LoggerFactory.CreateLogger("PlaylistManager"), UserManager, ProviderManager);
             RegisterSingleInstance<IPlaylistManager>(PlaylistManager);
 
-            LiveTvManager = new LiveTvManager(this, HttpClient, ServerConfigurationManager, Logger, ItemRepository, ImageProcessor, UserDataManager, DtoService, UserManager, LibraryManager, TaskManager, LocalizationManager, JsonSerializer, ProviderManager, FileSystemManager, SecurityManager, () => ChannelManager);
+            LiveTvManager = new LiveTvManager(this, HttpClient, ServerConfigurationManager, Logger, ItemRepository, ImageProcessor, UserDataManager, DtoService, UserManager, LibraryManager, TaskManager, LocalizationManager, JsonSerializer, ProviderManager, FileSystemManager, () => ChannelManager);
             RegisterSingleInstance(LiveTvManager);
 
             UserViewManager = new UserViewManager(LibraryManager, LocalizationManager, UserManager, ChannelManager, LiveTvManager, ServerConfigurationManager);
@@ -1004,13 +970,7 @@ namespace Emby.Server.Implementations
             return s => JsvReader.GetParseFn(propertyType)(s);
         }
 
-        public virtual string PackageRuntime
-        {
-            get
-            {
-                return "netcore";
-            }
-        }
+        public virtual string PackageRuntime => "netcore";
 
         public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths, EnvironmentInfo.EnvironmentInfo environmentInfo)
         {
@@ -1049,7 +1009,7 @@ namespace Emby.Server.Implementations
             return name + "/" + ApplicationVersion;
         }
 
-        private string FormatAttribute(string str)
+        private static string FormatAttribute(string str)
         {
             var arr = str.ToCharArray();
 
@@ -1066,13 +1026,7 @@ namespace Emby.Server.Implementations
             return result;
         }
 
-        protected virtual bool SupportsDualModeSockets
-        {
-            get
-            {
-                return true;
-            }
-        }
+        protected virtual bool SupportsDualModeSockets => true;
 
         private X509Certificate GetCertificate(CertificateInfo info)
         {
@@ -1927,18 +1881,9 @@ namespace Emby.Server.Implementations
             };
         }
 
-        public bool EnableHttps
-        {
-            get
-            {
-                return SupportsHttps && ServerConfigurationManager.Configuration.EnableHttps;
-            }
-        }
+        public bool EnableHttps => SupportsHttps && ServerConfigurationManager.Configuration.EnableHttps;
 
-        public bool SupportsHttps
-        {
-            get { return Certificate != null || ServerConfigurationManager.Configuration.IsBehindProxy; }
-        }
+        public bool SupportsHttps => Certificate != null || ServerConfigurationManager.Configuration.IsBehindProxy;
 
         public async Task<string> GetLocalApiUrl(CancellationToken cancellationToken)
         {
@@ -2132,15 +2077,10 @@ namespace Emby.Server.Implementations
             }
         }
 
-        public string FriendlyName
-        {
-            get
-            {
-                return string.IsNullOrEmpty(ServerConfigurationManager.Configuration.ServerName)
-                    ? Environment.MachineName
-                    : ServerConfigurationManager.Configuration.ServerName;
-            }
-        }
+        public string FriendlyName =>
+            string.IsNullOrEmpty(ServerConfigurationManager.Configuration.ServerName)
+                ? Environment.MachineName
+                : ServerConfigurationManager.Configuration.ServerName;
 
         public int HttpPort { get; private set; }
 
@@ -2177,7 +2117,7 @@ namespace Emby.Server.Implementations
         private bool _hasUpdateAvailable;
         public bool HasUpdateAvailable
         {
-            get { return _hasUpdateAvailable; }
+            get => _hasUpdateAvailable;
             set
             {
                 var fireEvent = value && !_hasUpdateAvailable;

+ 9 - 9
Emby.Server.Implementations/Archiving/ZipClient.cs

@@ -15,14 +15,14 @@ namespace Emby.Server.Implementations.Archiving
     /// </summary>
     public class ZipClient : IZipClient
     {
-		private readonly IFileSystem _fileSystem;
+        private readonly IFileSystem _fileSystem;
 
-		public ZipClient(IFileSystem fileSystem) 
-		{
-			_fileSystem = fileSystem;
-		}
+        public ZipClient(IFileSystem fileSystem)
+        {
+            _fileSystem = fileSystem;
+        }
 
-		/// <summary>
+        /// <summary>
         /// Extracts all.
         /// </summary>
         /// <param name="sourceFile">The source file.</param>
@@ -30,7 +30,7 @@ namespace Emby.Server.Implementations.Archiving
         /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
         public void ExtractAll(string sourceFile, string targetPath, bool overwriteExistingFiles)
         {
-			using (var fileStream = _fileSystem.OpenRead(sourceFile))
+            using (var fileStream = _fileSystem.OpenRead(sourceFile))
             {
                 ExtractAll(fileStream, targetPath, overwriteExistingFiles);
             }
@@ -116,7 +116,7 @@ namespace Emby.Server.Implementations.Archiving
         /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
         public void ExtractAllFrom7z(string sourceFile, string targetPath, bool overwriteExistingFiles)
         {
-			using (var fileStream = _fileSystem.OpenRead(sourceFile))
+            using (var fileStream = _fileSystem.OpenRead(sourceFile))
             {
                 ExtractAllFrom7z(fileStream, targetPath, overwriteExistingFiles);
             }
@@ -156,7 +156,7 @@ namespace Emby.Server.Implementations.Archiving
         /// <param name="overwriteExistingFiles">if set to <c>true</c> [overwrite existing files].</param>
         public void ExtractAllFromTar(string sourceFile, string targetPath, bool overwriteExistingFiles)
         {
-			using (var fileStream = _fileSystem.OpenRead(sourceFile))
+            using (var fileStream = _fileSystem.OpenRead(sourceFile))
             {
                 ExtractAllFromTar(fileStream, targetPath, overwriteExistingFiles);
             }

+ 1 - 1
Emby.Server.Implementations/Browser/BrowserLauncher.cs

@@ -41,7 +41,7 @@ namespace Emby.Server.Implementations.Browser
             }
             catch (NotSupportedException)
             {
-                
+
             }
             catch (Exception)
             {

+ 1 - 4
Emby.Server.Implementations/Channels/ChannelImageProvider.cs

@@ -30,10 +30,7 @@ namespace Emby.Server.Implementations.Channels
             return channel.GetChannelImage(type, cancellationToken);
         }
 
-        public string Name
-        {
-            get { return "Channel Image Provider"; }
-        }
+        public string Name => "Channel Image Provider";
 
         public bool Supports(BaseItem item)
         {

+ 10 - 15
Emby.Server.Implementations/Channels/ChannelManager.cs

@@ -1,4 +1,4 @@
-using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Net;
 using MediaBrowser.Controller.Channels;
 using MediaBrowser.Controller.Configuration;
@@ -67,13 +67,7 @@ namespace Emby.Server.Implementations.Channels
             _providerManager = providerManager;
         }
 
-        private TimeSpan CacheLength
-        {
-            get
-            {
-                return TimeSpan.FromHours(3);
-            }
-        }
+        private static TimeSpan CacheLength => TimeSpan.FromHours(3);
 
         public void AddParts(IEnumerable<IChannel> channels)
         {
@@ -269,6 +263,7 @@ namespace Emby.Server.Implementations.Channels
             {
             };
 
+            //TODO Fix The co-variant conversion (internalResult.Items) between Folder[] and BaseItem[], this can generate runtime issues.
             var returnItems = _dtoService.GetBaseItemDtos(internalResult.Items, dtoOptions, user);
 
             var result = new QueryResult<BaseItemDto>
@@ -419,7 +414,7 @@ namespace Emby.Server.Implementations.Channels
             return list;
         }
 
-        private MediaSourceInfo NormalizeMediaSource(BaseItem item, MediaSourceInfo info)
+        private static MediaSourceInfo NormalizeMediaSource(BaseItem item, MediaSourceInfo info)
         {
             info.RunTimeTicks = info.RunTimeTicks ?? item.RunTimeTicks;
 
@@ -492,7 +487,7 @@ namespace Emby.Server.Implementations.Channels
             return item;
         }
 
-        private string GetOfficialRating(ChannelParentalRating rating)
+        private static string GetOfficialRating(ChannelParentalRating rating)
         {
             switch (rating)
             {
@@ -533,7 +528,7 @@ namespace Emby.Server.Implementations.Channels
         {
             if (string.IsNullOrEmpty(id))
             {
-                throw new ArgumentNullException("id");
+                throw new ArgumentNullException(nameof(id));
             }
 
             var channel = GetChannel(id);
@@ -577,7 +572,7 @@ namespace Emby.Server.Implementations.Channels
         {
             if (string.IsNullOrEmpty(name))
             {
-                throw new ArgumentNullException("name");
+                throw new ArgumentNullException(nameof(name));
             }
             return _libraryManager.GetNewItemId("Channel " + name, typeof(Channel));
         }
@@ -891,7 +886,7 @@ namespace Emby.Server.Implementations.Channels
                 filename + ".json");
         }
 
-        private string GetIdToHash(string externalId, string channelName)
+        private static string GetIdToHash(string externalId, string channelName)
         {
             // Increment this as needed to force new downloads
             // Incorporate Name because it's being used to convert channel entity to provider
@@ -902,7 +897,7 @@ namespace Emby.Server.Implementations.Channels
             where T : BaseItem, new()
         {
             var id = _libraryManager.GetNewItemId(GetIdToHash(idString, channelName), typeof(T));
- 
+
             T item = null;
 
             try
@@ -1187,7 +1182,7 @@ namespace Emby.Server.Implementations.Channels
         {
             if (channel == null)
             {
-                throw new ArgumentNullException("channel");
+                throw new ArgumentNullException(nameof(channel));
             }
 
             var result = GetAllChannels()

+ 9 - 30
Emby.Server.Implementations/Channels/RefreshChannelsScheduledTask.cs

@@ -25,35 +25,17 @@ namespace Emby.Server.Implementations.Channels
             _libraryManager = libraryManager;
         }
 
-        public string Name
-        {
-            get { return "Refresh Channels"; }
-        }
+        public string Name => "Refresh Channels";
 
-        public string Description
-        {
-            get { return "Refreshes internet channel information."; }
-        }
+        public string Description => "Refreshes internet channel information.";
 
-        public string Category
-        {
-            get { return "Internet Channels"; }
-        }
+        public string Category => "Internet Channels";
 
-        public bool IsHidden
-        {
-            get { return ((ChannelManager)_channelManager).Channels.Length == 0; }
-        }
+        public bool IsHidden => ((ChannelManager)_channelManager).Channels.Length == 0;
 
-        public bool IsEnabled
-        {
-            get { return true; }
-        }
+        public bool IsEnabled => true;
 
-        public bool IsLogged
-        {
-            get { return true; }
-        }
+        public bool IsLogged => true;
 
         public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
         {
@@ -70,16 +52,13 @@ namespace Emby.Server.Implementations.Channels
         /// </summary>
         public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
         {
-            return new[] { 
-            
+            return new[] {
+
                 // Every so often
                 new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks}
             };
         }
 
-        public string Key
-        {
-            get { return "RefreshInternetChannels"; }
-        }
+        public string Key => "RefreshInternetChannels";
     }
 }

+ 3 - 12
Emby.Server.Implementations/Configuration/ServerConfigurationManager.cs

@@ -38,28 +38,19 @@ namespace Emby.Server.Implementations.Configuration
         /// Gets the type of the configuration.
         /// </summary>
         /// <value>The type of the configuration.</value>
-        protected override Type ConfigurationType
-        {
-            get { return typeof(ServerConfiguration); }
-        }
+        protected override Type ConfigurationType => typeof(ServerConfiguration);
 
         /// <summary>
         /// Gets the application paths.
         /// </summary>
         /// <value>The application paths.</value>
-        public IServerApplicationPaths ApplicationPaths
-        {
-            get { return (IServerApplicationPaths)CommonApplicationPaths; }
-        }
+        public IServerApplicationPaths ApplicationPaths => (IServerApplicationPaths)CommonApplicationPaths;
 
         /// <summary>
         /// Gets the configuration.
         /// </summary>
         /// <value>The configuration.</value>
-        public ServerConfiguration Configuration
-        {
-            get { return (ServerConfiguration)CommonConfiguration; }
-        }
+        public ServerConfiguration Configuration => (ServerConfiguration)CommonConfiguration;
 
         /// <summary>
         /// Called when [configuration updated].

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików