| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 
							- #pragma warning disable CS1591
 
- using System;
 
- using System.Globalization;
 
- using System.IO;
 
- using System.Text;
 
- using MediaBrowser.Common.Configuration;
 
- using Microsoft.Extensions.Logging;
 
- namespace Emby.Server.Implementations.Devices
 
- {
 
-     public class DeviceId
 
-     {
 
-         private readonly IApplicationPaths _appPaths;
 
-         private readonly ILogger<DeviceId> _logger;
 
-         private readonly object _syncLock = new object();
 
-         private string? _id;
 
-         public DeviceId(IApplicationPaths appPaths, ILogger<DeviceId> logger)
 
-         {
 
-             _appPaths = appPaths;
 
-             _logger = logger;
 
-         }
 
-         public string Value => _id ??= GetDeviceId();
 
-         private string CachePath => Path.Combine(_appPaths.DataPath, "device.txt");
 
-         private string? GetCachedId()
 
-         {
 
-             try
 
-             {
 
-                 lock (_syncLock)
 
-                 {
 
-                     var value = File.ReadAllText(CachePath, Encoding.UTF8);
 
-                     if (Guid.TryParse(value, out _))
 
-                     {
 
-                         return value;
 
-                     }
 
-                     _logger.LogError("Invalid value found in device id file");
 
-                 }
 
-             }
 
-             catch (DirectoryNotFoundException)
 
-             {
 
-             }
 
-             catch (FileNotFoundException)
 
-             {
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 _logger.LogError(ex, "Error reading file");
 
-             }
 
-             return null;
 
-         }
 
-         private void SaveId(string id)
 
-         {
 
-             try
 
-             {
 
-                 var path = CachePath;
 
-                 Directory.CreateDirectory(Path.GetDirectoryName(path) ?? throw new InvalidOperationException("Path can't be a root directory."));
 
-                 lock (_syncLock)
 
-                 {
 
-                     File.WriteAllText(path, id, Encoding.UTF8);
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 _logger.LogError(ex, "Error writing to file");
 
-             }
 
-         }
 
-         private static string GetNewId()
 
-         {
 
-             return Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture);
 
-         }
 
-         private string GetDeviceId()
 
-         {
 
-             var id = GetCachedId();
 
-             if (string.IsNullOrWhiteSpace(id))
 
-             {
 
-                 id = GetNewId();
 
-                 SaveId(id);
 
-             }
 
-             return id;
 
-         }
 
-     }
 
- }
 
 
  |