public ServerSettingDto Convert(IEnumerable <ServerSetting> source, ServerSettingDto destination, ResolutionContext context) { destination ??= new ServerSettingDto(); foreach (var row in source) { switch (row.Key) { case ServerSettingKey.CacheDirectory: destination.CacheDirectory = row.Value; break; case ServerSettingKey.TaskScan: destination.TaskScan = row.Value; break; case ServerSettingKey.LoggingLevel: destination.LoggingLevel = row.Value; break; case ServerSettingKey.TaskBackup: destination.TaskBackup = row.Value; break; case ServerSettingKey.Port: destination.Port = int.Parse(row.Value); break; } } return(destination); }
public async Task <ActionResult <ServerSettingDto> > UpdateSettings(ServerSettingDto updateSettingsDto) { _logger.LogInformation("{UserName} is updating Server Settings", User.GetUsername()); if (updateSettingsDto.CacheDirectory.Equals(string.Empty)) { return(BadRequest("Cache Directory cannot be empty")); } if (!Directory.Exists(updateSettingsDto.CacheDirectory)) { return(BadRequest("Directory does not exist or is not accessible.")); } // We do not allow CacheDirectory changes, so we will ignore. var currentSettings = await _unitOfWork.SettingsRepository.GetSettingsAsync(); var logLevelOptions = new LogLevelOptions(); _configuration.GetSection("Logging:LogLevel").Bind(logLevelOptions); foreach (var setting in currentSettings) { if (setting.Key == ServerSettingKey.TaskBackup && updateSettingsDto.TaskBackup != setting.Value) { setting.Value = updateSettingsDto.TaskBackup; _unitOfWork.SettingsRepository.Update(setting); } if (setting.Key == ServerSettingKey.TaskScan && updateSettingsDto.TaskScan != setting.Value) { setting.Value = updateSettingsDto.TaskScan; _unitOfWork.SettingsRepository.Update(setting); } if (setting.Key == ServerSettingKey.Port && updateSettingsDto.Port + "" != setting.Value) { setting.Value = updateSettingsDto.Port + ""; Environment.SetEnvironmentVariable("KAVITA_PORT", setting.Value); _unitOfWork.SettingsRepository.Update(setting); } if (setting.Key == ServerSettingKey.LoggingLevel && updateSettingsDto.LoggingLevel + "" != setting.Value) { setting.Value = updateSettingsDto.LoggingLevel + ""; _unitOfWork.SettingsRepository.Update(setting); } } _configuration.GetSection("Logging:LogLevel:Default").Value = updateSettingsDto.LoggingLevel + ""; if (!_unitOfWork.HasChanges()) { return(Ok("Nothing was updated")); } if (!_unitOfWork.HasChanges() || !await _unitOfWork.Complete()) { return(BadRequest("There was a critical issue. Please try again.")); } _logger.LogInformation("Server Settings updated"); _taskScheduler.ScheduleTasks(); return(Ok(updateSettingsDto)); }