aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/Books/BookMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs6
-rw-r--r--MediaBrowser.Providers/Channels/ChannelMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Folders/FolderMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Folders/UserViewMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/GameGenres/GameGenreImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Games/GameMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Games/GameSystemMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Genres/GenreImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/Genres/GenreMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/ImagesByName/ImageUtils.cs27
-rw-r--r--MediaBrowser.Providers/LiveTv/AudioRecordingService.cs4
-rw-r--r--MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/LiveTv/VideoRecordingService.cs4
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs22
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs14
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs45
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj52
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.nuget.targets6
-rw-r--r--MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs6
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs27
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs8
-rw-r--r--MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs13
-rw-r--r--MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs4
-rw-r--r--MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs4
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs6
-rw-r--r--MediaBrowser.Providers/Movies/MovieMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Music/ArtistMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs6
-rw-r--r--MediaBrowser.Providers/Music/AudioDbArtistProvider.cs6
-rw-r--r--MediaBrowser.Providers/Music/AudioMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Music/FanArtAlbumProvider.cs6
-rw-r--r--MediaBrowser.Providers/Music/FanArtArtistProvider.cs8
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs341
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs200
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbImageProvider.cs4
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs4
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbProvider.cs8
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs8
-rw-r--r--MediaBrowser.Providers/People/PersonMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/People/TvdbPersonImageProvider.cs67
-rw-r--r--MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Photos/PhotoHelper.cs98
-rw-r--r--MediaBrowser.Providers/Photos/PhotoMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Photos/PhotoProvider.cs169
-rw-r--r--MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Studios/StudioMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Studios/StudiosImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/Subtitles/ConfigurationExtension.cs29
-rw-r--r--MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs340
-rw-r--r--MediaBrowser.Providers/Subtitles/SubtitleManager.cs6
-rw-r--r--MediaBrowser.Providers/TV/DummySeasonProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/EpisodeMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/TV/FanArt/FanArtSeasonProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs8
-rw-r--r--MediaBrowser.Providers/TV/MissingEpisodeProvider.cs95
-rw-r--r--MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/SeasonMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/TV/SeriesMetadataService.cs6
-rw-r--r--MediaBrowser.Providers/TV/SeriesPostScanTask.cs232
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs1201
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs35
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs66
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs64
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs510
-rw-r--r--MediaBrowser.Providers/Users/UserMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Videos/VideoMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/Years/YearMetadataService.cs4
-rw-r--r--MediaBrowser.Providers/packages.config6
-rw-r--r--MediaBrowser.Providers/project.json17
-rw-r--r--MediaBrowser.Providers/project.lock.json3965
89 files changed, 5764 insertions, 2203 deletions
diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs
index 6f4a744c29..ccc69eb626 100644
--- a/MediaBrowser.Providers/Books/BookMetadataService.cs
+++ b/MediaBrowser.Providers/Books/BookMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Books
{
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
index 2dacb16ca1..a625b93b80 100644
--- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
+++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
@@ -9,7 +9,9 @@ using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.BoxSets
{
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
index ab05c959e8..cd0e9fb28c 100644
--- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
+++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
@@ -3,7 +3,6 @@ using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -17,7 +16,10 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.BoxSets
{
diff --git a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
index 22e196d72c..c2a6c07f99 100644
--- a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Channels
{
diff --git a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs
index 2f534c12e5..c6013a94df 100644
--- a/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/CollectionFolderMetadataService.cs
@@ -1,8 +1,10 @@
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Collections;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
index 8c4737fc4a..94125b29db 100644
--- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Folders
{
diff --git a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
index b8f58307a4..b1410bfd9a 100644
--- a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Folders
{
diff --git a/MediaBrowser.Providers/GameGenres/GameGenreImageProvider.cs b/MediaBrowser.Providers/GameGenres/GameGenreImageProvider.cs
index b26f237151..8c235a1d67 100644
--- a/MediaBrowser.Providers/GameGenres/GameGenreImageProvider.cs
+++ b/MediaBrowser.Providers/GameGenres/GameGenreImageProvider.cs
@@ -11,7 +11,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.GameGenres
{
@@ -88,7 +90,7 @@ namespace MediaBrowser.Providers.GameGenres
private RemoteImageInfo GetImage(IHasImages item, string filename, ImageType type, string remoteFilename)
{
- var list = ImageUtils.GetAvailableImages(filename);
+ var list = ImageUtils.GetAvailableImages(filename, _fileSystem);
var match = ImageUtils.FindMatch(item, list);
diff --git a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
index fb2244e327..180d36378e 100644
--- a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
+++ b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.GameGenres
{
diff --git a/MediaBrowser.Providers/Games/GameMetadataService.cs b/MediaBrowser.Providers/Games/GameMetadataService.cs
index a44f1d95f8..d6f61fa94f 100644
--- a/MediaBrowser.Providers/Games/GameMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Games
{
diff --git a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
index 6cf2a45a47..5794e8c9b6 100644
--- a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Games
{
diff --git a/MediaBrowser.Providers/Genres/GenreImageProvider.cs b/MediaBrowser.Providers/Genres/GenreImageProvider.cs
index 954cd008e3..37f2b8ba0c 100644
--- a/MediaBrowser.Providers/Genres/GenreImageProvider.cs
+++ b/MediaBrowser.Providers/Genres/GenreImageProvider.cs
@@ -10,7 +10,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Genres
{
@@ -87,7 +89,7 @@ namespace MediaBrowser.Providers.Genres
private RemoteImageInfo GetImage(IHasImages item, string filename, ImageType type, string remoteFilename)
{
- var list = ImageUtils.GetAvailableImages(filename);
+ var list = ImageUtils.GetAvailableImages(filename, _fileSystem);
var match = ImageUtils.FindMatch(item, list);
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
index d4ea3e9cf8..39f9354dba 100644
--- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Genres
{
diff --git a/MediaBrowser.Providers/ImagesByName/ImageUtils.cs b/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
index b53348749f..bbcbbda905 100644
--- a/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
+++ b/MediaBrowser.Providers/ImagesByName/ImageUtils.cs
@@ -6,7 +6,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.ImagesByName
{
@@ -68,23 +70,26 @@ namespace MediaBrowser.Providers.ImagesByName
.Replace("/", string.Empty);
}
- public static IEnumerable<string> GetAvailableImages(string file)
+ public static IEnumerable<string> GetAvailableImages(string file, IFileSystem fileSystem)
{
- using (var reader = new StreamReader(file))
+ using (var fileStream = fileSystem.GetFileStream(file, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- var lines = new List<string>();
-
- while (!reader.EndOfStream)
+ using (var reader = new StreamReader(fileStream))
{
- var text = reader.ReadLine();
+ var lines = new List<string>();
- if (!string.IsNullOrWhiteSpace(text))
+ while (!reader.EndOfStream)
{
- lines.Add(text);
+ var text = reader.ReadLine();
+
+ if (!string.IsNullOrWhiteSpace(text))
+ {
+ lines.Add(text);
+ }
}
- }
- return lines;
+ return lines;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
index 1d99a678ba..df4a03cdb2 100644
--- a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.LiveTv
{
diff --git a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
index 8abb996895..7b5065986d 100644
--- a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.LiveTv
{
diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
index b73d82c19d..eaacc41fa2 100644
--- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.LiveTv
{
diff --git a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
index 15530f8f99..a8df3c88be 100644
--- a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.LiveTv
{
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 3b7e24e3a5..d4bfad1742 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -16,7 +16,8 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Manager
@@ -173,14 +174,14 @@ namespace MediaBrowser.Providers.Manager
try
{
- var currentFile = new FileInfo(currentPath);
+ var currentFile = _fileSystem.GetFileInfo(currentPath);
// This will fail if the file is hidden
if (currentFile.Exists)
{
- if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (currentFile.IsHidden)
{
- currentFile.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(currentFile.FullName, false);
}
_fileSystem.DeleteFile(currentFile.FullName);
@@ -255,18 +256,18 @@ namespace MediaBrowser.Providers.Manager
_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
// If the file is currently hidden we'll have to remove that or the save will fail
- var file = new FileInfo(path);
+ var file = _fileSystem.GetFileInfo(path);
// This will fail if the file is hidden
if (file.Exists)
{
- if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (file.IsHidden)
{
- file.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(file.FullName, false);
}
}
- using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken)
.ConfigureAwait(false);
@@ -274,10 +275,7 @@ namespace MediaBrowser.Providers.Manager
if (_config.Configuration.SaveMetadataHidden)
{
- file.Refresh();
-
- // Add back the attribute
- file.Attributes |= FileAttributes.Hidden;
+ _fileSystem.SetHidden(file.FullName, true);
}
}
finally
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 898fa522df..e9a675b0a8 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -15,8 +15,10 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.MediaInfo;
@@ -154,7 +156,7 @@ namespace MediaBrowser.Providers.Manager
{
var mimeType = MimeTypes.GetMimeType(response.Path);
- var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, true);
+ var stream = _fileSystem.GetFileStream(response.Path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true);
await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
}
@@ -370,14 +372,14 @@ namespace MediaBrowser.Providers.Manager
}
// Delete the source file
- var currentFile = new FileInfo(image.Path);
+ var currentFile = _fileSystem.GetFileInfo(image.Path);
// Deletion will fail if the file is hidden so remove the attribute first
if (currentFile.Exists)
{
- if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ if (currentFile.IsHidden)
{
- currentFile.Attributes &= ~FileAttributes.Hidden;
+ _fileSystem.SetHidden(currentFile.FullName, false);
}
_fileSystem.DeleteFile(currentFile.FullName);
@@ -611,7 +613,7 @@ namespace MediaBrowser.Providers.Manager
{
try
{
- if (item.GetImages(imageType).Any(i => new FileInfo(i.Path).Length == response.ContentLength.Value))
+ if (item.GetImages(imageType).Any(i => _fileSystem.GetFileInfo(i.Path).Length == response.ContentLength.Value))
{
response.Content.Dispose();
continue;
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 41cacbe0a8..e0570ffc46 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -10,7 +10,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Providers;
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 43598e29d8..ba4b624e3c 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -19,8 +19,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
@@ -148,7 +149,7 @@ namespace MediaBrowser.Providers.Manager
throw new ArgumentNullException("source");
}
- var fileStream = _fileSystem.GetFileStream(source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, true);
+ var fileStream = _fileSystem.GetFileStream(source, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, true);
return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger, _memoryStreamProvider).SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken);
}
@@ -862,8 +863,8 @@ namespace MediaBrowser.Providers.Manager
private readonly ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>> _refreshQueue =
new ConcurrentQueue<Tuple<Guid, MetadataRefreshOptions>>();
- private readonly object _refreshTimerLock = new object();
- private Timer _refreshTimer;
+ private readonly object _refreshQueueLock = new object();
+ private bool _isProcessingRefreshQueue;
public void QueueRefresh(Guid id, MetadataRefreshOptions options)
{
@@ -873,38 +874,18 @@ namespace MediaBrowser.Providers.Manager
}
_refreshQueue.Enqueue(new Tuple<Guid, MetadataRefreshOptions>(id, options));
- StartRefreshTimer();
- }
- private void StartRefreshTimer()
- {
- if (_disposed)
+ lock (_refreshQueueLock)
{
- return;
- }
-
- lock (_refreshTimerLock)
- {
- if (_refreshTimer == null)
+ if (!_isProcessingRefreshQueue)
{
- _refreshTimer = new Timer(RefreshTimerCallback, null, 100, Timeout.Infinite);
+ _isProcessingRefreshQueue = true;
+ Task.Run(() => StartProcessingRefreshQueue());
}
}
}
- private void StopRefreshTimer()
- {
- lock (_refreshTimerLock)
- {
- if (_refreshTimer != null)
- {
- _refreshTimer.Dispose();
- _refreshTimer = null;
- }
- }
- }
-
- private async void RefreshTimerCallback(object state)
+ private async Task StartProcessingRefreshQueue()
{
Tuple<Guid, MetadataRefreshOptions> refreshItem;
var libraryManager = _libraryManagerFactory();
@@ -938,7 +919,10 @@ namespace MediaBrowser.Providers.Manager
}
}
- StopRefreshTimer();
+ lock (_refreshQueueLock)
+ {
+ _isProcessingRefreshQueue = false;
+ }
}
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken)
@@ -1017,7 +1001,6 @@ namespace MediaBrowser.Providers.Manager
public void Dispose()
{
_disposed = true;
- StopRefreshTimer();
}
}
} \ No newline at end of file
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 5612db7ea6..5d3749111a 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -13,8 +13,9 @@
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<ProductVersion>10.0.0</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
- <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
- <TargetFrameworkProfile />
+ <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -42,35 +43,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
- <Reference Include="BDInfo, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\MediaBrowser.BdInfo.1.0.1\lib\portable-net46+win10\BDInfo.dll</HintPath>
- <Private>True</Private>
- </Reference>
- <Reference Include="CommonIO, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\CommonIO.1.0.0.9\lib\net45\CommonIO.dll</HintPath>
- </Reference>
- <Reference Include="DvdLib, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\MediaBrowser.BdInfo.1.0.1\lib\portable-net46+win10\DvdLib.dll</HintPath>
- <Private>True</Private>
- </Reference>
- <Reference Include="Patterns.Logging">
- <HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Net" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- <Reference Include="taglib-sharp, Version=2.1.0.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\ThirdParty\taglib\taglib-sharp.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
<Compile Include="..\SharedVersion.cs">
<Link>Properties\SharedVersion.cs</Link>
</Compile>
@@ -141,16 +113,12 @@
<Compile Include="People\PersonMetadataService.cs" />
<Compile Include="People\MovieDbPersonProvider.cs" />
<Compile Include="Photos\PhotoAlbumMetadataService.cs" />
- <Compile Include="Photos\PhotoHelper.cs" />
<Compile Include="Photos\PhotoMetadataService.cs" />
- <Compile Include="Photos\PhotoProvider.cs" />
<Compile Include="Playlists\PlaylistMetadataService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Manager\ProviderUtils.cs" />
<Compile Include="Studios\StudiosImageProvider.cs" />
<Compile Include="Studios\StudioMetadataService.cs" />
- <Compile Include="Subtitles\ConfigurationExtension.cs" />
- <Compile Include="Subtitles\OpenSubtitleDownloader.cs" />
<Compile Include="Subtitles\SubtitleManager.cs" />
<Compile Include="TV\DummySeasonProvider.cs" />
<Compile Include="TV\EpisodeMetadataService.cs" />
@@ -172,7 +140,6 @@
<Compile Include="TV\SeasonMetadataService.cs" />
<Compile Include="TV\TheTVDB\TvdbEpisodeProvider.cs" />
<Compile Include="TV\TheTVDB\TvdbSeriesProvider.cs" />
- <Compile Include="TV\SeriesPostScanTask.cs" />
<Compile Include="TV\TheTVDB\TvdbPrescanTask.cs" />
<Compile Include="TV\TvExternalIds.cs" />
<Compile Include="Users\UserMetadataService.cs" />
@@ -180,6 +147,10 @@
<Compile Include="Years\YearMetadataService.cs" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\DvdLib\DvdLib.csproj">
+ <Project>{713f42b5-878e-499d-a878-e4c652b1d5e8}</Project>
+ <Name>DvdLib</Name>
+ </ProjectReference>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142EEFA-7570-41E1-BFCC-468BB571AF2F}</Project>
<Name>MediaBrowser.Common</Name>
@@ -192,16 +163,9 @@
<Project>{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}</Project>
<Name>MediaBrowser.Model</Name>
</ProjectReference>
- <ProjectReference Include="..\OpenSubtitlesHandler\OpenSubtitlesHandler.csproj">
- <Project>{4a4402d4-e910-443b-b8fc-2c18286a2ca0}</Project>
- <Name>OpenSubtitlesHandler</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="packages.config" />
</ItemGroup>
<ItemGroup />
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.nuget.targets b/MediaBrowser.Providers/MediaBrowser.Providers.nuget.targets
new file mode 100644
index 0000000000..e69ce0e64f
--- /dev/null
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.nuget.targets
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Target Name="EmitMSBuildWarning" BeforeTargets="Build">
+ <Warning Text="Packages containing MSBuild targets and props files cannot be fully installed in projects targeting multiple frameworks. The MSBuild targets and props files have been ignored." />
+ </Target>
+</Project> \ No newline at end of file
diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
index 68fc803711..fee11d989c 100644
--- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
@@ -12,7 +12,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.MediaInfo
{
@@ -85,11 +87,11 @@ namespace MediaBrowser.Providers.MediaInfo
var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
- File.Copy(tempFile, path, true);
+ _fileSystem.CopyFile(tempFile, path, true);
try
{
- File.Delete(tempFile);
+ _fileSystem.DeleteFile(tempFile);
}
catch
{
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
index d255110fb7..eaffc12d78 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
@@ -7,7 +7,6 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers;
@@ -21,7 +20,10 @@ using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.MediaInfo
{
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
index be0b2ca6d7..45fcbc251e 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
@@ -7,7 +7,6 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers;
@@ -26,7 +25,10 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.MediaInfo
{
@@ -132,23 +134,6 @@ namespace MediaBrowser.Providers.MediaInfo
{
cancellationToken.ThrowIfCancellationRequested();
- //var idString = item.Id.ToString("N");
- //var cachePath = Path.Combine(_appPaths.CachePath,
- // "ffprobe-video",
- // idString.Substring(0, 2), idString, "v" + SchemaVersion + _mediaEncoder.Version + item.DateModified.Ticks.ToString(_usCulture) + ".json");
-
- try
- {
- //return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
- }
- catch (FileNotFoundException)
- {
-
- }
- catch (DirectoryNotFoundException)
- {
- }
-
var protocol = item.LocationType == LocationType.Remote
? MediaProtocol.Http
: MediaProtocol.File;
@@ -605,7 +590,7 @@ namespace MediaBrowser.Providers.MediaInfo
private void FetchFromDvdLib(Video item, IIsoMount mount)
{
var path = mount == null ? item.Path : mount.MountedPath;
- var dvd = new Dvd(path);
+ var dvd = new Dvd(path, _fileSystem);
var primaryTitle = dvd.Titles.OrderByDescending(GetRuntime).FirstOrDefault();
@@ -653,7 +638,7 @@ namespace MediaBrowser.Providers.MediaInfo
/// <returns>System.Nullable{IsoType}.</returns>
private IsoType? DetermineIsoType(IIsoMount isoMount)
{
- var fileSystemEntries = Directory.EnumerateFileSystemEntries(isoMount.MountedPath).Select(Path.GetFileName).ToList();
+ var fileSystemEntries = _fileSystem.GetFileSystemEntryPaths(isoMount.MountedPath).Select(Path.GetFileName).ToList();
if (fileSystemEntries.Contains("video_ts", StringComparer.OrdinalIgnoreCase) ||
fileSystemEntries.Contains("VIDEO_TS.IFO", StringComparer.OrdinalIgnoreCase))
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs b/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs
index 024171f40d..e4becec560 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs
@@ -1,13 +1,15 @@
using MediaBrowser.Model.Extensions;
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.MediaInfo
{
@@ -136,7 +138,7 @@ namespace MediaBrowser.Providers.MediaInfo
return files.Where(i =>
{
- if (!i.Attributes.HasFlag(FileAttributes.Directory) &&
+ if (!i.IsDirectory &&
SubtitleExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase))
{
var fileNameWithoutExtension = fileSystem.GetFileNameWithoutExtension(i);
diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
index eaaab22fdb..e34df6b622 100644
--- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
+++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs
@@ -88,10 +88,16 @@ namespace MediaBrowser.Providers.MediaInfo
}).OfType<Video>()
.ToList();
+ if (videos.Count == 0)
+ {
+ return;
+ }
+
var failHistoryPath = Path.Combine(_config.ApplicationPaths.CachePath, "subtitlehistory.json");
var history = GetHistory(failHistoryPath);
var numComplete = 0;
+ var hasChanges = false;
foreach (var video in videos)
{
@@ -123,6 +129,8 @@ namespace MediaBrowser.Providers.MediaInfo
history[video.Id.ToString("N")] = DateTime.UtcNow;
}
+ hasChanges = true;
+
// Update progress
numComplete++;
double percent = numComplete;
@@ -131,7 +139,10 @@ namespace MediaBrowser.Providers.MediaInfo
progress.Report(100 * percent);
}
- _json.SerializeToFile(history, failHistoryPath);
+ if (hasChanges)
+ {
+ _json.SerializeToFile(history, failHistoryPath);
+ }
}
private Dictionary<string,DateTime> GetHistory(string path)
diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
index 45d1c3d80f..5da18ac602 100644
--- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
@@ -13,7 +13,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.MediaInfo
{
diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
index 2a40e4d85e..cde7eda2f4 100644
--- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
@@ -19,7 +19,9 @@ using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Providers.TV;
@@ -116,7 +118,7 @@ namespace MediaBrowser.Providers.Movies
{
// No biggie. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No biggie. Don't blow up
}
@@ -288,7 +290,7 @@ namespace MediaBrowser.Providers.Movies
}).ConfigureAwait(false))
{
- using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await response.CopyToAsync(fileStream).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index 82a2dfbe94..8bff022062 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -13,7 +13,9 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Extensions;
namespace MediaBrowser.Providers.Movies
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
index 49f341f26f..f2e544d0a1 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
@@ -14,6 +14,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Movies
{
@@ -21,11 +22,13 @@ namespace MediaBrowser.Providers.Movies
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
- public MovieDbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ public MovieDbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
+ _fileSystem = fileSystem;
}
public string Name
@@ -196,7 +199,7 @@ namespace MediaBrowser.Providers.Movies
if (!string.IsNullOrEmpty(path))
{
- var fileInfo = new FileInfo(path);
+ var fileInfo = _fileSystem.GetFileInfo(path);
if (fileInfo.Exists)
{
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index b0d119ff98..d42c8fa983 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -4,7 +4,6 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -17,8 +16,11 @@ using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.Net;
namespace MediaBrowser.Providers.Movies
diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
index 83be9ca6f9..2187d6df13 100644
--- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
@@ -6,8 +6,10 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.IO;
namespace MediaBrowser.Providers.Movies
{
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
index 4f87b2036b..e5dbba9022 100644
--- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
@@ -9,7 +9,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
index b2f975b131..1bd427ac9c 100644
--- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs
+++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
@@ -9,7 +9,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
diff --git a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs
index 5963e90e2e..2e4c753758 100644
--- a/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs
@@ -13,7 +13,9 @@ using System.Globalization;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
@@ -167,7 +169,7 @@ namespace MediaBrowser.Providers.Music
}).ConfigureAwait(false))
{
- using (var xmlFileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await response.CopyToAsync(xmlFileStream).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
index 8bcb012282..ae198a4188 100644
--- a/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
@@ -12,7 +12,9 @@ using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
@@ -156,7 +158,7 @@ namespace MediaBrowser.Providers.Music
{
_fileSystem.CreateDirectory(Path.GetDirectoryName(path));
- using (var xmlFileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await response.CopyToAsync(xmlFileStream).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs
index 67ddd89812..faa8bb3ad7 100644
--- a/MediaBrowser.Providers/Music/AudioMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs
@@ -7,7 +7,9 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
using System.Linq;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
diff --git a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs
index 2f09d64af0..fe9707c9ef 100644
--- a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs
@@ -14,7 +14,9 @@ using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Providers.Music
@@ -92,7 +94,7 @@ namespace MediaBrowser.Providers.Music
{
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
}
diff --git a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs
index 6afa80507e..e21f9d35ba 100644
--- a/MediaBrowser.Providers/Music/FanArtArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/FanArtArtistProvider.cs
@@ -17,7 +17,9 @@ using System.Net;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Serialization;
@@ -96,7 +98,7 @@ namespace MediaBrowser.Providers.Music
{
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
}
@@ -259,7 +261,7 @@ namespace MediaBrowser.Providers.Music
}).ConfigureAwait(false))
{
- using (var saveFileStream = _fileSystem.GetFileStream(jsonPath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var saveFileStream = _fileSystem.GetFileStream(jsonPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await response.CopyToAsync(saveFileStream).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
index 9ed8f0a007..6bda0278c7 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
@@ -15,6 +15,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using MediaBrowser.Model.Serialization;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.Music
{
@@ -26,15 +27,17 @@ namespace MediaBrowser.Providers.Music
private readonly IApplicationHost _appHost;
private readonly ILogger _logger;
private readonly IJsonSerializer _json;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
public static string MusicBrainzBaseUrl = "https://www.musicbrainz.org";
- public MusicBrainzAlbumProvider(IHttpClient httpClient, IApplicationHost appHost, ILogger logger, IJsonSerializer json)
+ public MusicBrainzAlbumProvider(IHttpClient httpClient, IApplicationHost appHost, ILogger logger, IJsonSerializer json, IXmlReaderSettingsFactory xmlSettings)
{
_httpClient = httpClient;
_appHost = appHost;
_logger = logger;
_json = json;
+ _xmlSettings = xmlSettings;
Current = this;
}
@@ -71,35 +74,50 @@ namespace MediaBrowser.Providers.Music
if (!string.IsNullOrWhiteSpace(url))
{
- var doc = await GetMusicBrainzResponse(url, isNameSearch, cancellationToken).ConfigureAwait(false);
-
- return GetResultsFromResponse(doc);
+ using (var stream = await GetMusicBrainzResponse(url, isNameSearch, cancellationToken).ConfigureAwait(false))
+ {
+ return GetResultsFromResponse(stream);
+ }
}
return new List<RemoteSearchResult>();
}
- private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
+ private List<RemoteSearchResult> GetResultsFromResponse(Stream stream)
{
- return ReleaseResult.Parse(doc).Select(i =>
+ using (var oReader = new StreamReader(stream, Encoding.UTF8))
{
- var result = new RemoteSearchResult
- {
- Name = i.Title,
- ProductionYear = i.Year
- };
+ var settings = _xmlSettings.Create(false);
- if (!string.IsNullOrWhiteSpace(i.ReleaseId))
- {
- result.SetProviderId(MetadataProviders.MusicBrainzAlbum, i.ReleaseId);
- }
- if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId))
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ using (var reader = XmlReader.Create(oReader, settings))
{
- result.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, i.ReleaseGroupId);
- }
+ var results = ReleaseResult.Parse(reader);
- return result;
- });
+ return results.Select(i =>
+ {
+ var result = new RemoteSearchResult
+ {
+ Name = i.Title,
+ ProductionYear = i.Year
+ };
+
+ if (!string.IsNullOrWhiteSpace(i.ReleaseId))
+ {
+ result.SetProviderId(MetadataProviders.MusicBrainzAlbum, i.ReleaseId);
+ }
+ if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId))
+ {
+ result.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, i.ReleaseGroupId);
+ }
+
+ return result;
+ }).ToList();
+ }
+ }
}
public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo id, CancellationToken cancellationToken)
@@ -191,9 +209,22 @@ namespace MediaBrowser.Providers.Music
WebUtility.UrlEncode(albumName),
artistId);
- var doc = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
+ using (var stream = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false))
+ {
+ using (var oReader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- return ReleaseResult.Parse(doc, 1).FirstOrDefault();
+ using (var reader = XmlReader.Create(oReader, settings))
+ {
+ return ReleaseResult.Parse(reader).FirstOrDefault();
+ }
+ }
+ }
}
private async Task<ReleaseResult> GetReleaseResultByArtistName(string albumName, string artistName, CancellationToken cancellationToken)
@@ -202,9 +233,22 @@ namespace MediaBrowser.Providers.Music
WebUtility.UrlEncode(albumName),
WebUtility.UrlEncode(artistName));
- var doc = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
+ using (var stream = await GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false))
+ {
+ using (var oReader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- return ReleaseResult.Parse(doc, 1).FirstOrDefault();
+ using (var reader = XmlReader.Create(oReader, settings))
+ {
+ return ReleaseResult.Parse(reader).FirstOrDefault();
+ }
+ }
+ }
}
private class ReleaseResult
@@ -215,46 +259,32 @@ namespace MediaBrowser.Providers.Music
public string Overview;
public int? Year;
- public static List<ReleaseResult> Parse(XmlDocument doc, int? limit = null)
+ public static List<ReleaseResult> Parse(XmlReader reader)
{
- var docElem = doc.DocumentElement;
var list = new List<ReleaseResult>();
- if (docElem == null)
- {
- return list;
- }
-
- var releaseList = docElem.FirstChild;
- if (releaseList == null)
- {
- return list;
- }
-
- var nodes = releaseList.ChildNodes;
+ reader.MoveToContent();
- if (nodes != null)
+ // Loop through each element
+ while (reader.Read())
{
- foreach (var node in nodes.Cast<XmlNode>())
+ if (reader.NodeType == XmlNodeType.Element)
{
- if (string.Equals(node.Name, "release", StringComparison.OrdinalIgnoreCase))
+ switch (reader.Name)
{
- var releaseId = node.Attributes["id"].Value;
- var releaseGroupId = GetReleaseGroupIdFromReleaseNode(node);
-
- list.Add(new ReleaseResult
- {
- ReleaseId = releaseId,
- ReleaseGroupId = releaseGroupId,
- Title = GetValueFromReleaseNode(node, "title"),
- Overview = GetValueFromReleaseNode(node, "annotation"),
- Year = GetYearFromReleaseNode(node, "date")
- });
-
- if (limit.HasValue && list.Count >= limit.Value)
- {
- break;
- }
+ case "release-list":
+ {
+ using (var subReader = reader.ReadSubtree())
+ {
+ list.AddRange(ParseReleaseList(subReader));
+ }
+ break;
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
}
}
}
@@ -262,61 +292,107 @@ namespace MediaBrowser.Providers.Music
return list;
}
- private static int? GetYearFromReleaseNode(XmlNode node, string name)
+ private static List<ReleaseResult> ParseReleaseList(XmlReader reader)
{
- var subNodes = node.ChildNodes;
- if (subNodes != null)
+ var list = new List<ReleaseResult>();
+
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- foreach (var subNode in subNodes.Cast<XmlNode>())
+ if (reader.NodeType == XmlNodeType.Element)
{
- if (string.Equals(subNode.Name, name, StringComparison.OrdinalIgnoreCase))
+ switch (reader.Name)
{
- DateTime date;
- if (DateTime.TryParse(subNode.InnerText, out date))
- {
- return date.Year;
- }
-
- return null;
+ case "release":
+ {
+ var releaseId = reader.GetAttribute("id");
+
+ using (var subReader = reader.ReadSubtree())
+ {
+ var release = ParseRelease(subReader, releaseId);
+ if (release != null)
+ {
+ list.Add(release);
+ }
+ }
+ break;
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
}
}
}
- return null;
+ return list;
}
- private static string GetValueFromReleaseNode(XmlNode node, string name)
+ private static ReleaseResult ParseRelease(XmlReader reader, string releaseId)
{
- var subNodes = node.ChildNodes;
- if (subNodes != null)
+ var result = new ReleaseResult
{
- foreach (var subNode in subNodes.Cast<XmlNode>())
- {
- if (string.Equals(subNode.Name, name, StringComparison.OrdinalIgnoreCase))
- {
- return subNode.InnerText;
- }
- }
- }
+ ReleaseId = releaseId
+ };
- return null;
- }
+ reader.MoveToContent();
- private static string GetReleaseGroupIdFromReleaseNode(XmlNode node)
- {
- var subNodes = node.ChildNodes;
- if (subNodes != null)
+ reader.Read();
+
+ // http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator
+
+ // Loop through each element
+ while (!reader.EOF)
{
- foreach (var subNode in subNodes.Cast<XmlNode>())
+ if (reader.NodeType == XmlNodeType.Element)
{
- if (string.Equals(subNode.Name, "release-group", StringComparison.OrdinalIgnoreCase))
+ switch (reader.Name)
{
- return subNode.Attributes["id"].Value;
+ case "title":
+ {
+ result.Title = reader.ReadElementContentAsString();
+ break;
+ }
+ case "date":
+ {
+ var val = reader.ReadElementContentAsString();
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ result.Year = date.Year;
+ }
+ break;
+ }
+ case "annotation":
+ {
+ result.Overview = reader.ReadElementContentAsString();
+ break;
+ }
+ case "release-group":
+ {
+ result.ReleaseGroupId = reader.GetAttribute("id");
+ using (var subtree = reader.ReadSubtree())
+ {
+ }
+ break;
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
}
}
+ else
+ {
+ reader.Read();
+ }
}
- return null;
+ return result;
}
}
@@ -330,33 +406,72 @@ namespace MediaBrowser.Providers.Music
{
var url = string.Format("/ws/2/release-group/?query=reid:{0}", releaseEntryId);
- var doc = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false);
+ using (var stream = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false))
+ {
+ using (var oReader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var settings = _xmlSettings.Create(false);
- var docElem = doc.DocumentElement;
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- if (docElem == null)
- {
- return null;
- }
+ using (var reader = XmlReader.Create(oReader, settings))
+ {
+ reader.MoveToContent();
- var releaseList = docElem.FirstChild;
- if (releaseList == null)
- {
- return null;
+ // Loop through each element
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "release-group-list":
+ {
+ using (var subReader = reader.ReadSubtree())
+ {
+ return GetFirstReleaseGroupId(subReader);
+ }
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
+ return null;
+ }
+ }
}
+ }
- var nodes = releaseList.ChildNodes;
+ private string GetFirstReleaseGroupId(XmlReader reader)
+ {
+ reader.MoveToContent();
- if (nodes != null)
+ // Loop through each element
+ while (reader.Read())
{
- foreach (var node in nodes.Cast<XmlNode>())
+ if (reader.NodeType == XmlNodeType.Element)
{
- if (string.Equals(node.Name, "release-group", StringComparison.OrdinalIgnoreCase))
+ switch (reader.Name)
{
- return node.Attributes["id"].Value;
+ case "release-group":
+ {
+ return reader.GetAttribute("id");
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
}
}
}
+
return null;
}
@@ -432,7 +547,7 @@ namespace MediaBrowser.Providers.Music
/// <param name="isSearch">if set to <c>true</c> [is search].</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{XmlDocument}.</returns>
- internal async Task<XmlDocument> GetMusicBrainzResponse(string url, bool isSearch, CancellationToken cancellationToken)
+ internal async Task<Stream> GetMusicBrainzResponse(string url, bool isSearch, CancellationToken cancellationToken)
{
var urlInfo = await GetMbzUrl().ConfigureAwait(false);
@@ -444,8 +559,6 @@ namespace MediaBrowser.Providers.Music
url = urlInfo.url.TrimEnd('/') + url;
- var doc = new XmlDocument();
-
var options = new HttpRequestOptions
{
Url = url,
@@ -454,15 +567,7 @@ namespace MediaBrowser.Providers.Music
ResourcePool = _musicBrainzResourcePool
};
- using (var xml = await _httpClient.Get(options).ConfigureAwait(false))
- {
- using (var oReader = new StreamReader(xml, Encoding.UTF8))
- {
- doc.Load(oReader);
- }
- }
-
- return doc;
+ return await _httpClient.Get(options).ConfigureAwait(false);
}
public int Order
diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
index 88128bdc7a..d670c8de18 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
@@ -6,17 +6,27 @@ using MediaBrowser.Model.Providers;
using System;
using System.Collections.Generic;
using System.Globalization;
+using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
+using MediaBrowser.Controller.Extensions;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.Music
{
public class MusicBrainzArtistProvider : IRemoteMetadataProvider<MusicArtist, ArtistInfo>
{
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
+
+ public MusicBrainzArtistProvider(IXmlReaderSettingsFactory xmlSettings)
+ {
+ _xmlSettings = xmlSettings;
+ }
+
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken)
{
var musicBrainzId = searchInfo.GetMusicBrainzArtistId();
@@ -25,10 +35,11 @@ namespace MediaBrowser.Providers.Music
{
var url = string.Format("/ws/2/artist/?query=arid:{0}", musicBrainzId);
- var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken)
- .ConfigureAwait(false);
-
- return GetResultsFromResponse(doc);
+ using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken)
+ .ConfigureAwait(false))
+ {
+ return GetResultsFromResponse(stream);
+ }
}
else
{
@@ -37,13 +48,14 @@ namespace MediaBrowser.Providers.Music
var url = String.Format("/ws/2/artist/?query=artist:\"{0}\"", UrlEncode(nameToSearch));
- var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
-
- var results = GetResultsFromResponse(doc).ToList();
-
- if (results.Count > 0)
+ using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false))
{
- return results;
+ var results = GetResultsFromResponse(stream).ToList();
+
+ if (results.Count > 0)
+ {
+ return results;
+ }
}
if (HasDiacritics(searchInfo.Name))
@@ -51,73 +63,145 @@ namespace MediaBrowser.Providers.Music
// Try again using the search with accent characters url
url = String.Format("/ws/2/artist/?query=artistaccent:\"{0}\"", UrlEncode(nameToSearch));
- doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
-
- return GetResultsFromResponse(doc);
+ using (var stream = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false))
+ {
+ return GetResultsFromResponse(stream);
+ }
}
}
return new List<RemoteSearchResult>();
}
- private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
+ private IEnumerable<RemoteSearchResult> GetResultsFromResponse(Stream stream)
{
- var list = new List<RemoteSearchResult>();
+ using (var oReader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var settings = _xmlSettings.Create(false);
- var docElem = doc.DocumentElement;
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- if (docElem == null)
- {
- return list;
- }
+ using (var reader = XmlReader.Create(oReader, settings))
+ {
+ reader.MoveToContent();
- var artistList = docElem.FirstChild;
- if (artistList == null)
- {
- return list;
+ // Loop through each element
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "artist-list":
+ {
+ using (var subReader = reader.ReadSubtree())
+ {
+ return ParseArtistList(subReader);
+ }
+ }
+ default:
+ {
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
+
+ return new List<RemoteSearchResult>();
+ }
}
+ }
- var nodes = artistList.ChildNodes;
+ private IEnumerable<RemoteSearchResult> ParseArtistList(XmlReader reader)
+ {
+ var list = new List<RemoteSearchResult>();
- if (nodes != null)
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- foreach (var node in nodes.Cast<XmlNode>())
+ if (reader.NodeType == XmlNodeType.Element)
{
- if (node.Attributes != null)
+ switch (reader.Name)
{
- string name = null;
- string overview = null;
- string mbzId = node.Attributes["id"].Value;
-
- foreach (var child in node.ChildNodes.Cast<XmlNode>())
- {
- if (string.Equals(child.Name, "name", StringComparison.OrdinalIgnoreCase))
+ case "artist":
{
- name = child.InnerText;
+ var mbzId = reader.GetAttribute("id");
+
+ using (var subReader = reader.ReadSubtree())
+ {
+ var artist = ParseArtist(subReader, mbzId);
+ if (artist != null)
+ {
+ list.Add(artist);
+ }
+ }
+ break;
}
- if (string.Equals(child.Name, "annotation", StringComparison.OrdinalIgnoreCase))
+ default:
{
- overview = child.InnerText;
+ reader.Skip();
+ break;
}
- }
+ }
+ }
+ }
- if (!string.IsNullOrWhiteSpace(mbzId) && !string.IsNullOrWhiteSpace(name))
- {
- var result = new RemoteSearchResult
- {
- Name = name,
- Overview = overview
- };
+ return list;
+ }
- result.SetProviderId(MetadataProviders.MusicBrainzArtist, mbzId);
+ private RemoteSearchResult ParseArtist(XmlReader reader, string artistId)
+ {
+ var result = new RemoteSearchResult();
- list.Add(result);
- }
+ reader.MoveToContent();
+ reader.Read();
+
+ // http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator
+
+ // Loop through each element
+ while (!reader.EOF)
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "name":
+ {
+ result.Name = reader.ReadElementContentAsString();
+ break;
+ }
+ case "annotation":
+ {
+ result.Overview = reader.ReadElementContentAsString();
+ break;
+ }
+ default:
+ {
+ // there is sort-name if ever needed
+ reader.Skip();
+ break;
+ }
}
}
+ else
+ {
+ reader.Read();
+ }
}
- return list;
+ result.SetProviderId(MetadataProviders.MusicBrainzArtist, artistId);
+
+ if (string.IsNullOrWhiteSpace(artistId) || string.IsNullOrWhiteSpace(result.Name))
+ {
+ return null;
+ }
+
+ return result;
}
public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo id, CancellationToken cancellationToken)
@@ -159,21 +243,7 @@ namespace MediaBrowser.Providers.Music
/// <returns><c>true</c> if the specified text has diacritics; otherwise, <c>false</c>.</returns>
private bool HasDiacritics(string text)
{
- return !String.Equals(text, RemoveDiacritics(text), StringComparison.Ordinal);
- }
-
- /// <summary>
- /// Removes the diacritics.
- /// </summary>
- /// <param name="text">The text.</param>
- /// <returns>System.String.</returns>
- private string RemoveDiacritics(string text)
- {
- return String.Concat(
- text.Normalize(NormalizationForm.FormD)
- .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) !=
- UnicodeCategory.NonSpacingMark)
- ).Normalize(NormalizationForm.FormC);
+ return !String.Equals(text, text.RemoveDiacritics(), StringComparison.Ordinal);
}
/// <summary>
diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
index a50c077212..f46b6b128b 100644
--- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
@@ -7,7 +7,9 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
using System.Linq;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Music
{
diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
index d7b96271b7..f1ffd09db7 100644
--- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
+++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.MusicGenres
{
diff --git a/MediaBrowser.Providers/Omdb/OmdbImageProvider.cs b/MediaBrowser.Providers/Omdb/OmdbImageProvider.cs
index 90d172bc2c..86bce2d98d 100644
--- a/MediaBrowser.Providers/Omdb/OmdbImageProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbImageProvider.cs
@@ -1,4 +1,4 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
@@ -12,6 +12,8 @@ using MediaBrowser.Model.Serialization;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
namespace MediaBrowser.Providers.Omdb
{
diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
index 428bde2f28..28f9be1f2f 100644
--- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
@@ -1,4 +1,4 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
@@ -18,6 +18,8 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
namespace MediaBrowser.Providers.Omdb
{
diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs
index 9c7a16fab8..31336ca097 100644
--- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs
@@ -1,4 +1,4 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
@@ -14,6 +14,8 @@ using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
namespace MediaBrowser.Providers.Omdb
{
@@ -223,7 +225,7 @@ namespace MediaBrowser.Providers.Omdb
string resultString;
- using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 131072))
+ using (Stream stream = _fileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
using (var reader = new StreamReader(stream, new UTF8Encoding(false)))
{
@@ -242,7 +244,7 @@ namespace MediaBrowser.Providers.Omdb
string resultString;
- using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 131072))
+ using (Stream stream = _fileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
using (var reader = new StreamReader(stream, new UTF8Encoding(false)))
{
diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
index c954e6323a..caf9d58825 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
@@ -16,7 +16,9 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Net;
@@ -80,7 +82,7 @@ namespace MediaBrowser.Providers.People
};
result.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
- result.SetProviderId(MetadataProviders.Imdb, info.imdb_id.ToString(_usCulture));
+ result.SetProviderId(MetadataProviders.Imdb, info.imdb_id);
return new[] { result };
}
@@ -250,7 +252,7 @@ namespace MediaBrowser.Providers.People
{
_fileSystem.CreateDirectory(Path.GetDirectoryName(dataFilePath));
- using (var fs = _fileSystem.GetFileStream(dataFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fs = _fileSystem.GetFileStream(dataFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await json.CopyToAsync(fs).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs
index 0f8bd8b662..a306212ffd 100644
--- a/MediaBrowser.Providers/People/PersonMetadataService.cs
+++ b/MediaBrowser.Providers/People/PersonMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.People
{
diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
index 2d4d484e60..944078fc58 100644
--- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
+++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs
@@ -15,6 +15,8 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.People
{
@@ -23,12 +25,16 @@ namespace MediaBrowser.Providers.People
private readonly IServerConfigurationManager _config;
private readonly ILibraryManager _libraryManager;
private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
- public TvdbPersonImageProvider(IServerConfigurationManager config, ILibraryManager libraryManager, IHttpClient httpClient)
+ public TvdbPersonImageProvider(IServerConfigurationManager config, ILibraryManager libraryManager, IHttpClient httpClient, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlSettings)
{
_config = config;
_libraryManager = libraryManager;
_httpClient = httpClient;
+ _fileSystem = fileSystem;
+ _xmlSettings = xmlSettings;
}
public string Name
@@ -89,7 +95,7 @@ namespace MediaBrowser.Providers.People
{
return null;
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
return null;
}
@@ -97,46 +103,47 @@ namespace MediaBrowser.Providers.People
private RemoteImageInfo GetImageInfo(string xmlFile, string personName, CancellationToken cancellationToken)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
- using (var streamReader = new StreamReader(xmlFile, Encoding.UTF8))
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ using (var fileStream = _fileSystem.GetFileStream(xmlFile, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- cancellationToken.ThrowIfCancellationRequested();
+ reader.MoveToContent();
- if (reader.NodeType == XmlNodeType.Element)
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Actor":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Actor":
{
- var info = FetchImageInfoFromActorNode(personName, subtree);
-
- if (info != null)
+ using (var subtree = reader.ReadSubtree())
{
- return info;
+ var info = FetchImageInfoFromActorNode(personName, subtree);
+
+ if (info != null)
+ {
+ return info;
+ }
}
+ break;
}
+ default:
+ reader.Skip();
break;
- }
- default:
- reader.Skip();
- break;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
index 9bfff6b842..b64b2f24e2 100644
--- a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Photos
{
diff --git a/MediaBrowser.Providers/Photos/PhotoHelper.cs b/MediaBrowser.Providers/Photos/PhotoHelper.cs
deleted file mode 100644
index 2334c792e7..0000000000
--- a/MediaBrowser.Providers/Photos/PhotoHelper.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-using System.Text;
-
-namespace MediaBrowser.Providers.Photos
-{
- public static class PhotoHelper
- {
- public static string Dec2Frac(double dbl)
- {
- char neg = ' ';
- double dblDecimal = dbl;
- if (dblDecimal == (int)dblDecimal) return dblDecimal.ToString(); //return no if it's not a decimal
- if (dblDecimal < 0)
- {
- dblDecimal = Math.Abs(dblDecimal);
- neg = '-';
- }
- var whole = (int)Math.Truncate(dblDecimal);
- string decpart = dblDecimal.ToString().Replace(Math.Truncate(dblDecimal) + ".", "");
- double rN = Convert.ToDouble(decpart);
- double rD = Math.Pow(10, decpart.Length);
-
- string rd = Recur(decpart);
- int rel = Convert.ToInt32(rd);
- if (rel != 0)
- {
- rN = rel;
- rD = (int)Math.Pow(10, rd.Length) - 1;
- }
- //just a few prime factors for testing purposes
- var primes = new[] { 47, 43, 37, 31, 29, 23, 19, 17, 13, 11, 7, 5, 3, 2 };
- foreach (int i in primes) ReduceNo(i, ref rD, ref rN);
-
- rN = rN + (whole * rD);
- return string.Format("{0}{1}/{2}", neg, rN, rD);
- }
-
- /// <summary>
- /// Finds out the recurring decimal in a specified number
- /// </summary>
- /// <param name="db">Number to check</param>
- /// <returns></returns>
- private static string Recur(string db)
- {
- if (db.Length < 13) return "0";
- var sb = new StringBuilder();
- for (int i = 0; i < 7; i++)
- {
- sb.Append(db[i]);
- int dlength = (db.Length / sb.ToString().Length);
- int occur = Occurence(sb.ToString(), db);
- if (dlength == occur || dlength == occur - sb.ToString().Length)
- {
- return sb.ToString();
- }
- }
- return "0";
- }
-
- /// <summary>
- /// Checks for number of occurence of specified no in a number
- /// </summary>
- /// <param name="s">The no to check occurence times</param>
- /// <param name="check">The number where to check this</param>
- /// <returns></returns>
- private static int Occurence(string s, string check)
- {
- int i = 0;
- int d = s.Length;
- string ds = check;
- for (int n = (ds.Length / d); n > 0; n--)
- {
- if (ds.Contains(s))
- {
- i++;
- ds = ds.Remove(ds.IndexOf(s, System.StringComparison.Ordinal), d);
- }
- }
- return i;
- }
-
- /// <summary>
- /// Reduces a fraction given the numerator and denominator
- /// </summary>
- /// <param name="i">Number to use in an attempt to reduce fraction</param>
- /// <param name="rD">the Denominator</param>
- /// <param name="rN">the Numerator</param>
- private static void ReduceNo(int i, ref double rD, ref double rN)
- {
- //keep reducing until divisibility ends
- while ((rD % i) < 1e-10 && (rN % i) < 1e-10)
- {
- rN = rN / i;
- rD = rD / i;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
index fb6ff6f09d..617a510b89 100644
--- a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
+++ b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Photos
{
diff --git a/MediaBrowser.Providers/Photos/PhotoProvider.cs b/MediaBrowser.Providers/Photos/PhotoProvider.cs
deleted file mode 100644
index c48c3d09be..0000000000
--- a/MediaBrowser.Providers/Photos/PhotoProvider.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using TagLib;
-using TagLib.IFD;
-using TagLib.IFD.Entries;
-using TagLib.IFD.Tags;
-
-namespace MediaBrowser.Providers.Photos
-{
- public class PhotoProvider : ICustomMetadataProvider<Photo>, IHasItemChangeMonitor, IForcedProvider
- {
- private readonly ILogger _logger;
-
- public PhotoProvider(ILogger logger)
- {
- _logger = logger;
- }
-
- public Task<ItemUpdateType> FetchAsync(Photo item, MetadataRefreshOptions options, CancellationToken cancellationToken)
- {
- item.SetImagePath(ImageType.Primary, item.Path);
-
- // Examples: https://github.com/mono/taglib-sharp/blob/a5f6949a53d09ce63ee7495580d6802921a21f14/tests/fixtures/TagLib.Tests.Images/NullOrientationTest.cs
-
- try
- {
- using (var file = TagLib.File.Create(item.Path))
- {
- var image = file as TagLib.Image.File;
-
- var tag = file.GetTag(TagTypes.TiffIFD) as IFDTag;
-
- if (tag != null)
- {
- var structure = tag.Structure;
-
- if (structure != null)
- {
- var exif = structure.GetEntry(0, (ushort)IFDEntryTag.ExifIFD) as SubIFDEntry;
-
- if (exif != null)
- {
- var exifStructure = exif.Structure;
-
- if (exifStructure != null)
- {
- var entry = exifStructure.GetEntry(0, (ushort)ExifEntryTag.ApertureValue) as RationalIFDEntry;
-
- if (entry != null)
- {
- double val = entry.Value.Numerator;
- val /= entry.Value.Denominator;
- item.Aperture = val;
- }
-
- entry = exifStructure.GetEntry(0, (ushort)ExifEntryTag.ShutterSpeedValue) as RationalIFDEntry;
-
- if (entry != null)
- {
- double val = entry.Value.Numerator;
- val /= entry.Value.Denominator;
- item.ShutterSpeed = val;
- }
- }
- }
- }
- }
-
- item.CameraMake = image.ImageTag.Make;
- item.CameraModel = image.ImageTag.Model;
-
- item.Width = image.Properties.PhotoWidth;
- item.Height = image.Properties.PhotoHeight;
-
- var rating = image.ImageTag.Rating;
- if (rating.HasValue)
- {
- item.CommunityRating = rating;
- }
- else
- {
- item.CommunityRating = null;
- }
-
- item.Overview = image.ImageTag.Comment;
-
- if (!string.IsNullOrWhiteSpace(image.ImageTag.Title))
- {
- item.Name = image.ImageTag.Title;
- }
-
- var dateTaken = image.ImageTag.DateTime;
- if (dateTaken.HasValue)
- {
- item.DateCreated = dateTaken.Value;
- item.PremiereDate = dateTaken.Value;
- item.ProductionYear = dateTaken.Value.Year;
- }
-
- item.Genres = image.ImageTag.Genres.ToList();
- item.Tags = image.ImageTag.Keywords.ToList();
- item.Software = image.ImageTag.Software;
-
- if (image.ImageTag.Orientation == TagLib.Image.ImageOrientation.None)
- {
- item.Orientation = null;
- }
- else
- {
- Model.Drawing.ImageOrientation orientation;
- if (Enum.TryParse(image.ImageTag.Orientation.ToString(), true, out orientation))
- {
- item.Orientation = orientation;
- }
- }
-
- item.ExposureTime = image.ImageTag.ExposureTime;
- item.FocalLength = image.ImageTag.FocalLength;
-
- item.Latitude = image.ImageTag.Latitude;
- item.Longitude = image.ImageTag.Longitude;
- item.Altitude = image.ImageTag.Altitude;
-
- if (image.ImageTag.ISOSpeedRatings.HasValue)
- {
- item.IsoSpeedRating = Convert.ToInt32(image.ImageTag.ISOSpeedRatings.Value);
- }
- else
- {
- item.IsoSpeedRating = null;
- }
- }
- }
- catch (Exception e)
- {
- _logger.ErrorException("Image Provider - Error reading image tag for {0}", e, item.Path);
- }
-
- const ItemUpdateType result = ItemUpdateType.ImageUpdate | ItemUpdateType.MetadataImport;
- return Task.FromResult(result);
- }
-
- public string Name
- {
- get { return "Embedded Information"; }
- }
-
- public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
- {
- if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem)
- {
- var file = directoryService.GetFile(item.Path);
- if (file != null && file.LastWriteTimeUtc != item.DateModified)
- {
- return true;
- }
- }
-
- return false;
- }
- }
-}
diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
index d1d5ba7de4..cfdba0fb2f 100644
--- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
+++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Playlists
{
diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
index 9ee594a662..c773b78968 100644
--- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs
+++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Studios
{
diff --git a/MediaBrowser.Providers/Studios/StudiosImageProvider.cs b/MediaBrowser.Providers/Studios/StudiosImageProvider.cs
index bfb7eb8fdd..bf017d1481 100644
--- a/MediaBrowser.Providers/Studios/StudiosImageProvider.cs
+++ b/MediaBrowser.Providers/Studios/StudiosImageProvider.cs
@@ -11,7 +11,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Studios
{
@@ -88,7 +90,7 @@ namespace MediaBrowser.Providers.Studios
private RemoteImageInfo GetImage(IHasImages item, string filename, ImageType type, string remoteFilename)
{
- var list = ImageUtils.GetAvailableImages(filename);
+ var list = ImageUtils.GetAvailableImages(filename, _fileSystem);
var match = ImageUtils.FindMatch(item, list);
diff --git a/MediaBrowser.Providers/Subtitles/ConfigurationExtension.cs b/MediaBrowser.Providers/Subtitles/ConfigurationExtension.cs
deleted file mode 100644
index f520915d8b..0000000000
--- a/MediaBrowser.Providers/Subtitles/ConfigurationExtension.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Model.Providers;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Providers.Subtitles
-{
- public static class ConfigurationExtension
- {
- public static SubtitleOptions GetSubtitleConfiguration(this IConfigurationManager manager)
- {
- return manager.GetConfiguration<SubtitleOptions>("subtitles");
- }
- }
-
- public class SubtitleConfigurationFactory : IConfigurationFactory
- {
- public IEnumerable<ConfigurationStore> GetConfigurations()
- {
- return new List<ConfigurationStore>
- {
- new ConfigurationStore
- {
- Key = "subtitles",
- ConfigurationType = typeof (SubtitleOptions)
- }
- };
- }
- }
-}
diff --git a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs
deleted file mode 100644
index 271f8170fc..0000000000
--- a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs
+++ /dev/null
@@ -1,340 +0,0 @@
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Common.Extensions;
-using MediaBrowser.Common.Net;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Controller.Security;
-using MediaBrowser.Controller.Subtitles;
-using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Providers;
-using MediaBrowser.Model.Serialization;
-using OpenSubtitlesHandler;
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Providers.Subtitles
-{
- public class OpenSubtitleDownloader : ISubtitleProvider, IDisposable
- {
- private readonly ILogger _logger;
- private readonly IHttpClient _httpClient;
- private readonly CultureInfo _usCulture = new CultureInfo("en-US");
-
- private readonly IServerConfigurationManager _config;
- private readonly IEncryptionManager _encryption;
-
- private readonly IJsonSerializer _json;
-
- public OpenSubtitleDownloader(ILogManager logManager, IHttpClient httpClient, IServerConfigurationManager config, IEncryptionManager encryption, IJsonSerializer json)
- {
- _logger = logManager.GetLogger(GetType().Name);
- _httpClient = httpClient;
- _config = config;
- _encryption = encryption;
- _json = json;
-
- _config.NamedConfigurationUpdating += _config_NamedConfigurationUpdating;
-
- Utilities.HttpClient = httpClient;
- OpenSubtitles.SetUserAgent("mediabrowser.tv");
- }
-
- private const string PasswordHashPrefix = "h:";
- void _config_NamedConfigurationUpdating(object sender, ConfigurationUpdateEventArgs e)
- {
- if (!string.Equals(e.Key, "subtitles", StringComparison.OrdinalIgnoreCase))
- {
- return;
- }
-
- var options = (SubtitleOptions)e.NewConfiguration;
-
- if (options != null &&
- !string.IsNullOrWhiteSpace(options.OpenSubtitlesPasswordHash) &&
- !options.OpenSubtitlesPasswordHash.StartsWith(PasswordHashPrefix, StringComparison.OrdinalIgnoreCase))
- {
- options.OpenSubtitlesPasswordHash = EncryptPassword(options.OpenSubtitlesPasswordHash);
- }
- }
-
- private string EncryptPassword(string password)
- {
- return PasswordHashPrefix + _encryption.EncryptString(password);
- }
-
- private string DecryptPassword(string password)
- {
- if (password == null ||
- !password.StartsWith(PasswordHashPrefix, StringComparison.OrdinalIgnoreCase))
- {
- return string.Empty;
- }
-
- return _encryption.DecryptString(password.Substring(2));
- }
-
- public string Name
- {
- get { return "Open Subtitles"; }
- }
-
- private SubtitleOptions GetOptions()
- {
- return _config.GetSubtitleConfiguration();
- }
-
- public IEnumerable<VideoContentType> SupportedMediaTypes
- {
- get
- {
- var options = GetOptions();
-
- if (string.IsNullOrWhiteSpace(options.OpenSubtitlesUsername) ||
- string.IsNullOrWhiteSpace(options.OpenSubtitlesPasswordHash))
- {
- return new VideoContentType[] { };
- }
-
- return new[] { VideoContentType.Episode, VideoContentType.Movie };
- }
- }
-
- public Task<SubtitleResponse> GetSubtitles(string id, CancellationToken cancellationToken)
- {
- return GetSubtitlesInternal(id, GetOptions(), cancellationToken);
- }
-
- private DateTime _lastRateLimitException;
- private async Task<SubtitleResponse> GetSubtitlesInternal(string id,
- SubtitleOptions options,
- CancellationToken cancellationToken)
- {
- if (string.IsNullOrWhiteSpace(id))
- {
- throw new ArgumentNullException("id");
- }
-
- var idParts = id.Split(new[] { '-' }, 3);
-
- var format = idParts[0];
- var language = idParts[1];
- var ossId = idParts[2];
-
- var downloadsList = new[] { int.Parse(ossId, _usCulture) };
-
- await Login(cancellationToken).ConfigureAwait(false);
-
- if ((DateTime.UtcNow - _lastRateLimitException).TotalHours < 1)
- {
- throw new ApplicationException("OpenSubtitles rate limit reached");
- }
-
- var resultDownLoad = await OpenSubtitles.DownloadSubtitlesAsync(downloadsList, cancellationToken).ConfigureAwait(false);
-
- if ((resultDownLoad.Status ?? string.Empty).IndexOf("407", StringComparison.OrdinalIgnoreCase) != -1)
- {
- _lastRateLimitException = DateTime.UtcNow;
- throw new ApplicationException("OpenSubtitles rate limit reached");
- }
-
- if (!(resultDownLoad is MethodResponseSubtitleDownload))
- {
- throw new ApplicationException("Invalid response type");
- }
-
- var results = ((MethodResponseSubtitleDownload)resultDownLoad).Results;
-
- _lastRateLimitException = DateTime.MinValue;
-
- if (results.Count == 0)
- {
- var msg = string.Format("Subtitle with Id {0} was not found. Name: {1}. Status: {2}. Message: {3}",
- ossId,
- resultDownLoad.Name ?? string.Empty,
- resultDownLoad.Status ?? string.Empty,
- resultDownLoad.Message ?? string.Empty);
-
- throw new ResourceNotFoundException(msg);
- }
-
- var data = Convert.FromBase64String(results.First().Data);
-
- return new SubtitleResponse
- {
- Format = format,
- Language = language,
-
- Stream = new MemoryStream(Utilities.Decompress(new MemoryStream(data)))
- };
- }
-
- private DateTime _lastLogin;
- private async Task Login(CancellationToken cancellationToken)
- {
- if ((DateTime.UtcNow - _lastLogin).TotalSeconds < 60)
- {
- return;
- }
-
- var options = GetOptions();
-
- var user = options.OpenSubtitlesUsername ?? string.Empty;
- var password = DecryptPassword(options.OpenSubtitlesPasswordHash);
-
- var loginResponse = await OpenSubtitles.LogInAsync(user, password, "en", cancellationToken).ConfigureAwait(false);
-
- if (!(loginResponse is MethodResponseLogIn))
- {
- throw new Exception("Authentication to OpenSubtitles failed.");
- }
-
- _lastLogin = DateTime.UtcNow;
- }
-
- public async Task<IEnumerable<NameIdPair>> GetSupportedLanguages(CancellationToken cancellationToken)
- {
- await Login(cancellationToken).ConfigureAwait(false);
-
- var result = OpenSubtitles.GetSubLanguages("en");
- if (!(result is MethodResponseGetSubLanguages))
- {
- _logger.Error("Invalid response type");
- return new List<NameIdPair>();
- }
-
- var results = ((MethodResponseGetSubLanguages)result).Languages;
-
- return results.Select(i => new NameIdPair
- {
- Name = i.LanguageName,
- Id = i.SubLanguageID
- });
- }
-
- private string NormalizeLanguage(string language)
- {
- // Problem with Greek subtitle download #1349
- if (string.Equals (language, "gre", StringComparison.OrdinalIgnoreCase)) {
-
- return "ell";
- }
-
- return language;
- }
-
- public async Task<IEnumerable<RemoteSubtitleInfo>> Search(SubtitleSearchRequest request, CancellationToken cancellationToken)
- {
- var imdbIdText = request.GetProviderId(MetadataProviders.Imdb);
- long imdbId = 0;
-
- switch (request.ContentType)
- {
- case VideoContentType.Episode:
- if (!request.IndexNumber.HasValue || !request.ParentIndexNumber.HasValue || string.IsNullOrEmpty(request.SeriesName))
- {
- _logger.Debug("Episode information missing");
- return new List<RemoteSubtitleInfo>();
- }
- break;
- case VideoContentType.Movie:
- if (string.IsNullOrEmpty(request.Name))
- {
- _logger.Debug("Movie name missing");
- return new List<RemoteSubtitleInfo>();
- }
- if (string.IsNullOrWhiteSpace(imdbIdText) || !long.TryParse(imdbIdText.TrimStart('t'), NumberStyles.Any, _usCulture, out imdbId))
- {
- _logger.Debug("Imdb id missing");
- return new List<RemoteSubtitleInfo>();
- }
- break;
- }
-
- if (string.IsNullOrEmpty(request.MediaPath))
- {
- _logger.Debug("Path Missing");
- return new List<RemoteSubtitleInfo>();
- }
-
- await Login(cancellationToken).ConfigureAwait(false);
-
- var subLanguageId = NormalizeLanguage(request.Language);
- var hash = Utilities.ComputeHash(request.MediaPath);
- var fileInfo = new FileInfo(request.MediaPath);
- var movieByteSize = fileInfo.Length;
- var searchImdbId = request.ContentType == VideoContentType.Movie ? imdbId.ToString(_usCulture) : "";
- var subtitleSearchParameters = request.ContentType == VideoContentType.Episode
- ? new List<SubtitleSearchParameters> {
- new SubtitleSearchParameters(subLanguageId,
- query: request.SeriesName,
- season: request.ParentIndexNumber.Value.ToString(_usCulture),
- episode: request.IndexNumber.Value.ToString(_usCulture))
- }
- : new List<SubtitleSearchParameters> {
- new SubtitleSearchParameters(subLanguageId, imdbid: searchImdbId),
- new SubtitleSearchParameters(subLanguageId, query: request.Name, imdbid: searchImdbId)
- };
- var parms = new List<SubtitleSearchParameters> {
- new SubtitleSearchParameters( subLanguageId,
- movieHash: hash,
- movieByteSize: movieByteSize,
- imdbid: searchImdbId ),
- };
- parms.AddRange(subtitleSearchParameters);
- var result = await OpenSubtitles.SearchSubtitlesAsync(parms.ToArray(), cancellationToken).ConfigureAwait(false);
- if (!(result is MethodResponseSubtitleSearch))
- {
- _logger.Error("Invalid response type");
- return new List<RemoteSubtitleInfo>();
- }
-
- Predicate<SubtitleSearchResult> mediaFilter =
- x =>
- request.ContentType == VideoContentType.Episode
- ? !string.IsNullOrEmpty(x.SeriesSeason) && !string.IsNullOrEmpty(x.SeriesEpisode) &&
- int.Parse(x.SeriesSeason, _usCulture) == request.ParentIndexNumber &&
- int.Parse(x.SeriesEpisode, _usCulture) == request.IndexNumber
- : !string.IsNullOrEmpty(x.IDMovieImdb) && long.Parse(x.IDMovieImdb, _usCulture) == imdbId;
-
- var results = ((MethodResponseSubtitleSearch)result).Results;
-
- // Avoid implicitly captured closure
- var hasCopy = hash;
-
- return results.Where(x => x.SubBad == "0" && mediaFilter(x) && (!request.IsPerfectMatch || string.Equals(x.MovieHash, hash, StringComparison.OrdinalIgnoreCase)))
- .OrderBy(x => (string.Equals(x.MovieHash, hash, StringComparison.OrdinalIgnoreCase) ? 0 : 1))
- .ThenBy(x => Math.Abs(long.Parse(x.MovieByteSize, _usCulture) - movieByteSize))
- .ThenByDescending(x => int.Parse(x.SubDownloadsCnt, _usCulture))
- .ThenByDescending(x => double.Parse(x.SubRating, _usCulture))
- .Select(i => new RemoteSubtitleInfo
- {
- Author = i.UserNickName,
- Comment = i.SubAuthorComment,
- CommunityRating = float.Parse(i.SubRating, _usCulture),
- DownloadCount = int.Parse(i.SubDownloadsCnt, _usCulture),
- Format = i.SubFormat,
- ProviderName = Name,
- ThreeLetterISOLanguageName = i.SubLanguageID,
-
- Id = i.SubFormat + "-" + i.SubLanguageID + "-" + i.IDSubtitleFile,
-
- Name = i.SubFileName,
- DateCreated = DateTime.Parse(i.SubAddDate, _usCulture),
- IsHashMatch = i.MovieHash == hasCopy
-
- }).Where(i => !string.Equals(i.Format, "sub", StringComparison.OrdinalIgnoreCase) && !string.Equals(i.Format, "idx", StringComparison.OrdinalIgnoreCase));
- }
-
- public void Dispose()
- {
- _config.NamedConfigurationUpdating -= _config_NamedConfigurationUpdating;
- }
- }
-}
diff --git a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
index a57e7d2c0c..cd741bed52 100644
--- a/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
+++ b/MediaBrowser.Providers/Subtitles/SubtitleManager.cs
@@ -16,7 +16,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Subtitles
{
@@ -131,7 +133,7 @@ namespace MediaBrowser.Providers.Subtitles
{
//var isText = MediaStream.IsTextFormat(response.Format);
- using (var fs = _fileSystem.GetFileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fs = _fileSystem.GetFileStream(savePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await stream.CopyToAsync(fs).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/TV/DummySeasonProvider.cs b/MediaBrowser.Providers/TV/DummySeasonProvider.cs
index b74eac219e..f9f2479998 100644
--- a/MediaBrowser.Providers/TV/DummySeasonProvider.cs
+++ b/MediaBrowser.Providers/TV/DummySeasonProvider.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -9,7 +8,10 @@ using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
index 90a185ce00..3de79f779e 100644
--- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
+++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
@@ -8,7 +8,9 @@ using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/FanArt/FanArtSeasonProvider.cs b/MediaBrowser.Providers/TV/FanArt/FanArtSeasonProvider.cs
index e6a47d9d2f..bf58038358 100644
--- a/MediaBrowser.Providers/TV/FanArt/FanArtSeasonProvider.cs
+++ b/MediaBrowser.Providers/TV/FanArt/FanArtSeasonProvider.cs
@@ -18,7 +18,9 @@ using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
@@ -101,7 +103,7 @@ namespace MediaBrowser.Providers.TV
{
// No biggie. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No biggie. Don't blow up
}
diff --git a/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs b/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs
index 827a3c50ff..223887415b 100644
--- a/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/FanArt/FanartSeriesProvider.cs
@@ -20,7 +20,9 @@ using System.Net;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
@@ -108,7 +110,7 @@ namespace MediaBrowser.Providers.TV
{
// No biggie. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No biggie. Don't blow up
}
@@ -323,7 +325,7 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
- using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
await response.CopyToAsync(fileStream).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
index 9c212e8a0a..74a9680625 100644
--- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -14,11 +13,15 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
- class MissingEpisodeProvider
+ public class MissingEpisodeProvider
{
private readonly IServerConfigurationManager _config;
private readonly ILogger _logger;
@@ -29,14 +32,16 @@ namespace MediaBrowser.Providers.TV
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private static readonly SemaphoreSlim _resourceLock = new SemaphoreSlim(1, 1);
public static bool IsRunning = false;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
- public MissingEpisodeProvider(ILogger logger, IServerConfigurationManager config, ILibraryManager libraryManager, ILocalizationManager localization, IFileSystem fileSystem)
+ public MissingEpisodeProvider(ILogger logger, IServerConfigurationManager config, ILibraryManager libraryManager, ILocalizationManager localization, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlSettings)
{
_logger = logger;
_config = config;
_libraryManager = libraryManager;
_localization = localization;
_fileSystem = fileSystem;
+ _xmlSettings = xmlSettings;
}
public async Task Run(List<IGrouping<string, Series>> series, bool addNewItems, CancellationToken cancellationToken)
@@ -54,7 +59,7 @@ namespace MediaBrowser.Providers.TV
{
break;
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
//_logger.Warn("Series files missing for series id {0}", seriesGroup.Key);
}
@@ -78,7 +83,8 @@ namespace MediaBrowser.Providers.TV
var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, seriesProviderIds);
- var episodeFiles = Directory.EnumerateFiles(seriesDataPath, "*.xml", SearchOption.TopDirectoryOnly)
+ var episodeFiles = _fileSystem.GetFilePaths(seriesDataPath)
+ .Where(i => string.Equals(Path.GetExtension(i), ".xml", StringComparison.OrdinalIgnoreCase))
.Select(Path.GetFileNameWithoutExtension)
.Where(i => i.StartsWith("episode-", StringComparison.OrdinalIgnoreCase))
.ToList();
@@ -492,56 +498,59 @@ namespace MediaBrowser.Providers.TV
DateTime? airDate = null;
- // It appears the best way to filter out invalid entries is to only include those with valid air dates
- using (var streamReader = new StreamReader(xmlPath, Encoding.UTF8))
+ using (var fileStream = _fileSystem.GetFileStream(xmlPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, new XmlReaderSettings
+ // It appears the best way to filter out invalid entries is to only include those with valid air dates
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- }))
- {
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- if (reader.NodeType == XmlNodeType.Element)
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "EpisodeName":
- {
- var val = reader.ReadElementContentAsString();
- if (string.IsNullOrWhiteSpace(val))
+ switch (reader.Name)
+ {
+ case "EpisodeName":
{
- // Not valid, ignore these
- return null;
+ var val = reader.ReadElementContentAsString();
+ if (string.IsNullOrWhiteSpace(val))
+ {
+ // Not valid, ignore these
+ return null;
+ }
+ break;
}
- break;
- }
- case "FirstAired":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
+ case "FirstAired":
{
- DateTime date;
- if (DateTime.TryParse(val, out date))
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
{
- airDate = date.ToUniversalTime();
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ airDate = date.ToUniversalTime();
+ }
}
+
+ break;
}
+ default:
+ reader.Skip();
break;
- }
-
- default:
- reader.Skip();
- break;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs
index 78bce241f4..d6b1e9a940 100644
--- a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs
@@ -1,4 +1,4 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV;
@@ -12,6 +12,8 @@ using MediaBrowser.Providers.Omdb;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
index cf04a14184..b973620f1c 100644
--- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
@@ -9,7 +9,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
index f440baf5b4..0d89e307f9 100644
--- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -10,7 +9,10 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs
deleted file mode 100644
index fdea1b205a..0000000000
--- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using CommonIO;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Plugins;
-using MediaBrowser.Model.Tasks;
-
-namespace MediaBrowser.Providers.TV
-{
- class SeriesGroup : List<Series>, IGrouping<string, Series>
- {
- public string Key { get; set; }
- }
-
- class SeriesPostScanTask : ILibraryPostScanTask, IHasOrder
- {
- /// <summary>
- /// The _library manager
- /// </summary>
- private readonly ILibraryManager _libraryManager;
- private readonly IServerConfigurationManager _config;
- private readonly ILogger _logger;
- private readonly ILocalizationManager _localization;
- private readonly IFileSystem _fileSystem;
-
- public SeriesPostScanTask(ILibraryManager libraryManager, ILogger logger, IServerConfigurationManager config, ILocalizationManager localization, IFileSystem fileSystem)
- {
- _libraryManager = libraryManager;
- _logger = logger;
- _config = config;
- _localization = localization;
- _fileSystem = fileSystem;
- }
-
- public Task Run(IProgress<double> progress, CancellationToken cancellationToken)
- {
- return RunInternal(progress, cancellationToken);
- }
-
- private Task RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
- {
- IncludeItemTypes = new[] { typeof(Series).Name },
- Recursive = true,
- GroupByPresentationUniqueKey = false
-
- }).Cast<Series>().ToList();
-
- var seriesGroups = FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
-
- return new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem).Run(seriesGroups, true, cancellationToken);
- }
-
- internal static IEnumerable<IGrouping<string, Series>> FindSeriesGroups(List<Series> seriesList)
- {
- var links = seriesList.ToDictionary(s => s, s => seriesList.Where(c => c != s && ShareProviderId(s, c)).ToList());
-
- var visited = new HashSet<Series>();
-
- foreach (var series in seriesList)
- {
- if (!visited.Contains(series))
- {
- var group = new SeriesGroup();
- FindAllLinked(series, visited, links, group);
-
- group.Key = group.Select(s => s.GetProviderId(MetadataProviders.Tvdb)).FirstOrDefault(id => !string.IsNullOrEmpty(id));
-
- yield return group;
- }
- }
- }
-
- private static void FindAllLinked(Series series, HashSet<Series> visited, IDictionary<Series, List<Series>> linksMap, List<Series> results)
- {
- results.Add(series);
- visited.Add(series);
-
- var links = linksMap[series];
-
- foreach (var s in links)
- {
- if (!visited.Contains(s))
- {
- FindAllLinked(s, visited, linksMap, results);
- }
- }
- }
-
- private static bool ShareProviderId(Series a, Series b)
- {
- return a.ProviderIds.Any(id =>
- {
- string value;
- return b.ProviderIds.TryGetValue(id.Key, out value) && id.Value == value;
- });
- }
-
- public int Order
- {
- get
- {
- // Run after tvdb update task
- return 1;
- }
- }
- }
-
- public class CleanMissingEpisodesEntryPoint : IServerEntryPoint
- {
- private readonly ILibraryManager _libraryManager;
- private readonly IServerConfigurationManager _config;
- private readonly ILogger _logger;
- private readonly ILocalizationManager _localization;
- private readonly IFileSystem _fileSystem;
- private readonly object _libraryChangedSyncLock = new object();
- private const int LibraryUpdateDuration = 180000;
- private readonly ITaskManager _taskManager;
-
- public CleanMissingEpisodesEntryPoint(ILibraryManager libraryManager, IServerConfigurationManager config, ILogger logger, ILocalizationManager localization, IFileSystem fileSystem, ITaskManager taskManager)
- {
- _libraryManager = libraryManager;
- _config = config;
- _logger = logger;
- _localization = localization;
- _fileSystem = fileSystem;
- _taskManager = taskManager;
- }
-
- private Timer LibraryUpdateTimer { get; set; }
-
- public void Run()
- {
- _libraryManager.ItemAdded += _libraryManager_ItemAdded;
- }
-
- private void _libraryManager_ItemAdded(object sender, ItemChangeEventArgs e)
- {
- if (!FilterItem(e.Item))
- {
- return;
- }
-
- lock (_libraryChangedSyncLock)
- {
- if (LibraryUpdateTimer == null)
- {
- LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration, Timeout.Infinite);
- }
- else
- {
- LibraryUpdateTimer.Change(LibraryUpdateDuration, Timeout.Infinite);
- }
- }
- }
-
- private async void LibraryUpdateTimerCallback(object state)
- {
- try
- {
- if (MissingEpisodeProvider.IsRunning)
- {
- return;
- }
-
- if (_libraryManager.IsScanRunning)
- {
- return;
- }
-
- var seriesList = _libraryManager.GetItemList(new InternalItemsQuery()
- {
- IncludeItemTypes = new[] { typeof(Series).Name },
- Recursive = true,
- GroupByPresentationUniqueKey = false
-
- }).Cast<Series>().ToList();
-
- var seriesGroups = SeriesPostScanTask.FindSeriesGroups(seriesList).Where(g => !string.IsNullOrEmpty(g.Key)).ToList();
-
- await new MissingEpisodeProvider(_logger, _config, _libraryManager, _localization, _fileSystem)
- .Run(seriesGroups, false, CancellationToken.None).ConfigureAwait(false);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error in SeriesPostScanTask", ex);
- }
- }
-
- private bool FilterItem(BaseItem item)
- {
- return item is Episode && item.LocationType != LocationType.Virtual;
- }
-
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
- public void Dispose()
- {
- Dispose(true);
- }
-
- /// <summary>
- /// Releases unmanaged and - optionally - managed resources.
- /// </summary>
- /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected virtual void Dispose(bool dispose)
- {
- if (dispose)
- {
- if (LibraryUpdateTimer != null)
- {
- LibraryUpdateTimer.Dispose();
- LibraryUpdateTimer = null;
- }
-
- _libraryManager.ItemAdded -= _libraryManager_ItemAdded;
- }
- }
- }
-}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs
index 0feb92e897..952c4f9349 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs
@@ -1,8 +1,7 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
@@ -15,6 +14,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
index 748124c033..032da1928e 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
@@ -1,9 +1,8 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -16,6 +15,9 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs
index 821c26e4be..38831feb6a 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs
@@ -1,7 +1,6 @@
-using CommonIO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
@@ -11,6 +10,9 @@ using System.Globalization;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs
index 194af5b99b..50036e40c8 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -16,7 +15,10 @@ using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs
index ad46db6773..a9a5300167 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs
@@ -13,6 +13,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
@@ -20,11 +21,13 @@ namespace MediaBrowser.Providers.TV
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
+ private readonly IFileSystem _fileSystem;
- public MovieDbSeriesImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ public MovieDbSeriesImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
+ _fileSystem = fileSystem;
}
public string Name
@@ -166,7 +169,7 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrEmpty(path))
{
- var fileInfo = new FileInfo(path);
+ var fileInfo = _fileSystem.GetFileInfo(path);
if (fileInfo.Exists)
{
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
index fb06780293..5a6d875585 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
@@ -4,7 +4,6 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
@@ -18,7 +17,10 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Globalization;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
index a0280cf409..649fec824e 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs
@@ -12,7 +12,9 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.TV
{
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
index 41a2282d80..139daf9a39 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs
@@ -16,7 +16,10 @@ using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
@@ -33,13 +36,15 @@ namespace MediaBrowser.Providers.TV
private readonly IServerConfigurationManager _config;
private readonly IHttpClient _httpClient;
private readonly ILogger _logger;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
- public TvdbEpisodeProvider(IFileSystem fileSystem, IServerConfigurationManager config, IHttpClient httpClient, ILogger logger)
+ public TvdbEpisodeProvider(IFileSystem fileSystem, IServerConfigurationManager config, IHttpClient httpClient, ILogger logger, IXmlReaderSettingsFactory xmlSettings)
{
_fileSystem = fileSystem;
_config = config;
_httpClient = httpClient;
_logger = logger;
+ _xmlSettings = xmlSettings;
Current = this;
}
@@ -47,11 +52,11 @@ namespace MediaBrowser.Providers.TV
{
var list = new List<RemoteSearchResult>();
- // The search query must either provide an episode number or date
- if (!searchInfo.IndexNumber.HasValue && !searchInfo.PremiereDate.HasValue)
- {
- return list;
- }
+ // The search query must either provide an episode number or date
+ if (!searchInfo.IndexNumber.HasValue && !searchInfo.PremiereDate.HasValue)
+ {
+ return list;
+ }
if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds))
{
@@ -59,12 +64,13 @@ namespace MediaBrowser.Providers.TV
var searchNumbers = new EpisodeNumbers();
- if (searchInfo.IndexNumber.HasValue) {
- searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value;
- }
-
+ if (searchInfo.IndexNumber.HasValue)
+ {
+ searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value;
+ }
+
searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber;
- searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber;
+ searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber;
try
{
@@ -91,7 +97,7 @@ namespace MediaBrowser.Providers.TV
{
// Don't fail the provider because this will just keep on going and going.
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// Don't fail the provider because this will just keep on going and going.
}
@@ -110,19 +116,20 @@ namespace MediaBrowser.Providers.TV
var result = new MetadataResult<Episode>();
result.QueriedById = true;
- if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) &&
- (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue))
+ if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) &&
+ (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue))
{
await TvdbSeriesProvider.Current.EnsureSeriesInfo(searchInfo.SeriesProviderIds, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false);
var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, searchInfo.SeriesProviderIds);
var searchNumbers = new EpisodeNumbers();
- if (searchInfo.IndexNumber.HasValue) {
- searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value;
- }
+ if (searchInfo.IndexNumber.HasValue)
+ {
+ searchNumbers.EpisodeNumber = searchInfo.IndexNumber.Value;
+ }
searchNumbers.SeasonNumber = searchInfo.ParentIndexNumber;
- searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber;
+ searchNumbers.EpisodeNumberEnd = searchInfo.IndexNumberEnd ?? searchNumbers.EpisodeNumber;
try
{
@@ -132,7 +139,7 @@ namespace MediaBrowser.Providers.TV
{
// Don't fail the provider because this will just keep on going and going.
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// Don't fail the provider because this will just keep on going and going.
}
@@ -153,20 +160,20 @@ namespace MediaBrowser.Providers.TV
/// <returns>List{FileInfo}.</returns>
internal List<XmlReader> GetEpisodeXmlNodes(string seriesDataPath, EpisodeInfo searchInfo)
{
- var seriesXmlPath = TvdbSeriesProvider.Current.GetSeriesXmlPath (searchInfo.SeriesProviderIds, searchInfo.MetadataLanguage);
-
- try
- {
- return GetXmlNodes(seriesXmlPath, searchInfo);
- }
- catch (DirectoryNotFoundException)
- {
- return new List<XmlReader> ();
- }
- catch (FileNotFoundException)
- {
- return new List<XmlReader> ();
- }
+ var seriesXmlPath = TvdbSeriesProvider.Current.GetSeriesXmlPath(searchInfo.SeriesProviderIds, searchInfo.MetadataLanguage);
+
+ try
+ {
+ return GetXmlNodes(seriesXmlPath, searchInfo);
+ }
+ catch (FileNotFoundException)
+ {
+ return new List<XmlReader>();
+ }
+ catch (IOException)
+ {
+ return new List<XmlReader>();
+ }
}
private class EpisodeNumbers
@@ -186,59 +193,62 @@ namespace MediaBrowser.Providers.TV
/// <returns>Task{System.Boolean}.</returns>
private MetadataResult<Episode> FetchEpisodeData(EpisodeInfo id, EpisodeNumbers searchNumbers, string seriesDataPath, CancellationToken cancellationToken)
{
- var result = new MetadataResult<Episode>()
- {
- Item = new Episode
- {
- IndexNumber = id.IndexNumber,
- ParentIndexNumber = id.ParentIndexNumber,
- IndexNumberEnd = id.IndexNumberEnd
- }
- };
+ var result = new MetadataResult<Episode>()
+ {
+ Item = new Episode
+ {
+ IndexNumber = id.IndexNumber,
+ ParentIndexNumber = id.ParentIndexNumber,
+ IndexNumberEnd = id.IndexNumberEnd
+ }
+ };
- var xmlNodes = GetEpisodeXmlNodes (seriesDataPath, id);
+ var xmlNodes = GetEpisodeXmlNodes(seriesDataPath, id);
- if (xmlNodes.Count > 0) {
- FetchMainEpisodeInfo(result, xmlNodes[0], cancellationToken);
+ if (xmlNodes.Count > 0)
+ {
+ FetchMainEpisodeInfo(result, xmlNodes[0], cancellationToken);
- result.HasMetadata = true;
- }
+ result.HasMetadata = true;
+ }
- foreach (var node in xmlNodes.Skip(1)) {
- FetchAdditionalPartInfo(result, node, cancellationToken);
- }
+ foreach (var node in xmlNodes.Skip(1))
+ {
+ FetchAdditionalPartInfo(result, node, cancellationToken);
+ }
return result;
}
- private List<XmlReader> GetXmlNodes(string xmlFile, EpisodeInfo searchInfo)
- {
- var list = new List<XmlReader> ();
+ private List<XmlReader> GetXmlNodes(string xmlFile, EpisodeInfo searchInfo)
+ {
+ var list = new List<XmlReader>();
- if (searchInfo.IndexNumber.HasValue)
- {
- var files = GetEpisodeXmlFiles (searchInfo.ParentIndexNumber, searchInfo.IndexNumber, searchInfo.IndexNumberEnd, Path.GetDirectoryName (xmlFile));
+ if (searchInfo.IndexNumber.HasValue)
+ {
+ var files = GetEpisodeXmlFiles(searchInfo.ParentIndexNumber, searchInfo.IndexNumber, searchInfo.IndexNumberEnd, Path.GetDirectoryName(xmlFile));
- list = files.Select (GetXmlReader).ToList ();
- }
+ list = files.Select(GetXmlReader).ToList();
+ }
- if (list.Count == 0 && searchInfo.PremiereDate.HasValue) {
- list = GetXmlNodesByPremiereDate (xmlFile, searchInfo.PremiereDate.Value);
- }
+ if (list.Count == 0 && searchInfo.PremiereDate.HasValue)
+ {
+ list = GetXmlNodesByPremiereDate(xmlFile, searchInfo.PremiereDate.Value);
+ }
- return list;
- }
+ return list;
+ }
- private List<FileSystemMetadata> GetEpisodeXmlFiles(int? seasonNumber, int? episodeNumber, int? endingEpisodeNumber, string seriesDataPath)
- {
- var files = new List<FileSystemMetadata>();
+ private List<FileSystemMetadata> GetEpisodeXmlFiles(int? seasonNumber, int? episodeNumber, int? endingEpisodeNumber, string seriesDataPath)
+ {
+ var files = new List<FileSystemMetadata>();
- if (episodeNumber == null)
- {
- return files;
- }
+ if (episodeNumber == null)
+ {
+ return files;
+ }
- var usingAbsoluteData = false;
+ var usingAbsoluteData = false;
if (seasonNumber.HasValue)
{
@@ -261,230 +271,283 @@ namespace MediaBrowser.Providers.TV
}
}
- var end = endingEpisodeNumber ?? episodeNumber;
- episodeNumber++;
+ var end = endingEpisodeNumber ?? episodeNumber;
+ episodeNumber++;
- while (episodeNumber <= end)
- {
+ while (episodeNumber <= end)
+ {
string file;
- if (usingAbsoluteData)
- {
- file = Path.Combine(seriesDataPath, string.Format("episode-abs-{0}.xml", episodeNumber));
- }
- else
- {
- file = Path.Combine(seriesDataPath, string.Format("episode-{0}-{1}.xml", seasonNumber.Value, episodeNumber));
- }
-
- var fileInfo = _fileSystem.GetFileInfo(file);
- if (fileInfo.Exists)
- {
- files.Add(fileInfo);
- }
- else
- {
- break;
- }
-
- episodeNumber++;
- }
-
- return files;
- }
-
- private XmlReader GetXmlReader(FileSystemMetadata xmlFile)
- {
- return GetXmlReader (_fileSystem.ReadAllText(xmlFile.FullName, Encoding.UTF8));
- }
-
- private XmlReader GetXmlReader(String xml)
- {
- var streamReader = new StringReader (xml);
-
- return XmlReader.Create (streamReader, new XmlReaderSettings {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- });
- }
-
- private List<XmlReader> GetXmlNodesByPremiereDate(string xmlFile, DateTime premiereDate)
- {
- var list = new List<XmlReader> ();
-
- using (var streamReader = new StreamReader (xmlFile, Encoding.UTF8)) {
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create (streamReader, new XmlReaderSettings {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- }))
- {
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element)
- {
- switch (reader.Name)
- {
- case "Episode":
- {
- var outerXml = reader.ReadOuterXml();
-
- var airDate = GetEpisodeAirDate (outerXml);
-
- if (airDate.HasValue && premiereDate.Date == airDate.Value.Date)
- {
- list.Add (GetXmlReader(outerXml));
- return list;
- }
-
- break;
- }
-
- default:
- reader.Skip();
- break;
- }
- }
- }
- }
- }
-
- return list;
- }
-
- private DateTime? GetEpisodeAirDate(string xml)
- {
- using (var streamReader = new StringReader (xml))
- {
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create (streamReader, new XmlReaderSettings {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- }))
- {
- reader.MoveToContent ();
-
- // Loop through each element
- while (reader.Read ()) {
-
- if (reader.NodeType == XmlNodeType.Element) {
- switch (reader.Name) {
-
- case "FirstAired":
- {
- var val = reader.ReadElementContentAsString ();
-
- if (!string.IsNullOrWhiteSpace (val)) {
- DateTime date;
- if (DateTime.TryParse (val, out date)) {
- date = date.ToUniversalTime ();
-
- return date;
- }
- }
-
- break;
- }
-
- default:
- reader.Skip ();
- break;
- }
- }
- }
- }
- }
- return null;
- }
+ if (usingAbsoluteData)
+ {
+ file = Path.Combine(seriesDataPath, string.Format("episode-abs-{0}.xml", episodeNumber));
+ }
+ else
+ {
+ file = Path.Combine(seriesDataPath, string.Format("episode-{0}-{1}.xml", seasonNumber.Value, episodeNumber));
+ }
+
+ var fileInfo = _fileSystem.GetFileInfo(file);
+ if (fileInfo.Exists)
+ {
+ files.Add(fileInfo);
+ }
+ else
+ {
+ break;
+ }
+
+ episodeNumber++;
+ }
+
+ return files;
+ }
+
+ private XmlReader GetXmlReader(FileSystemMetadata xmlFile)
+ {
+ return GetXmlReader(_fileSystem.ReadAllText(xmlFile.FullName, Encoding.UTF8));
+ }
+
+ private XmlReader GetXmlReader(String xml)
+ {
+ var streamReader = new StringReader(xml);
+
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ return XmlReader.Create(streamReader, settings);
+ }
+
+ private List<XmlReader> GetXmlNodesByPremiereDate(string xmlFile, DateTime premiereDate)
+ {
+ var list = new List<XmlReader>();
+
+ using (var fileStream = _fileSystem.GetFileStream(xmlFile, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+ {
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
+ {
+ // Use XmlReader for best performance
+
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ using (var reader = XmlReader.Create(streamReader, settings))
+ {
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "Episode":
+ {
+ var outerXml = reader.ReadOuterXml();
+
+ var airDate = GetEpisodeAirDate(outerXml);
+
+ if (airDate.HasValue && premiereDate.Date == airDate.Value.Date)
+ {
+ list.Add(GetXmlReader(outerXml));
+ return list;
+ }
+
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return list;
+ }
+
+ private DateTime? GetEpisodeAirDate(string xml)
+ {
+ using (var streamReader = new StringReader(xml))
+ {
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
+
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
+ {
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+
+ case "FirstAired":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ date = date.ToUniversalTime();
+
+ return date;
+ }
+ }
+
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- private void FetchMainEpisodeInfo(MetadataResult<Episode> result, XmlReader reader, CancellationToken cancellationToken)
+ private void FetchMainEpisodeInfo(MetadataResult<Episode> result, XmlReader reader, CancellationToken cancellationToken)
{
var item = result.Item;
- // Use XmlReader for best performance
- using (reader)
- {
- reader.MoveToContent();
-
- result.ResetPeople();
-
- // Loop through each element
- while (reader.Read())
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- if (reader.NodeType == XmlNodeType.Element)
- {
- switch (reader.Name)
- {
- case "id":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.Tvdb, val);
- }
- break;
- }
-
- case "IMDB_ID":
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.SetProviderId(MetadataProviders.Imdb, val);
- }
- break;
- }
-
- case "DVD_episodenumber":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- float num;
-
- if (float.TryParse(val, NumberStyles.Any, _usCulture, out num))
- {
- item.DvdEpisodeNumber = num;
- }
- }
-
- break;
- }
-
- case "DVD_season":
- {
- var val = reader.ReadElementContentAsString();
+ // Use XmlReader for best performance
+ using (reader)
+ {
+ reader.MoveToContent();
+
+ result.ResetPeople();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+ cancellationToken.ThrowIfCancellationRequested();
- if (!string.IsNullOrWhiteSpace(val))
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "id":
{
- float num;
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.SetProviderId(MetadataProviders.Tvdb, val);
+ }
+ break;
+ }
- if (float.TryParse(val, NumberStyles.Any, _usCulture, out num))
+ case "IMDB_ID":
+ {
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
{
- item.DvdSeasonNumber = Convert.ToInt32(num);
+ item.SetProviderId(MetadataProviders.Imdb, val);
}
+ break;
}
- break;
- }
+ case "DVD_episodenumber":
+ {
+ var val = reader.ReadElementContentAsString();
- case "EpisodeNumber":
- {
- if (!item.IndexNumber.HasValue)
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ float num;
+
+ if (float.TryParse(val, NumberStyles.Any, _usCulture, out num))
+ {
+ item.DvdEpisodeNumber = num;
+ }
+ }
+
+ break;
+ }
+
+ case "DVD_season":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ float num;
+
+ if (float.TryParse(val, NumberStyles.Any, _usCulture, out num))
+ {
+ item.DvdSeasonNumber = Convert.ToInt32(num);
+ }
+ }
+
+ break;
+ }
+
+ case "EpisodeNumber":
+ {
+ if (!item.IndexNumber.HasValue)
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ int rval;
+
+ // int.TryParse is local aware, so it can be probamatic, force us culture
+ if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+ {
+ item.IndexNumber = rval;
+ }
+ }
+ }
+
+ break;
+ }
+
+ case "SeasonNumber":
+ {
+ if (!item.ParentIndexNumber.HasValue)
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ int rval;
+
+ // int.TryParse is local aware, so it can be probamatic, force us culture
+ if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+ {
+ item.ParentIndexNumber = rval;
+ }
+ }
+ }
+
+ break;
+ }
+
+ case "absolute_number":
{
var val = reader.ReadElementContentAsString();
@@ -495,17 +558,32 @@ namespace MediaBrowser.Providers.TV
// int.TryParse is local aware, so it can be probamatic, force us culture
if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
{
- item.IndexNumber = rval;
+ item.AbsoluteEpisodeNumber = rval;
}
}
+
+ break;
}
- break;
- }
+ case "airsbefore_episode":
+ {
+ var val = reader.ReadElementContentAsString();
- case "SeasonNumber":
- {
- if (!item.ParentIndexNumber.HasValue)
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ int rval;
+
+ // int.TryParse is local aware, so it can be probamatic, force us culture
+ if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+ {
+ item.AirsBeforeEpisodeNumber = rval;
+ }
+ }
+
+ break;
+ }
+
+ case "airsafter_season":
{
var val = reader.ReadElementContentAsString();
@@ -516,225 +594,170 @@ namespace MediaBrowser.Providers.TV
// int.TryParse is local aware, so it can be probamatic, force us culture
if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
{
- item.ParentIndexNumber = rval;
+ item.AirsAfterSeasonNumber = rval;
}
}
+
+ break;
}
- break;
- }
+ case "airsbefore_season":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ int rval;
+
+ // int.TryParse is local aware, so it can be probamatic, force us culture
+ if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+ {
+ item.AirsBeforeSeasonNumber = rval;
+ }
+ }
+
+ break;
+ }
+
+ case "EpisodeName":
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Name))
+ {
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.Name = val;
+ }
+ }
+ break;
+ }
+
+ case "Overview":
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Overview))
+ {
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.Overview = val;
+ }
+ }
+ break;
+ }
+ case "Rating":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ float rval;
+
+ // float.TryParse is local aware, so it can be probamatic, force us culture
+ if (float.TryParse(val, NumberStyles.AllowDecimalPoint, _usCulture, out rval))
+ {
+ item.CommunityRating = rval;
+ }
+ }
+ break;
+ }
+ case "RatingCount":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ int rval;
+
+ // int.TryParse is local aware, so it can be probamatic, force us culture
+ if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
+ {
+ item.VoteCount = rval;
+ }
+ }
+
+ break;
+ }
+
+ case "FirstAired":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ date = date.ToUniversalTime();
+
+ item.PremiereDate = date;
+ item.ProductionYear = date.Year;
+ }
+ }
+
+ break;
+ }
+
+ case "Director":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddPeople(result, val, PersonType.Director);
+ }
+ }
- case "absolute_number":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
- {
- item.AbsoluteEpisodeNumber = rval;
- }
- }
-
- break;
- }
-
- case "airsbefore_episode":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
- {
- item.AirsBeforeEpisodeNumber = rval;
- }
- }
-
- break;
- }
-
- case "airsafter_season":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
- {
- item.AirsAfterSeasonNumber = rval;
- }
- }
-
- break;
- }
-
- case "airsbefore_season":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
- {
- item.AirsBeforeSeasonNumber = rval;
- }
- }
-
- break;
- }
-
- case "EpisodeName":
- {
- if (!item.LockedFields.Contains(MetadataFields.Name))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.Name = val;
- }
- }
- break;
- }
-
- case "Overview":
- {
- if (!item.LockedFields.Contains(MetadataFields.Overview))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.Overview = val;
- }
- }
- break;
- }
- case "Rating":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- float rval;
-
- // float.TryParse is local aware, so it can be probamatic, force us culture
- if (float.TryParse(val, NumberStyles.AllowDecimalPoint, _usCulture, out rval))
- {
- item.CommunityRating = rval;
- }
- }
- break;
- }
- case "RatingCount":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- int rval;
-
- // int.TryParse is local aware, so it can be probamatic, force us culture
- if (int.TryParse(val, NumberStyles.Integer, _usCulture, out rval))
- {
- item.VoteCount = rval;
- }
- }
-
- break;
- }
-
- case "FirstAired":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- DateTime date;
- if (DateTime.TryParse(val, out date))
- {
- date = date.ToUniversalTime();
-
- item.PremiereDate = date;
- item.ProductionYear = date.Year;
- }
- }
-
- break;
- }
-
- case "Director":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddPeople(result, val, PersonType.Director);
- }
- }
-
- break;
- }
- case "GuestStars":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddGuestStars(result, val);
- }
- }
-
- break;
- }
- case "Writer":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddPeople(result, val, PersonType.Writer);
- }
- }
-
- break;
- }
- case "Language":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- result.ResultLanguage = val;
- }
-
- break;
- }
-
- default:
- reader.Skip();
- break;
- }
- }
- }
- }
+ break;
+ }
+ case "GuestStars":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddGuestStars(result, val);
+ }
+ }
+
+ break;
+ }
+ case "Writer":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddPeople(result, val, PersonType.Writer);
+ }
+ }
+
+ break;
+ }
+ case "Language":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ result.ResultLanguage = val;
+ }
+
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
}
private void AddPeople<T>(MetadataResult<T> result, string val, string personType)
@@ -778,99 +801,99 @@ namespace MediaBrowser.Providers.TV
}
}
- private void FetchAdditionalPartInfo(MetadataResult<Episode> result, XmlReader reader, CancellationToken cancellationToken)
+ private void FetchAdditionalPartInfo(MetadataResult<Episode> result, XmlReader reader, CancellationToken cancellationToken)
{
var item = result.Item;
- // Use XmlReader for best performance
- using (reader)
- {
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- if (reader.NodeType == XmlNodeType.Element)
- {
- switch (reader.Name)
- {
- case "EpisodeName":
- {
- if (!item.LockedFields.Contains(MetadataFields.Name))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.Name += ", " + val;
- }
- }
- break;
- }
-
- case "Overview":
- {
- if (!item.LockedFields.Contains(MetadataFields.Overview))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.Overview += Environment.NewLine + Environment.NewLine + val;
- }
- }
- break;
- }
- case "Director":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddPeople(result, val, PersonType.Director);
- }
- }
-
- break;
- }
- case "GuestStars":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddGuestStars(result, val);
- }
- }
-
- break;
- }
- case "Writer":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- if (!item.LockedFields.Contains(MetadataFields.Cast))
- {
- AddPeople(result, val, PersonType.Writer);
- }
- }
-
- break;
- }
-
- default:
- reader.Skip();
- break;
- }
- }
- }
- }
+ // Use XmlReader for best performance
+ using (reader)
+ {
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "EpisodeName":
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Name))
+ {
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.Name += ", " + val;
+ }
+ }
+ break;
+ }
+
+ case "Overview":
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Overview))
+ {
+ var val = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.Overview += Environment.NewLine + Environment.NewLine + val;
+ }
+ }
+ break;
+ }
+ case "Director":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddPeople(result, val, PersonType.Director);
+ }
+ }
+
+ break;
+ }
+ case "GuestStars":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddGuestStars(result, val);
+ }
+ }
+
+ break;
+ }
+ case "Writer":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ if (!item.LockedFields.Contains(MetadataFields.Cast))
+ {
+ AddPeople(result, val, PersonType.Writer);
+ }
+ }
+
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
}
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
index d9e1037d8b..7339995b9c 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbPrescanTask.cs
@@ -14,8 +14,11 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Model.IO;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
@@ -48,6 +51,7 @@ namespace MediaBrowser.Providers.TV
private readonly IServerConfigurationManager _config;
private readonly IFileSystem _fileSystem;
private readonly ILibraryManager _libraryManager;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
/// <summary>
/// Initializes a new instance of the <see cref="TvdbPrescanTask"/> class.
@@ -55,13 +59,14 @@ namespace MediaBrowser.Providers.TV
/// <param name="logger">The logger.</param>
/// <param name="httpClient">The HTTP client.</param>
/// <param name="config">The config.</param>
- public TvdbPrescanTask(ILogger logger, IHttpClient httpClient, IServerConfigurationManager config, IFileSystem fileSystem, ILibraryManager libraryManager)
+ public TvdbPrescanTask(ILogger logger, IHttpClient httpClient, IServerConfigurationManager config, IFileSystem fileSystem, ILibraryManager libraryManager, IXmlReaderSettingsFactory xmlSettings)
{
_logger = logger;
_httpClient = httpClient;
_config = config;
_fileSystem = fileSystem;
_libraryManager = libraryManager;
+ _xmlSettings = xmlSettings;
}
protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
@@ -101,7 +106,7 @@ namespace MediaBrowser.Providers.TV
string newUpdateTime;
- var existingDirectories = Directory.EnumerateDirectories(path)
+ var existingDirectories = _fileSystem.GetDirectoryPaths(path)
.Select(Path.GetFileName)
.ToList();
@@ -178,13 +183,11 @@ namespace MediaBrowser.Providers.TV
/// <returns>System.String.</returns>
private string GetUpdateTime(Stream response)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
using (var streamReader = new StreamReader(response, Encoding.UTF8))
{
@@ -251,13 +254,11 @@ namespace MediaBrowser.Providers.TV
string updateTime = null;
var idList = new List<string>();
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs
index 4b619665cd..1a611ee9b9 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs
@@ -16,7 +16,10 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
@@ -27,12 +30,14 @@ namespace MediaBrowser.Providers.TV
private readonly IServerConfigurationManager _config;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
- public TvdbSeasonImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem)
+ public TvdbSeasonImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlSettings)
{
_config = config;
_httpClient = httpClient;
_fileSystem = fileSystem;
+ _xmlSettings = xmlSettings;
}
public string Name
@@ -78,13 +83,13 @@ namespace MediaBrowser.Providers.TV
try
{
- return GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, cancellationToken);
+ return GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, _xmlSettings, _fileSystem, cancellationToken);
}
catch (FileNotFoundException)
{
// No tvdb data yet. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No tvdb data yet. Don't blow up
}
@@ -103,45 +108,46 @@ namespace MediaBrowser.Providers.TV
return seasonNumber;
}
- internal static IEnumerable<RemoteImageInfo> GetImages(string xmlPath, string preferredLanguage, int seasonNumber, CancellationToken cancellationToken)
+ internal static IEnumerable<RemoteImageInfo> GetImages(string xmlPath, string preferredLanguage, int seasonNumber, IXmlReaderSettingsFactory xmlReaderSettingsFactory, IFileSystem fileSystem, CancellationToken cancellationToken)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = xmlReaderSettingsFactory.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
var list = new List<RemoteImageInfo>();
- using (var streamReader = new StreamReader(xmlPath, Encoding.UTF8))
+ using (var fileStream = fileSystem.GetFileStream(xmlPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- cancellationToken.ThrowIfCancellationRequested();
+ reader.MoveToContent();
- if (reader.NodeType == XmlNodeType.Element)
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Banner":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Banner":
{
- AddImage(subtree, list, seasonNumber);
+ using (var subtree = reader.ReadSubtree())
+ {
+ AddImage(subtree, list, seasonNumber);
+ }
+ break;
}
+ default:
+ reader.Skip();
break;
- }
- default:
- reader.Skip();
- break;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs
index c8efbfb141..f6cdacd424 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs
@@ -16,7 +16,10 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
@@ -26,12 +29,14 @@ namespace MediaBrowser.Providers.TV
private readonly IHttpClient _httpClient;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlReaderSettingsFactory;
- public TvdbSeriesImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem)
+ public TvdbSeriesImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IXmlReaderSettingsFactory xmlReaderSettingsFactory)
{
_config = config;
_httpClient = httpClient;
_fileSystem = fileSystem;
+ _xmlReaderSettingsFactory = xmlReaderSettingsFactory;
}
public string Name
@@ -73,7 +78,7 @@ namespace MediaBrowser.Providers.TV
{
var seriesOffset = TvdbSeriesProvider.GetSeriesOffset(item.ProviderIds);
if (seriesOffset != null && seriesOffset.Value != 0)
- return TvdbSeasonImageProvider.GetImages(path, language, seriesOffset.Value + 1, cancellationToken);
+ return TvdbSeasonImageProvider.GetImages(path, language, seriesOffset.Value + 1, _xmlReaderSettingsFactory, _fileSystem, cancellationToken);
return GetImages(path, language, cancellationToken);
}
@@ -81,7 +86,7 @@ namespace MediaBrowser.Providers.TV
{
// No tvdb data yet. Don't blow up
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No tvdb data yet. Don't blow up
}
@@ -92,43 +97,44 @@ namespace MediaBrowser.Providers.TV
private IEnumerable<RemoteImageInfo> GetImages(string xmlPath, string preferredLanguage, CancellationToken cancellationToken)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlReaderSettingsFactory.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
var list = new List<RemoteImageInfo>();
- using (var streamReader = new StreamReader(xmlPath, Encoding.UTF8))
+ using (var fileStream = _fileSystem.GetFileStream(xmlPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- cancellationToken.ThrowIfCancellationRequested();
+ reader.MoveToContent();
- if (reader.NodeType == XmlNodeType.Element)
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Banner":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Banner":
{
- AddImage(subtree, list);
+ using (var subtree = reader.ReadSubtree())
+ {
+ AddImage(subtree, list);
+ }
+ break;
}
+ default:
+ reader.Skip();
break;
- }
- default:
- reader.Skip();
- break;
+ }
}
}
}
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
index 2572a4f581..9dbc4a963b 100644
--- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs
@@ -20,8 +20,8 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using CommonIO;
-using MediaBrowser.Common.IO;
+using MediaBrowser.Model.Globalization;
+using MediaBrowser.Model.Xml;
namespace MediaBrowser.Providers.TV
{
@@ -35,13 +35,15 @@ namespace MediaBrowser.Providers.TV
private readonly IZipClient _zipClient;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
+ private readonly IXmlReaderSettingsFactory _xmlSettings;
private readonly IServerConfigurationManager _config;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private readonly ILogger _logger;
private readonly ILibraryManager _libraryManager;
private readonly IMemoryStreamProvider _memoryStreamProvider;
+ private readonly ILocalizationManager _localizationManager;
- public TvdbSeriesProvider(IZipClient zipClient, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager config, ILogger logger, ILibraryManager libraryManager, IMemoryStreamProvider memoryStreamProvider)
+ public TvdbSeriesProvider(IZipClient zipClient, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager config, ILogger logger, ILibraryManager libraryManager, IMemoryStreamProvider memoryStreamProvider, IXmlReaderSettingsFactory xmlSettings, ILocalizationManager localizationManager)
{
_zipClient = zipClient;
_httpClient = httpClient;
@@ -50,6 +52,8 @@ namespace MediaBrowser.Providers.TV
_logger = logger;
_libraryManager = libraryManager;
_memoryStreamProvider = memoryStreamProvider;
+ _xmlSettings = xmlSettings;
+ _localizationManager = localizationManager;
Current = this;
}
@@ -251,7 +255,8 @@ namespace MediaBrowser.Providers.TV
}
// Sanitize all files, except for extracted episode files
- foreach (var file in Directory.EnumerateFiles(seriesDataPath, "*.xml", SearchOption.AllDirectories).ToList()
+ foreach (var file in _fileSystem.GetFilePaths(seriesDataPath, true).ToList()
+ .Where(i => string.Equals(Path.GetExtension(i), ".xml", StringComparison.OrdinalIgnoreCase))
.Where(i => !Path.GetFileName(i).StartsWith("episode-", StringComparison.OrdinalIgnoreCase)))
{
await SanitizeXmlFile(file).ConfigureAwait(false);
@@ -280,20 +285,78 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
- var doc = new XmlDocument();
- doc.Load(result);
+ return FindSeriesId(result);
+ }
+ }
+
+ private string FindSeriesId(Stream stream)
+ {
+ using (var streamReader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- if (doc.HasChildNodes)
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- var node = doc.SelectSingleNode("//Series/seriesid");
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "Series":
+ {
+ using (var subtree = reader.ReadSubtree())
+ {
+ return FindSeriesId(subtree);
+ }
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ }
+ }
+ }
- if (node != null)
+ return null;
+ }
+
+ private string FindSeriesId(XmlReader reader)
+ {
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
{
- var idResult = node.InnerText;
+ case "seriesid":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ return val;
+ }
- _logger.Info("Tvdb GetSeriesByRemoteId produced id of {0}", idResult ?? string.Empty);
+ return null;
+ }
- return idResult;
+ default:
+ reader.Skip();
+ break;
}
}
}
@@ -401,11 +464,11 @@ namespace MediaBrowser.Providers.TV
}
return true;
}
- catch (DirectoryNotFoundException)
+ catch (FileNotFoundException)
{
return false;
}
- catch (FileNotFoundException)
+ catch (IOException)
{
return false;
}
@@ -449,9 +512,11 @@ namespace MediaBrowser.Providers.TV
private async Task<IEnumerable<RemoteSearchResult>> FindSeriesInternal(string name, string language, CancellationToken cancellationToken)
{
var url = string.Format(SeriesSearchUrl, WebUtility.UrlEncode(name), NormalizeLanguage(language));
- var doc = new XmlDocument();
+ var searchResults = new List<RemoteSearchResult>();
+
+ var comparableName = GetComparableName(name);
- using (var results = await _httpClient.Get(new HttpRequestOptions
+ using (var stream = await _httpClient.Get(new HttpRequestOptions
{
Url = url,
ResourcePool = TvDbResourcePool,
@@ -459,100 +524,170 @@ namespace MediaBrowser.Providers.TV
}).ConfigureAwait(false))
{
- doc.Load(results);
- }
+ var settings = _xmlSettings.Create(false);
- var searchResults = new List<RemoteSearchResult>();
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- if (doc.HasChildNodes)
- {
- var nodes = doc.SelectNodes("//Series");
- var comparableName = GetComparableName(name);
- if (nodes != null)
+ using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
- foreach (XmlNode node in nodes)
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- var searchResult = new RemoteSearchResult
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- SearchProviderName = Name
- };
+ cancellationToken.ThrowIfCancellationRequested();
- var titles = new List<string>();
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "Series":
+ {
+ using (var subtree = reader.ReadSubtree())
+ {
+ var searchResult = GetSeriesSearchResultFromSubTree(subtree, comparableName);
+ if (searchResult != null)
+ {
+ searchResult.SearchProviderName = Name;
+ searchResults.Add(searchResult);
+ }
+ }
+ break;
+ }
- var nameNode = node.SelectSingleNode("./SeriesName");
- if (nameNode != null)
- {
- titles.Add(GetComparableName(nameNode.InnerText));
+ default:
+ reader.Skip();
+ break;
+ }
+ }
}
+ }
+ }
+ }
- var aliasNode = node.SelectSingleNode("./AliasNames");
- if (aliasNode != null)
- {
- var alias = aliasNode.InnerText.Split('|').Select(GetComparableName);
- titles.AddRange(alias);
- }
+ if (searchResults.Count == 0)
+ {
+ _logger.Info("TVDb Provider - Could not find " + name + ". Check name on Thetvdb.org.");
+ }
- var imdbIdNode = node.SelectSingleNode("./IMDB_ID");
- if (imdbIdNode != null)
- {
- var val = imdbIdNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ return searchResults;
+ }
+
+ private RemoteSearchResult GetSeriesSearchResultFromSubTree(XmlReader reader, string comparableName)
+ {
+ var searchResult = new RemoteSearchResult
+ {
+ SearchProviderName = Name
+ };
+
+ var titles = new List<string>();
+ string seriesId = null;
+
+ reader.MoveToContent();
+
+ while (reader.Read())
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "SeriesName":
{
- searchResult.SetProviderId(MetadataProviders.Imdb, val);
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ titles.Add(GetComparableName(val));
+ }
+ break;
}
- }
- var bannerNode = node.SelectSingleNode("./banner");
- if (bannerNode != null)
- {
- var val = bannerNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ case "AliasNames":
{
- searchResult.ImageUrl = TVUtils.BannerUrl + val;
+ var val = reader.ReadElementContentAsString();
+
+ var alias = (val ?? string.Empty).Split(new [] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(GetComparableName);
+ titles.AddRange(alias);
+ break;
}
- }
- var airDateNode = node.SelectSingleNode("./FirstAired");
- if (airDateNode != null)
- {
- var val = airDateNode.InnerText;
- if (!string.IsNullOrWhiteSpace(val))
+ case "IMDB_ID":
{
- DateTime date;
- if (DateTime.TryParse(val, out date))
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
{
- searchResult.ProductionYear = date.Year;
+ searchResult.SetProviderId(MetadataProviders.Imdb, val);
}
+ break;
}
- }
- foreach (var title in titles)
- {
- if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase))
+ case "banner":
{
- var id = node.SelectSingleNode("./seriesid") ??
- node.SelectSingleNode("./id");
+ var val = reader.ReadElementContentAsString();
- if (id != null)
+ if (!string.IsNullOrWhiteSpace(val))
{
- searchResult.Name = title;
- searchResult.SetProviderId(MetadataProviders.Tvdb, id.InnerText);
- searchResults.Add(searchResult);
+ searchResult.ImageUrl = TVUtils.BannerUrl + val;
}
break;
}
- _logger.Info("TVDb Provider - " + title + " did not match " + comparableName);
- }
+
+ case "FirstAired":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ searchResult.ProductionYear = date.Year;
+ }
+ }
+ break;
+ }
+
+ case "id":
+ case "seriesid":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ seriesId = val;
+ }
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
}
}
}
- if (searchResults.Count == 0)
+ foreach (var title in titles)
{
- _logger.Info("TVDb Provider - Could not find " + name + ". Check name on Thetvdb.org.");
+ if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase))
+ {
+ if (!string.IsNullOrWhiteSpace(seriesId))
+ {
+ searchResult.Name = title;
+ searchResult.SetProviderId(MetadataProviders.Tvdb, seriesId);
+ return searchResult;
+ }
+ break;
+ }
+ _logger.Info("TVDb Provider - " + title + " did not match " + comparableName);
}
- return searchResults;
+ return null;
}
/// <summary>
@@ -569,10 +704,10 @@ namespace MediaBrowser.Providers.TV
/// </summary>
/// <param name="name">The name.</param>
/// <returns>System.String.</returns>
- internal static string GetComparableName(string name)
+ private string GetComparableName(string name)
{
name = name.ToLower();
- name = name.Normalize(NormalizationForm.FormKD);
+ name = _localizationManager.NormalizeFormKD(name);
var sb = new StringBuilder();
foreach (var c in name)
{
@@ -614,58 +749,59 @@ namespace MediaBrowser.Providers.TV
private void FetchSeriesInfo(MetadataResult<Series> result, string seriesXmlPath, CancellationToken cancellationToken)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
var episiodeAirDates = new List<DateTime>();
- using (var streamReader = new StreamReader(seriesXmlPath, Encoding.UTF8))
+ using (var fileStream = _fileSystem.GetFileStream(seriesXmlPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- cancellationToken.ThrowIfCancellationRequested();
+ reader.MoveToContent();
- if (reader.NodeType == XmlNodeType.Element)
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ cancellationToken.ThrowIfCancellationRequested();
+
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Series":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Series":
{
- FetchDataFromSeriesNode(result, subtree, cancellationToken);
+ using (var subtree = reader.ReadSubtree())
+ {
+ FetchDataFromSeriesNode(result, subtree, cancellationToken);
+ }
+ break;
}
- break;
- }
- case "Episode":
- {
- using (var subtree = reader.ReadSubtree())
+ case "Episode":
{
- var date = GetFirstAiredDateFromEpisodeNode(subtree, cancellationToken);
-
- if (date.HasValue)
+ using (var subtree = reader.ReadSubtree())
{
- episiodeAirDates.Add(date.Value);
+ var date = GetFirstAiredDateFromEpisodeNode(subtree, cancellationToken);
+
+ if (date.HasValue)
+ {
+ episiodeAirDates.Add(date.Value);
+ }
}
+ break;
}
- break;
- }
- default:
- reader.Skip();
- break;
+ default:
+ reader.Skip();
+ break;
+ }
}
}
}
@@ -750,39 +886,40 @@ namespace MediaBrowser.Providers.TV
/// <param name="actorsXmlPath">The actors XML path.</param>
private void FetchActors(MetadataResult<Series> result, string actorsXmlPath)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- using (var streamReader = new StreamReader(actorsXmlPath, Encoding.UTF8))
+ using (var fileStream = _fileSystem.GetFileStream(actorsXmlPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- if (reader.NodeType == XmlNodeType.Element)
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Actor":
- {
- using (var subtree = reader.ReadSubtree())
+ switch (reader.Name)
+ {
+ case "Actor":
{
- FetchDataFromActorNode(result, subtree);
+ using (var subtree = reader.ReadSubtree())
+ {
+ FetchDataFromActorNode(result, subtree);
+ }
+ break;
}
+ default:
+ reader.Skip();
break;
- }
- default:
- reader.Skip();
- break;
+ }
}
}
}
@@ -1111,39 +1248,40 @@ namespace MediaBrowser.Providers.TV
/// <returns>Task.</returns>
private async Task ExtractEpisodes(string seriesDataPath, string xmlFile, long? lastTvDbUpdateTime)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
- using (var streamReader = new StreamReader(xmlFile, Encoding.UTF8))
+ using (var fileStream = _fileSystem.GetFileStream(xmlFile, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
{
- // Use XmlReader for best performance
- using (var reader = XmlReader.Create(streamReader, settings))
+ using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
- reader.MoveToContent();
-
- // Loop through each element
- while (reader.Read())
+ // Use XmlReader for best performance
+ using (var reader = XmlReader.Create(streamReader, settings))
{
- if (reader.NodeType == XmlNodeType.Element)
+ reader.MoveToContent();
+
+ // Loop through each element
+ while (reader.Read())
{
- switch (reader.Name)
+ if (reader.NodeType == XmlNodeType.Element)
{
- case "Episode":
- {
- var outerXml = reader.ReadOuterXml();
+ switch (reader.Name)
+ {
+ case "Episode":
+ {
+ var outerXml = reader.ReadOuterXml();
- await SaveEpsiodeXml(seriesDataPath, outerXml, lastTvDbUpdateTime).ConfigureAwait(false);
- break;
- }
+ await SaveEpsiodeXml(seriesDataPath, outerXml, lastTvDbUpdateTime).ConfigureAwait(false);
+ break;
+ }
- default:
- reader.Skip();
- break;
+ default:
+ reader.Skip();
+ break;
+ }
}
}
}
@@ -1153,13 +1291,11 @@ namespace MediaBrowser.Providers.TV
private async Task SaveEpsiodeXml(string seriesDataPath, string xml, long? lastTvDbUpdateTime)
{
- var settings = new XmlReaderSettings
- {
- CheckCharacters = false,
- IgnoreProcessingInstructions = true,
- IgnoreComments = true,
- ValidationType = ValidationType.None
- };
+ var settings = _xmlSettings.Create(false);
+
+ settings.CheckCharacters = false;
+ settings.IgnoreProcessingInstructions = true;
+ settings.IgnoreComments = true;
var seasonNumber = -1;
var episodeNumber = -1;
@@ -1252,13 +1388,16 @@ namespace MediaBrowser.Providers.TV
// Only save the file if not already there, or if the episode has changed
if (hasEpisodeChanged || !_fileSystem.FileExists(file))
{
- using (var writer = XmlWriter.Create(file, new XmlWriterSettings
- {
- Encoding = Encoding.UTF8,
- Async = true
- }))
+ using (var fileStream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.None, true))
{
- await writer.WriteRawAsync(xml).ConfigureAwait(false);
+ using (var writer = XmlWriter.Create(fileStream, new XmlWriterSettings
+ {
+ Encoding = Encoding.UTF8,
+ Async = true
+ }))
+ {
+ await writer.WriteRawAsync(xml).ConfigureAwait(false);
+ }
}
}
@@ -1269,13 +1408,16 @@ namespace MediaBrowser.Providers.TV
// Only save the file if not already there, or if the episode has changed
if (hasEpisodeChanged || !_fileSystem.FileExists(file))
{
- using (var writer = XmlWriter.Create(file, new XmlWriterSettings
+ using (var fileStream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.None, true))
{
- Encoding = Encoding.UTF8,
- Async = true
- }))
- {
- await writer.WriteRawAsync(xml).ConfigureAwait(false);
+ using (var writer = XmlWriter.Create(fileStream, new XmlWriterSettings
+ {
+ Encoding = Encoding.UTF8,
+ Async = true
+ }))
+ {
+ await writer.WriteRawAsync(xml).ConfigureAwait(false);
+ }
}
}
}
@@ -1338,7 +1480,7 @@ namespace MediaBrowser.Providers.TV
_fileSystem.DeleteFile(file);
}
}
- catch (DirectoryNotFoundException)
+ catch (IOException)
{
// No biggie
}
@@ -1353,7 +1495,7 @@ namespace MediaBrowser.Providers.TV
{
string validXml;
- using (var fileStream = _fileSystem.GetFileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, true))
+ using (var fileStream = _fileSystem.GetFileStream(file, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true))
{
using (var reader = new StreamReader(fileStream))
{
@@ -1363,7 +1505,7 @@ namespace MediaBrowser.Providers.TV
}
}
- using (var fileStream = _fileSystem.GetFileStream(file, FileMode.Create, FileAccess.Write, FileShare.Read, true))
+ using (var fileStream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
{
using (var writer = new StreamWriter(fileStream))
{
diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs
index 0637e9a02a..274d04efd0 100644
--- a/MediaBrowser.Providers/Users/UserMetadataService.cs
+++ b/MediaBrowser.Providers/Users/UserMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Users
{
diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
index a4fc462efd..49f7e11ba2 100644
--- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs
+++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Videos
{
diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs
index fd65c379d7..72f8eb471c 100644
--- a/MediaBrowser.Providers/Years/YearMetadataService.cs
+++ b/MediaBrowser.Providers/Years/YearMetadataService.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.IO;
+using MediaBrowser.Model.IO;
namespace MediaBrowser.Providers.Years
{
diff --git a/MediaBrowser.Providers/packages.config b/MediaBrowser.Providers/packages.config
deleted file mode 100644
index 53db819b7a..0000000000
--- a/MediaBrowser.Providers/packages.config
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="CommonIO" version="1.0.0.9" targetFramework="net45" />
- <package id="MediaBrowser.BdInfo" version="1.0.1" targetFramework="net46" />
- <package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
-</packages> \ No newline at end of file
diff --git a/MediaBrowser.Providers/project.json b/MediaBrowser.Providers/project.json
new file mode 100644
index 0000000000..fbbe9eaf32
--- /dev/null
+++ b/MediaBrowser.Providers/project.json
@@ -0,0 +1,17 @@
+{
+ "frameworks":{
+ "netstandard1.6":{
+ "dependencies":{
+ "NETStandard.Library":"1.6.0",
+ }
+ },
+ ".NETPortable,Version=v4.5,Profile=Profile7":{
+ "buildOptions": {
+ "define": [ ]
+ },
+ "frameworkAssemblies":{
+
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Providers/project.lock.json b/MediaBrowser.Providers/project.lock.json
new file mode 100644
index 0000000000..a42f93878d
--- /dev/null
+++ b/MediaBrowser.Providers/project.lock.json
@@ -0,0 +1,3965 @@
+{
+ "locked": false,
+ "version": 1,
+ "targets": {
+ ".NETPortable,Version=v4.5,Profile=Profile7": {},
+ ".NETStandard,Version=v1.6": {
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "Microsoft.Win32.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/Microsoft.Win32.Primitives.dll": {}
+ }
+ },
+ "NETStandard.Library/1.6.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.Win32.Primitives": "4.0.1",
+ "System.AppContext": "4.1.0",
+ "System.Collections": "4.0.11",
+ "System.Collections.Concurrent": "4.0.12",
+ "System.Console": "4.0.0",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Globalization": "4.0.11",
+ "System.Globalization.Calendars": "4.0.1",
+ "System.IO": "4.1.0",
+ "System.IO.Compression": "4.1.0",
+ "System.IO.Compression.ZipFile": "4.0.1",
+ "System.IO.FileSystem": "4.0.1",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Linq": "4.1.0",
+ "System.Linq.Expressions": "4.1.0",
+ "System.Net.Http": "4.1.0",
+ "System.Net.Primitives": "4.0.11",
+ "System.Net.Sockets": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.0.0",
+ "System.Runtime.Numerics": "4.0.1",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Security.Cryptography.X509Certificates": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11",
+ "System.Threading.Timer": "4.0.1",
+ "System.Xml.ReaderWriter": "4.0.11",
+ "System.Xml.XDocument": "4.0.11"
+ }
+ },
+ "runtime.native.System/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "runtime.native.System.IO.Compression/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "runtime.native.System.Net.Http/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "runtime.native.System.Security.Cryptography/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/_._": {}
+ }
+ },
+ "System.AppContext/4.1.0": {
+ "dependencies": {
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.6/System.AppContext.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.6/System.AppContext.dll": {}
+ }
+ },
+ "System.Buffers/4.0.0": {
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "lib/netstandard1.1/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.1/System.Buffers.dll": {}
+ }
+ },
+ "System.Collections/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Collections.dll": {}
+ }
+ },
+ "System.Collections.Concurrent/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Collections.Concurrent.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Collections.Concurrent.dll": {}
+ }
+ },
+ "System.Console/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Console.dll": {}
+ }
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Diagnostics.Debug.dll": {}
+ }
+ },
+ "System.Diagnostics.DiagnosticSource/4.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "lib/netstandard1.3/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {}
+ }
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/System.Diagnostics.Tools.dll": {}
+ }
+ },
+ "System.Diagnostics.Tracing/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.Diagnostics.Tracing.dll": {}
+ }
+ },
+ "System.Globalization/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Globalization.dll": {}
+ }
+ },
+ "System.Globalization.Calendars/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Globalization.Calendars.dll": {}
+ }
+ },
+ "System.Globalization.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.InteropServices": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.IO/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.IO.dll": {}
+ }
+ },
+ "System.IO.Compression/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11",
+ "runtime.native.System": "4.0.0",
+ "runtime.native.System.IO.Compression": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.IO.Compression.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.IO.Compression.ZipFile/4.0.1": {
+ "dependencies": {
+ "System.Buffers": "4.0.0",
+ "System.IO": "4.1.0",
+ "System.IO.Compression": "4.1.0",
+ "System.IO.FileSystem": "4.0.1",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.IO.Compression.ZipFile.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": {}
+ }
+ },
+ "System.IO.FileSystem/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.IO.FileSystem.dll": {}
+ }
+ },
+ "System.IO.FileSystem.Primitives/4.0.1": {
+ "dependencies": {
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
+ }
+ },
+ "System.Linq/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.6/System.Linq.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.6/System.Linq.dll": {}
+ }
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Linq": "4.1.0",
+ "System.ObjectModel": "4.0.12",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit": "4.0.1",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Emit.Lightweight": "4.0.1",
+ "System.Reflection.Extensions": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.6/System.Linq.Expressions.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.6/System.Linq.Expressions.dll": {}
+ }
+ },
+ "System.Net.Http/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.DiagnosticSource": "4.0.0",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Globalization": "4.0.11",
+ "System.Globalization.Extensions": "4.0.1",
+ "System.IO": "4.1.0",
+ "System.IO.FileSystem": "4.0.1",
+ "System.Net.Primitives": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.OpenSsl": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Security.Cryptography.X509Certificates": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11",
+ "runtime.native.System": "4.0.0",
+ "runtime.native.System.Net.Http": "4.0.1",
+ "runtime.native.System.Security.Cryptography": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Net.Http.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Net.Primitives/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Handles": "4.0.1"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Net.Primitives.dll": {}
+ }
+ },
+ "System.Net.Sockets/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Net.Primitives": "4.0.11",
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Net.Sockets.dll": {}
+ }
+ },
+ "System.ObjectModel/4.0.12": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.ObjectModel.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.ObjectModel.dll": {}
+ }
+ },
+ "System.Reflection/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.Reflection.dll": {}
+ }
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "dependencies": {
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.1/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Reflection.Emit.dll": {}
+ }
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {}
+ }
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Emit.ILGeneration": "4.0.1",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {}
+ }
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/System.Reflection.Extensions.dll": {}
+ }
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/System.Reflection.Primitives.dll": {}
+ }
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "dependencies": {
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.5/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {}
+ }
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.0/System.Resources.ResourceManager.dll": {}
+ }
+ },
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.Runtime.dll": {}
+ }
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.Runtime.Extensions.dll": {}
+ }
+ },
+ "System.Runtime.Handles/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Runtime.Handles.dll": {}
+ }
+ },
+ "System.Runtime.InteropServices/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Handles": "4.0.1"
+ },
+ "compile": {
+ "ref/netstandard1.5/System.Runtime.InteropServices.dll": {}
+ }
+ },
+ "System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Threading": "4.0.11",
+ "runtime.native.System": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Runtime.Numerics/4.0.1": {
+ "dependencies": {
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.1/System.Runtime.Numerics.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Runtime.Numerics.dll": {}
+ }
+ },
+ "System.Security.Cryptography.Algorithms/4.2.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Collections": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Runtime.Numerics": "4.0.1",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11",
+ "runtime.native.System.Security.Cryptography": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Security.Cryptography.Cng/4.2.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.6/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Security.Cryptography.Csp/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/_._": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Security.Cryptography.Encoding/4.0.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Collections": "4.0.11",
+ "System.Collections.Concurrent": "4.0.12",
+ "System.Linq": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11",
+ "runtime.native.System.Security.Cryptography": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Security.Cryptography.OpenSsl/4.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Runtime.Numerics": "4.0.1",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11",
+ "runtime.native.System.Security.Cryptography": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.6/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ }
+ }
+ },
+ "System.Security.Cryptography.Primitives/4.0.0": {
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {}
+ }
+ },
+ "System.Security.Cryptography.X509Certificates/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Globalization.Calendars": "4.0.1",
+ "System.IO": "4.1.0",
+ "System.IO.FileSystem": "4.0.1",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.Handles": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Runtime.Numerics": "4.0.1",
+ "System.Security.Cryptography.Algorithms": "4.2.0",
+ "System.Security.Cryptography.Cng": "4.2.0",
+ "System.Security.Cryptography.Csp": "4.0.0",
+ "System.Security.Cryptography.Encoding": "4.0.0",
+ "System.Security.Cryptography.OpenSsl": "4.0.0",
+ "System.Security.Cryptography.Primitives": "4.0.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading": "4.0.11",
+ "runtime.native.System": "4.0.0",
+ "runtime.native.System.Net.Http": "4.0.1",
+ "runtime.native.System.Security.Cryptography": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": {}
+ },
+ "runtimeTargets": {
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": {
+ "assetType": "runtime",
+ "rid": "unix"
+ },
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": {
+ "assetType": "runtime",
+ "rid": "win"
+ }
+ }
+ },
+ "System.Text.Encoding/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Text.Encoding.dll": {}
+ }
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": {}
+ }
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.6/System.Text.RegularExpressions.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.6/System.Text.RegularExpressions.dll": {}
+ }
+ },
+ "System.Threading/4.0.11": {
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Threading.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Threading.dll": {}
+ }
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Threading.Tasks.dll": {}
+ }
+ },
+ "System.Threading.Tasks.Extensions/4.0.0": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ },
+ "compile": {
+ "lib/netstandard1.0/_._": {}
+ },
+ "runtime": {
+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {}
+ }
+ },
+ "System.Threading.Timer/4.0.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ },
+ "compile": {
+ "ref/netstandard1.2/System.Threading.Timer.dll": {}
+ }
+ },
+ "System.Xml.ReaderWriter/4.0.11": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.IO.FileSystem": "4.0.1",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Text.Encoding.Extensions": "4.0.11",
+ "System.Text.RegularExpressions": "4.1.0",
+ "System.Threading.Tasks": "4.0.11",
+ "System.Threading.Tasks.Extensions": "4.0.0"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Xml.ReaderWriter.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {}
+ }
+ },
+ "System.Xml.XDocument/4.0.11": {
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tools": "4.0.1",
+ "System.Globalization": "4.0.11",
+ "System.IO": "4.1.0",
+ "System.Reflection": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading": "4.0.11",
+ "System.Xml.ReaderWriter": "4.0.11"
+ },
+ "compile": {
+ "ref/netstandard1.3/System.Xml.XDocument.dll": {}
+ },
+ "runtime": {
+ "lib/netstandard1.3/System.Xml.XDocument.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Microsoft.NETCore.Platforms/1.0.1": {
+ "sha512": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==",
+ "type": "package",
+ "path": "Microsoft.NETCore.Platforms/1.0.1",
+ "files": [
+ "Microsoft.NETCore.Platforms.1.0.1.nupkg.sha512",
+ "Microsoft.NETCore.Platforms.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "sha512": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "type": "package",
+ "path": "Microsoft.NETCore.Targets/1.0.1",
+ "files": [
+ "Microsoft.NETCore.Targets.1.0.1.nupkg.sha512",
+ "Microsoft.NETCore.Targets.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.json"
+ ]
+ },
+ "Microsoft.Win32.Primitives/4.0.1": {
+ "sha512": "fQnBHO9DgcmkC9dYSJoBqo6sH1VJwJprUHh8F3hbcRlxiQiBUuTntdk8tUwV490OqC2kQUrinGwZyQHTieuXRA==",
+ "type": "package",
+ "path": "Microsoft.Win32.Primitives/4.0.1",
+ "files": [
+ "Microsoft.Win32.Primitives.4.0.1.nupkg.sha512",
+ "Microsoft.Win32.Primitives.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/Microsoft.Win32.Primitives.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/Microsoft.Win32.Primitives.dll",
+ "ref/netstandard1.3/Microsoft.Win32.Primitives.dll",
+ "ref/netstandard1.3/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml",
+ "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "NETStandard.Library/1.6.0": {
+ "sha512": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==",
+ "type": "package",
+ "path": "NETStandard.Library/1.6.0",
+ "files": [
+ "NETStandard.Library.1.6.0.nupkg.sha512",
+ "NETStandard.Library.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt"
+ ]
+ },
+ "runtime.native.System/4.0.0": {
+ "sha512": "QfS/nQI7k/BLgmLrw7qm7YBoULEvgWnPI+cYsbfCVFTW8Aj+i8JhccxcFMu1RWms0YZzF+UHguNBK4Qn89e2Sg==",
+ "type": "package",
+ "path": "runtime.native.System/4.0.0",
+ "files": [
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.native.System.4.0.0.nupkg.sha512",
+ "runtime.native.System.nuspec"
+ ]
+ },
+ "runtime.native.System.IO.Compression/4.1.0": {
+ "sha512": "Ob7nvnJBox1aaB222zSVZSkf4WrebPG4qFscfK7vmD7P7NxoSxACQLtO7ytWpqXDn2wcd/+45+EAZ7xjaPip8A==",
+ "type": "package",
+ "path": "runtime.native.System.IO.Compression/4.1.0",
+ "files": [
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.native.System.IO.Compression.4.1.0.nupkg.sha512",
+ "runtime.native.System.IO.Compression.nuspec"
+ ]
+ },
+ "runtime.native.System.Net.Http/4.0.1": {
+ "sha512": "Nh0UPZx2Vifh8r+J+H2jxifZUD3sBrmolgiFWJd2yiNrxO0xTa6bAw3YwRn1VOiSen/tUXMS31ttNItCZ6lKuA==",
+ "type": "package",
+ "path": "runtime.native.System.Net.Http/4.0.1",
+ "files": [
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.native.System.Net.Http.4.0.1.nupkg.sha512",
+ "runtime.native.System.Net.Http.nuspec"
+ ]
+ },
+ "runtime.native.System.Security.Cryptography/4.0.0": {
+ "sha512": "2CQK0jmO6Eu7ZeMgD+LOFbNJSXHFVQbCJJkEyEwowh1SCgYnrn9W9RykMfpeeVGw7h4IBvYikzpGUlmZTUafJw==",
+ "type": "package",
+ "path": "runtime.native.System.Security.Cryptography/4.0.0",
+ "files": [
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/_._",
+ "runtime.native.System.Security.Cryptography.4.0.0.nupkg.sha512",
+ "runtime.native.System.Security.Cryptography.nuspec"
+ ]
+ },
+ "System.AppContext/4.1.0": {
+ "sha512": "3QjO4jNV7PdKkmQAVp9atA+usVnKRwI3Kx1nMwJ93T0LcQfx7pKAYk0nKz5wn1oP5iqlhZuy6RXOFdhr7rDwow==",
+ "type": "package",
+ "path": "System.AppContext/4.1.0",
+ "files": [
+ "System.AppContext.4.1.0.nupkg.sha512",
+ "System.AppContext.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.AppContext.dll",
+ "lib/net463/System.AppContext.dll",
+ "lib/netcore50/System.AppContext.dll",
+ "lib/netstandard1.6/System.AppContext.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.AppContext.dll",
+ "ref/net463/System.AppContext.dll",
+ "ref/netstandard/_._",
+ "ref/netstandard1.3/System.AppContext.dll",
+ "ref/netstandard1.3/System.AppContext.xml",
+ "ref/netstandard1.3/de/System.AppContext.xml",
+ "ref/netstandard1.3/es/System.AppContext.xml",
+ "ref/netstandard1.3/fr/System.AppContext.xml",
+ "ref/netstandard1.3/it/System.AppContext.xml",
+ "ref/netstandard1.3/ja/System.AppContext.xml",
+ "ref/netstandard1.3/ko/System.AppContext.xml",
+ "ref/netstandard1.3/ru/System.AppContext.xml",
+ "ref/netstandard1.3/zh-hans/System.AppContext.xml",
+ "ref/netstandard1.3/zh-hant/System.AppContext.xml",
+ "ref/netstandard1.6/System.AppContext.dll",
+ "ref/netstandard1.6/System.AppContext.xml",
+ "ref/netstandard1.6/de/System.AppContext.xml",
+ "ref/netstandard1.6/es/System.AppContext.xml",
+ "ref/netstandard1.6/fr/System.AppContext.xml",
+ "ref/netstandard1.6/it/System.AppContext.xml",
+ "ref/netstandard1.6/ja/System.AppContext.xml",
+ "ref/netstandard1.6/ko/System.AppContext.xml",
+ "ref/netstandard1.6/ru/System.AppContext.xml",
+ "ref/netstandard1.6/zh-hans/System.AppContext.xml",
+ "ref/netstandard1.6/zh-hant/System.AppContext.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/aot/lib/netcore50/System.AppContext.dll"
+ ]
+ },
+ "System.Buffers/4.0.0": {
+ "sha512": "msXumHfjjURSkvxUjYuq4N2ghHoRi2VpXcKMA7gK6ujQfU3vGpl+B6ld0ATRg+FZFpRyA6PgEPA+VlIkTeNf2w==",
+ "type": "package",
+ "path": "System.Buffers/4.0.0",
+ "files": [
+ "System.Buffers.4.0.0.nupkg.sha512",
+ "System.Buffers.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.1/.xml",
+ "lib/netstandard1.1/System.Buffers.dll"
+ ]
+ },
+ "System.Collections/4.0.11": {
+ "sha512": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "type": "package",
+ "path": "System.Collections/4.0.11",
+ "files": [
+ "System.Collections.4.0.11.nupkg.sha512",
+ "System.Collections.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Collections.dll",
+ "ref/netcore50/System.Collections.xml",
+ "ref/netcore50/de/System.Collections.xml",
+ "ref/netcore50/es/System.Collections.xml",
+ "ref/netcore50/fr/System.Collections.xml",
+ "ref/netcore50/it/System.Collections.xml",
+ "ref/netcore50/ja/System.Collections.xml",
+ "ref/netcore50/ko/System.Collections.xml",
+ "ref/netcore50/ru/System.Collections.xml",
+ "ref/netcore50/zh-hans/System.Collections.xml",
+ "ref/netcore50/zh-hant/System.Collections.xml",
+ "ref/netstandard1.0/System.Collections.dll",
+ "ref/netstandard1.0/System.Collections.xml",
+ "ref/netstandard1.0/de/System.Collections.xml",
+ "ref/netstandard1.0/es/System.Collections.xml",
+ "ref/netstandard1.0/fr/System.Collections.xml",
+ "ref/netstandard1.0/it/System.Collections.xml",
+ "ref/netstandard1.0/ja/System.Collections.xml",
+ "ref/netstandard1.0/ko/System.Collections.xml",
+ "ref/netstandard1.0/ru/System.Collections.xml",
+ "ref/netstandard1.0/zh-hans/System.Collections.xml",
+ "ref/netstandard1.0/zh-hant/System.Collections.xml",
+ "ref/netstandard1.3/System.Collections.dll",
+ "ref/netstandard1.3/System.Collections.xml",
+ "ref/netstandard1.3/de/System.Collections.xml",
+ "ref/netstandard1.3/es/System.Collections.xml",
+ "ref/netstandard1.3/fr/System.Collections.xml",
+ "ref/netstandard1.3/it/System.Collections.xml",
+ "ref/netstandard1.3/ja/System.Collections.xml",
+ "ref/netstandard1.3/ko/System.Collections.xml",
+ "ref/netstandard1.3/ru/System.Collections.xml",
+ "ref/netstandard1.3/zh-hans/System.Collections.xml",
+ "ref/netstandard1.3/zh-hant/System.Collections.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Collections.Concurrent/4.0.12": {
+ "sha512": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==",
+ "type": "package",
+ "path": "System.Collections.Concurrent/4.0.12",
+ "files": [
+ "System.Collections.Concurrent.4.0.12.nupkg.sha512",
+ "System.Collections.Concurrent.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Collections.Concurrent.dll",
+ "lib/netstandard1.3/System.Collections.Concurrent.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Collections.Concurrent.dll",
+ "ref/netcore50/System.Collections.Concurrent.xml",
+ "ref/netcore50/de/System.Collections.Concurrent.xml",
+ "ref/netcore50/es/System.Collections.Concurrent.xml",
+ "ref/netcore50/fr/System.Collections.Concurrent.xml",
+ "ref/netcore50/it/System.Collections.Concurrent.xml",
+ "ref/netcore50/ja/System.Collections.Concurrent.xml",
+ "ref/netcore50/ko/System.Collections.Concurrent.xml",
+ "ref/netcore50/ru/System.Collections.Concurrent.xml",
+ "ref/netcore50/zh-hans/System.Collections.Concurrent.xml",
+ "ref/netcore50/zh-hant/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/System.Collections.Concurrent.dll",
+ "ref/netstandard1.1/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/de/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/es/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/fr/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/it/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/ja/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/ko/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/ru/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml",
+ "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/System.Collections.Concurrent.dll",
+ "ref/netstandard1.3/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/de/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/es/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/fr/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/it/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/ja/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/ko/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/ru/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml",
+ "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Console/4.0.0": {
+ "sha512": "qSKUSOIiYA/a0g5XXdxFcUFmv1hNICBD7QZ0QhGYVipPIhvpiydY8VZqr1thmCXvmn8aipMg64zuanB4eotK9A==",
+ "type": "package",
+ "path": "System.Console/4.0.0",
+ "files": [
+ "System.Console.4.0.0.nupkg.sha512",
+ "System.Console.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Console.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Console.dll",
+ "ref/netstandard1.3/System.Console.dll",
+ "ref/netstandard1.3/System.Console.xml",
+ "ref/netstandard1.3/de/System.Console.xml",
+ "ref/netstandard1.3/es/System.Console.xml",
+ "ref/netstandard1.3/fr/System.Console.xml",
+ "ref/netstandard1.3/it/System.Console.xml",
+ "ref/netstandard1.3/ja/System.Console.xml",
+ "ref/netstandard1.3/ko/System.Console.xml",
+ "ref/netstandard1.3/ru/System.Console.xml",
+ "ref/netstandard1.3/zh-hans/System.Console.xml",
+ "ref/netstandard1.3/zh-hant/System.Console.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Diagnostics.Debug/4.0.11": {
+ "sha512": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "type": "package",
+ "path": "System.Diagnostics.Debug/4.0.11",
+ "files": [
+ "System.Diagnostics.Debug.4.0.11.nupkg.sha512",
+ "System.Diagnostics.Debug.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Diagnostics.Debug.dll",
+ "ref/netcore50/System.Diagnostics.Debug.xml",
+ "ref/netcore50/de/System.Diagnostics.Debug.xml",
+ "ref/netcore50/es/System.Diagnostics.Debug.xml",
+ "ref/netcore50/fr/System.Diagnostics.Debug.xml",
+ "ref/netcore50/it/System.Diagnostics.Debug.xml",
+ "ref/netcore50/ja/System.Diagnostics.Debug.xml",
+ "ref/netcore50/ko/System.Diagnostics.Debug.xml",
+ "ref/netcore50/ru/System.Diagnostics.Debug.xml",
+ "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml",
+ "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/System.Diagnostics.Debug.dll",
+ "ref/netstandard1.0/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/de/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/es/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/it/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/System.Diagnostics.Debug.dll",
+ "ref/netstandard1.3/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/de/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/es/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/it/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml",
+ "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Diagnostics.DiagnosticSource/4.0.0": {
+ "sha512": "YKglnq4BMTJxfcr6nuT08g+yJ0UxdePIHxosiLuljuHIUR6t4KhFsyaHOaOc1Ofqp0PUvJ0EmcgiEz6T7vEx3w==",
+ "type": "package",
+ "path": "System.Diagnostics.DiagnosticSource/4.0.0",
+ "files": [
+ "System.Diagnostics.DiagnosticSource.4.0.0.nupkg.sha512",
+ "System.Diagnostics.DiagnosticSource.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/net46/System.Diagnostics.DiagnosticSource.dll",
+ "lib/net46/System.Diagnostics.DiagnosticSource.xml",
+ "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll",
+ "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml",
+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll",
+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml",
+ "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll",
+ "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml"
+ ]
+ },
+ "System.Diagnostics.Tools/4.0.1": {
+ "sha512": "xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==",
+ "type": "package",
+ "path": "System.Diagnostics.Tools/4.0.1",
+ "files": [
+ "System.Diagnostics.Tools.4.0.1.nupkg.sha512",
+ "System.Diagnostics.Tools.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Diagnostics.Tools.dll",
+ "ref/netcore50/System.Diagnostics.Tools.xml",
+ "ref/netcore50/de/System.Diagnostics.Tools.xml",
+ "ref/netcore50/es/System.Diagnostics.Tools.xml",
+ "ref/netcore50/fr/System.Diagnostics.Tools.xml",
+ "ref/netcore50/it/System.Diagnostics.Tools.xml",
+ "ref/netcore50/ja/System.Diagnostics.Tools.xml",
+ "ref/netcore50/ko/System.Diagnostics.Tools.xml",
+ "ref/netcore50/ru/System.Diagnostics.Tools.xml",
+ "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml",
+ "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/System.Diagnostics.Tools.dll",
+ "ref/netstandard1.0/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/de/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/es/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/it/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml",
+ "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Diagnostics.Tracing/4.1.0": {
+ "sha512": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==",
+ "type": "package",
+ "path": "System.Diagnostics.Tracing/4.1.0",
+ "files": [
+ "System.Diagnostics.Tracing.4.1.0.nupkg.sha512",
+ "System.Diagnostics.Tracing.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.Diagnostics.Tracing.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.Diagnostics.Tracing.dll",
+ "ref/netcore50/System.Diagnostics.Tracing.dll",
+ "ref/netcore50/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/de/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/es/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/fr/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/it/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/ja/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/ko/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/ru/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml",
+ "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/System.Diagnostics.Tracing.dll",
+ "ref/netstandard1.1/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/System.Diagnostics.Tracing.dll",
+ "ref/netstandard1.2/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/System.Diagnostics.Tracing.dll",
+ "ref/netstandard1.3/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/System.Diagnostics.Tracing.dll",
+ "ref/netstandard1.5/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml",
+ "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Globalization/4.0.11": {
+ "sha512": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "type": "package",
+ "path": "System.Globalization/4.0.11",
+ "files": [
+ "System.Globalization.4.0.11.nupkg.sha512",
+ "System.Globalization.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Globalization.dll",
+ "ref/netcore50/System.Globalization.xml",
+ "ref/netcore50/de/System.Globalization.xml",
+ "ref/netcore50/es/System.Globalization.xml",
+ "ref/netcore50/fr/System.Globalization.xml",
+ "ref/netcore50/it/System.Globalization.xml",
+ "ref/netcore50/ja/System.Globalization.xml",
+ "ref/netcore50/ko/System.Globalization.xml",
+ "ref/netcore50/ru/System.Globalization.xml",
+ "ref/netcore50/zh-hans/System.Globalization.xml",
+ "ref/netcore50/zh-hant/System.Globalization.xml",
+ "ref/netstandard1.0/System.Globalization.dll",
+ "ref/netstandard1.0/System.Globalization.xml",
+ "ref/netstandard1.0/de/System.Globalization.xml",
+ "ref/netstandard1.0/es/System.Globalization.xml",
+ "ref/netstandard1.0/fr/System.Globalization.xml",
+ "ref/netstandard1.0/it/System.Globalization.xml",
+ "ref/netstandard1.0/ja/System.Globalization.xml",
+ "ref/netstandard1.0/ko/System.Globalization.xml",
+ "ref/netstandard1.0/ru/System.Globalization.xml",
+ "ref/netstandard1.0/zh-hans/System.Globalization.xml",
+ "ref/netstandard1.0/zh-hant/System.Globalization.xml",
+ "ref/netstandard1.3/System.Globalization.dll",
+ "ref/netstandard1.3/System.Globalization.xml",
+ "ref/netstandard1.3/de/System.Globalization.xml",
+ "ref/netstandard1.3/es/System.Globalization.xml",
+ "ref/netstandard1.3/fr/System.Globalization.xml",
+ "ref/netstandard1.3/it/System.Globalization.xml",
+ "ref/netstandard1.3/ja/System.Globalization.xml",
+ "ref/netstandard1.3/ko/System.Globalization.xml",
+ "ref/netstandard1.3/ru/System.Globalization.xml",
+ "ref/netstandard1.3/zh-hans/System.Globalization.xml",
+ "ref/netstandard1.3/zh-hant/System.Globalization.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Globalization.Calendars/4.0.1": {
+ "sha512": "L1c6IqeQ88vuzC1P81JeHmHA8mxq8a18NUBNXnIY/BVb+TCyAaGIFbhpZt60h9FJNmisymoQkHEFSE9Vslja1Q==",
+ "type": "package",
+ "path": "System.Globalization.Calendars/4.0.1",
+ "files": [
+ "System.Globalization.Calendars.4.0.1.nupkg.sha512",
+ "System.Globalization.Calendars.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Globalization.Calendars.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Globalization.Calendars.dll",
+ "ref/netstandard1.3/System.Globalization.Calendars.dll",
+ "ref/netstandard1.3/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/de/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/es/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/fr/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/it/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/ja/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/ko/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/ru/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml",
+ "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Globalization.Extensions/4.0.1": {
+ "sha512": "KKo23iKeOaIg61SSXwjANN7QYDr/3op3OWGGzDzz7mypx0Za0fZSeG0l6cco8Ntp8YMYkIQcAqlk8yhm5/Uhcg==",
+ "type": "package",
+ "path": "System.Globalization.Extensions/4.0.1",
+ "files": [
+ "System.Globalization.Extensions.4.0.1.nupkg.sha512",
+ "System.Globalization.Extensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Globalization.Extensions.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Globalization.Extensions.dll",
+ "ref/netstandard1.3/System.Globalization.Extensions.dll",
+ "ref/netstandard1.3/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/de/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/es/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/fr/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/it/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/ja/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/ko/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/ru/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml",
+ "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll",
+ "runtimes/win/lib/net46/System.Globalization.Extensions.dll",
+ "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll"
+ ]
+ },
+ "System.IO/4.1.0": {
+ "sha512": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "type": "package",
+ "path": "System.IO/4.1.0",
+ "files": [
+ "System.IO.4.1.0.nupkg.sha512",
+ "System.IO.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.IO.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.IO.dll",
+ "ref/netcore50/System.IO.dll",
+ "ref/netcore50/System.IO.xml",
+ "ref/netcore50/de/System.IO.xml",
+ "ref/netcore50/es/System.IO.xml",
+ "ref/netcore50/fr/System.IO.xml",
+ "ref/netcore50/it/System.IO.xml",
+ "ref/netcore50/ja/System.IO.xml",
+ "ref/netcore50/ko/System.IO.xml",
+ "ref/netcore50/ru/System.IO.xml",
+ "ref/netcore50/zh-hans/System.IO.xml",
+ "ref/netcore50/zh-hant/System.IO.xml",
+ "ref/netstandard1.0/System.IO.dll",
+ "ref/netstandard1.0/System.IO.xml",
+ "ref/netstandard1.0/de/System.IO.xml",
+ "ref/netstandard1.0/es/System.IO.xml",
+ "ref/netstandard1.0/fr/System.IO.xml",
+ "ref/netstandard1.0/it/System.IO.xml",
+ "ref/netstandard1.0/ja/System.IO.xml",
+ "ref/netstandard1.0/ko/System.IO.xml",
+ "ref/netstandard1.0/ru/System.IO.xml",
+ "ref/netstandard1.0/zh-hans/System.IO.xml",
+ "ref/netstandard1.0/zh-hant/System.IO.xml",
+ "ref/netstandard1.3/System.IO.dll",
+ "ref/netstandard1.3/System.IO.xml",
+ "ref/netstandard1.3/de/System.IO.xml",
+ "ref/netstandard1.3/es/System.IO.xml",
+ "ref/netstandard1.3/fr/System.IO.xml",
+ "ref/netstandard1.3/it/System.IO.xml",
+ "ref/netstandard1.3/ja/System.IO.xml",
+ "ref/netstandard1.3/ko/System.IO.xml",
+ "ref/netstandard1.3/ru/System.IO.xml",
+ "ref/netstandard1.3/zh-hans/System.IO.xml",
+ "ref/netstandard1.3/zh-hant/System.IO.xml",
+ "ref/netstandard1.5/System.IO.dll",
+ "ref/netstandard1.5/System.IO.xml",
+ "ref/netstandard1.5/de/System.IO.xml",
+ "ref/netstandard1.5/es/System.IO.xml",
+ "ref/netstandard1.5/fr/System.IO.xml",
+ "ref/netstandard1.5/it/System.IO.xml",
+ "ref/netstandard1.5/ja/System.IO.xml",
+ "ref/netstandard1.5/ko/System.IO.xml",
+ "ref/netstandard1.5/ru/System.IO.xml",
+ "ref/netstandard1.5/zh-hans/System.IO.xml",
+ "ref/netstandard1.5/zh-hant/System.IO.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.IO.Compression/4.1.0": {
+ "sha512": "TjnBS6eztThSzeSib+WyVbLzEdLKUcEHN69VtS3u8aAsSc18FU6xCZlNWWsEd8SKcXAE+y1sOu7VbU8sUeM0sg==",
+ "type": "package",
+ "path": "System.IO.Compression/4.1.0",
+ "files": [
+ "System.IO.Compression.4.1.0.nupkg.sha512",
+ "System.IO.Compression.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net46/System.IO.Compression.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net46/System.IO.Compression.dll",
+ "ref/netcore50/System.IO.Compression.dll",
+ "ref/netcore50/System.IO.Compression.xml",
+ "ref/netcore50/de/System.IO.Compression.xml",
+ "ref/netcore50/es/System.IO.Compression.xml",
+ "ref/netcore50/fr/System.IO.Compression.xml",
+ "ref/netcore50/it/System.IO.Compression.xml",
+ "ref/netcore50/ja/System.IO.Compression.xml",
+ "ref/netcore50/ko/System.IO.Compression.xml",
+ "ref/netcore50/ru/System.IO.Compression.xml",
+ "ref/netcore50/zh-hans/System.IO.Compression.xml",
+ "ref/netcore50/zh-hant/System.IO.Compression.xml",
+ "ref/netstandard1.1/System.IO.Compression.dll",
+ "ref/netstandard1.1/System.IO.Compression.xml",
+ "ref/netstandard1.1/de/System.IO.Compression.xml",
+ "ref/netstandard1.1/es/System.IO.Compression.xml",
+ "ref/netstandard1.1/fr/System.IO.Compression.xml",
+ "ref/netstandard1.1/it/System.IO.Compression.xml",
+ "ref/netstandard1.1/ja/System.IO.Compression.xml",
+ "ref/netstandard1.1/ko/System.IO.Compression.xml",
+ "ref/netstandard1.1/ru/System.IO.Compression.xml",
+ "ref/netstandard1.1/zh-hans/System.IO.Compression.xml",
+ "ref/netstandard1.1/zh-hant/System.IO.Compression.xml",
+ "ref/netstandard1.3/System.IO.Compression.dll",
+ "ref/netstandard1.3/System.IO.Compression.xml",
+ "ref/netstandard1.3/de/System.IO.Compression.xml",
+ "ref/netstandard1.3/es/System.IO.Compression.xml",
+ "ref/netstandard1.3/fr/System.IO.Compression.xml",
+ "ref/netstandard1.3/it/System.IO.Compression.xml",
+ "ref/netstandard1.3/ja/System.IO.Compression.xml",
+ "ref/netstandard1.3/ko/System.IO.Compression.xml",
+ "ref/netstandard1.3/ru/System.IO.Compression.xml",
+ "ref/netstandard1.3/zh-hans/System.IO.Compression.xml",
+ "ref/netstandard1.3/zh-hant/System.IO.Compression.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll",
+ "runtimes/win/lib/net46/System.IO.Compression.dll",
+ "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll"
+ ]
+ },
+ "System.IO.Compression.ZipFile/4.0.1": {
+ "sha512": "hBQYJzfTbQURF10nLhd+az2NHxsU6MU7AB8RUf4IolBP5lOAm4Luho851xl+CqslmhI5ZH/el8BlngEk4lBkaQ==",
+ "type": "package",
+ "path": "System.IO.Compression.ZipFile/4.0.1",
+ "files": [
+ "System.IO.Compression.ZipFile.4.0.1.nupkg.sha512",
+ "System.IO.Compression.ZipFile.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.IO.Compression.ZipFile.dll",
+ "lib/netstandard1.3/System.IO.Compression.ZipFile.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.IO.Compression.ZipFile.dll",
+ "ref/netstandard1.3/System.IO.Compression.ZipFile.dll",
+ "ref/netstandard1.3/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml",
+ "ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.IO.FileSystem/4.0.1": {
+ "sha512": "IBErlVq5jOggAD69bg1t0pJcHaDbJbWNUZTPI96fkYWzwYbN6D9wRHMULLDd9dHsl7C2YsxXL31LMfPI1SWt8w==",
+ "type": "package",
+ "path": "System.IO.FileSystem/4.0.1",
+ "files": [
+ "System.IO.FileSystem.4.0.1.nupkg.sha512",
+ "System.IO.FileSystem.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.IO.FileSystem.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.IO.FileSystem.dll",
+ "ref/netstandard1.3/System.IO.FileSystem.dll",
+ "ref/netstandard1.3/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/de/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/es/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/fr/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/it/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/ja/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/ko/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/ru/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml",
+ "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.IO.FileSystem.Primitives/4.0.1": {
+ "sha512": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==",
+ "type": "package",
+ "path": "System.IO.FileSystem.Primitives/4.0.1",
+ "files": [
+ "System.IO.FileSystem.Primitives.4.0.1.nupkg.sha512",
+ "System.IO.FileSystem.Primitives.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.IO.FileSystem.Primitives.dll",
+ "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.IO.FileSystem.Primitives.dll",
+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll",
+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml",
+ "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Linq/4.1.0": {
+ "sha512": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==",
+ "type": "package",
+ "path": "System.Linq/4.1.0",
+ "files": [
+ "System.Linq.4.1.0.nupkg.sha512",
+ "System.Linq.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net463/System.Linq.dll",
+ "lib/netcore50/System.Linq.dll",
+ "lib/netstandard1.6/System.Linq.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net463/System.Linq.dll",
+ "ref/netcore50/System.Linq.dll",
+ "ref/netcore50/System.Linq.xml",
+ "ref/netcore50/de/System.Linq.xml",
+ "ref/netcore50/es/System.Linq.xml",
+ "ref/netcore50/fr/System.Linq.xml",
+ "ref/netcore50/it/System.Linq.xml",
+ "ref/netcore50/ja/System.Linq.xml",
+ "ref/netcore50/ko/System.Linq.xml",
+ "ref/netcore50/ru/System.Linq.xml",
+ "ref/netcore50/zh-hans/System.Linq.xml",
+ "ref/netcore50/zh-hant/System.Linq.xml",
+ "ref/netstandard1.0/System.Linq.dll",
+ "ref/netstandard1.0/System.Linq.xml",
+ "ref/netstandard1.0/de/System.Linq.xml",
+ "ref/netstandard1.0/es/System.Linq.xml",
+ "ref/netstandard1.0/fr/System.Linq.xml",
+ "ref/netstandard1.0/it/System.Linq.xml",
+ "ref/netstandard1.0/ja/System.Linq.xml",
+ "ref/netstandard1.0/ko/System.Linq.xml",
+ "ref/netstandard1.0/ru/System.Linq.xml",
+ "ref/netstandard1.0/zh-hans/System.Linq.xml",
+ "ref/netstandard1.0/zh-hant/System.Linq.xml",
+ "ref/netstandard1.6/System.Linq.dll",
+ "ref/netstandard1.6/System.Linq.xml",
+ "ref/netstandard1.6/de/System.Linq.xml",
+ "ref/netstandard1.6/es/System.Linq.xml",
+ "ref/netstandard1.6/fr/System.Linq.xml",
+ "ref/netstandard1.6/it/System.Linq.xml",
+ "ref/netstandard1.6/ja/System.Linq.xml",
+ "ref/netstandard1.6/ko/System.Linq.xml",
+ "ref/netstandard1.6/ru/System.Linq.xml",
+ "ref/netstandard1.6/zh-hans/System.Linq.xml",
+ "ref/netstandard1.6/zh-hant/System.Linq.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Linq.Expressions/4.1.0": {
+ "sha512": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==",
+ "type": "package",
+ "path": "System.Linq.Expressions/4.1.0",
+ "files": [
+ "System.Linq.Expressions.4.1.0.nupkg.sha512",
+ "System.Linq.Expressions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net463/System.Linq.Expressions.dll",
+ "lib/netcore50/System.Linq.Expressions.dll",
+ "lib/netstandard1.6/System.Linq.Expressions.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net463/System.Linq.Expressions.dll",
+ "ref/netcore50/System.Linq.Expressions.dll",
+ "ref/netcore50/System.Linq.Expressions.xml",
+ "ref/netcore50/de/System.Linq.Expressions.xml",
+ "ref/netcore50/es/System.Linq.Expressions.xml",
+ "ref/netcore50/fr/System.Linq.Expressions.xml",
+ "ref/netcore50/it/System.Linq.Expressions.xml",
+ "ref/netcore50/ja/System.Linq.Expressions.xml",
+ "ref/netcore50/ko/System.Linq.Expressions.xml",
+ "ref/netcore50/ru/System.Linq.Expressions.xml",
+ "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
+ "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/System.Linq.Expressions.dll",
+ "ref/netstandard1.0/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/de/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/es/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/fr/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/it/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/ja/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/ko/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/ru/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml",
+ "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/System.Linq.Expressions.dll",
+ "ref/netstandard1.3/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/de/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/es/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/fr/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/it/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/ja/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/ko/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/ru/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml",
+ "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/System.Linq.Expressions.dll",
+ "ref/netstandard1.6/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/de/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/es/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/fr/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/it/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/ja/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/ko/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/ru/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml",
+ "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll"
+ ]
+ },
+ "System.Net.Http/4.1.0": {
+ "sha512": "ULq9g3SOPVuupt+Y3U+A37coXzdNisB1neFCSKzBwo182u0RDddKJF8I5+HfyXqK6OhJPgeoAwWXrbiUXuRDsg==",
+ "type": "package",
+ "path": "System.Net.Http/4.1.0",
+ "files": [
+ "System.Net.Http.4.1.0.nupkg.sha512",
+ "System.Net.Http.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/Xamarinmac20/_._",
+ "lib/monoandroid10/_._",
+ "lib/monotouch10/_._",
+ "lib/net45/_._",
+ "lib/net46/System.Net.Http.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/Xamarinmac20/_._",
+ "ref/monoandroid10/_._",
+ "ref/monotouch10/_._",
+ "ref/net45/_._",
+ "ref/net46/System.Net.Http.dll",
+ "ref/net46/System.Net.Http.xml",
+ "ref/net46/de/System.Net.Http.xml",
+ "ref/net46/es/System.Net.Http.xml",
+ "ref/net46/fr/System.Net.Http.xml",
+ "ref/net46/it/System.Net.Http.xml",
+ "ref/net46/ja/System.Net.Http.xml",
+ "ref/net46/ko/System.Net.Http.xml",
+ "ref/net46/ru/System.Net.Http.xml",
+ "ref/net46/zh-hans/System.Net.Http.xml",
+ "ref/net46/zh-hant/System.Net.Http.xml",
+ "ref/netcore50/System.Net.Http.dll",
+ "ref/netcore50/System.Net.Http.xml",
+ "ref/netcore50/de/System.Net.Http.xml",
+ "ref/netcore50/es/System.Net.Http.xml",
+ "ref/netcore50/fr/System.Net.Http.xml",
+ "ref/netcore50/it/System.Net.Http.xml",
+ "ref/netcore50/ja/System.Net.Http.xml",
+ "ref/netcore50/ko/System.Net.Http.xml",
+ "ref/netcore50/ru/System.Net.Http.xml",
+ "ref/netcore50/zh-hans/System.Net.Http.xml",
+ "ref/netcore50/zh-hant/System.Net.Http.xml",
+ "ref/netstandard1.1/System.Net.Http.dll",
+ "ref/netstandard1.1/System.Net.Http.xml",
+ "ref/netstandard1.1/de/System.Net.Http.xml",
+ "ref/netstandard1.1/es/System.Net.Http.xml",
+ "ref/netstandard1.1/fr/System.Net.Http.xml",
+ "ref/netstandard1.1/it/System.Net.Http.xml",
+ "ref/netstandard1.1/ja/System.Net.Http.xml",
+ "ref/netstandard1.1/ko/System.Net.Http.xml",
+ "ref/netstandard1.1/ru/System.Net.Http.xml",
+ "ref/netstandard1.1/zh-hans/System.Net.Http.xml",
+ "ref/netstandard1.1/zh-hant/System.Net.Http.xml",
+ "ref/netstandard1.3/System.Net.Http.dll",
+ "ref/netstandard1.3/System.Net.Http.xml",
+ "ref/netstandard1.3/de/System.Net.Http.xml",
+ "ref/netstandard1.3/es/System.Net.Http.xml",
+ "ref/netstandard1.3/fr/System.Net.Http.xml",
+ "ref/netstandard1.3/it/System.Net.Http.xml",
+ "ref/netstandard1.3/ja/System.Net.Http.xml",
+ "ref/netstandard1.3/ko/System.Net.Http.xml",
+ "ref/netstandard1.3/ru/System.Net.Http.xml",
+ "ref/netstandard1.3/zh-hans/System.Net.Http.xml",
+ "ref/netstandard1.3/zh-hant/System.Net.Http.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll",
+ "runtimes/win/lib/net46/System.Net.Http.dll",
+ "runtimes/win/lib/netcore50/System.Net.Http.dll",
+ "runtimes/win/lib/netstandard1.3/System.Net.Http.dll"
+ ]
+ },
+ "System.Net.Primitives/4.0.11": {
+ "sha512": "hVvfl4405DRjA2408luZekbPhplJK03j2Y2lSfMlny7GHXlkByw1iLnc9mgKW0GdQn73vvMcWrWewAhylXA4Nw==",
+ "type": "package",
+ "path": "System.Net.Primitives/4.0.11",
+ "files": [
+ "System.Net.Primitives.4.0.11.nupkg.sha512",
+ "System.Net.Primitives.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Net.Primitives.dll",
+ "ref/netcore50/System.Net.Primitives.xml",
+ "ref/netcore50/de/System.Net.Primitives.xml",
+ "ref/netcore50/es/System.Net.Primitives.xml",
+ "ref/netcore50/fr/System.Net.Primitives.xml",
+ "ref/netcore50/it/System.Net.Primitives.xml",
+ "ref/netcore50/ja/System.Net.Primitives.xml",
+ "ref/netcore50/ko/System.Net.Primitives.xml",
+ "ref/netcore50/ru/System.Net.Primitives.xml",
+ "ref/netcore50/zh-hans/System.Net.Primitives.xml",
+ "ref/netcore50/zh-hant/System.Net.Primitives.xml",
+ "ref/netstandard1.0/System.Net.Primitives.dll",
+ "ref/netstandard1.0/System.Net.Primitives.xml",
+ "ref/netstandard1.0/de/System.Net.Primitives.xml",
+ "ref/netstandard1.0/es/System.Net.Primitives.xml",
+ "ref/netstandard1.0/fr/System.Net.Primitives.xml",
+ "ref/netstandard1.0/it/System.Net.Primitives.xml",
+ "ref/netstandard1.0/ja/System.Net.Primitives.xml",
+ "ref/netstandard1.0/ko/System.Net.Primitives.xml",
+ "ref/netstandard1.0/ru/System.Net.Primitives.xml",
+ "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml",
+ "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml",
+ "ref/netstandard1.1/System.Net.Primitives.dll",
+ "ref/netstandard1.1/System.Net.Primitives.xml",
+ "ref/netstandard1.1/de/System.Net.Primitives.xml",
+ "ref/netstandard1.1/es/System.Net.Primitives.xml",
+ "ref/netstandard1.1/fr/System.Net.Primitives.xml",
+ "ref/netstandard1.1/it/System.Net.Primitives.xml",
+ "ref/netstandard1.1/ja/System.Net.Primitives.xml",
+ "ref/netstandard1.1/ko/System.Net.Primitives.xml",
+ "ref/netstandard1.1/ru/System.Net.Primitives.xml",
+ "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml",
+ "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml",
+ "ref/netstandard1.3/System.Net.Primitives.dll",
+ "ref/netstandard1.3/System.Net.Primitives.xml",
+ "ref/netstandard1.3/de/System.Net.Primitives.xml",
+ "ref/netstandard1.3/es/System.Net.Primitives.xml",
+ "ref/netstandard1.3/fr/System.Net.Primitives.xml",
+ "ref/netstandard1.3/it/System.Net.Primitives.xml",
+ "ref/netstandard1.3/ja/System.Net.Primitives.xml",
+ "ref/netstandard1.3/ko/System.Net.Primitives.xml",
+ "ref/netstandard1.3/ru/System.Net.Primitives.xml",
+ "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml",
+ "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Net.Sockets/4.1.0": {
+ "sha512": "xAz0N3dAV/aR/9g8r0Y5oEqU1JRsz29F5EGb/WVHmX3jVSLqi2/92M5hTad2aNWovruXrJpJtgZ9fccPMG9uSw==",
+ "type": "package",
+ "path": "System.Net.Sockets/4.1.0",
+ "files": [
+ "System.Net.Sockets.4.1.0.nupkg.sha512",
+ "System.Net.Sockets.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Net.Sockets.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Net.Sockets.dll",
+ "ref/netstandard1.3/System.Net.Sockets.dll",
+ "ref/netstandard1.3/System.Net.Sockets.xml",
+ "ref/netstandard1.3/de/System.Net.Sockets.xml",
+ "ref/netstandard1.3/es/System.Net.Sockets.xml",
+ "ref/netstandard1.3/fr/System.Net.Sockets.xml",
+ "ref/netstandard1.3/it/System.Net.Sockets.xml",
+ "ref/netstandard1.3/ja/System.Net.Sockets.xml",
+ "ref/netstandard1.3/ko/System.Net.Sockets.xml",
+ "ref/netstandard1.3/ru/System.Net.Sockets.xml",
+ "ref/netstandard1.3/zh-hans/System.Net.Sockets.xml",
+ "ref/netstandard1.3/zh-hant/System.Net.Sockets.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.ObjectModel/4.0.12": {
+ "sha512": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==",
+ "type": "package",
+ "path": "System.ObjectModel/4.0.12",
+ "files": [
+ "System.ObjectModel.4.0.12.nupkg.sha512",
+ "System.ObjectModel.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.ObjectModel.dll",
+ "lib/netstandard1.3/System.ObjectModel.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.ObjectModel.dll",
+ "ref/netcore50/System.ObjectModel.xml",
+ "ref/netcore50/de/System.ObjectModel.xml",
+ "ref/netcore50/es/System.ObjectModel.xml",
+ "ref/netcore50/fr/System.ObjectModel.xml",
+ "ref/netcore50/it/System.ObjectModel.xml",
+ "ref/netcore50/ja/System.ObjectModel.xml",
+ "ref/netcore50/ko/System.ObjectModel.xml",
+ "ref/netcore50/ru/System.ObjectModel.xml",
+ "ref/netcore50/zh-hans/System.ObjectModel.xml",
+ "ref/netcore50/zh-hant/System.ObjectModel.xml",
+ "ref/netstandard1.0/System.ObjectModel.dll",
+ "ref/netstandard1.0/System.ObjectModel.xml",
+ "ref/netstandard1.0/de/System.ObjectModel.xml",
+ "ref/netstandard1.0/es/System.ObjectModel.xml",
+ "ref/netstandard1.0/fr/System.ObjectModel.xml",
+ "ref/netstandard1.0/it/System.ObjectModel.xml",
+ "ref/netstandard1.0/ja/System.ObjectModel.xml",
+ "ref/netstandard1.0/ko/System.ObjectModel.xml",
+ "ref/netstandard1.0/ru/System.ObjectModel.xml",
+ "ref/netstandard1.0/zh-hans/System.ObjectModel.xml",
+ "ref/netstandard1.0/zh-hant/System.ObjectModel.xml",
+ "ref/netstandard1.3/System.ObjectModel.dll",
+ "ref/netstandard1.3/System.ObjectModel.xml",
+ "ref/netstandard1.3/de/System.ObjectModel.xml",
+ "ref/netstandard1.3/es/System.ObjectModel.xml",
+ "ref/netstandard1.3/fr/System.ObjectModel.xml",
+ "ref/netstandard1.3/it/System.ObjectModel.xml",
+ "ref/netstandard1.3/ja/System.ObjectModel.xml",
+ "ref/netstandard1.3/ko/System.ObjectModel.xml",
+ "ref/netstandard1.3/ru/System.ObjectModel.xml",
+ "ref/netstandard1.3/zh-hans/System.ObjectModel.xml",
+ "ref/netstandard1.3/zh-hant/System.ObjectModel.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Reflection/4.1.0": {
+ "sha512": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "type": "package",
+ "path": "System.Reflection/4.1.0",
+ "files": [
+ "System.Reflection.4.1.0.nupkg.sha512",
+ "System.Reflection.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.Reflection.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.Reflection.dll",
+ "ref/netcore50/System.Reflection.dll",
+ "ref/netcore50/System.Reflection.xml",
+ "ref/netcore50/de/System.Reflection.xml",
+ "ref/netcore50/es/System.Reflection.xml",
+ "ref/netcore50/fr/System.Reflection.xml",
+ "ref/netcore50/it/System.Reflection.xml",
+ "ref/netcore50/ja/System.Reflection.xml",
+ "ref/netcore50/ko/System.Reflection.xml",
+ "ref/netcore50/ru/System.Reflection.xml",
+ "ref/netcore50/zh-hans/System.Reflection.xml",
+ "ref/netcore50/zh-hant/System.Reflection.xml",
+ "ref/netstandard1.0/System.Reflection.dll",
+ "ref/netstandard1.0/System.Reflection.xml",
+ "ref/netstandard1.0/de/System.Reflection.xml",
+ "ref/netstandard1.0/es/System.Reflection.xml",
+ "ref/netstandard1.0/fr/System.Reflection.xml",
+ "ref/netstandard1.0/it/System.Reflection.xml",
+ "ref/netstandard1.0/ja/System.Reflection.xml",
+ "ref/netstandard1.0/ko/System.Reflection.xml",
+ "ref/netstandard1.0/ru/System.Reflection.xml",
+ "ref/netstandard1.0/zh-hans/System.Reflection.xml",
+ "ref/netstandard1.0/zh-hant/System.Reflection.xml",
+ "ref/netstandard1.3/System.Reflection.dll",
+ "ref/netstandard1.3/System.Reflection.xml",
+ "ref/netstandard1.3/de/System.Reflection.xml",
+ "ref/netstandard1.3/es/System.Reflection.xml",
+ "ref/netstandard1.3/fr/System.Reflection.xml",
+ "ref/netstandard1.3/it/System.Reflection.xml",
+ "ref/netstandard1.3/ja/System.Reflection.xml",
+ "ref/netstandard1.3/ko/System.Reflection.xml",
+ "ref/netstandard1.3/ru/System.Reflection.xml",
+ "ref/netstandard1.3/zh-hans/System.Reflection.xml",
+ "ref/netstandard1.3/zh-hant/System.Reflection.xml",
+ "ref/netstandard1.5/System.Reflection.dll",
+ "ref/netstandard1.5/System.Reflection.xml",
+ "ref/netstandard1.5/de/System.Reflection.xml",
+ "ref/netstandard1.5/es/System.Reflection.xml",
+ "ref/netstandard1.5/fr/System.Reflection.xml",
+ "ref/netstandard1.5/it/System.Reflection.xml",
+ "ref/netstandard1.5/ja/System.Reflection.xml",
+ "ref/netstandard1.5/ko/System.Reflection.xml",
+ "ref/netstandard1.5/ru/System.Reflection.xml",
+ "ref/netstandard1.5/zh-hans/System.Reflection.xml",
+ "ref/netstandard1.5/zh-hant/System.Reflection.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Reflection.Emit/4.0.1": {
+ "sha512": "P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==",
+ "type": "package",
+ "path": "System.Reflection.Emit/4.0.1",
+ "files": [
+ "System.Reflection.Emit.4.0.1.nupkg.sha512",
+ "System.Reflection.Emit.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Reflection.Emit.dll",
+ "lib/netstandard1.3/System.Reflection.Emit.dll",
+ "lib/xamarinmac20/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/net45/_._",
+ "ref/netstandard1.1/System.Reflection.Emit.dll",
+ "ref/netstandard1.1/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/de/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/es/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/fr/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/it/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/ja/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/ko/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/ru/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml",
+ "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml",
+ "ref/xamarinmac20/_._"
+ ]
+ },
+ "System.Reflection.Emit.ILGeneration/4.0.1": {
+ "sha512": "Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==",
+ "type": "package",
+ "path": "System.Reflection.Emit.ILGeneration/4.0.1",
+ "files": [
+ "System.Reflection.Emit.ILGeneration.4.0.1.nupkg.sha512",
+ "System.Reflection.Emit.ILGeneration.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/net45/_._",
+ "lib/netcore50/System.Reflection.Emit.ILGeneration.dll",
+ "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll",
+ "lib/portable-net45+wp8/_._",
+ "lib/wp80/_._",
+ "ref/net45/_._",
+ "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll",
+ "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml",
+ "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml",
+ "ref/portable-net45+wp8/_._",
+ "ref/wp80/_._",
+ "runtimes/aot/lib/netcore50/_._"
+ ]
+ },
+ "System.Reflection.Emit.Lightweight/4.0.1": {
+ "sha512": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==",
+ "type": "package",
+ "path": "System.Reflection.Emit.Lightweight/4.0.1",
+ "files": [
+ "System.Reflection.Emit.Lightweight.4.0.1.nupkg.sha512",
+ "System.Reflection.Emit.Lightweight.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/net45/_._",
+ "lib/netcore50/System.Reflection.Emit.Lightweight.dll",
+ "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll",
+ "lib/portable-net45+wp8/_._",
+ "lib/wp80/_._",
+ "ref/net45/_._",
+ "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll",
+ "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml",
+ "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml",
+ "ref/portable-net45+wp8/_._",
+ "ref/wp80/_._",
+ "runtimes/aot/lib/netcore50/_._"
+ ]
+ },
+ "System.Reflection.Extensions/4.0.1": {
+ "sha512": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==",
+ "type": "package",
+ "path": "System.Reflection.Extensions/4.0.1",
+ "files": [
+ "System.Reflection.Extensions.4.0.1.nupkg.sha512",
+ "System.Reflection.Extensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Reflection.Extensions.dll",
+ "ref/netcore50/System.Reflection.Extensions.xml",
+ "ref/netcore50/de/System.Reflection.Extensions.xml",
+ "ref/netcore50/es/System.Reflection.Extensions.xml",
+ "ref/netcore50/fr/System.Reflection.Extensions.xml",
+ "ref/netcore50/it/System.Reflection.Extensions.xml",
+ "ref/netcore50/ja/System.Reflection.Extensions.xml",
+ "ref/netcore50/ko/System.Reflection.Extensions.xml",
+ "ref/netcore50/ru/System.Reflection.Extensions.xml",
+ "ref/netcore50/zh-hans/System.Reflection.Extensions.xml",
+ "ref/netcore50/zh-hant/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/System.Reflection.Extensions.dll",
+ "ref/netstandard1.0/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/de/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/es/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/fr/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/it/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/ja/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/ko/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/ru/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml",
+ "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Reflection.Primitives/4.0.1": {
+ "sha512": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "type": "package",
+ "path": "System.Reflection.Primitives/4.0.1",
+ "files": [
+ "System.Reflection.Primitives.4.0.1.nupkg.sha512",
+ "System.Reflection.Primitives.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Reflection.Primitives.dll",
+ "ref/netcore50/System.Reflection.Primitives.xml",
+ "ref/netcore50/de/System.Reflection.Primitives.xml",
+ "ref/netcore50/es/System.Reflection.Primitives.xml",
+ "ref/netcore50/fr/System.Reflection.Primitives.xml",
+ "ref/netcore50/it/System.Reflection.Primitives.xml",
+ "ref/netcore50/ja/System.Reflection.Primitives.xml",
+ "ref/netcore50/ko/System.Reflection.Primitives.xml",
+ "ref/netcore50/ru/System.Reflection.Primitives.xml",
+ "ref/netcore50/zh-hans/System.Reflection.Primitives.xml",
+ "ref/netcore50/zh-hant/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/System.Reflection.Primitives.dll",
+ "ref/netstandard1.0/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/de/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/es/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/fr/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/it/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/ja/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/ko/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/ru/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml",
+ "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Reflection.TypeExtensions/4.1.0": {
+ "sha512": "tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==",
+ "type": "package",
+ "path": "System.Reflection.TypeExtensions/4.1.0",
+ "files": [
+ "System.Reflection.TypeExtensions.4.1.0.nupkg.sha512",
+ "System.Reflection.TypeExtensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Reflection.TypeExtensions.dll",
+ "lib/net462/System.Reflection.TypeExtensions.dll",
+ "lib/netcore50/System.Reflection.TypeExtensions.dll",
+ "lib/netstandard1.5/System.Reflection.TypeExtensions.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Reflection.TypeExtensions.dll",
+ "ref/net462/System.Reflection.TypeExtensions.dll",
+ "ref/netstandard1.3/System.Reflection.TypeExtensions.dll",
+ "ref/netstandard1.3/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/System.Reflection.TypeExtensions.dll",
+ "ref/netstandard1.5/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml",
+ "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll"
+ ]
+ },
+ "System.Resources.ResourceManager/4.0.1": {
+ "sha512": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "type": "package",
+ "path": "System.Resources.ResourceManager/4.0.1",
+ "files": [
+ "System.Resources.ResourceManager.4.0.1.nupkg.sha512",
+ "System.Resources.ResourceManager.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Resources.ResourceManager.dll",
+ "ref/netcore50/System.Resources.ResourceManager.xml",
+ "ref/netcore50/de/System.Resources.ResourceManager.xml",
+ "ref/netcore50/es/System.Resources.ResourceManager.xml",
+ "ref/netcore50/fr/System.Resources.ResourceManager.xml",
+ "ref/netcore50/it/System.Resources.ResourceManager.xml",
+ "ref/netcore50/ja/System.Resources.ResourceManager.xml",
+ "ref/netcore50/ko/System.Resources.ResourceManager.xml",
+ "ref/netcore50/ru/System.Resources.ResourceManager.xml",
+ "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml",
+ "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/System.Resources.ResourceManager.dll",
+ "ref/netstandard1.0/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/de/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/es/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/it/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml",
+ "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Runtime/4.1.0": {
+ "sha512": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "type": "package",
+ "path": "System.Runtime/4.1.0",
+ "files": [
+ "System.Runtime.4.1.0.nupkg.sha512",
+ "System.Runtime.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.Runtime.dll",
+ "lib/portable-net45+win8+wp80+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.Runtime.dll",
+ "ref/netcore50/System.Runtime.dll",
+ "ref/netcore50/System.Runtime.xml",
+ "ref/netcore50/de/System.Runtime.xml",
+ "ref/netcore50/es/System.Runtime.xml",
+ "ref/netcore50/fr/System.Runtime.xml",
+ "ref/netcore50/it/System.Runtime.xml",
+ "ref/netcore50/ja/System.Runtime.xml",
+ "ref/netcore50/ko/System.Runtime.xml",
+ "ref/netcore50/ru/System.Runtime.xml",
+ "ref/netcore50/zh-hans/System.Runtime.xml",
+ "ref/netcore50/zh-hant/System.Runtime.xml",
+ "ref/netstandard1.0/System.Runtime.dll",
+ "ref/netstandard1.0/System.Runtime.xml",
+ "ref/netstandard1.0/de/System.Runtime.xml",
+ "ref/netstandard1.0/es/System.Runtime.xml",
+ "ref/netstandard1.0/fr/System.Runtime.xml",
+ "ref/netstandard1.0/it/System.Runtime.xml",
+ "ref/netstandard1.0/ja/System.Runtime.xml",
+ "ref/netstandard1.0/ko/System.Runtime.xml",
+ "ref/netstandard1.0/ru/System.Runtime.xml",
+ "ref/netstandard1.0/zh-hans/System.Runtime.xml",
+ "ref/netstandard1.0/zh-hant/System.Runtime.xml",
+ "ref/netstandard1.2/System.Runtime.dll",
+ "ref/netstandard1.2/System.Runtime.xml",
+ "ref/netstandard1.2/de/System.Runtime.xml",
+ "ref/netstandard1.2/es/System.Runtime.xml",
+ "ref/netstandard1.2/fr/System.Runtime.xml",
+ "ref/netstandard1.2/it/System.Runtime.xml",
+ "ref/netstandard1.2/ja/System.Runtime.xml",
+ "ref/netstandard1.2/ko/System.Runtime.xml",
+ "ref/netstandard1.2/ru/System.Runtime.xml",
+ "ref/netstandard1.2/zh-hans/System.Runtime.xml",
+ "ref/netstandard1.2/zh-hant/System.Runtime.xml",
+ "ref/netstandard1.3/System.Runtime.dll",
+ "ref/netstandard1.3/System.Runtime.xml",
+ "ref/netstandard1.3/de/System.Runtime.xml",
+ "ref/netstandard1.3/es/System.Runtime.xml",
+ "ref/netstandard1.3/fr/System.Runtime.xml",
+ "ref/netstandard1.3/it/System.Runtime.xml",
+ "ref/netstandard1.3/ja/System.Runtime.xml",
+ "ref/netstandard1.3/ko/System.Runtime.xml",
+ "ref/netstandard1.3/ru/System.Runtime.xml",
+ "ref/netstandard1.3/zh-hans/System.Runtime.xml",
+ "ref/netstandard1.3/zh-hant/System.Runtime.xml",
+ "ref/netstandard1.5/System.Runtime.dll",
+ "ref/netstandard1.5/System.Runtime.xml",
+ "ref/netstandard1.5/de/System.Runtime.xml",
+ "ref/netstandard1.5/es/System.Runtime.xml",
+ "ref/netstandard1.5/fr/System.Runtime.xml",
+ "ref/netstandard1.5/it/System.Runtime.xml",
+ "ref/netstandard1.5/ja/System.Runtime.xml",
+ "ref/netstandard1.5/ko/System.Runtime.xml",
+ "ref/netstandard1.5/ru/System.Runtime.xml",
+ "ref/netstandard1.5/zh-hans/System.Runtime.xml",
+ "ref/netstandard1.5/zh-hant/System.Runtime.xml",
+ "ref/portable-net45+win8+wp80+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Runtime.Extensions/4.1.0": {
+ "sha512": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "type": "package",
+ "path": "System.Runtime.Extensions/4.1.0",
+ "files": [
+ "System.Runtime.Extensions.4.1.0.nupkg.sha512",
+ "System.Runtime.Extensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.Runtime.Extensions.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.Runtime.Extensions.dll",
+ "ref/netcore50/System.Runtime.Extensions.dll",
+ "ref/netcore50/System.Runtime.Extensions.xml",
+ "ref/netcore50/de/System.Runtime.Extensions.xml",
+ "ref/netcore50/es/System.Runtime.Extensions.xml",
+ "ref/netcore50/fr/System.Runtime.Extensions.xml",
+ "ref/netcore50/it/System.Runtime.Extensions.xml",
+ "ref/netcore50/ja/System.Runtime.Extensions.xml",
+ "ref/netcore50/ko/System.Runtime.Extensions.xml",
+ "ref/netcore50/ru/System.Runtime.Extensions.xml",
+ "ref/netcore50/zh-hans/System.Runtime.Extensions.xml",
+ "ref/netcore50/zh-hant/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/System.Runtime.Extensions.dll",
+ "ref/netstandard1.0/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/de/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/es/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/fr/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/it/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/ja/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/ko/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/ru/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml",
+ "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/System.Runtime.Extensions.dll",
+ "ref/netstandard1.3/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/de/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/es/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/fr/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/it/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/ja/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/ko/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/ru/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml",
+ "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/System.Runtime.Extensions.dll",
+ "ref/netstandard1.5/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/de/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/es/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/fr/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/it/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/ja/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/ko/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/ru/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml",
+ "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Runtime.Handles/4.0.1": {
+ "sha512": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==",
+ "type": "package",
+ "path": "System.Runtime.Handles/4.0.1",
+ "files": [
+ "System.Runtime.Handles.4.0.1.nupkg.sha512",
+ "System.Runtime.Handles.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/_._",
+ "ref/netstandard1.3/System.Runtime.Handles.dll",
+ "ref/netstandard1.3/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/de/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/es/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/fr/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/it/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/ja/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/ko/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/ru/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml",
+ "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Runtime.InteropServices/4.1.0": {
+ "sha512": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==",
+ "type": "package",
+ "path": "System.Runtime.InteropServices/4.1.0",
+ "files": [
+ "System.Runtime.InteropServices.4.1.0.nupkg.sha512",
+ "System.Runtime.InteropServices.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net462/System.Runtime.InteropServices.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net462/System.Runtime.InteropServices.dll",
+ "ref/netcore50/System.Runtime.InteropServices.dll",
+ "ref/netcore50/System.Runtime.InteropServices.xml",
+ "ref/netcore50/de/System.Runtime.InteropServices.xml",
+ "ref/netcore50/es/System.Runtime.InteropServices.xml",
+ "ref/netcore50/fr/System.Runtime.InteropServices.xml",
+ "ref/netcore50/it/System.Runtime.InteropServices.xml",
+ "ref/netcore50/ja/System.Runtime.InteropServices.xml",
+ "ref/netcore50/ko/System.Runtime.InteropServices.xml",
+ "ref/netcore50/ru/System.Runtime.InteropServices.xml",
+ "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml",
+ "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/System.Runtime.InteropServices.dll",
+ "ref/netstandard1.1/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/de/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/es/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/it/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/System.Runtime.InteropServices.dll",
+ "ref/netstandard1.2/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/de/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/es/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/it/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/System.Runtime.InteropServices.dll",
+ "ref/netstandard1.3/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/de/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/es/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/it/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/System.Runtime.InteropServices.dll",
+ "ref/netstandard1.5/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/de/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/es/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/it/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml",
+ "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
+ "sha512": "hWPhJxc453RCa8Z29O91EmfGeZIHX1ZH2A8L6lYQVSaKzku2DfArSfMEb1/MYYzPQRJZeu0c9dmYeJKxW5Fgng==",
+ "type": "package",
+ "path": "System.Runtime.InteropServices.RuntimeInformation/4.0.0",
+ "files": [
+ "System.Runtime.InteropServices.RuntimeInformation.4.0.0.nupkg.sha512",
+ "System.Runtime.InteropServices.RuntimeInformation.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll"
+ ]
+ },
+ "System.Runtime.Numerics/4.0.1": {
+ "sha512": "+XbKFuzdmLP3d1o9pdHu2nxjNr2OEPqGzKeegPLCUMM71a0t50A/rOcIRmGs9wR7a8KuHX6hYs/7/TymIGLNqg==",
+ "type": "package",
+ "path": "System.Runtime.Numerics/4.0.1",
+ "files": [
+ "System.Runtime.Numerics.4.0.1.nupkg.sha512",
+ "System.Runtime.Numerics.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Runtime.Numerics.dll",
+ "lib/netstandard1.3/System.Runtime.Numerics.dll",
+ "lib/portable-net45+win8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Runtime.Numerics.dll",
+ "ref/netcore50/System.Runtime.Numerics.xml",
+ "ref/netcore50/de/System.Runtime.Numerics.xml",
+ "ref/netcore50/es/System.Runtime.Numerics.xml",
+ "ref/netcore50/fr/System.Runtime.Numerics.xml",
+ "ref/netcore50/it/System.Runtime.Numerics.xml",
+ "ref/netcore50/ja/System.Runtime.Numerics.xml",
+ "ref/netcore50/ko/System.Runtime.Numerics.xml",
+ "ref/netcore50/ru/System.Runtime.Numerics.xml",
+ "ref/netcore50/zh-hans/System.Runtime.Numerics.xml",
+ "ref/netcore50/zh-hant/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/System.Runtime.Numerics.dll",
+ "ref/netstandard1.1/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/de/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/es/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/fr/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/it/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/ja/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/ko/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/ru/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml",
+ "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml",
+ "ref/portable-net45+win8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Security.Cryptography.Algorithms/4.2.0": {
+ "sha512": "8JQFxbLVdrtIOKMDN38Fn0GWnqYZw/oMlwOUG/qz1jqChvyZlnUmu+0s7wLx7JYua/nAXoESpHA3iw11QFWhXg==",
+ "type": "package",
+ "path": "System.Security.Cryptography.Algorithms/4.2.0",
+ "files": [
+ "System.Security.Cryptography.Algorithms.4.2.0.nupkg.sha512",
+ "System.Security.Cryptography.Algorithms.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Security.Cryptography.Algorithms.dll",
+ "lib/net461/System.Security.Cryptography.Algorithms.dll",
+ "lib/net463/System.Security.Cryptography.Algorithms.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Security.Cryptography.Algorithms.dll",
+ "ref/net461/System.Security.Cryptography.Algorithms.dll",
+ "ref/net463/System.Security.Cryptography.Algorithms.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll",
+ "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll",
+ "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
+ "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll",
+ "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll",
+ "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll",
+ "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll",
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll"
+ ]
+ },
+ "System.Security.Cryptography.Cng/4.2.0": {
+ "sha512": "cUJ2h+ZvONDe28Szw3st5dOHdjndhJzQ2WObDEXAWRPEQBtVItVoxbXM/OEsTthl3cNn2dk2k0I3y45igCQcLw==",
+ "type": "package",
+ "path": "System.Security.Cryptography.Cng/4.2.0",
+ "files": [
+ "System.Security.Cryptography.Cng.4.2.0.nupkg.sha512",
+ "System.Security.Cryptography.Cng.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/net46/System.Security.Cryptography.Cng.dll",
+ "lib/net461/System.Security.Cryptography.Cng.dll",
+ "lib/net463/System.Security.Cryptography.Cng.dll",
+ "ref/net46/System.Security.Cryptography.Cng.dll",
+ "ref/net461/System.Security.Cryptography.Cng.dll",
+ "ref/net463/System.Security.Cryptography.Cng.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Cng.dll",
+ "ref/netstandard1.4/System.Security.Cryptography.Cng.dll",
+ "ref/netstandard1.6/System.Security.Cryptography.Cng.dll",
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll",
+ "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll",
+ "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll",
+ "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll",
+ "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll",
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll"
+ ]
+ },
+ "System.Security.Cryptography.Csp/4.0.0": {
+ "sha512": "/i1Usuo4PgAqgbPNC0NjbO3jPW//BoBlTpcWFD1EHVbidH21y4c1ap5bbEMSGAXjAShhMH4abi/K8fILrnu4BQ==",
+ "type": "package",
+ "path": "System.Security.Cryptography.Csp/4.0.0",
+ "files": [
+ "System.Security.Cryptography.Csp.4.0.0.nupkg.sha512",
+ "System.Security.Cryptography.Csp.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Security.Cryptography.Csp.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Security.Cryptography.Csp.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Csp.dll",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll",
+ "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll",
+ "runtimes/win/lib/netcore50/_._",
+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll"
+ ]
+ },
+ "System.Security.Cryptography.Encoding/4.0.0": {
+ "sha512": "FbKgE5MbxSQMPcSVRgwM6bXN3GtyAh04NkV8E5zKCBE26X0vYW0UtTa2FIgkH33WVqBVxRgxljlVYumWtU+HcQ==",
+ "type": "package",
+ "path": "System.Security.Cryptography.Encoding/4.0.0",
+ "files": [
+ "System.Security.Cryptography.Encoding.4.0.0.nupkg.sha512",
+ "System.Security.Cryptography.Encoding.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Security.Cryptography.Encoding.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Security.Cryptography.Encoding.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml",
+ "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll",
+ "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll",
+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll"
+ ]
+ },
+ "System.Security.Cryptography.OpenSsl/4.0.0": {
+ "sha512": "HUG/zNUJwEiLkoURDixzkzZdB5yGA5pQhDP93ArOpDPQMteURIGERRNzzoJlmTreLBWr5lkFSjjMSk8ySEpQMw==",
+ "type": "package",
+ "path": "System.Security.Cryptography.OpenSsl/4.0.0",
+ "files": [
+ "System.Security.Cryptography.OpenSsl.4.0.0.nupkg.sha512",
+ "System.Security.Cryptography.OpenSsl.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll",
+ "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll",
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll"
+ ]
+ },
+ "System.Security.Cryptography.Primitives/4.0.0": {
+ "sha512": "Wkd7QryWYjkQclX0bngpntW5HSlMzeJU24UaLJQ7YTfI8ydAVAaU2J+HXLLABOVJlKTVvAeL0Aj39VeTe7L+oA==",
+ "type": "package",
+ "path": "System.Security.Cryptography.Primitives/4.0.0",
+ "files": [
+ "System.Security.Cryptography.Primitives.4.0.0.nupkg.sha512",
+ "System.Security.Cryptography.Primitives.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Security.Cryptography.Primitives.dll",
+ "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Security.Cryptography.Primitives.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Security.Cryptography.X509Certificates/4.1.0": {
+ "sha512": "4HEfsQIKAhA1+ApNn729Gi09zh+lYWwyIuViihoMDWp1vQnEkL2ct7mAbhBlLYm+x/L4Rr/pyGge1lIY635e0w==",
+ "type": "package",
+ "path": "System.Security.Cryptography.X509Certificates/4.1.0",
+ "files": [
+ "System.Security.Cryptography.X509Certificates.4.1.0.nupkg.sha512",
+ "System.Security.Cryptography.X509Certificates.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net46/System.Security.Cryptography.X509Certificates.dll",
+ "lib/net461/System.Security.Cryptography.X509Certificates.dll",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net46/System.Security.Cryptography.X509Certificates.dll",
+ "ref/net461/System.Security.Cryptography.X509Certificates.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll",
+ "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll",
+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml",
+ "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll",
+ "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll",
+ "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll",
+ "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll",
+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll"
+ ]
+ },
+ "System.Text.Encoding/4.0.11": {
+ "sha512": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "type": "package",
+ "path": "System.Text.Encoding/4.0.11",
+ "files": [
+ "System.Text.Encoding.4.0.11.nupkg.sha512",
+ "System.Text.Encoding.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Text.Encoding.dll",
+ "ref/netcore50/System.Text.Encoding.xml",
+ "ref/netcore50/de/System.Text.Encoding.xml",
+ "ref/netcore50/es/System.Text.Encoding.xml",
+ "ref/netcore50/fr/System.Text.Encoding.xml",
+ "ref/netcore50/it/System.Text.Encoding.xml",
+ "ref/netcore50/ja/System.Text.Encoding.xml",
+ "ref/netcore50/ko/System.Text.Encoding.xml",
+ "ref/netcore50/ru/System.Text.Encoding.xml",
+ "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+ "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+ "ref/netstandard1.0/System.Text.Encoding.dll",
+ "ref/netstandard1.0/System.Text.Encoding.xml",
+ "ref/netstandard1.0/de/System.Text.Encoding.xml",
+ "ref/netstandard1.0/es/System.Text.Encoding.xml",
+ "ref/netstandard1.0/fr/System.Text.Encoding.xml",
+ "ref/netstandard1.0/it/System.Text.Encoding.xml",
+ "ref/netstandard1.0/ja/System.Text.Encoding.xml",
+ "ref/netstandard1.0/ko/System.Text.Encoding.xml",
+ "ref/netstandard1.0/ru/System.Text.Encoding.xml",
+ "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml",
+ "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml",
+ "ref/netstandard1.3/System.Text.Encoding.dll",
+ "ref/netstandard1.3/System.Text.Encoding.xml",
+ "ref/netstandard1.3/de/System.Text.Encoding.xml",
+ "ref/netstandard1.3/es/System.Text.Encoding.xml",
+ "ref/netstandard1.3/fr/System.Text.Encoding.xml",
+ "ref/netstandard1.3/it/System.Text.Encoding.xml",
+ "ref/netstandard1.3/ja/System.Text.Encoding.xml",
+ "ref/netstandard1.3/ko/System.Text.Encoding.xml",
+ "ref/netstandard1.3/ru/System.Text.Encoding.xml",
+ "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml",
+ "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Text.Encoding.Extensions/4.0.11": {
+ "sha512": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "type": "package",
+ "path": "System.Text.Encoding.Extensions/4.0.11",
+ "files": [
+ "System.Text.Encoding.Extensions.4.0.11.nupkg.sha512",
+ "System.Text.Encoding.Extensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Text.Encoding.Extensions.dll",
+ "ref/netcore50/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/de/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/es/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/fr/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/it/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/ja/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/ko/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/ru/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml",
+ "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/System.Text.Encoding.Extensions.dll",
+ "ref/netstandard1.0/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/System.Text.Encoding.Extensions.dll",
+ "ref/netstandard1.3/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml",
+ "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Text.RegularExpressions/4.1.0": {
+ "sha512": "i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==",
+ "type": "package",
+ "path": "System.Text.RegularExpressions/4.1.0",
+ "files": [
+ "System.Text.RegularExpressions.4.1.0.nupkg.sha512",
+ "System.Text.RegularExpressions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/net463/System.Text.RegularExpressions.dll",
+ "lib/netcore50/System.Text.RegularExpressions.dll",
+ "lib/netstandard1.6/System.Text.RegularExpressions.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/net463/System.Text.RegularExpressions.dll",
+ "ref/netcore50/System.Text.RegularExpressions.dll",
+ "ref/netcore50/System.Text.RegularExpressions.xml",
+ "ref/netcore50/de/System.Text.RegularExpressions.xml",
+ "ref/netcore50/es/System.Text.RegularExpressions.xml",
+ "ref/netcore50/fr/System.Text.RegularExpressions.xml",
+ "ref/netcore50/it/System.Text.RegularExpressions.xml",
+ "ref/netcore50/ja/System.Text.RegularExpressions.xml",
+ "ref/netcore50/ko/System.Text.RegularExpressions.xml",
+ "ref/netcore50/ru/System.Text.RegularExpressions.xml",
+ "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml",
+ "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/System.Text.RegularExpressions.dll",
+ "ref/netstandard1.0/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/de/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/es/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/it/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/System.Text.RegularExpressions.dll",
+ "ref/netstandard1.3/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/de/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/es/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/it/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/System.Text.RegularExpressions.dll",
+ "ref/netstandard1.6/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/de/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/es/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/it/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml",
+ "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Threading/4.0.11": {
+ "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "type": "package",
+ "path": "System.Threading/4.0.11",
+ "files": [
+ "System.Threading.4.0.11.nupkg.sha512",
+ "System.Threading.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Threading.dll",
+ "lib/netstandard1.3/System.Threading.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Threading.dll",
+ "ref/netcore50/System.Threading.xml",
+ "ref/netcore50/de/System.Threading.xml",
+ "ref/netcore50/es/System.Threading.xml",
+ "ref/netcore50/fr/System.Threading.xml",
+ "ref/netcore50/it/System.Threading.xml",
+ "ref/netcore50/ja/System.Threading.xml",
+ "ref/netcore50/ko/System.Threading.xml",
+ "ref/netcore50/ru/System.Threading.xml",
+ "ref/netcore50/zh-hans/System.Threading.xml",
+ "ref/netcore50/zh-hant/System.Threading.xml",
+ "ref/netstandard1.0/System.Threading.dll",
+ "ref/netstandard1.0/System.Threading.xml",
+ "ref/netstandard1.0/de/System.Threading.xml",
+ "ref/netstandard1.0/es/System.Threading.xml",
+ "ref/netstandard1.0/fr/System.Threading.xml",
+ "ref/netstandard1.0/it/System.Threading.xml",
+ "ref/netstandard1.0/ja/System.Threading.xml",
+ "ref/netstandard1.0/ko/System.Threading.xml",
+ "ref/netstandard1.0/ru/System.Threading.xml",
+ "ref/netstandard1.0/zh-hans/System.Threading.xml",
+ "ref/netstandard1.0/zh-hant/System.Threading.xml",
+ "ref/netstandard1.3/System.Threading.dll",
+ "ref/netstandard1.3/System.Threading.xml",
+ "ref/netstandard1.3/de/System.Threading.xml",
+ "ref/netstandard1.3/es/System.Threading.xml",
+ "ref/netstandard1.3/fr/System.Threading.xml",
+ "ref/netstandard1.3/it/System.Threading.xml",
+ "ref/netstandard1.3/ja/System.Threading.xml",
+ "ref/netstandard1.3/ko/System.Threading.xml",
+ "ref/netstandard1.3/ru/System.Threading.xml",
+ "ref/netstandard1.3/zh-hans/System.Threading.xml",
+ "ref/netstandard1.3/zh-hant/System.Threading.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._",
+ "runtimes/aot/lib/netcore50/System.Threading.dll"
+ ]
+ },
+ "System.Threading.Tasks/4.0.11": {
+ "sha512": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "type": "package",
+ "path": "System.Threading.Tasks/4.0.11",
+ "files": [
+ "System.Threading.Tasks.4.0.11.nupkg.sha512",
+ "System.Threading.Tasks.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Threading.Tasks.dll",
+ "ref/netcore50/System.Threading.Tasks.xml",
+ "ref/netcore50/de/System.Threading.Tasks.xml",
+ "ref/netcore50/es/System.Threading.Tasks.xml",
+ "ref/netcore50/fr/System.Threading.Tasks.xml",
+ "ref/netcore50/it/System.Threading.Tasks.xml",
+ "ref/netcore50/ja/System.Threading.Tasks.xml",
+ "ref/netcore50/ko/System.Threading.Tasks.xml",
+ "ref/netcore50/ru/System.Threading.Tasks.xml",
+ "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+ "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/System.Threading.Tasks.dll",
+ "ref/netstandard1.0/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/de/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/es/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/fr/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/it/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/ja/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/ko/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/ru/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml",
+ "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/System.Threading.Tasks.dll",
+ "ref/netstandard1.3/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/de/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/es/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/fr/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/it/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/ja/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/ko/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/ru/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml",
+ "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Threading.Tasks.Extensions/4.0.0": {
+ "sha512": "pH4FZDsZQ/WmgJtN4LWYmRdJAEeVkyriSwrv2Teoe5FOU0Yxlb6II6GL8dBPOfRmutHGATduj3ooMt7dJ2+i+w==",
+ "type": "package",
+ "path": "System.Threading.Tasks.Extensions/4.0.0",
+ "files": [
+ "System.Threading.Tasks.Extensions.4.0.0.nupkg.sha512",
+ "System.Threading.Tasks.Extensions.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll",
+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml",
+ "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll",
+ "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml"
+ ]
+ },
+ "System.Threading.Timer/4.0.1": {
+ "sha512": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==",
+ "type": "package",
+ "path": "System.Threading.Timer/4.0.1",
+ "files": [
+ "System.Threading.Timer.4.0.1.nupkg.sha512",
+ "System.Threading.Timer.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net451/_._",
+ "lib/portable-net451+win81+wpa81/_._",
+ "lib/win81/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net451/_._",
+ "ref/netcore50/System.Threading.Timer.dll",
+ "ref/netcore50/System.Threading.Timer.xml",
+ "ref/netcore50/de/System.Threading.Timer.xml",
+ "ref/netcore50/es/System.Threading.Timer.xml",
+ "ref/netcore50/fr/System.Threading.Timer.xml",
+ "ref/netcore50/it/System.Threading.Timer.xml",
+ "ref/netcore50/ja/System.Threading.Timer.xml",
+ "ref/netcore50/ko/System.Threading.Timer.xml",
+ "ref/netcore50/ru/System.Threading.Timer.xml",
+ "ref/netcore50/zh-hans/System.Threading.Timer.xml",
+ "ref/netcore50/zh-hant/System.Threading.Timer.xml",
+ "ref/netstandard1.2/System.Threading.Timer.dll",
+ "ref/netstandard1.2/System.Threading.Timer.xml",
+ "ref/netstandard1.2/de/System.Threading.Timer.xml",
+ "ref/netstandard1.2/es/System.Threading.Timer.xml",
+ "ref/netstandard1.2/fr/System.Threading.Timer.xml",
+ "ref/netstandard1.2/it/System.Threading.Timer.xml",
+ "ref/netstandard1.2/ja/System.Threading.Timer.xml",
+ "ref/netstandard1.2/ko/System.Threading.Timer.xml",
+ "ref/netstandard1.2/ru/System.Threading.Timer.xml",
+ "ref/netstandard1.2/zh-hans/System.Threading.Timer.xml",
+ "ref/netstandard1.2/zh-hant/System.Threading.Timer.xml",
+ "ref/portable-net451+win81+wpa81/_._",
+ "ref/win81/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Xml.ReaderWriter/4.0.11": {
+ "sha512": "ZIiLPsf67YZ9zgr31vzrFaYQqxRPX9cVHjtPSnmx4eN6lbS/yEyYNr2vs1doGDEscF0tjCZFsk9yUg1sC9e8tg==",
+ "type": "package",
+ "path": "System.Xml.ReaderWriter/4.0.11",
+ "files": [
+ "System.Xml.ReaderWriter.4.0.11.nupkg.sha512",
+ "System.Xml.ReaderWriter.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Xml.ReaderWriter.dll",
+ "lib/netstandard1.3/System.Xml.ReaderWriter.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Xml.ReaderWriter.dll",
+ "ref/netcore50/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/de/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/es/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/fr/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/it/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/ja/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/ko/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/ru/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml",
+ "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/System.Xml.ReaderWriter.dll",
+ "ref/netstandard1.0/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/System.Xml.ReaderWriter.dll",
+ "ref/netstandard1.3/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml",
+ "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ },
+ "System.Xml.XDocument/4.0.11": {
+ "sha512": "Mk2mKmPi0nWaoiYeotq1dgeNK1fqWh61+EK+w4Wu8SWuTYLzpUnschb59bJtGywaPq7SmTuPf44wrXRwbIrukg==",
+ "type": "package",
+ "path": "System.Xml.XDocument/4.0.11",
+ "files": [
+ "System.Xml.XDocument.4.0.11.nupkg.sha512",
+ "System.Xml.XDocument.nuspec",
+ "ThirdPartyNotices.txt",
+ "dotnet_library_license.txt",
+ "lib/MonoAndroid10/_._",
+ "lib/MonoTouch10/_._",
+ "lib/net45/_._",
+ "lib/netcore50/System.Xml.XDocument.dll",
+ "lib/netstandard1.3/System.Xml.XDocument.dll",
+ "lib/portable-net45+win8+wp8+wpa81/_._",
+ "lib/win8/_._",
+ "lib/wp80/_._",
+ "lib/wpa81/_._",
+ "lib/xamarinios10/_._",
+ "lib/xamarinmac20/_._",
+ "lib/xamarintvos10/_._",
+ "lib/xamarinwatchos10/_._",
+ "ref/MonoAndroid10/_._",
+ "ref/MonoTouch10/_._",
+ "ref/net45/_._",
+ "ref/netcore50/System.Xml.XDocument.dll",
+ "ref/netcore50/System.Xml.XDocument.xml",
+ "ref/netcore50/de/System.Xml.XDocument.xml",
+ "ref/netcore50/es/System.Xml.XDocument.xml",
+ "ref/netcore50/fr/System.Xml.XDocument.xml",
+ "ref/netcore50/it/System.Xml.XDocument.xml",
+ "ref/netcore50/ja/System.Xml.XDocument.xml",
+ "ref/netcore50/ko/System.Xml.XDocument.xml",
+ "ref/netcore50/ru/System.Xml.XDocument.xml",
+ "ref/netcore50/zh-hans/System.Xml.XDocument.xml",
+ "ref/netcore50/zh-hant/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/System.Xml.XDocument.dll",
+ "ref/netstandard1.0/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/de/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/es/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/fr/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/it/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/ja/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/ko/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/ru/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml",
+ "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/System.Xml.XDocument.dll",
+ "ref/netstandard1.3/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/de/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/es/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/fr/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/it/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/ja/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/ko/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/ru/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml",
+ "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml",
+ "ref/portable-net45+win8+wp8+wpa81/_._",
+ "ref/win8/_._",
+ "ref/wp80/_._",
+ "ref/wpa81/_._",
+ "ref/xamarinios10/_._",
+ "ref/xamarinmac20/_._",
+ "ref/xamarintvos10/_._",
+ "ref/xamarinwatchos10/_._"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ "": [],
+ ".NETPortable,Version=v4.5,Profile=Profile7": [],
+ ".NETStandard,Version=v1.6": [
+ "NETStandard.Library >= 1.6.0"
+ ]
+ }
+} \ No newline at end of file