Merge pull request #5005 from jellyfin/bytes

JsonSerializer deserialize from bytes where possible
pull/5171/head
dkanada 3 years ago committed by GitHub
commit 54a3ab15a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -336,19 +336,19 @@ namespace Emby.Server.Implementations.Channels
return GetChannel(GetInternalChannelId(channel.Name)) ?? GetChannel(channel, CancellationToken.None).Result;
}
private List<MediaSourceInfo> GetSavedMediaSources(BaseItem item)
private MediaSourceInfo[] GetSavedMediaSources(BaseItem item)
{
var path = Path.Combine(item.GetInternalMetadataPath(), "channelmediasourceinfos.json");
try
{
var jsonString = File.ReadAllText(path, Encoding.UTF8);
return JsonSerializer.Deserialize<List<MediaSourceInfo>>(jsonString, _jsonOptions)
?? new List<MediaSourceInfo>();
var bytes = File.ReadAllBytes(path);
return JsonSerializer.Deserialize<MediaSourceInfo[]>(bytes, _jsonOptions)
?? Array.Empty<MediaSourceInfo>();
}
catch
{
return new List<MediaSourceInfo>();
return Array.Empty<MediaSourceInfo>();
}
}

@ -47,11 +47,11 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
try
{
var jsonString = File.ReadAllText(_dataPath, Encoding.UTF8);
_items = JsonSerializer.Deserialize<T[]>(jsonString, _jsonOptions);
var bytes = File.ReadAllBytes(_dataPath);
_items = JsonSerializer.Deserialize<T[]>(bytes, _jsonOptions);
return;
}
catch (Exception ex)
catch (JsonException ex)
{
Logger.LogError(ex, "Error deserializing {Path}", _dataPath);
}

@ -526,32 +526,36 @@ namespace Emby.Server.Implementations.Plugins
var metafile = Path.Combine(dir, "meta.json");
if (File.Exists(metafile))
{
// Only path where this stays null is when File.ReadAllBytes throws an IOException
byte[] data = null!;
try
{
var data = File.ReadAllText(metafile, Encoding.UTF8);
data = File.ReadAllBytes(metafile);
manifest = JsonSerializer.Deserialize<PluginManifest>(data, _jsonOptions);
}
#pragma warning disable CA1031 // Do not catch general exception types
catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
catch (IOException ex)
{
_logger.LogError(ex, "Error deserializing {Path}.", dir);
_logger.LogError(ex, "Error reading file {Path}.", dir);
}
}
if (manifest != null)
{
if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
catch (JsonException ex)
{
targetAbi = _minimumVersion;
_logger.LogError(ex, "Error deserializing {Json}.", Encoding.UTF8.GetString(data!));
}
if (!Version.TryParse(manifest.Version, out version))
if (manifest != null)
{
manifest.Version = _minimumVersion.ToString();
}
if (!Version.TryParse(manifest.TargetAbi, out var targetAbi))
{
targetAbi = _minimumVersion;
}
if (!Version.TryParse(manifest.Version, out version))
{
manifest.Version = _minimumVersion.ToString();
}
return new LocalPlugin(dir, _appVersion >= targetAbi, manifest);
return new LocalPlugin(dir, _appVersion >= targetAbi, manifest);
}
}
// No metafile, so lets see if the folder is versioned.

@ -143,21 +143,21 @@ namespace Emby.Server.Implementations.ScheduledTasks
{
if (File.Exists(path))
{
try
var bytes = File.ReadAllBytes(path);
if (bytes.Length > 0)
{
var jsonString = File.ReadAllText(path, Encoding.UTF8);
if (!string.IsNullOrWhiteSpace(jsonString))
try
{
_lastExecutionResult = JsonSerializer.Deserialize<TaskResult>(jsonString, _jsonOptions);
_lastExecutionResult = JsonSerializer.Deserialize<TaskResult>(bytes, _jsonOptions);
}
else
catch (JsonException ex)
{
_logger.LogDebug("Scheduled Task history file {Path} is empty. Skipping deserialization.", path);
_logger.LogError(ex, "Error deserializing {File}", path);
}
}
catch (Exception ex)
else
{
_logger.LogError(ex, "Error deserializing {File}", path);
_logger.LogDebug("Scheduled Task history file {Path} is empty. Skipping deserialization.", path);
}
}
@ -541,8 +541,8 @@ namespace Emby.Server.Implementations.ScheduledTasks
TaskTriggerInfo[] list = null;
if (File.Exists(path))
{
var jsonString = File.ReadAllText(path, Encoding.UTF8);
list = JsonSerializer.Deserialize<TaskTriggerInfo[]>(jsonString, _jsonOptions);
var bytes = File.ReadAllBytes(path);
list = JsonSerializer.Deserialize<TaskTriggerInfo[]>(bytes, _jsonOptions);
}
// Return defaults if file doesn't exist.

@ -90,7 +90,7 @@ namespace Jellyfin.Server.Migrations.Routines
var results = connection.Query("SELECT * FROM userdisplaypreferences");
foreach (var result in results)
{
var dto = JsonSerializer.Deserialize<DisplayPreferencesDto>(result[3].ToString(), _jsonOptions);
var dto = JsonSerializer.Deserialize<DisplayPreferencesDto>(result[3].ToBlob(), _jsonOptions);
if (dto == null)
{
continue;

Loading…
Cancel
Save