sources/Google.Solutions.IapDesktop.Extensions.Session/Settings/TerminalSettingsRepository.cs (43 lines of code) (raw):
//
// Copyright 2024 Google LLC
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
using Google.Solutions.Common.Util;
using Google.Solutions.IapDesktop.Application.Profile;
using Google.Solutions.IapDesktop.Core.ObjectModel;
using Google.Solutions.Mvvm.Controls;
using Google.Solutions.Settings;
using Google.Solutions.Settings.Collection;
using Microsoft.Win32;
using System;
namespace Google.Solutions.IapDesktop.Extensions.Session.Settings
{
public interface ITerminalSettingsRepository : IRepository<ITerminalSettings>
{
event EventHandler<EventArgs<ITerminalSettings>> SettingsChanged;
}
/// <summary>
/// Registry-backed repository for terminal settings.
///
/// Service is a singleton so that objects can subscribe to events.
/// </summary>
[Service(typeof(ITerminalSettingsRepository), ServiceLifetime.Singleton)]
public class TerminalSettingsRepository
: RepositoryBase<ITerminalSettings>, ITerminalSettingsRepository
{
public event EventHandler<EventArgs<ITerminalSettings>>? SettingsChanged;
public TerminalSettingsRepository(RegistryKey key)
: this(new RegistrySettingsStore(key))
{
}
public TerminalSettingsRepository(ISettingsStore store) : base(store)
{
}
public TerminalSettingsRepository(UserProfile profile)
: this(new RegistrySettingsStore(profile
.ExpectNotNull(nameof(profile))
.SettingsKey
.CreateSubKey("Terminal")))
{
}
protected override ITerminalSettings LoadSettings(ISettingsStore store)
=> new TerminalSettings(store);
public override void SetSettings(ITerminalSettings settings)
{
base.SetSettings(settings);
this.SettingsChanged?.Invoke(this, new EventArgs<ITerminalSettings>(settings));
}
}
}