private RokuDefinition MergeRoku(IRokuRemote roku, string name) { RokuDefinition result; var rokuIp = roku.Url.Host; if (_rokus.ContainsKey(roku.Info.Id)) { //Updating an existing entry. Logger.LogInformation("Merging existing Roku #{id} into list."); result = _rokus[roku.Info.Id]; //Override the name and ip. result.Name = !string.IsNullOrWhiteSpace(name?.Trim()) ? name.Trim() : result.Name; result.IPAddress = rokuIp; } else { //Adding a new entry. Logger.LogInformation("Adding Roku #{id} to list."); //First use the name parameter, then use the Roku's name, if neither then no name. var rokuName = !string.IsNullOrWhiteSpace(name?.Trim()) ? name.Trim() : !string.IsNullOrEmpty(roku.Info.UserDeviceName) ? roku.Info.UserDeviceName : null; result = new RokuDefinition { Id = roku.Info.Id, Name = rokuName, IPAddress = rokuIp, Roku = roku }; _rokus[result.Id] = result; } Logger.LogInformation("Name: {name}, IP: {ip}", result.Name, result.IPAddress); return(result); }
public async Task <RokuDefinition> AddRokuAsync(IPAddress ip, string name = null) { using (Logger.BeginScope("AddRokuAsync")) { Logger.LogInformation("ip: {ip}, name: {name}", ip, name); var roku = await DiscoverRoku(ip); if (roku == null) { return(null); } RokuDefinition result = null; lock (_lockObj) { result = MergeRoku(roku, name); SerializeRokus(); } return(result); } }