Admin mode WIP

This commit is contained in:
2023-07-26 10:24:22 +02:00
parent ba1210b2c4
commit 0c49071a3b
46 changed files with 695 additions and 55 deletions

View File

@@ -1,5 +1,6 @@
using Avalonia.Input;
using FileTime.App.Core.UserCommand;
using FileTime.Providers.LocalAdmin;
namespace FileTime.GuiApp.Configuration;
@@ -7,17 +8,21 @@ public static class MainConfiguration
{
private static readonly Lazy<List<CommandBindingConfiguration>> _defaultKeybindings = new(InitDefaultKeyBindings);
public static Dictionary<string, string> Configuration { get; }
public static Dictionary<string, string?> Configuration { get; }
static MainConfiguration()
{
Configuration = new();
Configuration = new()
{
{AdminElevationConfiguration.SectionName + ":" + nameof(AdminElevationConfiguration.ServerExecutablePath), "FileTime.Server.exe"},
};
PopulateDefaultEditorPrograms(Configuration);
PopulateDefaultKeyBindings(Configuration, _defaultKeybindings.Value,
SectionNames.KeybindingSectionName + ":" + nameof(KeyBindingConfiguration.DefaultKeyBindings));
}
private static void PopulateDefaultKeyBindings(Dictionary<string, string> configuration,
private static void PopulateDefaultKeyBindings(Dictionary<string, string?> configuration,
List<CommandBindingConfiguration> commandBindingConfigs, string basePath)
{
for (var i = 0; i < commandBindingConfigs.Count; i++)
@@ -113,7 +118,7 @@ public static class MainConfiguration
//new CommandBindingConfiguration(ConfigCommand.ToggleAdvancedIcons, new[] { Key.Z, Key.I }),
};
private static void PopulateDefaultEditorPrograms(Dictionary<string, string> configuration)
private static void PopulateDefaultEditorPrograms(Dictionary<string, string?> configuration)
{
var editorPrograms = new List<ProgramConfiguration>()
{

View File

@@ -22,6 +22,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\AppCommon\FileTime.App.Core.Abstraction\FileTime.App.Core.Abstraction.csproj" />
<ProjectReference Include="..\..\..\Core\FileTime.Core.Models\FileTime.Core.Models.csproj" />
<ProjectReference Include="..\..\..\Providers\FileTime.Providers.LocalAdmin.Abstractions\FileTime.Providers.LocalAdmin.Abstractions.csproj" />
</ItemGroup>
</Project>

View File

@@ -8,6 +8,7 @@ using FileTime.App.Search;
using FileTime.GuiApp.Font;
using FileTime.GuiApp.ViewModels;
using FileTime.GuiApp.Views;
using FileTime.Server.Common;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@@ -19,7 +20,8 @@ public class App : Application
{
var configuration = Startup.CreateConfiguration();
DI.ServiceProvider = DependencyInjection
.RegisterDefaultServices()
.RegisterDefaultServices(configuration: configuration)
.AddRemoteServices()
.AddFrequencyNavigation()
.AddCommandPalette()
.AddSearch()

View File

@@ -52,4 +52,7 @@
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<Content Include="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<Content Include="appsettings.Local.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Project>

View File

@@ -1,4 +1,3 @@
using System;
using System.IO;
using System.Runtime.InteropServices;
using FileTime.App.Core.Services;
@@ -14,7 +13,6 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Serilog;
using Serilog.Configuration;
namespace FileTime.GuiApp.App;
@@ -25,7 +23,8 @@ public static class Startup
var configurationBuilder = new ConfigurationBuilder()
.AddInMemoryCollection(MainConfiguration.Configuration)
.AddJsonFile("appsettings.json", optional: true)
.AddJsonFile($"appsettings.{Program.EnvironmentName}.json", true);
.AddJsonFile($"appsettings.{Program.EnvironmentName}.json", true)
.AddJsonFile("appsettings.Local.json", optional: true);
var configurationDirectory = new DirectoryInfo(Path.Combine(Program.AppDataRoot, "config"));
if (configurationDirectory.Exists)

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,12H19C18.47,16.11 15.72,19.78 12,20.92V12H5V6.3L12,3.19M12,1L3,5V11C3,16.55 6.84,21.73 12,23C17.16,21.73 21,16.55 21,11V5L12,1Z" /></svg>

After

Width:  |  Height:  |  Size: 210 B

View File

@@ -42,6 +42,7 @@
<ProjectReference Include="..\..\..\AppCommon\FileTime.App.Core.Abstraction\FileTime.App.Core.Abstraction.csproj" />
<ProjectReference Include="..\..\..\AppCommon\FileTime.App.FrequencyNavigation.Abstractions\FileTime.App.FrequencyNavigation.Abstractions.csproj" />
<ProjectReference Include="..\..\..\Providers\FileTime.Providers.Local.Abstractions\FileTime.Providers.Local.Abstractions.csproj" />
<ProjectReference Include="..\..\..\Providers\FileTime.Providers.LocalAdmin.Abstractions\FileTime.Providers.LocalAdmin.Abstractions.csproj" />
<ProjectReference Include="..\FileTime.GuiApp.Abstractions\FileTime.GuiApp.Abstractions.csproj" />
<ProjectReference Include="..\FileTime.GuiApp.DesignPreview\FileTime.GuiApp.DesignPreview.csproj" />
<ProjectReference Include="..\FileTime.GuiApp.Font.Abstractions\FileTime.GuiApp.Font.Abstractions.csproj" />

View File

@@ -2,6 +2,7 @@
using FileTime.App.Core.Services;
using FileTime.App.FrequencyNavigation.Services;
using FileTime.GuiApp.Services;
using FileTime.Providers.LocalAdmin;
namespace FileTime.GuiApp.ViewModels;
@@ -13,5 +14,6 @@ public interface IMainWindowViewModel : IMainWindowViewModelBase
IDialogService DialogService { get; }
IFrequencyNavigationService FrequencyNavigationService { get; }
ICommandPaletteService CommandPaletteService { get; }
public IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
IRefreshSmoothnessCalculator RefreshSmoothnessCalculator { get; }
IAdminElevationManager AdminElevationManager { get; }
}

View File

@@ -9,6 +9,7 @@ using FileTime.Core.Models;
using FileTime.Core.Timeline;
using FileTime.GuiApp.Services;
using FileTime.Providers.Local;
using FileTime.Providers.LocalAdmin;
using Microsoft.Extensions.Logging;
using MvvmGen;
@@ -29,6 +30,7 @@ namespace FileTime.GuiApp.ViewModels;
[Inject(typeof(IFrequencyNavigationService), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(ICommandPaletteService), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(IRefreshSmoothnessCalculator), PropertyAccessModifier = AccessModifier.Public)]
[Inject(typeof(IAdminElevationManager), PropertyAccessModifier = AccessModifier.Public)]
public partial class MainWindowViewModel : IMainWindowViewModel
{
public bool Loading => false;

View File

@@ -62,10 +62,24 @@
<Grid Grid.Column="1" PointerPressed="HeaderPointerPressed">
<Rectangle Fill="#01000000" />
<StackPanel Margin="20,10" Orientation="Horizontal">
<local:PathPresenter DataContext="{Binding AppState.SelectedTab^.CurrentLocation^.FullName.Path, Converter={StaticResource PathPreformatter}}" />
<TextBlock Foreground="{StaticResource AccentBrush}" Text="{Binding AppState.SelectedTab^.CurrentSelectedItem.Value.DisplayNameText}" />
</StackPanel>
<Grid ColumnDefinitions="*, Auto">
<StackPanel Margin="20,10" Orientation="Horizontal">
<local:PathPresenter DataContext="{Binding AppState.SelectedTab^.CurrentLocation^.FullName.Path, Converter={StaticResource PathPreformatter}}" />
<TextBlock Foreground="{StaticResource AccentBrush}" Text="{Binding AppState.SelectedTab^.CurrentSelectedItem.Value.DisplayNameText}" />
</StackPanel>
<StackPanel
Grid.Column="1"
Margin="20,10,160,10"
Orientation="Vertical">
<Image
Height="20"
HorizontalAlignment="Left"
IsVisible="{Binding AdminElevationManager.IsAdminInstanceRunning}"
Source="{SvgImage /Assets/material/security.svg}"
VerticalAlignment="Center"
Width="20" />
</StackPanel>
</Grid>
</Grid>
<Grid Grid.Row="1" RowDefinitions="Auto,Auto,Auto,Auto">