コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }